00001
00002
00003
00004
00005
00006 #ifndef StMuDstMaker_hh
00007 #define StMuDstMaker_hh
00008
00009 #include <string>
00010
00011 #ifndef ST_NO_NAMESPACES
00012 using namespace std;
00013 #endif
00014
00015 #include "StMaker.h"
00016 #include "StChain.h"
00017 #include "StIOInterFace.h"
00018 #include "St_DataSetIter.h"
00019
00020 #include "StMuArrays.h"
00021
00022 #include "StMuFilter.h"
00023 #include "StMuL3Filter.h"
00024
00025
00026 class StMuEvent;
00027 class StMuDst;
00028 class StMuCut;
00029
00030 class StEvent;
00031 class StTrackNode;
00032 class StTrack;
00033 class StVertex;
00034 class StRichSpectra;
00035 class StDetectorState;
00036 class StL3AlgorithmInfo;
00037
00038 class StuProbabilityPidAlgorithm;
00039
00040 class StIOMaker;
00041 class StTreeMaker;
00042 #ifndef __NO_STRANGE_MUDST__
00044 class StStrangeEvMuDst;
00045 class StStrangeMuDstMaker;
00046 class StV0MuDst;
00047 class StV0Mc;
00048 class StXiMuDst;
00049 class StXiMc;
00050 class StKinkMuDst;
00051 class StKinkMc;
00052 class StStrangeAssoc;
00053 class StStrangeCuts;
00054 #endif
00056 #include "StMuEmcCollection.h"
00057 class StMuEmcUtil;
00058
00060 #include "StMuFmsCollection.h"
00061 class StMuFmsUtil;
00062
00064 #include "StMuPmdCollection.h"
00065 class StMuPmdUtil;
00066
00067
00068 class StMuTofHit;
00069 class StMuTofHitCollection;
00070 class StTofCollection;
00071 class StTofDataCollection;
00072
00073 class StTofRawDataCollection;
00074 class StMuTofUtil;
00075
00076 class StBTofCollection;
00077 class StBTofRawHitCollection;
00078 class StMuBTofHit;
00079 class StMuBTofHitCollection;
00080 class StMuBTofUtil;
00081
00082
00083 class StMuEzTree;
00084
00085 class TFile;
00086 class TTree;
00087 class TChain;
00088 class TClonesArray;
00089 class TEventList;
00090
00091 class StMuRpsCollection;
00092 class StMuMtdCollection;
00093
00094
00106 class StMuDstMaker : public StIOInterFace {
00107 public:
00109 StMuDstMaker(const char* name="MuDst");
00111 StMuDstMaker(int mode, int nameMode, const char* dirName="./", const char* fileName="", const char* filter=".", int maxfiles=10,
00112 const char* name="MuDst");
00113
00114 ~StMuDstMaker();
00115
00116 virtual int Init();
00117 virtual void Clear(Option_t *option="");
00118 virtual int Make();
00119 virtual Int_t MakeRead(const StUKey &RunEvent);
00120 virtual Int_t MakeRead();
00121 virtual Int_t MakeWrite();
00122 virtual int Finish();
00123 void printArrays();
00124 void SetStatus(const char *arrType,int status);
00126 void SetEventList( TEventList *e ) { mEventList = e; }
00128 void setTrackFilter(StMuCut* c);
00129 StMuFilter* trackFilter();
00131 void setL3TrackFilter(StMuCut* c);
00132 StMuL3Filter* l3TrackFilter();
00134
00149 void setProbabilityPidFile(const char* file=NULL);
00152 StMuDst* muDst();
00154 TChain* chain();
00156 TTree* tree();
00157
00159 virtual const char *GetFile() const;
00160
00162 void setSplit(int=99);
00164 void setBufferSize(int=65536*4);
00166 void setCompression(int comp=9);
00167
00168
00169 void setStTriggerYear(int);
00170
00171 StMuEmcUtil* muEmcUtil() { return mEmcUtil; }
00172 StMuFmsUtil* muFmsUtil() { return mFmsUtil; }
00173 StMuPmdUtil* muPmdUtil() { return mPmdUtil; }
00174
00175 virtual const char *GetCVS() const {
00176
00177 static const char cvs[]="Tag $Name: $ $Id: StMuDstMaker.h,v 1.53 2011/05/04 19:51:32 tone421 Exp $ built "__DATE__" "__TIME__ ;
00178 return cvs;
00179 }
00180
00181
00182
00183 protected:
00185 void connectEmcCollection();
00186 void connectFmsCollection();
00187 void connectPmdCollection();
00188 enum ioMode {ioRead, ioWrite};
00197 enum ioNameMode {ioFix=0, ioIOMaker, ioTreeMaker};
00198
00199 StEvent* mStEvent;
00200 StMuDst* mStMuDst;
00201 #ifndef __NO_STRANGE_MUDST__
00202 StStrangeMuDstMaker* mStStrangeMuDstMaker;
00203 #endif
00204 StIOMaker* mIOMaker;
00205 StTreeMaker* mTreeMaker;
00206 StMuEmcUtil* mEmcUtil;
00207 StMuFmsUtil* mFmsUtil;
00208 StMuPmdUtil* mPmdUtil;
00209 StMuTofUtil* mTofUtil;
00211 StMuBTofUtil* mBTofUtil;
00212 StMuEzTree* mEzTree;
00213
00214 int mIoMode;
00215 int mIoNameMode;
00216 string mDirName;
00217 string mFileName;
00218 string mFilter;
00219 int mMaxFiles;
00220
00221 TEventList *mEventList;
00222
00223 unsigned int mTrackType;
00224 bool mReadTracks;
00225 bool mReadV0s;
00226 bool mReadXis;
00227 bool mReadKinks;
00228 bool mFinish;
00229
00230 StMuCut* mTrackFilter;
00231 StMuCut* mL3TrackFilter;
00232
00233 TFile* mCurrentFile;
00234 string mCurrentFileName;
00235
00236 TChain* mChain;
00237 TTree* mTTree;
00238
00239 int mEventCounter;
00240 int mSplit;
00241 int mCompression;
00242 int mBufferSize;
00243
00244 TObjArray mVtxList;
00245
00246 StuProbabilityPidAlgorithm* mProbabilityPidAlgorithm;
00247
00248
00249 #define saveDelete(t) { delete t; t=0;}
00250
00252
00253 virtual void openWrite(string fileName);
00254 virtual void write();
00255 virtual void closeWrite();
00256
00257 void streamerOff();
00258
00259 virtual int openRead();
00260 virtual void read();
00261 void setBranchAddresses();
00262 virtual void closeRead();
00263
00264 void setBranchAddresses(TChain*);
00265
00266 void assignArrays();
00267 void clearArrays();
00268 void zeroArrays();
00269 void createArrays();
00270 TClonesArray* clonesArray(TClonesArray*& p, const char* type, int size, int& counter);
00271
00272 void fill();
00273 void fillTrees(StEvent* ev, StMuCut* cut=0);
00274 void fillEvent(StEvent* ev, StMuCut* cut=0);
00275 void fillVertices(StEvent* ev);
00276 void fillpp2pp(StEvent* ev);
00277 void fillmtd(StEvent* ev);
00278
00279 void fillsttrigger(StEvent* ev);
00280 void fillPmd(StEvent* ev);
00281 void fillEmc(StEvent* ev);
00282 void fillFms(StEvent* ev);
00283 #ifndef __NO_STRANGE_MUDST__
00284 void fillStrange(StStrangeMuDstMaker*);
00285 #endif
00286 void fillMC();
00287 void fillL3Tracks(StEvent* ev, StMuCut* cut=0);
00288 void fillTracks(StEvent* ev, StMuCut* cut=0);
00289 void fillDetectorStates(StEvent* ev);
00290 void fillL3AlgorithmInfo(StEvent* ev);
00291 void fillTof(StEvent* ev);
00293 void fillBTof(StEvent* ev);
00294 void fillEzt(StEvent* ev);
00295
00296 void fillHddr();
00297
00298 template <class T, class U> int addType(TClonesArray* tcaTo , U &u, T *t);
00299 template <class T> int addType(TClonesArray* tcaFrom, TClonesArray* &tcaTo ,T *t);
00300 template <class T> int addType(TClonesArray* tcaTo , T &t);
00301 void addTrackNode(const StEvent* ev, const StTrackNode* node, StMuCut* cut, TClonesArray* gTCA=0, TClonesArray* pTCA=0, TClonesArray* oTCA=0,
00302 TClonesArray* covgTCA=0, TClonesArray* covpTCA=0, bool l3=false);
00303 int addTrack(TClonesArray* tca, const StEvent* event, const StTrack* track, const StVertex *vtx, StMuCut* cut, int index2Global, bool l3=false,
00304 TClonesArray* covgTCA=0, TClonesArray* covpTCA=0);
00305
00306
00307 StRichSpectra* richSpectra(const StTrack* track);
00308
00309 void setStEvent(StEvent*);
00310 StEvent* stEvent();
00311 #ifndef __NO_STRANGE_MUDST__
00312 void setStStrangeMuDstMaker(StStrangeMuDstMaker*);
00313 StStrangeMuDstMaker* stStrangeMuDstMaker();
00314 #endif
00315 unsigned int trackType();
00316 bool readTracks();
00317 #ifndef __NO_STRANGE_MUDST__
00318 bool readV0s();
00319 bool readXis();
00320 bool readKinks();
00321 #endif
00322 void setTrackType(unsigned int);
00323 void setReadTracks(bool);
00324 #ifndef __NO_STRANGE_MUDST__
00325 void setReadV0s(bool);
00326 void setReadXis(bool);
00327 void setReadKinks(bool);
00328 #endif
00329 string basename(string);
00330 string dirname(string);
00331 string buildFileName(string dir, string fileName, string extention);
00332
00333 friend class StMuDst;
00334 friend class StMuDstFilterMaker;
00335
00336
00337
00338 TClonesArray* mAArrays [__NALLARRAYS__];
00339 TClonesArray** mArrays;
00340 #ifndef __NO_STRANGE_MUDST__
00341 TClonesArray** mStrangeArrays;
00342 #endif
00343 TClonesArray** mMCArrays;
00344 TClonesArray** mEmcArrays;
00345 TClonesArray** mFmsArrays;
00346 TClonesArray** mPmdArrays;
00347 TClonesArray** mTofArrays;
00349 TClonesArray** mBTofArrays;
00350 TClonesArray** mEztArrays;
00351 char mStatusArrays [__NALLARRAYS__ ];
00352 TClonesArray* mEmcCollectionArray;
00353 StMuEmcCollection *mEmcCollection;
00354 StMuFmsCollection *mFmsCollection;
00355 TClonesArray* mPmdCollectionArray;
00356 StMuPmdCollection *mPmdCollection;
00357
00358 ClassDef(StMuDstMaker, 0)
00359 };
00360
00361 inline StMuDst* StMuDstMaker::muDst() { return mStMuDst;}
00362 inline TChain* StMuDstMaker::chain() { return mChain; }
00363 inline TTree* StMuDstMaker::tree() { return mTTree; }
00364 inline void StMuDstMaker::setTrackFilter(StMuCut* c) { mTrackFilter=c;}
00365 inline void StMuDstMaker::setL3TrackFilter(StMuCut* c) { mL3TrackFilter=c;}
00366 inline StMuFilter* StMuDstMaker::trackFilter() { return (StMuFilter*)mTrackFilter;}
00367 inline StMuL3Filter* StMuDstMaker::l3TrackFilter() { return (StMuL3Filter*)mL3TrackFilter;}
00368 #ifndef __NO_STRANGE_MUDST__
00369 inline void StMuDstMaker::setStStrangeMuDstMaker(StStrangeMuDstMaker* s) {mStStrangeMuDstMaker=s;}
00370 inline StStrangeMuDstMaker* StMuDstMaker::stStrangeMuDstMaker() {return mStStrangeMuDstMaker;}
00371 #endif
00372 inline void StMuDstMaker::setTrackType(unsigned int t) {mTrackType=t;}
00373 inline unsigned int StMuDstMaker::trackType() {return mTrackType;}
00374
00375 inline bool StMuDstMaker::readTracks() { return mReadTracks;}
00376 #ifndef __NO_STRANGE_MUDST__
00377 inline bool StMuDstMaker::readV0s() { return mReadV0s;}
00378 inline bool StMuDstMaker::readXis() { return mReadXis;}
00379 inline bool StMuDstMaker::readKinks() { return mReadKinks;}
00380 #endif
00381 inline void StMuDstMaker::setReadTracks(bool b) { mReadTracks=b;}
00382 #ifndef __NO_STRANGE_MUDST__
00383 inline void StMuDstMaker::setReadV0s(bool b) { mReadV0s=b;}
00384 inline void StMuDstMaker::setReadXis(bool b) { mReadXis=b;}
00385 inline void StMuDstMaker::setReadKinks(bool b) { mReadKinks=b;}
00386 #endif
00387
00388 inline void StMuDstMaker::setSplit(int split) { mSplit = split;}
00389 inline void StMuDstMaker::setCompression(int comp) { mCompression = comp;}
00390 inline void StMuDstMaker::setBufferSize(int buf) { mBufferSize = buf; }
00391
00392
00393 #endif
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586