TClonesArray

TClonesArray.txt

// -Here is the format (release 3.02.06)  of the DATA for a TClonesArray object in a ROOTIO file.
//      0->3  ByteCount = Number of remaining bytes in TClonesArray object (uncompressed)
//                      |   OR'd with kByteCountMask (0x40000000)
//      4->.. ClassInfo = Information about TClonesArray class
//                      | If this is the first occurrence of a TClonesArray object in the record
//                      |  4->7  -1        = New class tag (constant kNewClassTag = 0xffffffff)
//                      |  8->17 Classname = Object Class Name "TClonesArray" (null terminated)
//                      | Otherwise
//                      |  4->7 clIdx      = Byte offset of new class tag in record, plus 2.
//                      | OR'd with kClassMask (0x80000000)
//      0->3  ByteCount = Number of remaining bytes in TClonesArray object (uncompressed)
//                      |   OR'd with kByteCountMask (0x40000000)
//      4->5  Version   = Version of TClonesArray Class
//      6->15           = TObject object (a base class of TClonesArray) (see tobject.txt).
//                      |   Would be two bytes longer (6->17) if object were referenced.
//     16->.. fName     = Number of bytes in name of TClonesArray object, followed by the
//                      |   name itself.  (TCollection::fName).  This name will be the
//                      |   class name of the cloned object, appended with an 's'
//                      |   (e.g. "TXxxs")
//      0->..           = Number of bytes in name and version of the cloned class, followed
//                      |   by the name and version themselves (e.g. "TXxx;1")
//      0->3  nObjects  = Number of objects in clones array.
//      4->7  fLowerBound= Lower bound of clones array.
//      8->.. objects   = Sequentially, objects in the clones array.  However, the data
//                      |   ordering depends on whether or not kBypassStreamer (0x1000) is
//                      |   set in TObject::fBits.   By default, it is set.  If it is not set,
//                      |   the objects are streamed sequentially using the streamer of the
//                      |   cloned class (e.g. TXxx::Streamer()).
//                      |
//                      |   If it is set, the cloned class is split into its base classes and
//                      |   persistent data members, and those streamers are used.  So, if the
//                      |   base classes and persistent data members of class TXxx are TXxxbase,
//                      |   TXxxdata0, TXxxdata1, etc.,  all the TXxxbase data from the entire
//                      |   clones array is streamed first, followed by all the TXxxdata0 data,
//                      |   etc.  This breakdown is not recursive, in that the member objects
//                      |   are not again split.
// -End TClonesArray object