00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef ST_EEMC_DATA_DRIVEN_MC_MAKER_H
00014 #define ST_EEMC_DATA_DRIVEN_MC_MAKER_H
00015 #include <vector>
00016
00017 class TClonesArray;
00018 class TH2F;
00019 class TTree;
00020
00021
00022 class StEEmcDb;
00023 class StMuEmcHit;
00024 class StEEmcSmdResponse;
00025 class StMuEmcUtil;
00026 class StMcEvent;
00027 class StMcVertex;
00028 class StMcTrack;
00029 class StMcCalorimeterHit;
00030 class StMcEmcHitCollection;
00031 class StEEmcDataDrivenMcEventInfo;
00032 class StEEmcDataDrivenMcReplaceInfo;
00033 class StEEmcA2EMaker;
00034
00035
00036 class StEEmcShowerShape;
00037
00038
00039 #include "StMaker.h"
00040 #include <vector>
00041 class StEEmcDataDrivenMcMaker : public StMaker {
00042 public:
00043 StEEmcDataDrivenMcMaker(const char* name = "StEEmcDataDrivenMcMaker");
00044 ~StEEmcDataDrivenMcMaker() {}
00045
00046 void Clear(Option_t* option = "");
00047 int Init();
00048 int InitRun(int runNumber);
00049 int Make();
00050 int Finish();
00051
00052 StEEmcDataDrivenMcEventInfo* GetDataDrivenMcEventInfo();
00053 void SetLibraryFile(const char* filename);
00054 void SetLogFileName(const char* filename);
00055 void SetNumberOfStripsReplaced(int n);
00056
00057 void SetShowerShapeScalingMethod(int id);
00058
00059
00060
00061
00062
00063
00064 void UsePed(bool value = true) { mUsePed = value; }
00065
00066 private:
00067 enum { NUMBER_OF_ENERGY_BINS = 2, NUMBER_OF_PRESHOWER_BINS = 4 };
00068
00069 void processVertex(StMcVertex* mcVertex);
00070 void processTrack(StMcTrack* mcTrack);
00071 bool multiSector(const vector<StMcCalorimeterHit*>& hits) const;
00072 int getEnergyBin(StEEmcShowerShape* showerShape) const;
00073 int getPreshowerBin(StEEmcShowerShape* showerShape) const;
00074 void getEnergies(StMcTrack* mcTrack, StEEmcDataDrivenMcReplaceInfo* replaceInfo);
00075 float GetShowerShapeScale(StMcTrack *mcTrack, StEEmcShowerShape* showerShape, int sector, int plane, int geantPhotonCentralStrip);
00076
00077 bool mUsePed;
00078 float mPed[12][2][288];
00079 float mGain[12][2][288];
00080 TString mLibraryFile;
00081 TString mLogFileName;
00082 TFile* mLogFile;
00083 StEEmcDb* mEEmcDb;
00084 StMuEmcHit* mStrips[12][2][288];
00085 StMcEvent* mMcEvent;
00086 StMuEmcUtil* mMuEmcUtil;
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 TClonesArray* mShowerShapes[2][4];
00097
00098
00099 TTree* mTree;
00100 StEEmcDataDrivenMcEventInfo* mDataDrivenMcEventInfo;
00101 int mNumberOfStripsReplaced;
00102 int mShowerShapeScalingMethod;
00103 map<StEEmcShowerShape*, int> mLibraryMap;
00104 StEEmcA2EMaker* mA2E;
00105
00106 ClassDef(StEEmcDataDrivenMcMaker, 1);
00107 };
00108
00109 inline StEEmcDataDrivenMcEventInfo* StEEmcDataDrivenMcMaker::GetDataDrivenMcEventInfo()
00110 {
00111 return mDataDrivenMcEventInfo;
00112 }
00113
00114 inline void StEEmcDataDrivenMcMaker::SetLibraryFile(const char* filename)
00115 {
00116 mLibraryFile = filename;
00117 }
00118
00119 inline void StEEmcDataDrivenMcMaker::SetLogFileName(const char* filename)
00120 {
00121 mLogFileName = filename;
00122 }
00123
00124 inline void StEEmcDataDrivenMcMaker::SetNumberOfStripsReplaced(int n)
00125 {
00126 mNumberOfStripsReplaced = n;
00127 }
00128
00129 inline void StEEmcDataDrivenMcMaker::SetShowerShapeScalingMethod(int id)
00130 {
00131 mShowerShapeScalingMethod = id;
00132 }
00133
00134 #endif // ST_EEMC_DATA_DRIVEN_MC_MAKER_H