1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
#include <Riostream.h>
#include <string>
#include <sys/stat.h>
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TChain.h"
#include "TFile.h"
#include "TDirectory.h"
bool CheckFileExistence(char *filename);
void PlotTrackStats();
void PlotTrackStats(){
//define paths
char basepath[128];
sprintf(basepath,"./MONITORING/DQM");
char filename[256];
const int StartFile=1;//211;
const int FinFile=999;
int addedfiles=0;
//create a chain with all the DQM histograms
TChain *ch=new TChain("AlignmentTrackStats");
for(int i=StartFile;i<=FinFile;++i){
sprintf(filename,"%s/CTF/TkAlCaRecoSkimming.ALCARECOTkAlMinBias.ALCARECOTkAlMinBias_cfg.%d_TrackStats.root",basepath,i);
// if(!CheckFileExistence(filename)){
// cout<<"Added to the chain "<<i-1<<" files"<<endl;
// break;
// }
if(CheckFileExistence(filename)){ch->Add(filename);addedfiles++;}
if( (i%50==0) || (i==FinFile))cout<<"File: "<<i<<" "<<flush;
}
cout<<"\nAdded to the chain "<<addedfiles<<" files"<<endl;
//create histograms with the TTree:Draw function
ch->Draw("Chi2n>>hchi2n(600,0.0,12.0)","Ntracks>0","goff");
TH1F *hchi2n=(TH1F*)gDirectory->Get("hchi2n");
ch->Draw("Eta>>heta(60,-3.0,3.0)","Ntracks>0","goff");
TH1F *heta=(TH1F*)gDirectory->Get("heta");
ch->Draw("Phi>>hphi(628,-3.14,3.14)","Ntracks>0","goff");
TH1F *hphi=(TH1F*)gDirectory->Get("hphi");
ch->Draw("Nhits[][0]>>hnhits(40,0,40)","Ntracks>0","goff");
TH1F *hnhits=(TH1F*)gDirectory->Get("hnhits");
hnhits->SetTitle("Total # hits for CTFSkimmed");
ch->Draw("P>>hmom(1005,0,1005.0)","Ntracks>0&&P<1000.0","goff");
TH1F *hmom=(TH1F*)gDirectory->Get("hmom");
ch->Draw("Ntracks>>hntrks(12,0,12.0)","","goff");
TH1F *hntrks=(TH1F*)gDirectory->Get("hntrks");
hchi2n->SetTitle("Normalised #chi^{2} (ALL TRKS)");
hmom->SetTitle("Momentum distribution (ALL TRKS && P<1000 GeV)");
heta->SetTitle("#eta distribution (ALL TRKS)");
hphi->SetTitle("#phi distribution (ALL TRKS)");
hntrks->SetTitle("Number of tracks in event passing cuts");
ch->Draw("Chi2n>>hchi2nPXB(600,0.0,12.0)","Ntracks>0&&(Nhits[][1]>0||Nhits[][2]>0)","goff");
TH1F *hchi2nPXB=(TH1F*)gDirectory->Get("hchi2nPXB");
ch->Draw("Eta>>hetaPXB(60,-3.0,3.0)","Ntracks>0&&Nhits[][1]>0","goff");
TH1F *hetaPXB=(TH1F*)gDirectory->Get("hetaPXB");
ch->Draw("Phi>>hphiPXB(628,-3.14,3.14)","Ntracks>0&&Nhits[][1]>0","goff");
TH1F *hphiPXB=(TH1F*)gDirectory->Get("hphiPXB");
ch->Draw("Nhits[][1]>>hnhitsPXB(8,0,8)","Ntracks>0&&(Nhits[][1]>0||Nhits[][2]>0)","goff");
TH1F *hnhitsPXB=(TH1F*)gDirectory->Get("hnhitsPXB");
hnhitsPXB->SetTitle("Total # hits in PXB (TRKS >=1 PXB hits)");
ch->Draw("Nhits[][0]>>hnhitstotPXB(40,0,40)","Ntracks>0&&(Nhits[][1]>0||Nhits[][2]>0)","goff");
TH1F *hnhitstotPXB=(TH1F*)gDirectory->Get("hnhitstotPXB");
hnhitstotPXB->SetTitle("Total # hits (TRKS >=1 PXB hits)");
ch->Draw("P>>hmomPXB(1005,0,1005.0)","Ntracks>0&&P<1000.0&&(Nhits[][1]>0||Nhits[][2]>0)","goff");
TH1F *hmomPXB=(TH1F*)gDirectory->Get("hmomPXB");
hchi2nPXB->SetTitle("Normalised #chi^{2} (TRKS >=1 PXB hits)");
hmomPXB->SetTitle("Momentum distribution (TRKS >=1 PXB hits && P<1000 GeV)");
hetaPXB->SetTitle("#eta distribution (TRKS >=1 PXB hits)");
hphiPXB->SetTitle("#phi distribution (TRKS >=1 PXB hits)");
//plot them
TCanvas *c1=new TCanvas("cantrkstats1","Track Stats 1",1000,1200);
c1->Divide(2,3);
c1->cd(1);
hchi2n->Draw();
c1->cd(2);
heta->Draw();
c1->cd(3);
hphi->Draw();
c1->cd(4);
gPad->SetLogy();
hmom->Draw();
c1->cd(5);
hnhits->Draw();
c1->cd(6);
hntrks->Draw();
TCanvas *c2=new TCanvas("cantrkstats2","Track Stats PXB",1000,1200);
c2->Divide(2,3);
c2->cd(1);
hchi2nPXB->Draw();
c2->cd(2);
hetaPXB->Draw();
c2->cd(3);
hphiPXB->Draw();
c2->cd(4);
gPad->SetLogy();
hmomPXB->Draw();
c2->cd(6);
hnhitsPXB->Draw();
c2->cd(5);
hnhitstotPXB->Draw();
//save png files
c1->SaveAs("./ALCARECOTkAlMinBias_CTFSkimmed_TrackStats_ALLTRKS.png");
c2->SaveAs("./ALCARECOTkAlMinBias_CTFSkimmed_TrackStats_PIXTRKS.png");
delete c1;
delete c2;
cout<<"Total Events: "<<ch->Draw("Ntracks","","goff")<<endl;
cout<<"Total tracks: "<<ch->Draw("Ntracks","Ntracks>0","goff")<<endl;
cout<<"Tracks with P<1000.0 GeV: "<<ch->Draw("Ntracks","Ntracks>0&&P<1000.0","goff") <<endl;
ch->Draw("Nhits[][0]:P>>hnhvsp(1000,0.0,1000.0,40,0,40)","Ntracks>0&&P<1000.0","goff");
TH2F *hnhvsp=(TH2F*)gDirectory->Get("hnhvsp");
hnhvsp->SetMarkerStyle(7);
hnhvsp->SetXTitle("P (GeV)");
hnhvsp->SetYTitle("# TOT hits");
hnhvsp->SetTitle("Correlation momentum vs #hits of CTF tracks");
TCanvas *can_nhvsp=new TCanvas("cnhvsp","cnhvsp",900,900);
can_nhvsp->cd();
// cout<<"start draw"<<endl;
hnhvsp->Draw("colz");
//cout<<"start save"<<endl;
can_nhvsp->SaveAs("./ALCARECOTkAlMinBias_CTFSkimmed_NhitsVsMom.ps");
}
bool CheckFileExistence(char *filename){
// cout<<"Checking file "<<filename<<endl;
bool flag = true;
ifstream fin(filename,ios::in);
if(fin.fail())flag=false;
fin.close();
return flag;
}
|