00001 #include "StPreEclMaker.h"
00002 #include "StEvent.h"
00003 #include "StEmcSimulatorMaker/StEmcSimulatorMaker.h"
00004 #include "StEmcADCtoEMaker/StEmcADCtoEMaker.h"
00005 #include "Stiostream.h"
00006 #include "TStopwatch.h"
00007 #include "StEmcUtil/others/emcDetectorName.h"
00008 ClassImp(StPreEclMaker)
00009
00010
00011 StPreEclMaker::StPreEclMaker(const char *name, const char *title):StMaker(name,title)
00012 {
00013 mFinder = NULL;
00014 mAlg = kEmcClDefault;
00015 }
00016
00017 StPreEclMaker::~StPreEclMaker()
00018 {
00019 if(mFinder)
00020 delete mFinder;
00021 }
00022
00023 Int_t StPreEclMaker::Init()
00024 {
00025 if(!mFinder)
00026 {
00027 if(mAlg == kEmcClOld)
00028 mFinder = new StEmcOldFinder();
00029 }
00030
00031 if(!mFinder)
00032 {
00033 mFinder = new StEmcOldFinder();
00034 mAlg = kEmcClOld;
00035 }
00036 return StMaker::Init();
00037 }
00038
00039 Int_t StPreEclMaker::Make()
00040 {
00041 TStopwatch clock;
00042 clock.Start();
00043 LOG_DEBUG << "StPreEclMaker::Make()***********************************************************"<<endm;
00044
00045 StEvent *ev = getEvent();
00046 if(!ev)
00047 return kStOk;
00048
00049 if(mFinder)
00050 {
00051 mFinder->clear();
00052 mFinder->clear(ev);
00053 mFinder->findClusters(ev);
00054 mFinder->fillStEvent(ev);
00055 mFinder->fillHistograms(ev);
00056 }
00057
00058 clock.Stop();
00059 LOG_DEBUG <<"Time to run StPreEclMaker::Make() real = "<<clock.RealTime()<<" cpu= "<<clock.CpuTime()<<endm;
00060 LOG_DEBUG << "*******************************************************************************"<<endm;
00061 return kStOK;
00062 }
00063
00064 Int_t StPreEclMaker::Finish()
00065 {
00066 return kStOK;
00067 }
00068 StEvent* StPreEclMaker::getEvent()
00069 {
00070
00071 StEvent *ev = (StEvent*)GetInputDS("StEvent");
00072 if(!ev)
00073 return NULL;
00074
00075
00076 StEmcCollection *emc = ev->emcCollection();
00077 if(emc)
00078 return ev;
00079
00080
00081
00082
00083 StEmcSimulatorMaker* sim = (StEmcSimulatorMaker*)GetMaker("EmcSimulator");
00084 if(sim)
00085 {
00086 emc = (StEmcCollection*)sim->getEmcCollection();
00087
00088 if(emc)
00089 {
00090 ev->setEmcCollection(emc);
00091 return ev;
00092 }
00093 }
00094
00095
00096 StEmcADCtoEMaker *adc =(StEmcADCtoEMaker*)GetMaker("Eread");
00097 if(adc)
00098 {
00099 emc = (StEmcCollection*)adc->getEmcCollection();
00100 adc->clearStEventStaf();
00101 if(emc)
00102 {
00103 ev->setEmcCollection(emc);
00104 return ev;
00105 }
00106 }
00107 return NULL;
00108 }
00109 void StPreEclMaker::SetClusterConditions(char *cdet,Int_t sizeMax,
00110 Float_t energySeed,
00111 Float_t energyAdd,
00112 Float_t energyThresholdAll,
00113 Bool_t kCheckClustersOk)
00114 {
00115 if(mAlg!=kEmcClOld)
00116 return;
00117
00118 for(Int_t i=0;i<4;i++)
00119 {
00120 if(!strcmp(cdet,detname[i].Data()))
00121 {
00122 ((StEmcOldFinder*)mFinder)->setEnergySeed(i+1,energySeed);
00123 ((StEmcOldFinder*)mFinder)->setEnergyAdd(i+1,energyAdd);
00124 ((StEmcOldFinder*)mFinder)->setEnergyThresholdAll(i+1,energyThresholdAll);
00125 ((StEmcOldFinder*)mFinder)->setSizeMax(i+1,sizeMax);
00126 break;
00127 }
00128 }
00129 }