/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/DTagAlg/DTagAlg-00-01-04/src/LocalPhotonSelector.cxx

Go to the documentation of this file.
00001 #include "GaudiKernel/Bootstrap.h"
00002 #include "GaudiKernel/IJobOptionsSvc.h"
00003 #include "GaudiKernel/ISvcLocator.h"
00004 #include "GaudiKernel/PropertyMgr.h"
00005 #include "GaudiKernel/SmartDataPtr.h"
00006 
00007 #include "EventModel/EventModel.h"
00008 #include "EvtRecEvent/EvtRecEvent.h"
00009 #include "EvtRecEvent/EvtRecTrack.h"
00010 #include "DTagAlg/LocalPhotonSelector.h"
00011 
00012 LocalPhotonSelector::LocalPhotonSelector()
00013 {
00014    IJobOptionsSvc* jobSvc;
00015    Gaudi::svcLocator()->service("JobOptionsSvc", jobSvc);
00016 
00017    PropertyMgr m_propMgr;
00018 
00019    //Declare the properties
00020    m_propMgr.declareProperty("MinEnergy", m_minEnergy = 0.025);
00021 
00022    m_propMgr.declareProperty("InBarrelOrEndcap",  m_useBarrelEndcap   = true);
00023    m_propMgr.declareProperty("MaxCosThetaBarrel", m_maxCosThetaBarrel = 0.8);
00024    m_propMgr.declareProperty("MinCosThetaEndcap", m_minCosThetaEndcap = 0.84);
00025    m_propMgr.declareProperty("MaxCosThetaEndcap", m_maxCosThetaEndcap = 0.92);
00026    m_propMgr.declareProperty("MinEndcapEnergy",   m_minEndcapEnergy   = 0.050);
00027  
00028    m_propMgr.declareProperty("ApplyTimeCut",    m_applyTimeCut = true);
00029    m_propMgr.declareProperty("MinTime",         m_minTime      = 0.);
00030    m_propMgr.declareProperty("MaxTime",         m_maxTime      = 14.);
00031    m_propMgr.declareProperty("PhotonDeltaTime", m_deltaTime    = 10.);
00032  
00033    m_propMgr.declareProperty("ApplyDangCut", m_applyDangCut = true);
00034    m_propMgr.declareProperty("MinDang",      m_minDang      = 20.0);
00035 
00036    jobSvc->setMyProperties("LocalPhotonSelector", &m_propMgr);
00037 }
00038 
00039 bool LocalPhotonSelector::operator() (CDPhoton& aPhoton) {
00040 
00041   aPhoton.setUserTag(1);
00042    SmartDataPtr<EvtRecEvent> recEvt(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00043    SmartDataPtr<EvtRecTrackCol> recTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00044 
00045    EvtRecTrack* recTrk = const_cast<EvtRecTrack*>( aPhoton.photon() );
00046 
00047    if ( !recTrk->isEmcShowerValid() ) return false;
00048  
00049    RecEmcShower *emcTrk = recTrk->emcShower();
00050    double eraw = emcTrk->energy();
00051    double phi =  emcTrk->phi();
00052    double the =  emcTrk->theta();
00053    HepLorentzVector shP4( eraw * sin(the) * cos(phi),
00054                           eraw * sin(the) * sin(phi),
00055                           eraw * cos(the),
00056                           eraw );
00057 
00058    double cosThetaSh = shP4.vect().cosTheta();
00059  
00060  
00062    if (shP4.e() <= m_minEnergy) return false;
00063 
00064 
00066    if ( m_useBarrelEndcap ) {
00067       bool inBarrelEndcap = false;
00068 
00069       if(fabs(cosThetaSh) < m_maxCosThetaBarrel) inBarrelEndcap = true;
00070 
00071       if((fabs(cosThetaSh) > m_minCosThetaEndcap)
00072             &&(fabs(cosThetaSh) < m_maxCosThetaEndcap)
00073             &&(shP4.e() > m_minEndcapEnergy)) inBarrelEndcap = true;
00074 
00075       if ( !inBarrelEndcap ) return false;
00076    }
00077  
00079    if ( m_applyTimeCut ) {
00080       double time = emcTrk->time();
00081       if ( recEvt->totalCharged() > 0 ) {
00082          if ( time < m_minTime || time > m_maxTime ) return false;
00083       }
00084       else {
00085          RecEmcShower* firstG = (*(recTrkCol->begin()))->emcShower();
00086          double deltaTime = fabs(time - firstG->time());
00087          if ( deltaTime > 10 ) return false;
00088       }
00089    }
00090 
00092    if (m_applyDangCut && recEvt->totalCharged() > 0) {
00093       Hep3Vector emcpos(emcTrk->x(), emcTrk->y(), emcTrk->z());
00094       double dang = 200.;
00095 
00096       for (int j = 0; j < recEvt->totalCharged(); j++) {
00097          EvtRecTrackIterator jtTrk = recTrkCol->begin() + j;
00098          if ( !(*jtTrk)->isExtTrackValid() ) continue;
00099          RecExtTrack* extTrk = (*jtTrk)->extTrack();
00100          if ( extTrk->emcVolumeNumber() == -1 ) continue;
00101          Hep3Vector extpos = extTrk->emcPosition();
00102          double  angd1 = extpos.angle(emcpos);
00103          if ( angd1 < dang ) dang = angd1;
00104       }
00105 
00106       if ( dang < 200 ) {
00107          dang = dang * 180 / (CLHEP::pi);
00108          if (dang <= m_minDang) return( false );
00109       }
00110    }  // End of "recEvt->totalCharged() > 0" IF
00111  
00112    return true;
00113 }
00114 
00115 LocalPhotonSelector photonSelector;

Generated on Tue Nov 29 23:13:09 2016 for BOSS_7.0.2 by  doxygen 1.4.7