Format of TProcessID record in release 3.02.06. Will be present if there are any referenced objects.
----------TKey--------------- byte 0->3 Nbytes = Number of bytes in compressed record (Tkey+data) TKey::fNbytes 4->5 Version = TKey class version identifier TKey::fVersion 6->9 ObjLen = Number of bytes of uncompressed data TKey::fObjLen 10->13 Datime = Date and time when record was written to file TKey::fDatime | (year-1995)<<26|month<<22|day<<17|hour<<12|minute<<6|second 14->15 KeyLen = Number of bytes in key structure (TKey) TKey::fKeyLen 16->17 Cycle = Cycle of key TKey::fCycle 18->21 SeekKey = Byte offset of record itself (consistency check) TKey::fSeekKey 22->25 SeekPdir = Byte offset of parent directory record TKey::fSeekPdir 26->26 lname = Number of bytes in the class name (10) TKey::fClassName 27->36 ClassName= Object Class Name ("TProcessID") TKey::fClassName 37->37 lname = Number of bytes in the object name TNamed::fName 38->.. Name = lName bytes with the name of the object TNamed::fName | (e.g. "ProcessID0") 0->0 lTitle = Number of bytes in the object title TNamed::fTitle 1->.. Title = lTitle bytes with the title of the object TNamed::fTitle | (Identifies processor, time stamp, etc.) | See detailed explanation below. ----------DATA-------------- 0->3 ByteCount = Number of remaining bytes in TProcessID object (uncompressed) | OR'd with kByteCountMask (0x40000000) 4->5 Version = Version of TProcessID Class -Begin TNamed object (Base class of TProcessID) 6->9 ByteCount = Number of remaining bytes in TNamed object (uncompressed) | OR'd with kByteCountMask (0x40000000) 10->11 Version = Version of TNamed Class 12->21 = TObject object (Base class of TNamed) (see Format of the DATA for a TObject object). | The TProcessID object is not itself referenced. 22->22 lname = Number of bytes in the object name TNamed::fName 23->.. Name = lName bytes with the name of the object TNamed::fName | The name will be "ProcessID" concatenated with | a decimal integer, or "pidf". 0->0 lTitle = Number of bytes in the object title TNamed::fTitle 1->.. Title = lTitle bytes with the title of the object TNamed::fTitle | (Identifies processor, time stamp, etc.) | See detailed explanation below. -End TNamed object
The title of a TProcessID object is a globally unique identifier of the ROOTIO process that created it. It is derived from the following quantities.
We the define the following quantities (class TUUID):
UInt_t fTimeLow; // 60 bit time, lowest 32 bits UShort_t fTimeMid; // 60 bit time, middle 16 bits UShort_t fTimeHiAndVersion; // 60 bit time, highest 12 time bits (low 12 bits) // + 4 UUID version bits (high 4 bits) // version is 1 if machine has valid network address // and 3 otherwise. UChar_t fClockSeqHiAndReserved; // high 6 clockseq bits (low 6 bits) // + 2 high bits reserved (currently set to binary 10) UChar_t fClockSeqLow; // low 8 clockseq bits UChar_t fNode[6]; // 6 node (machine) id bytes
Then the following sprintf() call defines the format of the title string:
sprintf(Title, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", fTimeLow, fTimeMid, fTimeHiAndVersion, fClockSeqHiAndReserved, fClockSeqLow, fNode[0], fNode[1], fNode[2], fNode[3], fNode[4], fNode[5]);
Since the title written to disk is preceded by its byte count, the delimiting null is not written.