EmcRecShowerShape Class Reference

#include <EmcRecShowerShape.h>

List of all members.

Public Member Functions

void CalculateMoment (RecEmcShower &aShower) const
void SecondMoment (RecEmcShower &aShower) const
void LatMoment (RecEmcShower &aShower) const
void A20Moment (RecEmcShower &aShower) const
void A42Moment (RecEmcShower &aShower) const


Detailed Description

Definition at line 11 of file EmcRecShowerShape.h.


Member Function Documentation

void EmcRecShowerShape::A20Moment ( RecEmcShower aShower  )  const

Definition at line 135 of file EmcRecShowerShape.cxx.

References DstEmcShower::e5x5(), energy, RecEmcShower::getFractionMap5x5(), boss::pos, DstEmcShower::position(), and DstEmcShower::setA20Moment().

Referenced by CalculateMoment().

00136 {
00137   double a20=0;
00138   const double R0=15.6;
00139   Hep3Vector r0(aShower.position());    //shower center
00140   RecEmcFractionMap fracMap=aShower.getFractionMap5x5();
00141   RecEmcFractionMap::const_iterator it;
00142   for(it=fracMap.begin();
00143       it!=fracMap.end();
00144       it++){
00145     double energy=it->second.getEnergy()*it->second.getFraction();
00146     HepPoint3D pos(it->second.getFrontCenter());   //digi front center
00147 
00148     Hep3Vector r=pos-r0;
00149     r=r-r.dot(r0)*r0/(r0.mag()*r0.mag());
00150 
00151     a20+=(energy/aShower.e5x5())*(2*pow(r.mag()/R0,2.)-1);
00152   }
00153 
00154   aShower.setA20Moment(fabs(a20));
00155 }

void EmcRecShowerShape::A42Moment ( RecEmcShower aShower  )  const

Definition at line 157 of file EmcRecShowerShape.cxx.

References abs, DstEmcShower::e5x5(), energy, exp(), RecEmcShower::getFractionMap5x5(), boss::pos, DstEmcShower::position(), and DstEmcShower::setA42Moment().

Referenced by CalculateMoment().

00158 {
00159   complex<double> a42(0.,0.);
00160   const double R0=15.6;
00161   Hep3Vector r0(aShower.position());    //shower center
00162   RecEmcFractionMap fracMap=aShower.getFractionMap5x5();
00163   RecEmcFractionMap::const_iterator it;
00164   for(it=fracMap.begin();
00165       it!=fracMap.end();
00166       it++){
00167     double energy=it->second.getEnergy()*it->second.getFraction();
00168     HepPoint3D pos(it->second.getFrontCenter());   //digi front center
00169 
00170     Hep3Vector r=pos-r0;
00171     r=r-r.dot(r0)*r0/(r0.mag()*r0.mag());
00172 
00173     complex<double> a(0.,2.*r.phi());
00174 
00175     a42+=(energy/aShower.e5x5())*(4.*pow(r.mag()/R0,4.)-3.*pow(r.mag()/R0,2.))*exp(a);
00176   }
00177 
00178   aShower.setA42Moment(abs(a42));
00179 }

void EmcRecShowerShape::CalculateMoment ( RecEmcShower aShower  )  const

Definition at line 10 of file EmcRecShowerShape.cxx.

References A20Moment(), A42Moment(), LatMoment(), and SecondMoment().

Referenced by EmcRecSplitWeighted::Split().

00011 {
00012 
00013   SecondMoment(aShower);
00014   LatMoment(aShower);
00015   A20Moment(aShower);
00016   A42Moment(aShower);
00017 }

void EmcRecShowerShape::LatMoment ( RecEmcShower aShower  )  const

Definition at line 64 of file EmcRecShowerShape.cxx.

References abs, EmcID::barrel_ec(), cos(), energy, RecEmcShower::getFractionMap5x5(), EmcRecParameter::GetInstance(), EmcID::phi_module(), boss::pos, DstEmcShower::position(), DstEmcShower::setLatMoment(), sin(), and EmcID::theta_module().

Referenced by CalculateMoment().

