00001 #include "TMath.h"
00002 #include "StEEmcIUMixEvent.h"
00003
00004 ClassImp(StEEmcIUMixEvent);
00005 ClassImp(StEEmcIUMixEventHead);
00006 ClassImp(StEEmcIUMixEventClust);
00007
00008
00009 StEEmcIUMixEvent::StEEmcIUMixEvent()
00010 {
00011 for ( Int_t ii=0;ii<90;ii++ )
00012 {
00013 pedEEmcDSM_HT[ii]=1;
00014 pedEEmcDSM_TP[ii]=1;
00015 }
00016
00017 for ( Int_t ii=0;ii<10;ii++ )
00018 {
00019 pedEEmcDSM_TP[ii+00] = (ii%2)? 3 : 5;
00020 pedEEmcDSM_TP[ii+20] = (ii%2)? 3 : 5;
00021 pedEEmcDSM_TP[ii+30] = (ii%2)? 3 : 5;
00022 pedEEmcDSM_TP[ii+50] = (ii%2)? 3 : 5;
00023 pedEEmcDSM_TP[ii+60] = (ii%2)? 3 : 5;
00024 pedEEmcDSM_TP[ii+80] = (ii%2)? 3 : 5;
00025 }
00026 Clear();
00027 }
00028
00029
00030 void StEEmcIUMixEvent::setEvent( StMuEvent *event )
00031 {
00032
00033 mEventId = event->eventId();
00034 mEventNumber = event->eventNumber();
00035 mRunId = event->runId();
00036 mRunNumber = event->runNumber();
00037 mEventInfo = event->eventInfo();
00038 mRunInfo = event->runInfo();
00039 mL0trigger = event->l0Trigger();
00040 mMuTriggerIdCollection = event->triggerIdCollection();
00041 mMagneticField = event->magneticField();
00042 mBbcTrigger = event->bbcTriggerDetector();
00043 mEmcTrigger = event->emcTriggerDetector();
00044
00045 mPrimaryVertex = event->primaryVertexPosition();
00046
00047 }
00048
00049 void StEEmcIUMixEventHead::setEvent( StMuEvent *event )
00050 {
00051
00052 mEventId = event->eventId();
00053 mEventNumber = event->eventNumber();
00054 mRunId = event->runId();
00055 mRunNumber = event->runNumber();
00056
00057 mNumberOfCandidates = 0;
00058
00059 }
00060
00061
00062 void StEEmcIUMixEvent::Clear(Option_t *o)
00063 {
00064 nPairs=0;
00065 for ( Int_t i=0;i<MAX_PAIRS;i++ )
00066 {
00067 mMass[i]=0.;
00068 mPT[i]=0.;
00069 mEta[i]=-10.;
00070 mPhi[i]=-10.;
00071 mEEmcEta[i]=-10.;
00072 mZgg[i]=0.;
00073 mPhigg[i]=0.;
00074 mEnergy[i]=0.;
00075 mEpre1[i]=0.;
00076 mEpre2[i]=0.;
00077 mEpost[i]=0.;
00078 mEsmdu[i]=0.;
00079 mEsmdv[i]=0.;
00080 mZvertex[i]=0.;
00081
00082 mTower1[i]=0;
00083 mTower2[i]=0;
00084 mEnergy1[i]=0.;
00085 mEnergy2[i]=0.;
00086
00087 mEnergyRatio[i]=0.;
00088
00089 mNumberT[i]=0;
00090 mNumberR[i]=0;
00091 mNumberU[i]=0;
00092 mNumberV[i]=0;
00093 }
00094 for ( Int_t ii=0;ii<720;ii++ ) {
00095 mADC[ii]=0.;
00096 mStat[ii]=0;
00097 }
00098
00099
00100
00101 mTotalEnergyT=0.;
00102 mTotalEnergyP=0.;
00103 mTotalEnergyQ=0.;
00104 mTotalEnergyR=0.;
00105 mTotalEnergyU=0.;
00106 mTotalEnergyV=0.;
00107
00108 }
00109
00110
00111 void StEEmcIUMixEvent::addPair ( StEEmcIUPair p ) {
00112
00113 if ( nPairs >= MAX_PAIRS ) return;
00114 mMass[nPairs] = p.mass();
00115 mPT[nPairs] = p.pt();
00116 mEta[nPairs] = p.momentum().Eta();
00117 mPhi[nPairs] = p.momentum().Phi();
00118 mZgg[nPairs] = p.zgg();
00119 mPhigg[nPairs] = p.phigg();
00120 mEnergy[nPairs] = p.energy();
00121
00122 float Rxy=TMath::Sqrt(p.vertex().x()*p.vertex().x()+p.vertex().y()*p.vertex().y());
00123 float hHeight=p.pt()*(270.0-p.vertex().Z())/p.pz()+Rxy;
00124 float etatheta=TMath::ATan(hHeight/270.0);
00125
00126 float mideta=tan(etatheta/2.0);
00127 float eemceta=-log(mideta);
00128 mEEmcEta[nPairs]=eemceta;
00129 Float_t esmdu=0.;
00130 Float_t esmdv=0.;
00131 esmdu += p.point(0).cluster(0).energy();
00132 esmdu += p.point(1).cluster(0).energy();
00133 esmdv += p.point(0).cluster(1).energy();
00134 esmdv += p.point(1).cluster(1).energy();
00135 Float_t epre1 = 0.;
00136 epre1 += p.point(0).energy(1);
00137 epre1 += p.point(1).energy(1);
00138 Float_t epre2 = 0.;
00139 epre2 += p.point(0).energy(2);
00140 epre2 += p.point(1).energy(2);
00141 Float_t epost = 0.;
00142 epost += p.point(0).energy(3);
00143 epost += p.point(1).energy(3);
00144
00145 mEpre1[nPairs]=epre1;
00146 mEpre2[nPairs]=epre2;
00147 mEpost[nPairs]=epost;
00148 mEsmdu[nPairs]=esmdu;
00149 mEsmdv[nPairs]=esmdv;
00150
00151 mZvertex[nPairs]=p.vertex().Z();
00152
00153 mTower1[nPairs] = p.point(0).tower(0).index();
00154 mEnergy1[nPairs]= p.point(0).energy();
00155
00156 mTower2[nPairs] = p.point(1).tower(0).index();
00157 mEnergy2[nPairs] = p.point(1).energy();
00158
00159
00160 nPairs++;
00161
00162 }
00163
00164
00165 Float_t StEEmcIUMixEvent::sum3x3(Int_t index)
00166 {
00167 Float_t sum=this->mADC[index];
00168 Int_t ieta = index%12;
00169 Int_t iphi = index/12;
00171 for ( Int_t jeta=ieta-1;jeta<=ieta+1;jeta++ ) {
00172 if ( jeta<0||jeta>11 ) continue;
00173 for ( Int_t jphi=iphi-1;jphi<=iphi+1;jphi++ ) {
00174 Int_t myeta=jeta;
00175 Int_t myphi=(jphi+60)%60;
00176 if ( myeta==ieta&&myphi==iphi ) continue;
00177 Float_t myEt=this->mADC[ myeta + 12*myphi ];
00178 sum += myEt;
00179 }
00180 }
00181 return sum;
00182 }
00183 Float_t StEEmcIUMixEvent::sum3x3()
00184 {
00185 Float_t max=0.;
00186 Int_t index = 0;
00187 for ( Int_t ii=0;ii<720;ii++ )
00188 if ( this->mADC[ii] > max ) {
00189 index=ii;
00190 max=this->mADC[ii];
00191 }
00192 return sum3x3(index);
00193 }
00194 Float_t StEEmcIUMixEvent::htdsm()
00195 {
00196 Float_t max=0.;
00197 for ( Int_t ii=0;ii<90;ii++ ) {
00198 Float_t dsm=mEmcTrigger.highTowerEndcap(ii);
00199 dsm-=pedEEmcDSM_HT[ii];
00200 if ( dsm>max ) max=dsm;
00201 }
00202 return max;
00203 }
00204 Float_t StEEmcIUMixEvent::tpdsm()
00205 {
00206 Float_t max=0.;
00207 for ( Int_t ii=0;ii<90;ii++ ) {
00208 Float_t dsm=mEmcTrigger.patchEndcap(ii);
00209 dsm-=pedEEmcDSM_TP[ii];
00210 if ( dsm>max ) max=dsm;
00211 }
00212 return max;
00213 }
00214 Int_t StEEmcIUMixEvent::npi0()
00215 {
00216 Int_t count=0;
00217 for ( Int_t ii=0;ii<TMath::Min(5,nPairs);ii++ )
00218 {
00219 if ( mMass[ii]>0.08 && mMass[ii]<0.18 ) count++;
00220 }
00221 return count;
00222 }
00223 Int_t StEEmcIUMixEvent::deta(Int_t id)
00224 {
00225 if ( id<0||id>=nPairs)
00226 return -1;
00227 Int_t del = ( mTower1[id]%12 - mTower2[id]%12 );
00228 return TMath::Abs(del);
00229 }
00230 Int_t StEEmcIUMixEvent::dphi(Int_t id)
00231 {
00232 if ( id<0||id>=nPairs)
00233 return -1;
00234 Int_t del = ( mTower1[id]/12 - mTower2[id]/12 + 60 ) % 60;
00235 return TMath::Abs(del);
00236 }
00237
00238
00239
00240 void StEEmcIUMixEventHead::Clear(Option_t *opts)
00241 {
00242 mEventId=0;
00243 mEventNumber=0;
00244 mRunId=0;
00245 mRunNumber=0;
00246 mNumberOfCandidates=0;
00247 }
00248
00249
00250 void StEEmcIUMixEventClust::Clear(Option_t *opts)
00251 {
00252 index=-1;
00253 eTower=0.;
00254 ePre1=0.;
00255 ePre2=0.;
00256 ePost=0.;
00257 eSmd=0.;
00258 etaTower=0.;
00259 etaPre1=0.;
00260 etaPre2=0.;
00261 etaPost=0.;
00262 etaSmd=0.;
00263 nTower=0;
00264 nPre1=0;
00265 nPre2=0;
00266 nPost=0;
00267 }