23 int main(
int argc,
char *argv[]){
24 time_t startTime, curTime;
27 TString file_datasets(
"txt//datasamples/singlelep.txt"),
infolder(
""),
outfolder(
"out/"), tag(
"");
29 while((c=getopt(argc, argv,
"f:i:o:t:"))!=-1){
47 if(file_datasets==
"" ||
infolder==
""){
48 cout<<endl<<
"Specify input folder and datasets: " 49 <<
"./run/combine_datasets.exe -i <infolder> -o <outfolder=out> -f <file_datasets=txt/datasamples/singlelep.txt>"<<endl<<endl;
53 vector<TString> datasets;
54 TString buffer, basename(
"Run"+tag);
55 ifstream indata(file_datasets);
59 datasets.push_back(buffer);
60 basename += (
"_"+buffer);
64 map<int, set<Long64_t> > events;
68 for(
unsigned idata(0); idata < datasets.size(); idata++){
69 TChain chain(
"tree"), treeglobal(
"treeglobal");
71 int files = chain.Add(filename);
73 cout<<
"No files found for "<<filename<<endl;
76 treeglobal.Add(filename);
78 TString fulloutname(
outfolder+
"/baby_"+basename+
"_");
79 fulloutname += idata; fulloutname +=
".root";
82 TString outname(fulloutname);
83 outname.ReplaceAll(
outfolder,
""); outname.ReplaceAll(
"/",
"");
85 if(outfiles.size()>0) {
86 cout<<
"File "<<fulloutname<<
" exists. Exiting"<<endl;
90 TFile outfile(fulloutname,
"RECREATE");
93 TTree *outtree(chain.CloneTree(0));
95 chain.SetBranchAddress(
"event", &event);
96 chain.SetBranchAddress(
"run", &run);
98 long entries(chain.GetEntries());
101 cout<<endl<<
"Doing "<<files<<
" files in "<<filename<<
" with "<<entries<<
" entries"<<endl;
102 for(
int entry(0); entry<entries; entry++){
103 chain.GetEntry(entry);
104 if(entry!=0 && entry%250000==0) {
106 double seconds(difftime(curTime,startTime));
108 cout<<
"Doing entry "<<setw(10)<<
addCommas(static_cast<double>(entry))<<
" of "<<
addCommas(static_cast<double>(entries))
109 <<
" Took "<<setw(6)<<seconds<<
" seconds at " 110 <<setw(4)<<
roundNumber(static_cast<double>(entry),1,seconds*1000.)<<
" kHz"<<endl;
113 if(events.find(run) == events.end()) events[run] = set<Long64_t>();
114 if(events[run].find(event) == events[run].end()){
115 events[run].insert(event);
120 treeglobal.CloneTree(-1,
"fast");
124 cout<<
"Took "<<difftime(curTime,startTime) <<
" seconds to write "<<fulloutname<<endl;
133 TString txtname(
outfolder+
"/runs_"+basename+
".txt");
134 ofstream txtfile(txtname);
136 for(map<
int, set<Long64_t> >::const_iterator it = events.begin(); it != events.end(); ++it) {
138 if(run/1000 != prevrun){
142 txtfile << run <<
" ";
146 cout<<endl<<
"Written run numbers in "<<txtname<<endl;
TString roundNumber(double num, int decimals, double denom=1.)
int main(int argc, char *argv[])
std::vector< TString > dirlist(const TString &folder, const TString &inname="dir", const TString &tag="")
TString addCommas(double num)