00001 #ifndef __StEEmcMixMaker_h__
00002 #define __StEEmcMixMaker_h__
00003
00004 #include <StMaker.h>
00005 #include <vector>
00006 #include <algorithm>
00007 #include "TString.h"
00008
00009 class TH1F;
00010 class TH2F;
00011
00012 #include "StEEmcPoint.h"
00013 #include "StEEmcPair.h"
00014
00015 class TRandom;
00016 class StEEmcPointMaker;
00017 class StMuDstMaker;
00018 class StEEmcA2EMaker;
00019 class StMuEvent;
00020 class EEmcGeomSimple;
00021
00022 class StEEmcMixMaker : public StMaker {
00023
00024 public:
00025
00029 StEEmcMixMaker( const Char_t *name, Int_t size=20 );
00030 ~StEEmcMixMaker(){ };
00031
00033 void mudst( const Char_t *name );
00035 void points( const Char_t *name );
00037 void analysis( const Char_t *name );
00038
00040 Int_t numberOfCandidates();
00042 Int_t numberOfMixedCandidates();
00043
00045 StEEmcPair candidate(Int_t c){ return mCandidates[c]; }
00046 StEEmcPair mixedCandidate(Int_t m) { return mBackground[m]; }
00047
00048 Int_t Init();
00049 Int_t Make();
00050 void Clear( Option_t *opts="" );
00051
00054 void sector( Int_t sector );
00057 void trigger( Int_t trigger );
00058
00060 void minET( Float_t et );
00062 void maxZ( Float_t z );
00064 void minEpoint( Float_t m );
00065
00066
00076 void setTrigMode(Int_t m){ mTrigMode=m; }
00077
00078
00080 void book();
00082 void fill();
00084 void fill ( std::vector<TH1F *> &h, StEEmcPair pair );
00086 void fillQA( std::vector<TH2F *> &h, StEEmcPair pair );
00087
00088 void range( Float_t min, Float_t max );
00089
00090
00091 void fixedVertex(Float_t x, Float_t y, Float_t z){ mFixedVertex=TVector3(x,y,z); }
00092 void floatVertex(Float_t x, Float_t y, Float_t z, Float_t s){ fixedVertex(x,y,z); mSigmaVertex=s; }
00093
00094 private:
00095 protected:
00096
00097 TVector3 mFixedVertex;
00098 Float_t mSigmaVertex;
00099
00100 Float_t mETcut;
00101 Float_t mZcut;
00102 Float_t mEpoint;
00103
00104 Int_t mTrigMode;
00105 void fillPool();
00106
00107 std::vector<Int_t> mSectorList;
00108 std::vector<Int_t> mTriggerList;
00109
00110 std::vector<TH1F*> mH1;
00111 std::vector<TH2F*> mH2;
00112
00113 std::vector<TH1F*> mH1real;
00114 std::vector<TH2F*> mH2real;
00115
00116 std::vector<TH1F*> mH1mix;
00117 std::vector<TH2F*> mH2mix;
00118
00119 StMuDstMaker *mMuDstMaker;
00120 StEEmcPointMaker *mEEpoints;
00121 StEEmcA2EMaker *mEEanalysis;
00122
00123 TString mMuDstMakerName;
00124 TString mPointMakerName;
00125 TString mAnalysisName;
00126
00127 EEmcGeomSimple *mEEmcTow;
00128
00130 StEEmcPointVec_t mPoints;
00131
00132
00136 std::vector< StEEmcPointVec_t > mPool;
00137
00139 StEEmcPairVec_t mCandidates;
00141 StEEmcPairVec_t mBackground;
00142
00143
00145 Bool_t accept(StMuEvent *);
00146
00147 Float_t mMinMass, mMaxMass;
00148 Int_t mPoolSize;
00149
00151 void mixReal();
00153 void mixBackground();
00154
00155
00156 TRandom *mRandom;
00157
00158 ClassDef(StEEmcMixMaker,1);
00159
00160 };
00161
00162 inline void StEEmcMixMaker::sector(Int_t s){ mSectorList.push_back(s); }
00163 inline void StEEmcMixMaker::trigger(Int_t t){ mTriggerList.push_back(t); }
00164 inline void StEEmcMixMaker::minET(Float_t et){ mETcut=et; }
00165 inline void StEEmcMixMaker::maxZ(Float_t z){ mZcut=z; }
00166 inline void StEEmcMixMaker::minEpoint(Float_t m){ mEpoint=m; }
00167
00168 inline void StEEmcMixMaker::mudst( const Char_t *n ){mMuDstMakerName=n;}
00169 inline void StEEmcMixMaker::analysis(const Char_t *a){mAnalysisName=a;}
00170 inline void StEEmcMixMaker::points(const Char_t *n){mPointMakerName=n; }
00171
00172 inline void StEEmcMixMaker::range( Float_t mn, Float_t mx ){ mMinMass=mn; mMaxMass=mx; }
00173
00174 inline Int_t StEEmcMixMaker::numberOfCandidates(){ return (Int_t)mCandidates.size(); }
00175 inline Int_t StEEmcMixMaker::numberOfMixedCandidates(){ return (Int_t)mBackground.size(); }
00176 #endif