#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); } } printf("File size: %d \n",file->GetSize()); 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; for(it=rsinfo.begin(); it!=rsinfo.end(); it++) { printf("%d/%d:%d ",it->run,it->rsmin,it->rsmax); } printf("\n"); /* File size: 16448944 First run/event: 155796/307870 Last run/event: 156116/1680211 Physics events: 734 Contributing runsections:528 155796/113:113 155796/115:116 155796/123:124 155796 */ // std::cout << <Get("TopTree"); TClonesArray* evts = new TClonesArray("evt"); TBranch* branch = tree->GetBranch("evt"); branch->SetAddress(&evts); std::set< std::pair > event_set; std::set< std::pair > runsection_set; evt* e; int nEntries = (int) tree->GetEntries(); for(int i=0;iGetEntry(i); e=(evt*) evts->At(0); if(!event_set.insert(std::pair(e->runNumber,e->eventNumber)).second) std::cerr<<"Duplicate event: run="<runNumber<<" event="<eventNumber<(e->runNumber,e->runSection)); } std::cout<<"File size: "<GetSize()<first<<"/"<second<first<<"/"<<(--event_set.end())->second< >::const_iterator it=runsection_set.begin();it!=runsection_set.end();it++) { if(it->first!=run) { if(run!=-1) std::cout<<" "<second; run=it->first; } else { if(it->second==last+1) last=it->second; else { std::cout<<" "<second; } } } std::cout<Close(); } */ }