File indexing completed on 2023-03-17 11:10:57
0001 #include "L1Trigger/CSCTrackFinder/test/src/EffHistogramList.h"
0002 #include "L1Trigger/CSCTrackFinder/test/src/TrackHistogramList.h"
0003 #include <TMath.h>
0004 #include <iostream>
0005
0006 namespace csctf_analysis
0007 {
0008
0009 EffHistogramList::EffHistogramList(const std::string dirname, const edm::ParameterSet* parameters)
0010 {
0011 TFileDirectory dir = fs->mkdir(dirname);
0012 TFileDirectory ptSubdir = dir.mkdir("Pt_Efficiencies");
0013 TFileDirectory ptSubdirOverall = ptSubdir.mkdir("Overall");
0014 TFileDirectory ptSubdirCSCOnly = ptSubdir.mkdir("CSCOnly");
0015 TFileDirectory ptSubdirCSCRestricted = ptSubdir.mkdir("CSCRestricted");
0016 TFileDirectory ptSubdirDTOnly = ptSubdir.mkdir("DTOnly");
0017 TFileDirectory ptSubdirOverlap = ptSubdir.mkdir("Overlap");
0018 TFileDirectory ptSubdirHighEta = ptSubdir.mkdir("HighEta");
0019
0020 TFileDirectory etaSubdir = dir.mkdir("Eta_Efficiency");
0021 TFileDirectory phiSubdir = dir.mkdir("Phi_Efficiency");
0022
0023 double maxpt=parameters->getUntrackedParameter<double>("MaxPtHist");
0024 double minpt=parameters->getUntrackedParameter<double>("MinPtHist");
0025 int ptbins=parameters->getUntrackedParameter<double>("BinsPtHist");
0026 PtEffStatsFilename=parameters->getUntrackedParameter<std::string>("PtEffStatsFilename");
0027
0028 std::string histoDescription = parameters->getUntrackedParameter<std::string>("HistoDescription");
0029 latexDescription = new TLatex(0.121,0.883,histoDescription.c_str());
0030
0031 latexDescription->SetTextAlign(13);
0032 latexDescription->SetNDC();
0033
0034 EffPhi = phiSubdir.make<TH1F>("EffPhi","Efficiency v #phi",144,0,6.283);
0035 EffPhi_mod_10_Q2_endcap1 = phiSubdir.make<TH1F>("EffPhi_mod_10_Q2_endcap1","Efficiency v #phi mod 10,Q>=2, Endcap 1",140,-2,12);
0036 EffPhi_mod_10_Q3_endcap1 = phiSubdir.make<TH1F>("EffPhi_mod_10_Q3_endcap1","Efficiency v #phi mod 10,Q>=3, Endcap 1",140,-2,12);
0037 EffPhi_mod_10_Q2_endcap2 = phiSubdir.make<TH1F>("EffPhi_mod_10_Q2_endcap2","Efficiency v #phi mod 10,Q>=2, Endcap 2",140,-2,12);
0038 EffPhi_mod_10_Q3_endcap2 = phiSubdir.make<TH1F>("EffPhi_mod_10_Q3_endcap2","Efficiency v #phi mod 10,Q>=3, Endcap 2",140,-2,12);
0039
0040 EffPtDTOnly = ptSubdirDTOnly.make<TH1F>("EffPtDTOnly","Efficiency v Pt; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0041 EffPtCSCOnly = ptSubdirCSCOnly.make<TH1F>("EffPtCSCOnly","Efficiency v Pt; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0042 EffPtCSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffPtCSCRestricted","Efficiency v Pt; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0043 EffPtOverall = ptSubdirOverall.make<TH1F>("EffPtOverall","Efficiency v Overall Pt",ptbins, minpt, maxpt);
0044 EffPtOverlap = ptSubdirOverlap.make<TH1F>("EffPtOverlap","Efficiency v Pt; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0045 EffPtHighEta = ptSubdirHighEta.make<TH1F>("EffPtHighEta","Efficiency v Pt; 2.1<= #eta",ptbins, minpt, maxpt);
0046 EffTFPt10Overall = ptSubdirOverall.make<TH1F>("EffTFPt10Overall","Efficiency v Overall Pt Tf > 10",ptbins, minpt, maxpt);
0047 EffTFPt12Overall = ptSubdirOverall.make<TH1F>("EffTFPt12Overall","Efficiency v Overall Pt Tf > 12",ptbins, minpt, maxpt);
0048 EffTFPt16Overall = ptSubdirOverall.make<TH1F>("EffTFPt16Overall","Efficiency v Overall Pt Tf > 16",ptbins, minpt, maxpt);
0049 EffTFPt20Overall = ptSubdirOverall.make<TH1F>("EffTFPt20Overall","Efficiency v Overall Pt Tf > 20",ptbins, minpt, maxpt);
0050 EffTFPt40Overall = ptSubdirOverall.make<TH1F>("EffTFPt40Overall","Efficiency v Overall Pt Tf > 40",ptbins, minpt, maxpt);
0051 EffTFPt60Overall = ptSubdirOverall.make<TH1F>("EffTFPt60Overall","Efficiency v Overall Pt Tf > 60",ptbins, minpt, maxpt);
0052 EffTFPt10CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt10CSCOnly","Efficiency v Pt Tf > 10; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0053 EffTFPt12CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt12CSCOnly","Efficiency v Pt Tf > 12; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0054 EffTFPt16CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt16CSCOnly","Efficiency v Pt Tf > 16; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0055 EffTFPt20CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt20CSCOnly","Efficiency v Pt Tf > 20; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0056 EffTFPt40CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt40CSCOnly","Efficiency v Pt Tf > 40; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0057 EffTFPt60CSCOnly = ptSubdirCSCOnly.make<TH1F>("EffTFPt60CSCOnly","Efficiency v Pt Tf > 60; 1.2<= #eta <=2.4",ptbins, minpt, maxpt);
0058 EffTFPt10CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt10CSCRestricted","Efficiency v Pt Tf > 10; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0059 EffTFPt12CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt12CSCRestricted","Efficiency v Pt Tf > 12; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0060 EffTFPt16CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt16CSCRestricted","Efficiency v Pt Tf > 16; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0061 EffTFPt20CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt20CSCRestricted","Efficiency v Pt Tf > 20; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0062 EffTFPt40CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt40CSCRestricted","Efficiency v Pt Tf > 40; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0063 EffTFPt60CSCRestricted = ptSubdirCSCRestricted.make<TH1F>("EffTFPt60CSCRestricted","Efficiency v Pt Tf > 60; 1.2<= #eta <=2.1",ptbins, minpt, maxpt);
0064 EffTFPt10DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt10DTOnly","Efficiency v Pt Tf > 10; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0065 EffTFPt12DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt12DTOnly","Efficiency v Pt Tf > 12; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0066 EffTFPt16DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt16DTOnly","Efficiency v Pt Tf > 16; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0067 EffTFPt20DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt20DTOnly","Efficiency v Pt Tf > 20; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0068 EffTFPt40DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt40DTOnly","Efficiency v Pt Tf > 40; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0069 EffTFPt60DTOnly = ptSubdirDTOnly.make<TH1F>("EffTFPt60DTOnly","Efficiency v Pt Tf > 60; 0<= #eta <=0.9",ptbins, minpt, maxpt);
0070 EffTFPt10Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt10Overlap","Efficiency v Pt Tf > 10; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0071 EffTFPt12Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt12Overlap","Efficiency v Pt Tf > 12; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0072 EffTFPt16Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt16Overlap","Efficiency v Pt Tf > 16; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0073 EffTFPt20Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt20Overlap","Efficiency v Pt Tf > 20; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0074 EffTFPt40Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt40Overlap","Efficiency v Pt Tf > 40; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0075 EffTFPt60Overlap = ptSubdirOverlap.make<TH1F>("EffTFPt60Overlap","Efficiency v Pt Tf > 60; 0.9<= #eta <=1.2",ptbins, minpt, maxpt);
0076
0077
0078 EffTFPt10HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt10HighEta","Efficiency v Pt Tf > 10; 2.1<= #eta",ptbins, minpt, maxpt);
0079 EffTFPt12HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt12HighEta","Efficiency v Pt Tf > 12; 2.1<= #eta",ptbins, minpt, maxpt);
0080 EffTFPt16HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt16HighEta","Efficiency v Pt Tf > 16; 2.1<= #eta",ptbins, minpt, maxpt);
0081 EffTFPt20HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt20HighEta","Efficiency v Pt Tf > 20; 2.1<= #eta",ptbins, minpt, maxpt);
0082 EffTFPt40HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt40HighEta","Efficiency v Pt Tf > 40; 2.1<= #eta",ptbins, minpt, maxpt);
0083 EffTFPt60HighEta = ptSubdirHighEta.make<TH1F>("EffTFPt60HighEta","Efficiency v Pt Tf > 60; 2.1<= #eta",ptbins, minpt, maxpt);
0084
0085
0086 EffEtaAll = etaSubdir.make<TH1F>("EffEtaAll","Efficiency v eta for all Tracks", 50, 0, 2.5);
0087 EffEtaQ3 = etaSubdir.make<TH1F>("EffEtaQ3","Efficiency v #eta for Quality >= 3 Tracks", 50, 0, 2.5);
0088 EffEtaQ2 = etaSubdir.make<TH1F>("EffEtaQ2","Efficiency v #eta for Quality >= 2 Tracks", 50, 0, 2.5);
0089 EffEtaQ1 = etaSubdir.make<TH1F>("EffEtaQ1","Efficiency v #eta for Quality >= 1 Tracks", 50, 0, 2.5);
0090 EffSignedEtaAll = etaSubdir.make<TH1F>("EffSignedEtaAll","Efficiency v eta for all Tracks", 100, -2.5, 2.5);
0091 EffSignedEtaQ3 = etaSubdir.make<TH1F>("EffSignedEtaQ3","Efficiency v #eta for Quality >= 3 Tracks", 100, -2.5, 2.5);
0092 EffSignedEtaQ2 = etaSubdir.make<TH1F>("EffSignedEtaQ2","Efficiency v #eta for Quality >= 2 Tracks", 100, -2.5, 2.5);
0093 EffSignedEtaQ1 = etaSubdir.make<TH1F>("EffSignedEtaQ1","Efficiency v #eta for Quality >= 1 Tracks", 100, -2.5, 2.5);
0094 EffPhiQ3 = phiSubdir.make<TH1F>("EffPhiQ3","Efficiency v #phi for Quality >= 3 Tracks",144,0,6.283);
0095 EffPhiQ2 = phiSubdir.make<TH1F>("EffPhiQ2","Efficiency v #phi for Quality >= 2 Tracks",144,0,6.283);
0096 EffPhiQ1 = phiSubdir.make<TH1F>("EffPhiQ1","Efficiency v #phi for Quality >= 1 Tracks",144,0,6.283);
0097 }
0098
0099
0100 void EffHistogramList::ComputeEff(TrackHistogramList* refHists)
0101 {
0102
0103 divideHistograms(refHists);
0104
0105
0106
0107
0108
0109
0110 std::vector<TH1F*> Overallhists;
0111 Overallhists.push_back(EffPtOverall);
0112 Overallhists.push_back(EffTFPt12Overall);
0113 Overallhists.push_back(EffTFPt20Overall);
0114 Overallhists.push_back(EffTFPt40Overall);
0115 Overallhists.push_back(EffTFPt60Overall);
0116
0117 std::vector<TH1F*> CSCOnlyhists;
0118 CSCOnlyhists.push_back(EffPtCSCOnly);
0119 CSCOnlyhists.push_back(EffTFPt12CSCOnly);
0120 CSCOnlyhists.push_back(EffTFPt20CSCOnly);
0121 CSCOnlyhists.push_back(EffTFPt40CSCOnly);
0122 CSCOnlyhists.push_back(EffTFPt60CSCOnly);
0123
0124 std::vector<TH1F*> CSCRestrictedhists;
0125 CSCRestrictedhists.push_back(EffPtCSCRestricted);
0126 CSCRestrictedhists.push_back(EffTFPt12CSCRestricted);
0127 CSCRestrictedhists.push_back(EffTFPt20CSCRestricted);
0128 CSCRestrictedhists.push_back(EffTFPt40CSCRestricted);
0129 CSCRestrictedhists.push_back(EffTFPt60CSCRestricted);
0130
0131 std::vector<TH1F*> DTOnlyhists;
0132 DTOnlyhists.push_back(EffPtDTOnly);
0133 DTOnlyhists.push_back(EffTFPt12DTOnly);
0134 DTOnlyhists.push_back(EffTFPt20DTOnly);
0135 DTOnlyhists.push_back(EffTFPt40DTOnly);
0136 DTOnlyhists.push_back(EffTFPt60DTOnly);
0137
0138 std::vector<TH1F*> Overlaphists;
0139 Overlaphists.push_back(EffPtOverlap);
0140 Overlaphists.push_back(EffTFPt12Overlap);
0141 Overlaphists.push_back(EffTFPt20Overlap);
0142 Overlaphists.push_back(EffTFPt40Overlap);
0143 Overlaphists.push_back(EffTFPt60Overlap);
0144
0145 std::vector<TH1F*> HighEtahists;
0146 HighEtahists.push_back(EffPtHighEta);
0147 HighEtahists.push_back(EffTFPt12HighEta);
0148 HighEtahists.push_back(EffTFPt20HighEta);
0149 HighEtahists.push_back(EffTFPt40HighEta);
0150 HighEtahists.push_back(EffTFPt60HighEta);
0151
0152
0153
0154 std::vector<std::string> thresholds;
0155 thresholds.push_back("");
0156 thresholds.push_back("12");
0157 thresholds.push_back("20");
0158 thresholds.push_back("40");
0159 thresholds.push_back("60");
0160
0161
0162
0163
0164
0165 std::vector<double> PlateauDefinitions;
0166 PlateauDefinitions.push_back(80);
0167 PlateauDefinitions.push_back(24);
0168 PlateauDefinitions.push_back(30);
0169 PlateauDefinitions.push_back(60);
0170 PlateauDefinitions.push_back(80);
0171
0172
0173 std::ofstream* PtStats=new std::ofstream(PtEffStatsFilename.c_str());
0174 (*PtStats)<<"Pt Plateau Efficiencies for Overall region (|eta|<=2.4)";
0175 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,Overallhists);
0176 (*PtStats)<<"\n\nPt Plateau Efficiencies for CSC Only region (1.2<=|eta|<=2.4)";
0177 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,CSCOnlyhists);
0178 (*PtStats)<<"\n\nPt Plateau Efficiencies for CSC Restricted region (1.2<=|eta|<=2.1)";
0179 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,CSCRestrictedhists);
0180 (*PtStats)<<"\n\nPt Plateau Efficiencies for DT Only region (|eta|<=0.9)";
0181 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,DTOnlyhists);
0182 (*PtStats)<<"\n\nPt Plateau Efficiencies for Overlap region (1.2<=|eta|<=0.9)";
0183 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,Overlaphists);
0184 (*PtStats)<<"\n\nPt Plateau Efficiencies for HighEta region (2.1<=|eta|)";
0185 computePtPlateauEff(PtStats, PlateauDefinitions,thresholds,HighEtahists);
0186 PtStats->close();
0187
0188
0189 DrawPtEffHists("Overall",PtEffAllOverall,fitThreshOverall,TrackerLeg1Overall,thresholds,Overallhists);
0190 DrawPtEffHists("CSCOnly",PtEffAllCSCOnly,fitThreshCSCOnly,TrackerLeg1CSCOnly,thresholds,CSCOnlyhists);
0191 DrawPtEffHists("CSCRestricted",PtEffAllCSCRestricted,fitThreshCSCRestricted,TrackerLeg1CSCRestricted,thresholds,CSCRestrictedhists);
0192 DrawPtEffHists("DTOnly",PtEffAllDTOnly,fitThreshDTOnly,TrackerLeg1DTOnly,thresholds,DTOnlyhists);
0193 DrawPtEffHists("Overlap",PtEffAllOverlap,fitThreshOverlap,TrackerLeg1Overlap,thresholds,Overlaphists);
0194 DrawPtEffHists("HighEta",PtEffAllHighEta,fitThreshHighEta,TrackerLeg1HighEta,thresholds,HighEtahists);
0195
0196
0197
0198
0199 EtaEff = fs->make<TCanvas>("EtaEff");
0200 EffEtaQ1->GetXaxis()->SetTitle("Eta Sim");
0201 EffEtaQ1->GetYaxis()->SetTitle("Efficiency");
0202 EffEtaQ2->GetXaxis()->SetTitle("Eta Sim");
0203 EffEtaQ2->GetYaxis()->SetTitle("Efficiency");
0204 EffEtaQ3->GetXaxis()->SetTitle("Eta Sim");
0205 EffEtaQ3->GetYaxis()->SetTitle("Efficiency");
0206 EffEtaAll->GetYaxis()->SetRangeUser(0.0,1.1);
0207 EffEtaQ1->GetYaxis()->SetRangeUser(0.0,1.1);
0208 EffEtaQ2->GetYaxis()->SetRangeUser(0.0,1.1);
0209 EffEtaQ3->GetYaxis()->SetRangeUser(0.0,1.1);
0210 EffEtaQ1->SetTitle("Efficiency for Quality 1, 2, and 3 Tracks");
0211 EffEtaQ1->SetFillColor(1);
0212 EffEtaQ2->SetFillColor(4);
0213 EffEtaQ3->SetFillColor(3);
0214
0215 EffEtaQ1->Draw();
0216 EffEtaQ2->Draw("same");
0217 EffEtaQ3->Draw("same");
0218 TrackerLeg2 = new TLegend(0.12,0.12,0.32,0.27);
0219 TrackerLeg2->AddEntry(EffEtaQ1,"All Tracks","f");
0220 TrackerLeg2->AddEntry(EffEtaQ2,"Quality > 1","f");
0221 TrackerLeg2->AddEntry(EffEtaQ3,"Quality > 2","f");
0222 TrackerLeg2->Draw();
0223 latexDescription->Draw();
0224 gPad->SetTicks(1,0);
0225
0226
0227
0228
0229
0230
0231 SignedEtaEff = fs->make<TCanvas>("SignedEtaEff");
0232 EffSignedEtaQ1->GetXaxis()->SetTitle("Eta Sim");
0233 EffSignedEtaQ1->GetYaxis()->SetTitle("Efficiency");
0234 EffSignedEtaQ2->GetXaxis()->SetTitle("Eta Sim");
0235 EffSignedEtaQ2->GetYaxis()->SetTitle("Efficiency");
0236 EffSignedEtaQ3->GetXaxis()->SetTitle("Eta Sim");
0237 EffSignedEtaQ3->GetYaxis()->SetTitle("Efficiency");
0238 EffSignedEtaAll->GetYaxis()->SetRangeUser(0.0,1.1);
0239 EffSignedEtaQ1->GetYaxis()->SetRangeUser(0.0,1.1);
0240 EffSignedEtaQ2->GetYaxis()->SetRangeUser(0.0,1.1);
0241 EffSignedEtaQ3->GetYaxis()->SetRangeUser(0.0,1.1);
0242 EffSignedEtaQ1->SetTitle("Efficiency for Quality 1, 2, and 3 Tracks");
0243 EffSignedEtaQ1->SetFillColor(1);
0244 EffSignedEtaQ2->SetFillColor(4);
0245 EffSignedEtaQ3->SetFillColor(3);
0246 EffSignedEtaQ1->Draw();
0247 EffSignedEtaQ2->Draw("same");
0248 EffSignedEtaQ3->Draw("same");
0249 TrackerLeg3 = new TLegend(0.12,0.12,0.32,0.27);
0250 TrackerLeg3->AddEntry(EffSignedEtaQ1,"All Tracks","f");
0251 TrackerLeg3->AddEntry(EffSignedEtaQ2,"Quality > 1","f");
0252 TrackerLeg3->AddEntry(EffSignedEtaQ3,"Quality > 2","f");
0253 TrackerLeg3->Draw();
0254 latexDescription->Draw();
0255 gPad->SetTicks(1,0);
0256
0257
0258
0259
0260
0261 PhiEff = fs->make<TCanvas>("PhiEff");
0262 EffPhiQ1->GetXaxis()->SetTitle("Phi Sim");
0263 EffPhiQ1->GetYaxis()->SetTitle("Efficiency");
0264 EffPhiQ2->GetXaxis()->SetTitle("Phi Sim");
0265 EffPhiQ2->GetYaxis()->SetTitle("Efficiency");
0266 EffPhiQ3->GetXaxis()->SetTitle("Phi Sim");
0267 EffPhiQ3->GetYaxis()->SetTitle("Efficiency");
0268 EffPhi->GetYaxis()->SetRangeUser(0.0,1.1);
0269 EffPhiQ1->GetYaxis()->SetRangeUser(0.0,1.1);
0270 EffPhiQ2->GetYaxis()->SetRangeUser(0.0,1.1);
0271 EffPhiQ3->GetYaxis()->SetRangeUser(0.0,1.1);
0272 EffPhiQ1->SetTitle("Efficiency for Quality 1, 2, and 3 Tracks");
0273 EffPhiQ1->SetFillColor(1);
0274 EffPhiQ2->SetFillColor(4);
0275 EffPhiQ3->SetFillColor(3);
0276 EffPhiQ1->Draw();
0277 EffPhiQ2->Draw("same");
0278 EffPhiQ3->Draw("same");
0279 TrackerLeg2 = new TLegend(0.4,0.12,0.6,0.27);
0280 TrackerLeg2->AddEntry(EffPhiQ1,"All Tracks","f");
0281 TrackerLeg2->AddEntry(EffPhiQ2,"Quality > 1","f");
0282 TrackerLeg2->AddEntry(EffPhiQ3,"Quality > 2","f");
0283 TrackerLeg2->Draw();
0284 latexDescription->Draw();
0285 gPad->SetTicks(1,0);
0286
0287
0288 EffPhi_mod_10_Q2_endcap1->GetXaxis()->SetTitle("Phi%10 (deg)");
0289 EffPhi_mod_10_Q3_endcap1->GetXaxis()->SetTitle("Phi%10 (deg)");
0290 EffPhi_mod_10_Q2_endcap2->GetXaxis()->SetTitle("Phi%10 (deg)");
0291 EffPhi_mod_10_Q3_endcap2->GetXaxis()->SetTitle("Phi%10 (deg)");
0292 EffPhi_mod_10_Q2_endcap1->GetYaxis()->SetTitle("Efficiency");
0293 EffPhi_mod_10_Q3_endcap1->GetYaxis()->SetTitle("Efficiency");
0294 EffPhi_mod_10_Q2_endcap2->GetYaxis()->SetTitle("Efficiency");
0295 EffPhi_mod_10_Q3_endcap2->GetYaxis()->SetTitle("Efficiency");
0296
0297 }
0298 void EffHistogramList::Print()
0299 {
0300 PtEffAllOverall->Print("EffPtOverall.png","png");
0301 PtEffAllOverlap->Print("EffPtOverlap.png","png");
0302 PtEffAllHighEta->Print("EffPtHighEta.png","png");
0303 PtEffAllCSCOnly->Print("EffPtCSCOnly.png","png");
0304 EtaEff->Print("EffEta.png","png");
0305 SignedEtaEff->Print("EffSignedEta.png","png");
0306 PhiEff->Print("EffPhi.png","png");
0307 }
0308
0309
0310
0311 void EffHistogramList::DrawPtEffHists(std::string region, TCanvas* canvas, TF1* fit, TLegend* legend, std::vector<std::string> thresholds, std::vector<TH1F*> PtEffHists)
0312 {
0313 std::string tmp;
0314
0315 tmp="PtEffAll"+region;
0316 canvas = fs->make<TCanvas>(tmp.c_str());
0317 tmp="fitThresh"+region;
0318 fit = new TF1(tmp.c_str(), csctf_analysis::thresh, 0, 100, 4);
0319 legend = new TLegend(0.7,0.15,0.85,0.35);
0320
0321 std::vector<TH1F*>::iterator iHist;
0322 std::vector<std::string>::iterator iThreshold;
0323
0324 int i=0;
0325 for(iHist=PtEffHists.begin();iHist!=PtEffHists.end();iHist++)
0326 {
0327 PtEffHists[i]->GetXaxis()->SetTitle("Pt Sim (GeV/c)");
0328 PtEffHists[i]->GetYaxis()->SetTitle("Efficiency");
0329 PtEffHists[i]->GetYaxis()->SetRangeUser(0.0,1.1);
0330 tmp=region+" Pt Efficiency";
0331 PtEffHists[i]->SetTitle(tmp.c_str());
0332 PtEffHists[i]->SetFillColor(7-i);
0333 tmp="Pt"+thresholds[i];
0334 fit->SetParNames(tmp.c_str(),"Resol","Constant","Slope");
0335
0336 tmp="fitThresh"+region;
0337 PtEffHists[i]->Fit(tmp.c_str());
0338
0339 if(i==0) tmp="All Tracks";
0340 else tmp="Pt_{TF} > "+thresholds[i];
0341
0342 legend->AddEntry(PtEffHists[i],tmp.c_str(),"f");
0343
0344 i++;
0345 }
0346
0347 i=0;
0348 PtEffHists[0]->Draw("Hist");
0349 for(iHist=PtEffHists.begin();iHist!=PtEffHists.end();iHist++){PtEffHists[i]->Draw("Hist Same"); i++;}
0350
0351 legend->Draw("same");
0352 latexDescription->Draw();
0353 gPad->SetTicks(1,0);
0354 }
0355
0356
0357 void EffHistogramList::computeErrors(TrackHistogramList* refHists)
0358 {
0359 refHists->matchTFPt10CSCRestricted->Sumw2(); refHists->matchTFPt12CSCRestricted->Sumw2(); refHists->matchTFPt16CSCRestricted->Sumw2();
0360 refHists->matchTFPt20CSCRestricted->Sumw2(); refHists->matchTFPt40CSCRestricted->Sumw2(); refHists->matchTFPt60CSCRestricted->Sumw2();
0361
0362 refHists->matchTFPt10Overall->Sumw2(); refHists->matchTFPt12Overall->Sumw2(); refHists->matchTFPt16Overall->Sumw2();
0363 refHists->matchTFPt20Overall->Sumw2(); refHists->matchTFPt40Overall->Sumw2(); refHists->matchTFPt60Overall->Sumw2();
0364
0365 refHists->matchTFPt10CSCOnly->Sumw2(); refHists->matchTFPt12CSCOnly->Sumw2(); refHists->matchTFPt16CSCOnly->Sumw2();
0366 refHists->matchTFPt20CSCOnly->Sumw2(); refHists->matchTFPt40CSCOnly->Sumw2(); refHists->matchTFPt60CSCOnly->Sumw2();
0367
0368 refHists->matchTFPt10DTOnly->Sumw2(); refHists->matchTFPt12DTOnly->Sumw2(); refHists->matchTFPt16DTOnly->Sumw2();
0369 refHists->matchTFPt20DTOnly->Sumw2(); refHists->matchTFPt40DTOnly->Sumw2(); refHists->matchTFPt60DTOnly->Sumw2();
0370
0371 refHists->matchTFPt10Overlap->Sumw2(); refHists->matchTFPt12Overlap->Sumw2(); refHists->matchTFPt16Overlap->Sumw2();
0372 refHists->matchTFPt20Overlap->Sumw2(); refHists->matchTFPt40Overlap->Sumw2(); refHists->matchTFPt60Overlap->Sumw2();
0373 refHists->matchTFPt10HighEta->Sumw2(); refHists->matchTFPt12HighEta->Sumw2(); refHists->matchTFPt16HighEta->Sumw2();
0374 refHists->matchTFPt20HighEta->Sumw2(); refHists->matchTFPt40HighEta->Sumw2(); refHists->matchTFPt60HighEta->Sumw2();
0375
0376 refHists->matchPtOverall->Sumw2(); refHists->matchPtCSCOnly->Sumw2(); refHists->matchPtDTOnly->Sumw2();
0377 refHists->matchPtHighEta->Sumw2(); refHists->ptDenHighEta->Sumw2(); refHists->ptDenCSCOnly->Sumw2();
0378
0379 refHists->ptDenDTOnly->Sumw2(); refHists->ptDenCSCRestricted->Sumw2(); refHists->ptDenOverall->Sumw2();
0380 }
0381
0382 void EffHistogramList::divideHistograms(TrackHistogramList* refHists)
0383 {
0384 computeErrors(refHists);
0385
0386
0387 EffTFPt10Overall->Divide(refHists->matchTFPt10Overall, refHists->ptDenOverall);
0388 EffTFPt12Overall->Divide(refHists->matchTFPt12Overall, refHists->ptDenOverall);
0389 EffTFPt16Overall->Divide(refHists->matchTFPt16Overall, refHists->ptDenOverall);
0390 EffTFPt20Overall->Divide(refHists->matchTFPt20Overall, refHists->ptDenOverall);
0391 EffTFPt40Overall->Divide(refHists->matchTFPt40Overall, refHists->ptDenOverall);
0392 EffTFPt60Overall->Divide(refHists->matchTFPt60Overall, refHists->ptDenOverall);
0393 EffTFPt10CSCOnly->Divide(refHists->matchTFPt10CSCOnly, refHists->ptDenCSCOnly);
0394 EffTFPt12CSCOnly->Divide(refHists->matchTFPt12CSCOnly, refHists->ptDenCSCOnly);
0395 EffTFPt16CSCOnly->Divide(refHists->matchTFPt16CSCOnly, refHists->ptDenCSCOnly);
0396 EffTFPt20CSCOnly->Divide(refHists->matchTFPt20CSCOnly, refHists->ptDenCSCOnly);
0397 EffTFPt40CSCOnly->Divide(refHists->matchTFPt40CSCOnly, refHists->ptDenCSCOnly);
0398 EffTFPt60CSCOnly->Divide(refHists->matchTFPt60CSCOnly, refHists->ptDenCSCOnly);
0399 EffTFPt10CSCRestricted->Divide(refHists->matchTFPt10CSCRestricted, refHists->ptDenCSCRestricted);
0400 EffTFPt12CSCRestricted->Divide(refHists->matchTFPt12CSCRestricted, refHists->ptDenCSCRestricted);
0401 EffTFPt16CSCRestricted->Divide(refHists->matchTFPt16CSCRestricted, refHists->ptDenCSCRestricted);
0402 EffTFPt20CSCRestricted->Divide(refHists->matchTFPt20CSCRestricted, refHists->ptDenCSCRestricted);
0403 EffTFPt40CSCRestricted->Divide(refHists->matchTFPt40CSCRestricted, refHists->ptDenCSCRestricted);
0404 EffTFPt60CSCRestricted->Divide(refHists->matchTFPt60CSCRestricted, refHists->ptDenCSCRestricted);
0405 EffTFPt10DTOnly->Divide(refHists->matchTFPt10DTOnly, refHists->ptDenDTOnly);
0406 EffTFPt12DTOnly->Divide(refHists->matchTFPt12DTOnly, refHists->ptDenDTOnly);
0407 EffTFPt16DTOnly->Divide(refHists->matchTFPt16DTOnly, refHists->ptDenDTOnly);
0408 EffTFPt20DTOnly->Divide(refHists->matchTFPt20DTOnly, refHists->ptDenDTOnly);
0409 EffTFPt40DTOnly->Divide(refHists->matchTFPt40DTOnly, refHists->ptDenDTOnly);
0410 EffTFPt60DTOnly->Divide(refHists->matchTFPt60DTOnly, refHists->ptDenDTOnly);
0411 EffTFPt10Overlap->Divide(refHists->matchTFPt10Overlap, refHists->ptDenOverlap);
0412 EffTFPt12Overlap->Divide(refHists->matchTFPt12Overlap, refHists->ptDenOverlap);
0413 EffTFPt16Overlap->Divide(refHists->matchTFPt16Overlap, refHists->ptDenOverlap);
0414 EffTFPt20Overlap->Divide(refHists->matchTFPt20Overlap, refHists->ptDenOverlap);
0415 EffTFPt40Overlap->Divide(refHists->matchTFPt40Overlap, refHists->ptDenOverlap);
0416 EffTFPt60Overlap->Divide(refHists->matchTFPt60Overlap, refHists->ptDenOverlap);
0417 EffTFPt10HighEta->Divide(refHists->matchTFPt10HighEta, refHists->ptDenHighEta);
0418 EffTFPt12HighEta->Divide(refHists->matchTFPt12HighEta, refHists->ptDenHighEta);
0419 EffTFPt16HighEta->Divide(refHists->matchTFPt16HighEta, refHists->ptDenHighEta);
0420 EffTFPt20HighEta->Divide(refHists->matchTFPt20HighEta, refHists->ptDenHighEta);
0421 EffTFPt40HighEta->Divide(refHists->matchTFPt40HighEta, refHists->ptDenHighEta);
0422 EffTFPt60HighEta->Divide(refHists->matchTFPt60HighEta, refHists->ptDenHighEta);
0423
0424
0425
0426 EffPtOverall->Divide(refHists->matchPtOverall, refHists->ptDenOverall);
0427 EffPtCSCOnly->Divide(refHists->matchPtCSCOnly, refHists->ptDenCSCOnly);
0428 EffPtCSCRestricted->Divide(refHists->matchPtCSCRestricted, refHists->ptDenCSCRestricted);
0429 EffPtDTOnly->Divide(refHists->matchPtDTOnly, refHists->ptDenDTOnly);
0430 EffPtOverlap->Divide(refHists->matchPtOverlap, refHists->ptDenOverlap);
0431 EffPtHighEta->Divide(refHists->matchPtHighEta, refHists->ptDenHighEta);
0432
0433 EffEtaAll->Divide(refHists->matchEta, refHists->Eta);
0434 EffEtaQ3->Divide(refHists->EtaQ3, refHists->Eta);
0435 EffEtaQ2->Divide(refHists->EtaQ2, refHists->Eta);
0436 EffEtaQ1->Divide(refHists->EtaQ1, refHists->Eta);
0437 EffSignedEtaAll->Divide(refHists->signedMatchEta, refHists->signedEta);
0438 EffSignedEtaQ3->Divide(refHists->signedEtaQ3, refHists->signedEta);
0439 EffSignedEtaQ2->Divide(refHists->signedEtaQ2, refHists->signedEta);
0440 EffSignedEtaQ1->Divide(refHists->signedEtaQ1, refHists->signedEta);
0441
0442
0443 EffPhi_mod_10_Q2_endcap1->Divide(refHists->matchPhi_mod_10_Q2_endcap1,refHists->Phi_mod_10_endcap1);
0444 EffPhi_mod_10_Q3_endcap1->Divide(refHists->matchPhi_mod_10_Q3_endcap1,refHists->Phi_mod_10_endcap1);
0445 EffPhi_mod_10_Q2_endcap2->Divide(refHists->matchPhi_mod_10_Q2_endcap2,refHists->Phi_mod_10_endcap2);
0446 EffPhi_mod_10_Q3_endcap2->Divide(refHists->matchPhi_mod_10_Q3_endcap2,refHists->Phi_mod_10_endcap2);
0447
0448 EffPhi->Divide(refHists->matchPhi, refHists->Phi);
0449 EffPhiQ3->Divide(refHists->PhiQ3, refHists->Phi);
0450 EffPhiQ2->Divide(refHists->PhiQ2, refHists->Phi);
0451 EffPhiQ1->Divide(refHists->PhiQ1, refHists->Phi);
0452
0453 }
0454
0455 void EffHistogramList::computePtPlateauEff(std::ofstream* PtStats, std::vector<double> PlateauDefinitions, std::vector<std::string> thresholds, std::vector<TH1F*> PtEffHists)
0456 {
0457 std::vector<TH1F*>::iterator iHist;
0458 std::vector<std::string>::iterator iThreshold;
0459
0460 TF1* constFit = new TF1("constFit", "[0]", 2., 140.);
0461
0462 Double_t xmin;
0463 int i=0;
0464 for(iHist=PtEffHists.begin();iHist!=PtEffHists.end();iHist++)
0465 {
0466 xmin = PlateauDefinitions[i];
0467 PtEffHists[i] -> Fit(constFit,"R","", xmin, 140.);
0468 if(i==0) (*PtStats)<<"\nDefault Pt thresh Efficiency: "<<constFit->GetParameter(0)<<" ";
0469 else (*PtStats)<<"\nPt>"<<thresholds[i].c_str()<<" Efficiency: "<<constFit->GetParameter(0)<<" ";
0470
0471 (*PtStats)<<"Error: "<<constFit->GetParError(0);
0472 i++;
0473 }
0474 }
0475
0476
0477
0478
0479
0480
0481 Double_t thresh(Double_t* pt, Double_t* par)
0482 {
0483 Double_t fitval = (0.5*TMath::Erf((pt[0]/par[0] + 1.0)/(TMath::Sqrt(2.0)*par[1])) + 0.5*TMath::Erf((pt[0]/par[0] - 1.0)/(TMath::Sqrt(2.0)*par[1])) )*(par[2] + par[3]*pt[0]);
0484 return fitval;
0485 }
0486 }