00001
00002 #include "StEmcVirtualFinder.h"
00003 #include "StEvent.h"
00004 #include "StEventTypes.h"
00005 #include "TString.h"
00006 #include "StEmcUtil/others/emcDetectorName.h"
00007
00008 ClassImp(StEmcVirtualFinder)
00009
00010
00011 StEmcVirtualFinder::StEmcVirtualFinder():TObject()
00012 {
00013 TString name,title;
00014 for(Int_t i = 0; i<MAXDETBARREL; i++)
00015 {
00016 mColl[i] = new StEmcPreClusterCollection(i+1);
00017
00018 name = detname[i];
00019 name += "_NClusters";
00020 title = "Number of clusters for detector ";
00021 title+= detname[i];
00022 mHist1D[0][i] = new TH1F(name.Data(),title.Data(),500,0,500);
00023
00024 name = detname[i];
00025 name += "_NHits";
00026 title = "Number of hits/cluster for detector ";
00027 title+= detname[i];
00028 mHist1D[1][i] = new TH1F(name.Data(),title.Data(),20,0,20);
00029
00030 name = detname[i];
00031 name += "_Energy";
00032 title = "Cluster energy for detector ";
00033 title+= detname[i];
00034 mHist1D[2][i] = new TH1F(name.Data(),title.Data(),500,0,50);
00035
00036 name = detname[i];
00037 name += "_RMSEta";
00038 title = "Cluster RMS/eta for detector ";
00039 title+= detname[i];
00040 mHist1D[3][i] = new TH1F(name.Data(),title.Data(),20,0,0.1);
00041
00042 name = detname[i];
00043 name += "_RMSPhi";
00044 title = "Cluster RMS/phi for detector ";
00045 title+= detname[i];
00046 mHist1D[4][i] = new TH1F(name.Data(),title.Data(),20,0,0.1);
00047
00048 name = detname[i];
00049 name += "_EtaPhi";
00050 title = "Cluster (eta,phi) for detector ";
00051 title+= detname[i];
00052 mHist2D[0][i] = new TH2F(name.Data(),title.Data(),40,-1,1,120,-3.1415,3.1415);
00053 }
00054 }
00055
00056 StEmcVirtualFinder::~StEmcVirtualFinder()
00057 {
00058 for(Int_t i = 0; i<MAXDETBARREL; i++)
00059 if(mColl[i])
00060 delete mColl[i];
00061 }
00062 Bool_t StEmcVirtualFinder::findClusters(StEvent* event)
00063 {
00064 return kFALSE;
00065 }
00066 Bool_t StEmcVirtualFinder::clear(StEvent* event)
00067 {
00068 StEmcCollection *emc = event->emcCollection();
00069 if(!emc)
00070 return kFALSE;
00071
00072 StSPtrVecEmcPoint& pvec = emc->barrelPoints();
00073 if(pvec.size()>0)
00074 pvec.clear();
00075
00076 for(Int_t i=0; i<MAXDETBARREL; i++)
00077 {
00078 StDetectorId id = static_cast<StDetectorId>(i+kBarrelEmcTowerId);
00079 StEmcDetector* detector=emc->detector(id);
00080 if(detector)
00081 if(detector->cluster())
00082 {
00083 StSPtrVecEmcCluster& cluster=detector->cluster()->clusters();
00084 if(cluster.size()>0)
00085 cluster.clear();
00086 }
00087 }
00088 return kTRUE;
00089 }
00090 Bool_t StEmcVirtualFinder::clear()
00091 {
00092 for(Int_t i = 0;i<MAXDETBARREL; i++)
00093 mColl[i]->empty();
00094 return kTRUE;
00095 }
00096 Bool_t StEmcVirtualFinder::fillStEvent(StEvent* event)
00097 {
00098 StEmcCollection *emc = event->emcCollection();
00099 if(!emc)
00100 return kFALSE;
00101
00102 for(Int_t i = 0;i<MAXDETBARREL;i++)
00103 if(mColl[i])
00104 {
00105 StDetectorId id = static_cast<StDetectorId>(i+kBarrelEmcTowerId);
00106 StEmcDetector* detector = emc->detector(id);
00107 if(detector)
00108 {
00109 Int_t n = mColl[i]->getNClusters();
00110 if(n>0)
00111 {
00112 StEmcClusterCollection* coll = detector->cluster();
00113 if(!coll)
00114 {
00115 coll = new StEmcClusterCollection();
00116 detector->setCluster(coll);
00117 }
00118 coll->setDetector(id);
00119 coll->setClusterFinderId(1);
00120 coll->setClusterFinderParamVersion(1);
00121
00122 for(Int_t j = 0;j<n;j++)
00123 {
00124 StEmcPreCluster *pc = mColl[i]->getCluster(j);
00125 if(pc)
00126 {
00127 StEmcCluster *c = pc->makeStCluster();
00128 if(c)
00129 coll->addCluster(c);
00130 }
00131 }
00132 }
00133 else
00134 detector->setCluster(NULL);
00135 }
00136 }
00137 return kTRUE;
00138 }
00139 Bool_t StEmcVirtualFinder::fillHistograms(StEvent* event)
00140 {
00141 StEmcCollection *emc = event->emcCollection();
00142 if(!emc)
00143 return kFALSE;
00144 for(Int_t i = 0;i<MAXDETBARREL;i++)
00145 {
00146 StDetectorId id = static_cast<StDetectorId>(i+kBarrelEmcTowerId);
00147 StEmcDetector* detector = emc->detector(id);
00148 if(detector)
00149 {
00150 StEmcClusterCollection* coll = detector->cluster();
00151 if(coll)
00152 {
00153 StSPtrVecEmcCluster& clusters = coll->clusters();
00154 Int_t n = clusters.size();
00155 mHist1D[0][i]->Fill(n);
00156 for(Int_t j = 0;j<n;j++)
00157 {
00158 StEmcCluster *c =clusters[j];
00159 if(c)
00160 {
00161 mHist1D[1][i]->Fill(c->nHits());
00162 mHist1D[2][i]->Fill(c->energy());
00163 mHist1D[3][i]->Fill(c->sigmaEta());
00164 mHist1D[4][i]->Fill(c->sigmaPhi());
00165 mHist2D[0][i]->Fill(c->eta(),c->phi());
00166 }
00167 }
00168 }
00169 }
00170 }
00171 return kFALSE;
00172 }