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