00001
00002
00003
00004
00005
00006 #ifndef StHbtMuDstReader_hh
00007 #define StHbtMuDstReader_hh
00008
00009 #include <string>
00010
00011 #include "StMaker.h"
00012 #include "StChain.h"
00013 #include "St_DataSetIter.h"
00014 #include "StMuDSTMaker/COMMON/StMuArrays.h"
00015
00016 #include "Base/StHbtEventReader.hh"
00017
00018
00019
00020 class StMuEvent;
00021 class StMuDst;
00022 class StMuCut;
00023
00024 class StEvent;
00025 class StTrackNode;
00026 class StTrack;
00027 class StRichSpectra;
00028 class StDetectorState;
00029 class StL3AlgorithmInfo;
00030
00031 class StuProbabilityPidAlgorithm;
00032
00033 class StIOMaker;
00034
00036 class StStrangeEvMuDst;
00037 class StStrangeMuDstMaker;
00038 class StV0MuDst;
00039 class StV0Mc;
00040 class StXiMuDst;
00041 class StXiMc;
00042 class StKinkMuDst;
00043 class StKinkMc;
00044 class StStrangeAssoc;
00045
00047 class StMuCut;
00048
00049 class TFile;
00050 class TTree;
00051 class TChain;
00052 class TClonesArray;
00053
00056
00057 class StHbtMuDstReader : public StHbtEventReader {
00058 public:
00059 StHbtMuDstReader(int mode, int nameMode, const char* dirName="./", const char* fileName="test.event.root", const char* filter=".", int maxfiles=10 );
00060 ~StHbtMuDstReader();
00061
00062 StHbtEvent* ReturnHbtEvent();
00063 int Init();
00064 int Init(const char* ReadWrite, StHbtString& Message)
00065 { return StHbtEventReader::Init(ReadWrite,Message);}
00066 void Clear();
00067 void Finish();
00068
00069 bool readTracks();
00070 bool readV0s();
00071 bool readXis();
00072 bool readKinks();
00073 unsigned int trackType();
00074 StMuDst* muDst();
00075 TChain* chain();
00076 TTree* tree();
00077 StEvent* stEvent();
00078 StStrangeMuDstMaker* stStrangeMuDstMaker();
00079
00080 void setTrackFilter(StMuCut* c);
00081 void setL3TrackFilter(StMuCut* c);
00082 void setProbabilityPidFile(const char* file);
00083 void setStEvent(StEvent*);
00084 void setStStrangeMuDstMaker(StStrangeMuDstMaker*);
00085 void setTrackType(unsigned int);
00086 void setReadTracks(bool);
00087 void setReadV0s(bool);
00088 void setReadXis(bool);
00089 void setReadKinks(bool);
00090
00091 enum ioMode {ioRead, ioWrite};
00092 enum ioNameMode {ioFix, ioAuto};
00093 private:
00094
00095 StMuDst* mStMuDst;
00096
00097 StEvent* mStEvent;
00098 StStrangeMuDstMaker* mStStrangeMuDstMaker;
00099 StIOMaker* mIOMaker;
00100
00101 ioMode mIoMode;
00102 ioNameMode mIoNameMode;
00103 string mDirName;
00104 string mFileName;
00105 string mFilter;
00106 int mMaxFiles;
00107
00108 unsigned int mTrackType;
00109 bool mReadTracks;
00110 bool mReadV0s;
00111 bool mReadXis;
00112 bool mReadKinks;
00113 bool mFinish;
00114
00115 StMuCut* mTrackFilter;
00116 StMuCut* mL3TrackFilter;
00117
00118 TFile* mCurrentFile;
00119 string mCurrentFileName;
00120
00121 TChain* mChain;
00122 TTree* mTTree;
00123
00124 int mEventCounter;
00125 int mSplit;
00126 int mCompress;
00127 int mBufferSize;
00128
00129 StHbtEvent* mHbtEvent;
00130 StuProbabilityPidAlgorithm* mProbabilityPidAlgorithm;
00131
00132
00134
00135 string buildFileName(string dir, string fileName, string extention);
00136 void openWrite(string fileName);
00137 void write();
00138 void closeWrite();
00139
00140 void makeChain(const char* dir, const char* filter, int maxFiles=10);
00141 void openRead();
00142 void read();
00143 void closeRead();
00144
00145 void clear(TClonesArray* t, int& counter);
00146 void clear();
00147 TClonesArray* clonesArray(TClonesArray* p, const char* type, int size, int& counter);
00148
00149 void fill();
00150 void fillTrees(StEvent* ev, StMuCut* cut=0);
00151 void fillEvent(StEvent* ev, StMuCut* cut=0);
00152 void fillStrange(StStrangeMuDstMaker*);
00153 void fillL3Tracks(StEvent* ev, StMuCut* cut=0);
00154 void fillTracks(StEvent* ev, StMuCut* cut=0);
00155 void fillDetectorStates(StEvent* ev);
00156 void fillL3AlgorithmInfo(StEvent* ev);
00157 template <class T> void addType(TClonesArray* tcaFrom, TClonesArray* tcaTo , T t);
00158 template <class T> int addType(TClonesArray* tcaTo , T t);
00159 template <class T, class U> int addType(TClonesArray* tcaTo , U u, T t);
00160 void addTrackNode(const StEvent* ev, const StTrackNode* node, StMuCut* cut, TClonesArray* gTCA=0, TClonesArray* pTCA=0, TClonesArray* oTCA=0, bool l3=false);
00161 int addTrack(TClonesArray* tca, const StEvent* event, const StTrack* track, StMuCut* cut, int index2Global, bool l3=false);
00162
00163
00164
00165
00166 StRichSpectra* richSpectra(const StTrack* track);
00167
00168
00169 string basename(string);
00170
00171 friend class StMuDst;
00172
00173 TClonesArray* arrays[__NARRAYS__];
00174 TClonesArray* mArrays[__NARRAYS__];
00175
00176 TClonesArray* strangeArrays[__NSTRANGEARRAYS__];
00177 TClonesArray* mStrangeArrays[__NSTRANGEARRAYS__];
00178
00179 ClassDef(StHbtMuDstReader, 1)
00180 };
00181
00182 inline StMuDst* StHbtMuDstReader::muDst() { return mStMuDst;}
00183 inline TChain* StHbtMuDstReader::chain() { return mChain; }
00184 inline TTree* StHbtMuDstReader::tree() { return mTTree; }
00185 inline void StHbtMuDstReader::setTrackFilter(StMuCut* c) { mTrackFilter=c;}
00186 inline void StHbtMuDstReader::setL3TrackFilter(StMuCut* c) { mL3TrackFilter=c;}
00187 inline void StHbtMuDstReader::setStStrangeMuDstMaker(StStrangeMuDstMaker* s) {mStStrangeMuDstMaker=s;}
00188 inline StStrangeMuDstMaker* StHbtMuDstReader::stStrangeMuDstMaker() {return mStStrangeMuDstMaker;}
00189 inline void StHbtMuDstReader::setTrackType(unsigned int t) {mTrackType=t;}
00190 inline unsigned int StHbtMuDstReader::trackType() {return mTrackType;}
00191
00192 inline bool StHbtMuDstReader::readTracks() { return mReadTracks;}
00193 inline bool StHbtMuDstReader::readV0s() { return mReadV0s;}
00194 inline bool StHbtMuDstReader::readXis() { return mReadXis;}
00195 inline bool StHbtMuDstReader::readKinks() { return mReadKinks;}
00196 inline void StHbtMuDstReader::setReadTracks(bool b) { mReadTracks=b;}
00197 inline void StHbtMuDstReader::setReadV0s(bool b) { mReadV0s=b;}
00198 inline void StHbtMuDstReader::setReadXis(bool b) { mReadXis=b;}
00199 inline void StHbtMuDstReader::setReadKinks(bool b) { mReadKinks=b;}
00200
00201 #endif
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213