00001
00002
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
00067 #ifndef STBTOFMATCHMAKER_HH
00068 #define STBTOFMATCHMAKER_HH
00069 #include "StMaker.h"
00070 #include "StThreeVectorD.hh"
00071 #include <string>
00072 #include <vector>
00073 #ifndef ST_NO_NAMESPACES
00074 using std::string;
00075 using std::vector;
00076 #endif
00077
00078 class StEvent;
00079 class StTrack;
00080 class StGlobalTrack;
00081 class StHelix;
00082 #include "StThreeVectorF.hh"
00083 class StTrackGeometry;
00084 class StDcaGeometry;
00085 class StBTofGeometry;
00086 class StBTofCollection;
00087 class StBTofRawHitCollection;
00088 class StBTofHitCollection;
00089 class StSPtrVecBTofRawHit;
00090 class StSPtrVecBTofHit;
00091 class TH1D;
00092 class TH2D;
00093 class TTree;
00094
00095 class StMuDst;
00096 class StMuEvent;
00097 class StMuTrack;
00098
00099 #if !defined(ST_NO_TEMPLATE_DEF_ARGS) || defined(__CINT__)
00100 typedef vector<Int_t> IntVec;
00101 typedef vector<UInt_t> UIntVec;
00102 typedef vector<Double_t> DoubleVec;
00103 #else
00104 typedef vector<Int_t, allocator<Int_t>> IntVec;
00105 typedef vector<UInt_t, allocator<UInt_t>> UIntVec;
00106 typedef vector<Double_t, allocator<Double_t>> DoubleVec;
00107 #endif
00108
00109 class StBTofMatchMaker : public StMaker {
00110 public:
00112 StBTofMatchMaker(const Char_t *name="btofMatch");
00113 ~StBTofMatchMaker();
00114
00115
00117 Int_t Init();
00119 Int_t InitRun(Int_t);
00120 Int_t FinishRun(Int_t);
00122 Int_t Make();
00124 Int_t Finish();
00125
00127 void setCreateHistoFlag(Bool_t histos=kTRUE);
00129 void setCreateTreeFlag(Bool_t tree=kTRUE);
00131 void setOuterTrackGeometry();
00132 void setStandardTrackGeometry();
00134 void setMinHitsPerTrack(Int_t);
00136 void setMinFitPointsPerTrack(Int_t);
00138 void setMinFitPointsOverMax(Float_t);
00140 void setMaxDCA(Float_t);
00142 void setHistoFileName(const Char_t*);
00144 void setNtupleFileName(const Char_t*);
00146 void setSaveGeometry(const Bool_t geomSave=kFALSE);
00148 void setIdealGeometry(const Bool_t useIdealGeometry=kTRUE);
00150 void setCalculateAlign(const Bool_t calcAlign=kTRUE);
00152 void setAlignFileName(const Char_t* infile="");
00153
00155 void setMuDstIn(Bool_t muDstIn=kTRUE);
00157 StBTofGeometry* getBTofGeom();
00158
00159 private:
00160 StTrackGeometry* trackGeometry(StTrack*);
00161
00163 void bookHistograms();
00165 void writeHistogramsToFile();
00166
00168 void processStEvent();
00170 void processMuDst();
00171
00173 Bool_t validTrack(StTrack*);
00174
00176 Bool_t validTrack(StMuTrack*);
00177
00178 public:
00179 Bool_t doPrintMemoryInfo;
00180 Bool_t doPrintCpuInfo;
00181
00182 private:
00183 static const Int_t mDAQOVERFLOW = 255;
00184
00186 static const Int_t mNTray = 120;
00188 static const Int_t mNTOF = 192;
00190 static const Int_t mNModule = 32;
00192 static const Int_t mNCell = 6;
00194 static const Int_t mNVPD = 19;
00195
00197 static const Int_t mEastVpdTrayId = 122;
00199 static const Int_t mWestVpdTrayId = 121;
00200
00202 Float_t mWidthPad;
00203 Float_t mZLocalCut;
00204
00205 StEvent *mEvent;
00206 StBTofGeometry *mBTofGeom;
00207
00208 Bool_t mHisto;
00209 Bool_t mSaveTree;
00210 Bool_t mUseIdealGeometry;
00211 Bool_t mCalculateAlign;
00212
00213 Bool_t mOuterTrackGeometry;
00214 Bool_t mGeometrySave;
00215 Bool_t mInitFromOther;
00216
00217 string mHistoFileName;
00218 string mAlignFileName;
00219
00220 StMuDst* mMuDst;
00221 Bool_t mMuDstIn;
00222
00224 Int_t mEventCounter;
00225 Int_t mAcceptedEventCounter;
00226 Int_t mTofEventCounter;
00227 Int_t mAcceptAndBeam;
00228
00230 unsigned int mMinHitsPerTrack;
00231 unsigned int mMinFitPointsPerTrack;
00232 Float_t mMinFitPointsOverMax;
00233 Float_t mMaxDCA;
00234
00235
00236
00238 TH2D* mADCTDCCorelation;
00239
00240 TH1D* mEventCounterHisto;
00241 TH1D* mCellsMultInEvent;
00242 TH1D* mHitsMultInEvent;
00243 TH1D* mHitsPrimaryInEvent;
00244 TH1D* mHitsMultPerTrack;
00245 TH1D* mDaqOccupancy[mNTray];
00246 TH1D* mDaqOccupancyProj[mNTray];
00247 TH2D* mHitsPosition;
00248
00249 TH2D* mHitCorr[mNTray];
00250 TH2D* mHitCorrModule[mNTray];
00251
00252 TH2D* mDeltaHitFinal[mNTray];
00253
00254 TH2D* mTrackPtEta;
00255 TH2D* mTrackPtPhi;
00256 TH1D* mTrackNFitPts;
00257 TH2D* mTrackdEdxvsp;
00258 TH2D* mNSigmaPivsPt;
00259
00260 TTree* mTrackTree;
00261
00262 TH1D* mCellsPerEventMatch1;
00263 TH1D* mHitsPerEventMatch1;
00264 TH1D* mCellsPerTrackMatch1;
00265 TH1D* mTracksPerCellMatch1;
00266 TH1D* mDaqOccupancyMatch1;
00267 TH2D* mDeltaHitMatch1;
00268
00269 TH1D* mCellsPerEventMatch2;
00270 TH1D* mHitsPerEventMatch2;
00271 TH1D* mCellsPerTrackMatch2;
00272 TH1D* mTracksPerCellMatch2;
00273 TH1D* mDaqOccupancyMatch2;
00274 TH2D* mDeltaHitMatch2;
00275
00276 TH1D* mCellsPerEventMatch3;
00277 TH1D* mHitsPerEventMatch3;
00278 TH1D* mCellsPerTrackMatch3;
00279 TH1D* mTracksPerCellMatch3;
00280 TH1D* mDaqOccupancyMatch3;
00281 TH2D* mDeltaHitMatch3;
00282
00283 TH1D* mCellsPrimaryPerEventMatch3;
00284
00285 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00286 typedef vector<Int_t> idVector;
00287 #else
00288 typedef vector<Int_t,allocator<Int_t>> idVector;
00289 #endif
00290 typedef idVector::iterator idVectorIter;
00291
00292 struct StructCellHit{
00293 Int_t tray;
00294 Int_t module;
00295 Int_t cell;
00296 StThreeVectorF hitPosition;
00297 idVector trackIdVec;
00298 Int_t matchFlag;
00299 Float_t zhit;
00300 Float_t yhit;
00301 Double_t tot;
00302 Int_t index2BTofHit;
00303 Double_t theta;
00304 };
00305
00306 struct TRACKTREE{
00307 Float_t pt;
00308 Float_t eta;
00309 Float_t phi;
00310 Int_t nfitpts;
00311 Float_t dEdx;
00312 Int_t ndEdxpts;
00313 Int_t charge;
00314 Int_t projTrayId;
00315 Int_t projCellChan;
00316 Float_t projY;
00317 Float_t projZ;
00318 };
00319 TRACKTREE trackTree;
00320
00321 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00322 typedef vector<StructCellHit> tofCellHitVector;
00323 #else
00324 typedef vector<StructCellHit,allocator<StructCellHit>> tofCellHitVector;
00325 #endif
00326 typedef vector<StructCellHit>::iterator tofCellHitVectorIter;
00327
00328
00329 virtual const char *GetCVS() const
00330 {static const char cvs[]="Tag $Name: $ $Id: StBTofMatchMaker.h,v 1.11 2012/05/07 14:11:16 fisyak Exp $ built "__DATE__" "__TIME__ ; return cvs;}
00331
00332 ClassDef(StBTofMatchMaker,1)
00333 };
00334
00335
00336 inline void StBTofMatchMaker::setOuterTrackGeometry(){mOuterTrackGeometry=true;}
00337
00338 inline void StBTofMatchMaker::setStandardTrackGeometry(){mOuterTrackGeometry=false;}
00339
00340 inline void StBTofMatchMaker::setMinHitsPerTrack(Int_t nhits){mMinHitsPerTrack=nhits;}
00341
00342 inline void StBTofMatchMaker::setMinFitPointsPerTrack(Int_t nfitpnts){mMinFitPointsPerTrack=nfitpnts;}
00343
00344 inline void StBTofMatchMaker::setMinFitPointsOverMax(Float_t ratio) {mMinFitPointsOverMax=ratio;}
00345
00346 inline void StBTofMatchMaker::setMaxDCA(Float_t maxdca){mMaxDCA=maxdca;}
00347
00348 inline void StBTofMatchMaker::setHistoFileName(const Char_t* filename){mHistoFileName=filename;}
00349
00350 inline void StBTofMatchMaker::setCreateHistoFlag(const Bool_t histos){mHisto = histos;}
00351
00352 inline void StBTofMatchMaker::setCreateTreeFlag(const Bool_t tree){mSaveTree = tree;}
00353
00354 inline void StBTofMatchMaker::setSaveGeometry(const Bool_t geomSave){mGeometrySave = geomSave; }
00355
00356 inline void StBTofMatchMaker::setIdealGeometry(const Bool_t useIdealGeometry){mUseIdealGeometry = useIdealGeometry;}
00357
00358 inline void StBTofMatchMaker::setCalculateAlign(const Bool_t calcAlign){mCalculateAlign = calcAlign;}
00359
00360 inline void StBTofMatchMaker::setAlignFileName(const Char_t* infile) {mAlignFileName = infile;}
00361
00362 inline void StBTofMatchMaker::setMuDstIn(const Bool_t val) { mMuDstIn = val; }
00363
00364 inline StBTofGeometry* StBTofMatchMaker::getBTofGeom() { return mBTofGeom; }
00365 #endif