7 #include <experimental/filesystem> 11 #include "TGraphErrors.h" 12 #include "TMultiGraph.h" 19 #include "TLegendEntry.h" 22 #include "TPaveLabel.h" 23 #include "TPaveText.h" 28 namespace fs = std::experimental::filesystem;
37 #define lumiFactor 1000. 41 #define DMRFactor 10000. 62 run(
Run), mu(y1), sigma(y2), muplus(y3), muminus(y5), sigmaplus(y4), sigmaminus(y6)
69 Point(Run, histo->GetMean(), histo->GetMeanError(),
70 histoplus->GetMean(), histoplus->GetMeanError(),
71 histominus->GetMean(), histominus->GetMeanError())
78 Point(Run, histo->GetMean(), histo->GetMeanError())
93 else return DMRFactor*hypot(sigmaplus,sigmaminus); };
104 bool checkrunlist(vector<int>
runs, vector<int> IOVlist={}, TString Year=
"2018");
108 void PixelUpdateLines(TCanvas *
c, TString Year=
"2018",
bool showlumi=
false, vector<int>pixelupdateruns={314881, 316758, 317527, 318228, 320377});
109 void PlotDMRTrends(vector<string>
labels={
"MB"}, TString Year=
"2018",
string myValidation=
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector<string> geometries={
"GT",
"SG",
"MP pix LBL",
"PIX HLS+ML STR fix"}, vector<Color_t> colours={kBlue, kRed, kGreen, kCyan}, TString outputdir=
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/alignmentObjects/acardini/DMRsTrends/",
bool pixelupdate=
false, vector<int> pixelupdateruns={314881, 316758, 317527, 318228, 320377},
bool showlumi=
false);
110 void compileDMRTrends(vector<int> IOVlist, vector<string>
labels={
"MB"}, TString Year=
"2018",
string myValidation=
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector<string> geometries={
"GT",
"SG",
"MP pix LBL",
"PIX HLS+ML STR fix"} ,
bool showlumi=
false,
bool FORCE=
false);
111 void DMRtrends(vector<int> IOVlist, vector<string>
labels={
"MB"}, TString Year=
"2018",
string myValidation=
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector<string> geometries={
"GT",
"SG",
"MP pix LBL",
"PIX HLS+ML STR fix"}, vector<Color_t> colours={kBlue, kRed, kGreen, kCyan}, TString outputdir=
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/alignmentObjects/acardini/DMRsTrends/",
bool pixelupdate=
false, vector<int> pixelupdateruns={314881, 316758, 317527, 318228, 320377},
bool showlumi=
false,
bool FORCE=
false);
168 geometry.ReplaceAll(
" ",
"_");
169 TString
name=geometry+
"_"+structure;
171 if(structure==
"TID"||structure==
"TEC")name+=
"_disc";
184 TString LumiFile=getenv(
"CMSSW_BASE"); LumiFile +=
"/src/Alignment/OfflineValidation/data/lumiper";
185 if(RunOrIOV!=
"run"&&RunOrIOV!=
"IOV")
cout <<
"ERROR: Please specify \"run\" or \"IOV\" to retrieve the luminosity run by run or for each IOV"<<endl;
187 if(Year!=
"2017"&&Year!=
"2018")
cout <<
"ERROR: Only 2017 and 2018 lumi-per-run/IOV are available, please check!"<<endl;
200 double *xscale = scale->GetX();
201 size_t N = scale->GetN();
203 for(
size_t i=0;
i<
N;
i++)runs.push_back(xscale[
i]);
213 vector<int> missingruns;
214 vector<int> lostruns;
215 bool problemfound=
false;
217 if(
find(runlist.begin(),runlist.end(),
run)==runlist.end()){
219 missingruns.push_back(
run);
222 if(!IOVlist.empty())
for(
int IOV : IOVlist){
223 if(
find(runs.begin(),runs.end(),IOV)==runs.end()){
225 lostruns.push_back(IOV);
228 std::sort(missingruns.begin(),missingruns.end());
230 if(!lostruns.empty()){
231 cout <<
"WARNING: some IOVs where not found among the list of available DMRs" << endl <<
"List of missing IOVs:" << endl;
232 for (
int lostrun : lostruns)
cout << to_string(lostrun) <<
" ";
235 if(!missingruns.empty()){
236 cout <<
"WARNING: some runs are missing in the run/luminosity txt file" << endl <<
"List of missing runs:" << endl;
237 for (
int missingrun : missingruns)
cout << to_string(missingrun) <<
" ";
249 void DMRtrends(vector<int> IOVlist,vector<string>
labels, TString Year,
string myValidation, vector<string> geometries, vector<Color_t> colours, TString outputdir,
bool pixelupdate, vector<int> pixelupdateruns,
bool showlumi,
bool FORCE){
250 compileDMRTrends(IOVlist, labels, Year, myValidation, geometries, showlumi, FORCE);
251 cout<<
"Begin plotting"<<endl;
252 PlotDMRTrends(labels, Year, myValidation, geometries, colours, outputdir, pixelupdate, pixelupdateruns, showlumi);
260 void compileDMRTrends(vector<int> IOVlist, vector<string>
labels, TString Year,
string myValidation, vector<string> geometries,
bool showlumi,
bool FORCE){
262 vector<int>RunNumbers;
264 TRegexp
regexp(
"[0-9][0-9][0-9][0-9][0-9][0-9]");
265 for (
const auto &
entry : fs::recursive_directory_iterator(myValidation)){
266 bool found_all_labels =
true;
267 for(
string label : labels){
268 if(
entry.path().string().find(
label)==std::string::npos) found_all_labels =
false;
270 if ((
entry.path().string().find(
"ExtendedOfflineValidation_Images/OfflineValidationSummary.root")!=std::string::npos)&&found_all_labels){
275 TString runstring(
filename(regexp));
276 if(runstring.IsFloat()){
277 int runN=runstring.Atoi();
278 RunNumbers.push_back(runN);
283 if(
checkrunlist(RunNumbers,IOVlist,Year)&&showlumi&&!FORCE){
284 cout <<
"Please fix the run/luminosities file!" << endl;
288 vector<TString> structures {
"BPIX",
"BPIX_y",
"FPIX",
"FPIX_y",
"TIB",
"TID",
"TOB",
"TEC"};
290 const map<TString,int>
nlayers{ {
"BPIX", 4}, {
"FPIX", 3}, {
"TIB", 4}, {
"TID", 3}, {
"TOB", 6}, {
"TEC", 9} };
293 map<pair<pair<TString,int>,TString>,
Geometry> mappoints;
295 std::sort(filenames.begin(),filenames.end());
298 TString runstring(
filename(regexp));
299 if(runstring.IsFloat()){
300 runN=runstring.Atoi();
303 cout <<
"ERROR: run number not retrieved for file " <<
filename << endl;
309 for (TString& structure: structures) {
310 TString structname = structure;
311 structname.ReplaceAll(
"_y",
"");
312 size_t layersnumber=
nlayers.at(structname);
313 for (
size_t layer=0; layer<=layersnumber;layer++){
316 TH1F *
histo =
dynamic_cast<TH1F*
>(f->Get( name));
326 cout <<
"Run" << runN <<
" Histogram: " << name <<
" not found" << endl;
328 point=
new Point(runN);
329 }
else if(structure!=
"TID"&&structure!=
"TEC"){
330 TH1F *histoplus =
dynamic_cast<TH1F*
>(f->Get((name+
"_plus")));
331 TH1F *histominus =
dynamic_cast<TH1F*
>(f->Get((name+
"_minus")));
332 if(!histoplus||!histominus){
333 cout <<
"Run" << runN <<
" Histogram: " << name <<
" plus or minus not found" << endl;
335 point=
new Point(runN, histo);
336 }
else point=
new Point(runN, histo, histoplus, histominus);
338 }
else point=
new Point(runN, histo);
339 mappoints[make_pair(make_pair(structure,layer),
geometry)].points.push_back(*point);
345 TString outname=myValidation+
"DMRtrends";
346 for(TString
label : labels){outname+=
"_"; outname+=
label;}
348 TFile *
fout = TFile::Open(outname,
"RECREATE");
349 for (TString& structure: structures) {
350 TString structname = structure;
351 structname.ReplaceAll(
"_y",
"");
352 size_t layersnumber=
nlayers.at(structname);
353 for (
size_t layer=0; layer<=layersnumber;layer++){
354 for (
string geometry : geometries) {
357 using Trend = vector<float> (
Geometry::*)()
const;
360 vector<TString>
variables {
"mu",
"sigma",
"muplus",
"sigmaplus",
"muminus",
"sigmaminus",
"deltamu",
"sigmadeltamu" };
361 vector<float>
runs = geom.
Run();
362 size_t n = runs.size();
363 vector<float> emptyvec;
364 for(
size_t i=0;
i < runs.size();
i++)emptyvec.push_back(0.);
365 for(
size_t iVar=0; iVar <
variables.size(); iVar++){
366 Trend trend=trends.at(iVar);
367 TGraphErrors *
g =
new TGraphErrors(n, runs.data(), (geom.*trend)().data(), emptyvec.data(), emptyvec.data());
373 vector<pair<TString,TString>> variablepairs {make_pair(
"mu",
"sigma"), make_pair(
"muplus",
"sigmaplus"), make_pair(
"muminus",
"sigmaminus"), make_pair(
"deltamu",
"sigmadeltamu") };
374 for(
size_t iVar=0; iVar < variablepairs.size(); iVar++){
375 Trend meantrend=trendspair.at(iVar).first;
376 Trend sigmatrend=trendspair.at(iVar).second;
377 TGraphErrors *
g =
new TGraphErrors(n, runs.data(), (geom.*meantrend)().data(), emptyvec.data(), (geom.*sigmatrend)().data());
379 TString graphname = name+
"_"+variablepairs.at(iVar).first;
380 graphname+=variablepairs.at(iVar).second;
394 vector<TPaveText*>
labels;
398 for(
int pixelupdaterun : pixelupdateruns){
401 else lumi=pixelupdaterun;
402 TLine *
line =
new TLine (lumi,c->GetUymin(),
lumi,c->GetUymax());
403 line->SetLineColor(kBlue);
404 line->SetLineStyle(9);
410 int iw = gPad->GetWw();
411 int ih = gPad->GetWh();
412 double x1p,y1p,x2p,y2p;
413 gPad->GetPadPar(x1p,y1p,x2p,y2p);
414 ix1 = (Int_t)(iw*x1p);
415 ix2 = (Int_t)(iw*x2p);
416 double wndc =
TMath::Min(1.,(
double)iw/(
double)ih);
417 double rw = wndc/(double)iw;
418 double x1ndc = (double)ix1*rw;
419 double x2ndc = (double)ix2*rw;
421 double rx1,ry1,rx2,ry2;
422 gPad->GetRange(rx1,ry1,rx2,ry2);
423 double rx = (x2ndc-x1ndc)/(rx2-rx1);
426 _sx = rx*(lumi-rx1)+x1ndc;
428 if( _sx < lastlumi ){
431 TPaveText *box=
new TPaveText(_sx+0.0015,0.86-index*0.04,_sx+0.035,0.89-index*0.04,
"blNDC");
432 box->SetFillColor(10);
433 box->SetBorderSize(1);
434 box->SetLineColor(kBlack);
435 TText *textRun = box->AddText(Form(
"%i",
int(pixelupdaterun)));
436 textRun->SetTextSize(0.025);
437 labels.push_back(box);
441 for(
auto label: labels){
453 int Nscale=scale->GetN();
454 double *xscale=scale->GetX();
455 double *
yscale=scale->GetY();
460 for(
int j=0;j<Nscale;j++){
479 vector<double> x,y,xerr,yerr;
482 size_t Nscale=scale->GetN();
483 double *xscale=scale->GetX();
484 double *
yscale=scale->GetY();
489 g->GetPoint(i,run,yvalue);
491 for(
size_t j=0;j<Nscale;j++){
495 }
else if(run>xscale[j])
continue;
497 if(yscale[index]==0||index<0.){
503 x .push_back(xvalue+(yscale[index]/(
lumiFactor*2.)));
509 yerr.push_back(g->GetErrorY(i));
511 xerr.push_back(yscale[index]/(
lumiFactor*2.));
516 g->GetHistogram()->Delete();
517 g->SetHistogram(
nullptr);
518 for(
size_t i=0;i<
N;i++){ g->SetPoint(i, x.at(i),y.at(i)); g->SetPointError(i, xerr.at(i),yerr.at(i));}
530 double* xerr=g->GetEX();
532 bins.push_back(x[0]-xerr[0]);
533 for(
size_t i=1;
i<
N;
i++){
534 if((x[
i-1]+xerr[
i-1]) > (bins.back() +
pow(10,-6))) bins.push_back(x[
i-1]+xerr[
i-1]);
535 if((x[
i]-xerr[
i]) > (bins.back() +
pow(10,-6))) bins.push_back(x[i]-xerr[i]);
538 bins.push_back(x[N-1]+xerr[N-1]);
539 TString histoname=
"histo_";
540 histoname+=g->GetName();
541 TH1F *
histo =
new TH1F(histoname,g->GetTitle(),bins.size()-1,bins.data());
542 for(
size_t i=0;
i<
N;
i++){
543 histo->Fill(x[
i],y[i]);
544 histo->SetBinError(histo->FindBin(x[i]),
pow(10,-6));
554 void PlotDMRTrends(vector<string>
labels, TString Year,
string myValidation, vector<string> geometries, vector<Color_t> colours, TString outputdir,
bool pixelupdate, vector<int> pixelupdateruns,
bool showlumi){
557 vector<TString> structures {
"BPIX",
"BPIX_y",
"FPIX",
"FPIX_y",
"TIB",
"TID",
"TOB",
"TEC"};
559 const map<TString,int>
nlayers{ {
"BPIX", 4}, {
"FPIX", 3}, {
"TIB", 4}, {
"TID", 3}, {
"TOB", 6}, {
"TEC", 9} };
562 TString
filename=myValidation+
"DMRtrends";
563 for(TString
label : labels){ filename+=
"_"; filename+=
label;}
565 TFile *
in=
new TFile(filename);
566 for (TString& structure: structures) {
567 TString structname = structure;
568 structname.ReplaceAll(
"_y",
"");
569 int layersnumber=
nlayers.at(structname);
570 for (
int layer=0; layer<=layersnumber;layer++){
571 vector<TString>
variables {
"mu",
"sigma",
"muplus",
"sigmaplus",
"muminus",
"sigmaminus",
"deltamu",
"sigmadeltamu",
"musigma",
"muplussigmaplus",
"muminussigmaminus",
"deltamusigmadeltamu"};
572 vector<string> YaxisNames {
"#mu [#mum]",
"#sigma_{#mu} [#mum]",
"#mu outward [#mum]",
"#sigma_{#mu outward} [#mum]",
"#mu inward [#mum]",
"#sigma_{#mu inward} [#mum]",
"#Delta#mu [#mum]",
"#sigma_{#Delta#mu} [#mum]",
"#mu [#mum]",
"#mu outward [#mum]",
"#mu inward [#mum]",
"#Delta#mu [#mum]",};
576 TCanvas *
c =
new TCanvas(
"dummy",
"",2000,800);
577 vector<Color_t>::iterator colour = colours.begin();
579 TMultiGraph *mg =
new TMultiGraph(structure,structure);
580 THStack *mh =
new THStack(structure,structure);
584 TGraphErrors *
g =
dynamic_cast<TGraphErrors*
> (in->Get(name+
"_"+
variables.at(
i)));
588 g->SetLineColor(*colour);
589 g->SetFillColorAlpha(*colour,0.2);
591 vector<vector<double>> vectors;
594 g->SetLineColor(*colour);
595 g->SetMarkerColor(*colour);
597 h->SetLineColor(*colour);
598 h->SetMarkerColor(*colour);
619 double range=max-
min;
620 if(((variable==
"sigma"||variable==
"sigmaplus"||variable==
"sigmaminus"||variable==
"sigmadeltamu")&&range>=2)){
624 mg->SetMaximum(max+range*0.1);
625 mg->SetMinimum(min-range*0.3);
628 char* Ytitle= (
char *)YaxisNames.at(
i).c_str();
629 mg->GetYaxis()->SetTitle(Ytitle);
630 mg->GetXaxis()->SetTitle(showlumi ?
"Integrated lumi [1/fb]" :
"IOV number");
631 mg->GetXaxis()->CenterTitle(
true);
632 mg->GetYaxis()->CenterTitle(
true);
633 mg->GetYaxis()->SetTitleOffset(.5);
634 mg->GetYaxis()->SetTitleSize(.05);
635 mg->GetXaxis()->SetTitleSize(.04);
636 if(showlumi) mg->GetXaxis()->SetLimits(0.,mg->GetXaxis()->GetXmax());
637 gStyle->SetOptTitle(0);
645 gStyle->SetLegendTextSize(0.025);
648 TLegend *
legend = c->BuildLegend(0.3,0.15,0.3,0.15);
649 int Ngeom=geometries.size();
650 legend->SetNColumns(Ngeom);
652 TString structtitle = structure;
654 if(structure==
"TID"||structure==
"TEC"||structure==
"FPIX"||structure==
"FPIX_y")structtitle+=
"_disc";
655 else structtitle+=
"_layer";
658 legend->SetHeader(
"#scale[1.2]{#bf{CMS} Work in progress}");
661 legend->AddEntry((TObject*)
nullptr,structtitle.Data(),
"h");
668 mh->Draw(
"nostack same");
670 TString structandlayer =
getName(structure,layer,
"");
671 TString printfile=outputdir;
672 for(TString
label : labels){printfile+=
label;printfile+=
"_";}
673 printfile+=variable+structandlayer;
674 c->SaveAs(printfile+
".pdf");
675 c->SaveAs(printfile+
".eps");
676 c->SaveAs(printfile+
".png");
704 vector<int>IOVlist={290543, 296702, 296966, 297224, 297281, 297429, 297467, 297484, 297494, 297503, 297557, 297599, 297620, 297660, 297670, 298678, 298996, 299062, 299096, 299184, 299327, 299368, 299381, 299443, 299480, 299592, 299594, 299649, 300087, 300155, 300233, 300237, 300280, 300364, 300389, 300399, 300459, 300497, 300515, 300538, 300551, 300574, 300636, 300673, 300780, 300806, 300812, 301046, 301417, 302131, 302573, 302635, 303825, 303998, 304170, 304505, 304672, 305040, 305081};
706 vector<int> pixelupdateruns {290543, 297281, 298653, 299443, 300389, 302131, 303790, 304911, 305898};
708 cout <<
"WARNING: Running function with arguments specified in DMRtrends.cc" << endl <<
"If you want to specify the arguments from command line run the macro as follows:" << endl <<
"DMRtrends labels pathtoDMRs geometriesandcolourspairs outputdirectory showpixelupdate showlumi FORCE" << endl;
711 DMRtrends(IOVlist,{
"vUL17",
"MB"},
"2017",
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/EOY17/", {
"EOY17",
"full ML pixel + strip",
"SG-mp2607",
"mp2993"}, {kRed, kBlack, kBlue, kGreen},
"/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/alignmentObjects/acardini/DMRsTrends/",
true, pixelupdateruns,
true,
true);
716 else if (argc < 11) {
717 cout <<
"DMRtrends IOVlist labels Year pathtoDMRs geometriesandcolourspairs outputdirectory pixelupdatelist showpixelupdate showlumi FORCE" << endl;
723 all_labels = argv[2],
725 pathtoDMRs = argv[4],
726 geometrieandcolours = argv[5],
727 outputdirectory = argv[6],
728 pixelupdatelist = argv[7];
729 bool showpixelupdate = argv[8],
732 TObjArray *labelarray = all_labels.Tokenize(
",");
734 for(
int i=0;
i < labelarray->GetEntries();
i++)labels.push_back((
string)(labelarray->At(
i)->GetName()));
735 TObjArray *IOVarray = runlist.Tokenize(
",");
737 for(
int i=0;
i < IOVarray->GetEntries();
i++)IOVlist.push_back(stoi(IOVarray->At(
i)->GetName()));
738 vector<int> pixelupdateruns;
739 TObjArray *PIXarray = pixelupdatelist.Tokenize(
",");
740 for(
int i=0;
i < PIXarray->GetEntries();
i++)pixelupdateruns.push_back(stoi(PIXarray->At(
i)->GetName()));
741 vector<string> geometries;
742 vector<Color_t> colours;
743 TObjArray *geometrieandcolourspairs = geometrieandcolours.Tokenize(
",");
744 for (
int i=0;
i < geometrieandcolourspairs->GetEntries();
i++) {
745 TObjArray *geomandcolourvec = TString(geometrieandcolourspairs->At(
i)->GetName()).Tokenize(
":");
746 geometries.push_back(geomandcolourvec->At(0)->GetName());
747 colours.push_back((Color_t)(atoi(geomandcolourvec->At(1)->GetName())));
749 DMRtrends(IOVlist,labels,Year,pathtoDMRs.Data(),geometries,colours,outputdirectory.Data(),showpixelupdate, pixelupdateruns,showlumi,FORCE);
vector< float > SigmaPlus() const
Geometry & operator=(const Geometry &geom)
vector< float > SigmaDeltaMu() const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
TString lumifileperyear(TString Year="2018", string RunOrIOV="IOV")
void DMRtrends(vector< int > IOVlist, vector< string >labels={"MB"}, TString Year="2018", string myValidation="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector< string > geometries={"GT","SG","MP pix LBL","PIX HLS+ML STR fix"}, vector< Color_t > colours={kBlue, kRed, kGreen, kCyan}, TString outputdir="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/alignmentObjects/acardini/DMRsTrends/", bool pixelupdate=false, vector< int > pixelupdateruns={314881, 316758, 317527, 318228, 320377}, bool showlumi=false, bool FORCE=false)
Point(float Run, TH1 *histo, TH1 *histoplus, TH1 *histominus)
double getintegratedlumiuptorun(int run, TString Year="2018", double min=0.)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void SetTitle(TString Title)
vector< float > DeltaMu() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
bool checkrunlist(vector< int > runs, vector< int > IOVlist={}, TString Year="2018")
Point(float Run, TH1 *histo)
void PlotDMRTrends(vector< string >labels={"MB"}, TString Year="2018", string myValidation="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector< string > geometries={"GT","SG","MP pix LBL","PIX HLS+ML STR fix"}, vector< Color_t > colours={kBlue, kRed, kGreen, kCyan}, TString outputdir="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/alignmentObjects/acardini/DMRsTrends/", bool pixelupdate=false, vector< int > pixelupdateruns={314881, 316758, 317527, 318228, 320377}, bool showlumi=false)
vector< float > MuMinus() const
Point & operator=(const Point &p)
void scalebylumi(TGraphErrors *g, TString Year="2018", double min=0.)
vector< int > runlistfromlumifile(TString Year="2018")
Class Geometry Contains vector for fit parameters (mean, sigma, etc.) obtained from multiple IOVs See...
vector< float > Run() const
vector< float > Sigma() const
void compileDMRTrends(vector< int > IOVlist, vector< string >labels={"MB"}, TString Year="2018", string myValidation="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN/data/commonValidation/results/acardini/DMRs/", vector< string > geometries={"GT","SG","MP pix LBL","PIX HLS+ML STR fix"}, bool showlumi=false, bool FORCE=false)
float GetSigmaMinus() const
void PixelUpdateLines(TCanvas *c, TString Year="2018", bool showlumi=false, vector< int >pixelupdateruns={314881, 316758, 317527, 318228, 320377})
vector< float > Mu() const
TString getName(TString structure, int layer, TString geometry)
float GetSigmaDeltaMu() const
float GetSigmaPlus() const
vector< float > SigmaMinus() const
Structure Point Contains parameters of Gaussian fits to DMRs.
vector< float > MuPlus() const
vector< float > GetQuantity(float(Point::*getter)() const) const
Point(float Run=-999., float y1=-999., float y2=-999., float y3=-999., float y4=-999., float y5=-999., float y6=-999.)
Power< A, B >::type pow(const A &a, const B &b)
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
int main(int argc, char *argv[])
TH1F * ConvertToHist(TGraphErrors *g)