Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DTrackFinder.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DTrackFinder.h
4 // Created: Fri Aug 15 09:43:08 EDT 2014
5 // Creator: staylor (on Linux ifarm1102 2.6.32-220.7.1.el6.x86_64 x86_64)
6 //
7 
8 #ifndef _DTrackFinder_
9 #define _DTrackFinder_
10 
11 #include <JANA/jerror.h>
12 #include "DVector3.h"
13 #include "TH1F.h"
14 #include "TH1I.h"
15 #include "FDC/DFDCPseudo.h"
16 #include "CDC/DCDCTrackHit.h"
17 #include "CDC/DCDCWire.h"
18 #include "DMatrixSIMD.h"
19 
20 #include <vector>
21 
22 class DTrackFinder:public jana::JObject{
23  public:
25 
26  DTrackFinder(); // require JEventLoop in constructor
27  virtual ~DTrackFinder();
28 
34  };
35 
36  class fdc_hit_t{
37  public:
38  fdc_hit_t(const DFDCPseudo *hit=NULL,bool used=false):
39  hit(hit),used(used){}
40  const DFDCPseudo *hit;
41  bool used;
42  };
43 
45  public:
46  fdc_segment_t(vector<const DFDCPseudo *>&input_hits,
47  bool matched=false){
48  for (unsigned int i=0;i<input_hits.size();i++){
49  this->hits.push_back(input_hits[i]);
50  }
51  this->S=FindStateVector();
52  this->matched=matched;
53  };
55 
56  DMatrix4x1 FindStateVector(void) const;
57 
58  bool matched;
60  vector<const DFDCPseudo *>hits;
61 
62  };
63 
64  class cdc_hit_t{
65  public:
66  cdc_hit_t(const DCDCTrackHit *hit=NULL,bool used=false):
67  hit(hit),used(used){}
68  const DCDCTrackHit *hit;
69  bool used;
70  };
71 
73  public:
74  cdc_segment_t(vector<const DCDCTrackHit *>&input_hits,const DVector3 &dir,
75  bool matched=false){
76  for (unsigned int i=0;i<input_hits.size();i++){
77  this->hits.push_back(input_hits[i]);
78  }
79  this->dir=dir;
80  this->matched=matched;
81  };
83 
84  bool matched;
86  vector<const DCDCTrackHit *>hits;
87 
88  };
89 
90  class cdc_track_t{
91  public:
92  cdc_track_t(vector<const DCDCTrackHit *>myhits){
93  for (unsigned int i=0;i<myhits.size();i++){
94  if (myhits[i]->is_stereo)this->stereo_hits.push_back(myhits[i]);
95  else this->axial_hits.push_back(myhits[i]);
96  }
97  };
99 
100  jerror_t FindStateVector(bool IsCosmics=false);
101 
102  vector<const DCDCTrackHit *>axial_hits;
103  vector<const DCDCTrackHit *>stereo_hits;
105  double z; // z-position at which S is reported
107 
108  };
109 
110 
111  void Reset(void);
112  void AddHit(const DCDCTrackHit *hit);
113  void AddHit(const DFDCPseudo *hit);
114  bool FindFDCSegments(void);
115  bool LinkFDCSegments(void);
116  bool FindAxialSegments(void);
117  bool LinkCDCSegments(void);
118  bool MatchCDCHit(const DVector3 &vhat,const DVector3 &pos0,
119  const DCDCTrackHit *hit, double cut);
120  bool MatchCDCStereoHit(const DVector3 &tdir,const DVector3 &t0,
121  const DCDCTrackHit *hit);
122 
123  const vector<cdc_track_t>&GetCDCTracks(void) const {return cdc_tracks;};
124  const vector<fdc_segment_t>&GetFDCTracks(void) const {return fdc_tracks;};
125 
126  double FindDoca(double z,const DMatrix4x1 &S,const DVector3 &wdir,
127  const DVector3 &origin,DVector3 *poca=NULL) const;
128  double FindDoca(const DVector3 &pos1,const DVector3 &mom1,
129  const DVector3 &pos2,const DVector3 &mom2,
130  DVector3 *poca=NULL) const;
131  bool FindIntersectionsWithCylinder(double R,const DVector3 &dir,
132  const DVector3 &pos,DVector3 &out1,
133  DVector3 &out2) const;
134  bool FindIntersectionWithPlane(const DVector3 &origin,const DVector3 &norm,
135  const DVector3 &pos,const DVector3 &dir,
136  DVector3 &outpos) const;
137 
138 
139  private:
140 
143  vector<cdc_hit_t>axial_hits;
144  vector<cdc_hit_t>stereo_hits;
145  vector<cdc_segment_t>axial_segments;
146  vector<cdc_track_t>cdc_tracks;
147 
148  vector<fdc_hit_t>fdc_hits;
149  vector<fdc_segment_t>fdc_segments[4];
150  vector<fdc_segment_t>fdc_tracks;
151 
154 };
155 
156 #endif // _DTrackFinder_
157 
TH1F * hCDCMatch_Axial
Definition: DTrackFinder.h:141
virtual ~DTrackFinder()
Definition: DTrackFinder.cc:61
const DCDCTrackHit * hit
Definition: DTrackFinder.h:68
cdc_track_t(vector< const DCDCTrackHit * >myhits)
Definition: DTrackFinder.h:92
void AddHit(const DCDCTrackHit *hit)
Definition: DTrackFinder.cc:98
bool FindIntersectionWithPlane(const DVector3 &origin, const DVector3 &norm, const DVector3 &pos, const DVector3 &dir, DVector3 &outpos) const
vector< const DCDCTrackHit * > hits
Definition: DTrackFinder.h:86
TH1I * hFDCLayerRaw
Definition: DTrackFinder.h:142
cdc_hit_t(const DCDCTrackHit *hit=NULL, bool used=false)
Definition: DTrackFinder.h:66
TVector3 DVector3
Definition: DVector3.h:14
vector< const DFDCPseudo * > hits
Definition: DTrackFinder.h:60
JOBJECT_PUBLIC(DTrackFinder)
vector< cdc_track_t > cdc_tracks
Definition: DTrackFinder.h:146
bool FindFDCSegments(void)
vector< const DCDCTrackHit * > axial_hits
Definition: DTrackFinder.h:102
cdc_segment_t(vector< const DCDCTrackHit * > &input_hits, const DVector3 &dir, bool matched=false)
Definition: DTrackFinder.h:74
const vector< cdc_track_t > & GetCDCTracks(void) const
Definition: DTrackFinder.h:123
bool MatchCDCStereoHit(const DVector3 &tdir, const DVector3 &t0, const DCDCTrackHit *hit)
const DFDCPseudo * hit
Definition: DTrackFinder.h:40
vector< cdc_hit_t > axial_hits
Definition: DTrackFinder.h:143
class DFDCPseudo: definition for a reconstructed point in the FDC
Definition: DFDCPseudo.h:74
fdc_segment_t(vector< const DFDCPseudo * > &input_hits, bool matched=false)
Definition: DTrackFinder.h:46
vector< cdc_hit_t > stereo_hits
Definition: DTrackFinder.h:144
bool LinkFDCSegments(void)
TH1I * hFDCLayer
Definition: DTrackFinder.h:142
const vector< fdc_segment_t > & GetFDCTracks(void) const
Definition: DTrackFinder.h:124
TH1F * hCDCMatch_Stereo
Definition: DTrackFinder.h:141
TH1F * hCDCMatch_PairD
Definition: DTrackFinder.h:141
vector< fdc_segment_t > fdc_tracks
Definition: DTrackFinder.h:150
fdc_hit_t(const DFDCPseudo *hit=NULL, bool used=false)
Definition: DTrackFinder.h:38
vector< fdc_segment_t > fdc_segments[4]
Definition: DTrackFinder.h:149
vector< fdc_hit_t > fdc_hits
Definition: DTrackFinder.h:148
bool LinkCDCSegments(void)
bool MatchCDCHit(const DVector3 &vhat, const DVector3 &pos0, const DCDCTrackHit *hit, double cut)
#define S(str)
Definition: hddm-c.cpp:84
DMatrix4x1 FindStateVector(void) const
jerror_t FindStateVector(bool IsCosmics=false)
void Reset(void)
Definition: DTrackFinder.cc:66
double CDC_MATCH_RADIUS
Definition: DTrackFinder.h:153
double CDC_MATCH_PHI
Definition: DTrackFinder.h:153
bool FindAxialSegments(void)
double CDC_COSMIC_MATCH_PHI
Definition: DTrackFinder.h:153
bool FindIntersectionsWithCylinder(double R, const DVector3 &dir, const DVector3 &pos, DVector3 &out1, DVector3 &out2) const
vector< cdc_segment_t > axial_segments
Definition: DTrackFinder.h:145
TDirectory * dir
Definition: bcal_hist_eff.C:31
double FindDoca(double z, const DMatrix4x1 &S, const DVector3 &wdir, const DVector3 &origin, DVector3 *poca=NULL) const
vector< const DCDCTrackHit * > stereo_hits
Definition: DTrackFinder.h:103
TH1I * hFDCLayerFirst
Definition: DTrackFinder.h:142