Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DParticleID.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DParticleID.h
4 // Created: Mon Feb 28 13:47:49 EST 2011
5 // Creator: staylor (on Linux ifarml1 2.6.18-128.el5 x86_64)
6 //
7 
8 #ifndef _DParticleID_
9 #define _DParticleID_
10 
11 #include <deque>
12 #include <map>
13 #include <memory>
14 #include <limits>
15 #include <cmath>
16 
17 #include <JANA/JObject.h>
18 #include <JANA/JFactory.h>
19 
20 #include <DVector3.h>
21 #include "HDGEOMETRY/DRootGeom.h"
23 #include <CDC/DCDCTrackHit.h>
24 #include <FDC/DFDCPseudo.h>
25 #include <BCAL/DBCALShower.h>
26 #include <BCAL/DBCALCluster.h>
27 #include <FCAL/DFCALShower.h>
29 #include <TOF/DTOFPoint.h>
30 #include <TOF/DTOFPaddleHit.h>
32 #include <TOF/DTOFPoint_factory.h>
33 #include <START_COUNTER/DSCHit.h>
34 #include <TRACKING/DTrackFitter.h>
35 #include <TRACKING/DTrackFinder.h>
37 #include <particleType.h>
40 #include <PID/DEventRFBunch.h>
41 #include <DIRC/DDIRCLut.h>
42 #include <DIRC/DDIRCTruthBarHit.h>
43 #include <DIRC/DDIRCPmtHit.h>
47 
48 #include <TROOT.h>
49 #include <TFile.h>
50 #include <TTree.h>
51 #include <TH1.h>
52 
53 #include <TMath.h>
54 
55 class DTrackTimeBased;
56 
57 class DParticleID:public jana::JObject
58 {
59  public:
61 
62  // Constructor and destructor
63  DParticleID(JEventLoop *loop); // require JEventLoop in constructor
64  virtual ~DParticleID(void){}
65 
66  class dedx_t
67  {
68  public:
69  dedx_t(double dE,double dE_amp,double dx, double p):dE(dE),dE_amp(dE_amp),dx(dx),p(p){dEdx = dE/dx; dEdx_amp=dE_amp/dx;}
70  double dE; // energy loss in layer
71  double dE_amp;
72  double dx; // path length in layer
73  double dEdx; // ratio dE/dx
74  double dEdx_amp;
75  double p; // momentum at this dE/dx measurement
76  };
77 
78  virtual jerror_t CalcDCdEdxChiSq(DChargedTrackHypothesis *locChargedTrackHypothesis) const = 0;
79 
80  jerror_t GetDCdEdxHits(const DTrackTimeBased *track, vector<dedx_t>& dEdxHits_CDC,vector<dedx_t>& dEdxHits_FDC) const;
81  jerror_t CalcDCdEdx(const DTrackTimeBased *locTrackTimeBased, double& locdEdx_FDC, double& locdx_FDC, double& locdEdx_CDC, double& locdEdx_CDC_amp, double& locdx_CDC, double& locdx_CDC_amp, unsigned int& locNumHitsUsedFordEdx_FDC, unsigned int& locNumHitsUsedFordEdx_CDC) const;
82  jerror_t CalcDCdEdx(const DTrackTimeBased *locTrackTimeBased, const vector<dedx_t>& locdEdxHits_CDC, const vector<dedx_t>& locdEdxHits_FDC, double& locdEdx_FDC, double& locdx_FDC, double& locdEdx_CDC, double& locdEdx_CDC_amp,double& locdx_CDC, double& locdx_CDC_amp, unsigned int& locNumHitsUsedFordEdx_FDC, unsigned int& locNumHitsUsedFordEdx_CDC) const;
83 
84  jerror_t CalcdEdxHit(const DVector3 &mom, const DVector3 &pos, const DCDCTrackHit *hit, dedx_t &dedx) const;
85  double CalcdXHit(const DVector3 &mom,const DVector3 &pos,
86  const DCoordinateSystem *wire) const;
87  jerror_t GroupTracks(vector<const DTrackTimeBased *> &tracks, vector<vector<const DTrackTimeBased*> >&grouped_tracks) const;
88 
89  void GetScintMPdEandSigma(double p,double M,double x,double &most_prob_dE, double &sigma_dE) const;
90  double GetMostProbabledEdx_DC(double p,double mass,double dx, bool locIsCDCFlag) const; //bool is false for FDC
91  double GetdEdxSigma_DC(double num_hits,double p,double mass, double mean_path_length, bool locIsCDCFlag) const; //bool is false for FDC
92 
93  virtual jerror_t GetdEdxMean_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locMeandEdx, Particle_t locPIDHypothesis) const=0;
94  virtual jerror_t GetdEdxSigma_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locSigmadEdx, Particle_t locPIDHypothesis) const=0;
95  virtual jerror_t GetdEdxMean_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locMeandEdx, Particle_t locPIDHypothesis) const=0;
96  virtual jerror_t GetdEdxSigma_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locSigmadEdx, Particle_t locPIDHypothesis) const=0;
97  virtual double GetProtondEdxMean_SC(double locBeta) const=0;
98  virtual double GetProtondEdxSigma_SC(double locBeta) const=0;
99  virtual double GetTimeVariance(DetectorSystem_t detector,
100  Particle_t particle,
101  double p) const=0;
102  virtual double GetEOverPMean(DetectorSystem_t detector,
103  double p) const=0;
104  virtual double GetEOverPSigma(DetectorSystem_t detector,
105  double p) const=0;
106 
107  /****************************************************** DISTANCE TO TRACK ******************************************************/
108 
109  // NOTE: For these functions, an initial guess for start time is expected as input so that out-of-time tracks can be skipped
110  bool Distance_ToTrack(const DReferenceTrajectory* rt, const DFCALShower* locFCALShower, double locInputStartTime, shared_ptr<DFCALShowerMatchParams>& locShowerMatchParams, DVector3* locOutputProjPos = nullptr, DVector3* locOutputProjMom = nullptr) const;
111  bool Distance_ToTrack(const DReferenceTrajectory* rt, const DBCALShower* locBCALShower, double locInputStartTime, shared_ptr<DBCALShowerMatchParams>& locShowerMatchParams, DVector3* locOutputProjPos = nullptr, DVector3* locOutputProjMom = nullptr) const;
112  bool Distance_ToTrack(const DReferenceTrajectory* rt, const DTOFPoint* locTOFPoint, double locInputStartTime, shared_ptr<DTOFHitMatchParams>& locTOFHitMatchParams, DVector3* locOutputProjPos = nullptr, DVector3* locOutputProjMom = nullptr) const;
113  bool Distance_ToTrack(const DReferenceTrajectory* rt, const DSCHit* locSCHit, double locInputStartTime, shared_ptr<DSCHitMatchParams>& locSCHitMatchParams, DVector3* locOutputProjPos = nullptr, DVector3* locOutputProjMom = nullptr) const;
114  bool ProjectTo_SC(const DReferenceTrajectory* rt, unsigned int locSCSector, double& locDeltaPhi, DVector3& locProjPos, DVector3& locProjMom, DVector3& locPaddleNorm, double& locPathLength, double& locFlightTime, double& locFlightTimeVariance, int& locSCPlane) const;
115 
116  double Distance_ToTrack(const DFCALShower *locFCALShower,
117  const DVector3 &locProjPos) const;
118  bool Distance_ToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DFCALShower* locFCALShower, double locInputStartTime, shared_ptr<DFCALShowerMatchParams>& locShowerMatchParams, DVector3* locOutputProjPos=nullptr, DVector3* locOutputProjMom=nullptr) const;
119  bool Distance_ToTrack(const vector<DTrackFitter::Extrapolation_t>&extrapolations, const DTOFPoint* locTOFPoint, double locInputStartTime,shared_ptr<DTOFHitMatchParams>& locTOFHitMatchParams, DVector3* locOutputProjPos=nullptr, DVector3* locOutputProjMom=nullptr) const;
120  bool Distance_ToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DSCHit* locSCHit, double locInputStartTime,shared_ptr<DSCHitMatchParams>& locSCHitMatchParams, DVector3* locOutputProjPos=nullptr, DVector3* locOutputProjMom=nullptr) const;
121  bool Distance_ToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DBCALShower* locBCALShower, double locInputStartTime,shared_ptr<DBCALShowerMatchParams>& locShowerMatchParams, DVector3* locOutputProjPos=nullptr, DVector3* locOutputProjMom=nullptr) const;
122 
123  /********************************************************** CUT MATCH DISTANCE **********************************************************/
124 
125  // NOTE: For these functions, an initial guess for start time is expected as input so that out-of-time tracks can be skipped
126  bool Cut_MatchDistance(const DReferenceTrajectory* rt, const DBCALShower* locBCALShower, double locInputStartTime, shared_ptr<DBCALShowerMatchParams>& locShowerMatchParams, DVector3 *locOutputProjPos = nullptr, DVector3 *locOutputProjMom = nullptr) const;
127  bool Cut_MatchDistance(const DReferenceTrajectory* rt, const DTOFPoint* locTOFPoint, double locInputStartTime, shared_ptr<DTOFHitMatchParams>& locTOFHitMatchParams, DVector3 *locOutputProjPos = nullptr, DVector3 *locOutputProjMom = nullptr) const;
128  bool Cut_MatchDistance(const DReferenceTrajectory* rt, const DSCHit* locSCHit, double locInputStartTime, shared_ptr<DSCHitMatchParams>& locSCHitMatchParams, bool locIsTimeBased, DVector3 *locOutputProjPos = nullptr, DVector3 *locOutputProjMom = nullptr) const;
129  bool Cut_MatchDistance(const DReferenceTrajectory* rt, const DFCALShower* locFCALShower, double locInputStartTime, shared_ptr<DFCALShowerMatchParams>& locShowerMatchParams, DVector3 *locOutputProjPos = nullptr, DVector3 *locOutputProjMom = nullptr) const;
130 
131  bool Cut_MatchDistance(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DBCALShower* locBCALShower, double locInputStartTime,shared_ptr<DBCALShowerMatchParams>& locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const;
132  bool Cut_MatchDistance(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DFCALShower* locFCALShower, double locInputStartTime,shared_ptr<DFCALShowerMatchParams>& locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const;
133  bool Cut_MatchDistance(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DTOFPoint* locTOFPoint, double locInputStartTime,shared_ptr<DTOFHitMatchParams>& locTOFHitMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const;
134  bool Cut_MatchDistance(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const DSCHit* locSCHit, double locInputStartTime,shared_ptr<DSCHitMatchParams>& locSCHitMatchParams, bool locIsTimeBased, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const;
135  bool Cut_MatchDIRC(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DDIRCPmtHit*> locDIRCHits, double locInputStartTime, Particle_t locPID, shared_ptr<DDIRCMatchParams>& locDIRCMatchParams, const vector<const DDIRCTruthBarHit*> locDIRCBarHits, map<shared_ptr<const DDIRCMatchParams>, vector<const DDIRCPmtHit*> >& locDIRCTrackMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const;
136 
137  /********************************************************** GET BEST MATCH **********************************************************/
138 
139  // Wrappers
140  bool Get_BestBCALMatchParams(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches, shared_ptr<const DBCALShowerMatchParams>& locBestMatchParams) const;
141  bool Get_BestSCMatchParams(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches, shared_ptr<const DSCHitMatchParams>& locBestMatchParams) const;
142  bool Get_BestTOFMatchParams(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches, shared_ptr<const DTOFHitMatchParams>& locBestMatchParams) const;
143  bool Get_BestFCALMatchParams(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches, shared_ptr<const DFCALShowerMatchParams>& locBestMatchParams) const;
144  bool Get_DIRCMatchParams(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches, shared_ptr<const DDIRCMatchParams>& locBestMatchParams) const;
145 
146  // Actual
147  shared_ptr<const DBCALShowerMatchParams> Get_BestBCALMatchParams(DVector3 locMomentum, vector<shared_ptr<const DBCALShowerMatchParams> >& locShowerMatchParams) const;
148  shared_ptr<const DSCHitMatchParams> Get_BestSCMatchParams(vector<shared_ptr<const DSCHitMatchParams> >& locSCHitMatchParams) const;
149  shared_ptr<const DTOFHitMatchParams> Get_BestTOFMatchParams(vector<shared_ptr<const DTOFHitMatchParams> >& locTOFHitMatchParams) const;
150  shared_ptr<const DFCALShowerMatchParams> Get_BestFCALMatchParams(vector<shared_ptr<const DFCALShowerMatchParams> >& locShowerMatchParams) const;
151 
152  /********************************************************** GET CLOSEST TO TRACK **********************************************************/
153 
154  // NOTE: an initial guess for start time is expected as input so that out-of-time hits can be skipped
155  bool Get_ClosestToTrack(const DReferenceTrajectory* rt, const vector<const DBCALShower*>& locBCALShowers, bool locCutFlag, double& locStartTime, shared_ptr<const DBCALShowerMatchParams>& locBestMatchParams, double* locStartTimeVariance = nullptr, DVector3* locBestProjPos = nullptr, DVector3* locBestProjMom = nullptr) const;
156  bool Get_ClosestToTrack(const DReferenceTrajectory* rt, const vector<const DTOFPoint*>& locTOFPoints, bool locCutFlag, double& locStartTime, shared_ptr<const DTOFHitMatchParams>& locBestMatchParams, double* locStartTimeVariance = nullptr, DVector3* locBestProjPos = nullptr, DVector3* locBestProjMom = nullptr) const;
157  bool Get_ClosestToTrack(const DReferenceTrajectory* rt, const vector<const DFCALShower*>& locFCALShowers, bool locCutFlag, double& locStartTime, shared_ptr<const DFCALShowerMatchParams>& locBestMatchParams, double* locStartTimeVariance = nullptr, DVector3* locBestProjPos = nullptr, DVector3* locBestProjMom = nullptr) const;
158  bool Get_ClosestToTrack(const DReferenceTrajectory* rt, const vector<const DSCHit*>& locSCHits, bool locIsTimeBased, bool locCutFlag, double& locStartTime, shared_ptr<const DSCHitMatchParams>& locBestMatchParams, double* locStartTimeVariance = nullptr, DVector3* locBestProjPos = nullptr, DVector3* locBestProjMom = nullptr) const;
159  const DTOFPaddleHit* Get_ClosestTOFPaddleHit_Horizontal(const DReferenceTrajectory* locReferenceTrajectory, const vector<const DTOFPaddleHit*>& locTOFPaddleHits, double locInputStartTime, double& locBestDeltaY, double& locBestDistance) const;
160  const DTOFPaddleHit* Get_ClosestTOFPaddleHit_Vertical(const DReferenceTrajectory* locReferenceTrajectory, const vector<const DTOFPaddleHit*>& locTOFPaddleHits, double locInputStartTime, double& locBestDeltaX, double& locBestDistance) const;
161 
162  // The following routines use extrapolations from the track
163  bool Get_ClosestToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DBCALShower*>& locBCALShowers, bool locCutFlag, double& locStartTime,shared_ptr<const DBCALShowerMatchParams>& locBestMatchParams, double* locStartTimeVariance=nullptr, DVector3* locBestProjPos=nullptr, DVector3* locBestProjMom=nullptr) const;
164  bool Get_ClosestToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DTOFPoint*>& locTOFPoints, bool locCutFlag, double& locStartTime, shared_ptr<const DTOFHitMatchParams>& locBestMatchParams, double* locStartTimeVariance=nullptr, DVector3* locBestProjPos=nullptr, DVector3* locBestProjMom=nullptr) const;
165  bool Get_ClosestToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DFCALShower*>& locFCALShowers, bool locCutFlag, double& locStartTime,shared_ptr<const DFCALShowerMatchParams>& locBestMatchParams, double* locStartTimeVariance=nullptr, DVector3* locBestProjPos=nullptr, DVector3* locBestProjMom=nullptr) const;
166  bool Get_ClosestToTrack(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DSCHit*>& locSCHits, bool locIsTimeBased, bool locCutFlag, double& locStartTime,shared_ptr<const DSCHitMatchParams>& locBestMatchParams, double* locStartTimeVariance=nullptr, DVector3* locBestProjPos=nullptr, DVector3* locBestProjMom=nullptr) const;
167  const DTOFPaddleHit* Get_ClosestTOFPaddleHit_Horizontal(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DTOFPaddleHit*>& locTOFPaddleHits, double locInputStartTime, double& locBestDeltaY, double& locBestDistance) const;
168  const DTOFPaddleHit* Get_ClosestTOFPaddleHit_Vertical(const vector<DTrackFitter::Extrapolation_t> &extrapolations, const vector<const DTOFPaddleHit*>& locTOFPaddleHits, double locInputStartTime, double& locBestDeltaX, double& locBestDistance) const;
169 
170 
171  /********************************************************** PREDICT HIT ELEMENT **********************************************************/
172 
173  bool PredictFCALHit(const DReferenceTrajectory *rt, unsigned int &row, unsigned int &col, DVector3 *intersection = nullptr) const;
174  bool PredictBCALWedge(const DReferenceTrajectory *rt, unsigned int &module,unsigned int &sector, DVector3 *intersection = nullptr) const;
175  bool PredictTOFPaddles(const DReferenceTrajectory *rt, unsigned int &hbar,unsigned int &vbar, DVector3 *intersection = nullptr) const;
176  unsigned int PredictSCSector(const DReferenceTrajectory* rt, DVector3* locOutputProjPos = nullptr, bool* locProjBarrelRegion = nullptr, double* locMinDPhi = nullptr) const;
177  unsigned int PredictSCSector(const DReferenceTrajectory* rt, double& locDeltaPhi, DVector3& locProjPos, DVector3& locProjMom, DVector3& locPaddleNorm, double& locPathLength, double& locFlightTime, double& locFlightTimeVariance, int& locSCPlane) const;
178 
179  unsigned int PredictSCSector(const vector<DTrackFitter::Extrapolation_t> &extrapolations, double& locDeltaPhi, DVector3& locProjPos, DVector3& locProjMom, DVector3& locPaddleNorm, double& locPathLength, double& locFlightTime, double& locFlightTimeVariance, int& locSCPlane) const;
180  unsigned int PredictSCSector(const vector<DTrackFitter::Extrapolation_t> &extrapolations, DVector3* locOutputProjPos=nullptr, bool* locProjBarrelRegion=nullptr, double* locMinDPhi=nullptr) const;
181  bool PredictFCALHit(const vector<DTrackFitter::Extrapolation_t>&extrapolations, unsigned int &row, unsigned int &col, DVector3 *intersection=nullptr) const;
182  bool PredictBCALWedge(const vector<DTrackFitter::Extrapolation_t>&extrapolations, unsigned int &module,unsigned int &sector, DVector3 *intersection=nullptr) const;
183  bool PredictTOFPaddles(const vector<DTrackFitter::Extrapolation_t>&extrapolations, unsigned int &hbar,unsigned int &vbar, DVector3 *intersection=nullptr) const;
184 
185  /************** Routines to get start time for tracking *****/
186  bool Get_StartTime(const vector<DTrackFitter::Extrapolation_t> &extrapolations,
187  const vector<const DFCALShower*>& FCALShowers,
188  double& StartTime) const;
189  bool Get_StartTime(const vector<DTrackFitter::Extrapolation_t> &extrapolations,
190  const vector<const DSCHit*>& SCHits,
191  double& StartTime) const;
192  bool Get_StartTime(const vector<DTrackFitter::Extrapolation_t> &extrapolations,
193  const vector<const DTOFPoint*>& TOFPoints,
194  double& StartTime) const;
195  bool Get_StartTime(const vector<DTrackFitter::Extrapolation_t> &extrapolations,
196  const vector<const DBCALShower*>& locBCALShowers,
197  double& StartTime) const;
198 
199  /********************************************************** MISCELLANEOUS **********************************************************/
200 
201  double Calc_BCALFlightTimePCorrelation(const DTrackingData* locTrack, DDetectorMatches* locDetectorMatches) const;
202  double Calc_FCALFlightTimePCorrelation(const DTrackingData* locTrack, DDetectorMatches* locDetectorMatches) const;
203  double Calc_TOFFlightTimePCorrelation(const DTrackingData* locTrack, DDetectorMatches* locDetectorMatches) const;
204  double Calc_SCFlightTimePCorrelation(const DTrackingData* locTrack, const DDetectorMatches* locDetectorMatches) const;
205 
206  double Calc_PropagatedRFTime(const DKinematicData* locKinematicData, const DEventRFBunch* locEventRFBunch) const;
207  double Calc_TimingChiSq(const DChargedTrackHypothesis* locChargedHypo, unsigned int &locNDF, double& locTimingPull) const;
208  double Calc_TimingChiSq(const DNeutralParticleHypothesis* locNeutralHypo, unsigned int &locNDF, double& locTimingPull) const;
209  void Calc_ChargedPIDFOM(DChargedTrackHypothesis* locChargedTrackHypothesis) const;
210 
211  unsigned int Get_CDCRingBitPattern(vector<const DCDCTrackHit*>& locCDCTrackHits) const;
212  unsigned int Get_FDCPlaneBitPattern(vector<const DFDCPseudo*>& locFDCPseudos) const;
213  void Get_CDCRings(unsigned int locBitPattern, set<int>& locCDCRings) const;
214  void Get_FDCPlanes(unsigned int locBitPattern, set<int>& locFDCPlanes) const;
215 
216  void Get_CDCNumHitRingsPerSuperlayer(int locBitPattern, map<int, int>& locNumHitRingsPerSuperlayer) const;
217  void Get_CDCNumHitRingsPerSuperlayer(const set<int>& locCDCRings, map<int, int>& locNumHitRingsPerSuperlayer) const;
218  void Get_FDCNumHitPlanesPerPackage(int locBitPattern, map<int, int>& locNumHitPlanesPerPackage) const;
219  void Get_FDCNumHitPlanesPerPackage(const set<int>& locFDCPlanes, map<int, int>& locNumHitPlanesPerPackage) const;
220 
221  double Get_CorrectedHitTime(const DTOFPoint* locTOFPoint,
222  const DVector3 &locProjPos) const;
223  double Get_CorrectedHitEnergy(const DTOFPoint* locTOFPoint,
224  const DVector3 &locProjPos) const;
225  double Get_CorrectedHitEnergy(const DSCHit* locSCHit,
226  const DVector3 &locProjPos) const;
227  double Get_CorrectedHitTime(const DSCHit* locSCHit,
228  const DVector3 &locProjPos) const;
229 
230  const DDIRCLut *Get_DIRCLut() const;
231 
232 
233  protected:
234  // gas material properties
238  double dDensity_FDC;
239  double dDensity_CDC;
240  double dA_CDC;
241  double dA_FDC;
242 
247 
248  double C_EFFECTIVE; // start counter light propagation speed
249  double ATTEN_LENGTH; // Start counter attenuation length
250  double OUT_OF_TIME_CUT; //for all matches
251 
252  vector<double> CDC_GAIN_DOCA_PARS; // params to correct for gas deterioration spring 2018
253 
254  // Start counter resolution parameters
260 
261  private:
262 
264  // Prohibit default constructor
265  DParticleID();
266 
267  // define bool in case there is no Start Counter in geometry (e.g. CPP)
268  bool START_EXIST = true;
269 
270  // start counter geometry parameters
271  double sc_leg_tcor;
272  double sc_angle_cor;
273  vector<vector<DVector3> >sc_dir; // direction vector in plane of plastic
274  vector<vector<DVector3> >sc_pos;
275  vector<vector<DVector3> >sc_norm;
276  double dSCdphi;
277  double dSCphi0;
278  // start counter calibration parameters
279  // Propagation time (pt) parameters
284  };
285  vector<double>sc_veff[3];
286  vector<double>sc_pt_yint[3];
287  vector<double>sc_pt_slope[3];
288  // Attenuation (attn) calibration paramerters
292  };
293  vector<double> sc_attn_A[2];
294  vector<double> sc_attn_B[2];
295  vector<double> sc_attn_C[2];
296 
297  // FCAL geometry
298  double dFCALz;
300 
301  // TOF calibration constants
302  // used to update hit energy & time when matching to un-matched, position-ill-defined bars
304  vector<double> propagation_speed;
305  //double TOF_HALFPADDLE;
309  double ONESIDED_PADDLE_MIDPOINT_MAG; //+/- this number for North/South
310  // time cut for cdc hits
312 
314 
318 
319  // DIRC LUT
321 };
322 
323 #endif // _DParticleID_
324 
virtual jerror_t CalcDCdEdxChiSq(DChargedTrackHypothesis *locChargedTrackHypothesis) const =0
double BCAL_PHI_CUT_PAR1
Definition: DParticleID.h:243
Definition: track.h:16
unsigned int PredictSCSector(const DReferenceTrajectory *rt, DVector3 *locOutputProjPos=nullptr, bool *locProjBarrelRegion=nullptr, double *locMinDPhi=nullptr) const
vector< double > sc_pt_slope[3]
Definition: DParticleID.h:287
unsigned int Get_FDCPlaneBitPattern(vector< const DFDCPseudo * > &locFDCPseudos) const
void Get_FDCPlanes(unsigned int locBitPattern, set< int > &locFDCPlanes) const
void Get_CDCRings(unsigned int locBitPattern, set< int > &locCDCRings) const
vector< double > sc_attn_A[2]
Definition: DParticleID.h:293
const DTOFPaddleHit * Get_ClosestTOFPaddleHit_Horizontal(const DReferenceTrajectory *locReferenceTrajectory, const vector< const DTOFPaddleHit * > &locTOFPaddleHits, double locInputStartTime, double &locBestDeltaY, double &locBestDistance) const
double BCAL_PHI_CUT_PAR2
Definition: DParticleID.h:243
double dA_FDC
Definition: DParticleID.h:241
vector< double > SC_BOUNDARY2
Definition: DParticleID.h:255
vector< double > SC_SECTION2_P0
Definition: DParticleID.h:257
The DTrackFitter class is a base class for different charged track fitting algorithms. It does not actually fit the track itself, but provides the interface and some common support features most algorthims will need to implement.
Definition: DTrackFitter.h:61
double TOF_CUT_PAR4
Definition: DParticleID.h:245
TVector3 DVector3
Definition: DVector3.h:14
double dA_CDC
Definition: DParticleID.h:240
vector< double > sc_veff[3]
Definition: DParticleID.h:285
vector< double > dSCCutPars_TimeBased
Definition: DParticleID.h:246
Double_t x[NCHANNELS]
Definition: st_tw_resols.C:39
double OUT_OF_TIME_CUT
Definition: DParticleID.h:250
double dTargetZCenter
Definition: DParticleID.h:313
virtual double GetProtondEdxSigma_SC(double locBeta) const =0
double sc_angle_cor
Definition: DParticleID.h:272
double dFCALz
Definition: DParticleID.h:298
vector< double > SC_BOUNDARY1
Definition: DParticleID.h:255
vector< double > CDC_GAIN_DOCA_PARS
Definition: DParticleID.h:252
bool ProjectTo_SC(const DReferenceTrajectory *rt, unsigned int locSCSector, double &locDeltaPhi, DVector3 &locProjPos, DVector3 &locProjMom, DVector3 &locPaddleNorm, double &locPathLength, double &locFlightTime, double &locFlightTimeVariance, int &locSCPlane) const
bool Cut_MatchDIRC(const vector< DTrackFitter::Extrapolation_t > &extrapolations, const vector< const DDIRCPmtHit * > locDIRCHits, double locInputStartTime, Particle_t locPID, shared_ptr< DDIRCMatchParams > &locDIRCMatchParams, const vector< const DDIRCTruthBarHit * > locDIRCBarHits, map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const
double Calc_SCFlightTimePCorrelation(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches) const
bool Get_DIRCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DDIRCMatchParams > &locBestMatchParams) const
double CalcdXHit(const DVector3 &mom, const DVector3 &pos, const DCoordinateSystem *wire) const
Definition: DParticleID.cc:568
virtual jerror_t GetdEdxMean_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locMeandEdx, Particle_t locPIDHypothesis) const =0
DetectorSystem_t
Definition: GlueX.h:15
vector< double > SC_SECTION4_P0
Definition: DParticleID.h:259
double Calc_PropagatedRFTime(const DKinematicData *locKinematicData, const DEventRFBunch *locEventRFBunch) const
virtual jerror_t GetdEdxMean_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locMeandEdx, Particle_t locPIDHypothesis) const =0
vector< double > SC_SECTION3_P0
Definition: DParticleID.h:258
JOBJECT_PUBLIC(DParticleID)
double dRhoZoverA_CDC
Definition: DParticleID.h:237
bool Get_StartTime(const vector< DTrackFitter::Extrapolation_t > &extrapolations, const vector< const DFCALShower * > &FCALShowers, double &StartTime) const
double CDC_TIME_CUT_FOR_DEDX
Definition: DParticleID.h:311
bool PredictFCALHit(const DReferenceTrajectory *rt, unsigned int &row, unsigned int &col, DVector3 *intersection=nullptr) const
double dKRhoZoverA_FDC
Definition: DParticleID.h:235
double dLnI_CDC
Definition: DParticleID.h:237
void Get_FDCNumHitPlanesPerPackage(int locBitPattern, map< int, int > &locNumHitPlanesPerPackage) const
double Get_CorrectedHitEnergy(const DTOFPoint *locTOFPoint, const DVector3 &locProjPos) const
bool Get_BestTOFMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DTOFHitMatchParams > &locBestMatchParams) const
void Calc_ChargedPIDFOM(DChargedTrackHypothesis *locChargedTrackHypothesis) const
DTOFPoint_factory * dTOFPointFactory
Definition: DParticleID.h:317
bool Get_BestSCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DSCHitMatchParams > &locBestMatchParams) const
Definition: DSCHit.h:14
double dKRhoZoverA_Scint
Definition: DParticleID.h:236
bool PredictTOFPaddles(const DReferenceTrajectory *rt, unsigned int &hbar, unsigned int &vbar, DVector3 *intersection=nullptr) const
double Calc_TOFFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
double dKRhoZoverA_CDC
Definition: DParticleID.h:237
void Get_CDCNumHitRingsPerSuperlayer(int locBitPattern, map< int, int > &locNumHitRingsPerSuperlayer) const
double dRhoZoverA_FDC
Definition: DParticleID.h:235
double FCAL_CUT_PAR2
Definition: DParticleID.h:244
unsigned int Get_CDCRingBitPattern(vector< const DCDCTrackHit * > &locCDCTrackHits) const
double Calc_FCALFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
vector< double > SC_SECTION2_P1
Definition: DParticleID.h:257
double Calc_BCALFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
const DDIRCLut * dDIRCLut
Definition: DParticleID.h:320
vector< double > SC_SECTION1_P0
Definition: DParticleID.h:256
vector< double > sc_attn_C[2]
Definition: DParticleID.h:295
double dDensity_CDC
Definition: DParticleID.h:239
vector< double > sc_pt_yint[3]
Definition: DParticleID.h:286
bool Get_BestFCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DFCALShowerMatchParams > &locBestMatchParams) const
bool Get_BestBCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DBCALShowerMatchParams > &locBestMatchParams) const
double GetMostProbabledEdx_DC(double p, double mass, double dx, bool locIsCDCFlag) const
Definition: DParticleID.cc:657
vector< double > dSCCutPars_WireBased
Definition: DParticleID.h:246
double dSCdphi
Definition: DParticleID.h:276
const DTOFPaddleHit * Get_ClosestTOFPaddleHit_Vertical(const DReferenceTrajectory *locReferenceTrajectory, const vector< const DTOFPaddleHit * > &locTOFPaddleHits, double locInputStartTime, double &locBestDeltaX, double &locBestDistance) const
double BCAL_PHI_CUT_PAR3
Definition: DParticleID.h:243
double dRhoZoverA_Scint
Definition: DParticleID.h:236
virtual double GetProtondEdxMean_SC(double locBeta) const =0
vector< double > SC_BOUNDARY3
Definition: DParticleID.h:255
double TOF_ATTEN_LENGTH
Definition: DParticleID.h:307
jerror_t GroupTracks(vector< const DTrackTimeBased * > &tracks, vector< vector< const DTrackTimeBased * > > &grouped_tracks) const
Definition: DParticleID.cc:310
bool Get_ClosestToTrack(const DReferenceTrajectory *rt, const vector< const DBCALShower * > &locBCALShowers, bool locCutFlag, double &locStartTime, shared_ptr< const DBCALShowerMatchParams > &locBestMatchParams, double *locStartTimeVariance=nullptr, DVector3 *locBestProjPos=nullptr, DVector3 *locBestProjMom=nullptr) const
vector< double > SC_SECTION1_P1
Definition: DParticleID.h:256
virtual ~DParticleID(void)
Definition: DParticleID.h:64
double GetdEdxSigma_DC(double num_hits, double p, double mass, double mean_path_length, bool locIsCDCFlag) const
Definition: DParticleID.cc:679
jerror_t CalcdEdxHit(const DVector3 &mom, const DVector3 &pos, const DCDCTrackHit *hit, dedx_t &dedx) const
Definition: DParticleID.cc:495
double FCAL_CUT_PAR1
Definition: DParticleID.h:244
bool Cut_MatchDistance(const DReferenceTrajectory *rt, const DBCALShower *locBCALShower, double locInputStartTime, shared_ptr< DBCALShowerMatchParams > &locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const
const DTOFGeometry * dTOFGeometry
Definition: DParticleID.h:303
double Calc_TimingChiSq(const DChargedTrackHypothesis *locChargedHypo, unsigned int &locNDF, double &locTimingPull) const
const DDIRCLut * Get_DIRCLut() const
jerror_t CalcDCdEdx(const DTrackTimeBased *locTrackTimeBased, double &locdEdx_FDC, double &locdx_FDC, double &locdEdx_CDC, double &locdEdx_CDC_amp, double &locdx_CDC, double &locdx_CDC_amp, unsigned int &locNumHitsUsedFordEdx_FDC, unsigned int &locNumHitsUsedFordEdx_CDC) const
Definition: DParticleID.cc:425
jerror_t GetDCdEdxHits(const DTrackTimeBased *track, vector< dedx_t > &dEdxHits_CDC, vector< dedx_t > &dEdxHits_FDC) const
Definition: DParticleID.cc:343
virtual double GetTimeVariance(DetectorSystem_t detector, Particle_t particle, double p) const =0
double TOF_CUT_PAR3
Definition: DParticleID.h:245
double TOF_E_THRESHOLD
Definition: DParticleID.h:308
virtual jerror_t GetdEdxSigma_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locSigmadEdx, Particle_t locPIDHypothesis) const =0
const DTrackFitter * fitter
Definition: DParticleID.h:316
dedx_t(double dE, double dE_amp, double dx, double p)
Definition: DParticleID.h:69
double TOF_CUT_PAR2
Definition: DParticleID.h:245
double C_EFFECTIVE
Definition: DParticleID.h:248
double FCAL_CUT_PAR3
Definition: DParticleID.h:244
virtual jerror_t GetdEdxSigma_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locSigmadEdx, Particle_t locPIDHypothesis) const =0
double dSCphi0
Definition: DParticleID.h:277
vector< vector< DVector3 > > sc_pos
Definition: DParticleID.h:274
vector< double > sc_attn_B[2]
Definition: DParticleID.h:294
double BCAL_Z_CUT
Definition: DParticleID.h:243
vector< vector< DVector3 > > sc_norm
Definition: DParticleID.h:275
vector< double > SC_SECTION3_P1
Definition: DParticleID.h:258
virtual double GetEOverPSigma(DetectorSystem_t detector, double p) const =0
double Get_CorrectedHitTime(const DTOFPoint *locTOFPoint, const DVector3 &locProjPos) const
double dDensity_FDC
Definition: DParticleID.h:238
double dHalfPaddle_OneSided
Definition: DParticleID.h:306
void GetScintMPdEandSigma(double p, double M, double x, double &most_prob_dE, double &sigma_dE) const
Definition: DParticleID.cc:622
const DFCALGeometry * dFCALGeometry
Definition: DParticleID.h:299
double ATTEN_LENGTH
Definition: DParticleID.h:249
const DTrackFinder * finder
Definition: DParticleID.h:315
double dLnI_Scint
Definition: DParticleID.h:236
bool Distance_ToTrack(const DReferenceTrajectory *rt, const DFCALShower *locFCALShower, double locInputStartTime, shared_ptr< DFCALShowerMatchParams > &locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const
Definition: DParticleID.cc:737
double dLnI_FDC
Definition: DParticleID.h:235
double sc_leg_tcor
Definition: DParticleID.h:271
vector< double > SC_SECTION4_P1
Definition: DParticleID.h:259
bool PredictBCALWedge(const DReferenceTrajectory *rt, unsigned int &module, unsigned int &sector, DVector3 *intersection=nullptr) const
double ONESIDED_PADDLE_MIDPOINT_MAG
Definition: DParticleID.h:309
vector< double > propagation_speed
Definition: DParticleID.h:304
virtual double GetEOverPMean(DetectorSystem_t detector, double p) const =0
vector< vector< DVector3 > > sc_dir
Definition: DParticleID.h:273
double TOF_CUT_PAR1
Definition: DParticleID.h:245
Particle_t
Definition: particleType.h:12
bool START_EXIST
Definition: DParticleID.h:268