// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_wroot_infos #define tools_wroot_infos #include "info" namespace tools { namespace wroot { inline void scs(unsigned int& a_cs,const std::string& a_s) { unsigned int l = a_s.size(); for(unsigned int i=0;i& a_infos, const std::string& a_type, streamer_info::Type a_si_type) { unsigned int check = 196608; StreamerInfo* info = new StreamerInfo(std::string("vector<")+a_type+">",4,check); a_infos.push_back(info); info->add(new streamer_STL("This","Used to call the proper TStreamerInfo case",0,a_si_type,std::string("vector<")+a_type+">")); } inline void fill_infos_core(List& a_infos,std::ostream&) { // sizeof(TString) = 8 (4 (virtual ~) + 1 + 3 (align)) // sizeof(TObject) = 12 // sizeof(TNamed) = 28 // sizeof(TObjArray) = 40 // sizeof(TArray) = 8 // sizeof(TArrayI) = 12 // sizeof(TArrayD) = 12 // sizeof(TArrayF) = 12 //const int size_DOUBLE = 8; const int size_INT = 4; const int size_POINTER = 4; //const int size_OBJECT_POINTER = 4; //const int size_COUNTER = 4; const int size_VIRTUAL = 4; const int size_TArray = 8; short TObject_version = 1; short TNamed_version = 1; short TStreamerElement_version = 2; short TArray_version = 1; {unsigned int check = 0; //this : scs(check,"TNamed"); //base : scs(check,"TObject"); //members : scs(check,"fName"); scs(check,"TString"); scs(check,"fTitle"); scs(check,"TString"); StreamerInfo* info = new StreamerInfo("TNamed",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TObject","Basic ROOT object",0,TObject_version)); //12 info->add(new streamer_string("fName","object identifier",12));//8 info->add(new streamer_string("fTitle","object title",20));//8 //28 } {unsigned int check = 0; //this : scs(check,"TStreamerInfo"); //bases : scs(check,"TNamed"); //members : scs(check,"fCheckSum"); scs(check,"UInt_t"); scs(check,"fClassVersion"); scs(check,"Int_t"); scs(check,"fElements"); scs(check,"TObjArray*"); StreamerInfo* info = new StreamerInfo("TStreamerInfo",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TNamed","The basis for a named object (name, title)",0,TNamed_version));//28 info->add(new streamer_basic_type("fCheckSum","checksum of original class",28,streamer_info::UNSIGNED_INT,"UInt_t"));//4 info->add(new streamer_basic_type("fClassVersion","Class version identifier",32,streamer_info::INT,"Int_t"));//4 //40 = 2*int+4*int_p+2*ulong_p+bool+p (bool=4 !) info->add(new streamer_object_pointer("fElements","Array of TStreamerElements",76,"TObjArray*"));//4 //80 } {unsigned int check = 0; //this : scs(check,"TStreamerElement"); //bases : scs(check,"TNamed"); //members : scs(check,"fType"); scs(check,"Int_t"); scs(check,"fSize"); scs(check,"Int_t"); scs(check,"fArrayLength"); scs(check,"Int_t"); scs(check,"fArrayDim"); scs(check,"Int_t"); scs(check,"fMaxIndex"); scs(check,"Int_t"); int dim = 5; acs(check,1,&dim); scs(check,"fTypeName"); scs(check,"TString"); //Should be : 2369818458U StreamerInfo* info = new StreamerInfo("TStreamerElement",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TNamed","The basis for a named object (name, title)",0,TNamed_version)); info->add(new streamer_basic_type("fType","element type",28,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fSize","sizeof element",32,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fArrayLength","cumulative size of all array dims",36,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fArrayDim","number of array dimensions",40,streamer_info::INT,"Int_t")); {streamer_element* elem = new streamer_basic_type("fMaxIndex","Maximum array index for array dimension \"dim\"",44,streamer_info::INT,"Int_t"); info->add(elem); elem->setArrayDimension(1); elem->setMaxIndex(0,5);} info->add(new streamer_string("fTypeName","Data type name of data member",72));} {unsigned int check = 0; //this : scs(check,"TStreamerBase"); //bases : scs(check,"TStreamerElement"); //members : scs(check,"fBaseVersion"); scs(check,"Int_t"); //Should be : 2671078514U StreamerInfo* info = new StreamerInfo("TStreamerBase",3,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version)); info->add(new streamer_basic_type("fBaseVersion","version number of the base class",88,streamer_info::INT,"Int_t"));} {unsigned int check = 0; //this : scs(check,"TStreamerString"); //bases : scs(check,"TStreamerElement"); //Should be : 2525579865U StreamerInfo* info = new StreamerInfo("TStreamerString",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version));} {unsigned int check = 0; //this : scs(check,"TStreamerBasicType"); //bases : scs(check,"TStreamerElement"); //Should be : 3001875966U; StreamerInfo* info = new StreamerInfo("TStreamerBasicType",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version));} {unsigned int check = 0; //this : scs(check,"TStreamerBasicPointer"); //bases : scs(check,"TStreamerElement"); //members : scs(check,"fCountVersion"); scs(check,"Int_t"); scs(check,"fCountName"); scs(check,"TString"); scs(check,"fCountClass"); scs(check,"TString"); //Should be : 1587298059U StreamerInfo* info = new StreamerInfo("TStreamerBasicPointer",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version)); info->add(new streamer_basic_type("fCountVersion","version number of the class with the counter",88,streamer_info::INT,"Int_t")); info->add(new streamer_string("fCountName","name of data member holding the array count",92)); info->add(new streamer_string("fCountClass","name of the class with the counter",100));} {unsigned int check = 0; //this : scs(check,"TStreamerObject"); //bases : scs(check,"TStreamerElement"); //Should be : 2177456715U StreamerInfo* info = new StreamerInfo("TStreamerObject",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version));} {unsigned int check = 0; //this : scs(check,"TStreamerObjectPointer"); //bases : scs(check,"TStreamerElement"); //Should be : 720556968U StreamerInfo* info = new StreamerInfo("TStreamerObjectPointer",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version));} {unsigned int check = 0; //this : scs(check,"TStreamerObjectAny"); //bases : scs(check,"TStreamerElement"); //Should be : 3108880127U StreamerInfo* info = new StreamerInfo("TStreamerObjectAny",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TStreamerElement","base class for one element (data member) to be Streamed",0,TStreamerElement_version));} {unsigned int check = 0; //this : scs(check,"TArray"); //members : scs(check,"fN"); scs(check,"Int_t"); StreamerInfo* info = new StreamerInfo("TArray",1,check); a_infos.push_back(info); // Elements : int offset = 0; offset += size_VIRTUAL; info->add(new streamer_basic_type( "fN", "Number of array elements", offset, streamer_info::INT,"Int_t")); //4 offset += size_INT; //8 } {unsigned int check = 0; //this : scs(check,"TArrayI"); //base : scs(check,"TArray"); //members : scs(check,"fArray"); scs(check,"Int_t*"); StreamerInfo* info = new StreamerInfo("TArrayI",1,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base( "TArray", "Abstract array base class", offset, TArray_version)); offset += size_TArray; info->add(new streamer_basic_pointer( "fArray", "[fN] Array of fN integers", offset, streamer_info::INT,"fN","TArray",1,"Int_t*")); offset += size_POINTER; //12 } {unsigned int check = 0; //this : scs(check,"TArrayD"); //base : scs(check,"TArray"); //members : scs(check,"fArray"); scs(check,"Double_t*"); StreamerInfo* info = new StreamerInfo("TArrayD",1,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base( "TArray", "Abstract array base class", offset, TArray_version)); offset += size_TArray; //8 info->add(new streamer_basic_pointer( "fArray", "[fN] Array of fN integers", offset, streamer_info::DOUBLE,"fN","TArray",1,"Double_t*")); offset += size_POINTER; //12 } {unsigned int check = 0; //this : scs(check,"TArrayF"); //base : scs(check,"TArray"); //members : scs(check,"fArray"); scs(check,"Float_t*"); StreamerInfo* info = new StreamerInfo("TArrayF",1,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base( "TArray", "Abstract array base class", offset, TArray_version)); offset += size_TArray; info->add(new streamer_basic_pointer( "fArray", "[fN] Array of fN integers", offset, streamer_info::FLOAT,"fN","TArray",1,"Float_t*")); offset += size_POINTER; //12 } fill_vec(a_infos,"char",streamer_info::CHAR); fill_vec(a_infos,"short",streamer_info::SHORT); fill_vec(a_infos,"int",streamer_info::INT); fill_vec(a_infos,"unsigned char",streamer_info::UNSIGNED_CHAR); fill_vec(a_infos,"unsigned short",streamer_info::UNSIGNED_SHORT); fill_vec(a_infos,"unsigned int",streamer_info::UNSIGNED_INT); fill_vec(a_infos,"float",streamer_info::FLOAT); fill_vec(a_infos,"double",streamer_info::DOUBLE); fill_vec(a_infos,"bool",streamer_info::BOOL); } inline void fill_infos_graf(List& a_infos,std::ostream&) { //sizeof(Font_t) = 2 //sizeof(Style_t) = 2 //sizeof(Marker_t) = 2 //sizeof(Width_t) = 2 //sizeof(Size_t) = 4 {unsigned int check = 0; //this : scs(check,"TAttLine"); //members : scs(check,"fLineColor"); scs(check,"Color_t"); scs(check,"fLineStyle"); scs(check,"Style_t"); scs(check,"fLineWidth"); scs(check,"Width_t"); //Should be : 1369587346U // Beurk ; but the ROOT TTree compells indirectly the below. StreamerInfo* info = new StreamerInfo("TAttLine",1,check); a_infos.push_back(info); // Elements : //4 (virtual ~) info->add(new streamer_basic_type("fLineColor","line color",4,streamer_info::SHORT,"Color_t"));//2 info->add(new streamer_basic_type("fLineStyle","line style",6,streamer_info::SHORT,"Style_t"));//2 info->add(new streamer_basic_type("fLineWidth","line width",8,streamer_info::SHORT,"Width_t"));//2 //2 (alignement ???) //12 } {unsigned int check = 0; //this : scs(check,"TAttFill"); //members : scs(check,"fFillColor"); scs(check,"Color_t"); scs(check,"fFillStyle"); scs(check,"Style_t"); //Should be : 1204118360U StreamerInfo* info = new StreamerInfo("TAttFill",1,check); a_infos.push_back(info); // Elements : //4 (virtual ~) info->add(new streamer_basic_type("fFillColor","fill area color",4,streamer_info::SHORT,"Color_t"));//2 info->add(new streamer_basic_type("fFillStyle","fill area style",6,streamer_info::SHORT,"Style_t"));//2 //8 } {unsigned int check = 0; //this : scs(check,"TAttMarker"); //members : scs(check,"fMarkerColor"); scs(check,"Color_t"); scs(check,"fMarkerStyle"); scs(check,"Style_t"); scs(check,"fMarkerSize"); scs(check,"Size_t"); //Should be 4207747460U StreamerInfo* info = new StreamerInfo("TAttMarker",1,check); a_infos.push_back(info); // Elements : //4 (virtual ~) info->add(new streamer_basic_type("fMarkerColor","Marker color index",0,streamer_info::SHORT,"Color_t"));//2 info->add(new streamer_basic_type("fMarkerStyle","Marker style",4,streamer_info::SHORT,"Style_t"));//2 info->add(new streamer_basic_type("fMarkerSize","Marker size",6,streamer_info::FLOAT,"Size_t"));//4 //12 } } inline void fill_infos_tree(List& a_infos,std::ostream& a_out) { const int size_DOUBLE = 8; const int size_INT = 4; const int size_POINTER = 4; const int size_COUNTER = 4; const int size_TNamed = 28; const int size_TAttLine = 12; const int size_TAttFill = 8; const int size_TAttMarker = 12; const int size_TObjArray = 40; const int size_TArrayD = 12; const int size_TString = 8; const int size_TBranch = 256; const int size_TLeaf = 64; short TNamed_version = 1; short TAttLine_version = 1; short TAttFill_version = 1; short TAttMarker_version = 1; short TBranch_version = 8; short TLeaf_version = 2; {unsigned int check = 0; //this : scs(check,"TTree"); //bases : scs(check,"TNamed"); scs(check,"TAttLine"); scs(check,"TAttFill"); scs(check,"TAttMarker"); //members : scs(check,"fEntries"); scs(check,"Stat_t"); scs(check,"fTotBytes"); scs(check,"Stat_t"); scs(check,"fZipBytes"); scs(check,"Stat_t"); scs(check,"fSavedBytes"); scs(check,"Stat_t"); scs(check,"fTimerInterval"); scs(check,"Int_t"); scs(check,"fScanField"); scs(check,"Int_t"); scs(check,"fUpdate"); scs(check,"Int_t"); scs(check,"fMaxEntryLoop"); scs(check,"Int_t"); scs(check,"fMaxVirtualSize"); scs(check,"Int_t"); scs(check,"fAutoSave"); scs(check,"Int_t"); scs(check,"fEstimate"); scs(check,"Int_t"); scs(check,"fBranches"); scs(check,"TObjArray"); scs(check,"fLeaves"); scs(check,"TObjArray"); //scs(check,"fAliases"); //scs(check,"TList*"); scs(check,"fIndexValues"); scs(check,"TArrayD"); scs(check,"fIndex"); scs(check,"TArrayI"); //scs(check,"fFriends"); //scs(check,"TList*"); //Should be : 3245044844U //3.00.06 //Should be : FIXME //3.10.02 StreamerInfo* info = new StreamerInfo("TTree",5,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base( "TNamed", "The basis for a named object (name, title)", offset, TNamed_version)); offset += size_TNamed; info->add(new streamer_base( "TAttLine", "Line attributes", offset, TAttLine_version)); offset += size_TAttLine; info->add(new streamer_base( "TAttFill", "Fill area attributes", offset, TAttFill_version)); offset += size_TAttFill; info->add(new streamer_base( "TAttMarker", "Marker attributes", offset, TAttMarker_version)); offset += size_TAttMarker; info->add(new streamer_basic_type( "fEntries", "Number of entries", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fTotBytes", "Total number of bytes in all branches before compression", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fZipBytes", "Total number of bytes in all branches after compression", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fSavedBytes", "Number of autosaved bytes", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fTimerInterval", "Timer interval in milliseconds", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fScanField", "Number of runs before prompting in Scan", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fUpdate", "Update frequency for EntryLoop", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fMaxEntryLoop", "Maximum number of entries to process", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fMaxVirtualSize", "Maximum total size of buffers kept in memory", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fAutoSave", "Autosave tree when fAutoSave bytes produced", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fEstimate", "Number of entries to estimate histogram limits", offset, streamer_info::INT,"Int_t")); offset += size_INT; offset += 5*size_INT+size_POINTER, //! //144 info->add(new streamer_object( "fBranches", "List of Branches", offset, "TObjArray")); offset += size_TObjArray; info->add(new streamer_object( "fLeaves", "Direct pointers to individual branch leaves", offset, "TObjArray")); offset += size_TObjArray; //info->add(new streamer_object_pointer( // "fAliases", // "List of aliases for expressions based on the tree branches.", // offset, // "TList*")); //offset += size_OBJECT_POINTER; offset += size_POINTER; //! //228 info->add(new streamer_object_any( "fIndexValues", "Sorted index values", offset, "TArrayD")); offset += size_TArrayD; info->add(new streamer_object_any( "fIndex", "Index of sorted values", offset, "TArrayI")); //info->add(new streamer_object_pointer( // "fFriends", // "pointer to list of friend elements", // offset, // "TList*")); //offset += size_OBJECT_POINTER; if(offset!=240) { a_out << "tools::wroot::fill_infos :" << " Tree " << offset << " (240 expected.)" << std::endl; }} //--------------------------------------------------------------------- {unsigned int check = 0; //this : scs(check,"TBranch"); //bases : scs(check,"TNamed"); scs(check,"TAttFill"); //members : scs(check,"fCompress"); scs(check,"Int_t"); scs(check,"fBasketSize"); scs(check,"Int_t"); scs(check,"fEntryOffsetLen"); scs(check,"Int_t"); scs(check,"fWriteBasket"); scs(check,"Int_t"); scs(check,"fEntryNumber"); scs(check,"Int_t"); scs(check,"fOffset"); scs(check,"Int_t"); scs(check,"fMaxBaskets"); scs(check,"Int_t"); scs(check,"fSplitLevel"); scs(check,"Int_t"); scs(check,"fEntries"); scs(check,"Stat_t"); scs(check,"fTotBytes"); scs(check,"Stat_t"); scs(check,"fZipBytes"); scs(check,"Stat_t"); scs(check,"fBranches"); scs(check,"TObjArray"); scs(check,"fLeaves"); scs(check,"TObjArray"); scs(check,"fBaskets"); scs(check,"TObjArray"); scs(check,"fBasketBytes"); scs(check,"Int_t*"); scs(check,"fBasketEntry"); scs(check,"Int_t*"); scs(check,"fBasketSeek"); scs(check,"Seek_t*"); scs(check,"fFileName"); scs(check,"TString"); //Should be : 2056727376U (6 3.00.06) //Should be : FIXME (7 3.03.01) StreamerInfo* info = new StreamerInfo("TBranch",8,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base( "TNamed", "The basis for a named object (name, title)", offset, TNamed_version)); offset += size_TNamed; info->add(new streamer_base( "TAttFill", "Fill area attributes", offset, TAttFill_version)); offset += size_TAttFill; info->add(new streamer_basic_type( "fCompress", "(=1 branch is compressed, 0 otherwise)", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fBasketSize", "Initial Size of Basket Buffer", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fEntryOffsetLen", "Initial Length of fEntryOffset table in the basket buffers", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fWriteBasket", "Last basket number written", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fEntryNumber", "Current entry number (last one filled in this branch)", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fOffset", "Offset of this branch", offset, streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type( "fMaxBaskets", "Maximum number of Baskets so far", offset, streamer_info::COUNTER,"Int_t")); offset += size_COUNTER; info->add(new streamer_basic_type( //3.03.01 "fSplitLevel", "Branch split level", offset, streamer_info::INT,"Int_t")); offset += size_INT; offset += 3*size_INT; //! info->add(new streamer_basic_type( "fEntries", "Number of entries", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fTotBytes", "Total number of bytes in all leaves before compression", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_basic_type( "fZipBytes", "Total number of bytes in all leaves after compression", offset, streamer_info::DOUBLE,"Stat_t")); offset += size_DOUBLE; info->add(new streamer_object( "fBranches", "-> List of Branches of this branch", offset, "TObjArray")); offset += size_TObjArray; info->add(new streamer_object( "fLeaves", "-> List of leaves of this branch", size_TNamed+6*size_INT+size_COUNTER+ offset, "TObjArray")); offset += size_TObjArray; info->add(new streamer_object( "fBaskets", "-> List of baskets of this branch", offset, "TObjArray")); offset += size_TObjArray; offset += size_INT+size_POINTER; //! info->add(new streamer_basic_pointer( "fBasketBytes", "[fMaxBaskets] Lenght of baskets on file", offset, streamer_info::INT,"fMaxBaskets","TBranch",6,"Int_t*")); offset += size_POINTER; info->add(new streamer_basic_pointer( "fBasketEntry", "[fMaxBaskets] Table of first entry in eack basket", offset, streamer_info::INT,"fMaxBaskets","TBranch",6,"Int_t*")); offset += size_POINTER; info->add(new streamer_basic_pointer( "fBasketSeek", "[fMaxBaskets] Addresses of baskets on file", offset, streamer_info::INT,"fMaxBaskets","TBranch",6,"Seek_t*")); offset += size_POINTER; offset += 3*size_POINTER; //! info->add(new streamer_string( "fFileName", "Name of file where buffers are stored (\"\" if in same file as Tree header)", offset)); if(offset!=256) { a_out << "tools::wroot::fill_infos :" << " Branch " << offset << " (256 expected.)" << std::endl; }} {unsigned int check = 0; //this : scs(check,"TBranchObject"); //bases : scs(check,"TBranch"); //members : scs(check,"fClassName"); scs(check,"TString"); //Should be : 2857878535U StreamerInfo* info = new StreamerInfo("TBranchObject",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TBranch","Branch descriptor",0,TBranch_version)); info->add(new streamer_string("fClassName","Class name of referenced object",256)); } //--------------------------------------------------------------------- {unsigned int check = 0; //this : scs(check,"TBranchElement"); //bases : scs(check,"TBranch"); //members : scs(check,"fClassName"); scs(check,"TString"); scs(check,"fClassVersion"); scs(check,"Int_t"); scs(check,"fID"); scs(check,"Int_t"); scs(check,"fType"); scs(check,"Int_t"); scs(check,"fStreamerType"); scs(check,"Int_t"); StreamerInfo* info = new StreamerInfo("TBranchElement",1,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base("TBranch","Branch descriptor",offset,TBranch_version)); offset += size_TBranch; info->add(new streamer_string("fClassName","Class name of referenced object",offset)); offset += size_TString; info->add(new streamer_basic_type("fClassVersion","Version number of class",offset,streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type("fID","element serial number in fInfo",offset,streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type("fType","branch type",offset,streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type("fStreamerType","branch streamer type",offset,streamer_info::INT,"Int_t")); offset += size_INT; } {unsigned int check = 0; //this : scs(check,"TLeaf"); //bases : scs(check,"TNamed"); //members : scs(check,"fLen"); scs(check,"Int_t"); scs(check,"fLenType"); scs(check,"Int_t"); scs(check,"fOffset"); scs(check,"Int_t"); scs(check,"fIsRange"); scs(check,"Bool_t"); scs(check,"fIsUnsigned"); scs(check,"Bool_t"); scs(check,"fLeafCount"); scs(check,"TLeaf*"); //Should be : 727988519U StreamerInfo* info = new StreamerInfo("TLeaf",2,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TNamed","The basis for a named object (name, title)",0,TNamed_version)); info->add(new streamer_basic_type("fLen","Number of fixed length elements",32,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fLenType","Number of bytes for this data type",36,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fOffset","Offset in ClonesArray object (if one)",40,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fIsRange","(=kTRUE if leaf has a range, kFALSE otherwise)",44,streamer_info::UNSIGNED_CHAR,"Bool_t")); info->add(new streamer_basic_type("fIsUnsigned","(=kTRUE if unsigned, kFALSE otherwise)",45,streamer_info::UNSIGNED_CHAR,"Bool_t")); info->add(new streamer_object_pointer("fLeafCount","Pointer to Leaf count if variable length",48,"TLeaf*")); } {unsigned int check = 0; //this : scs(check,"TLeafS"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Short_t"); scs(check,"fMaximum"); scs(check,"Short_t"); //Should be : FIXME StreamerInfo* info = new StreamerInfo("TLeafS",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::SHORT,"Short_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",58,streamer_info::SHORT,"Short_t")); } {unsigned int check = 0; //this : scs(check,"TLeafI"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Int_t"); scs(check,"fMaximum"); scs(check,"Int_t"); //Should be : 3495201397U StreamerInfo* info = new StreamerInfo("TLeafI",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",60,streamer_info::INT,"Int_t")); } {unsigned int check = 0; //name : scs(check,"TLeafF"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Float_t"); scs(check,"fMaximum"); scs(check,"Float_t"); //Should be 1366318032U StreamerInfo* info = new StreamerInfo("TLeafF",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::FLOAT,"Float_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",60,streamer_info::FLOAT,"Float_t")); } {unsigned int check = 0; //this : scs(check,"TLeafD"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Double_t"); scs(check,"fMaximum"); scs(check,"Double_t"); //Should be StreamerInfo* info = new StreamerInfo("TLeafD",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::DOUBLE,"Double_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",64,streamer_info::DOUBLE,"Double_t")); } {unsigned int check = 0; //this : scs(check,"TLeafB"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Char_t"); scs(check,"fMaximum"); scs(check,"Char_t"); //Should be : FIXME StreamerInfo* info = new StreamerInfo("TLeafB",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::CHAR,"Char_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",57,streamer_info::CHAR,"Char_t")); } {unsigned int check = 0; //this : scs(check,"TLeafC"); //bases : scs(check,"TLeaf"); //members : scs(check,"fMinimum"); scs(check,"Int_t"); scs(check,"fMaximum"); scs(check,"Int_t"); //Should be : FIXME StreamerInfo* info = new StreamerInfo("TLeafC",1,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fMinimum","Minimum value if leaf range is specified",56,streamer_info::INT,"Int_t")); info->add(new streamer_basic_type("fMaximum","Maximum value if leaf range is specified",60,streamer_info::INT,"Int_t"));} {unsigned int check = 0; //this : scs(check,"TLeafObject"); //bases : scs(check,"TLeaf"); //members : scs(check,"fVirtual"); scs(check,"Bool_t"); //Should be 2312661809U StreamerInfo* info = new StreamerInfo("TLeafObject",4,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",0,TLeaf_version)); info->add(new streamer_basic_type("fVirtual","Support for Virtuality",64,streamer_info::UNSIGNED_CHAR,"Bool_t"));} {unsigned int check = 0; //this : scs(check,"TLeafElement"); //bases : scs(check,"TLeaf"); //members : scs(check,"fID"); scs(check,"Int_t"); scs(check,"fType"); scs(check,"Int_t"); StreamerInfo* info = new StreamerInfo("TLeafElement",1,check); a_infos.push_back(info); // Elements : int offset = 0; info->add(new streamer_base("TLeaf","Leaf: description of a Branch data type",offset,TLeaf_version)); offset += size_TLeaf; offset += size_POINTER; info->add(new streamer_basic_type("fID","element serial number in fInfo",offset,streamer_info::INT,"Int_t")); offset += size_INT; info->add(new streamer_basic_type("fType","leaf type",offset,streamer_info::INT,"Int_t")); offset += size_INT;} } inline void fill_infos_histo(List& a_infos,std::ostream&) { short TNamed_version = 1; short TArrayF_version = 1; short TArrayD_version = 1; short TAttLine_version = 1; short TAttFill_version = 1; short TAttMarker_version = 1; short TAttAxis_version = 4; {unsigned int check = 0; //this : scs(check,"TAttAxis"); //members : scs(check,"fNdivisions"); scs(check,"Int_t"); scs(check,"fAxisColor"); scs(check,"Color_t"); scs(check,"fLabelColor"); scs(check,"Color_t"); scs(check,"fLabelFont"); scs(check,"Style_t"); scs(check,"fLabelOffset"); scs(check,"Float_t"); scs(check,"fLabelSize"); scs(check,"Float_t"); scs(check,"fTickLength"); scs(check,"Float_t"); scs(check,"fTitleOffset"); scs(check,"Float_t"); scs(check,"fTitleSize"); scs(check,"Float_t"); scs(check,"fTitleColor"); scs(check,"Color_t"); scs(check,"fTitleFont"); scs(check,"Style_t"); StreamerInfo* info = new StreamerInfo("TAttAxis",4,check); a_infos.push_back(info); // Elements : //4 (virtual ~) info->add(new streamer_basic_type("fNdivisions","Number of divisions(10000*n3 + 100*n2 + n1)",4,streamer_info::INT,"Int_t")); //4 info->add(new streamer_basic_type("fAxisColor","color of the line axis",8,streamer_info::SHORT,"Color_t")); //2 info->add(new streamer_basic_type("fLabelColor","color of labels",10,streamer_info::SHORT,"Color_t")); //2 info->add(new streamer_basic_type("fLabelFont","font for labels",12,streamer_info::SHORT,"Style_t")); //2 info->add(new streamer_basic_type("fLabelOffset","offset of labels",16,streamer_info::FLOAT,"Float_t")); //4 info->add(new streamer_basic_type("fLabelSize","size of labels",20,streamer_info::FLOAT,"Float_t")); //4 info->add(new streamer_basic_type("fTickLength","length of tick marks",24,streamer_info::FLOAT,"Float_t")); //4 info->add(new streamer_basic_type("fTitleOffset","offset of axis title",28,streamer_info::FLOAT,"Float_t")); //4 info->add(new streamer_basic_type("fTitleSize","size of axis title",32,streamer_info::FLOAT,"Float_t")); //4 info->add(new streamer_basic_type("fTitleColor","color of axis title",36,streamer_info::SHORT,"Color_t")); //2 info->add(new streamer_basic_type("fTitleFont","font for axis title",38,streamer_info::SHORT,"Style_t")); //2 //40 } {unsigned int check = 0; //this : scs(check,"TAxis"); //bases : scs(check,"TNamed"); scs(check,"TAttAxis"); //members : scs(check,"fNbins"); scs(check,"Int_t"); scs(check,"fXmin"); scs(check,"Axis_t"); scs(check,"fXmax"); scs(check,"Axis_t"); scs(check,"fXbins"); scs(check,"TArrayD"); scs(check,"fFirst"); scs(check,"Int_t"); scs(check,"fLast"); scs(check,"Int_t"); scs(check,"fTimeDisplay"); scs(check,"Bool_t"); scs(check,"fTimeFormat"); scs(check,"TString"); StreamerInfo* info = new StreamerInfo("TAxis",6,check); a_infos.push_back(info); // Elements : info->add(new streamer_base("TNamed","The basis for a named object (name, title)",0,TNamed_version)); //28 info->add(new streamer_base("TAttAxis","Axis attributes",28,TAttAxis_version)); //40 info->add(new streamer_basic_type("fNbins","Number of bins",68,streamer_info::INT,"Int_t")); //4 info->add(new streamer_basic_type("fXmin","low edge of first bin",72,streamer_info::DOUBLE,"Axis_t")); //8 info->add(new streamer_basic_type("fXmax","upper edge of last bin",80,streamer_info::DOUBLE,"Axis_t")); //8 info->add(new streamer_basic_type("fXbins","Bin edges array in X",88,streamer_info::OBJECT_ANY,"TArrayD")); //12 info->add(new streamer_basic_type("fFirst","first bin to display",100,streamer_info::INT,"Int_t")); //4 info->add(new streamer_basic_type("fLast","last bin to display",104,streamer_info::INT,"Int_t")); //4 info->add(new streamer_basic_type("fTimeDisplay","on/off displaying time values instead of numerics",108,streamer_info::UNSIGNED_CHAR,"Bool_t")); //4 (Bool_t = 1 + 3 for alignement) info->add(new streamer_basic_type("fTimeFormat","Date&time format, ex: 09/12/99 12:34:00",112,streamer_info::TSTRING,"TString")); //8 //offset 120 //4 //offset 124 //4 //128 //v3-05-07 : 124 (stored) + 4 = 128 } short TH1_version = 3; {unsigned int check = 0; //this : scs(check,"TH1"); //bases : scs(check,"TNamed"); scs(check,"TAttLine"); scs(check,"TAttFill"); scs(check,"TAttMarker"); //members : scs(check,"fNcells"); scs(check,"Int_t"); scs(check,"fXaxis"); scs(check,"TAxis"); scs(check,"fBarOffset"); scs(check,"Short_t"); scs(check,"fBarWidth"); scs(check,"Short_t"); scs(check,"fEntries"); scs(check,"Stat_t"); scs(check,"fTsumw"); scs(check,"Stat_t"); scs(check,"fTsumw2"); scs(check,"Stat_t"); scs(check,"fTsumwx"); scs(check,"Stat_t"); scs(check,"fTsumwx2"); scs(check,"Stat_t"); scs(check,"fMaximum"); scs(check,"Double_t"); scs(check,"fMinimum"); scs(check,"Double_t"); scs(check,"fNormFactor"); scs(check,"Double_t"); scs(check,"fContour"); scs(check,"TArrayD"); scs(check,"fSumw2"); scs(check,"TArrayD"); scs(check,"fOption"); scs(check,"TString"); scs(check,"fFunctions"); scs(check,"TList*"); StreamerInfo* info = new StreamerInfo("TH1",TH1_version,check); a_infos.push_back(info); info->add(new streamer_base("TNamed","The basis for a named object (name, title)",0,TNamed_version)); //28 info->add(new streamer_base("TAttLine","Line attributes",28,TAttLine_version)); //12 info->add(new streamer_base("TAttFill","Fill area attributes",40,TAttFill_version)); //8 info->add(new streamer_base("TAttMarker","Marker attributes",48,TAttMarker_version)); //12 info->add(new streamer_basic_type("fNcells","number of bins(1D), cells (2D) +U/Overflows",60,streamer_info::INT,"Int_t")); //4 info->add(new streamer_basic_type("fXaxis","X axis descriptor",64,streamer_info::OBJECT_ANY,"TAxis")); //128 info->add(new streamer_basic_type("fYaxis","Y axis descriptor",192,streamer_info::OBJECT_ANY,"TAxis")); //128 info->add(new streamer_basic_type("fZaxis","Z axis descriptor",320,streamer_info::OBJECT_ANY,"TAxis")); //128 info->add(new streamer_basic_type("fBarOffset","(1000*offset) for bar charts or legos",448,streamer_info::SHORT,"Short_t"));//2 info->add(new streamer_basic_type("fBarWidth","(1000*width) for bar charts or legos",450,streamer_info::SHORT,"Short_t"));//2 info->add(new streamer_basic_type("fEntries","Number of entries",452,streamer_info::DOUBLE,"Stat_t"));//2 info->add(new streamer_basic_type("fTsumw","Total Sum of weights",460,streamer_info::DOUBLE,"Stat_t"));//8 info->add(new streamer_basic_type("fTsumw2","Total Sum of squares of weights",468,streamer_info::DOUBLE,"Stat_t"));//8 info->add(new streamer_basic_type("fTsumwx","Total Sum of weight*X",476,streamer_info::DOUBLE,"Stat_t"));//8 info->add(new streamer_basic_type("fTsumwx2","Total Sum of weight*X*X",484,streamer_info::DOUBLE,"Stat_t"));//8 info->add(new streamer_basic_type("fMaximum","Maximum value for plotting",492,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fMinimum","Minimum value for plotting",500,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fNormFactor","Normalization factor",508,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fContour","Array to display contour levels",516,streamer_info::OBJECT_ANY,"TArrayD"));//12 info->add(new streamer_basic_type("fSumw2","Array of sum of squares of weights",528,streamer_info::OBJECT_ANY,"TArrayD"));//12 info->add(new streamer_basic_type("fOption","histogram options",540,streamer_info::TSTRING,"TString"));//8 info->add(new streamer_basic_type("fFunctions","->Pointer to list of functions (fits and user)",548,streamer_info::OBJECT_ARROW,"TList*"));//4 //!fDirectory offset 552 : //4 //!fDimension offset 556 : //4 //!fIntegral offset 560 : //4 //!fPainter offset 564 : //4 //568 //v3-05-07 : 576 = 568 + 2 * 4 = ok } {unsigned int check = 0; //this : scs(check,"TH1F"); //base : scs(check,"TH1"); scs(check,"TArrayF"); StreamerInfo* info = new StreamerInfo("TH1F",1,check); a_infos.push_back(info); info->add(new streamer_base("TH1","1-Dim histogram base class",0,TH1_version));//568 info->add(new streamer_base("TArrayF","Array of floats",568,TArrayF_version));//12 } short TH1D_version = 1; {unsigned int check = 0; //this : scs(check,"TH1D"); //base : scs(check,"TH1"); scs(check,"TArrayD"); StreamerInfo* info = new StreamerInfo("TH1D",TH1D_version,check); a_infos.push_back(info); info->add(new streamer_base("TH1","1-Dim histogram base class",0,TH1_version));//568 info->add(new streamer_base("TArrayD","Array of doubles",568,TArrayD_version));//12 //580 //v3-05-07 : 588 = 576 + 12 = ok } {unsigned int check = 0; //this : scs(check,"TProfile"); //base : scs(check,"TH1D"); //members : scs(check,"fBinEntries"); scs(check,"TArrayD"); scs(check,"fErrorMode"); scs(check,"EErrorType");//FIXME : ok ? scs(check,"fYmin"); scs(check,"Double_t"); scs(check,"fYmax"); scs(check,"Double_t"); StreamerInfo* info = new StreamerInfo("TProfile",3,check); a_infos.push_back(info); info->add(new streamer_base("TH1D","1-Dim histograms (one double per channel)",0,TH1D_version));//580 info->add(new streamer_basic_type("fBinEntries","number of entries per bin",580,streamer_info::OBJECT_ANY,"TArrayD"));//12 info->add(new streamer_basic_type("fErrorMode","Option to compute errors",592,streamer_info::DOUBLE,"EErrorType"));//4 info->add(new streamer_basic_type("fYmin","Lower limit in Y (if set)",596,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fYmax","Upper limit in Y (if set)",604,streamer_info::DOUBLE,"Double_t"));//8 //612 //v3-05-07 : 624 = 612 + 4 + 8 (diff TH1D) = ok } short TH2_version = 3; {unsigned int check = 0; //this : scs(check,"TH2"); //bases : scs(check,"TH1"); //members : scs(check,"fScaleFactor"); scs(check,"Double_t"); scs(check,"fTsumwy"); scs(check,"Double_t"); scs(check,"fTsumwy2"); scs(check,"Double_t"); scs(check,"fTsumwxy"); scs(check,"Double_t"); StreamerInfo* info = new StreamerInfo("TH2",TH2_version,check); a_infos.push_back(info); info->add(new streamer_base("TH1","1-Dim histogram base class",0,TH1_version));//568 info->add(new streamer_basic_type("fScaleFactor","Scale Factor",576,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fTsumwy","Total Sum of weight*Y",584,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fTsumwy2","Total Sum of weight*Y*Y",592,streamer_info::DOUBLE,"Double_t"));//8 info->add(new streamer_basic_type("fTsumwxy","Total Sum of weight*X*Y",600,streamer_info::DOUBLE,"Double_t"));//8 //600 //v3-05-07 : } {unsigned int check = 0; //this : scs(check,"TH2F"); //base : scs(check,"TH2"); scs(check,"TArrayF"); StreamerInfo* info = new StreamerInfo("TH2F",3,check); a_infos.push_back(info); info->add(new streamer_base("TH2","2-Dim histogram base class",0,TH2_version));//600 info->add(new streamer_base("TArrayF","Array of floats",600,TArrayF_version));//12 //612 } {unsigned int check = 0; //this : scs(check,"TH2D"); //base : scs(check,"TH2"); scs(check,"TArrayD"); StreamerInfo* info = new StreamerInfo("TH2D",3,check); a_infos.push_back(info); info->add(new streamer_base("TH2","2-Dim histogram base class",0,TH2_version));//600 info->add(new streamer_base("TArrayD","Array of doubles",600,TArrayD_version));//12 //612 } } inline void fill_infos(List& a_infos,std::ostream& a_out) { fill_infos_core(a_infos,a_out); fill_infos_graf(a_infos,a_out); fill_infos_tree(a_infos,a_out); fill_infos_histo(a_infos,a_out); } }} #endif