ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/PixelOnlyTracking/MyPixelAnalysisRatios.cc
Revision: 1.10
Committed: Sat Jun 12 16:20:30 2010 UTC (14 years, 10 months ago) by dinardo
Content type: text/plain
Branch: MAIN
Changes since 1.9: +36 -23 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 dinardo 1.1 // #############################################################
2     // # Program to compute efficiencies, purities and resolutions #
3     // # for pixel stand alone tracking and vertexing #
4     // #############################################################
5     // # Author: Mauro Dinardo #
6     // #############################################################
7    
8     #include <TROOT.h>
9     #include <TF1.h>
10     #include <TH1.h>
11     #include <TH2.h>
12     #include <TFile.h>
13    
14     #include <math.h>
15     #include <map>
16     #include <stdlib.h>
17     #include <sstream>
18     #include <string>
19    
20    
21     using namespace std;
22    
23    
24     // ####################
25     // # Histogram TRACKS #
26     // ####################
27    
28     // @@@@@@ Pixel tracks @@@@@@
29     TH1F* H_pix_trk_pt;
30     TH1F* H_pix_trk_eta;
31    
32     TH1F* H_pix_trk_doubleCounter_pt;
33     TH1F* H_pix_trk_doubleCounter_eta;
34    
35     TH2F* H_pix_trk_normchi2_pt_eta[2];
36     TH2F* H_pix_trk_eta_phi;
37     TH2F* H_pix_trk_eta_pt;
38    
39     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
40     // @ Histograms containing ratios @
41     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
42     TH1F* H_pix_trk_doubleCounter_pt_rel;
43     TH1F* H_pix_trk_doubleCounter_eta_rel;
44    
45     // @@@@@@ Tracker tracks @@@@@@
46     TH1F* H_trk_trk_pt;
47     TH1F* H_trk_trk_eta;
48    
49     TH1F* H_trk_trk_doubleCounter_pt;
50     TH1F* H_trk_trk_doubleCounter_eta;
51    
52     TH2F* H_trk_trk_normchi2_pt_eta[2];
53     TH2F* H_trk_trk_eta_phi;
54     TH2F* H_trk_trk_eta_pt;
55    
56     TH2F* H_trk_trk_eta_phi_algo;
57     TH2F* H_trk_trk_eta_pt_algo;
58    
59 dinardo 1.8 TH1F* H_trk_toteff_pt_num;
60     TH1F* H_trk_toteff_pt_den;
61     TH1F* H_trk_toteff_eta_num;
62     TH1F* H_trk_toteff_eta_den;
63     TH1F* H_trk_toteff_phi_num[3];
64     TH1F* H_trk_toteff_phi_den[3];
65    
66 dinardo 1.1 TH1F* H_trk_eff_pt_num;
67     TH1F* H_trk_eff_pt_den;
68     TH1F* H_trk_eff_eta_num;
69     TH1F* H_trk_eff_eta_den;
70 dinardo 1.8 TH1F* H_trk_eff_phi_num[3];
71     TH1F* H_trk_eff_phi_den[3];
72 dinardo 1.1
73     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
74     // @ Histograms containing ratios @
75     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
76     TH1F* H_trk_trk_doubleCounter_pt_rel;
77     TH1F* H_trk_trk_doubleCounter_eta_rel;
78 dinardo 1.8 TH1F* H_trk_toteff_pt;
79     TH1F* H_trk_toteff_eta;
80     TH1F* H_trk_toteff_phi[3];
81 dinardo 1.1 TH1F* H_trk_eff_pt;
82     TH1F* H_trk_eff_eta;
83 dinardo 1.8 TH1F* H_trk_eff_phi[3];
84 dinardo 1.1
85     // @@@@@@ Common pixel&tracker tracks @@@@@@
86     typedef map<string, map<string, TH1F*> > myMap;
87     myMap MapFit_d0; // Map to store d0 difference [pt, eta]
88     myMap MapFit_dz; // Map to store dz difference [pt, eta]
89     myMap MapFit_pt; // Map to store pt difference [pt, eta]
90     myMap MapFit_d0_pull; // Map to store d0 pulls [pt, eta]
91     myMap MapFit_dz_pull; // Map to store dz pulls [pt, eta]
92     myMap MapFit_pt_pull; // Map to store pt pulls [pt, eta]
93     myMap MapFit_d0err; // Map to store generalTrack d0err [pt, eta]
94     myMap MapFit_dzerr; // Map to store generalTrack dzerr [pt, eta]
95     myMap MapFit_pterr; // Map to store generalTrack pterr [pt, eta]
96    
97     TH2F* H_trked_eta_phi_pur;
98     TH2F* H_trked_eta_phi_eff;
99     TH2F* H_trked_eta_pt_pur;
100     TH2F* H_trked_eta_pt_eff;
101     TH2F* H_trked_normchi2_pt_pur_eta[2];
102     TH2F* H_trked_normchi2_pt_eff_eta[2];
103    
104     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
105     // @ Histograms containing ratios @
106     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
107     TH1F* H_ptres_eta_pt[5];
108     TH1F* H_ptpull_eta_pt[5];
109    
110     TH1F* H_dzres_eta_pt[5];
111     TH1F* H_dzpull_eta_pt[5];
112    
113     TH1F* H_d0res_eta_pt[5];
114     TH1F* H_d0pull_eta_pt[5];
115    
116     TH1F* H_ptres_pt_eta[2];
117     TH1F* H_ptpull_pt_eta[2];
118    
119     TH1F* H_dzres_pt_eta[2];
120     TH1F* H_dzpull_pt_eta[2];
121    
122     TH1F* H_d0res_pt_eta[2];
123     TH1F* H_d0pull_pt_eta[2];
124    
125     TH1F* H_skew_pt_eta[2];
126    
127     TH1F* H_purity_trked_eta;
128     TH1F* H_purity_trked_pt_eta[2];
129     TH1F* H_purity_trked_pt_whole_eta;
130     TH1F* H_purity_trked_phi[3];
131    
132     TH1F* H_efficiency_trked_eta;
133     TH1F* H_efficiency_trked_pt_eta[2];
134     TH1F* H_efficiency_trked_pt_whole_eta;
135     TH1F* H_efficiency_trked_phi[3];
136    
137     TH1F* H_efficiency_trked_eta_algo;
138     TH1F* H_efficiency_trked_pt_eta_algo[2];
139     TH1F* H_efficiency_trked_pt_whole_eta_algo;
140     TH1F* H_efficiency_trked_phi_algo[3];
141    
142     TH1F* H_tk_pur_eff;
143    
144     TH2F* H_purity_trked_normchi2_pt_eta[2];
145     TH2F* H_efficiency_trked_normchi2_pt_eta[2];
146    
147    
148     // ######################
149     // # Histogram VERTICES #
150     // ######################
151    
152     // @@@@@@ Common pixel&tracker vertices @@@@@@
153     TH1F* H_vx_counters;
154    
155     map<string, TH1F*> map_H_vx_x_diff;
156     map<string, TH1F*> map_H_vx_y_diff;
157     map<string, TH1F*> map_H_vx_z_diff;
158     map<string, TH1F*> map_H_vx_x_diff_pull;
159     map<string, TH1F*> map_H_vx_y_diff_pull;
160     map<string, TH1F*> map_H_vx_z_diff_pull;
161     map<string, TH1F*> map_H_vx_x_diff_orig;
162     map<string, TH1F*> map_H_vx_y_diff_orig;
163     map<string, TH1F*> map_H_vx_z_diff_orig;
164     map<string, TH1F*> map_H_vx_x_err2;
165     map<string, TH1F*> map_H_vx_y_err2;
166     map<string, TH1F*> map_H_vx_z_err2;
167    
168     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
169     // @ Histograms containing ratios @
170     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
171     TH1F* H_vx_x_diff_vs_trk;
172     TH1F* H_vx_y_diff_vs_trk;
173     TH1F* H_vx_z_diff_vs_trk;
174     TH1F* H_vx_x_diff_pull_vs_trk;
175     TH1F* H_vx_y_diff_pull_vs_trk;
176     TH1F* H_vx_z_diff_pull_vs_trk;
177     TH1F* H_vx_x_diff_orig_vs_trk;
178     TH1F* H_vx_y_diff_orig_vs_trk;
179     TH1F* H_vx_z_diff_orig_vs_trk;
180     TH1F* H_vx_x_diff_noerr_vs_trk;
181     TH1F* H_vx_y_diff_noerr_vs_trk;
182     TH1F* H_vx_z_diff_noerr_vs_trk;
183     TH1F* H_vx_pur_eff;
184    
185    
186 dinardo 1.2 // @@@@@@ Duplicated variables @@@@@@
187 dinardo 1.8 double EtaThr; // --> Must have at most 2 decimal digits
188     double EtaThrBin[3]; // --> Must have at most 2 decimal digits
189     double zRange; // Unit: [um]
190     double d0Range; // Unit: [cm]
191     double dzRange; // Unit: [cm]
192     double ptRange; // Unit: [GeV/c]
193     double d0errRange; // Unit: [um]^2
194     double dzerrRange; // Unit: [um]^2
195     double pterrRange; // Unit: [MeV/c]^2
196 dinardo 1.1 double pullsRange;
197 dinardo 1.8 double MaxPtEquiBinning;
198 dinardo 1.1
199 dinardo 1.2 // @@@@@@ Non duplicated variables @@@@@@
200 dinardo 1.9 double PtThr[6]; // --> Must have at most 2 decimal digits
201 dinardo 1.1 unsigned int MinEntriesEffPur; // Histogram minimum number of entries for efficiency and purity
202    
203 dinardo 1.2 // @@@@@@ Parameters from cfg file @@@@@@
204 dinardo 1.1 double MaxEtaTkTrk; // Max eta that a track should have in order to be taken into account
205 dinardo 1.8 double RangePt; // pt bins. Unit: [GeV/c] --> Must have at most 2 decimal digits
206     double PtStep; // pt bins. Unit: [GeV/c] --> Must have at most 2 decimal digits
207     double RangeEta; // eta bins --> Must have at most 2 decimal digits
208     double EtaStep; // eta bins --> Must have at most 2 decimal digits
209 dinardo 1.1 double MinPtTk; // Mini Pt that a track must have in order to be taken into account. Unit: [GeV/c]
210 dinardo 1.8 // --> Must have at most 2 decimal digits
211 dinardo 1.1
212    
213     void InitVariables ()
214     {
215     MinEntriesEffPur = 12;
216    
217     MaxEtaTkTrk = 2.3;
218     RangePt = 8.0;
219     PtStep = 0.25;
220     RangeEta = 2.3;
221     EtaStep = 0.23;
222     MinPtTk = 0.75;
223    
224     cout << "\n@@@@@@ CONFIGURATION PARAMETERS @@@@@@" << endl;
225    
226     cout << "@@@@@@ GENERAL PARAMETERS @@@@@@" << endl;
227     cout << "MinEntriesEffPur --> " << MinEntriesEffPur << endl;
228    
229     cout << "@@@@@@ TRACK PARAMETERS @@@@@@" << endl;
230     cout << "MaxEtaTkTrk --> " << MaxEtaTkTrk << endl;
231     cout << "RangePt --> " << RangePt << endl;
232     cout << "PtStep --> " << PtStep << endl;
233     cout << "RangeEta --> " << RangeEta << endl;
234     cout << "EtaStep --> " << EtaStep << endl;
235     cout << "MinPtTk --> " << MinPtTk << endl;
236    
237     cout << "@@@@@@ VERTEX PARAMETERS @@@@@@" << endl;
238    
239 dinardo 1.8 MaxPtEquiBinning = 3.;
240    
241 dinardo 1.10 EtaThr = 1.5;
242 dinardo 1.1 EtaThrBin[0] = 0;
243     EtaThrBin[1] = EtaThr;
244     EtaThrBin[2] = MaxEtaTkTrk;
245    
246     PtThr[0] = MinPtTk;
247 dinardo 1.6 for (int i = 1; i < 5; i++) PtThr[i] = PtThr[i-1] + 0.5;
248 dinardo 1.1 PtThr[5] = RangePt;
249    
250 dinardo 1.2 zRange = 6000.; // Unit: [um]
251 dinardo 1.1
252     d0Range = 0.6; // Unit: [cm]
253     dzRange = 0.6; // Unit: [cm]
254 dinardo 1.8 ptRange = 6.0; // Unit: [GeV/c] // cambio: 12
255 dinardo 1.3 d0errRange = 10000.; // Unit: [um]^2
256     dzerrRange = 10000.; // Unit: [um]^2
257 dinardo 1.8 pterrRange = 30000.; // Unit: [MeV/c]^2 // cambio: 50000
258 dinardo 1.1
259     pullsRange = 10.;
260     }
261    
262    
263     bool LoadHistos (string datatype, TFile* filename)
264     {
265     if (datatype.compare("Tk") == 0)
266     {
267     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
268     // @ Histograms containing numerators or denominators @
269     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
270     H_pix_trk_pt = (TH1F*)filename->Get("MyProcess/PixelTracks/Pixeltracks pt distribution");
271     H_pix_trk_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/Pixeltracks eta distribution");
272     H_pix_trk_doubleCounter_pt = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter pixeltracks pt distribution");
273     H_pix_trk_doubleCounter_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter pixeltracks eta distribution");
274    
275     H_pix_trk_eta_phi = (TH2F*)filename->Get("MyProcess/PixelTracks/Pixeltracks distribution in eta and phi");
276     H_pix_trk_eta_pt = (TH2F*)filename->Get("MyProcess/PixelTracks/Pixeltracks distribution in eta and pt");
277    
278     H_trk_trk_pt = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks pt distribution");
279     H_trk_trk_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks eta distribution");
280     H_trk_trk_doubleCounter_pt = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter trackertracks pt distribution");
281     H_trk_trk_doubleCounter_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter trackertracks eta distribution");
282    
283     H_trk_trk_eta_phi = (TH2F*)filename->Get("MyProcess/PixelTracks/Trackertracks distribution in eta and phi");
284     H_trk_trk_eta_pt = (TH2F*)filename->Get("MyProcess/PixelTracks/Trackertracks distribution in eta and pt");
285    
286     H_trk_trk_eta_phi_algo = (TH2F*)filename->Get("MyProcess/PixelTracks/Trackertracks distribution in eta and phi algo");
287     H_trk_trk_eta_pt_algo = (TH2F*)filename->Get("MyProcess/PixelTracks/Trackertracks distribution in eta and pt algo");
288    
289     H_trk_eff_pt_num = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs pt numerator");
290     H_trk_eff_pt_den = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs pt denominator");
291     H_trk_eff_eta_num = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs eta numerator");
292     H_trk_eff_eta_den = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs eta denominator");
293    
294 dinardo 1.10 // H_trk_toteff_pt_num = (TH1F*)filename->Get("MyProcess/PixelTracks/Total trackertracks efficiency vs pt numerator");
295     // H_trk_toteff_pt_den = (TH1F*)filename->Get("MyProcess/PixelTracks/Total trackertracks efficiency vs pt denominator");
296     // H_trk_toteff_eta_num = (TH1F*)filename->Get("MyProcess/PixelTracks/Total trackertracks efficiency vs eta numerator");
297     // H_trk_toteff_eta_den = (TH1F*)filename->Get("MyProcess/PixelTracks/Total trackertracks efficiency vs eta denominator");
298 dinardo 1.8
299     // for (int i = 0; i < 3; i++)
300     // {
301     // stringstream i_str;
302     // i_str << i + 1;
303     // TString hName;
304    
305     // hName = "MyProcess/PixelTracks/Trackertracks efficiency vs phi numerator thr" + i_str.str();
306     // H_trk_eff_phi_num[i] = (TH1F*)filename->Get(hName);
307    
308     // hName = "MyProcess/PixelTracks/Trackertracks efficiency vs phi denominator thr" + i_str.str();
309     // H_trk_eff_phi_den[i] = (TH1F*)filename->Get(hName);
310    
311     // hName = "MyProcess/PixelTracks/Total trackertracks efficiency vs phi numerator thr" + i_str.str();
312     // H_trk_toteff_phi_num[i] = (TH1F*)filename->Get(hName);
313    
314     // hName = "MyProcess/PixelTracks/Total trackertracks efficiency vs phi denominator thr" + i_str.str();
315     // H_trk_toteff_phi_den[i] = (TH1F*)filename->Get(hName);
316     // }
317 dinardo 1.7
318     for (int i = 0; i < 2; i++)
319 dinardo 1.1 {
320     stringstream i_str;
321     i_str << i + 1;
322     TString hName;
323    
324 dinardo 1.4 hName = "MyProcess/PixelTracks/Pixeltracks vs chi2DoF and pt cuts thr" + i_str.str();
325 dinardo 1.1 H_pix_trk_normchi2_pt_eta[i] = (TH2F*)filename->Get(hName);
326    
327     hName = "MyProcess/PixelTracks/Trackertracks vs chi2DoF and pt cuts thr" + i_str.str();
328     H_trk_trk_normchi2_pt_eta[i] = (TH2F*)filename->Get(hName);
329    
330     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks vs chi2DoF and pt cuts pur thr" + i_str.str();
331     H_trked_normchi2_pt_pur_eta[i] = (TH2F*)filename->Get(hName);
332    
333     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks vs chi2DoF and pt cuts eff thr" + i_str.str();
334     H_trked_normchi2_pt_eff_eta[i] = (TH2F*)filename->Get(hName);
335     }
336    
337     H_trked_eta_phi_pur = (TH2F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks distribution in eta and phi pur");
338     H_trked_eta_phi_eff = (TH2F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks distribution in eta and phi eff");
339     H_trked_eta_pt_pur = (TH2F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks distribution in eta and pt pur");
340     H_trked_eta_pt_eff = (TH2F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Matched pixeltracks distribution in eta and pt eff");
341    
342 dinardo 1.3 stringstream PtCutStr;
343     stringstream EtaCutStr;
344     stringstream HistoName;
345     PtCutStr.precision(3);
346     EtaCutStr.precision(3);
347     HistoName.precision(3);
348    
349     double PtCut;
350     double EtaCut;
351 dinardo 1.5 for (PtCut = PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
352 dinardo 1.3 {
353     PtCutStr.str("");
354     PtCutStr << PtCut;
355    
356 dinardo 1.5 for (EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
357 dinardo 1.3 {
358     EtaCutStr.str("");
359     EtaCutStr << EtaCut;
360    
361     HistoName.str("");
362     HistoName << "MyProcess/TrackFit/d0_pulls_pt_" << PtCut << "_eta_" << EtaCut;
363     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
364     MapFit_d0_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
365    
366     HistoName.str("");
367     HistoName << "MyProcess/TrackFit/d0err_pt_" << PtCut << "_eta_" << EtaCut;
368     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
369     MapFit_d0err[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
370    
371     HistoName.str("");
372     HistoName << "MyProcess/TrackFit/d0_pt_" << PtCut << "_eta_" << EtaCut;
373     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
374     MapFit_d0[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
375    
376     HistoName.str("");
377     HistoName << "MyProcess/TrackFit/dz_pulls_pt_" << PtCut << "_eta_" << EtaCut;
378     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
379     MapFit_dz_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
380    
381     HistoName.str("");
382     HistoName << "MyProcess/TrackFit/dzerr_pt_" << PtCut << "_eta_" << EtaCut;
383     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
384     MapFit_dzerr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
385    
386     HistoName.str("");
387     HistoName << "MyProcess/TrackFit/dz_pt_" << PtCut << "_eta_" << EtaCut;
388     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
389     MapFit_dz[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
390    
391     HistoName.str("");
392     HistoName << "MyProcess/TrackFit/pt_pulls_pt_" << PtCut << "_eta_" << EtaCut;
393     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
394     MapFit_pt_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
395    
396     HistoName.str("");
397     HistoName << "MyProcess/TrackFit/pterr_pt_" << PtCut << "_eta_" << EtaCut;
398     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
399     MapFit_pterr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
400    
401     HistoName.str("");
402     HistoName << "MyProcess/TrackFit/pt_pt_" << PtCut << "_eta_" << EtaCut;
403     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
404     MapFit_pt[PtCutStr.str().c_str()][EtaCutStr.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
405     }
406     }
407    
408 dinardo 1.1 // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
409     // @ Histograms containing ratios @
410     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
411     H_pix_trk_doubleCounter_pt_rel = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter pixeltracks pt relative distribution");
412     H_pix_trk_doubleCounter_eta_rel = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter pixeltracks eta relative distribution");
413     H_pix_trk_doubleCounter_pt_rel->Reset();
414     H_pix_trk_doubleCounter_eta_rel->Reset();
415    
416     H_trk_trk_doubleCounter_pt_rel = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter trackertracks pt relative distribution");
417     H_trk_trk_doubleCounter_eta_rel = (TH1F*)filename->Get("MyProcess/PixelTracks/Doublecounter trackertracks eta relative distribution");
418     H_trk_trk_doubleCounter_pt_rel->Reset();
419     H_trk_trk_doubleCounter_eta_rel->Reset();
420    
421     H_trk_eff_pt = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs pt");
422     H_trk_eff_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/Trackertracks efficiency vs eta");
423     H_trk_eff_pt->Reset();
424     H_trk_eff_eta->Reset();
425    
426 dinardo 1.8 // for (int i = 0; i < 3; i++)
427     // {
428     // stringstream i_str;
429     // i_str << i + 1;
430     // TString hName;
431    
432     // hName = "MyProcess/PixelTracks/Trackertracks efficiency vs phi thr" + i_str.str();
433     // H_trk_eff_phi[i] = (TH1F*)filename->Get(hName);
434     // H_trk_eff_phi[i]->Reset();
435    
436     // hName = "MyProcess/PixelTracks/Total trackertracks efficiency vs phi thr" + i_str.str();
437     // H_trk_toteff_phi[i] = (TH1F*)filename->Get(hName);
438     // H_trk_toteff_phi[i]->Reset();
439     // }
440    
441 dinardo 1.10 // #################################
442     // # Use this for constant binning #
443     // #################################
444     // const int nPtBins = rint(RangePt/PtStep);
445     // double* xPtBins = NULL;
446     // xPtBins = new double[nPtBins + 1];
447     // xPtBins[0] = 0.;
448     // for (int i = 1; i < nPtBins; i++) xPtBins[i] = xPtBins[i-1] + PtStep;
449     // xPtBins[nPtBins] = RangePt;
450    
451     // #####################################
452     // # Use this for NON constant binning #
453     // #####################################
454 dinardo 1.8 const int nPtBins = rint(MaxPtEquiBinning/PtStep) + 7;
455     double* xPtBins = NULL;
456     xPtBins = new double[nPtBins + 1];
457     xPtBins[0] = 0.;
458     for (int i = 1; i <= rint(MaxPtEquiBinning/PtStep); i++) xPtBins[i] = xPtBins[i-1] + PtStep;
459     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 1] = 3.5;
460     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 2] = 4.0;
461     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 3] = 4.5;
462     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 4] = 5.25;
463     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 5] = 6.0;
464     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 6] = 7.0;
465     xPtBins[(int)rint(MaxPtEquiBinning/PtStep) + 7] = RangePt;
466 dinardo 1.7
467 dinardo 1.1 for (int i = 0; i < 2; i++)
468     {
469     stringstream i_str;
470     i_str << i + 1;
471     TString hName;
472    
473     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Purity pixeltracks vs chi2DoF and pt cuts thr" + i_str.str();
474     H_purity_trked_normchi2_pt_eta[i] = (TH2F*)filename->Get(hName);
475     H_purity_trked_normchi2_pt_eta[i]->Reset();
476    
477     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Purity pixeltracks vs pt thr" + i_str.str();
478     H_purity_trked_pt_eta[i] = (TH1F*)filename->Get(hName);
479     H_purity_trked_pt_eta[i]->Reset();
480    
481     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Efficiency pixeltracks vs chi2DoF and pt cuts thr" + i_str.str();
482     H_efficiency_trked_normchi2_pt_eta[i] = (TH2F*)filename->Get(hName);
483     H_efficiency_trked_normchi2_pt_eta[i]->Reset();
484    
485     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Efficiency pixeltracks vs pt thr" + i_str.str();
486     H_efficiency_trked_pt_eta[i] = (TH1F*)filename->Get(hName);
487     H_efficiency_trked_pt_eta[i]->Reset();
488    
489     hName = "MyProcess/PixelTracks/CommonPxTkPlots/Algoefficiency pixeltracks vs pt thr" + i_str.str();
490     H_efficiency_trked_pt_eta_algo[i] = (TH1F*)filename->Get(hName);
491     H_efficiency_trked_pt_eta_algo[i]->Reset();
492 dinardo 1.2
493     hName = "MyProcess/PixelTracks/CommonPxTkPlots/pt resolution vs pt thr" + i_str.str();
494     H_ptres_pt_eta[i] = (TH1F*)filename->Get(hName);
495     H_ptres_pt_eta[i]->Reset();
496 dinardo 1.8 H_ptres_pt_eta[i] = (TH1F*)H_ptres_pt_eta[i]->Rebin(nPtBins, H_ptres_pt_eta[i]->GetName(), xPtBins);
497 dinardo 1.2
498     hName = "MyProcess/PixelTracks/CommonPxTkPlots/pt pulls vs pt thr" + i_str.str();
499     H_ptpull_pt_eta[i] = (TH1F*)filename->Get(hName);
500     H_ptpull_pt_eta[i]->Reset();
501 dinardo 1.8 H_ptpull_pt_eta[i] = (TH1F*)H_ptpull_pt_eta[i]->Rebin(nPtBins, H_ptpull_pt_eta[i]->GetName(), xPtBins);
502    
503 dinardo 1.2 hName = "MyProcess/PixelTracks/CommonPxTkPlots/dz resolution vs pt thr" + i_str.str();
504     H_dzres_pt_eta[i] = (TH1F*)filename->Get(hName);
505     H_dzres_pt_eta[i]->Reset();
506    
507     hName = "MyProcess/PixelTracks/CommonPxTkPlots/dz pulls vs pt thr" + i_str.str();
508     H_dzpull_pt_eta[i] = (TH1F*)filename->Get(hName);
509     H_dzpull_pt_eta[i]->Reset();
510    
511     hName = "MyProcess/PixelTracks/CommonPxTkPlots/d0 resolution vs pt thr" + i_str.str();
512     H_d0res_pt_eta[i] = (TH1F*)filename->Get(hName);
513     H_d0res_pt_eta[i]->Reset();
514    
515     hName = "MyProcess/PixelTracks/CommonPxTkPlots/d0 pulls vs pt thr" + i_str.str();
516     H_d0pull_pt_eta[i] = (TH1F*)filename->Get(hName);
517     H_d0pull_pt_eta[i]->Reset();
518    
519 dinardo 1.4 hName = "MyProcess/PixelTracks/CommonPxTkPlots/SkewPixTrkpt vs pt thr" + i_str.str();
520 dinardo 1.2 H_skew_pt_eta[i] = (TH1F*)filename->Get(hName);
521     H_skew_pt_eta[i]->Reset();
522     }
523    
524     for (int i = 0; i < 5; i++)
525     {
526     stringstream i_str;
527     i_str << i + 1;
528     TString hName;
529    
530     hName = "MyProcess/PixelTracks/CommonPxTkPlots/pt resolution vs eta thr" + i_str.str();
531     H_ptres_eta_pt[i] = (TH1F*)filename->Get(hName);
532     H_ptres_eta_pt[i]->Reset();
533    
534     hName = "MyProcess/PixelTracks/CommonPxTkPlots/pt pulls vs eta thr" + i_str.str();
535     H_ptpull_eta_pt[i] = (TH1F*)filename->Get(hName);
536     H_ptpull_eta_pt[i]->Reset();
537    
538     hName = "MyProcess/PixelTracks/CommonPxTkPlots/dz resolution vs eta thr" + i_str.str();
539     H_dzres_eta_pt[i] = (TH1F*)filename->Get(hName);
540     H_dzres_eta_pt[i]->Reset();
541    
542     hName = "MyProcess/PixelTracks/CommonPxTkPlots/dz pulls vs eta thr" + i_str.str();
543     H_dzpull_eta_pt[i] = (TH1F*)filename->Get(hName);
544     H_dzpull_eta_pt[i]->Reset();
545    
546     hName = "MyProcess/PixelTracks/CommonPxTkPlots/d0 resolution vs eta thr" + i_str.str();
547     H_d0res_eta_pt[i] = (TH1F*)filename->Get(hName);
548     H_d0res_eta_pt[i]->Reset();
549    
550     hName = "MyProcess/PixelTracks/CommonPxTkPlots/d0 pulls vs eta thr" + i_str.str();
551     H_d0pull_eta_pt[i] = (TH1F*)filename->Get(hName);
552     H_d0pull_eta_pt[i]->Reset();
553 dinardo 1.1 }
554    
555     for (int i = 0; i < 3; i++)
556     {
557     stringstream i_str;
558     i_str << i + 1;
559     TString hName;
560    
561 dinardo 1.3 hName = "MyProcess/PixelTracks/CommonPxTkPlots/Purity pixeltracks vs phi thr" + i_str.str();
562 dinardo 1.1 H_purity_trked_phi[i] = (TH1F*)filename->Get(hName);
563     H_purity_trked_phi[i]->Reset();
564    
565 dinardo 1.3 hName = "MyProcess/PixelTracks/CommonPxTkPlots/Efficiency pixeltracks vs phi thr" + i_str.str();
566 dinardo 1.1 H_efficiency_trked_phi[i] = (TH1F*)filename->Get(hName);
567     H_efficiency_trked_phi[i]->Reset();
568    
569 dinardo 1.3 hName = "MyProcess/PixelTracks/CommonPxTkPlots/Algoefficiency pixeltracks vs phi thr" + i_str.str();
570 dinardo 1.1 H_efficiency_trked_phi_algo[i] = (TH1F*)filename->Get(hName);
571     H_efficiency_trked_phi_algo[i]->Reset();
572     }
573    
574     H_purity_trked_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Purity pixeltracks vs eta");
575     H_purity_trked_pt_whole_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Purity pixeltracks vs pt");
576     H_purity_trked_eta->Reset();
577     H_purity_trked_pt_whole_eta->Reset();
578    
579     H_efficiency_trked_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Efficiency pixeltracks vs eta");
580     H_efficiency_trked_pt_whole_eta = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Efficiency pixeltracks vs pt");
581     H_efficiency_trked_eta->Reset();
582     H_efficiency_trked_pt_whole_eta->Reset();
583    
584     H_efficiency_trked_eta_algo = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Algoefficiency pixeltracks vs eta");
585     H_efficiency_trked_pt_whole_eta_algo = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Algoefficiency pixeltracks vs pt");
586     H_efficiency_trked_eta_algo->Reset();
587     H_efficiency_trked_pt_whole_eta_algo->Reset();
588    
589     H_tk_pur_eff = (TH1F*)filename->Get("MyProcess/PixelTracks/CommonPxTkPlots/Purity Efficiency Tracks");
590     H_tk_pur_eff->Reset();
591    
592     return true;
593     }
594     else if (datatype.compare("Vx") == 0)
595     {
596     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
597     // @ Histograms containing numerators or denominators @
598     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
599     H_vx_counters = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Counters Match Purity Efficiency for Vertices");
600    
601     stringstream String;
602     stringstream HistoName;
603     String.precision(3);
604     HistoName.precision(3);
605    
606     for (int i = 1; i < 100; i++)
607     {
608     String << i;
609    
610     HistoName.str("");
611     HistoName << "MyProcess/VxNtrks/x_diff_Ntrk_" << String.str();
612     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
613     map_H_vx_x_diff[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
614    
615     HistoName.str("");
616     HistoName << "MyProcess/VxNtrks/y_diff_Ntrk_" << String.str();
617     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
618     map_H_vx_y_diff[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
619    
620     HistoName.str("");
621     HistoName << "MyProcess/VxNtrks/z_diff_Ntrk_" << String.str();
622     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
623     map_H_vx_z_diff[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
624    
625     HistoName.str("");
626     HistoName << "MyProcess/VxNtrks/x_diff_pull_Ntrk_" << String.str();
627     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
628     map_H_vx_x_diff_pull[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
629    
630     HistoName.str("");
631     HistoName << "MyProcess/VxNtrks/y_diff_pull_Ntrk_" << String.str();
632     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
633     map_H_vx_y_diff_pull[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
634    
635     HistoName.str("");
636     HistoName << "MyProcess/VxNtrks/z_diff_pull_Ntrk_" << String.str();
637     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
638     map_H_vx_z_diff_pull[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
639    
640     HistoName.str("");
641     HistoName << "MyProcess/VxNtrks/x_diff_orig_Ntrk_" << String.str();
642     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
643     map_H_vx_x_diff_orig[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
644    
645     HistoName.str("");
646     HistoName << "MyProcess/VxNtrks/y_diff_orig_Ntrk_" << String.str();
647     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
648     map_H_vx_y_diff_orig[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
649    
650     HistoName.str("");
651     HistoName << "MyProcess/VxNtrks/z_diff_orig_Ntrk_" << String.str();
652     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
653     map_H_vx_z_diff_orig[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
654    
655     HistoName.str("");
656     HistoName << "MyProcess/VxNtrks/x_err2_Ntrk_" << String.str();
657     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
658     map_H_vx_x_err2[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
659    
660     HistoName.str("");
661     HistoName << "MyProcess/VxNtrks/y_err2_Ntrk_" << String.str();
662     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
663     map_H_vx_y_err2[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
664    
665     HistoName.str("");
666     HistoName << "MyProcess/VxNtrks/z_err2_Ntrk_" << String.str();
667     if ((TH1F*)filename->Get(HistoName.str().c_str()) != NULL)
668     map_H_vx_z_err2[String.str().c_str()] = (TH1F*)filename->Get(HistoName.str().c_str());
669    
670     String.str("");
671     }
672    
673     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
674     // @ Histograms containing ratios @
675     // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
676     H_vx_pur_eff = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Purity Efficiency Vertices");
677     H_vx_x_diff_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position difference along X vs Ntrks");
678     H_vx_y_diff_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position difference along Y vs Ntrks");
679     H_vx_z_diff_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position difference along Z vs Ntrks");
680     H_vx_x_diff_pull_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position pull along X vs Ntrks");
681     H_vx_y_diff_pull_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position pull along Y vs Ntrks");
682     H_vx_z_diff_pull_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex position pull along Z vs Ntrks");
683     H_vx_x_diff_orig_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Original vertex position difference along X vs Ntrks");
684     H_vx_y_diff_orig_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Original vertex position difference along Y vs Ntrks");
685     H_vx_z_diff_orig_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Original vertex position difference along Z vs Ntrks");
686     H_vx_x_diff_noerr_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex resolution along X vs Ntrks");
687     H_vx_y_diff_noerr_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex resolution along Y vs Ntrks");
688     H_vx_z_diff_noerr_vs_trk = (TH1F*)filename->Get("MyProcess/PixelVertices/CommonPxTkPlots/Vertex resolution along Z vs Ntrks");
689     H_vx_x_diff_vs_trk->Reset();
690     H_vx_y_diff_vs_trk->Reset();
691     H_vx_z_diff_vs_trk->Reset();
692     H_vx_x_diff_pull_vs_trk->Reset();
693     H_vx_y_diff_pull_vs_trk->Reset();
694     H_vx_z_diff_pull_vs_trk->Reset();
695     H_vx_x_diff_orig_vs_trk->Reset();
696     H_vx_y_diff_orig_vs_trk->Reset();
697     H_vx_z_diff_orig_vs_trk->Reset();
698     H_vx_x_diff_noerr_vs_trk->Reset();
699     H_vx_y_diff_noerr_vs_trk->Reset();
700     H_vx_z_diff_noerr_vs_trk->Reset();
701     H_vx_pur_eff->Reset();
702    
703     return true;
704     }
705    
706     return false;
707     }
708    
709    
710     void WriteHistos (string datatype, TFile* filename)
711     {
712     if (datatype.compare("Tk") == 0)
713     {
714 dinardo 1.4 filename->cd("MyProcess/TrackFit");
715    
716     for (myMap::iterator it1 = MapFit_d0_pull.begin(); it1 != MapFit_d0_pull.end(); it1++)
717     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
718     for (myMap::iterator it1 = MapFit_d0err.begin(); it1 != MapFit_d0err.end(); it1++)
719     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
720     for (myMap::iterator it1 = MapFit_d0.begin(); it1 != MapFit_d0.end(); it1++)
721     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
722    
723     for (myMap::iterator it1 = MapFit_dz_pull.begin(); it1 != MapFit_dz_pull.end(); it1++)
724     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
725     for (myMap::iterator it1 = MapFit_dzerr.begin(); it1 != MapFit_dzerr.end(); it1++)
726     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
727     for (myMap::iterator it1 = MapFit_dz.begin(); it1 != MapFit_dz.end(); it1++)
728     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
729    
730     for (myMap::iterator it1 = MapFit_pt_pull.begin(); it1 != MapFit_pt_pull.end(); it1++)
731     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
732     for (myMap::iterator it1 = MapFit_pterr.begin(); it1 != MapFit_pterr.end(); it1++)
733     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
734     for (myMap::iterator it1 = MapFit_pt.begin(); it1 != MapFit_pt.end(); it1++)
735     for (map<string, TH1F*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); it2++) it2->second->Write(it2->second->GetName(), TObject::kWriteDelete);
736    
737 dinardo 1.1 filename->cd("MyProcess/PixelTracks");
738 dinardo 1.4
739 dinardo 1.1 H_pix_trk_doubleCounter_eta_rel->Write(H_pix_trk_doubleCounter_eta_rel->GetName(), TObject::kWriteDelete);
740     H_pix_trk_doubleCounter_pt_rel->Write(H_pix_trk_doubleCounter_pt_rel->GetName(), TObject::kWriteDelete);
741    
742     H_trk_trk_doubleCounter_eta_rel->Write(H_trk_trk_doubleCounter_eta_rel->GetName(), TObject::kWriteDelete);
743     H_trk_trk_doubleCounter_pt_rel->Write(H_trk_trk_doubleCounter_pt_rel->GetName(), TObject::kWriteDelete);
744    
745     H_trk_eff_pt->Write(H_trk_eff_pt->GetName(), TObject::kWriteDelete);
746     H_trk_eff_eta->Write(H_trk_eff_eta->GetName(), TObject::kWriteDelete);
747    
748 dinardo 1.7 // for (int i = 0; i < 3; i++) H_trk_eff_phi[i]->Write(H_trk_eff_phi[i]->GetName(), TObject::kWriteDelete);
749 dinardo 1.8 // for (int i = 0; i < 3; i++) H_trk_toteff_phi[i]->Write(H_trk_toteff_phi[i]->GetName(), TObject::kWriteDelete);
750 dinardo 1.7
751 dinardo 1.1 filename->cd("MyProcess/PixelTracks/CommonPxTkPlots");
752    
753     for (int i = 0; i < 2; i++)
754     {
755     H_purity_trked_normchi2_pt_eta[i]->Write(H_purity_trked_normchi2_pt_eta[i]->GetName(), TObject::kWriteDelete);
756     H_purity_trked_pt_eta[i]->Write(H_purity_trked_pt_eta[i]->GetName(), TObject::kWriteDelete);
757    
758     H_efficiency_trked_normchi2_pt_eta[i]->Write(H_efficiency_trked_normchi2_pt_eta[i]->GetName(), TObject::kWriteDelete);
759     H_efficiency_trked_pt_eta[i]->Write(H_efficiency_trked_pt_eta[i]->GetName(), TObject::kWriteDelete);
760     H_efficiency_trked_pt_eta_algo[i]->Write(H_efficiency_trked_pt_eta_algo[i]->GetName(), TObject::kWriteDelete);
761 dinardo 1.2
762     H_ptres_pt_eta[i]->Write(H_ptres_pt_eta[i]->GetName(), TObject::kWriteDelete);
763     H_ptpull_pt_eta[i]->Write(H_ptpull_pt_eta[i]->GetName(), TObject::kWriteDelete);
764    
765     H_dzres_pt_eta[i]->Write(H_dzres_pt_eta[i]->GetName(), TObject::kWriteDelete);
766     H_dzpull_pt_eta[i]->Write(H_dzpull_pt_eta[i]->GetName(), TObject::kWriteDelete);
767    
768     H_d0res_pt_eta[i]->Write(H_d0res_pt_eta[i]->GetName(), TObject::kWriteDelete);
769     H_d0pull_pt_eta[i]->Write(H_d0pull_pt_eta[i]->GetName(), TObject::kWriteDelete);
770    
771     H_skew_pt_eta[i]->Write(H_skew_pt_eta[i]->GetName(), TObject::kWriteDelete);
772     }
773    
774     for (int i = 0; i < 5; i++)
775     {
776     H_ptres_eta_pt[i]->Write(H_ptres_eta_pt[i]->GetName(), TObject::kWriteDelete);
777     H_ptpull_eta_pt[i]->Write(H_ptpull_eta_pt[i]->GetName(), TObject::kWriteDelete);
778    
779     H_dzres_eta_pt[i]->Write(H_dzres_eta_pt[i]->GetName(), TObject::kWriteDelete);
780     H_dzpull_eta_pt[i]->Write(H_dzpull_eta_pt[i]->GetName(), TObject::kWriteDelete);
781    
782     H_d0res_eta_pt[i]->Write(H_d0res_eta_pt[i]->GetName(), TObject::kWriteDelete);
783     H_d0pull_eta_pt[i]->Write(H_d0pull_eta_pt[i]->GetName(), TObject::kWriteDelete);
784 dinardo 1.1 }
785    
786     for (int i = 0; i < 3; i++)
787     {
788     H_purity_trked_phi[i]->Write(H_purity_trked_phi[i]->GetName(), TObject::kWriteDelete);
789    
790     H_efficiency_trked_phi[i]->Write(H_efficiency_trked_phi[i]->GetName(), TObject::kWriteDelete);
791     H_efficiency_trked_phi_algo[i]->Write(H_efficiency_trked_phi_algo[i]->GetName(), TObject::kWriteDelete);
792     }
793    
794     H_purity_trked_eta->Write(H_purity_trked_eta->GetName(), TObject::kWriteDelete);
795     H_purity_trked_pt_whole_eta->Write(H_purity_trked_pt_whole_eta->GetName(), TObject::kWriteDelete);
796    
797     H_efficiency_trked_eta->Write(H_efficiency_trked_eta->GetName(), TObject::kWriteDelete);
798     H_efficiency_trked_pt_whole_eta->Write(H_efficiency_trked_pt_whole_eta->GetName(), TObject::kWriteDelete);
799    
800     H_efficiency_trked_eta_algo->Write(H_efficiency_trked_eta_algo->GetName(), TObject::kWriteDelete);
801     H_efficiency_trked_pt_whole_eta_algo->Write(H_efficiency_trked_pt_whole_eta_algo->GetName(), TObject::kWriteDelete);
802    
803     H_tk_pur_eff->Write(H_tk_pur_eff->GetName(), TObject::kWriteDelete);
804     }
805     else if (datatype.compare("Vx") == 0)
806     {
807 dinardo 1.4 filename->cd("MyProcess/VxNtrks");
808    
809     for (map<string, TH1F*>::iterator it = map_H_vx_x_diff.begin(); it != map_H_vx_x_diff.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
810     for (map<string, TH1F*>::iterator it = map_H_vx_y_diff.begin(); it != map_H_vx_y_diff.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
811     for (map<string, TH1F*>::iterator it = map_H_vx_z_diff.begin(); it != map_H_vx_z_diff.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
812    
813     for (map<string, TH1F*>::iterator it = map_H_vx_x_diff_pull.begin(); it != map_H_vx_x_diff_pull.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
814     for (map<string, TH1F*>::iterator it = map_H_vx_y_diff_pull.begin(); it != map_H_vx_y_diff_pull.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
815     for (map<string, TH1F*>::iterator it = map_H_vx_z_diff_pull.begin(); it != map_H_vx_z_diff_pull.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
816    
817     for (map<string, TH1F*>::iterator it = map_H_vx_x_diff_orig.begin(); it != map_H_vx_x_diff_orig.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
818     for (map<string, TH1F*>::iterator it = map_H_vx_y_diff_orig.begin(); it != map_H_vx_y_diff_orig.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
819     for (map<string, TH1F*>::iterator it = map_H_vx_z_diff_orig.begin(); it != map_H_vx_z_diff_orig.end(); it++) it->second->Write(it->second->GetName(), TObject::kWriteDelete);
820    
821 dinardo 1.1 filename->cd("MyProcess/PixelVertices/CommonPxTkPlots");
822    
823     H_vx_x_diff_vs_trk->Write(H_vx_x_diff_vs_trk->GetName(), TObject::kWriteDelete);
824     H_vx_y_diff_vs_trk->Write(H_vx_y_diff_vs_trk->GetName(), TObject::kWriteDelete);
825     H_vx_z_diff_vs_trk->Write(H_vx_z_diff_vs_trk->GetName(), TObject::kWriteDelete);
826     H_vx_x_diff_pull_vs_trk->Write(H_vx_x_diff_pull_vs_trk->GetName(), TObject::kWriteDelete);
827     H_vx_y_diff_pull_vs_trk->Write(H_vx_y_diff_pull_vs_trk->GetName(), TObject::kWriteDelete);
828     H_vx_z_diff_pull_vs_trk->Write(H_vx_z_diff_pull_vs_trk->GetName(), TObject::kWriteDelete);
829     H_vx_x_diff_orig_vs_trk->Write(H_vx_x_diff_orig_vs_trk->GetName(), TObject::kWriteDelete);
830     H_vx_y_diff_orig_vs_trk->Write(H_vx_y_diff_orig_vs_trk->GetName(), TObject::kWriteDelete);
831     H_vx_z_diff_orig_vs_trk->Write(H_vx_z_diff_orig_vs_trk->GetName(), TObject::kWriteDelete);
832     H_vx_x_diff_noerr_vs_trk->Write(H_vx_x_diff_noerr_vs_trk->GetName(), TObject::kWriteDelete);
833     H_vx_y_diff_noerr_vs_trk->Write(H_vx_y_diff_noerr_vs_trk->GetName(), TObject::kWriteDelete);
834     H_vx_z_diff_noerr_vs_trk->Write(H_vx_z_diff_noerr_vs_trk->GetName(), TObject::kWriteDelete);
835     H_vx_pur_eff->Write(H_vx_pur_eff->GetName(), TObject::kWriteDelete);
836     }
837     }
838    
839    
840     bool FitAlgorithm (TF1* FitFcn, TH1F* Histo)
841     {
842     double constant;
843     double mean;
844     double sigma;
845    
846     constant = Histo->GetMaximum();
847     mean = Histo->GetMean();
848     sigma = Histo->GetRMS();
849    
850     FitFcn->SetParameters(constant, mean, sigma);
851 dinardo 1.10 Histo->Fit("Gauss", "QR");
852 dinardo 1.1
853     if ((isnan(FitFcn->GetParameter(2)) == false) && (isnan(FitFcn->GetParError(2)) == false)) return true;
854     return false;
855     }
856    
857    
858     void FitAndFillMaps (string mapname,
859     double rangemin,
860     double rangemax)
861     {
862     double DeconvolvErrsq;
863     double ErrDeconvolvErrsq;
864     stringstream PtCutStr;
865     stringstream EtaCutStr;
866     PtCutStr.precision(3);
867     EtaCutStr.precision(3);
868     double Val, Err;
869    
870     TF1* Gauss = new TF1("Gauss", "gaus", rangemin, rangemax);
871    
872     if (mapname.compare("d0pulls") == 0) // @@@ d0pulls MAP @@@
873     {
874     TH1F* d0pulls[5];
875     d0pulls[0] = new TH1F("d0pulls_0", "d0pulls_0", 100, -pullsRange/2., pullsRange/2.);
876     d0pulls[1] = new TH1F("d0pulls_1", "d0pulls_1", 100, -pullsRange/2., pullsRange/2.);
877     d0pulls[2] = new TH1F("d0pulls_2", "d0pulls_2", 100, -pullsRange/2., pullsRange/2.);
878     d0pulls[3] = new TH1F("d0pulls_3", "d0pulls_3", 100, -pullsRange/2., pullsRange/2.);
879     d0pulls[4] = new TH1F("d0pulls_4", "d0pulls_4", 100, -pullsRange/2., pullsRange/2.);
880    
881 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
882 dinardo 1.1 {
883     PtCutStr.str("");
884     PtCutStr << PtCut;
885    
886 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
887 dinardo 1.1 {
888     EtaCutStr.str("");
889     EtaCutStr << EtaCut;
890    
891     if ((MapFit_d0_pull.find(PtCutStr.str().c_str()) != MapFit_d0_pull.end()) &&
892     (MapFit_d0_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0_pull[PtCutStr.str().c_str()].end()))
893     {
894     for (int i = 0; i < 2; i++)
895 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
896 dinardo 1.1 d0pulls[i]->Add(MapFit_d0_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
897     }
898     }
899    
900     for (int i = 0; i < 2; i++)
901     {
902     if (FitAlgorithm (Gauss,d0pulls[i]) == true)
903     {
904 dinardo 1.8 H_d0pull_pt_eta[i]->SetBinContent(H_d0pull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParameter(2));
905     H_d0pull_pt_eta[i]->SetBinError(H_d0pull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParError(2));
906 dinardo 1.1 }
907    
908     d0pulls[i]->Reset();
909     }
910     }
911    
912 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
913 dinardo 1.1 {
914     EtaCutStr.str("");
915     EtaCutStr << EtaCut;
916    
917 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
918 dinardo 1.1 {
919     PtCutStr.str("");
920     PtCutStr << PtCut;
921    
922     if ((MapFit_d0_pull.find(PtCutStr.str().c_str()) != MapFit_d0_pull.end()) &&
923     (MapFit_d0_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0_pull[PtCutStr.str().c_str()].end()))
924     {
925     for (int i = 0; i < 5; i++)
926 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
927 dinardo 1.1 d0pulls[i]->Add(MapFit_d0_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
928     }
929     }
930    
931     for (int i = 0; i < 5; i++)
932     {
933     if (FitAlgorithm (Gauss,d0pulls[i]) == true)
934     {
935 dinardo 1.8 H_d0pull_eta_pt[i]->SetBinContent(H_d0pull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParameter(2));
936     H_d0pull_eta_pt[i]->SetBinError(H_d0pull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParError(2));
937 dinardo 1.1 }
938    
939     d0pulls[i]->Reset();
940     }
941     }
942    
943     for (int i = 0; i < 5; i++) delete d0pulls[i];
944     }
945     else if (mapname.compare("d0") == 0) // @@@ d0 MAP @@@
946     {
947     TH1F* d0[5];
948     d0[0] = new TH1F("d0_0", "d0_0", 100, -d0Range/2., d0Range/2.);
949     d0[1] = new TH1F("d0_1", "d0_1", 100, -d0Range/2., d0Range/2.);
950     d0[2] = new TH1F("d0_2", "d0_2", 100, -d0Range/2., d0Range/2.);
951     d0[3] = new TH1F("d0_3", "d0_3", 100, -d0Range/2., d0Range/2.);
952     d0[4] = new TH1F("d0_4", "d0_4", 100, -d0Range/2., d0Range/2.);
953    
954     TH1F* d0err[5];
955     d0err[0] = new TH1F("d0err_0", "d0err_0", 200, 0., d0errRange);
956     d0err[1] = new TH1F("d0err_1", "d0err_1", 200, 0., d0errRange);
957     d0err[2] = new TH1F("d0err_2", "d0err_2", 200, 0., d0errRange);
958     d0err[3] = new TH1F("d0err_3", "d0err_3", 200, 0., d0errRange);
959     d0err[4] = new TH1F("d0err_4", "d0err_4", 200, 0., d0errRange);
960    
961 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
962 dinardo 1.1 {
963     PtCutStr.str("");
964     PtCutStr << PtCut;
965    
966 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
967 dinardo 1.1 {
968     EtaCutStr.str("");
969     EtaCutStr << EtaCut;
970    
971     if ((MapFit_d0.find(PtCutStr.str().c_str()) != MapFit_d0.end()) &&
972     (MapFit_d0[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0[PtCutStr.str().c_str()].end()) &&
973     (MapFit_d0err.find(PtCutStr.str().c_str()) != MapFit_d0err.end()) &&
974     (MapFit_d0err[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0err[PtCutStr.str().c_str()].end()))
975     {
976     for (int i = 0; i < 2; i++)
977 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
978 dinardo 1.1 {
979     d0[i]->Add(MapFit_d0[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
980     d0err[i]->Add(MapFit_d0err[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
981     }
982     }
983     }
984    
985     for (int i = 0; i < 2; i++)
986     {
987     DeconvolvErrsq = d0err[i]->GetMean() / 100000000.;
988     ErrDeconvolvErrsq = d0err[i]->GetRMS() / sqrt(d0err[i]->GetEntries()) / 100000000.;
989    
990     if ((FitAlgorithm (Gauss,d0[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
991     {
992     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
993     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
994    
995 dinardo 1.8 H_d0res_pt_eta[i]->SetBinContent(H_d0res_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Val);
996     H_d0res_pt_eta[i]->SetBinError(H_d0res_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Err);
997 dinardo 1.1 }
998    
999     d0[i]->Reset();
1000     d0err[i]->Reset();
1001     }
1002     }
1003    
1004 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1005 dinardo 1.1 {
1006     EtaCutStr.str("");
1007     EtaCutStr << EtaCut;
1008    
1009 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1010 dinardo 1.1 {
1011     PtCutStr.str("");
1012     PtCutStr << PtCut;
1013    
1014     if ((MapFit_d0.find(PtCutStr.str().c_str()) != MapFit_d0.end()) &&
1015     (MapFit_d0[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0[PtCutStr.str().c_str()].end()) &&
1016     (MapFit_d0err.find(PtCutStr.str().c_str()) != MapFit_d0err.end()) &&
1017     (MapFit_d0err[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_d0err[PtCutStr.str().c_str()].end()))
1018     {
1019     for (int i = 0; i < 5; i++)
1020 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
1021 dinardo 1.1 {
1022     d0[i]->Add(MapFit_d0[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1023     d0err[i]->Add(MapFit_d0err[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1024     }
1025     }
1026     }
1027    
1028     for (int i = 0; i < 5; i++)
1029     {
1030     DeconvolvErrsq = d0err[i]->GetMean() / 100000000.;
1031     ErrDeconvolvErrsq = d0err[i]->GetRMS() / sqrt(d0err[i]->GetEntries()) / 100000000.;
1032    
1033     if ((FitAlgorithm (Gauss,d0[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
1034     {
1035     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
1036     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
1037    
1038 dinardo 1.8 H_d0res_eta_pt[i]->SetBinContent(H_d0res_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Val);
1039     H_d0res_eta_pt[i]->SetBinError(H_d0res_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Err);
1040 dinardo 1.1 }
1041    
1042     d0[i]->Reset();
1043     d0err[i]->Reset();
1044     }
1045     }
1046    
1047     for (int i = 0; i < 5; i++) { delete d0[i]; delete d0err[i]; }
1048     }
1049     else if (mapname.compare("dzpulls") == 0) // @@@ dzpulls MAP @@@
1050     {
1051     TH1F* dzpulls[5];
1052     dzpulls[0] = new TH1F("dzpulls_0", "dzpulls_0", 100, -pullsRange/2., pullsRange/2.);
1053     dzpulls[1] = new TH1F("dzpulls_1", "dzpulls_1", 100, -pullsRange/2., pullsRange/2.);
1054     dzpulls[2] = new TH1F("dzpulls_2", "dzpulls_2", 100, -pullsRange/2., pullsRange/2.);
1055     dzpulls[3] = new TH1F("dzpulls_3", "dzpulls_3", 100, -pullsRange/2., pullsRange/2.);
1056     dzpulls[4] = new TH1F("dzpulls_4", "dzpulls_4", 100, -pullsRange/2., pullsRange/2.);
1057    
1058 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1059 dinardo 1.1 {
1060     PtCutStr.str("");
1061     PtCutStr << PtCut;
1062    
1063 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1064 dinardo 1.1 {
1065     EtaCutStr.str("");
1066     EtaCutStr << EtaCut;
1067    
1068     if ((MapFit_dz_pull.find(PtCutStr.str().c_str()) != MapFit_dz_pull.end()) &&
1069     (MapFit_dz_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dz_pull[PtCutStr.str().c_str()].end()))
1070     {
1071     for (int i = 0; i < 2; i++)
1072 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
1073 dinardo 1.1 dzpulls[i]->Add(MapFit_dz_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1074     }
1075     }
1076    
1077     for (int i = 0; i < 2; i++)
1078     {
1079     if (FitAlgorithm (Gauss,dzpulls[i]) == true)
1080     {
1081 dinardo 1.8 H_dzpull_pt_eta[i]->SetBinContent(H_dzpull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParameter(2));
1082     H_dzpull_pt_eta[i]->SetBinError(H_dzpull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParError(2));
1083 dinardo 1.1 }
1084    
1085     dzpulls[i]->Reset();
1086     }
1087     }
1088    
1089 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1090 dinardo 1.1 {
1091     EtaCutStr.str("");
1092     EtaCutStr << EtaCut;
1093    
1094 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1095 dinardo 1.1 {
1096     PtCutStr.str("");
1097     PtCutStr << PtCut;
1098    
1099     if ((MapFit_dz_pull.find(PtCutStr.str().c_str()) != MapFit_dz_pull.end()) &&
1100     (MapFit_dz_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dz_pull[PtCutStr.str().c_str()].end()))
1101     {
1102     for (int i = 0; i < 5; i++)
1103 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
1104 dinardo 1.1 dzpulls[i]->Add(MapFit_dz_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1105     }
1106     }
1107    
1108     for (int i = 0; i < 5; i++)
1109     {
1110     if (FitAlgorithm (Gauss,dzpulls[i]) == true)
1111     {
1112 dinardo 1.8 H_dzpull_eta_pt[i]->SetBinContent(H_dzpull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParameter(2));
1113     H_dzpull_eta_pt[i]->SetBinError(H_dzpull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParError(2));
1114 dinardo 1.1 }
1115    
1116     dzpulls[i]->Reset();
1117     }
1118     }
1119    
1120     for (int i = 0; i < 5; i++) delete dzpulls[i];
1121     }
1122     else if (mapname.compare("dz") == 0) // @@@ dz MAP @@@
1123     {
1124     TH1F* dz[5];
1125     dz[0] = new TH1F("dz_0", "dz_0", 100, -dzRange/2., dzRange/2.);
1126     dz[1] = new TH1F("dz_1", "dz_1", 100, -dzRange/2., dzRange/2.);
1127     dz[2] = new TH1F("dz_2", "dz_2", 100, -dzRange/2., dzRange/2.);
1128     dz[3] = new TH1F("dz_3", "dz_3", 100, -dzRange/2., dzRange/2.);
1129     dz[4] = new TH1F("dz_4", "dz_4", 100, -dzRange/2., dzRange/2.);
1130    
1131     TH1F* dzerr[5];
1132     dzerr[0] = new TH1F("dzerr_0", "dzerr_0", 200, 0., dzerrRange);
1133     dzerr[1] = new TH1F("dzerr_1", "dzerr_1", 200, 0., dzerrRange);
1134     dzerr[2] = new TH1F("dzerr_2", "dzerr_2", 200, 0., dzerrRange);
1135     dzerr[3] = new TH1F("dzerr_3", "dzerr_3", 200, 0., dzerrRange);
1136     dzerr[4] = new TH1F("dzerr_4", "dzerr_4", 200, 0., dzerrRange);
1137    
1138 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1139 dinardo 1.1 {
1140     PtCutStr.str("");
1141     PtCutStr << PtCut;
1142    
1143 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1144 dinardo 1.1 {
1145     EtaCutStr.str("");
1146     EtaCutStr << EtaCut;
1147    
1148     if ((MapFit_dz.find(PtCutStr.str().c_str()) != MapFit_dz.end()) &&
1149     (MapFit_dz[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dz[PtCutStr.str().c_str()].end()) &&
1150     (MapFit_dzerr.find(PtCutStr.str().c_str()) != MapFit_dzerr.end()) &&
1151     (MapFit_dzerr[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dzerr[PtCutStr.str().c_str()].end()))
1152     {
1153     for (int i = 0; i < 2; i++)
1154 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
1155 dinardo 1.1 {
1156     dz[i]->Add(MapFit_dz[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1157     dzerr[i]->Add(MapFit_dzerr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1158     }
1159     }
1160     }
1161    
1162     for (int i = 0; i < 2; i++)
1163     {
1164     DeconvolvErrsq = dzerr[i]->GetMean() / 100000000.;
1165     ErrDeconvolvErrsq = dzerr[i]->GetRMS() / sqrt(dzerr[i]->GetEntries()) / 100000000.;
1166    
1167     if ((FitAlgorithm (Gauss,dz[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
1168     {
1169     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
1170     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
1171    
1172 dinardo 1.8 H_dzres_pt_eta[i]->SetBinContent(H_dzres_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Val);
1173     H_dzres_pt_eta[i]->SetBinError(H_dzres_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Err);
1174 dinardo 1.1 }
1175    
1176     dz[i]->Reset();
1177     dzerr[i]->Reset();
1178     }
1179     }
1180    
1181 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1182 dinardo 1.1 {
1183     EtaCutStr.str("");
1184     EtaCutStr << EtaCut;
1185    
1186 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1187 dinardo 1.1 {
1188     PtCutStr.str("");
1189     PtCutStr << PtCut;
1190    
1191     if ((MapFit_dz.find(PtCutStr.str().c_str()) != MapFit_dz.end()) &&
1192     (MapFit_dz[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dz[PtCutStr.str().c_str()].end()) &&
1193     (MapFit_dzerr.find(PtCutStr.str().c_str()) != MapFit_dzerr.end()) &&
1194     (MapFit_dzerr[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_dzerr[PtCutStr.str().c_str()].end()))
1195     {
1196     for (int i = 0; i < 5; i++)
1197 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
1198 dinardo 1.1 {
1199     dz[i]->Add(MapFit_dz[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1200     dzerr[i]->Add(MapFit_dzerr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1201     }
1202     }
1203     }
1204    
1205     for (int i = 0; i < 5; i++)
1206     {
1207     DeconvolvErrsq = dzerr[i]->GetMean() / 100000000.;
1208     ErrDeconvolvErrsq = dzerr[i]->GetRMS() / sqrt(dzerr[i]->GetEntries()) / 100000000.;
1209    
1210     if ((FitAlgorithm (Gauss,dz[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
1211     {
1212     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
1213     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
1214    
1215 dinardo 1.8 H_dzres_eta_pt[i]->SetBinContent(H_dzres_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Val);
1216     H_dzres_eta_pt[i]->SetBinError(H_dzres_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Err);
1217 dinardo 1.1 }
1218    
1219     dz[i]->Reset();
1220     dzerr[i]->Reset();
1221     }
1222     }
1223    
1224     for (int i = 0; i < 5; i++) { delete dz[i]; delete dzerr[i]; }
1225     }
1226     else if (mapname.compare("ptpulls") == 0) // @@@ ptpulls MAP @@@
1227     {
1228     TH1F* ptpulls[5];
1229     ptpulls[0] = new TH1F("ptpulls_0", "ptpulls_0", 100, -pullsRange/2., pullsRange/2.);
1230     ptpulls[1] = new TH1F("ptpulls_1", "ptpulls_1", 100, -pullsRange/2., pullsRange/2.);
1231     ptpulls[2] = new TH1F("ptpulls_2", "ptpulls_2", 100, -pullsRange/2., pullsRange/2.);
1232     ptpulls[3] = new TH1F("ptpulls_3", "ptpulls_3", 100, -pullsRange/2., pullsRange/2.);
1233     ptpulls[4] = new TH1F("ptpulls_4", "ptpulls_4", 100, -pullsRange/2., pullsRange/2.);
1234    
1235 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1236 dinardo 1.1 {
1237     PtCutStr.str("");
1238     PtCutStr << PtCut;
1239    
1240 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1241 dinardo 1.1 {
1242     EtaCutStr.str("");
1243     EtaCutStr << EtaCut;
1244    
1245     if ((MapFit_pt_pull.find(PtCutStr.str().c_str()) != MapFit_pt_pull.end()) &&
1246     (MapFit_pt_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pt_pull[PtCutStr.str().c_str()].end()))
1247     {
1248     for (int i = 0; i < 2; i++)
1249 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
1250 dinardo 1.1 ptpulls[i]->Add(MapFit_pt_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1251     }
1252     }
1253    
1254 dinardo 1.8 if ((rint(PtCut*100.) == rint(RangePt*100.)) || (H_ptpull_pt_eta[0]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.) != H_ptpull_pt_eta[0]->GetXaxis()->FindBin(rint(PtCut*100.)/100.)))
1255 dinardo 1.1 {
1256     for (int i = 0; i < 2; i++)
1257     {
1258     if (FitAlgorithm (Gauss,ptpulls[i]) == true)
1259     {
1260 dinardo 1.8 H_ptpull_pt_eta[i]->SetBinContent(H_ptpull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParameter(2));
1261     H_ptpull_pt_eta[i]->SetBinError(H_ptpull_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Gauss->GetParError(2));
1262 dinardo 1.1 }
1263    
1264     ptpulls[i]->Reset();
1265     }
1266     }
1267     }
1268    
1269 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1270 dinardo 1.1 {
1271     EtaCutStr.str("");
1272     EtaCutStr << EtaCut;
1273    
1274 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1275 dinardo 1.1 {
1276     PtCutStr.str("");
1277     PtCutStr << PtCut;
1278    
1279     if ((MapFit_pt_pull.find(PtCutStr.str().c_str()) != MapFit_pt_pull.end()) &&
1280     (MapFit_pt_pull[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pt_pull[PtCutStr.str().c_str()].end()))
1281     {
1282     for (int i = 0; i < 5; i++)
1283 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
1284 dinardo 1.1 ptpulls[i]->Add(MapFit_pt_pull[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1285     }
1286     }
1287    
1288     for (int i = 0; i < 5; i++)
1289     {
1290     if (FitAlgorithm (Gauss,ptpulls[i]) == true)
1291     {
1292 dinardo 1.8 H_ptpull_eta_pt[i]->SetBinContent(H_ptpull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParameter(2));
1293     H_ptpull_eta_pt[i]->SetBinError(H_ptpull_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Gauss->GetParError(2));
1294 dinardo 1.1 }
1295    
1296     ptpulls[i]->Reset();
1297     }
1298     }
1299    
1300     for (int i = 0; i < 5; i++) delete ptpulls[i];
1301     }
1302     else if (mapname.compare("pt") == 0) // @@@ pt MAP @@@
1303     {
1304     TH1F* pt[5];
1305 dinardo 1.8 pt[0] = new TH1F("pt_0", "pt_0", 300, -ptRange/2., ptRange/2.); // cambio: 600
1306 dinardo 1.3 pt[1] = new TH1F("pt_1", "pt_1", 300, -ptRange/2., ptRange/2.);
1307     pt[2] = new TH1F("pt_2", "pt_2", 300, -ptRange/2., ptRange/2.);
1308     pt[3] = new TH1F("pt_3", "pt_3", 300, -ptRange/2., ptRange/2.);
1309     pt[4] = new TH1F("pt_4", "pt_4", 300, -ptRange/2., ptRange/2.);
1310 dinardo 1.1
1311     TH1F* pterr[5];
1312 dinardo 1.8 pterr[0] = new TH1F("pterr_0", "pterr_0", 3000, 0., pterrRange); // cambio: 5000
1313 dinardo 1.4 pterr[1] = new TH1F("pterr_1", "pterr_1", 3000, 0., pterrRange);
1314     pterr[2] = new TH1F("pterr_2", "pterr_2", 3000, 0., pterrRange);
1315     pterr[3] = new TH1F("pterr_3", "pterr_3", 3000, 0., pterrRange);
1316     pterr[4] = new TH1F("pterr_4", "pterr_4", 3000, 0., pterrRange);
1317 dinardo 1.1
1318 dinardo 1.8 double OldLowEdgeBin = MinPtTk;
1319    
1320 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1321 dinardo 1.1 {
1322     PtCutStr.str("");
1323     PtCutStr << PtCut;
1324    
1325 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1326 dinardo 1.1 {
1327     EtaCutStr.str("");
1328     EtaCutStr << EtaCut;
1329    
1330     if ((MapFit_pt.find(PtCutStr.str().c_str()) != MapFit_pt.end()) &&
1331     (MapFit_pt[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pt[PtCutStr.str().c_str()].end()) &&
1332     (MapFit_pterr.find(PtCutStr.str().c_str()) != MapFit_pterr.end()) &&
1333     (MapFit_pterr[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pterr[PtCutStr.str().c_str()].end()))
1334     {
1335     for (int i = 0; i < 2; i++)
1336 dinardo 1.6 if ((rint(EtaCut*100.) > rint(EtaThrBin[i]*100.)) && (rint(EtaCut*100.) <= rint(EtaThrBin[i+1]*100.)))
1337 dinardo 1.1 {
1338     pt[i]->Add(MapFit_pt[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1339     pterr[i]->Add(MapFit_pterr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1340     }
1341     }
1342     }
1343    
1344 dinardo 1.8 if ((rint(PtCut*100.) == rint(RangePt*100.)) || (H_ptres_pt_eta[0]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.) != H_ptres_pt_eta[0]->GetXaxis()->FindBin(rint(PtCut*100.)/100.)))
1345 dinardo 1.1 {
1346     for (int i = 0; i < 2; i++)
1347     {
1348     DeconvolvErrsq = pterr[i]->GetMean() / 1000000.;
1349     ErrDeconvolvErrsq = pterr[i]->GetRMS() / sqrt(pterr[i]->GetEntries()) / 1000000.;
1350    
1351     if ((FitAlgorithm (Gauss,pt[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
1352     {
1353     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
1354     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
1355    
1356 dinardo 1.8 H_ptres_pt_eta[i]->SetBinContent(H_ptres_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Val / ((PtCut + OldLowEdgeBin)/2.));
1357     H_ptres_pt_eta[i]->SetBinError(H_ptres_pt_eta[i]->GetXaxis()->FindBin(rint((PtCut-PtStep)*100.)/100.), Err / ((PtCut + OldLowEdgeBin)/2.));
1358 dinardo 1.1
1359 dinardo 1.8 H_skew_pt_eta[i]->Fill(rint((PtCut-PtStep)*100.)/100., pt[i]->GetSkewness());
1360 dinardo 1.1 }
1361    
1362     pt[i]->Reset();
1363     pterr[i]->Reset();
1364     }
1365 dinardo 1.8
1366     OldLowEdgeBin = PtCut;
1367 dinardo 1.1 }
1368     }
1369    
1370 dinardo 1.5 for (double EtaCut = EtaStep; rint(EtaCut*100.) <= rint(RangeEta*100.); EtaCut += EtaStep)
1371 dinardo 1.1 {
1372     EtaCutStr.str("");
1373     EtaCutStr << EtaCut;
1374    
1375 dinardo 1.5 for (double PtCut = MinPtTk+PtStep; rint(PtCut*100.) <= rint(RangePt*100.); PtCut += PtStep)
1376 dinardo 1.1 {
1377     PtCutStr.str("");
1378     PtCutStr << PtCut;
1379    
1380     if ((MapFit_pt.find(PtCutStr.str().c_str()) != MapFit_pt.end()) &&
1381     (MapFit_pt[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pt[PtCutStr.str().c_str()].end()) &&
1382     (MapFit_pterr.find(PtCutStr.str().c_str()) != MapFit_pterr.end()) &&
1383     (MapFit_pterr[PtCutStr.str().c_str()].find(EtaCutStr.str().c_str()) != MapFit_pterr[PtCutStr.str().c_str()].end()))
1384     {
1385     for (int i = 0; i < 5; i++)
1386 dinardo 1.6 if ((rint(PtCut*100.) > rint(PtThr[i]*100.)) && (rint(PtCut*100.) <= rint(PtThr[i+1]*100.)))
1387 dinardo 1.1 {
1388     pt[i]->Add(MapFit_pt[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1389     pterr[i]->Add(MapFit_pterr[PtCutStr.str().c_str()][EtaCutStr.str().c_str()]);
1390     }
1391     }
1392     }
1393    
1394     for (int i = 0; i < 5; i++)
1395     {
1396     DeconvolvErrsq = pterr[i]->GetMean() / 1000000.;
1397     ErrDeconvolvErrsq = pterr[i]->GetRMS() / sqrt(pterr[i]->GetEntries()) / 1000000.;
1398    
1399     if ((FitAlgorithm (Gauss,pt[i]) == true) && (Gauss->GetParameter(2)*Gauss->GetParameter(2) > DeconvolvErrsq))
1400     {
1401     Val = sqrt(Gauss->GetParameter(2)*Gauss->GetParameter(2) - DeconvolvErrsq);
1402     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) + powf(ErrDeconvolvErrsq,2.));
1403    
1404 dinardo 1.8 H_ptres_eta_pt[i]->SetBinContent(H_ptres_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Val / ((PtThr[i+1] + PtThr[i]) / 2.));
1405     H_ptres_eta_pt[i]->SetBinError(H_ptres_eta_pt[i]->GetXaxis()->FindBin(rint((EtaCut-EtaStep)*100.)/100.), Err / ((PtThr[i+1] + PtThr[i]) / 2.));
1406 dinardo 1.1 }
1407    
1408     pt[i]->Reset();
1409     pterr[i]->Reset();
1410     }
1411     }
1412    
1413     for (int i = 0; i < 5; i++) { delete pt[i]; delete pterr[i]; }
1414     }
1415    
1416     delete Gauss;
1417     }
1418    
1419    
1420     void MakePlots(string datatype)
1421     {
1422     double SumNum;
1423     double SumDen;
1424    
1425     if (datatype.compare("Vx") == 0)
1426     {
1427     // #################
1428     // ### VERTEXING ###
1429     // #################
1430    
1431     // ########################
1432     // # PURITY & EFFICIENCTY #
1433     // ########################
1434     SumNum = H_vx_counters->GetBinContent(H_vx_counters->GetXaxis()->FindBin("MatchEff"));
1435     SumDen = H_vx_counters->GetBinContent(H_vx_counters->GetXaxis()->FindBin("Strip"));
1436     H_vx_pur_eff->Fill("Efficiency", (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1437     H_vx_pur_eff->SetBinError(H_vx_pur_eff->GetXaxis()->FindBin("Efficiency"), (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1438    
1439     SumNum = H_vx_counters->GetBinContent(H_vx_counters->GetXaxis()->FindBin("MatchPur"));
1440     SumDen = H_vx_counters->GetBinContent(H_vx_counters->GetXaxis()->FindBin("Pixel"));
1441     H_vx_pur_eff->Fill("Purity", (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1442     H_vx_pur_eff->SetBinError(H_vx_pur_eff->GetXaxis()->FindBin("Purity"), (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1443    
1444     // #######################################
1445     // # Vertex Resolutions and Pulls vs Trk #
1446     // #######################################
1447     stringstream String;
1448     double Val,Err;
1449    
1450     TF1* Gauss = new TF1("Gauss", "gaus", -zRange/2., zRange/2.);
1451    
1452     for (map<string,TH1F*>::iterator it = map_H_vx_x_diff.begin(); it != map_H_vx_x_diff.end(); it++)
1453     {
1454     String.str("");
1455     String << atoi(it->first.c_str());
1456    
1457     Gauss->SetRange(-zRange/2., zRange/2.);
1458    
1459     // #############################
1460     // # Compute simple difference #
1461     // #############################
1462     if (map_H_vx_x_diff.find(String.str().c_str()) != map_H_vx_x_diff.end() && (FitAlgorithm (Gauss, map_H_vx_x_diff[String.str().c_str()]) == true))
1463     {
1464     H_vx_x_diff_vs_trk->SetBinContent(H_vx_x_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1465     H_vx_x_diff_vs_trk->SetBinError(H_vx_x_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1466     }
1467     if (map_H_vx_y_diff.find(String.str().c_str()) != map_H_vx_y_diff.end() && (FitAlgorithm (Gauss, map_H_vx_y_diff[String.str().c_str()]) == true))
1468     {
1469     H_vx_y_diff_vs_trk->SetBinContent(H_vx_y_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1470     H_vx_y_diff_vs_trk->SetBinError(H_vx_y_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1471     }
1472     if (map_H_vx_z_diff.find(String.str().c_str()) != map_H_vx_z_diff.end() && (FitAlgorithm (Gauss, map_H_vx_z_diff[String.str().c_str()]) == true))
1473     {
1474     H_vx_z_diff_vs_trk->SetBinContent(H_vx_z_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1475     H_vx_z_diff_vs_trk->SetBinError(H_vx_z_diff_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1476     }
1477    
1478     // #################################################
1479     // # Compute difference deconvolving vx resolution #
1480     // #################################################
1481     if ((map_H_vx_x_err2.find(String.str().c_str()) != map_H_vx_x_err2.end()) &&
1482     (map_H_vx_x_diff.find(String.str().c_str()) != map_H_vx_x_diff.end()) &&
1483     (FitAlgorithm (Gauss, map_H_vx_x_diff[String.str().c_str()]) == true) &&
1484     (powf(Gauss->GetParameter(2),2.) > map_H_vx_x_err2[String.str().c_str()]->GetMean()))
1485     {
1486     Val = sqrt(powf(Gauss->GetParameter(2),2.) - map_H_vx_x_err2[String.str().c_str()]->GetMean());
1487    
1488     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) +
1489     powf(map_H_vx_x_err2[String.str().c_str()]->GetRMS()/sqrt(map_H_vx_x_err2[String.str().c_str()]->GetEntries()),2.));
1490    
1491     H_vx_x_diff_noerr_vs_trk->SetBinContent(H_vx_x_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Val);
1492     H_vx_x_diff_noerr_vs_trk->SetBinError(H_vx_x_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Err);
1493     }
1494     if ((map_H_vx_y_err2.find(String.str().c_str()) != map_H_vx_y_err2.end()) &&
1495     (map_H_vx_y_diff.find(String.str().c_str()) != map_H_vx_y_diff.end()) &&
1496     (FitAlgorithm (Gauss, map_H_vx_y_diff[String.str().c_str()]) == true) &&
1497     (powf(Gauss->GetParameter(2),2.) > map_H_vx_y_err2[String.str().c_str()]->GetMean()))
1498     {
1499     Val = sqrt(powf(Gauss->GetParameter(2),2.) - map_H_vx_y_err2[String.str().c_str()]->GetMean());
1500    
1501     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) +
1502     powf(map_H_vx_y_err2[String.str().c_str()]->GetRMS()/sqrt(map_H_vx_y_err2[String.str().c_str()]->GetEntries()),2.));
1503    
1504     H_vx_y_diff_noerr_vs_trk->SetBinContent(H_vx_y_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Val);
1505     H_vx_y_diff_noerr_vs_trk->SetBinError(H_vx_y_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Err);
1506     }
1507     if ((map_H_vx_z_err2.find(String.str().c_str()) != map_H_vx_z_err2.end()) &&
1508     (map_H_vx_z_diff.find(String.str().c_str()) != map_H_vx_z_diff.end()) &&
1509     (FitAlgorithm (Gauss, map_H_vx_z_diff[String.str().c_str()]) == true) &&
1510     (powf(Gauss->GetParameter(2),2.) > map_H_vx_z_err2[String.str().c_str()]->GetMean()))
1511     {
1512     Val = sqrt(powf(Gauss->GetParameter(2),2.) - map_H_vx_z_err2[String.str().c_str()]->GetMean());
1513    
1514     Err = 1./(2.*Val) * sqrt(powf(2.*Gauss->GetParameter(2)*Gauss->GetParError(2),2.) +
1515     powf(map_H_vx_z_err2[String.str().c_str()]->GetRMS()/sqrt(map_H_vx_z_err2[String.str().c_str()]->GetEntries()),2.));
1516    
1517     H_vx_z_diff_noerr_vs_trk->SetBinContent(H_vx_z_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Val);
1518     H_vx_z_diff_noerr_vs_trk->SetBinError(H_vx_z_diff_noerr_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Err);
1519     }
1520    
1521     Gauss->SetRange(-pullsRange/2., pullsRange/2.);
1522    
1523     // #################
1524     // # Compute pulls #
1525     // #################
1526     if (map_H_vx_x_diff_pull.find(String.str().c_str()) != map_H_vx_x_diff_pull.end() && (FitAlgorithm (Gauss, map_H_vx_x_diff_pull[String.str().c_str()]) == true))
1527     {
1528     H_vx_x_diff_pull_vs_trk->SetBinContent(H_vx_x_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1529     H_vx_x_diff_pull_vs_trk->SetBinError(H_vx_x_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1530     }
1531     if (map_H_vx_y_diff_pull.find(String.str().c_str()) != map_H_vx_y_diff_pull.end() && (FitAlgorithm (Gauss, map_H_vx_y_diff_pull[String.str().c_str()]) == true))
1532     {
1533     H_vx_y_diff_pull_vs_trk->SetBinContent(H_vx_y_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1534     H_vx_y_diff_pull_vs_trk->SetBinError(H_vx_y_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1535     }
1536     if (map_H_vx_z_diff_pull.find(String.str().c_str()) != map_H_vx_z_diff_pull.end() && (FitAlgorithm (Gauss, map_H_vx_z_diff_pull[String.str().c_str()]) == true))
1537     {
1538     H_vx_z_diff_pull_vs_trk->SetBinContent(H_vx_z_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1539     H_vx_z_diff_pull_vs_trk->SetBinError(H_vx_z_diff_pull_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1540     }
1541     }
1542    
1543     Gauss->SetRange(-zRange/2., zRange/2.);
1544    
1545     for (map<string,TH1F*>::iterator it = map_H_vx_x_diff_orig.begin(); it != map_H_vx_x_diff_orig.end(); it++)
1546     {
1547     String.str("");
1548     String << atoi(it->first.c_str());
1549    
1550     // ####################################################
1551     // # Compute simple difference with original vertices #
1552     // ####################################################
1553     if (map_H_vx_x_diff_orig.find(String.str().c_str()) != map_H_vx_x_diff_orig.end() && (FitAlgorithm (Gauss, map_H_vx_x_diff_orig[String.str().c_str()]) == true))
1554     {
1555     H_vx_x_diff_orig_vs_trk->SetBinContent(H_vx_x_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1556     H_vx_x_diff_orig_vs_trk->SetBinError(H_vx_x_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1557     }
1558     if (map_H_vx_y_diff_orig.find(String.str().c_str()) != map_H_vx_y_diff_orig.end() && (FitAlgorithm (Gauss, map_H_vx_y_diff_orig[String.str().c_str()]) == true))
1559     {
1560     H_vx_y_diff_orig_vs_trk->SetBinContent(H_vx_y_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1561     H_vx_y_diff_orig_vs_trk->SetBinError(H_vx_y_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1562     }
1563     if (map_H_vx_z_diff_orig.find(String.str().c_str()) != map_H_vx_z_diff_orig.end() && (FitAlgorithm (Gauss, map_H_vx_z_diff_orig[String.str().c_str()]) == true))
1564     {
1565     H_vx_z_diff_orig_vs_trk->SetBinContent(H_vx_z_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParameter(2));
1566     H_vx_z_diff_orig_vs_trk->SetBinError(H_vx_z_diff_orig_vs_trk->GetXaxis()->FindBin(atoi(it->first.c_str())), Gauss->GetParError(2));
1567     }
1568     }
1569    
1570     delete Gauss;
1571     }
1572     else if (datatype.compare("Tk") == 0)
1573     {
1574     // ################
1575     // ### TRACKING ###
1576     // ################
1577    
1578     double TotalSumNum;
1579     double TotalSumDen;
1580    
1581     // ################################
1582     // # 3-PIXEL-HIT EFFICIENCY VS PT #
1583     // ################################
1584     for (int i = 1; i <= H_trk_eff_pt->GetNbinsX(); i++)
1585     {
1586     H_trk_eff_pt->SetBinContent(i, (H_trk_eff_pt_den->GetBinContent(i) > H_trk_eff_pt_num->GetBinContent(i)) ?
1587     H_trk_eff_pt_num->GetBinContent(i) / H_trk_eff_pt_den->GetBinContent(i) : 0.);
1588     H_trk_eff_pt->SetBinError(i, (H_trk_eff_pt_den->GetBinContent(i) > H_trk_eff_pt_num->GetBinContent(i)) ?
1589     sqrt((H_trk_eff_pt_num->GetBinContent(i)*(H_trk_eff_pt_den->GetBinContent(i) - H_trk_eff_pt_num->GetBinContent(i))) /
1590     powf(H_trk_eff_pt_den->GetBinContent(i),3.)) : 0.);
1591     }
1592    
1593     // #################################
1594     // # 3-PIXEL-HIT EFFICIENCY VS ETA #
1595     // #################################
1596     for (int i = 1; i <= H_trk_eff_eta->GetNbinsX(); i++)
1597     {
1598     H_trk_eff_eta->SetBinContent(i, (H_trk_eff_eta_den->GetBinContent(i) > H_trk_eff_eta_num->GetBinContent(i)) ?
1599     H_trk_eff_eta_num->GetBinContent(i) / H_trk_eff_eta_den->GetBinContent(i) : 0.);
1600     H_trk_eff_eta->SetBinError(i, (H_trk_eff_eta_den->GetBinContent(i) > H_trk_eff_eta_num->GetBinContent(i)) ?
1601     sqrt((H_trk_eff_eta_num->GetBinContent(i)*(H_trk_eff_eta_den->GetBinContent(i) - H_trk_eff_eta_num->GetBinContent(i))) /
1602     powf(H_trk_eff_eta_den->GetBinContent(i),3.)) : 0.);
1603     }
1604    
1605 dinardo 1.7 // #################################
1606     // # 3-PIXEL-HIT EFFICIENCY VS PHI #
1607     // #################################
1608 dinardo 1.8 // for (int i = 1; i <= H_trk_eff_phi[0]->GetNbinsX(); i++)
1609     // {
1610     // for (int j = 0; j < 3; j++)
1611     // {
1612     // H_trk_eff_phi[j]->SetBinContent(i, (H_trk_eff_phi_den[j]->GetBinContent(i) > H_trk_eff_phi_num[j]->GetBinContent(i)) ?
1613     // H_trk_eff_phi_num[j]->GetBinContent(i) / H_trk_eff_phi_den[j]->GetBinContent(i) : 0.);
1614     // H_trk_eff_phi[j]->SetBinError(i, (H_trk_eff_phi_den[j]->GetBinContent(i) > H_trk_eff_phi_num[j]->GetBinContent(i)) ?
1615     // sqrt((H_trk_eff_phi_num[j]->GetBinContent(i)*(H_trk_eff_phi_den[j]->GetBinContent(i) - H_trk_eff_phi_num[j]->GetBinContent(i))) /
1616     // powf(H_trk_eff_phi_den[j]->GetBinContent(i),3.)) : 0.);
1617     // }
1618     // }
1619    
1620     // ########################
1621     // # ALL EFFICIENCY VS PT #
1622     // ########################
1623 dinardo 1.10 // for (int i = 1; i <= H_trk_toteff_pt->GetNbinsX(); i++)
1624     // {
1625     // H_trk_toteff_pt->SetBinContent(i, (H_trk_toteff_pt_den->GetBinContent(i) > H_trk_toteff_pt_num->GetBinContent(i)) ?
1626     // H_trk_toteff_pt_num->GetBinContent(i) / H_trk_toteff_pt_den->GetBinContent(i) : 0.);
1627     // H_trk_toteff_pt->SetBinError(i, (H_trk_toteff_pt_den->GetBinContent(i) > H_trk_toteff_pt_num->GetBinContent(i)) ?
1628     // sqrt((H_trk_toteff_pt_num->GetBinContent(i)*(H_trk_toteff_pt_den->GetBinContent(i) - H_trk_toteff_pt_num->GetBinContent(i))) /
1629     // powf(H_trk_toteff_pt_den->GetBinContent(i),3.)) : 0.);
1630     // }
1631 dinardo 1.8
1632     // #########################
1633     // # ALL EFFICIENCY VS ETA #
1634     // #########################
1635 dinardo 1.10 // for (int i = 1; i <= H_trk_toteff_eta->GetNbinsX(); i++)
1636     // {
1637     // H_trk_toteff_eta->SetBinContent(i, (H_trk_toteff_eta_den->GetBinContent(i) > H_trk_toteff_eta_num->GetBinContent(i)) ?
1638     // H_trk_toteff_eta_num->GetBinContent(i) / H_trk_toteff_eta_den->GetBinContent(i) : 0.);
1639     // H_trk_toteff_eta->SetBinError(i, (H_trk_toteff_eta_den->GetBinContent(i) > H_trk_toteff_eta_num->GetBinContent(i)) ?
1640     // sqrt((H_trk_toteff_eta_num->GetBinContent(i)*(H_trk_toteff_eta_den->GetBinContent(i) - H_trk_toteff_eta_num->GetBinContent(i))) /
1641     // powf(H_trk_toteff_eta_den->GetBinContent(i),3.)) : 0.);
1642     // }
1643 dinardo 1.8
1644     // #########################
1645     // # ALL EFFICIENCY VS PHI #
1646     // #########################
1647     // for (int i = 1; i <= H_trk_toteff_phi[0]->GetNbinsX(); i++)
1648     // {
1649     // for (int j = 0; j < 3; j++)
1650     // {
1651     // H_trk_toteff_phi[j]->SetBinContent(i, (H_trk_toteff_phi_den[j]->GetBinContent(i) > H_trk_toteff_phi_num[j]->GetBinContent(i)) ?
1652     // H_trk_toteff_phi_num[j]->GetBinContent(i) / H_trk_toteff_phi_den[j]->GetBinContent(i) : 0.);
1653     // H_trk_toteff_phi[j]->SetBinError(i, (H_trk_toteff_phi_den[j]->GetBinContent(i) > H_trk_toteff_phi_num[j]->GetBinContent(i)) ?
1654     // sqrt((H_trk_toteff_phi_num[j]->GetBinContent(i)*(H_trk_toteff_phi_den[j]->GetBinContent(i) - H_trk_toteff_phi_num[j]->GetBinContent(i))) /
1655     // powf(H_trk_toteff_phi_den[j]->GetBinContent(i),3.)) : 0.);
1656     // }
1657     // }
1658 dinardo 1.7
1659 dinardo 1.1 // ################################
1660     // # PIXEL-TRACKS DOUBLE COUNTING #
1661     // ################################
1662     for (int i = 1; i <= H_pix_trk_doubleCounter_eta->GetNbinsX(); i++)
1663     {
1664     H_pix_trk_doubleCounter_eta_rel->SetBinContent(i, (H_pix_trk_eta->GetBinContent(i) > H_pix_trk_doubleCounter_eta->GetBinContent(i)) ?
1665     H_pix_trk_doubleCounter_eta->GetBinContent(i) / H_pix_trk_eta->GetBinContent(i) : 0.);
1666     H_pix_trk_doubleCounter_eta_rel->SetBinError(i, (H_pix_trk_eta->GetBinContent(i) > H_pix_trk_doubleCounter_eta->GetBinContent(i)) ?
1667     sqrt((H_pix_trk_doubleCounter_eta->GetBinContent(i)*(H_pix_trk_eta->GetBinContent(i) - H_pix_trk_doubleCounter_eta->GetBinContent(i))) /
1668     powf(H_pix_trk_eta->GetBinContent(i),3.)) : 0.);
1669     }
1670     for (int i = 1; i <= H_pix_trk_doubleCounter_pt->GetNbinsX(); i++)
1671     {
1672     H_pix_trk_doubleCounter_pt_rel->SetBinContent(i, (H_pix_trk_pt->GetBinContent(i) > H_pix_trk_doubleCounter_pt->GetBinContent(i)) ?
1673     H_pix_trk_doubleCounter_pt->GetBinContent(i) / H_pix_trk_pt->GetBinContent(i) : 0.);
1674     H_pix_trk_doubleCounter_pt_rel->SetBinError(i, (H_pix_trk_pt->GetBinContent(i) > H_pix_trk_doubleCounter_pt->GetBinContent(i)) ?
1675     sqrt((H_pix_trk_doubleCounter_pt->GetBinContent(i)*(H_pix_trk_pt->GetBinContent(i) - H_pix_trk_doubleCounter_pt->GetBinContent(i))) /
1676     powf(H_pix_trk_pt->GetBinContent(i),3.)) : 0.);
1677     }
1678    
1679     // ##################################
1680     // # TRACKER-TRACKS DOUBLE COUNTING #
1681     // ##################################
1682     for (int i = 1; i <= H_trk_trk_doubleCounter_eta->GetNbinsX(); i++)
1683     {
1684     H_trk_trk_doubleCounter_eta_rel->SetBinContent(i, (H_trk_trk_eta->GetBinContent(i) > H_trk_trk_doubleCounter_eta->GetBinContent(i)) ?
1685     H_trk_trk_doubleCounter_eta->GetBinContent(i) / H_trk_trk_eta->GetBinContent(i) : 0.);
1686     H_trk_trk_doubleCounter_eta_rel->SetBinError(i, (H_trk_trk_eta->GetBinContent(i) > H_trk_trk_doubleCounter_eta->GetBinContent(i)) ?
1687     sqrt((H_trk_trk_doubleCounter_eta->GetBinContent(i)*(H_trk_trk_eta->GetBinContent(i) - H_trk_trk_doubleCounter_eta->GetBinContent(i))) /
1688     powf(H_trk_trk_eta->GetBinContent(i),3.)) : 0.);
1689     }
1690     for (int i = 1; i <= H_trk_trk_doubleCounter_pt->GetNbinsX(); i++)
1691     {
1692     H_trk_trk_doubleCounter_pt_rel->SetBinContent(i, (H_trk_trk_pt->GetBinContent(i) > H_trk_trk_doubleCounter_pt->GetBinContent(i)) ?
1693     H_trk_trk_doubleCounter_pt->GetBinContent(i) / H_trk_trk_pt->GetBinContent(i) : 0.);
1694     H_trk_trk_doubleCounter_pt_rel->SetBinError(i, (H_trk_trk_pt->GetBinContent(i) > H_trk_trk_doubleCounter_pt->GetBinContent(i)) ?
1695     sqrt((H_trk_trk_doubleCounter_pt->GetBinContent(i)*(H_trk_trk_pt->GetBinContent(i) - H_trk_trk_doubleCounter_pt->GetBinContent(i))) /
1696     powf(H_trk_trk_pt->GetBinContent(i),3.)) : 0.);
1697     }
1698    
1699     // #####################
1700     // # PURITY vs CHI2-Pt #
1701     // #####################
1702     for (int k = 0; k < 2; k++)
1703     for (int i = 1; i <= H_purity_trked_normchi2_pt_eta[k]->GetNbinsX(); i++)
1704     for (int j = 1; j <= H_purity_trked_normchi2_pt_eta[k]->GetNbinsY(); j++)
1705     if (H_pix_trk_normchi2_pt_eta[k]->GetBinContent(i,j) >= MinEntriesEffPur)
1706     H_purity_trked_normchi2_pt_eta[k]->SetBinContent(i,j, H_trked_normchi2_pt_pur_eta[k]->GetBinContent(i,j) / H_pix_trk_normchi2_pt_eta[k]->GetBinContent(i,j));
1707    
1708     // #################
1709     // # PURITY vs ETA #
1710     // #################
1711     TotalSumNum = 0.;
1712     TotalSumDen = 0.;
1713     for (int i = 1; i <= H_pix_trk_eta_phi->GetNbinsX(); i++)
1714     {
1715     SumNum = 0.;
1716     SumDen = 0.;
1717     for (int j = 1; j <= H_pix_trk_eta_phi->GetNbinsY(); j++)
1718     {
1719     SumNum = SumNum + H_trked_eta_phi_pur->GetBinContent(i,j);
1720     SumDen = SumDen + H_pix_trk_eta_phi->GetBinContent(i,j);
1721     }
1722    
1723     TotalSumNum = TotalSumNum + SumNum;
1724     TotalSumDen = TotalSumDen + SumDen;
1725    
1726     H_purity_trked_eta->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1727     H_purity_trked_eta->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1728     }
1729     H_tk_pur_eff->Fill("Purity", (TotalSumDen >= MinEntriesEffPur) ? TotalSumNum / TotalSumDen : 0.);
1730     H_tk_pur_eff->SetBinError(H_tk_pur_eff->GetXaxis()->FindBin("Purity"), (TotalSumDen >= MinEntriesEffPur) ? sqrt((TotalSumNum*(TotalSumDen-TotalSumNum))/powf(TotalSumDen,3.)) : 0.);
1731    
1732     // ################
1733     // # PURITY vs Pt #
1734     // ################
1735 dinardo 1.8 for (int j = H_pix_trk_eta_pt->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_pix_trk_eta_pt->GetNbinsY(); j++)
1736 dinardo 1.1 {
1737     SumNum = 0.;
1738     SumDen = 0.;
1739 dinardo 1.8 for (int i = H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i <= H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); i++)
1740 dinardo 1.1 {
1741     SumNum = SumNum + H_trked_eta_pt_pur->GetBinContent(i,j);
1742     SumDen = SumDen + H_pix_trk_eta_pt->GetBinContent(i,j);
1743     }
1744     H_purity_trked_pt_eta[0]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1745     H_purity_trked_pt_eta[0]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1746    
1747     SumNum = 0.;
1748     SumDen = 0.;
1749 dinardo 1.8 for (int i = 1; i < H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i++)
1750 dinardo 1.1 {
1751     SumNum = SumNum + H_trked_eta_pt_pur->GetBinContent(i,j);
1752     SumDen = SumDen + H_pix_trk_eta_pt->GetBinContent(i,j);
1753     }
1754 dinardo 1.8 for (int i = H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(EtaThr*100.)/100.) + 1; i <= H_pix_trk_eta_pt->GetNbinsX(); i++)
1755 dinardo 1.1 {
1756     SumNum = SumNum + H_trked_eta_pt_pur->GetBinContent(i,j);
1757     SumDen = SumDen + H_pix_trk_eta_pt->GetBinContent(i,j);
1758     }
1759     H_purity_trked_pt_eta[1]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1760     H_purity_trked_pt_eta[1]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1761     }
1762    
1763 dinardo 1.8 for (int j = H_pix_trk_eta_pt->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_pix_trk_eta_pt->GetNbinsY(); j++)
1764 dinardo 1.1 {
1765     SumNum = 0.;
1766     SumDen = 0.;
1767 dinardo 1.8 for (int i = H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); i <= H_pix_trk_eta_pt->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); i++)
1768 dinardo 1.1 {
1769     SumNum = SumNum + H_trked_eta_pt_pur->GetBinContent(i,j);
1770     SumDen = SumDen + H_pix_trk_eta_pt->GetBinContent(i,j);
1771     }
1772     H_purity_trked_pt_whole_eta->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1773     H_purity_trked_pt_whole_eta->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1774     }
1775    
1776     // #################
1777     // # PURITY vs Phi #
1778     // #################
1779     for (int i = 1; i <= H_pix_trk_eta_phi->GetNbinsY(); i++)
1780     {
1781     SumNum = 0.;
1782     SumDen = 0.;
1783 dinardo 1.8 for (int j = H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); j <= H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j++)
1784 dinardo 1.1 {
1785     SumNum = SumNum + H_trked_eta_phi_pur->GetBinContent(j,i);
1786     SumDen = SumDen + H_pix_trk_eta_phi->GetBinContent(j,i);
1787     }
1788     H_purity_trked_phi[0]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1789     H_purity_trked_phi[0]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1790    
1791     SumNum = 0.;
1792     SumDen = 0.;
1793 dinardo 1.8 for (int j = H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j <= H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j++)
1794 dinardo 1.1 {
1795     SumNum = SumNum + H_trked_eta_phi_pur->GetBinContent(j,i);
1796     SumDen = SumDen + H_pix_trk_eta_phi->GetBinContent(j,i);
1797     }
1798     H_purity_trked_phi[1]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1799     H_purity_trked_phi[1]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1800    
1801     SumNum = 0.;
1802     SumDen = 0.;
1803 dinardo 1.8 for (int j = H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j <= H_pix_trk_eta_phi->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); j++)
1804 dinardo 1.1 {
1805     SumNum = SumNum + H_trked_eta_phi_pur->GetBinContent(j,i);
1806     SumDen = SumDen + H_pix_trk_eta_phi->GetBinContent(j,i);
1807     }
1808     H_purity_trked_phi[2]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1809     H_purity_trked_phi[2]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1810     }
1811    
1812     // #########################
1813     // # EFFICIENCY vs CHI2-Pt #
1814     // #########################
1815     for (int k = 0; k < 2; k++)
1816     for (int i = 1; i <= H_efficiency_trked_normchi2_pt_eta[k]->GetNbinsX(); i++)
1817     for (int j = 1; j <= H_efficiency_trked_normchi2_pt_eta[k]->GetNbinsY(); j++)
1818     if (H_trk_trk_normchi2_pt_eta[k]->GetBinContent(i,j) >= MinEntriesEffPur)
1819     H_efficiency_trked_normchi2_pt_eta[k]->SetBinContent(i,j, H_trked_normchi2_pt_eff_eta[k]->GetBinContent(i,j) / H_trk_trk_normchi2_pt_eta[k]->GetBinContent(i,j));
1820    
1821     // #####################
1822     // # EFFICIENCY vs ETA #
1823     // #####################
1824     TotalSumNum = 0.;
1825     TotalSumDen = 0.;
1826     for (int i = 1; i <= H_trk_trk_eta_phi->GetNbinsX(); i++)
1827     {
1828     SumNum = 0.;
1829     SumDen = 0.;
1830     for (int j = 1; j <= H_trk_trk_eta_phi->GetNbinsY(); j++)
1831     {
1832     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(i,j);
1833     SumDen = SumDen + H_trk_trk_eta_phi->GetBinContent(i,j);
1834     }
1835    
1836     TotalSumNum = TotalSumNum + SumNum;
1837     TotalSumDen = TotalSumDen + SumDen;
1838    
1839     H_efficiency_trked_eta->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1840     H_efficiency_trked_eta->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1841     }
1842     H_tk_pur_eff->Fill("Efficiency", (TotalSumDen >= MinEntriesEffPur) ? TotalSumNum / TotalSumDen : 0.);
1843     H_tk_pur_eff->SetBinError(H_tk_pur_eff->GetXaxis()->FindBin("Efficiency"), (TotalSumDen >= MinEntriesEffPur) ? sqrt((TotalSumNum*(TotalSumDen-TotalSumNum))/powf(TotalSumDen,3.)) : 0.);
1844    
1845     // ##########################
1846     // # ALGO-EFFICIENCY vs ETA #
1847     // ##########################
1848     TotalSumNum = 0.;
1849     TotalSumDen = 0.;
1850     for (int i = 1; i <= H_trk_trk_eta_phi_algo->GetNbinsX(); i++)
1851     {
1852     SumNum = 0.;
1853     SumDen = 0.;
1854     for (int j = 1; j <= H_trk_trk_eta_phi_algo->GetNbinsY(); j++)
1855     {
1856     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(i,j);
1857     SumDen = SumDen + H_trk_trk_eta_phi_algo->GetBinContent(i,j);
1858     }
1859    
1860     TotalSumNum = TotalSumNum + SumNum;
1861     TotalSumDen = TotalSumDen + SumDen;
1862    
1863     H_efficiency_trked_eta_algo->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1864     H_efficiency_trked_eta_algo->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1865     }
1866     H_tk_pur_eff->Fill("Algo-Efficiency", (TotalSumDen >= MinEntriesEffPur) ? TotalSumNum / TotalSumDen : 0.);
1867     H_tk_pur_eff->SetBinError(H_tk_pur_eff->GetXaxis()->FindBin("Algo-Efficiency"), (TotalSumDen >= MinEntriesEffPur) ? sqrt((TotalSumNum*(TotalSumDen-TotalSumNum))/powf(TotalSumDen,3.)) : 0.);
1868    
1869     // ####################
1870     // # EFFICIENCY vs Pt #
1871     // ####################
1872 dinardo 1.8 for (int j = H_trk_trk_eta_pt->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_trk_trk_eta_pt->GetNbinsY(); j++)
1873 dinardo 1.1 {
1874     SumNum = 0.;
1875     SumDen = 0.;
1876 dinardo 1.8 for (int i = H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i <= H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); i++)
1877 dinardo 1.1 {
1878     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1879     SumDen = SumDen + H_trk_trk_eta_pt->GetBinContent(i,j);
1880     }
1881     H_efficiency_trked_pt_eta[0]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1882     H_efficiency_trked_pt_eta[0]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1883    
1884     SumNum = 0.;
1885     SumDen = 0.;
1886 dinardo 1.8 for (int i = 1; i < H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i++)
1887 dinardo 1.1 {
1888     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1889     SumDen = SumDen + H_trk_trk_eta_pt->GetBinContent(i,j);
1890     }
1891 dinardo 1.8 for (int i = H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(EtaThr*100.)/100.) + 1; i <= H_trk_trk_eta_pt->GetNbinsX(); i++)
1892 dinardo 1.1 {
1893     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1894     SumDen = SumDen + H_trk_trk_eta_pt->GetBinContent(i,j);
1895     }
1896     H_efficiency_trked_pt_eta[1]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1897     H_efficiency_trked_pt_eta[1]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1898     }
1899    
1900 dinardo 1.8 for (int j = H_trk_trk_eta_pt->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_trk_trk_eta_pt->GetNbinsY(); j++)
1901 dinardo 1.1 {
1902     SumNum = 0.;
1903     SumDen = 0.;
1904 dinardo 1.8 for (int i = H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); i <= H_trk_trk_eta_pt->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); i++)
1905 dinardo 1.1 {
1906     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1907     SumDen = SumDen + H_trk_trk_eta_pt->GetBinContent(i,j);
1908     }
1909     H_efficiency_trked_pt_whole_eta->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1910     H_efficiency_trked_pt_whole_eta->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1911     }
1912    
1913     // #########################
1914     // # ALGO-EFFICIENCY vs Pt #
1915     // #########################
1916 dinardo 1.8 for (int j = H_trk_trk_eta_pt_algo->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_trk_trk_eta_pt_algo->GetNbinsY(); j++)
1917 dinardo 1.1 {
1918     SumNum = 0.;
1919     SumDen = 0.;
1920 dinardo 1.8 for (int i = H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i <= H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); i++)
1921 dinardo 1.1 {
1922     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1923     SumDen = SumDen + H_trk_trk_eta_pt_algo->GetBinContent(i,j);
1924     }
1925     H_efficiency_trked_pt_eta_algo[0]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1926     H_efficiency_trked_pt_eta_algo[0]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1927    
1928     SumNum = 0.;
1929     SumDen = 0.;
1930 dinardo 1.8 for (int i = 1; i < H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); i++)
1931 dinardo 1.1 {
1932     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1933     SumDen = SumDen + H_trk_trk_eta_pt_algo->GetBinContent(i,j);
1934     }
1935 dinardo 1.8 for (int i = H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(EtaThr*100.)/100.) + 1; i <= H_trk_trk_eta_pt_algo->GetNbinsX(); i++)
1936 dinardo 1.1 {
1937     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1938     SumDen = SumDen + H_trk_trk_eta_pt_algo->GetBinContent(i,j);
1939     }
1940     H_efficiency_trked_pt_eta_algo[1]->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1941     H_efficiency_trked_pt_eta_algo[1]->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1942     }
1943    
1944 dinardo 1.8 for (int j = H_trk_trk_eta_pt_algo->GetYaxis()->FindBin(rint(MinPtTk*100.)/100.); j <= H_trk_trk_eta_pt_algo->GetNbinsY(); j++)
1945 dinardo 1.1 {
1946     SumNum = 0.;
1947     SumDen = 0.;
1948 dinardo 1.8 for (int i = H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); i <= H_trk_trk_eta_pt_algo->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); i++)
1949 dinardo 1.1 {
1950     SumNum = SumNum + H_trked_eta_pt_eff->GetBinContent(i,j);
1951     SumDen = SumDen + H_trk_trk_eta_pt_algo->GetBinContent(i,j);
1952     }
1953     H_efficiency_trked_pt_whole_eta_algo->SetBinContent(j, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1954     H_efficiency_trked_pt_whole_eta_algo->SetBinError(j, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1955     }
1956    
1957     // #####################
1958     // # EFFICIENCY vs Phi #
1959     // #####################
1960     for (int i = 1; i <= H_trk_trk_eta_phi->GetNbinsY(); i++)
1961     {
1962     SumNum = 0.;
1963     SumDen = 0.;
1964 dinardo 1.8 for (int j = H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); j <= H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j++)
1965 dinardo 1.1 {
1966     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
1967     SumDen = SumDen + H_trk_trk_eta_phi->GetBinContent(j,i);
1968     }
1969     H_efficiency_trked_phi[0]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1970     H_efficiency_trked_phi[0]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1971    
1972     SumNum = 0.;
1973     SumDen = 0.;
1974 dinardo 1.8 for (int j = H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j <= H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j++)
1975 dinardo 1.1 {
1976     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
1977     SumDen = SumDen + H_trk_trk_eta_phi->GetBinContent(j,i);
1978     }
1979     H_efficiency_trked_phi[1]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1980     H_efficiency_trked_phi[1]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1981    
1982     SumNum = 0.;
1983     SumDen = 0.;
1984 dinardo 1.8 for (int j = H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j <= H_trk_trk_eta_phi->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); j++)
1985 dinardo 1.1 {
1986     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
1987     SumDen = SumDen + H_trk_trk_eta_phi->GetBinContent(j,i);
1988     }
1989     H_efficiency_trked_phi[2]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
1990     H_efficiency_trked_phi[2]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
1991     }
1992    
1993     // ##########################
1994     // # ALGO-EFFICIENCY vs Phi #
1995     // ##########################
1996 dinardo 1.10 for (int i = 1; i <= H_trk_trk_eta_phi_algo->GetNbinsY(); i++)
1997 dinardo 1.1 {
1998     SumNum = 0.;
1999     SumDen = 0.;
2000 dinardo 1.8 for (int j = H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(-MaxEtaTkTrk*100.)/100.); j <= H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j++)
2001 dinardo 1.1 {
2002     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
2003     SumDen = SumDen + H_trk_trk_eta_phi_algo->GetBinContent(j,i);
2004     }
2005     H_efficiency_trked_phi_algo[0]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
2006     H_efficiency_trked_phi_algo[0]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
2007    
2008     SumNum = 0.;
2009     SumDen = 0.;
2010 dinardo 1.8 for (int j = H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(-EtaThr*100.)/100.); j <= H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j++)
2011 dinardo 1.1 {
2012     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
2013     SumDen = SumDen + H_trk_trk_eta_phi_algo->GetBinContent(j,i);
2014     }
2015     H_efficiency_trked_phi_algo[1]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
2016     H_efficiency_trked_phi_algo[1]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
2017    
2018     SumNum = 0.;
2019     SumDen = 0.;
2020 dinardo 1.8 for (int j = H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(EtaThr*100.)/100.); j <= H_trk_trk_eta_phi_algo->GetXaxis()->FindBin(rint(MaxEtaTkTrk*100.)/100.); j++)
2021 dinardo 1.1 {
2022     SumNum = SumNum + H_trked_eta_phi_eff->GetBinContent(j,i);
2023     SumDen = SumDen + H_trk_trk_eta_phi_algo->GetBinContent(j,i);
2024     }
2025     H_efficiency_trked_phi_algo[2]->SetBinContent(i, (SumDen >= MinEntriesEffPur) ? SumNum / SumDen : 0.);
2026     H_efficiency_trked_phi_algo[2]->SetBinError(i, (SumDen >= MinEntriesEffPur) ? sqrt((SumNum*(SumDen-SumNum))/powf(SumDen,3.)) : 0.);
2027     }
2028    
2029     FitAndFillMaps ("d0pulls", -pullsRange/2., pullsRange/2.);
2030     FitAndFillMaps ("d0", -d0Range/2., d0Range/2.);
2031     FitAndFillMaps ("dzpulls", -pullsRange/2., pullsRange/2.);
2032     FitAndFillMaps ("dz", -dzRange/2., dzRange/2.);
2033     FitAndFillMaps ("ptpulls", -pullsRange/2., pullsRange/2.);
2034     FitAndFillMaps ("pt", -ptRange/2., ptRange/2.);
2035     }
2036     }
2037    
2038    
2039     int main (int argc, char** argv)
2040     {
2041     stringstream DataType;
2042     stringstream FileName;
2043    
2044     if (argc == 3)
2045     {
2046     FileName << argv[1];
2047     TFile* File = TFile::Open(FileName.str().c_str(),"UPDATE");
2048    
2049     DataType << argv[2];
2050    
2051 dinardo 1.2 InitVariables();
2052 dinardo 1.1 if (LoadHistos(DataType.str(), File) == true)
2053     {
2054     MakePlots(DataType.str());
2055     WriteHistos(DataType.str(), File);
2056     File->Close();
2057    
2058     return 1;
2059     }
2060     else
2061     {
2062     cout << "Error while loading histograms from: " << FileName.str().c_str() << endl;
2063     return 0;
2064     }
2065     }
2066     else
2067     {
2068     cout << "@@@ Synopsis @@@" << endl;
2069     cout << "./MyPixelAnalysisRatios filename.root datatype[Tk or Vx]" << endl;
2070     return 0;
2071     }
2072     }