19 m_doGluVsFlavour(
"lightC"),
21 m_detailedConfig(
false),
22 m_OutputFile(
"FlavourComposition"),
27 TH1::AddDirectory(kFALSE);
28 gStyle->SetPaintTextFormat(
".3f");
29 gROOT->SetBatch(kTRUE);
30 printf(
"\n %s\n MakeQuarkGluonFractionPlots::MakeQuarkGluonFractionPlots\n %s\n",std::string(75,
'=').c_str(),std::string(75,
'=').c_str());
40 std::string psfilename;
43 std::map<std::string, TH2D*> h_input;
44 std::vector< std::map<std::string, TH2D*> > h_input_1P;
45 std::vector< std::map<std::string, TH2D*> > h_input_1PVar;
46 std::vector< std::map<std::string, TH2D*> > h_input_2P;
47 std::vector< std::map<std::string, TH2D*> > h_input_2PUp;
48 std::vector< std::map<std::string, TH2D*> > h_input_2PDown;
49 printf(
"\n %s\n Retrieving histograms\n %s\n",std::string(75,
'%').c_str(),std::string(75,
'%').c_str());
51 psfilename =
"PlotsGluonFraction_AllChannels.ps";
52 if(m_doPS)
c1.Print((psfilename+
"[").c_str());
53 bool createMap =
true;
54 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
55 std::string
append =
"nominal_";
56 DumpToMap(h_input, m_configNominal.path, m_channel.at(
c), m_configNominal.folder,
append, createMap);
59 if(m_doPS) drawhistos(h_input, psfilename);
60 for(
unsigned int v=0;
v<m_config1PointVec.size(); ++
v){
62 std::map<std::string, TH2D*> map_temp;
63 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
65 DumpToMap(map_temp, m_config1PointVec.at(
v).central, m_channel.at(
c), m_config1PointVec.at(
v).folder_c,
append, createMap);
68 h_input_1P.push_back(map_temp);
69 if(m_doPS) drawhistos(h_input_1P.at(
v), psfilename);
71 for(
unsigned int v=0;
v<m_config1PointVec.size(); ++
v){
73 std::map<std::string, TH2D*> map_temp;
74 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
76 DumpToMap(map_temp, m_config1PointVec.at(
v).variation, m_channel.at(
c), m_config1PointVec.at(
v).folder_v,
append, createMap);
79 h_input_1PVar.push_back(map_temp);
80 if(m_doPS) drawhistos(h_input_1PVar.at(
v), psfilename);
82 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
84 std::map<std::string, TH2D*> map_temp;
85 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
87 DumpToMap(map_temp, m_config2PointVec.at(
v).central, m_channel.at(
c), m_config2PointVec.at(
v).folder_c,
append, createMap);
90 h_input_2P.push_back(map_temp);
91 if(m_doPS) drawhistos(h_input_2P.at(
v), psfilename);
93 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
95 std::map<std::string, TH2D*> map_temp;
96 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
98 DumpToMap(map_temp, m_config2PointVec.at(
v).variation_up, m_channel.at(
c), m_config2PointVec.at(
v).folder_up,
append, createMap);
101 h_input_2PUp.push_back(map_temp);
102 if(m_doPS) drawhistos(h_input_2PUp.at(
v), psfilename);
104 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
106 std::map<std::string, TH2D*> map_temp;
107 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
109 DumpToMap(map_temp, m_config2PointVec.at(
v).variation_down, m_channel.at(
c), m_config2PointVec.at(
v).folder_down,
append, createMap);
112 h_input_2PDown.push_back(map_temp);
113 if(m_doPS) drawhistos(h_input_2PDown.at(
v), psfilename);
115 CreateQGFFile(
"AllChannels",h_input,h_input_1P,h_input_1PVar,h_input_2P,h_input_2PUp,h_input_2PDown);
118 for(
unsigned int c=0;
c<m_channel.size(); ++
c){
119 psfilename =
"PlotsGluonFraction_" + m_channel.at(
c) +
".ps";
120 if(m_doPS)
c1.Print((psfilename+
"[").c_str());
121 bool createMap =
true;
122 std::string
append =
"nominal_";
127 h_input_1PVar.clear();
129 h_input_2PUp.clear();
130 h_input_2PDown.clear();
132 DumpToMap(h_input, m_configNominal.path, m_channel.at(
c), m_configNominal.folder,
append, createMap);
133 if(m_doPS) drawhistos(h_input, psfilename);
135 for(
unsigned int v=0;
v<m_config1PointVec.size(); ++
v){
136 std::map<std::string, TH2D*> map_temp;
138 DumpToMap(map_temp, m_config1PointVec.at(
v).central, m_channel.at(
c), m_config1PointVec.at(
v).folder_c,
append, createMap);
139 h_input_1P.push_back(map_temp);
140 if(m_doPS) drawhistos(h_input_1P.at(
v), psfilename);
142 for(
unsigned int v=0;
v<m_config1PointVec.size(); ++
v){
143 std::map<std::string, TH2D*> map_temp;
145 DumpToMap(map_temp, m_config1PointVec.at(
v).variation, m_channel.at(
c), m_config1PointVec.at(
v).folder_v,
append, createMap);
146 h_input_1PVar.push_back(map_temp);
147 if(m_doPS) drawhistos(h_input_1PVar.at(
v), psfilename);
149 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
150 std::map<std::string, TH2D*> map_temp;
152 DumpToMap(map_temp, m_config2PointVec.at(
v).central, m_channel.at(
c), m_config2PointVec.at(
v).folder_c,
append, createMap);
153 h_input_2P.push_back(map_temp);
154 if(m_doPS) drawhistos(h_input_2P.at(
v), psfilename);
156 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
157 std::map<std::string, TH2D*> map_temp;
159 DumpToMap(map_temp, m_config2PointVec.at(
v).variation_up, m_channel.at(
c), m_config2PointVec.at(
v).folder_up,
append, createMap);
160 h_input_2PUp.push_back(map_temp);
161 if(m_doPS) drawhistos(h_input_2PUp.at(
v), psfilename);
163 for(
unsigned int v=0;
v<m_config2PointVec.size(); ++
v){
164 std::map<std::string, TH2D*> map_temp;
166 DumpToMap(map_temp, m_config2PointVec.at(
v).variation_down, m_channel.at(
c), m_config2PointVec.at(
v).folder_down,
append, createMap);
167 h_input_2PDown.push_back(map_temp);
168 if(m_doPS) drawhistos(h_input_2PDown.at(
v), psfilename);
170 CreateQGFFile(m_channel.at(
c),h_input,h_input_1P,h_input_1PVar,h_input_2P,h_input_2PUp,h_input_2PDown);
183 if(
h->Integral()==0.)
continue;
185 c1.Print(psfilename.c_str());
195 if(
h->Integral()==0.)
continue;
197 c1.Print(psfilename.c_str());
208 std::cout<<
" Histograms are saved in "<<
filename<<std::endl;
214 bool newMap = createMap;
222 if(f_name.compare(
"")==0)
continue;
234 const std::string&
folder,
235 const std::string& keyname,
bool createMap){
236 TFile *f_in=TFile::Open(
filename.c_str());
238 TDirectory*
dir = f_in->GetDirectory(
dirname.c_str());
240 std::cout<<
" ERROR: directory "<<
dirname<<
" not found in file "<<
filename<<
"! Exiting.\n";
243 TIter
next(
dir->GetListOfKeys());
246 while ((
key = (TKey*)
next())) {
247 TClass *
cl = gROOT->GetClass(
key->GetClassName());
248 if (!
cl->InheritsFrom(
"TH2D"))
continue;
253 std::string orig_name =
h->GetName();
255 std::string titlename = keyname +
"_" + orig_name;
256 h->SetTitle(titlename.c_str());
258 gStyle->SetStatY(0.95);
259 gStyle->SetStatX(0.89);
260 h_map.insert( std::pair<std::string, TH2D* >( orig_name,
h ) );
263 h_map.at(
h->GetName())->Add(
h);
269 const std::map<std::string, TH2D*>& h_input,
270 const std::vector< std::map<std::string, TH2D*> > & h_input_1P,
271 const std::vector< std::map<std::string, TH2D*> > & h_input_1PVar,
272 const std::vector< std::map<std::string, TH2D*> > & h_input_2P,
273 const std::vector< std::map<std::string, TH2D*> > & h_input_2PUp,
274 const std::vector< std::map<std::string, TH2D*> > & h_input_2PDown){
276 printf(
"\n %s\n Computing the gluon fraction in %s channel\n %s\n",std::string(75,
'%').c_str(),prename.c_str(),std::string(75,
'%').c_str());
279 std::string psfilename =
"PlotsGluonFraction_" + prename +
".ps";
281 if(
m_doPS)
c1.Print((psfilename+
"[").c_str());
283 printf(
"\n %s\n Computing QGF (nominal): \n %s\n",std::string(75,
'=').c_str(),std::string(75,
'=').c_str());
287 std::vector<std::vector<TH2D*>> h_fractionUnc1PSyst;
288 std::vector<std::vector<TH2D*>> h_fractionUnc2PSyst_up;
289 std::vector<std::vector<TH2D*>> h_fractionUnc2PSyst_down;
290 printf(
"\n %s\n Computing QGF (%s): \n %s\n",std::string(75,
'%').c_str(),
"1 point systematics",std::string(75,
'%').c_str());
293 std::string prehistnameVar=
"variation_1PSystematic" +
std::to_string(
v) ;
294 printf(
"\n %s\n Computing QGF (%s): \n %s\n",std::string(75,
'=').c_str(),
m_config1PointVec.at(
v).name.c_str(),std::string(75,
'=').c_str());
303 printf(
"\n %s\n Computing QGF (%s): \n %s\n",std::string(75,
'%').c_str(),
"2 point systematics",std::string(75,
'%').c_str());
306 printf(
"\n %s\n Computing QGF (%s): \n %s\n",std::string(75,
'=').c_str(),
m_config2PointVec.at(
v).name.c_str(),std::string(75,
'=').c_str());
318 h_fractionUnc2PSyst_down.push_back(
getDelta(qgf_nominal, qgf_variationDown,
m_config2PointVec.at(
v).scalefactor, prehistname));
325 printf(
"\n %s\n Computing the total systematic uncertainty: \n %s\n",std::string(75,
'=').c_str(),std::string(75,
'=').c_str());
326 std::vector<TH2D*> fractionTotalUnc =
evaluateQGFUncertaity(h_fractionUnc1PSyst,h_fractionUnc2PSyst_up,h_fractionUnc2PSyst_down,prename);
331 printf(
"\n %s\n Writing output file: \n %s\n",std::string(75,
'%').c_str(),std::string(75,
'%').c_str());
337 c1.Print((psfilename+
"]").c_str());
341 std::vector<TH2D*> QuarkGluonDiffFractionhistos;
342 if(h_nom.size() != h_var.size()) std::cout<<
"ERROR: Systematic variation don't have the same number of histograms!\n";
344 for(
size_t i = 0;
i<h_nom.size();
i++){
350 hist_diff->Add((
TH2D*)(h_var.at(
i)), -1);
351 hist_diff->Scale(
scale);
352 hist_diff->SetTitle(hist_diff->GetName());
353 hist_diff->SetStats(kFALSE);
354 QuarkGluonDiffFractionhistos.push_back(hist_diff);
356 return QuarkGluonDiffFractionhistos;
361 std::vector<TH2D*> histUnc;
363 std::string h_tmp_name;
365 h_tmp = (
TH2D*)((f_1P.at(0)).at(0))->Clone(
"TH2_tmp_TotalUnc");
366 h_tmp_name = ((f_1P.at(0)).at(0))->GetName();
369 h_tmp = (
TH2D*)((f_2PUp.at(0)).at(0))->Clone(
"TH2_tmp_TotalUnc");
370 h_tmp_name = ((f_2PUp.at(0)).at(0))->GetName();
374 int binX = h_tmp->GetXaxis()->GetNbins();
375 int binY = h_tmp->GetYaxis()->GetNbins();
379 std::vector<TH2D*> squared_histos1P;
381 for(
unsigned int h=0;
h<f_1P.at(0).
size(); ++
h){
383 std::string h_tmp_name = ((f_1P.at(0)).at(
h))->GetName();
385 TH2D *h_tmp = (
TH2D*)((f_1P.at(0)).at(
h))->Clone(h_new_name.c_str());
388 for(
int x = 0;
x <=
binX; ++
x){
389 for(
int y = 0;
y <=
binY; ++
y){
390 int bin = h_tmp->GetBin(
x,
y);
392 for(
unsigned int hs=0;
hs<f_1P.size(); ++
hs){
393 sq_err+=
pow(((f_1P.at(
hs)).at(
h))->GetBinContent(
bin),2);
399 squared_histos1P.push_back(h_tmp);
403 std::vector<TH2D*> squared_histos2P;
404 if(f_2PUp.size()!=0){
405 for(
unsigned int h=0;
h<f_2PUp.at(0).
size(); ++
h){
406 std::string h_tmp_name = ((f_2PUp.at(0)).at(
h))->GetName();
408 TH2D *h_tmp = (
TH2D*)((f_2PUp.at(0)).at(
h))->Clone(h_new_name.c_str());
411 for(
int x = 0;
x <=
binX; ++
x){
412 for(
int y = 0;
y <=
binY; ++
y){
413 int bin = h_tmp->GetBin(
x,
y);
415 float sq_err_up = 0.;
416 float sq_err_down = 0.;
417 for(
unsigned int hs=0;
hs<f_2PUp.size(); ++
hs){
418 float err_up = ((f_2PUp.at(
hs)).at(
h))->GetBinContent(
bin);
419 float err_down = ((f_2PDown.at(
hs)).at(
h))->GetBinContent(
bin);
426 bool isneg_up = std::signbit(err_up);
427 bool isneg_down = std::signbit(err_down);
428 if((isneg_up)&&(!isneg_down)){
429 float tmp_swap = err_up;
433 else if((!isneg_up)&&(!isneg_down)){
437 else if((isneg_up)&&(isneg_down)){
438 err_down =
std::min(err_up,err_down);
441 sq_err_up+=
pow(err_up,2);
442 sq_err_down+=
pow(err_down,2);
445 sq_err=
pow((sqrt(sq_err_down)+sqrt(sq_err_up))/2.,2);
449 squared_histos2P.push_back(h_tmp);
453 std::vector<TH2D*> final_histos;
456 for(
unsigned int h=0;
h<f_1P.at(0).
size(); ++
h){
457 std::string h_tmp_name = ((f_1P.at(0)).at(
h))->GetName();
465 final_histos.push_back(h_tmp);
469 for(
unsigned int h=0;
h<f_2PUp.at(0).size(); ++
h){
470 std::string h_tmp_name = ((f_2PUp.at(0)).at(
h))->GetName();
478 final_histos.push_back(h_tmp);
482 for(
unsigned int h=0;
h<final_histos.size(); ++
h){
483 for(
int x = 0;
x <=
binX; ++
x){
484 for(
int y = 0;
y <=
binY; ++
y){
485 int bin = h_tmp->GetBin(
x,
y);
488 if((squared_histos1P.size())!=0){
489 content+=(squared_histos1P.at(
h))->GetBinContent(
bin);
491 if((squared_histos2P.size())!=0){
492 content+=(squared_histos2P.at(
h))->GetBinContent(
bin);
503 std::vector<TH2D*> QuarkGluonFractionhistos;
505 int njets = (inputhistos.size()-6)/5;
507 std::string name_gluons =
"gluon_jets_"; name_gluons += jetCollection.c_str();
508 std::string name_quarks =
"quark_jets_"; name_quarks += jetCollection.c_str();
509 TH2D *hist_g = inputhistos[name_gluons];
510 TH2D *hist_q = inputhistos[name_quarks];
512 std::string name_fraction = prename +
"_gluonFraction_" + jetCollection;
513 TH2D *hist_ratio = (
TH2D*)hist_g->Clone(name_fraction.c_str());
514 hist_ratio->SetTitle(hist_ratio->GetName());
515 hist_ratio->SetStats(kFALSE);
516 TH2D *hist_summ = (
TH2D*)hist_g->Clone(
"hist_summ");
517 hist_summ->Add(hist_q);
518 hist_ratio->Divide(hist_summ);
519 QuarkGluonFractionhistos.push_back(hist_ratio);
522 for (
int nj = -1; nj < njets ; nj++) {
523 std::string name_gluons =
"gluon_jets_";
524 std::string name_lquarks =
"lightquark_jets_";
525 std::string name_cquarks =
"cquark_jets_";
526 std::string name_bquarks =
"bquark_jets_";
527 std::string name_other =
"other_jets_";
528 std::string name_fraction = prename +
"_gluonFraction_";
530 name_gluons += jetCollection;
531 name_lquarks += jetCollection;
532 name_cquarks += jetCollection;
533 name_bquarks += jetCollection;
534 name_other += jetCollection;
535 name_fraction += jetCollection;
538 std::string name_append=
"njet" +
std::to_string(nj) +
"_" + jetCollection;
539 name_gluons += name_append;
540 name_lquarks += name_append;
541 name_cquarks += name_append;
542 name_bquarks += name_append;
543 name_other += name_append;
544 name_fraction += name_append;
546 TH2D *hist_g = inputhistos[name_gluons];
547 TH2D *hist_lj = inputhistos[name_lquarks];
548 TH2D *hist_cj = inputhistos[name_cquarks];
549 TH2D *hist_bj = inputhistos[name_bquarks];
550 TH2D *hist_oth = inputhistos[name_other];
552 TH2D *hist_ratio = (
TH2D*)hist_g->Clone(name_fraction.c_str());
553 hist_ratio->SetTitle(hist_ratio->GetName());
554 hist_ratio->SetStats(kFALSE);
556 TH2D *hist_summ = (
TH2D*)hist_g->Clone(name_summ.c_str());
557 hist_summ->Add(hist_lj);
558 if(quarkflavour.compare(
"light") == 0){
559 hist_ratio->Divide(hist_summ);}
560 else if (quarkflavour.compare(
"lightC") == 0){
561 hist_summ->Add(hist_cj);
562 hist_ratio->Divide(hist_summ);}
563 else if(quarkflavour.compare(
"lightCB") == 0){
564 hist_summ->Add(hist_cj);
565 hist_summ->Add(hist_bj);
566 hist_ratio->Divide(hist_summ);}
568 std::cout<<
" WARNING: no flavor known to calculate the gluon fraction" << std::endl;
569 QuarkGluonFractionhistos.push_back(hist_ratio);
572 return QuarkGluonFractionhistos;
576 if(
histoname.find(
"EMPFlow")!=std::string::npos)
return "AntiKt4EMPFlow";
577 else if(
histoname.find(
"EMTopo")!=std::string::npos)
return "AntiKt4EMTopo";
578 else if(
histoname.find(
"LCTopo")!=std::string::npos)
return "AntiKt4LCTopo";
579 else std::cout<<
"ERROR: jet collection not found"<<std::endl;
586 if (
found!=std::string::npos){
588 std::size_t last =
histoname.find(
"_AntiKt");
597 printf(
"\n %s\n Extracting configuration: \n %s\n",std::string(75,
'=').c_str(),std::string(75,
'=').c_str());
601 std::cout<<
" The gluon fraction will be calculated for the following channels: \n";
603 std::cout<<
"\t"<<
i<<
") "<<
m_channel.at(
i)<<std::endl;
604 if(
m_detailedConfig) std::cout<<
" It will be calculated for different jet multiplicities.\n";
605 if(
m_mergechannels) std::cout<<
" The different channels will be merged.\n";
606 std::cout<<
" The gluon fraction will be calculated taking into account: "<<
m_doGluVsFlavour<<
" jets\n";
607 std::cout<<
"\n\n Systematic samples:\n";
608 std::cout<<
"\t 1 PointSystematic samples:\n";
617 std::cout<<
"\t\tScalefactor to apply: "<<
m_config1PointVec.at(
i).scalefactor<<std::endl;
619 std::cout<<
"\t 2 PointSystematic samples:\n";
628 std::cout<<
"\t\tDown-variated file: "<<
m_config2PointVec.at(
i).variation_down<<std::endl;
630 std::cout<<
"\t\tDown-variated folder: "<<
m_config2PointVec.at(
i).folder_down<<std::endl;
631 std::cout<<
"\t\tScalefactor to apply: "<<
m_config2PointVec.at(
i).scalefactor<<std::endl;
633 std::cout<<
"\n\n The histograms will be stored inside [channel]_"<<
m_OutputFile<<std::endl;
634 if (
m_doPS) std::cout<<
" All plots will be stored in PS files "<<std::endl;
635 printf(
"\n %s\n Configuration Extracted\n %s\n",std::string(75,
'=').c_str(),std::string(75,
'=').c_str());
639 std::cout<<
"ERROR! Unknown attribute: "<<
value<<
". Aborting!\n";
644 if(strncmp(
xml.GetAttrName(attr),
match.c_str(),100)!=0)
return false;
645 value=std::stof(
xml.GetAttrValue(attr));
650 if(strncmp(
xml.GetAttrName(attr),
match.c_str(),100)!=0)
return false;
656 if(strncmp(
xml.GetAttrName(attr),
match.c_str(),100)!=0)
return false;
657 if(strncmp(
xml.GetAttrValue(attr),
"true",100)==0)
659 else if(strncmp(
xml.GetAttrValue(attr),
"false",100)==0)
662 std::cout<<
"ERROR! Unknown attribute value: "<<
xml.GetAttrValue(attr)<<
". Choose between true or false! Exiting!\n";
671 XMLDocPointer_t xmldoc =
xml.ParseFile(configfile.c_str());
673 std::cout<<
"ERROR! No valid xml configuration file provided! Aborting!\n";
677 XMLNodePointer_t mainnode =
xml.DocGetRootElement(xmldoc);
684 if(strncmp(
xml.GetNodeName(
node),
"nominal",100)==0){
685 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
691 attr =
xml.GetNextAttr(attr);
694 else if(strncmp(
xml.GetNodeName(
node),
"systematic1point",100)==0){
696 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
706 attr =
xml.GetNextAttr(attr);
710 else if(strncmp(
xml.GetNodeName(
node),
"systematic2point",100)==0){
712 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
724 attr =
xml.GetNextAttr(attr);
727 std::cout<<
"systematic2point\n";
729 else if(strncmp(
xml.GetNodeName(
node),
"output",100)==0){
730 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
733 else if(strncmp(
xml.GetNodeName(
node),
"channel",100)==0){
734 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
735 std::string tmp_channel=
"";
739 else if(strncmp(
xml.GetNodeName(
node),
"mergechannels",100)==0){
740 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
743 else if(strncmp(
xml.GetNodeName(
node),
"detailed",100)==0){
744 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
747 else if(strncmp(
xml.GetNodeName(
node),
"gluon_vs_flavour",100)==0){
748 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
750 if(strncmp(
xml.GetAttrValue(attr),
"light" ,100)
751 *strncmp(
xml.GetAttrValue(attr),
"lightC" ,100)
752 *strncmp(
xml.GetAttrValue(attr),
"lightCB",100))
755 else if(strncmp(
xml.GetNodeName(
node),
"do_ps",100)==0){
756 XMLAttrPointer_t attr =
xml.GetFirstAttr(
node);
760 XMLNodePointer_t child =
xml.GetChild(
node);
763 child =
xml.GetNext(child);
767 bool istxt = ( (inputfilename.find(
".txt") + 4 ) == inputfilename.length());
771 reader.open (inputfilename);
774 if(f_name.compare(
"")==0)
continue;
775 TFile *
f = TFile::Open(f_name.c_str());
777 std::cout<<
"File "<<f_name<<
" from list "<<inputfilename<<
" not found! Please check against your configuration file! Aborting|\n";
784 TFile
f(inputfilename.c_str());
786 std::cout<<
"File "<<inputfilename<<
" not found! Please check against your configuration file! Aborting|\n";