00065 {
00066   RecEmcFractionMap fracMap=aShower.getFractionMap5x5();
00067    if(fracMap.size()<2) {
00068     aShower.setLatMoment(0);
00069     return;
00070   }
00071  
00072   vector<RecEmcFraction> aFractionVec;
00073   RecEmcFractionMap::const_iterator it;
00074   for(it=fracMap.begin();
00075       it!=fracMap.end();
00076       it++){
00077     aFractionVec.push_back(it->second);
00078   }
00079 
00080   //find the largest 2 energy
00081   partial_sort(aFractionVec.begin(),
00082       aFractionVec.begin()+2,
00083       aFractionVec.end(),
00084       greater<RecEmcFraction>());
00085 
00086   //caculate LAT
00087   vector<RecEmcFraction>::iterator iVec;
00088   double numerator=0;
00089   double denominator=0;
00090   int n=0;
00091   for(iVec=aFractionVec.begin();
00092       iVec!=aFractionVec.end();
00093       iVec++) {
00094     n++;
00095     HepPoint3D pos((*iVec).getFrontCenter());  //digi front center
00096 
00098       EmcRecParameter& Para=EmcRecParameter::GetInstance(); 
00099     if(Para.DataMode()==1) {
00100    
00101       RecEmcID id = (*iVec).getCellId();
00102       const unsigned int module = EmcID::barrel_ec(id);
00103       const unsigned int thetaModule = EmcID::theta_module(id);
00104       const unsigned int phiModule = EmcID::phi_module(id);
00105       double lengthemc;//
00106       lengthemc = abs(pos.z()/cos(pos.theta()));//
00107       double posDataCorPar;
00108       if(module==1) posDataCorPar=Para.BarrPosDataCor(thetaModule,phiModule);
00109       if(module==0) posDataCorPar=Para.EastPosDataCor(thetaModule,phiModule);
00110       if(module==2) posDataCorPar=Para.WestPosDataCor(thetaModule,phiModule);   
00111       // cout<<module<<"\t"<<thetaModule<<"\t"<<phiModule<< "  "<< posDataCorPar<<endl;
00112       pos.setTheta(pos.theta()-posDataCorPar/lengthemc);
00113       // cout<<"poscor"<<pos<< "  "<<endl;
00114     }
00115 
00117 
00118     double r=pos.mag()*sin(aShower.position().angle(pos));
00119 
00120     double energy=(*iVec).getEnergy()*(*iVec).getFraction();
00121     if(n<3) {
00122       denominator+=5.2*5.2*energy;
00123     } else {
00124       numerator+=r*r*energy;
00125       denominator+=r*r*energy;
00126     }
00127   }
00128   double lat=-99;
00129   if(denominator>0) lat=numerator/denominator;
00130 
00131   aShower.setLatMoment(lat);
00132 
00133 }

void EmcRecShowerShape::SecondMoment ( RecEmcShower aShower  )  const

Definition at line 19 of file EmcRecShowerShape.cxx.

References abs, EmcID::barrel_ec(), EmcRecParameter::BarrPosDataCor(), cos(), EmcRecParameter::DataMode(), EmcRecParameter::EastPosDataCor(), RecEmcShower::getFractionMap5x5(), EmcRecParameter::GetInstance(), EmcID::phi_module(), boss::pos, DstEmcShower::position(), DstEmcShower::setSecondMoment(), EmcID::theta_module(), and EmcRecParameter::WestPosDataCor().

Referenced by CalculateMoment().

00020 {
00021   double etot=0;
00022   double sum=0;
00023   HepPoint3D center(aShower.position());
00024   RecEmcFractionMap fracMap=aShower.getFractionMap5x5();
00025   
00026   RecEmcFractionMap::const_iterator it;
00027   for(it=fracMap.begin();
00028       it!=fracMap.end();
00029       it++){
00030     HepPoint3D pos(it->second.getFrontCenter());   //digi front center
00031 
00033       EmcRecParameter& Para=EmcRecParameter::GetInstance(); 
00034     if(Para.DataMode()==1) {
00035    
00036       RecEmcID id = it->second.getCellId();
00037       const unsigned int module = EmcID::barrel_ec(id);
00038       const unsigned int thetaModule = EmcID::theta_module(id);
00039       const unsigned int phiModule = EmcID::phi_module(id);
00040       double lengthemc;//
00041       lengthemc = abs(pos.z()/cos(pos.theta()));//
00042       double posDataCorPar;
00043       if(module==1) posDataCorPar=Para.BarrPosDataCor(thetaModule,phiModule);
00044       if(module==0) posDataCorPar=Para.EastPosDataCor(thetaModule,phiModule);
00045       if(module==2) posDataCorPar=Para.WestPosDataCor(thetaModule,phiModule);   
00046       // cout<<module<<"\t"<<thetaModule<<"\t"<<phiModule<< "  "<< posDataCorPar<<endl;
00047       pos.setTheta(pos.theta()-posDataCorPar/lengthemc);
00048       // cout<<"poscor"<<pos<< "  "<<endl;
00049     }
00050 
00052 
00053     etot+=it->second.getEnergy()*it->second.getFraction();
00054     sum+=it->second.getEnergy()*it->second.getFraction()*pos.distance2(center);
00055   }
00056 
00057   if(etot>0) {
00058     sum/=etot;
00059   }
00060 
00061   aShower.setSecondMoment(sum);
00062 }


Generated on Tue Nov 29 23:18:45 2016 for BOSS_7.0.2 by  doxygen 1.4.7