00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #ifndef STTOFRMATCHMAKER_HH
00067 #define STTOFRMATCHMAKER_HH
00068 #include "StMaker.h"
00069 #include "StThreeVectorD.hh"
00070
00071 #define VHRBIN2PS 24.4140625 // Very High resolution mode, pico-second per bin
00072
00073 #define HRBIN2PS 97.65625 // High resolution mode, pico-second per bin
00074
00075
00076 #include <string>
00077 #include <vector>
00078 #ifndef ST_NO_NAMESPACES
00079 using std::string;
00080 using std::vector;
00081 #endif
00082
00083 class StEvent;
00084 class StTrack;
00085 class StGlobalTrack;
00086 class StHelix;
00087 #include "StThreeVectorD.hh"
00088 class StTrackGeometry;
00089 class StDcaGeometry;
00090 #include "StTofUtil/StSortTofRawData.h"
00091 class StTofINLCorr;
00092 class StTofrGeometry;
00093 class StTofCollection;
00094 class StTofCellCollection;
00095 class StTofRawDataCollection;
00096 class StTofDataCollection;
00097 class StSPtrVecTofData;
00098 class StTofrDaqMap;
00099 class TH1D;
00100 class TH2D;
00101 class TTree;
00102
00103 #if !defined(ST_NO_TEMPLATE_DEF_ARGS) || defined(__CINT__)
00104 typedef vector<Int_t> IntVec;
00105 typedef vector<Double_t> DoubleVec;
00106 #else
00107 typedef vector<Int_t, allocator<Int_t>> IntVec;
00108 typedef vector<Double_t, allocator<Double_t>> DoubleVec;
00109 #endif
00110
00111 class StTofrMatchMaker : public StMaker {
00112 public:
00113 StTofrMatchMaker(const Char_t *name="tofrMatch");
00114 ~StTofrMatchMaker();
00115
00116
00117 Int_t Init();
00118 Int_t InitRun(Int_t);
00119 Int_t FinishRun(Int_t);
00120 Int_t Make();
00121 Int_t Finish();
00122
00123 void setCreateHistoFlag(Bool_t histos=kTRUE);
00124 void setCreateTreeFlag(Bool_t tree=kTRUE);
00125 void setOuterTrackGeometry();
00126 void setStandardTrackGeometry();
00127 void setValidAdcRange(Int_t, Int_t);
00128 void setValidTdcRange(Int_t, Int_t);
00129 void setMinHitsPerTrack(Int_t);
00130 void setMinFitPointsPerTrack(Int_t);
00131 void setMinFitPointsOverMax(Float_t);
00132 void setMaxDCA(Float_t);
00133 void setHistoFileName(Char_t*);
00134 void setNtupleFileName(Char_t*);
00135 void setSaveGeometry(Bool_t geomSave=kFALSE);
00136
00137 Int_t processEventYear2to4();
00138 Int_t processEventYear5();
00139 Int_t processEventYear8();
00140
00141 private:
00142 StTrackGeometry* trackGeometry(StTrack*);
00143 Int_t getTofData(StTofCollection*);
00144 Int_t storeMatchData(StTofCellCollection*, StTofCollection*);
00145
00146 Bool_t strobeEvent(StSPtrVecTofData&);
00147 void bookHistograms();
00148 void writeHistogramsToFile();
00149
00150 Bool_t validAdc(Float_t const);
00151 Bool_t validTdc(Float_t const);
00152 Bool_t validEvent(StEvent *);
00153 Bool_t validTrack(StTrack*);
00154 Bool_t validTrackRun8(StGlobalTrack*);
00155 Bool_t validTofTrack(StTrack*);
00156
00157
00158
00159
00160
00161
00162 float getINLCorr(int boardId, int tdcChanId);
00163
00164 public:
00165 Bool_t doPrintMemoryInfo;
00166 Bool_t doPrintCpuInfo;
00167
00168 private:
00169 static const Int_t mDAQOVERFLOW;
00170 static const Int_t mNTOFP;
00171 static const Int_t mNPVPD;
00172 static const Int_t mNTOFR;
00173 static const Int_t mNTOFR5;
00174
00175
00176 static const Int_t mNTOF;
00177 static const Int_t mNModule;
00178 static const Int_t mNCell;
00179 static const Int_t mNVPD;
00180
00181 static const Int_t mEastVpdTrayId;
00182 static const Int_t mWestVpdTrayId;
00183
00184 static const Int_t mNValidTrays_Run3;
00185 static const Int_t mNValidTrays_Run4;
00186 static const Int_t mNValidTrays_Run5;
00187 static const Int_t mNValidTrays_Run6;
00188 static const Int_t mNValidTrays_Run7;
00189 static const Int_t mNValidTrays_Run8;
00190
00191
00192 static const Int_t mTdigBoard;
00193 static const Int_t mTdcOnBoard;
00194 static const Int_t mTdcChannel;
00195
00196 Float_t mWidthPad;
00197 vector<Float_t> mTofrAdc;
00198 vector<Float_t> mTofrTdc;
00199 vector<Float_t> mPvpdAdc;
00200 vector<Float_t> mPvpdAdcLoRes;
00201 vector<Float_t> mPvpdTdc;
00202
00203 vector<Float_t> mPvpdToT;
00204 IntVec mTofr5LdChan;
00205 IntVec mTofr5LdTdc;
00206 IntVec mTofr5TrChan;
00207 IntVec mTofr5TrTdc;
00208 vector<Float_t> mTofr5Tdc;
00209 vector<Float_t> mTofr5ToT;
00210
00211
00212
00213
00214
00215 IntVec mStrobeTdcMin;
00216 IntVec mStrobeTdcMax;
00217 DoubleVec mPedTOFr;
00218
00219 StEvent *mEvent;
00220 StTofrGeometry *mTofrGeom;
00221 StTofrDaqMap *mDaqMap;
00222 StSortTofRawData *mSortTofRawData;
00223
00224 StTofINLCorr *mTofINLCorr;
00225
00226 Bool_t mHisto;
00227 Bool_t mSaveTree;
00228
00229 Bool_t mYear2;
00230 Bool_t mYear3;
00231 Bool_t mYear4;
00232 Bool_t mYear5;
00233 Bool_t mYear8;
00234 Bool_t mYearX;
00235
00236 Bool_t mOuterTrackGeometry;
00237 Bool_t mGeometrySave;
00238
00239 string mHistoFileName;
00240
00241
00242 Int_t mEventCounter;
00243 Int_t mAcceptedEventCounter;
00244 Int_t mTofEventCounter;
00245 Int_t mTofStrobeEventCounter;
00246 Int_t mAcceptAndStrobe;
00247 Int_t mAcceptAndBeam;
00248
00249
00250 Float_t mMinValidTdc;
00251 Float_t mMaxValidTdc;
00252 Float_t mMinValidAdc;
00253 Float_t mMaxValidAdc;
00254 unsigned int mMinHitsPerTrack;
00255 unsigned int mMinFitPointsPerTrack;
00256 Float_t mMinFitPointsOverMax;
00257 Float_t mMaxDCA;
00258
00259
00260
00261
00262 TH2D* mADCTDCCorelation;
00263
00264 TH1D* mEventCounterHisto;
00265 TH1D* mCellsMultInEvent;
00266 TH1D* mHitsMultInEvent;
00267 TH1D* mHitsMultPerTrack;
00268 TH1D* mDaqOccupancy;
00269 TH1D* mDaqOccupancyValid;
00270 TH1D* mDaqOccupancyProj;
00271 TH2D* mHitsPosition;
00272
00273 TH1D* mDaqOccupancyValidAll;
00274 TH1D* mDaqOccupancyProjAll;
00275 TH1D* mDaqOccupancyVpd;
00276 TH1D* mDaqOccupancyValidVpd;
00277
00278 vector<TH2D*> mHitCorr;
00279 vector<TH2D*> mHitCorrModule;
00280 TH2D* mHitCorrAll;
00281
00282
00283 TH2D* mTrackPtEta;
00284 TH2D* mTrackPtPhi;
00285 TH1D* mTrackNFitPts;
00286 TH2D* mTrackdEdxvsp;
00287 TH2D* mNSigmaPivsPt;
00288
00289 TTree* mTrackTree;
00290
00291 TH1D* mCellsPerEventMatch1;
00292 TH1D* mHitsPerEventMatch1;
00293 TH1D* mCellsPerTrackMatch1;
00294 TH1D* mTracksPerCellMatch1;
00295 TH1D* mDaqOccupancyMatch1;
00296 TH2D* mDeltaHitMatch1;
00297
00298 TH1D* mCellsPerEventMatch2;
00299 TH1D* mHitsPerEventMatch2;
00300 TH1D* mCellsPerTrackMatch2;
00301 TH1D* mTracksPerCellMatch2;
00302 TH1D* mDaqOccupancyMatch2;
00303 TH2D* mDeltaHitMatch2;
00304
00305 TH1D* mCellsPerEventMatch3;
00306 TH1D* mHitsPerEventMatch3;
00307 TH1D* mCellsPerTrackMatch3;
00308 TH1D* mTracksPerCellMatch3;
00309 TH1D* mDaqOccupancyMatch3;
00310 TH2D* mDeltaHitMatch3;
00311
00312 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00313 typedef vector<Int_t> idVector;
00314 #else
00315 typedef vector<Int_t,allocator<Int_t>> idVector;
00316 #endif
00317 typedef idVector::iterator idVectorIter;
00318
00319 struct StructCellHit{
00320 Int_t channel;
00321 Int_t tray;
00322 Int_t module;
00323 Int_t cell;
00324 StThreeVectorD hitPosition;
00325 idVector trackIdVec;
00326 Int_t matchFlag;
00327 Float_t zhit;
00328 Float_t yhit;
00329 };
00330
00331 struct TRACKTREE{
00332 Float_t pt;
00333 Float_t eta;
00334 Float_t phi;
00335 Int_t nfitpts;
00336 Float_t dEdx;
00337 Int_t ndEdxpts;
00338 Int_t charge;
00339 Int_t projTrayId;
00340 Int_t projCellChan;
00341 Float_t projY;
00342 Float_t projZ;
00343 };
00344 TRACKTREE trackTree;
00345
00346 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00347 typedef vector<StructCellHit> tofCellHitVector;
00348 #else
00349 typedef vector<StructCellHit,allocator<StructCellHit>> tofCellHitVector;
00350 #endif
00351 typedef vector<StructCellHit>::iterator tofCellHitVectorIter;
00352
00353
00354 virtual const char *GetCVS() const
00355 {static const char cvs[]="Tag $Name: $ $Id: StTofrMatchMaker.h,v 1.16 2009/07/24 22:33:33 fine Exp $ built "__DATE__" "__TIME__ ; return cvs;}
00356
00357 ClassDef(StTofrMatchMaker,1)
00358 };
00359
00360 inline void StTofrMatchMaker::setValidAdcRange(Int_t min, Int_t max){
00361 mMinValidAdc=min;
00362 mMaxValidAdc=max;
00363 }
00364
00365 inline void StTofrMatchMaker::setValidTdcRange(Int_t min, Int_t max){
00366 mMinValidTdc=min;
00367 mMaxValidTdc=max;
00368 }
00369
00370 inline void StTofrMatchMaker::setOuterTrackGeometry(){mOuterTrackGeometry=true;}
00371
00372 inline void StTofrMatchMaker::setStandardTrackGeometry(){mOuterTrackGeometry=false;}
00373
00374 inline void StTofrMatchMaker::setMinHitsPerTrack(Int_t nhits){mMinHitsPerTrack=nhits;}
00375
00376 inline void StTofrMatchMaker::setMinFitPointsPerTrack(Int_t nfitpnts){mMinFitPointsPerTrack=nfitpnts;}
00377
00378 inline void StTofrMatchMaker::setMinFitPointsOverMax(Float_t ratio) {mMinFitPointsOverMax=ratio;}
00379
00380 inline void StTofrMatchMaker::setMaxDCA(Float_t maxdca){mMaxDCA=maxdca;}
00381
00382 inline void StTofrMatchMaker::setHistoFileName(Char_t* filename){mHistoFileName=filename;}
00383
00384 inline void StTofrMatchMaker::setCreateHistoFlag(Bool_t histos){mHisto = histos;}
00385
00386 inline void StTofrMatchMaker::setCreateTreeFlag(Bool_t tree){mSaveTree = tree;}
00387
00388 inline void StTofrMatchMaker::setSaveGeometry(Bool_t geomSave){mGeometrySave = geomSave; }
00389
00390 inline Bool_t StTofrMatchMaker::validAdc(const Float_t adc){return((adc>=mMinValidAdc) && (adc<=mMaxValidAdc));}
00391
00392 inline Bool_t StTofrMatchMaker::validTdc(const Float_t tdc){return((tdc>=mMinValidTdc) && (tdc<=mMaxValidTdc));}
00393
00394 #endif