Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HistMacro_Matching_BCAL.C
Go to the documentation of this file.
1 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/BCALDeltaPhiVsP
2 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/BCALDeltaZVsZ
3 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/PVsTheta_HasHit
4 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/PVsTheta_NoHit
5 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/TrackBCALModuleVsZ_HasHit
6 // hnamepath: /Independent/Hist_DetectorMatching/TimeBased/BCAL/TrackBCALModuleVsZ_NoHit
7 
8 {
9  double locMinNumCountsForRatio = 50.0;
10 
11  //Goto Path
12  TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("Hist_DetectorMatching");
13  if(!locDirectory)
14  return;
15  locDirectory->cd();
16 
17  //Get Histograms
18  gDirectory->cd("TimeBased/BCAL");
19  TH2I* locHist_BCAL_DeltaPhiVsP = (TH2I*)gDirectory->Get("BCALDeltaPhiVsP");
20  TH2I* locHist_BCAL_DeltaZVsZ = (TH2I*)gDirectory->Get("BCALDeltaZVsZ");
21  TH2I* locHist_PVsTheta_HasHit_BCAL = (TH2I*)gDirectory->Get("PVsTheta_HasHit");
22  TH2I* locHist_PVsTheta_NoHit_BCAL = (TH2I*)gDirectory->Get("PVsTheta_NoHit");
23  TH2I* locHist_TrackBCALModuleVsZ_HasHit_BCAL = (TH2I*)gDirectory->Get("TrackBCALModuleVsZ_HasHit");
24  TH2I* locHist_TrackBCALModuleVsZ_NoHit_BCAL = (TH2I*)gDirectory->Get("TrackBCALModuleVsZ_NoHit");
25 
26  //Get original pad margins
27  double locLeftPadMargin = gStyle->GetPadLeftMargin();
28  double locRightPadMargin = gStyle->GetPadRightMargin();
29  double locTopPadMargin = gStyle->GetPadTopMargin();
30  double locBottomPadMargin = gStyle->GetPadBottomMargin();
31 
32  //Set new pad margins
33  gStyle->SetPadLeftMargin(0.15);
34  gStyle->SetPadRightMargin(0.12);
35 // gStyle->SetPadTopMargin(locTopPadMargin);
36 // gStyle->SetPadBottomMargin(locBottomPadMargin);
37 
38  //Get/Make Canvas
39  TCanvas *locCanvas = NULL;
40  if(TVirtualPad::Pad() == NULL)
41  locCanvas = new TCanvas("Matching_BCAL", "Matching_BCAL", 1200, 800);
42  else
43  locCanvas = gPad->GetCanvas();
44  locCanvas->Divide(3, 2);
45 
46  //Draw
47  locCanvas->cd(1);
48  gPad->SetTicks();
49  gPad->SetGrid();
50  if(locHist_BCAL_DeltaPhiVsP != NULL)
51  {
52  locHist_BCAL_DeltaPhiVsP->Rebin2D(2, 2);
53  locHist_BCAL_DeltaPhiVsP->GetYaxis()->SetTitleOffset(1.3);
54  locHist_BCAL_DeltaPhiVsP->GetXaxis()->SetTitleSize(0.05);
55  locHist_BCAL_DeltaPhiVsP->GetYaxis()->SetTitleSize(0.05);
56  locHist_BCAL_DeltaPhiVsP->GetXaxis()->SetLabelSize(0.05);
57  locHist_BCAL_DeltaPhiVsP->GetYaxis()->SetLabelSize(0.05);
58  locHist_BCAL_DeltaPhiVsP->Draw("COLZ");
59  TF1* locFunc_High = new TF1("BCAL_PhiCut_High", "[0] + [1]*exp(-1.0*[2]*x)", 0.0, 4.0);
60  locFunc_High->SetParameters(3.0, 12.0, 0.8);
61  locFunc_High->Draw("SAME");
62  TF1* locFunc_Low = new TF1("BCAL_PhiCut_Low", "-1.0*([0] + [1]*exp(-1.0*[2]*x))", 0.0, 4.0);
63  locFunc_Low->SetParameters(3.0, 12.0, 0.8);
64  locFunc_Low->Draw("SAME");
65  gPad->SetLogz();
66  }
67 
68  locCanvas->cd(2);
69  gPad->SetTicks();
70  gPad->SetGrid();
71  if(locHist_BCAL_DeltaZVsZ != NULL)
72  {
73  locHist_BCAL_DeltaZVsZ->Rebin2D(2, 2);
74  locHist_BCAL_DeltaZVsZ->GetYaxis()->SetTitleOffset(1.3);
75  locHist_BCAL_DeltaZVsZ->GetXaxis()->SetTitleSize(0.05);
76  locHist_BCAL_DeltaZVsZ->GetYaxis()->SetTitleSize(0.05);
77  locHist_BCAL_DeltaZVsZ->GetXaxis()->SetLabelSize(0.05);
78  locHist_BCAL_DeltaZVsZ->GetYaxis()->SetLabelSize(0.05);
79  locHist_BCAL_DeltaZVsZ->Draw("COLZ");
80  TF1* locFunc_High = new TF1("BCAL_ZCut_High", "30.0", 0.0, 450.0);
81  locFunc_High->Draw("SAME");
82  TF1* locFunc_Low = new TF1("BCAL_ZCut_Low", "-30.0", 0.0, 450.0);
83  locFunc_Low->Draw("SAME");
84  gPad->SetLogz();
85  }
86 
87  locCanvas->cd(3);
88  gPad->SetTicks();
89  gPad->SetGrid();
90  if((locHist_PVsTheta_HasHit_BCAL != NULL) && (locHist_PVsTheta_NoHit_BCAL != NULL))
91  {
92  locHist_PVsTheta_HasHit_BCAL->Rebin2D(4, 10); //280x400 -> 70x40
93  locHist_PVsTheta_NoHit_BCAL->Rebin2D(4, 10); //280x400 -> 70x40
94 
95  TH2I* locFoundHist = locHist_PVsTheta_HasHit_BCAL;
96  TH2I* locMissingHist = locHist_PVsTheta_NoHit_BCAL;
97  string locHistName = string(locFoundHist->GetName()) + string("_Acceptance");
98  string locHistTitle = string("Track / BCAL Match Rate;") + string(locFoundHist->GetXaxis()->GetTitle()) + string(";") + string(locFoundHist->GetYaxis()->GetTitle());
99  TH2D* locAcceptanceHist = new TH2D(locHistName.c_str(), locHistTitle.c_str(), locFoundHist->GetNbinsX(), locFoundHist->GetXaxis()->GetXmin(), locFoundHist->GetXaxis()->GetXmax(), locFoundHist->GetNbinsY(), locFoundHist->GetYaxis()->GetXmin(), locFoundHist->GetYaxis()->GetXmax());
100  for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
101  {
102  for(Int_t loc_j = 1; loc_j <= locFoundHist->GetNbinsY(); ++loc_j)
103  {
104  double locNumMissing = locMissingHist->GetBinContent(loc_m, loc_j);
105  double locNumFound = locFoundHist->GetBinContent(loc_m, loc_j);
106  double locTotal = locNumMissing + locNumFound;
107  if(!(locTotal >= locMinNumCountsForRatio))
108  {
109  locAcceptanceHist->SetBinContent(loc_m, loc_j, 0.0);
110  locAcceptanceHist->SetBinError(loc_m, loc_j, 1.0/0.0);
111  continue;
112  }
113 
114  double locAcceptance = locNumFound/locTotal;
115  if(!(locAcceptance > 0.0))
116  locAcceptance = 0.00001; //so that it shows up on the histogram
117  locAcceptanceHist->SetBinContent(loc_m, loc_j, locAcceptance);
118  double locNumFoundError = sqrt(locNumFound*(1.0 - locAcceptance));
119 
120  double locAcceptanceError = locNumFoundError/locTotal;
121  locAcceptanceHist->SetBinError(loc_m, loc_j, locAcceptanceError);
122  }
123  }
124  locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
125  locAcceptanceHist->SetStats(kFALSE);
126  locAcceptanceHist->GetYaxis()->SetTitleOffset(1.3);
127  locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
128  locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
129  locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
130  locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
131  locAcceptanceHist->Draw("COLZ");
132  }
133 
134  locCanvas->cd(4);
135  gPad->SetTicks();
136  gPad->SetGrid();
137  if((locHist_TrackBCALModuleVsZ_HasHit_BCAL != NULL) && (locHist_TrackBCALModuleVsZ_NoHit_BCAL != NULL))
138  {
139  locHist_TrackBCALModuleVsZ_HasHit_BCAL->Rebin2D(5, 1); //450x48 -> 90x48
140  locHist_TrackBCALModuleVsZ_NoHit_BCAL->Rebin2D(5, 1); //450x48 -> 90x48
141 
142  TH2I* locFoundHist = locHist_TrackBCALModuleVsZ_HasHit_BCAL;
143  TH2I* locMissingHist = locHist_TrackBCALModuleVsZ_NoHit_BCAL;
144  string locHistName = string(locFoundHist->GetName()) + string("_Acceptance");
145  string locHistTitle = string("Track / BCAL Match Rate;") + string(locFoundHist->GetXaxis()->GetTitle()) + string(";") + string(locFoundHist->GetYaxis()->GetTitle());
146  TH2D* locAcceptanceHist = new TH2D(locHistName.c_str(), locHistTitle.c_str(), locFoundHist->GetNbinsX(), locFoundHist->GetXaxis()->GetXmin(), locFoundHist->GetXaxis()->GetXmax(), locFoundHist->GetNbinsY(), locFoundHist->GetYaxis()->GetXmin(), locFoundHist->GetYaxis()->GetXmax());
147  for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
148  {
149  for(Int_t loc_j = 1; loc_j <= locFoundHist->GetNbinsY(); ++loc_j)
150  {
151  double locNumMissing = locMissingHist->GetBinContent(loc_m, loc_j);
152  double locNumFound = locFoundHist->GetBinContent(loc_m, loc_j);
153  double locTotal = locNumMissing + locNumFound;
154  if(!(locTotal >= locMinNumCountsForRatio))
155  {
156  locAcceptanceHist->SetBinContent(loc_m, loc_j, 0.0);
157  locAcceptanceHist->SetBinError(loc_m, loc_j, 1.0/0.0);
158  continue;
159  }
160 
161  double locAcceptance = locNumFound/locTotal;
162  if(!(locAcceptance > 0.0))
163  locAcceptance = 0.00001; //so that it shows up on the histogram
164  locAcceptanceHist->SetBinContent(loc_m, loc_j, locAcceptance);
165  double locNumFoundError = sqrt(locNumFound*(1.0 - locAcceptance));
166 
167  double locAcceptanceError = locNumFoundError/locTotal;
168  locAcceptanceHist->SetBinError(loc_m, loc_j, locAcceptanceError);
169  }
170  }
171  locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
172  locAcceptanceHist->SetStats(kFALSE);
173  locAcceptanceHist->GetYaxis()->SetTitleOffset(1.3);
174  locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
175  locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
176  locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
177  locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
178  locAcceptanceHist->Draw("COLZ");
179  }
180 
181  locCanvas->cd(5);
182  gPad->SetTicks();
183  gPad->SetGrid();
184  if((locHist_TrackBCALModuleVsZ_HasHit_BCAL != NULL) && (locHist_TrackBCALModuleVsZ_NoHit_BCAL != NULL))
185  {
186  TH1D* locHist_TrackBCALModule_HasHit = locHist_TrackBCALModuleVsZ_HasHit_BCAL->ProjectionY("BCALModule_HasHit");
187  TH1D* locHist_TrackBCALModule_NoHit = locHist_TrackBCALModuleVsZ_NoHit_BCAL->ProjectionY("BCALModule_NoHit");
188 
189  TH1D* loc1DFoundHist = locHist_TrackBCALModule_HasHit;
190  TH1D* loc1DMissingHist = locHist_TrackBCALModule_NoHit;
191  string locHistName = string(loc1DFoundHist->GetName()) + string("_Acceptance");
192  string locHistTitle = string("Track / BCAL Match Rate;") + string(loc1DFoundHist->GetXaxis()->GetTitle()) + string(";") + string(loc1DFoundHist->GetYaxis()->GetTitle());
193 
194  TH1D* loc1DAcceptanceHist = new TH1D(locHistName.c_str(), locHistTitle.c_str(), loc1DFoundHist->GetNbinsX(), loc1DFoundHist->GetXaxis()->GetXmin(), loc1DFoundHist->GetXaxis()->GetXmax());
195  for(Int_t loc_m = 1; loc_m <= loc1DFoundHist->GetNbinsX(); ++loc_m)
196  {
197  double locNumMissing = loc1DMissingHist->GetBinContent(loc_m);
198  double locNumFound = loc1DFoundHist->GetBinContent(loc_m);
199  double locTotal = locNumMissing + locNumFound;
200  if(!(locTotal >= locMinNumCountsForRatio))
201  {
202  loc1DAcceptanceHist->SetBinContent(loc_m, 0.0);
203  loc1DAcceptanceHist->SetBinError(loc_m, 1.0/0.0);
204  continue;
205  }
206 
207  double locAcceptance = locNumFound/locTotal;
208  if(!(locAcceptance > 0.0))
209  locAcceptance = 0.00001; //so that it shows up on the histogram
210  loc1DAcceptanceHist->SetBinContent(loc_m, locAcceptance);
211  double locNumFoundError = sqrt(locNumFound*(1.0 - locAcceptance));
212 
213  double locAcceptanceError = locNumFoundError/locTotal;
214  loc1DAcceptanceHist->SetBinError(loc_m, locAcceptanceError);
215  }
216  loc1DAcceptanceHist->SetEntries(loc1DMissingHist->GetEntries() + loc1DFoundHist->GetEntries());
217  loc1DAcceptanceHist->SetStats(kFALSE);
218 
219  loc1DAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
220  loc1DAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
221  loc1DAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
222  loc1DAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
223  loc1DAcceptanceHist->Draw("E1");
224  }
225 
226  locCanvas->cd(6);
227  gPad->SetTicks();
228  gPad->SetGrid();
229  if((locHist_TrackBCALModuleVsZ_HasHit_BCAL != NULL) && (locHist_TrackBCALModuleVsZ_NoHit_BCAL != NULL))
230  {
231  string locHistName = string(locHist_TrackBCALModuleVsZ_HasHit_BCAL->GetName()) + string("_ProjX");
232  TH1* locFoundHist = locHist_TrackBCALModuleVsZ_HasHit_BCAL->ProjectionX(locHistName.c_str());
233 
234  locHistName = string(locHist_TrackBCALModuleVsZ_NoHit_BCAL->GetName()) + string("_ProjX");
235  TH1* locMissingHist = locHist_TrackBCALModuleVsZ_NoHit_BCAL->ProjectionX(locHistName.c_str());
236 
237  locHistName = string(locFoundHist->GetName()) + string("_Acceptance");
238  string locHistTitle = string("Track / BCAL Match Rate;") + string(locFoundHist->GetXaxis()->GetTitle());
239  TH1D* locAcceptanceHist = new TH1D(locHistName.c_str(), locHistTitle.c_str(), locFoundHist->GetNbinsX(), locFoundHist->GetXaxis()->GetXmin(), locFoundHist->GetXaxis()->GetXmax());
240  for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
241  {
242  double locNumMissing = locMissingHist->GetBinContent(loc_m);
243  double locNumFound = locFoundHist->GetBinContent(loc_m);
244  double locTotal = locNumMissing + locNumFound;
245  if(!(locTotal >= locMinNumCountsForRatio))
246  {
247  locAcceptanceHist->SetBinContent(loc_m, 0.0);
248  locAcceptanceHist->SetBinError(loc_m, 0.0);
249  continue;
250  }
251 
252  double locAcceptance = locNumFound/locTotal;
253  locAcceptanceHist->SetBinContent(loc_m, locAcceptance);
254  double locNumFoundError = sqrt(locNumFound*(1.0 - locAcceptance));
255 
256  double locAcceptanceError = locNumFoundError/locTotal;
257  locAcceptanceHist->SetBinError(loc_m, locAcceptanceError);
258  }
259  locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
260  locAcceptanceHist->SetStats(kFALSE);
261  locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
262  locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
263  locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
264  locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
265  locAcceptanceHist->Draw("E1");
266  }
267 
268  //Reset original pad margins
269  gStyle->SetPadLeftMargin(locLeftPadMargin);
270  gStyle->SetPadRightMargin(locRightPadMargin);
271  gStyle->SetPadTopMargin(locTopPadMargin);
272  gStyle->SetPadBottomMargin(locBottomPadMargin);
273 }
274 
TH2I * locHist_PVsTheta_NoHit_BCAL
TH2I * locHist_TrackBCALModuleVsZ_NoHit_BCAL
char string[256]
TH2I * locHist_PVsTheta_HasHit_BCAL
TH2I * locHist_BCAL_DeltaPhiVsP
double locLeftPadMargin
double locTopPadMargin
double locBottomPadMargin
double locRightPadMargin
TDirectory * locDirectory
TH2I * locHist_BCAL_DeltaZVsZ
double sqrt(double)
TCanvas * locCanvas
TH2I * locHist_TrackBCALModuleVsZ_HasHit_BCAL