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

File Contents

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