13 double locMinNumCountsForRatio = 50.0;
16 TDirectory *
locDirectory = (TDirectory*)gDirectory->FindObjectAny(
"Hist_DetectorMatching");
22 gDirectory->cd(
"WireBased/SC");
24 gDirectory->cd(
"../../TimeBased/SC");
42 gStyle->SetPadLeftMargin(0.15);
43 gStyle->SetPadRightMargin(0.15);
49 if(TVirtualPad::Pad() == NULL)
50 locCanvas =
new TCanvas(
"Matching_SC",
"Matching_SC", 1200, 800);
52 locCanvas = gPad->GetCanvas();
53 locCanvas->Divide(3, 2);
59 if(locHist_SC_TrackDeltaPhiVsZ_WireBased != NULL)
61 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetYaxis()->SetTitleOffset(1.3);
62 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetXaxis()->SetRangeUser(35.0, 105.0);
63 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetXaxis()->SetTitleSize(0.05);
64 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetYaxis()->SetTitleSize(0.05);
65 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetXaxis()->SetLabelSize(0.05);
66 locHist_SC_TrackDeltaPhiVsZ_WireBased->GetYaxis()->SetLabelSize(0.05);
67 locHist_SC_TrackDeltaPhiVsZ_WireBased->Draw(
"COLZ");
68 TF1* locFunc_High =
new TF1(
"SC_PhiCut_High_WB",
"[0] + [1]*exp([2]*(x - [3]))", 30.0, 110.0);
69 locFunc_High->SetParameters(10.0, 0.5, 0.1, 60.0);
70 locFunc_High->Draw(
"SAME");
71 TF1* locFunc_Low =
new TF1(
"SC_PhiCut_Low_WB",
"-1.0*([0] + [1]*exp([2]*(x - [3])))", 30.0, 110.0);
72 locFunc_Low->SetParameters(10.0, 0.5, 0.1, 60.0);
73 locFunc_Low->Draw(
"SAME");
79 if(locHist_SC_TrackDeltaPhiVsZ_TimeBased != NULL)
81 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetYaxis()->SetTitleOffset(1.3);
82 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetXaxis()->SetRangeUser(35.0, 105.0);
83 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetXaxis()->SetTitleSize(0.05);
84 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetYaxis()->SetTitleSize(0.05);
85 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetXaxis()->SetLabelSize(0.05);
86 locHist_SC_TrackDeltaPhiVsZ_TimeBased->GetYaxis()->SetLabelSize(0.05);
87 locHist_SC_TrackDeltaPhiVsZ_TimeBased->Draw(
"COLZ");
88 TF1* locFunc_High =
new TF1(
"SC_PhiCut_High_TB",
"[0] + [1]*exp([2]*(x - [3]))", 30.0, 110.0);
89 locFunc_High->SetParameters(8.0, 0.5, 0.1, 60.0);
90 locFunc_High->Draw(
"SAME");
91 TF1* locFunc_Low =
new TF1(
"SC_PhiCut_Low_TB",
"-1.0*([0] + [1]*exp([2]*(x - [3])))", 30.0, 110.0);
92 locFunc_Low->SetParameters(8.0, 0.5, 0.1, 60.0);
93 locFunc_Low->Draw(
"SAME");
99 if((locHist_PVsTheta_HasHit_SC != NULL) && (locHist_PVsTheta_NoHit_SC != NULL))
101 locHist_PVsTheta_HasHit_SC->Rebin2D(4, 5);
102 locHist_PVsTheta_NoHit_SC->Rebin2D(4, 5);
106 string locHistName =
string(locFoundHist->GetName()) +
string(
"_Acceptance");
107 string locHistTitle =
string(
"Track / SC Match Rate;") +
string(locFoundHist->GetXaxis()->GetTitle()) +
string(
";") +
string(locFoundHist->GetYaxis()->GetTitle());
109 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());
110 for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
112 for(Int_t loc_j = 1; loc_j <= locFoundHist->GetNbinsY(); ++loc_j)
114 double locNumMissing = locMissingHist->GetBinContent(loc_m, loc_j);
115 double locNumFound = locFoundHist->GetBinContent(loc_m, loc_j);
116 double locTotal = locNumMissing + locNumFound;
117 if(!(locTotal >= locMinNumCountsForRatio))
119 locAcceptanceHist->SetBinContent(loc_m, loc_j, 0.0);
120 locAcceptanceHist->SetBinError(loc_m, loc_j, 1.0/0.0);
124 double locAcceptance = locNumFound/locTotal;
125 if(!(locAcceptance > 0.0))
126 locAcceptance = 0.00001;
127 locAcceptanceHist->SetBinContent(loc_m, loc_j, locAcceptance);
128 double locNumFoundError =
sqrt(locNumFound*(1.0 - locAcceptance));
130 double locAcceptanceError = locNumFoundError/locTotal;
131 locAcceptanceHist->SetBinError(loc_m, loc_j, locAcceptanceError);
134 locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
135 locAcceptanceHist->SetStats(kFALSE);
136 locAcceptanceHist->GetYaxis()->SetTitleOffset(1.3);
137 locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
138 locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
139 locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
140 locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
141 locAcceptanceHist->Draw(
"COLZ");
147 if((locHist_SCPaddleVsZ_HasHit_SC != NULL) && (locHist_SCPaddleVsZ_NoHit_SC != NULL))
149 locHist_SCPaddleVsZ_HasHit_SC->Rebin2D(4, 1);
150 locHist_SCPaddleVsZ_NoHit_SC->Rebin2D(4, 1);
154 string locHistName =
string(locFoundHist->GetName()) +
string(
"_Acceptance");
155 string locHistTitle =
string(
"Track / SC Match Rate;") +
string(locFoundHist->GetXaxis()->GetTitle()) +
string(
";") +
string(locFoundHist->GetYaxis()->GetTitle());
157 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());
158 for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
160 for(Int_t loc_j = 1; loc_j <= locFoundHist->GetNbinsY(); ++loc_j)
162 double locNumMissing = locMissingHist->GetBinContent(loc_m, loc_j);
163 double locNumFound = locFoundHist->GetBinContent(loc_m, loc_j);
164 double locTotal = locNumMissing + locNumFound;
165 if(!(locTotal >= locMinNumCountsForRatio))
167 locAcceptanceHist->SetBinContent(loc_m, loc_j, 0.0);
168 locAcceptanceHist->SetBinError(loc_m, loc_j, 1.0/0.0);
172 double locAcceptance = locNumFound/locTotal;
173 if(!(locAcceptance > 0.0))
174 locAcceptance = 0.00001;
175 locAcceptanceHist->SetBinContent(loc_m, loc_j, locAcceptance);
176 double locNumFoundError =
sqrt(locNumFound*(1.0 - locAcceptance));
178 double locAcceptanceError = locNumFoundError/locTotal;
179 locAcceptanceHist->SetBinError(loc_m, loc_j, locAcceptanceError);
182 locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
183 locAcceptanceHist->SetStats(kFALSE);
184 locAcceptanceHist->GetYaxis()->SetTitleOffset(1.3);
185 locAcceptanceHist->GetXaxis()->SetRangeUser(35.0, 105.0);
186 locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
187 locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
188 locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
189 locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
190 locAcceptanceHist->Draw(
"COLZ");
193 locHist_SCPaddle_BarrelRegion_HasHit = (TH1I*)gDirectory->Get(
"SCPaddle_BarrelRegion_HasHit");
194 locHist_SCPaddle_BarrelRegion_NoHit = (TH1I*)gDirectory->Get(
"SCPaddle_BarrelRegion_NoHit");
195 locHist_SCPaddle_NoseRegion_HasHit = (TH1I*)gDirectory->Get(
"SCPaddle_NoseRegion_HasHit");
196 locHist_SCPaddle_NoseRegion_NoHit = (TH1I*)gDirectory->Get(
"SCPaddle_NoseRegion_NoHit");
200 if((locHist_SCPaddle_BarrelRegion_HasHit != NULL) && (locHist_SCPaddle_BarrelRegion_NoHit != NULL) && (locHist_SCPaddle_NoseRegion_HasHit != NULL) && (locHist_SCPaddle_NoseRegion_NoHit != NULL))
202 int locNumCounters = 30;
203 vector<double> locNoseXAxisVector, locNoseEffVector, locNoseEffUncertaintyVector;
204 vector<double> locBarrelXAxisVector, locBarrelEffVector, locBarrelEffUncertaintyVector;
206 for(
int loc_i = 0; loc_i < locNumCounters; ++loc_i)
209 double locNumFound_Barrel = locHist_SCPaddle_BarrelRegion_HasHit->GetBinContent(loc_i + 1);
210 double locNumMissing_Barrel = locHist_SCPaddle_BarrelRegion_NoHit->GetBinContent(loc_i + 1);
211 double locTotal_Barrel = locNumMissing_Barrel + locNumFound_Barrel;
212 if(locTotal_Barrel >= locMinNumCountsForRatio)
214 double locAcceptance = locNumFound_Barrel/locTotal_Barrel;
215 locBarrelEffVector.push_back(locAcceptance);
216 double locNumFoundError =
sqrt(locNumFound_Barrel*(1.0 - locAcceptance));
218 double locAcceptanceError = locNumFoundError/locTotal_Barrel;
219 locBarrelEffUncertaintyVector.push_back(locAcceptanceError);
221 locBarrelXAxisVector.push_back(loc_i + 1);
225 double locNumFound_Nose = locHist_SCPaddle_NoseRegion_HasHit->GetBinContent(loc_i + 1);
226 double locNumMissing_Nose = locHist_SCPaddle_NoseRegion_NoHit->GetBinContent(loc_i + 1);
227 double locTotal_Nose = locNumMissing_Nose + locNumFound_Nose;
228 if(locTotal_Nose >= locMinNumCountsForRatio)
230 double locAcceptance = locNumFound_Nose/locTotal_Nose;
231 locNoseEffVector.push_back(locAcceptance);
232 double locNumFoundError =
sqrt(locNumFound_Nose*(1.0 - locAcceptance));
234 double locAcceptanceError = locNumFoundError/locTotal_Nose;
235 locNoseEffUncertaintyVector.push_back(locAcceptanceError);
237 locNoseXAxisVector.push_back(loc_i + 1);
241 double* locNoseXAxisArray =
new double[locNoseEffVector.size()];
242 for(
size_t loc_f = 0; loc_f < locNoseEffVector.size(); ++loc_f)
243 locNoseXAxisArray[loc_f] = locNoseXAxisVector[loc_f];
245 double* locNoseXUncertaintyArray =
new double[locNoseEffVector.size()];
246 for(
size_t loc_f = 0; loc_f < locNoseEffVector.size(); ++loc_f)
247 locNoseXUncertaintyArray[loc_f] = 0.0;
249 double* locNoseEffArray =
new double[locNoseEffVector.size()];
250 for(
size_t loc_f = 0; loc_f < locNoseEffVector.size(); ++loc_f)
251 locNoseEffArray[loc_f] = locNoseEffVector[loc_f];
253 double* locNoseEffUncertaintyArray =
new double[locNoseEffVector.size()];
254 for(
size_t loc_f = 0; loc_f < locNoseEffVector.size(); ++loc_f)
255 locNoseEffUncertaintyArray[loc_f] = locNoseEffUncertaintyVector[loc_f];
259 double* locBarrelXAxisArray =
new double[locBarrelEffVector.size()];
260 for(
size_t loc_f = 0; loc_f < locBarrelEffVector.size(); ++loc_f)
261 locBarrelXAxisArray[loc_f] = locBarrelXAxisVector[loc_f];
263 double* locBarrelXUncertaintyArray =
new double[locBarrelEffVector.size()];
264 for(
size_t loc_f = 0; loc_f < locBarrelEffVector.size(); ++loc_f)
265 locBarrelXUncertaintyArray[loc_f] = 0.0;
267 double* locBarrelEffArray =
new double[locBarrelEffVector.size()];
268 for(
size_t loc_f = 0; loc_f < locBarrelEffVector.size(); ++loc_f)
269 locBarrelEffArray[loc_f] = locBarrelEffVector[loc_f];
271 double* locBarrelEffUncertaintyArray =
new double[locBarrelEffVector.size()];
272 for(
size_t loc_f = 0; loc_f < locBarrelEffVector.size(); ++loc_f)
273 locBarrelEffUncertaintyArray[loc_f] = locBarrelEffUncertaintyVector[loc_f];
275 TGraphErrors* locNoseGraph =
new TGraphErrors(locNoseEffVector.size(), locNoseXAxisArray, locNoseEffArray, locNoseXUncertaintyArray, locNoseEffUncertaintyArray);
276 locNoseGraph->SetLineColor(kBlack);
277 locNoseGraph->SetMarkerColor(kBlack);
278 locNoseGraph->SetMarkerStyle(20);
279 locNoseGraph->SetMarkerSize(1);
281 TGraphErrors* locBarrelGraph =
new TGraphErrors(locBarrelEffVector.size(), locBarrelXAxisArray, locBarrelEffArray, locBarrelXUncertaintyArray, locBarrelEffUncertaintyArray);
282 locBarrelGraph->SetLineColor(kBlue);
283 locBarrelGraph->SetMarkerColor(kBlue);
284 locBarrelGraph->SetMarkerStyle(22);
285 locBarrelGraph->SetMarkerSize(1);
287 string locGraphName =
"SC_EffGraphs";
288 string locGraphTitle =
string(
"Track / SC Match Rate;") +
string(locHist_SCPaddle_BarrelRegion_HasHit->GetXaxis()->GetTitle());
289 TMultiGraph* locMultiGraph =
new TMultiGraph(locGraphName.c_str(), locGraphTitle.c_str());
290 locMultiGraph->Add(locNoseGraph);
291 locMultiGraph->Add(locBarrelGraph);
292 locMultiGraph->Draw(
"ap");
295 TLegend *locLegend =
new TLegend(0.75, 0.17, 0.99, 0.32);
296 locLegend->SetHeader(
"Legend");
297 locLegend->AddEntry(locBarrelGraph,
"Barrel",
"EP");
298 locLegend->AddEntry(locNoseGraph,
"Nose/Bend",
"EP");
305 if((locHist_SCPaddleVsZ_HasHit_SC != NULL) && (locHist_SCPaddleVsZ_NoHit_SC != NULL))
307 string locHistName =
string(locHist_SCPaddleVsZ_HasHit_SC->GetName()) +
string(
"_ProjX");
308 TH1* locFoundHist = locHist_SCPaddleVsZ_HasHit_SC->ProjectionX(locHistName.c_str());
310 locHistName =
string(locHist_SCPaddleVsZ_NoHit_SC->GetName()) +
string(
"_ProjX");
311 TH1* locMissingHist = locHist_SCPaddleVsZ_NoHit_SC->ProjectionX(locHistName.c_str());
313 locHistName =
string(locFoundHist->GetName()) +
string(
"_Acceptance");
314 string locHistTitle =
string(
"Track / SC Match Rate;") +
string(locFoundHist->GetXaxis()->GetTitle());
316 TH1D* locAcceptanceHist =
new TH1D(locHistName.c_str(), locHistTitle.c_str(), locFoundHist->GetNbinsX(), locFoundHist->GetXaxis()->GetXmin(), locFoundHist->GetXaxis()->GetXmax());
317 for(Int_t loc_m = 1; loc_m <= locFoundHist->GetNbinsX(); ++loc_m)
319 double locNumMissing = locMissingHist->GetBinContent(loc_m);
320 double locNumFound = locFoundHist->GetBinContent(loc_m);
321 double locTotal = locNumMissing + locNumFound;
322 if(!(locTotal >= locMinNumCountsForRatio))
324 locAcceptanceHist->SetBinContent(loc_m, 0.0);
325 locAcceptanceHist->SetBinError(loc_m, 0.0);
329 double locAcceptance = locNumFound/locTotal;
330 locAcceptanceHist->SetBinContent(loc_m, locAcceptance);
331 double locNumFoundError =
sqrt(locNumFound*(1.0 - locAcceptance));
333 double locAcceptanceError = locNumFoundError/locTotal;
334 locAcceptanceHist->SetBinError(loc_m, locAcceptanceError);
336 locAcceptanceHist->SetEntries(locMissingHist->GetEntries() + locFoundHist->GetEntries());
337 locAcceptanceHist->SetStats(kFALSE);
339 locAcceptanceHist->GetXaxis()->SetRangeUser(35.0, 105.0);
340 locAcceptanceHist->GetXaxis()->SetTitleSize(0.05);
341 locAcceptanceHist->GetYaxis()->SetTitleSize(0.05);
342 locAcceptanceHist->GetXaxis()->SetLabelSize(0.05);
343 locAcceptanceHist->GetYaxis()->SetLabelSize(0.05);
344 locAcceptanceHist->Draw(
"E1");
348 gStyle->SetPadLeftMargin(locLeftPadMargin);
349 gStyle->SetPadRightMargin(locRightPadMargin);
350 gStyle->SetPadTopMargin(locTopPadMargin);
351 gStyle->SetPadBottomMargin(locBottomPadMargin);
TH1I * locHist_SCPaddle_BarrelRegion_NoHit
TH2I * locHist_PVsTheta_NoHit_SC
double locBottomPadMargin
TH2I * locHist_SC_TrackDeltaPhiVsZ_TimeBased
TDirectory * locDirectory
TH2I * locHist_SCPaddleVsZ_NoHit_SC
TH2I * locHist_PVsTheta_HasHit_SC
TH2I * locHist_SCPaddleVsZ_HasHit_SC
TH1I * locHist_SCPaddle_NoseRegion_NoHit
TH2I * locHist_SC_TrackDeltaPhiVsZ_WireBased
TH1I * locHist_SCPaddle_BarrelRegion_HasHit
TH1I * locHist_SCPaddle_NoseRegion_HasHit