]>
Commit | Line | Data |
---|---|---|
b1a2430c | 1 | |
2 | TGraphErrors * MakeGraphSparse(TTree * tree, const Char_t * expr="mean-fdelta:run", const Char_t * cut="isTPC&&ptype==0&&theta>0"){ | |
3 | // Format of expr: Var:Error:Run | |
4 | // | |
5 | // Make a sparse draw of the variables | |
6 | // Format of expr : Var:Error:Run | |
7 | // | |
8 | ||
9 | const Int_t entries = tree->Draw(expr,cut,"goff"); | |
10 | ||
11 | Double_t *graphX, *graphY, *graphError; | |
12 | ||
13 | //check whether error argument exists in expr | |
14 | if(!tree->GetV3()){ | |
15 | graphX = tree->GetV2(); | |
16 | graphY = tree->GetV1(); | |
17 | } | |
18 | else{ | |
19 | graphX = tree->GetV3(); | |
20 | graphY = tree->GetV1(); | |
21 | graphError = tree->GetV2(); | |
22 | } | |
23 | ||
24 | // sort according to run number | |
25 | Int_t *index = new Int_t[entries]; | |
26 | TMath::Sort(entries,graphX,index,false); | |
27 | ||
28 | // define arrays for the new graph | |
29 | Double_t *tempArray = new Double_t[entries]; | |
30 | Double_t *xError = new Double_t[entries]; | |
31 | Double_t *yError = new Double_t[entries]; | |
32 | Int_t *vrun = new Int_t[entries]; | |
33 | Double_t count = 0.5; | |
34 | ||
35 | // evaluate arrays for the new graph accroding to the run-number | |
36 | Int_t icount=0; | |
37 | tempArray[index[0]] = count; | |
38 | xError[0] = 0; | |
39 | yError[0] = 0; | |
40 | if(tree->GetV3()) | |
41 | yError[index[0]] = graphError[index[0]]; | |
42 | vrun[0] = graphX[index[0]]; | |
43 | ||
44 | // loop the rest entries | |
45 | for(Int_t i=1;i<entries;i++){ | |
46 | xError[i] = 0; | |
47 | yError[i] = 0; | |
48 | ||
49 | if(tree->GetV3()) | |
50 | yError[i] = graphError[index[i]]; | |
51 | ||
52 | ||
53 | if(graphX[index[i]]==graphX[index[i-1]]) | |
54 | tempArray[index[i]] = count; | |
55 | else if((graphX[index[i]]!=graphX[index[i-1]])){ | |
56 | count++; | |
57 | icount++; | |
58 | tempArray[index[i]] = count; | |
59 | vrun[icount]=graphX[index[i]]; | |
60 | } | |
61 | } | |
62 | ||
63 | // count the number of xbins (run-wise) for the new graph | |
64 | const Int_t newNbins = int(count+0.5); | |
65 | Double_t *newBins = new Double_t[newNbins+1]; | |
66 | for(Int_t i=0; i<=count+1;i++){ | |
67 | newBins[i] = i; | |
68 | } | |
69 | ||
70 | // define and fill the new graph | |
71 | TGraphErrors *graphNew = new TGraphErrors(entries,tempArray,graphY,xError,yError); | |
72 | graphNew->GetXaxis()->Set(newNbins,newBins); | |
73 | ||
74 | // set the bins for the x-axis | |
75 | Char_t xName[50]; | |
76 | for(Int_t i=0;i<count;i++){ | |
77 | sprintf(xName,"%d",Int_t(vrun[i])); | |
78 | graphNew->GetXaxis()->SetBinLabel(i+1,xName); | |
79 | } | |
80 | graphNew->GetHistogram()->SetTitle(""); | |
81 | ||
82 | // memory clearing | |
83 | delete [] xError; | |
84 | delete [] yError; | |
85 | delete [] tempArray; | |
86 | delete [] index; | |
87 | delete [] newBins; | |
88 | delete [] vrun; | |
89 | return graphNew; | |
90 | ||
91 | } | |
92 | //------------------------------------------------------------------------------------------------ | |
93 | drawPerformanceT0QATrends(const char* inFile = "trending.root", const char* runType="pp") { | |
94 | // | |
95 | // | |
96 | gROOT->Reset(); | |
97 | gROOT->SetStyle("Plain"); | |
98 | gStyle->SetPalette(1); | |
99 | gStyle->SetLabelSize(0.04,"x"); | |
100 | ||
101 | ||
102 | // open input file | |
103 | // | |
104 | TFile *file = TFile::Open(inFile); | |
105 | if(!file) return; | |
106 | file->cd(); | |
107 | ||
108 | TTree *tree = (TTree*)file->Get("t0QA"); | |
109 | if(!tree) return; | |
110 | int const entries = tree->GetEntries(); | |
111 | cout<<"number of entries "<<entries<<endl; | |
112 | TH1F *frame = new TH1F(); | |
113 | ||
114 | //const float norm_runs = 8.0; | |
115 | if(entries<8) | |
116 | const float norm_runs =10.0; | |
117 | else if(entries>=8&&entries<16) | |
118 | const float norm_runs =20.0; | |
119 | else | |
120 | const float norm_runs =50.0; | |
121 | int const canvas_width = int(((entries*1.0)/norm_runs)*2000.0); | |
122 | if(entries>50){ | |
123 | gStyle->SetTickLength(0.03*norm_runs/(entries*1.0),"Y"); | |
124 | gStyle->SetTitleYOffset((norm_runs/(entries*1.0))*0.8); | |
125 | gStyle->SetPadLeftMargin(0.1*norm_runs/(entries*1.0)); | |
126 | gStyle->SetPadRightMargin(0.1*norm_runs/(entries*1.0)); | |
127 | } | |
128 | ||
129 | //Define ranges of you trending plots | |
130 | double resolutionMin = 10, resolutionMax = 50; // OR A - OR C | |
131 | double oraplusorcMin = -100, oraplusorcMax = 100; // OR A + OR CA | |
132 | double oraMin = -100, oraMax = 100; // OR A | |
133 | double orcMin = -100, orcMax = 100; // OR C | |
134 | double amplMin =0, amplMax =3 ; // amplitude in each PMT | |
135 | double timeMin , timeMax ; // amplitude in each PMT | |
136 | //-----> add ranges of your new trending plot | |
137 | ||
138 | ||
139 | TCanvas *c1 = new TCanvas("can","can",canvas_width,500); | |
140 | c1->SetGridy(1); | |
141 | c1->SetGridx(1); | |
142 | c1->SetBottomMargin(0.17); | |
143 | ||
144 | /****** T0 ORA+ORC ******/ | |
145 | TGraphErrors *grSum = MakeGraphSparse(tree,"tzeroOrAPlusOrC:run",""); | |
146 | grSum->SetMarkerStyle(20); | |
147 | grSum->SetMarkerSize(1.0); | |
148 | grSum->SetMarkerColor(2); | |
149 | TGraphErrors *grORA = MakeGraphSparse(tree,"tzeroOrA:run",""); | |
150 | grORA->SetMarkerStyle(28); | |
151 | grORA->SetMarkerSize(1.0); | |
152 | grORA->SetMarkerColor(4); | |
153 | TGraphErrors *grORC = MakeGraphSparse(tree,"tzeroOrC:run",""); | |
154 | grORC->SetMarkerStyle(25); | |
155 | grORC->SetMarkerSize(1.0); | |
156 | grORC->SetMarkerColor(1); | |
157 | ||
158 | grSum->GetHistogram()->SetYTitle("mean [ps]"); | |
159 | grSum->GetHistogram()->SetTitle("T0 ORA, ORC and (ORA+ORC)/2"); | |
160 | grSum->GetHistogram()->SetMinimum(oraplusorcMin); | |
161 | grSum->GetHistogram()->SetMaximum(oraplusorcMax); | |
162 | grSum->Draw("AP"); | |
163 | grORA->Draw("psame"); | |
164 | grORC->Draw("psame"); | |
165 | TLegend *leg = new TLegend(0.1,0.85,0.3,0.95," ","brNDC"); | |
166 | leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.05);leg->SetNColumns(3);leg->SetColumnSeparation(1); | |
167 | leg->AddEntry(grORA,"ORA","p"); | |
168 | leg->AddEntry(grORC,"ORC","p"); | |
169 | leg->AddEntry(grSum,"(ORA+ORC)/2","p"); | |
170 | leg->Draw(); | |
171 | ||
172 | grSum->GetXaxis()->LabelsOption("v"); | |
173 | c1->SaveAs("meanT0OrAPlusOrC_vs_run.gif"); | |
174 | ||
175 | /****** T0 Resolution ******/ | |
176 | TGraphErrors *gr = MakeGraphSparse(tree,"resolution:run",""); | |
177 | gr->SetMarkerStyle(20); | |
178 | gr->SetMarkerSize(1.0); | |
179 | gr->SetMarkerColor(2); | |
180 | gr->GetHistogram()->SetMinimum(resolutionMin); | |
181 | gr->GetHistogram()->SetMaximum(resolutionMax); | |
182 | gr->Draw("AP"); | |
183 | gr->GetXaxis()->LabelsOption("v"); | |
184 | gr->GetHistogram()->SetYTitle("sigma [ps]"); | |
185 | gr->GetHistogram()->SetTitle("T0 resolution (ORA -ORC)/2"); | |
186 | c1->SaveAs("sigmaResolutionT0_vs_run.gif"); | |
187 | ||
188 | ||
189 | /****** Mean T0 OR A ******/ | |
190 | /* TGraphErrors *gr = MakeGraphSparse(tree,"tzeroOrA:run",""); | |
191 | gr->SetMarkerStyle(20); | |
192 | gr->SetMarkerSize(1.0); | |
193 | gr->SetMarkerColor(2); | |
194 | gr->GetHistogram()->SetYTitle("mean [ps]"); | |
195 | gr->GetHistogram()->SetTitle("T0 OR A"); | |
196 | gr->GetHistogram()->SetMinimum(oraMin); | |
197 | gr->GetHistogram()->SetMaximum(oraMax); | |
198 | gr->Draw("AP"); | |
199 | gr->GetXaxis()->LabelsOption("v"); | |
200 | c1->SaveAs("meanT0OrA_vs_run.gif"); | |
201 | */ | |
202 | ||
203 | /****** Mean T0 OR C ******/ | |
204 | /* TGraphErrors *gr = MakeGraphSparse(tree,"tzeroOrC:run",""); | |
205 | gr->SetMarkerStyle(20); | |
206 | gr->SetMarkerSize(1.0); | |
207 | gr->SetMarkerColor(2); | |
208 | gr->GetHistogram()->SetYTitle("mean [ps]"); | |
209 | gr->GetHistogram()->SetTitle("T0 OR C"); | |
210 | gr->GetHistogram()->SetMinimum(orcMin); | |
211 | gr->GetHistogram()->SetMaximum(orcMax); | |
212 | gr->Draw("AP"); | |
213 | gr->GetXaxis()->LabelsOption("v"); | |
214 | c1->SaveAs("meanT0OrC_vs_run.gif"); | |
215 | */ | |
216 | ||
217 | /****** Mean Amplitude in PMT ******/ | |
218 | const int kNPMTs = 24; | |
219 | char name[200]; | |
220 | ||
221 | for(int ipmt=1;ipmt<=kNPMTs; ipmt++){ | |
222 | sprintf(name,"amplPMT%d:run",ipmt); | |
223 | gr = MakeGraphSparse(tree,name,""); | |
224 | gr->SetMarkerStyle(20); | |
225 | gr->SetMarkerSize(1.0); | |
226 | gr->SetMarkerColor(6); | |
227 | gr->GetHistogram()->SetYTitle("mean"); | |
228 | gr->GetHistogram()->SetTitle(Form("Amplitude PMT%d",ipmt)); | |
229 | ||
230 | int nRuns = gr->GetN(); | |
231 | double *y = gr->GetY(); | |
232 | double min = y[0]; | |
233 | double max = y[0]; | |
234 | for(int irun =1; irun<nRuns;irun++){ | |
235 | if(min > y[irun] & y[irun]>0) min = y[irun]; | |
236 | if(max < y[irun]) max = y[irun]; | |
237 | } | |
238 | // amplMin = min - 2; | |
239 | // amplMax = max + 2; | |
240 | ||
241 | gr->GetHistogram()->SetMinimum(amplMin); | |
242 | gr->GetHistogram()->SetMaximum(amplMax); | |
243 | gr->Draw("AP"); | |
244 | gr->GetXaxis()->LabelsOption("v"); | |
245 | c1->SaveAs(Form("meanAmplPMT%d_vs_run.gif",ipmt)); | |
246 | } | |
247 | /****** Mean Time in PMT ******/ | |
248 | for(int ipmt=1;ipmt<=kNPMTs; ipmt++){ | |
249 | sprintf(name,"timePMT%d:run",ipmt); | |
250 | gr = MakeGraphSparse(tree,name,""); | |
251 | ||
252 | ||
253 | sprintf(name,"timeDelayPMT%d:run",ipmt); | |
254 | TGraphErrors *grDelay = MakeGraphSparse(tree,name,""); | |
255 | //regular run | |
256 | int nRuns = gr->GetN(); | |
257 | double *y = gr->GetY(); | |
258 | double min = y[0]; | |
259 | double max = y[0]; | |
260 | for(int irun =1; irun<nRuns;irun++){ | |
261 | if(min > y[irun] && y[irun]>0) min = y[irun]; | |
262 | if(max < y[irun]) max = y[irun]; | |
263 | } | |
264 | //Delay | |
265 | // double *yDelay = grDelay->GetY(); | |
266 | // nRuns = grDelay->GetN(); | |
267 | // for(int irun =0; irun<nRuns;irun++){ | |
268 | // if(min > yDelay[irun] && yDelay[irun]>0) min = yDelay[irun]; | |
269 | // if(max < yDelay[irun]) max = yDelay[irun]; | |
270 | // } | |
271 | ||
272 | timeMin = min - 2; | |
273 | timeMax = max + 2; | |
274 | ||
275 | gr->SetMarkerStyle(20); | |
276 | gr->SetMarkerSize(1.0); | |
277 | gr->SetMarkerColor(2); | |
278 | grDelay->SetMarkerStyle(24); | |
279 | grDelay->SetMarkerSize(1.0); | |
280 | grDelay->SetMarkerColor(1); | |
281 | ||
282 | gr->GetHistogram()->SetYTitle("mean [channels]"); | |
283 | gr->GetHistogram()->SetTitle(Form("Time PMT%d",ipmt)); | |
284 | gr->GetHistogram()->SetMinimum(timeMin); | |
285 | gr->GetHistogram()->SetMaximum(timeMax); | |
286 | gr->GetXaxis()->LabelsOption("v"); | |
287 | gr->Draw("AP"); | |
288 | grDelay->Draw("Psame"); | |
289 | ||
290 | TLegend *leg = new TLegend(0.1,0.85,0.3,0.95," ","brNDC"); | |
291 | leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.05);leg->SetNColumns(3); | |
292 | leg->AddEntry(gr,"mean time","p"); | |
293 | //leg->AddEntry(grDelay,"Time Delay OCDB","p"); | |
294 | leg->Draw(); | |
295 | ||
296 | c1->SaveAs(Form("meanTimePMT%d_vs_run.gif",ipmt)); | |
297 | } | |
298 | ||
299 | ||
300 | //-----> draw your new trending plot here | |
301 | } | |
302 |