5 using namespace evt::rec;
9 vector<double> GetTOF_scint_fitExtrapolated_xy(
const RecEvent& recEvent,
10 const Track& track,
const int& TOF_scint_id,
11 const det::TOFWall& TOFwall,
12 const det::MagneticFieldTracker& tracker,
19 cerr<<
"\nReached till GetTOF_scint_fitExtrapolated_xy().";
20 cerr<<
"\nNumber of points on track in the MTPC = "<<track.GetNumberOfClusters(TrackConst::eMTPC)<<endl;
23 const utl::Point& last_point_on_track = track.GetLastPointOnTrack();
24 vector <utl::Point> clusters;
30 for (ClusterIndexIterator ClusterIter = track.ClustersEnd(); ClusterIter != track.ClustersBegin(); --ClusterIter)
32 if (clusters.size() > 9)
35 if (iPoint == 0) --ClusterIter;
39 cerr<<
"\nFor iPoint = "<<iPoint;
41 const Cluster& cluster = recEvent.Get(*ClusterIter);
42 clusters.push_back(cluster.GetPosition());
46 cerr<<
": "<<cluster.GetPosition().GetX()<<
", "<<cluster.GetPosition().GetY()<<
", "<<cluster.GetPosition().GetZ();
48 if (last_point_on_track == cluster.GetPosition())
49 cerr<<
". Found last point on track, corresponding to iPoint = "<<iPoint;
54 TGraph * graph_track_XZ =
new TGraph(clusters.size());
55 TGraph * graph_track_YZ =
new TGraph(clusters.size());
56 double largest_gap_in_MTPCtrk = 0;
57 for (
unsigned int iclust = 0; iclust < clusters.size(); iclust++)
59 graph_track_XZ->SetPoint((
int)iclust, clusters.at(iclust).GetZ(), clusters.at(iclust).GetX());
60 graph_track_YZ->SetPoint((
int)iclust, clusters.at(iclust).GetZ(), clusters.at(iclust).GetY());
62 if (iclust < clusters.size() - 1)
64 double cluster_diff_x = clusters[iclust].GetX() - clusters[iclust+1].GetX();
65 double cluster_diff_y = clusters[iclust].GetY() - clusters[iclust+1].GetY();
66 double cluster_diff_z = clusters[iclust].GetZ() - clusters[iclust+1].GetZ();
67 double cluster_separation = sqrt(cluster_diff_x*cluster_diff_x + cluster_diff_y*cluster_diff_y + cluster_diff_z*cluster_diff_z);
70 cout<<
"\ncluster_separation = "<<cluster_separation;
72 if (largest_gap_in_MTPCtrk < cluster_separation)
73 largest_gap_in_MTPCtrk = cluster_separation;
77 cout<<
"\nlargest_gap_in_MTPCtrk = "<<largest_gap_in_MTPCtrk<<endl;
80 TF1 * lin_fit_XZ =
new TF1(
"track_XZ",
"[0]*x+[1]", 650, 830);
81 TF1 * lin_fit_YZ =
new TF1(
"track_XZ",
"[0]*x+[1]", 650, 830);
83 graph_track_XZ->Fit(lin_fit_XZ,
"Q");
84 graph_track_YZ->Fit(lin_fit_YZ,
"Q");
91 const det::TOFScintillator& Iscint = TOFwall.GetScintillator(TOF_scint_id);
92 double extrapolationPosition = Iscint.GetCenterPosition().GetZ() - 2.3/2;
93 double fitX = lin_fit_XZ->Eval(extrapolationPosition);
94 double fitY = lin_fit_YZ->Eval(extrapolationPosition);
98 utl::Vector stopMomentum;
99 utl::Point stopPosition;
100 tracker.TrackToZ(extrapolationPosition, track.GetCharge(), track.GetFirstPointOnTrack(), track.GetMomentum(), stopPosition, stopMomentum);
101 double TOFx = stopPosition.GetX();
102 double TOFy = stopPosition.GetY();
104 delete graph_track_XZ;
105 delete graph_track_YZ;
109 vector<double> XY = {fitX, fitY, TOFx, TOFy, largest_gap_in_MTPCtrk};
117 int GetClusterFitExtrapolatedTOFPixelID(
const det::TOFWall& TOFwall,
118 const RecEvent& recEvent,
121 const bool& debug =
false)
125 cerr<<
"\n\nNumber of points on track in the MTPC = "<<track.GetNumberOfClusters(TrackConst::eMTPC)<<endl;
128 const utl::Point& last_point_on_track = track.GetLastPointOnTrack();
129 vector<Point> clusters;
134 for (ClusterIndexIterator ClusterIter = track.ClustersEnd(); ClusterIter != track.ClustersBegin(); --ClusterIter)
136 if (clusters.size() > 9)
140 cerr<<
"\nClusterIter = "<<*ClusterIter;
142 if (iPoint == 0) --ClusterIter;
146 cerr<<
"\nFor iPoint = "<<iPoint;
148 const Cluster& cluster = recEvent.Get(*ClusterIter);
149 clusters.push_back(cluster.GetPosition());
153 cerr<<
": "<<cluster.GetPosition().GetX()<<
", "<<cluster.GetPosition().GetY()<<
", "<<cluster.GetPosition().GetZ();
155 if (last_point_on_track == cluster.GetPosition())
156 cerr<<
". Found last point on track, corresponding to iPoint = "<<iPoint;
160 if (debug ==
true) cerr<<
"\n";
188 TGraph *graph_track_XZ =
new TGraph(clusters.size());
189 TGraph *graph_track_YZ =
new TGraph(clusters.size());
190 for(
unsigned int iclust = 0; iclust < clusters.size(); iclust++)
192 graph_track_XZ->SetPoint((
int)iclust, clusters.at(iclust).GetZ(), clusters.at(iclust).GetX());
193 graph_track_YZ->SetPoint((
int)iclust, clusters.at(iclust).GetZ(), clusters.at(iclust).GetY());
195 TF1 *lin_fit_XZ =
new TF1(
"track_XZ",
"[0]*x+[1]", 650, 830);
196 TF1 *lin_fit_YZ =
new TF1(
"track_XZ",
"[0]*x+[1]", 650, 830);
198 graph_track_XZ->Fit(lin_fit_XZ,
"Q");
199 graph_track_YZ->Fit(lin_fit_YZ,
"Q");
208 vector<int> vTOFHitIndex;
209 vector<double> vTOF_pixel_Z;
211 for(
int hitindex = 1; hitindex <= 891; ++hitindex)
213 const det::TOFScintillator& Iscint = TOFwall.GetScintillator(hitindex);
214 double extrapolationPositionZ = Iscint.GetCenterPosition().GetZ() - 2.3/2;
215 double extrapolationPositionX = lin_fit_XZ->Eval(extrapolationPositionZ);
216 double extrapolationPositionY = lin_fit_YZ->Eval(extrapolationPositionZ);
218 if (extrapolationPositionX < Iscint.GetCenterPosition().GetX()-Iscint.GetWidth()/2.)
continue;
219 if (extrapolationPositionX > Iscint.GetCenterPosition().GetX()+Iscint.GetWidth()/2.)
continue;
220 if (extrapolationPositionY < Iscint.GetCenterPosition().GetY()-3.4/2)
continue;
221 if (extrapolationPositionY > Iscint.GetCenterPosition().GetY()+3.4/2)
continue;
225 vTOFHitIndex.push_back(hitindex);
226 vTOF_pixel_Z.push_back(extrapolationPositionZ);
230 delete graph_track_XZ;
231 delete graph_track_YZ;
241 else if (nHasTOF == 1)
243 TOF_pixel_Z = vTOF_pixel_Z[0];
244 return vTOFHitIndex[0];
258 int GetBFieldExtrapolatedTOFPixelID(
const det::TOFWall& TOFwall,
259 const det::MagneticFieldTracker& tracker,
260 const utl::Point& firstPointOnTrack,
261 const utl::Vector& TrkMomentum,
265 vector<int> vTOFHitIndex;
267 for(
int hitindex = 1; hitindex <= 891; ++hitindex)
269 const det::TOFScintillator& Iscint = TOFwall.GetScintillator(hitindex);
270 double extrapolationPositionZ = Iscint.GetCenterPosition().GetZ() - 2.3/2;
273 utl::Vector stopMomentum;
274 utl::Point stopPosition;
276 tracker.TrackToZ(extrapolationPositionZ, track_q, firstPointOnTrack, TrkMomentum, stopPosition, stopMomentum);
277 double extrapolationPositionX = stopPosition.GetX();
278 double extrapolationPositionY = stopPosition.GetY();
280 if (extrapolationPositionX < Iscint.GetCenterPosition().GetX()-Iscint.GetWidth()/2.)
continue;
281 if (extrapolationPositionX > Iscint.GetCenterPosition().GetX()+Iscint.GetWidth()/2.)
continue;
282 if (extrapolationPositionY < Iscint.GetCenterPosition().GetY()-3.4/2)
continue;
283 if (extrapolationPositionY > Iscint.GetCenterPosition().GetY()+3.4/2)
continue;
287 vTOFHitIndex.push_back(hitindex);
294 else if (nHasTOF == 1)
295 return vTOFHitIndex[0];