00001 #ifndef TOFTRACK_H
00002 #define TOFTRACK_H
00003
00004 #include "ExtEvent/RecExtTrack.h"
00005 #include "RawDataProviderSvc/TofData.h"
00006 #include "TofRecEvent/RecTofTrack.h"
00007 #include "TofRecEvent/RecBTofCalHit.h"
00008 #include "TofRecEvent/RecETofCalHit.h"
00009
00010 const double adc_Cut = 10000.0;
00011 const double tdc_Cut = 100000.0;
00012 const double ztdc_Cut = 15.0;
00013 const double ztdc_Cut1 = 1.65*4.0;
00014 const double ztdc_Cut2 = 1.73*4.0;
00015 const double zadc_Cut = 25.0;
00016 const double ztdc_EtfCut = 15.0;
00017 const double mass[5] = { 0.00051100, 0.10566, 0.13957, 0.49368, 0.93827 };
00018 const double stripLength[12] = { 8.6, 9.1, 9.6, 10.1, 10.6, 11.1, 11.6, 12.1, 12.6, 13.1, 13.6, 14.1};
00019
00020 enum ExtTrackCase { InnerLayer,OuterLayer,DoubleLayer,EastEndcap,WestEndcap,EastEndcapMRPC, WestEndcapMRPC, NoHit};
00021
00022 class TofTrack{
00023 public:
00024 TofTrack( int run, int event );
00025 ~TofTrack();
00026
00027 int trackId() const { return m_trackId; }
00028 int tofTrackId() const { return m_tofTrackId; }
00029 int id1() const { return m_id1; }
00030 int id2() const { return m_id2; }
00031 int istrip1() const { return m_istrip1; }
00032 int istrip2() const { return m_istrip2; }
00033 int dstrip1() const { return m_delStrip1; }
00034 int dstrip2() const { return m_delStrip2; }
00035 unsigned int barrel() const { return m_barrel; }
00036 ExtTrackCase hitCase() const { return m_hitCase; }
00037 double p() const { return m_momentum; }
00038 double path() const { return m_path; }
00039 double path1() const { return m_path1; }
00040 double path2() const { return m_path2; }
00041 double zrhit1() const { return m_zrhit1; }
00042 double zrhit2() const { return m_zrhit2; }
00043 double errzrhit1() const { return m_errzr1; }
00044 double errzrhit2() const { return m_errzr2; }
00045 double xhit1() const { return m_xhit1; }
00046 double yhit1() const { return m_yhit1; }
00047 double xhit2() const { return m_xhit2; }
00048 double yhit2() const { return m_yhit2; }
00049 int kal(unsigned int i) const { return m_kal[i]; }
00050 double zr1(unsigned int i) const { return m_zr1[i]; }
00051 double zr2(unsigned int i) const { return m_zr2[i]; }
00052 double errzr1(unsigned int i) const { return m_ezr1[i]; }
00053 double errzr2(unsigned int i) const { return m_ezr2[i]; }
00054 std::vector<TofData*> tofData1() const { return m_tofData1; }
00055 std::vector<TofData*> tofData2() const { return m_tofData2; }
00056 int size1() const { return m_tofData1.size(); }
00057 int size2() const { return m_tofData2.size(); }
00058 int size3() const { return m_tofData3.size(); }
00059 int size4() const { return m_tofData4.size(); }
00060 double theta1() const { return m_theta1; }
00061 double theta2() const { return m_theta2; }
00062 double phi1() const { return m_phi1; }
00063 double phi2() const { return m_phi2; }
00064 unsigned int quality1() const { return m_quality1; }
00065 unsigned int quality2() const { return m_quality2; }
00066 unsigned int quality() const { return m_quality; }
00067
00068 int tofId1() const { return m_tofId1; }
00069 int tofId2() const { return m_tofId2; }
00070 int strip1() const { return m_strip1; }
00071 int strip2() const { return m_strip2; }
00072
00073 double ph11() const { return m_ph11; }
00074 double ph12() const { return m_ph12; }
00075 double ph21() const { return m_ph21; }
00076 double ph22() const { return m_ph22; }
00077 double ph1() const { return m_ph1; }
00078 double ph2() const { return m_ph2; }
00079 double ph() const { return m_ph; }
00080
00081 double tof11(unsigned int i) const { return m_tof11[i]; }
00082 double tof12(unsigned int i) const { return m_tof12[i]; }
00083 double tof21(unsigned int i) const { return m_tof21[i]; }
00084 double tof22(unsigned int i) const { return m_tof22[i]; }
00085 double tof1(unsigned int i) const { return m_tof1[i]; }
00086 double tof2(unsigned int i) const { return m_tof2[i]; }
00087 double tof(unsigned int i) const { return m_tof[i]; }
00088
00089 double qch1() const { return m_qch1; }
00090 double qch2() const { return m_qch2; }
00091 double qch3() const { return m_qch3; }
00092 double qch4() const { return m_qch4; }
00093 double adc1() const { return m_adc1; }
00094 double adc2() const { return m_adc2; }
00095 double adc3() const { return m_adc3; }
00096 double adc4() const { return m_adc4; }
00097 double tdc1() const { return m_tdc1; }
00098 double tdc2() const { return m_tdc2; }
00099 double tdc3() const { return m_tdc3; }
00100 double tdc4() const { return m_tdc4; }
00101
00102 double texpInner(unsigned int i) const { return m_texpInner[i]; }
00103 double texpOuter(unsigned int i) const { return m_texpOuter[i]; }
00104 double texp(unsigned int i) const { return m_texp[i]; }
00105
00106 double ztdc1() const { return m_ztdc1; }
00107 double ztdc2() const { return m_ztdc2; }
00108 double zadc1() const { return m_zadc1; }
00109 double zadc2() const { return m_zadc2; }
00110
00111 double estime() const { return m_estime; }
00112 double tdiff1() const { return m_tdiff1; }
00113 double tdiff2() const { return m_tdiff2; }
00114
00115 int t0Stat() const { return m_t0Stat; }
00116
00117 unsigned int flag() const { return m_flag; }
00118
00119 public:
00120 bool isNoHit() const { return m_hitCase==NoHit; }
00121 void setQuality( int qual ) { m_quality = qual; }
00122 void setQuality1( int qual1 ) { m_quality1 = qual1; }
00123 void setQuality2( int qual2 ) { m_quality2 = qual2; }
00124 void setFlag( unsigned int flag ) { m_flag = flag; }
00125
00126 void setExtTrack( RecExtTrack* extTrack, double costheta, double p[5], int kal[5], double t0, int t0Stat );
00127 void getMultiHit( TofTrack*& );
00128 void setTofData( TofDataMap tofDataMap );
00129 void tofDataAnalysis( TofData* tof, unsigned int iflag );
00130 void getTofData( TofData* tof, unsigned int iflag );
00131 void getTofDataEast( TofData* tof, unsigned int iflag );
00132 void getTofDataWest( TofData* tof, unsigned int iflag );
00133 void getTofDataNohit( unsigned int iflag );
00134 void getEtfData( TofData* tof, unsigned int iflag, unsigned int qual );
00135 void match( bool forCalibration, std::vector<int> deadId, std::vector<TofTrack*>*& tofTrackVec );
00136 void findTofDataBarrel( std::vector<TofData*> tofDataVec1, std::vector<TofData*> tofDataVec2, double zrhit, unsigned int iflag, std::vector<TofTrack*>*& tofTrackVec );
00137 TofData* chooseTofData( std::vector<TofData*> tofDataVec, double zrhit );
00138 TofData* compareTofData( TofData* tofData1, TofData* tofData2, double zrhit );
00139 void findTofDataEndcap( std::vector<TofData*> tofDataVec1, std::vector<TofData*> tofDataVec2, double zr1[5] );
00140 TofData* chooseTofDataEndcap( std::vector<TofData*> tofDataVec, double zr1[5] );
00141 TofData* compareTofDataEndcap( TofData* tofData1, TofData* tofData2 );
00142 void findEtfData( std::vector<TofData*> tofDataVec1, std::vector<TofData*> tofDataVec2, std::vector<TofData*> tofDataVec3, double zrhit, unsigned int iflag );
00143 TofData* chooseEtfData1( std::vector<TofData*> tofDataVec, double zrhit );
00144 TofData* chooseEtfData2( std::vector<TofData*> tofDataVec, double zrhit );
00145
00146
00147 void tofDataStudy();
00148
00149 void setCalibration();
00150
00151 void convert2RecTofTrackCol( RecTofTrackCol* recTofTrackCol );
00152 void buildRecTofTrack( RecTofTrack* track, int layerorend );
00153 void setRecTofTrack( RecTofTrack* track, int layerorend );
00154
00155 void convert2RecBTofCalHitColBarrel( int runNumber, int eventNumber, RecBTofCalHitCol* btofCalHitCol, std::string calibData );
00156 void convert2RecETofCalHitCol( int runNumber, int eventNumber, RecETofCalHitCol* etofCalHitCol, std::string calibData );
00157 void convert2RecBTofCalHitColETF( int runNumber, int eventNumber, RecBTofCalHitCol* btofCalHitCol, std::string calibData );
00158
00159 void qualityAnalysis();
00160
00161 private:
00162 int m_run, m_event;
00163 int m_trackId;
00164 int m_tofTrackId;
00165 int m_id1, m_id2, m_istrip1, m_istrip2;
00166 int m_tofId1, m_tofId2, m_strip1, m_strip2;
00167 int m_delStrip1, m_delStrip2;
00168 unsigned int m_barrel;
00169 ExtTrackCase m_hitCase;
00170 double m_momentum;
00171 double m_path, m_path1, m_path2;
00172 double m_zrhit1, m_errzr1, m_zrhit2, m_errzr2;
00173 double m_xhit1, m_yhit1, m_xhit2, m_yhit2;
00174 int m_kal[5];
00175 double m_zr1[5], m_ezr1[5], m_zr2[5], m_ezr2[5];
00176 std::vector<TofData*> m_tofData1;
00177 std::vector<TofData*> m_tofData2;
00178 std::vector<TofData*> m_tofData3;
00179 std::vector<TofData*> m_tofData4;
00180 std::vector<TofData*> m_tofData5;
00181 std::vector<TofData*> m_tofData6;
00182 unsigned int m_quality1, m_quality2;
00183 unsigned int m_quality;
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 double m_theta1, m_theta2, m_phi1, m_phi2;
00195
00196 double m_ph11, m_ph12, m_tof11[5], m_tof12[5];
00197 double m_ph21, m_ph22, m_tof21[5], m_tof22[5];
00198 double m_ph1, m_ph2, m_ph;
00199 double m_tof1[5], m_tof2[5], m_tof[5];
00200
00201 double m_texp[5], m_texpInner[5], m_texpOuter[5];
00202
00203 double m_sigma11, m_sigma12, m_sigma21, m_sigma22;
00204 double m_sigma1, m_sigma2, m_sigma;
00205
00206 double m_qch1, m_qch2, m_qch3, m_qch4;
00207 double m_adc1, m_adc2, m_adc3, m_adc4;
00208 double m_tdc1, m_tdc2, m_tdc3, m_tdc4;
00209
00210 double m_ztdc1, m_ztdc2, m_zadc1, m_zadc2;
00211
00212 double m_estime, m_tdiff1, m_tdiff2;
00213
00214 int m_t0Stat;
00215
00216 unsigned m_flag;
00217
00218 };
00219
00220 typedef std::vector<TofTrack*> TofTrackVec;
00221
00222 #endif // TOFTRACK_H