00001 #ifndef __StEEmcIUMixMaker_h__
00002 #define __StEEmcIUMixMaker_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 "StEEmcIUPoint.h"
00013 #include "StEEmcIUPair.h"
00014
00015 class TRandom;
00016 class StEEmcIUPointMaker;
00017 class StMuDstMaker;
00018 class StEEmcA2EMaker;
00019 class StMuEvent;
00020 class EEmcGeomSimple;
00021
00022 class StEEmcIUMixMaker : public StMaker {
00023
00024 public:
00025
00029 StEEmcIUMixMaker( const Char_t *name, Int_t size=20 );
00030 ~StEEmcIUMixMaker(){ };
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 Int_t numberofFpoint();
00045 StEEmcIUPair candidate(Int_t c){ return mCandidates[c]; }
00047 StEEmcIUPair 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, StEEmcIUPair pair );
00090 void fillQA( std::vector<TH2F *> &h, StEEmcIUPair 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;
00121 std::vector<Int_t> numberofFailpoint;
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 StEEmcIUPointMaker *mEEpoints;
00138
00140 StEEmcA2EMaker *mEEanalysis;
00141
00142 TString mMuDstMakerName;
00144 TString mPointMakerName;
00146 TString mAnalysisName;
00148 EEmcGeomSimple *mEEmcTow;
00149
00150
00151 TH1F *hZ1;
00152 TH1F *hZ2;
00153
00155 StEEmcIUPointVec_t mPoints;
00156
00157
00161 std::vector< StEEmcIUPointVec_t > mPool;
00162
00164 StEEmcIUPairVec_t mCandidates;
00166 StEEmcIUPairVec_t mBackground;
00167
00168
00170 Bool_t accept(StMuEvent *);
00171
00173 Bool_t accept( StEEmcIUPoint &p1, StEEmcIUPoint &p2 );
00174
00176 Float_t mMinMass, mMaxMass;
00178 Int_t mPoolSize;
00179
00181 void mixReal();
00183 void mixBackground();
00184
00186 TRandom *mRandom;
00187
00189 ClassDef(StEEmcIUMixMaker,1);
00190
00191 };
00192
00193 inline void StEEmcIUMixMaker::sector(Int_t s){ mSectorList.push_back(s); }
00194 inline void StEEmcIUMixMaker::trigger(Int_t t){ mTriggerList.push_back(t); }
00195 inline void StEEmcIUMixMaker::minET(Float_t et){ mETcut=et; }
00196 inline void StEEmcIUMixMaker::maxZ(Float_t z){ mZcut=z; }
00197 inline void StEEmcIUMixMaker::minEpoint(Float_t m){ mEpoint=m; }
00198
00199 inline void StEEmcIUMixMaker::mudst( const Char_t *n ){mMuDstMakerName=n;}
00200 inline void StEEmcIUMixMaker::analysis(const Char_t *a){mAnalysisName=a;}
00201 inline void StEEmcIUMixMaker::points(const Char_t *n){mPointMakerName=n; }
00202
00203 inline void StEEmcIUMixMaker::range( Float_t mn, Float_t mx ){ mMinMass=mn; mMaxMass=mx; }
00204
00205 inline Int_t StEEmcIUMixMaker::numberOfCandidates(){ return (Int_t)mCandidates.size(); }
00206 inline Int_t StEEmcIUMixMaker::numberOfMixedCandidates(){ return (Int_t)mBackground.size(); }
00207 #endif
00208 inline Int_t StEEmcIUMixMaker::numberofFpoint(){return (Int_t) numberofFailpoint.size();}