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 "StEEmcPool/StEEmcPointMaker/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]; }
00047 StEEmcPair mixedCandidate(Int_t m) { return mBackground[m]; }
00048
00050 Int_t Init();
00052 Int_t Make();
00054 void Clear( Option_t *opts="" );
00055
00058 void sector( Int_t sector );
00061 void trigger( Int_t trigger );
00062
00064 void minET( Float_t et );
00066 void maxZ( Float_t z );
00068 void minEpoint( Float_t m );
00069
00070
00080 void setTrigMode(Int_t m){ mTrigMode=m; }
00081
00082
00084 void book();
00086 void fill();
00088 void fill ( std::vector<TH1F *> &h, StEEmcPair pair );
00090 void fillQA( std::vector<TH2F *> &h, StEEmcPair pair );
00092 void range( Float_t min, Float_t max );
00093
00095 void fixedVertex(Float_t x, Float_t y, Float_t z){ mFixedVertex=TVector3(x,y,z); }
00097 void floatVertex(Float_t x, Float_t y, Float_t z, Float_t s){ fixedVertex(x,y,z); mSigmaVertex=s; }
00098
00102 void mixLimit(Int_t m){ mMixLimits=m; }
00103
00104 private:
00105 protected:
00106
00107 TVector3 mFixedVertex;
00108 Float_t mSigmaVertex;
00110 Float_t mETcut;
00111 Float_t mZcut;
00112 Float_t mEpoint;
00114 Int_t mTrigMode;
00115 void fillPool();
00117 Int_t mMixLimits;
00119 std::vector<Int_t> mSectorList;
00120 std::vector<Int_t> mTriggerList;
00122
00123 std::vector<TH1F*> mH1;
00124
00125 std::vector<TH2F*> mH2;
00126
00127 std::vector<TH1F*> mH1real;
00128
00129 std::vector<TH2F*> mH2real;
00130
00131 std::vector<TH1F*> mH1mix;
00132
00133 std::vector<TH2F*> mH2mix;
00134
00135 StMuDstMaker *mMuDstMaker;
00136
00137 StEEmcPointMaker *mEEpoints;
00138
00139 StEEmcA2EMaker *mEEanalysis;
00140
00141 TString mMuDstMakerName;
00143 TString mPointMakerName;
00145 TString mAnalysisName;
00147 EEmcGeomSimple *mEEmcTow;
00148
00150 StEEmcPointVec_t mPoints;
00151
00152
00156 std::vector< StEEmcPointVec_t > mPool;
00157
00159 StEEmcPairVec_t mCandidates;
00161 StEEmcPairVec_t mBackground;
00162
00163
00165 Bool_t accept(StMuEvent *);
00166
00168 Bool_t accept( StEEmcPoint &p1, StEEmcPoint &p2 );
00169
00171 Float_t mMinMass, mMaxMass;
00173 Int_t mPoolSize;
00174
00176 void mixReal();
00178 void mixBackground();
00179
00181 TRandom *mRandom;
00182
00184 ClassDef(StEEmcMixMaker,1);
00185
00186 };
00187
00188 inline void StEEmcMixMaker::sector(Int_t s){ mSectorList.push_back(s); }
00189 inline void StEEmcMixMaker::trigger(Int_t t){ mTriggerList.push_back(t); }
00190 inline void StEEmcMixMaker::minET(Float_t et){ mETcut=et; }
00191 inline void StEEmcMixMaker::maxZ(Float_t z){ mZcut=z; }
00192 inline void StEEmcMixMaker::minEpoint(Float_t m){ mEpoint=m; }
00193
00194 inline void StEEmcMixMaker::mudst( const Char_t *n ){mMuDstMakerName=n;}
00195 inline void StEEmcMixMaker::analysis(const Char_t *a){mAnalysisName=a;}
00196 inline void StEEmcMixMaker::points(const Char_t *n){mPointMakerName=n; }
00197
00198 inline void StEEmcMixMaker::range( Float_t mn, Float_t mx ){ mMinMass=mn; mMaxMass=mx; }
00199
00200 inline Int_t StEEmcMixMaker::numberOfCandidates(){ return (Int_t)mCandidates.size(); }
00201 inline Int_t StEEmcMixMaker::numberOfMixedCandidates(){ return (Int_t)mBackground.size(); }
00202 #endif