1 |
+ |
// [USAGE] |
2 |
+ |
// Modify fillNumbers[] to corresponding runs |
3 |
+ |
// .L pvHistory.C+ |
4 |
+ |
// pvHistory("skimmed files",true) ==> the second argument means drawing w.r.t LHC fill number instead of runnumber |
5 |
+ |
|
6 |
|
#if !defined(__CINT__) && !defined(__MAKECINT__) |
7 |
|
#include "DataFormats/FWLite/interface/Handle.h" |
8 |
|
#include "DataFormats/FWLite/interface/Event.h" |
29 |
|
|
30 |
|
using namespace std; |
31 |
|
typedef map<unsigned int, unsigned int> RunNumberMap; |
32 |
+ |
typedef map<RunNumberMap,unsigned int> FillNumberMap; |
33 |
|
|
34 |
+ |
bool LHCFill; |
35 |
|
// |
36 |
|
// iterative fit of +- 2 sigma Gaussian core on a 1d histogram |
37 |
|
// |
184 |
|
} |
185 |
|
} |
186 |
|
|
187 |
+ |
void setRunNumberLabels (TH1* histo, FillNumberMap& fillNumbers) { |
188 |
+ |
char label[32]; |
189 |
+ |
TAxis* axis = histo->GetXaxis(); |
190 |
+ |
for ( FillNumberMap::const_iterator i=fillNumbers.begin(); |
191 |
+ |
i!=fillNumbers.end(); ++i ) { |
192 |
+ |
RunNumberMap tmp((*i).first); |
193 |
+ |
if (tmp.begin()->first == 124120 || tmp.begin()->first == 124275) |
194 |
+ |
sprintf(label,"%d %s",(*i).second," (2.36 TeV)"); |
195 |
+ |
else |
196 |
+ |
sprintf(label,"%d",(*i).second); |
197 |
+ |
axis->SetBinLabel((tmp.begin()->second)+1,label); |
198 |
+ |
} |
199 |
+ |
} |
200 |
|
|
201 |
|
// |
202 |
|
// plot PV distribution for a single run with indication of BS position |
234 |
|
|
235 |
|
hpv->Draw("same"); |
236 |
|
|
237 |
< |
sprintf(title,"pv%cRun%d.png",coord,run); |
237 |
> |
sprintf(title,"pv%cRun%d.eps",coord,run); |
238 |
|
c->SaveAs(title); |
239 |
|
delete c; |
240 |
|
} |
294 |
|
l0->AddEntry(bsVsRun," Beam Spot","f"); |
295 |
|
l0->Draw(); |
296 |
|
|
297 |
< |
c->Print(TString(canvasTitle)+".png"); |
297 |
> |
c->Print(TString(canvasTitle)+".eps"); |
298 |
|
|
299 |
|
} |
300 |
|
} |
302 |
|
// |
303 |
|
// main entry point |
304 |
|
// |
305 |
< |
void pvHistory (const vector<string>& fileNames) { |
305 |
> |
void pvHistory (const vector<string>& fileNames, bool isFill=false) { |
306 |
> |
LHCFill = isFill; |
307 |
|
|
308 |
|
gROOT->SetStyle("CMS"); |
309 |
|
fwlite::ChainEvent ev(fileNames); |
314 |
|
// create list of runs with > 100 PVs |
315 |
|
// |
316 |
|
RunNumberMap runNumberCounts; |
317 |
+ |
int fillNumbers [] = {904,907,907,911,911,911,912,912,916,919,923}; |
318 |
|
int lastRun(0); |
319 |
|
for( ev.toBegin(); !ev.atEnd(); ++ev) { |
320 |
|
unsigned int run = ev.id().run(); |
329 |
|
// create list of bin indices |
330 |
|
unsigned int nRun(0); |
331 |
|
RunNumberMap runNumberIndices; |
332 |
+ |
FillNumberMap fillNumberIndices; |
333 |
+ |
int nFill=0; |
334 |
|
for ( RunNumberMap::iterator i=runNumberCounts.begin(); |
335 |
< |
i!=runNumberCounts.end(); ++i ) { |
336 |
< |
if ( (*i).second>100 ) runNumberIndices[(*i).first] = nRun++; |
335 |
> |
i!=runNumberCounts.end(); ++i,nRun++,nFill++ ) { |
336 |
> |
if ( (*i).second>100 ) { |
337 |
> |
runNumberIndices[(*i).first] = nRun; |
338 |
> |
RunNumberMap tmp; |
339 |
> |
tmp[(*i).first] = nRun; |
340 |
> |
fillNumberIndices[tmp] = fillNumbers[nFill]; |
341 |
> |
} |
342 |
> |
} |
343 |
> |
for ( FillNumberMap::iterator i=fillNumberIndices.begin(); |
344 |
> |
i!=fillNumberIndices.end();++i){ |
345 |
> |
RunNumberMap tmp((*i).first); |
346 |
> |
cout << "Run = " << tmp.begin()->first << "; Fill = " << (*i).second << endl; |
347 |
|
} |
348 |
|
cout << "Found " << nRun << " run numbers" << endl; |
349 |
|
// |
367 |
|
// |
368 |
|
lastRun = -1; |
369 |
|
int idx(-1); |
370 |
< |
int nev(0); |
370 |
> |
//int nev(0); |
371 |
|
for( ev.toBegin(); !ev.atEnd(); ++ev) { |
372 |
|
int run = ev.id().run(); |
373 |
|
// if ( (++nev)%1000 == 0 ) cout << "processing record " << nev << " ( run " |
434 |
|
// |
435 |
|
// set run numbers on x-axis labels |
436 |
|
// |
437 |
< |
setRunNumberLabels(npvVsRun,runNumberIndices); |
438 |
< |
setRunNumberLabels(pvxVsRun,runNumberIndices); |
439 |
< |
setRunNumberLabels(pvyVsRun,runNumberIndices); |
440 |
< |
setRunNumberLabels(pvzVsRun,runNumberIndices); |
441 |
< |
setRunNumberLabels(nbsVsRun,runNumberIndices); |
442 |
< |
setRunNumberLabels(bsxVsRun,runNumberIndices); |
443 |
< |
setRunNumberLabels(bsyVsRun,runNumberIndices); |
444 |
< |
setRunNumberLabels(bszVsRun,runNumberIndices); |
445 |
< |
setRunNumberLabels(bsxVsRunMean,runNumberIndices); |
446 |
< |
setRunNumberLabels(bsyVsRunMean,runNumberIndices); |
447 |
< |
setRunNumberLabels(bszVsRunMean,runNumberIndices); |
437 |
> |
if (! LHCFill) { |
438 |
> |
setRunNumberLabels(npvVsRun,runNumberIndices); |
439 |
> |
setRunNumberLabels(pvxVsRun,runNumberIndices); |
440 |
> |
setRunNumberLabels(pvyVsRun,runNumberIndices); |
441 |
> |
setRunNumberLabels(pvzVsRun,runNumberIndices); |
442 |
> |
setRunNumberLabels(nbsVsRun,runNumberIndices); |
443 |
> |
setRunNumberLabels(bsxVsRun,runNumberIndices); |
444 |
> |
setRunNumberLabels(bsyVsRun,runNumberIndices); |
445 |
> |
setRunNumberLabels(bszVsRun,runNumberIndices); |
446 |
> |
setRunNumberLabels(bsxVsRunMean,runNumberIndices); |
447 |
> |
setRunNumberLabels(bsyVsRunMean,runNumberIndices); |
448 |
> |
setRunNumberLabels(bszVsRunMean,runNumberIndices); |
449 |
> |
} |
450 |
> |
else{ |
451 |
> |
setRunNumberLabels(npvVsRun,fillNumberIndices); |
452 |
> |
setRunNumberLabels(pvxVsRun,fillNumberIndices); |
453 |
> |
setRunNumberLabels(pvyVsRun,fillNumberIndices); |
454 |
> |
setRunNumberLabels(pvzVsRun,fillNumberIndices); |
455 |
> |
setRunNumberLabels(nbsVsRun,fillNumberIndices); |
456 |
> |
setRunNumberLabels(bsxVsRun,fillNumberIndices); |
457 |
> |
setRunNumberLabels(bsyVsRun,fillNumberIndices); |
458 |
> |
setRunNumberLabels(bszVsRun,fillNumberIndices); |
459 |
> |
setRunNumberLabels(bsxVsRunMean,fillNumberIndices); |
460 |
> |
setRunNumberLabels(bsyVsRunMean,fillNumberIndices); |
461 |
> |
setRunNumberLabels(bszVsRunMean,fillNumberIndices); |
462 |
> |
} |
463 |
|
// |
464 |
|
// fit histograms |
465 |
|
// |
493 |
|
// |
494 |
|
// save histograms |
495 |
|
// |
496 |
< |
TFile* fo = new TFile("../skim_BSC0_AND_40OR41_MinBias_Dec19th_v1.root","recreate"); |
496 |
> |
TFile* fo = new TFile("./skim_BSC0_AND_40OR41_MinBias_Dec19th_v1_plots.root","recreate"); |
497 |
|
pvxVsRun->Write(); |
498 |
|
pvyVsRun->Write(); |
499 |
|
pvzVsRun->Write(); |
523 |
|
// |
524 |
|
void pvHistory (const char* fileName) { |
525 |
|
vector<string> fileNames(1,fileName); |
526 |
< |
pvHistory(fileNames); |
526 |
> |
pvHistory(fileNames,false); |
527 |
> |
} |
528 |
> |
|
529 |
> |
void pvHistory (const char* fileName,bool isFill) { |
530 |
> |
vector<string> fileNames(1,fileName); |
531 |
> |
pvHistory(fileNames,isFill); |
532 |
|
} |
533 |
|
|