15 locEventLoop->GetSingle(locParticleID);
18 vector<const DFCALGeometry*> locFCALGeometry;
19 locEventLoop->Get(locFCALGeometry);
24 japp->RootWriteLock();
30 dNShowerBCAL_FCAL = GetOrCreate_Histogram<TH2I>(
"NShowerBCAL_FCAL",
"Number of non-matched showers; FCAL; BCAL", 10, 0, 10, 10, 0, 10);
31 dHistMap_FCALShowerDeltaR_P = GetOrCreate_Histogram<TH2I>(
"FCALShowerDeltaR_P",
"Unused FCAL showers #DeltaR vs momentum; momentum; #DeltaR", 120, 0., 6., 200, 0, 50);
32 dHistMap_FCALShowerDeltaR_Theta = GetOrCreate_Histogram<TH2I>(
"FCALShowerDeltaR_Theta",
"Unused FCAL showers #DeltaR vs #theta; #theta; #DeltaR", 150, 0, 15, 200, 0, 50);
33 dHistMap_FCALShowerDeltaD_P = GetOrCreate_Histogram<TH2I>(
"FCALShowerDeltaD_P",
"Unused FCAL showers #DeltaD vs momentum; momentum; #DeltaR", 120, 0., 6., 200, 0, 50);
34 dHistMap_FCALShowerDeltaD_Theta = GetOrCreate_Histogram<TH2I>(
"FCALShowerDeltaD_Theta",
"Unused FCAL showers #DeltaD vs #theta; #theta; #DeltaD", 150, 0, 15, 200, 0, 50);
35 dHistMap_FCALShowerDeltaD_DeltaT = GetOrCreate_Histogram<TH2I>(
"FCALShowerDeltaD_DeltaT",
"Unused FCAL showers #DeltaD vs #Deltat; #Deltat; #DeltaD", 200, -100., 100., 200, 0, 50);
37 dHistMap_BCALShowerDeltaPhi_DeltaZ = GetOrCreate_Histogram<TH2I>(
"BCALShowerDeltaPhi_DeltaZ",
"Unused BCAL showers #Delta#phi vs #DeltaZ; #DeltaZ; #Delta#phi", 200, -50, 50, 360, -180, 180);
38 dHistMap_BCALShowerDeltaPhi_P = GetOrCreate_Histogram<TH2I>(
"BCALShowerDeltaPhi_P",
"Unused BCAL showers #Delta#phi vs momentum; momentum; #Delta#phi", 120, 0., 6., 360, -180, 180);
39 dHistMap_BCALShowerDeltaPhi_Theta = GetOrCreate_Histogram<TH2I>(
"BCALShowerDeltaPhi_Theta",
"Unused BCAL showers #Delta#phi vs #theta; #theta; #Delta#phi", 150, 0, 150, 360, -180, 180);
40 dHistMap_BCALShowerDeltaPhi_DeltaT = GetOrCreate_Histogram<TH2I>(
"BCALShowerDeltaPhi_DeltaT",
"Unused BCAL showers #Delta#phi vs #Deltat; #Deltat; #Delta$phi", 200, -100., 100., 360, -180, 180);
41 dHistMap_BCALShowerDeltaZ_DeltaT = GetOrCreate_Histogram<TH2I>(
"BCALShowerDeltaZ_DeltaT",
"Unused FCAL showers #DeltaZ vs #Deltat; #Deltat; #DeltaZ", 200, -100., 100., 200, -50, 50);
44 h1_deltaX = GetOrCreate_Histogram<TH1I>(
"h1_deltaX",
"Fcal X - Track X", nbins,-25,25);
45 h1_deltaY = GetOrCreate_Histogram<TH1I>(
"h1_deltaY",
"Fcal Y - Track Y", nbins,-25,25);
46 h1_Efcal = GetOrCreate_Histogram<TH1I>(
"h1_Efcal",
"Hit energy", nbins,0,4);
47 h1_tfcal = GetOrCreate_Histogram<TH1I>(
"h1_tfcal",
"Hit time", 250,-25,225);
49 h1_N9 = GetOrCreate_Histogram<TH1I>(
"h1_N9",
"Hit N9", 25, 0, 25);
50 h1_E9 = GetOrCreate_Histogram<TH1I>(
"h1_E9",
"Energy E9 (GeV)", nbins, 0, 2);
51 h1_t9 = GetOrCreate_Histogram<TH1I>(
"h1_t9",
"Time t9 (ns)", 250, -25, 225);
52 h1_t9sigma = GetOrCreate_Histogram<TH1I>(
"h1_t9sigma",
"Time t9sigma",nbins,0,10);
54 h1_N1 = GetOrCreate_Histogram<TH1I>(
"h1_N1",
"Hit N1", 25, 0, 25);
55 h1_E1 = GetOrCreate_Histogram<TH1I>(
"h1_E1",
"Energy E1 (GeV)", nbins, 0, 2);
56 h1_t1 = GetOrCreate_Histogram<TH1I>(
"h1_t1",
"Time t1 (ns)", 250, -25, 225);
57 h1_t1sigma = GetOrCreate_Histogram<TH1I>(
"h1_t1sigma",
"Time t1sigma",nbins,0,10);
59 h2_YvsX9 = GetOrCreate_Histogram<TH2I>(
"h2_YvsX9",
"Hit position Y vs X, E9",240,-120,120,240,-120,120);
60 h2_dEdx9_vsp= GetOrCreate_Histogram<TH2I>(
"h2_dEdx9_vsp",
"Track dEdx9 vs p",nbins,0,4,nbins,0,10);
61 h2_E9vsp= GetOrCreate_Histogram<TH2I>(
"h2_E9vsp",
"E9 vs p",nbins,0,4,nbins,0,4);
62 h2_dEdxvsE9= GetOrCreate_Histogram<TH2I>(
"h2_dEdxvsE9",
"dEdx vs E9 energy",nbins,0,4,nbins,0,4);
63 h2_E9_vsTheta= GetOrCreate_Histogram<TH2I>(
"h2_E9_vsTheta",
"E9 vs Theta",90,0,30,nbins,0,4);
64 h2_E9_vsPhi= GetOrCreate_Histogram<TH2I>(
"h2_E9_vsPhi",
"E9 vs Phi",90,-180,180,nbins,0,4);
66 h2_YvsX1 = GetOrCreate_Histogram<TH2I>(
"h2_YvsX1",
"Hit position Y vs X, E1",240,-120,120,240,-120,120);
67 h2_dEdx1_vsp = GetOrCreate_Histogram<TH2I>(
"h2_dEdx1_vsp",
"Track dEdx1 vs p",nbins,0,4,nbins,0,10);
68 h2_E1vsp = GetOrCreate_Histogram<TH2I>(
"h2_E1vsp",
"E1 vs p",nbins,0,4,nbins,0,4);
69 h2_dEdxvsE1 = GetOrCreate_Histogram<TH2I>(
"h2_dEdxvsE1",
"dEdx vs E1 energy",nbins,0,4,nbins,0,4);
70 h2_E1_vsTheta = GetOrCreate_Histogram<TH2I>(
"h2_E1_vsTheta",
"E1 vs Theta",90,0,30,nbins,0,4);
71 h2_E1_vsPhi = GetOrCreate_Histogram<TH2I>(
"h2_E1_vsPhi",
"E1 vs Phi",90,-180,180,nbins,0,4);
72 h2_E1vsRlocal = GetOrCreate_Histogram<TH2I>(
"h2_E1vsRlocal",
"E1 vs Rtrk rel to Block center (cm)",nbins,0,5,nbins,0,4);
73 h2_YvsXcheck = GetOrCreate_Histogram<TH2I>(
"h2_E1vsRlocal",
"E1 vs Rtrk rel to Block center (cm)",nbins,0,5,nbins,0,4);
77 TString match[2] = {
"Match",
""};
78 map<int, TString> charge;
79 charge[-1] =
"Neg"; charge[+1] =
"Pos";
81 for(
int locDummy = 0; locDummy < 2; locDummy++) {
82 bool locMatch = (locDummy == 0);
84 for(
int locCharge = -1; locCharge < 2; locCharge+=2) {
85 locHistName =
"TrackNhits_Theta" + match[locDummy] + charge[locCharge];
86 locHistTitle =
"Number of hits on track vs #theta: " + match[locDummy] + charge[locCharge];
87 locHistTitle +=
"; #theta; # DOF";
88 dHistMap_TrackNhits_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 35, 0, 35);
90 locHistName =
"TrackNhitsCDC_Theta" + match[locDummy] + charge[locCharge];
91 locHistTitle =
"Number of CDC ring hits on track vs #theta: " + match[locDummy] + charge[locCharge];
92 locHistTitle +=
"; #theta; # CDC ring hits";
93 dHistMap_TrackNhitsCDC_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 35, 0, 35);
95 locHistName =
"TrackNhitsFDC_Theta" + match[locDummy] + charge[locCharge];
96 locHistTitle =
"Number of FDC plane hits on track vs #theta: " + match[locDummy] + charge[locCharge];
97 locHistTitle +=
"; #theta; # FDC plane hits";
98 dHistMap_TrackNhitsFDC_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 35, 0, 35);
100 locHistName =
"TrackNhitsFDCVsCDC_Theta13_16" + match[locDummy] + charge[locCharge];
101 locHistTitle =
"Number of FDC plane hits vs CDC ring hits (13<#theta<16): " + match[locDummy] + charge[locCharge];
102 locHistTitle +=
"; # CDC ring hits; # FDC plane hits";
105 locHistName =
"TrackNhitsFDCVsCDC_Theta16_20" + match[locDummy] + charge[locCharge];
106 locHistTitle =
"Number of FDC plane hits vs CDC ring hits (16<#theta<20): " + match[locDummy] + charge[locCharge];
107 locHistTitle +=
"; # CDC ring hits; # FDC plane hits";
110 locHistName =
"TrackChiSq_Theta" + match[locDummy] + charge[locCharge];
111 locHistTitle =
"FOM for track #chi^{2} vs #theta: " + match[locDummy] + charge[locCharge];
112 locHistTitle +=
"; #theta; #chi^{2}";
113 dHistMap_TrackChiSq_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 500, 0., 100.);
115 locHistName =
"TrackFOM_Theta" + match[locDummy] + charge[locCharge];
116 locHistTitle =
"FOM for track fit vs #theta: " + match[locDummy] + charge[locCharge];
117 locHistTitle +=
"; #theta; FOM";
118 dHistMap_TrackFOM_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 1000, 0., 1.);
120 locHistName =
"TrackP_Theta" + match[locDummy] + charge[locCharge];
121 locHistTitle =
"P vs #theta: " + match[locDummy] + charge[locCharge];
122 locHistTitle +=
"; #theta; momentum";
123 dHistMap_TrackP_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90, 0., 90., 120, 0., 3.);
125 locHistName =
"TrackPOCAXY" + match[locDummy] + charge[locCharge];
126 locHistTitle =
"POCA to beamline Y vs X: " + match[locDummy] + charge[locCharge];
127 locHistTitle +=
"; POCA X; POCAY";
128 dHistMap_TrackPOCAXY[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 200, -20., 20., 200, -20., 20.);
130 locHistName =
"TrackPOCAZ" + match[locDummy] + charge[locCharge];
131 locHistTitle =
"POCA to beamline Z: " + match[locDummy] + charge[locCharge];
132 locHistTitle +=
"; POCA Z";
133 dHistMap_TrackPOCAZ[locMatch][locCharge] = GetOrCreate_Histogram<TH1I>(locHistName.Data(), locHistTitle.Data(), 500, 0., 250.);
135 locHistName =
"TrackCDCHitRadius_NHits" + match[locDummy] + charge[locCharge];
136 locHistTitle =
"CDC Hit radius vs # hits: " + match[locDummy] + charge[locCharge];
137 locHistTitle +=
"; # hits; CDC Hit Radius";
140 locHistName =
"HighNDFTrackCDCHitRadius_PT" + match[locDummy] + charge[locCharge];
141 locHistTitle =
"High NDF tracks CDC Hit radius vs P_{T}: " + match[locDummy] + charge[locCharge];
142 locHistTitle +=
"; P_{T} (GeV); CDC Hit Radius";
145 locHistName =
"LowNDFTrackCDCHitRadius_PT" + match[locDummy] + charge[locCharge];
146 locHistTitle =
"Low NDF tracks CDC Hit radius vs P_{T}: " + match[locDummy] + charge[locCharge];
147 locHistTitle +=
"; P_{T} (GeV); CDC Hit Radius";
150 locHistName =
"LowNDFTrackP_VertZ" + match[locDummy] + charge[locCharge];
151 locHistTitle =
"Low NDF tracks P vs vertex Z: " + match[locDummy] + charge[locCharge];
152 locHistTitle +=
"; Vertex Z (cm); momentum";
153 dHistMap_LowNDFTrackP_VertZ[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 500, 0., 250., 120, 0., 3.);
155 locHistName =
"LowNDFTrackPT_Phi" + match[locDummy] + charge[locCharge];
156 locHistTitle =
"Low NDF tracks P_{T} vs #phi: " + match[locDummy] + charge[locCharge];
157 locHistTitle +=
"; #phi; transverse momentum";
158 dHistMap_LowNDFTrackPT_Phi[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 360., -180., 180., 120, 0., 3.);
160 locHistName =
"TrackMCHitFraction_Theta" + match[locDummy] + charge[locCharge];
161 locHistTitle =
"Track MC Hit Fraction vs #theta: " + match[locDummy] + charge[locCharge];
162 locHistTitle +=
"; #theta; MC Hit Fraction";
165 locHistName =
"TrackMCMomRes_Theta" + match[locDummy] + charge[locCharge];
166 locHistTitle =
"Track MC Momentum Resolution vs #theta: " + match[locDummy] + charge[locCharge];
167 locHistTitle +=
"; #theta; MC Momentum Resolution #Delta p/p";
168 dHistMap_TrackMCMomRes_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90., 0., 90., 100, -0.4, 0.4);
170 locHistName =
"TrackMCThetaRes_Theta" + match[locDummy] + charge[locCharge];
171 locHistTitle =
"Track MC Theta Resolution vs #theta: " + match[locDummy] + charge[locCharge];
172 locHistTitle +=
"; #theta; MC Theta Resolution #Delta#theta (degrees)";
173 dHistMap_TrackMCThetaRes_Theta[locMatch][locCharge] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 90., 0., 90., 100, -5, 5);
176 vector<DetectorSystem_t> locDetectorSystems;
177 locDetectorSystems.push_back(
SYS_FCAL); locDetectorSystems.push_back(
SYS_BCAL);
178 for(
size_t loc_i = 0; loc_i < locDetectorSystems.size(); ++loc_i)
181 TString locSystemName = (locSystem ==
SYS_FCAL) ?
"FCAL" :
"BCAL";
182 double thetaMax = (locSystem ==
SYS_FCAL) ? 15. : 150.;
184 locHistName =
"ShowerEnergy_Theta" + match[locDummy] + locSystemName;
185 locHistTitle =
"Shower Energy vs #theta: " + match[locDummy] + locSystemName;
186 locHistTitle +=
";#theta; Energy";
187 dHistMap_ShowerEnergy_Theta[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 100., 0., 5.);
189 locHistName =
"ShowerPhi_Theta" + match[locDummy] + locSystemName;
190 locHistTitle =
"Shower #phi vs #theta: " + match[locDummy] + locSystemName;
191 locHistTitle +=
";#theta; #phi";
192 dHistMap_ShowerPhi_Theta[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 360., -180., 180.);
194 locHistName =
"ShowerNClusters" + match[locDummy] + locSystemName;
195 locHistTitle =
"Number of clusters in shower: " + match[locDummy] + locSystemName;
196 dHistMap_ShowerNclusters[locMatch][locSystem] = GetOrCreate_Histogram<TH1I>(locHistName.Data(), locHistTitle.Data(), 15, 0, 15);
198 locHistName =
"ShowerNHits" + match[locDummy] + locSystemName;
199 locHistTitle =
"Number of hits in shower: " + match[locDummy] + locSystemName;
200 dHistMap_ShowerNhits[locMatch][locSystem] = GetOrCreate_Histogram<TH1I>(locHistName.Data(), locHistTitle.Data(), 15, 0, 15);
202 locHistName =
"ShowerMaxEnergy_NHits" + match[locDummy] + locSystemName;
203 locHistTitle =
"E_{max}/E_{tot} vs number of hits in shower: " + match[locDummy] + locSystemName;
204 dHistMap_ShowerMaxEnergy_Nhits[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 15, 0, 15, 500, 0., 1.);
206 locHistName =
"ShowerDeltaT_NHits" + match[locDummy] + locSystemName;
207 locHistTitle =
"t_{shower} - t_{#gamma} vs number of hits in shower: " + match[locDummy] + locSystemName;
208 dHistMap_ShowerDeltaT_Nhits[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 15, 0, 15, 200, -100., 100.);
210 locHistName =
"ShowerDeltaT_E" + match[locDummy] + locSystemName;
211 locHistTitle =
"t_{shower} - t_{#gamma} vs shower energy: " + match[locDummy] + locSystemName;
212 dHistMap_ShowerDeltaT_E[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 100., 0., 5., 200, -100., 100.);
214 locHistName =
"ShowerE_Theta" + match[locDummy] + locSystemName;
215 locHistTitle =
"t_{shower} - t_{#gamma} vs shower #theta: " + match[locDummy] + locSystemName;
216 dHistMap_ShowerE_Theta[locMatch][locSystem] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 120., 0., 6.);
219 locHistName =
"ShowerNcell" + match[locDummy] + locSystemName;
220 locHistTitle =
"Number of points in shower: " + match[locDummy] + locSystemName;
221 dHistMap_BCALShowerNcell[locMatch] = GetOrCreate_Histogram<TH1I>(locHistName.Data(), locHistTitle.Data(), 15, 0, 15);
223 locHistName =
"Layer1Energy_Theta" + match[locDummy] + locSystemName;
224 locHistTitle =
"Shower Layer 1 Energy vs #theta: " + match[locDummy] + locSystemName;
225 locHistTitle +=
";#theta; Energy Layer 1";
226 dHistMap_Layer1Energy_Theta[locMatch] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 500., 0., 1.);
228 locHistName =
"Layer2Energy_Theta" + match[locDummy] + locSystemName;
229 locHistTitle =
"Shower Layer 2 Energy vs #theta: " + match[locDummy] + locSystemName;
230 locHistTitle +=
";#theta; Energy Layer 2";
231 dHistMap_Layer2Energy_Theta[locMatch] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 500., 0., 1.);
233 locHistName =
"Layer3Energy_Theta" + match[locDummy] + locSystemName;
234 locHistTitle =
"Shower Layer 3 Energy vs #theta: " + match[locDummy] + locSystemName;
235 locHistTitle +=
";#theta; Energy Layer 3";
236 dHistMap_Layer3Energy_Theta[locMatch] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 500., 0., 1.);
238 locHistName =
"Layer4Energy_Theta" + match[locDummy] + locSystemName;
239 locHistTitle =
"Shower Layer 4 Energy vs #theta: " + match[locDummy] + locSystemName;
240 locHistTitle +=
";#theta; Energy Layer 4";
241 dHistMap_Layer4Energy_Theta[locMatch] = GetOrCreate_Histogram<TH2I>(locHistName.Data(), locHistTitle.Data(), 150, 0., thetaMax, 500., 0., 1.);
259 deque<const DKinematicData*> locParticles;
268 double locBeamPhotonTime = locBeamPhoton->
time();
272 locEventLoop->GetSingle(locDetectorMatches);
275 vector<const DMCThrownMatching*> locMCThrownMatchingVector;
276 locEventLoop->Get(locMCThrownMatchingVector);
277 vector<const DMCThrown*> locMCThrowns;
278 locEventLoop->Get(locMCThrowns);
281 vector<const DChargedTrack*> locChargedTracks;
282 locEventLoop->Get(locChargedTracks);
283 vector<const DNeutralShower*> locNeutralShowers;
284 locEventLoop->Get(locNeutralShowers);
285 vector<const DFCALShower*> locFCALShowers;
286 locEventLoop->Get(locFCALShowers);
287 vector<const DBCALShower*> locBCALShowers;
288 locEventLoop->Get(locBCALShowers);
290 vector<const DChargedTrack*> locUnusedChargedTracks;
291 vector<const DNeutralShower*> locUnusedNeutralShowers;
294 for(
size_t loc_j = 0; loc_j < locChargedTracks.size(); ++loc_j) {
299 if(!locMCThrowns.empty())
300 locMCThrown = locMCThrownMatchingVector[0]->Get_MatchingMCThrown(locChargedTracks[loc_j], locMatchFOM);
303 for(
size_t loc_i = 0; loc_i < locParticles.size(); ++loc_i) {
306 if(locChargedTrack == NULL)
continue;
309 if(locChargedTracks[loc_j]->Get_BestFOM()->candidateid == locChargedTrackHypothesis->candidateid) {
311 FillTrack(locEventLoop, locChargedTracks[loc_j],
true, locMCThrown);
317 locUnusedChargedTracks.push_back(locChargedTracks[loc_j]);
318 FillTrack(locEventLoop, locChargedTracks[loc_j],
false, locMCThrown);
323 for(
size_t loc_j = 0; loc_j < locBCALShowers.size(); ++loc_j) {
326 for(
size_t loc_i = 0; loc_i < locParticles.size(); ++loc_i) {
329 if(locChargedTrack == NULL)
continue;
334 if(rt == NULL)
continue;
336 const DBCALShower *locBCALShower = locBCALShowers[loc_j];
337 DVector3 bcal_pos(locBCALShower->
x, locBCALShower->
y, locBCALShower->
z);
339 double locFlightTime = 9.9E9, locPathLength = 9.9E9, locFlightTimeVariance = 9.9E9;
343 if(proj_pos.Perp() < 65.0)
346 double dz = bcal_pos.z() - proj_pos.z();
347 double dphi = bcal_pos.Phi() - proj_pos.Phi();
348 while(dphi > TMath::Pi())
349 dphi -= 2*TMath::Pi();
350 while(dphi < -1.*TMath::Pi())
351 dphi += 2*TMath::Pi();
353 double locDeltaT = locBCALShowers[loc_j]->t - locBeamPhotonTime;
360 dHistMap_BCALShowerDeltaPhi_DeltaZ->Fill(dz, dphi*180./TMath::Pi());
361 dHistMap_BCALShowerDeltaPhi_P->Fill(locTrackTimeBased->momentum().Mag(), dphi*180./TMath::Pi());
362 dHistMap_BCALShowerDeltaPhi_Theta->Fill(locTrackTimeBased->momentum().Theta()*180./TMath::Pi(), dphi*180./TMath::Pi());
363 dHistMap_BCALShowerDeltaPhi_DeltaT->Fill(locDeltaT, dphi*180./TMath::Pi());
364 dHistMap_BCALShowerDeltaZ_DeltaT->Fill(locDeltaT, dz);
371 if(locBCALShowerMatchParams.
dBCALShower == locBCALShower) {
374 locNeutralShower->
dEnergy = locBCALShowers[loc_j]->E;
375 locNeutralShower->
dSpacetimeVertex.SetXYZT(locBCALShowers[loc_j]->
x, locBCALShowers[loc_j]->
y, locBCALShowers[loc_j]->z, locBCALShowers[loc_j]->t);
376 locNeutralShower->AddAssociatedObject(locBCALShowers[loc_j]);
377 double locFlightTime = locBCALShowerMatchParams.
dFlightTime;
378 FillShower(locNeutralShower,
true, locBeamPhotonTime, locFlightTime);
379 delete locNeutralShower;
385 for(
size_t loc_j = 0; loc_j < locFCALShowers.size(); ++loc_j) {
388 for(
size_t loc_i = 0; loc_i < locParticles.size(); ++loc_i) {
391 if(locChargedTrack == NULL)
continue;
396 if(rt == NULL)
continue;
398 const DFCALShower *locFCALShower = locFCALShowers[loc_j];
402 double locPathLength = 9.9E9, locFlightTime = 9.9E9, locFlightTimeVariance = 9.9e9;
406 double dd = (fcal_pos - proj_pos).Mag();
407 double dr = (fcal_pos - proj_pos).Perp();
408 double dphi = fcal_pos.Phi() - proj_pos.Phi();
409 while(dphi > TMath::Pi())
410 dphi -= 2*TMath::Pi();
411 while(dphi < -1.*TMath::Pi())
412 dphi += 2*TMath::Pi();
414 double locDeltaT = locFCALShowers[loc_j]->getTime() - locBeamPhotonTime;
421 dHistMap_FCALShowerDeltaR_P->Fill(locTrackTimeBased->momentum().Mag(), dr);
422 dHistMap_FCALShowerDeltaR_Theta->Fill(locTrackTimeBased->momentum().Theta()*180./TMath::Pi(), dr);
423 dHistMap_FCALShowerDeltaD_P->Fill(locTrackTimeBased->momentum().Mag(), dd);
424 dHistMap_FCALShowerDeltaD_Theta->Fill(locTrackTimeBased->momentum().Theta()*180./TMath::Pi(), dd);
425 dHistMap_FCALShowerDeltaD_DeltaT->Fill(locDeltaT, dd);
432 if(locFCALShowerMatchParams.
dFCALShower == locFCALShower) {
435 locNeutralShower->
dEnergy = locFCALShowers[loc_j]->getEnergy();
436 locNeutralShower->
dSpacetimeVertex.SetVect(locFCALShowers[loc_j]->getPosition());
438 locNeutralShower->AddAssociatedObject(locFCALShowers[loc_j]);
439 double locFlightTime = locFCALShowerMatchParams.
dFlightTime;
440 FillShower(locNeutralShower,
true, locBeamPhotonTime, locFlightTime);
441 delete locNeutralShower;
447 int nUnmatchedFCAL = 0;
448 int nUnmatchedBCAL = 0;
453 for(
size_t loc_j = 0; loc_j < locNeutralShowers.size(); ++loc_j) {
454 locUnusedNeutralShowers.push_back(locNeutralShowers[loc_j]);
455 double locFlightTime = locNeutralShowers[loc_j]->dSpacetimeVertex.Vect().Mag()/
SPEED_OF_LIGHT;
456 FillShower(locNeutralShowers[loc_j],
false, locBeamPhotonTime, locFlightTime);
458 if(locNeutralShowers[loc_j]->dDetectorSystem ==
SYS_FCAL) {
461 if(locNeutralShowers[loc_j]->dDetectorSystem ==
SYS_BCAL) {
483 int locCharge = locChargedTrackHypothesis->
charge();
487 double nHits = locTrackTimeBased->
Ndof + 5.;
488 double locTheta = locTrackTimeBased->momentum().Theta()*180/TMath::Pi();
490 set<int> locCDCRings;
493 set<int> locFDCPlanes;
496 double locHitFraction = locTrackTimeBased->dNumHitsMatchedToThrown/nHits;
497 double locMomentumRes = -999;
498 double locThetaRes = -999;
500 locMomentumRes = (locTrackTimeBased->momentum().Mag() - locMCThrown->
momentum().Mag())/locMCThrown->
momentum().Mag();
501 locThetaRes = (locTrackTimeBased->momentum().Theta() - locMCThrown->
momentum().Theta())*180./TMath::Pi();
512 if(locTheta>13. && locTheta<16.)
514 if(locTheta>16. && locTheta<20.)
519 dHistMap_TrackPOCAXY[locMatch][locCharge]->Fill(locTrackTimeBased->position().X(), locTrackTimeBased->position().Y());
528 for(set<int>::iterator locIterator = locFDCPlanes.begin(); locIterator != locFDCPlanes.end(); ++locIterator) {
533 if(locTrackTimeBased->momentum().Theta()*180./TMath::Pi() > 30.){
534 for(set<int>::iterator locIterator = locCDCRings.begin(); locIterator != locCDCRings.end(); ++locIterator) {
542 dHistMap_LowNDFTrackPT_Phi[locMatch][locCharge]->Fill(locTrackTimeBased->momentum().Phi()*180/TMath::Pi(), locTrackTimeBased->momentum().Perp());
548 if(!locMatch)
return;
552 DVector3 fcal_origin(0.0,0.0,zfcal);
556 double theta = locTrackTimeBased->momentum().Theta()*180./TMath::Pi();
557 double phi = locTrackTimeBased->momentum().Phi()*180./TMath::Pi();
558 double p = locTrackTimeBased->momentum().Mag();
559 double dEdx = locTrackTimeBased->dEdx()*1e6;
561 vector<const DFCALHit*> fcalhits;
562 locEventLoop->Get(fcalhits);
563 if(fcalhits.empty())
return;
565 if (locTrackTimeBased->rt->GetIntersectionWithPlane(fcal_origin,fcal_normal,trkpos,proj_mom,NULL,NULL,NULL,
SYS_FCAL)==NOERROR){
566 double trkposX = trkpos.X();
567 double trkposY = trkpos.Y();
587 trkrow += row_offset;
588 trkcol += col_offset;
590 for (
unsigned int j=0; j < fcalhits.size(); ++j) {
591 int row = fcalhits[j]->row;
592 int col = fcalhits[j]->column;
593 double x = fcalhits[j]->x;
594 double y = fcalhits[j]->y;
595 double Efcal = fcalhits[j]->E;
596 double tfcal= fcalhits[j]->t;
597 double intOverPeak = fcalhits[j]->intOverPeak;
600 int drow = abs(row - trkrow);
601 int dcol = abs(col - trkcol);
604 h1_deltaY->Fill(y - trkposY);
605 h1_Efcal->Fill(Efcal);
606 h1_tfcal->Fill(tfcal);
609 if (drow<=Delta_block && dcol<=Delta_block && (tfcal>-15 && tfcal<50) && (intOverPeak>2.5 && intOverPeak<9)) {
611 E9peak += Efcal*6/intOverPeak;
626 t9 = N9>0? t9/N9 : 0;
627 t9sigma = N9>0?
sqrt(t9sq/N9 - t9*t9): 0;
638 h1_t9sigma->Fill(t9sigma);
639 h2_YvsX9->Fill(trkposX,trkposY);
640 h2_dEdx9_vsp->Fill(p,dEdx);
641 h2_E9vsp->Fill(p,E9);
642 h2_dEdxvsE9->Fill(E9,dEdx);
643 h2_E9_vsTheta->Fill(theta,E9);
644 h2_E9_vsPhi->Fill(phi,E9);
650 h1_t1sigma->Fill(t9sigma);
651 h2_YvsX1->Fill(trkposX,trkposY);
652 h2_dEdx1_vsp->Fill(p,dEdx);
653 h2_E1vsp->Fill(p,E9);
654 h2_dEdxvsE1->Fill(E9,dEdx);
655 h2_E1_vsTheta->Fill(theta,E9);
656 h2_E1_vsPhi->Fill(phi,E9);
657 double Rlocal =
sqrt(dX_E1*dX_E1 + dY_E1*dY_E1);
658 h2_E1vsRlocal->Fill(Rlocal,E9);
659 h2_YvsXcheck->Fill(dX_E1,dY_E1);
675 double layerE[4] = {0., 0., 0., 0.};
677 double locEnergy = locNeutralShower->
dEnergy;
679 double locDeltaT = locNeutralShower->
dSpacetimeVertex.T() - locFlightTime - locBeamPhotonTime;
681 double locEnergyCluster = 0.;
682 double locMaxEnergyCluster = 0.;
688 locNeutralShower->GetSingleT(locFCALShower);
690 vector<const DFCALCluster*> locFCALClusters;
691 locFCALShower->Get(locFCALClusters);
692 nClusters = locFCALClusters.size();
695 for(
unsigned int i=0; i<locFCALClusters.size(); i++){
696 const vector<DFCALCluster::DFCALClusterHit_t> locFCALHits = locFCALClusters[i]->GetHits();
698 locEnergyCluster = locFCALClusters[i]->getEnergy();
699 locMaxEnergyCluster = locFCALClusters[i]->getEmax();
701 for(
unsigned int j=0; j<locFCALHits.size(); j++){
710 locNeutralShower->GetSingleT(locBCALShower);
721 vector<const DBCALCluster*> locBCALClusters;
722 locBCALShower->Get(locBCALClusters);
723 nClusters = locBCALClusters.size();
726 for(
unsigned int i=0; i<locBCALClusters.size(); i++){
727 vector<const DBCALPoint*> locBCALPoints;
728 locBCALClusters[i]->Get(locBCALPoints);
730 locEnergyCluster = locBCALClusters[i]->E();
731 if(locBCALPoints.size() == 1) locMaxEnergyCluster = locBCALClusters[i]->E();
733 for(
unsigned int j=0; j<locBCALPoints.size(); j++){
737 if(point->
E() > locMaxEnergyCluster)
738 locMaxEnergyCluster = point->
E();
740 layerE[point->
layer()-1] += point->
E();
751 dHistMap_ShowerPhi_Theta[locMatch][locSystem]->Fill(locPosition.Theta()*180./TMath::Pi(), locPosition.Phi()*180./TMath::Pi());
758 if(locDeltaT > -5. && locDeltaT < 5. && locSystem ==
SYS_FCAL)
760 if(locDeltaT > -5. && locDeltaT < 5. && locSystem ==
SYS_BCAL)
vector< const DKinematicData * > Get_FinalParticles_Measured(void) const
TDirectoryFile * ChangeTo_BaseDirectory(void)
TH2I * dHistMap_BCALShowerDeltaPhi_Theta
void Get_FDCPlanes(unsigned int locBitPattern, set< int > &locFDCPlanes) const
void Get_CDCRings(unsigned int locBitPattern, set< int > &locCDCRings) const
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerEnergy_Theta
map< bool, map< int, TH2I * > > dHistMap_TrackNhitsFDC_Theta
map< bool, map< int, TH2I * > > dHistMap_TrackPOCAXY
map< bool, TH2I * > dHistMap_Layer4Energy_Theta
map< bool, map< int, TH2I * > > dHistMap_TrackP_Theta
map< bool, map< DetectorSystem_t, TH1I * > > dHistMap_ShowerNclusters
TH2I * dHistMap_BCALShowerDeltaZ_DeltaT
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
const DFCALGeometry * dFCALGeometry
map< bool, TH2I * > dHistMap_Layer3Energy_Theta
DVector3 GetLastDOCAPoint(void) const
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerDeltaT_Nhits
TH2I * dHistMap_BCALShowerDeltaPhi_DeltaZ
void Initialize(JEventLoop *locEventLoop)
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerMaxEnergy_Nhits
const DTrackTimeBased * Get_TrackTimeBased(void) const
TDirectoryFile * CreateAndChangeTo_ActionDirectory(void)
const DKinematicData * Get_InitialParticle_Measured(void) const
map< bool, TH1I * > dHistMap_BCALShowerNcell
map< bool, map< int, TH2I * > > dHistMap_TrackCDCHitRadius_Nhits
bool Get_UseKinFitResultsFlag(void) const
map< bool, map< DetectorSystem_t, TH1I * > > dHistMap_ShowerNhits
DetectorSystem_t dDetectorSystem
DLorentzVector dSpacetimeVertex
map< bool, map< int, TH2I * > > dHistMap_TrackMCThetaRes_Theta
map< bool, map< int, TH1I * > > dHistMap_TrackPOCAZ
map< bool, map< int, TH2I * > > dHistMap_LowNDFTrackCDCHitRadius_PT
TH2I * dHistMap_BCALShowerDeltaPhi_DeltaT
TH2I * dHistMap_FCALShowerDeltaD_Theta
TH2I * dHistMap_FCALShowerDeltaD_P
map< bool, map< int, TH2I * > > dHistMap_TrackMCMomRes_Theta
map< bool, map< int, TH2I * > > dHistMap_TrackNhitsCDC_Theta
bool Get_BestFCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DFCALShowerMatchParams > &locBestMatchParams) const
double DistToRTwithTime(DVector3 hit, double *s=NULL, double *t=NULL, double *var_t=NULL, DetectorSystem_t detector=SYS_NULL) const
bool Get_BestBCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DBCALShowerMatchParams > &locBestMatchParams) const
void FillShower(const DNeutralShower *locNeutralShower, bool locMatch, double locBeamPhotonTime, double locFlightTime)
map< bool, map< int, TH2I * > > dHistMap_HighNDFTrackCDCHitRadius_PT
vector< const DKinematicData * > Get_FinalParticles(void) const
map< bool, map< int, TH2I * > > dHistMap_TrackNhitsFDCVsCDC_Theta16_20
map< bool, map< int, TH2I * > > dHistMap_TrackNhitsFDCVsCDC_Theta13_16
map< bool, TH2I * > dHistMap_Layer1Energy_Theta
TH2I * dHistMap_FCALShowerDeltaR_Theta
void FillTrack(JEventLoop *locEventLoop, const DChargedTrack *locChargedTrack, bool locMatch, const DMCThrown *locMCThrown)
const DFCALShower * dFCALShower
map< bool, TH2I * > dHistMap_Layer2Energy_Theta
const DParticleID * dParticleID
map< bool, map< int, TH2I * > > dHistMap_TrackChiSq_Theta
int Ndof
Number of degrees of freedom in the fit.
double charge(void) const
map< bool, map< int, TH2I * > > dHistMap_TrackMCHitFraction_Theta
int column(int channel) const
const JObject * Get_FinalParticle_SourceObject(size_t locFinalParticleIndex) const
map< bool, map< int, TH2I * > > dHistMap_TrackNhits_Theta
const DKinematicData * Get_InitialParticle(void) const
const DVector3 & momentum(void) const
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerE_Theta
const DChargedTrackHypothesis * Get_BestFOM(void) const
TH2I * dHistMap_FCALShowerDeltaR_P
TH2I * dHistMap_FCALShowerDeltaD_DeltaT
int row(int channel) const
map< bool, map< int, TH2I * > > dHistMap_LowNDFTrackP_VertZ
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerPhi_Theta
DVector3 getPosition() const
map< bool, map< int, TH2I * > > dHistMap_TrackFOM_Theta
map< bool, map< DetectorSystem_t, TH2I * > > dHistMap_ShowerDeltaT_E
jerror_t GetIntersectionWithPlane(const DVector3 &origin, const DVector3 &norm, DVector3 &pos, double *s=NULL, double *t=NULL, double *var_t=NULL, DetectorSystem_t detector=SYS_NULL) const
TH2I * dHistMap_BCALShowerDeltaPhi_P
const DBCALShower * dBCALShower
map< bool, map< int, TH2I * > > dHistMap_LowNDFTrackPT_Phi