#include "TFile.h" #include "TTree.h" #include "TBranch.h" #include "TAuthenticate.h" #include "stdio.h" #include #include "Stntuple/obj/TStnHeaderBlock.hh" #include "Stntuple/mod/addStntupleDataBlocks.hh" class RsInfo { public: RsInfo():run(-1),rsmin(65535),rsmax(0) {} ~RsInfo(){}; int run; int rsmin; int rsmax; }; main(int argc, char* argv[]) { if(argc != 2) { printf("USAGE: getStnFileInfo full_file_name\n"); return 1; } addStntupleDataBlocks(); TAuthenticate::SetGlobalUser("anonymous"); TFile* file = TFile::Open(argv[1]); if( !file) { printf("Error opening file %s\n "); return 1; } TTree* tree =(TTree*) file->Get("STNTUPLE"); if (!tree) { printf("Could not find STNTUPLE tree\n "); return 1; } TBranch* b = tree->GetBranch("HeaderBlock"); TStnHeaderBlock* h = new TStnHeaderBlock(); b->SetAddress(&h); int nevt = int(b->GetEntries()); int runLow = 1000000000; int evtLow = 1000000000; int runHgh = 0; int evtHgh = 0; std::vector rsinfo; for (int i=0; iGetEntry(i); int run = h->RunNumber(); int evt = h->EventNumber(); int sec = h->SectionNumber(); std::vector::iterator runIt = rsinfo.end(); std::vector::iterator it; if(runrunHgh) { runHgh = run; evtHgh = evt; } else if (run==runHgh) { if(evt>evtHgh) evtHgh = evt; } bool found = false; for(it=rsinfo.begin(); it!=rsinfo.end(); it++) { if(it->run == run) { found = true; runIt = it; if(secrsmin) it->rsmin = sec; if(sec>it->rsmax) it->rsmax = sec; } } if(!found) { RsInfo rs; rs.run = run; rs.rsmin = sec; rs.rsmax = sec; rsinfo.push_back(rs); } } for(int i=0; iGetSize()); printf("First run/event: %d/%d\n",runLow,evtLow); printf("Last run/event: %d/%d\n",runHgh,evtHgh); printf("Physics events: %d\n",nevt); printf("Contributing runsections: "); std::vector::iterator it,jt; for(it=rsinfo.begin(); it!=rsinfo.end(); it++) { printf("%d/%d:%d ",it->run,it->rsmin,it->rsmax); } printf("\n"); if(int(rsinfo.size())>0) { printf("First run and runsection in hex: %06x %04x\n", rsinfo[0].run,rsinfo[0].rsmin); } else { printf("First run and runsection in hex: %06x %04x\n", 0,0); } }