Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BesNavigatorInit Class Reference

#include <BesNavigatorInit.h>

List of all members.

Public Member Functions

 BesNavigatorInit (const std::string &name, ISvcLocator *pSvcLocator)
 BesNavigatorInit (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute ()
StatusCode execute ()
void fillEmcInfo ()
void fillEmcInfo ()
void fillMdcInfo ()
void fillMdcInfo ()
void fillMucInfo ()
void fillMucInfo ()
void fillTofInfo ()
void fillTofInfo ()
StatusCode finalize ()
StatusCode finalize ()
StatusCode initialize ()
StatusCode initialize ()

Private Attributes

bool b_fillEmc
bool b_fillMdc
bool b_fillMuc
bool b_fillTof
int m_mdcCut
EventNavigatorm_navigator
EventNavigatorm_navigator


Constructor & Destructor Documentation

BesNavigatorInit::BesNavigatorInit const std::string &  name,
ISvcLocator *  pSvcLocator
 

00041                                                                                   : Algorithm(name, pSvcLocator){
00042   // Subdetector flags
00043   declareProperty("FillMdcInfo", b_fillMdc=true);
00044   declareProperty("FillTofInfo", b_fillTof=true);
00045   declareProperty("FillEmcInfo", b_fillEmc=true);
00046   declareProperty("FillMucInfo", b_fillMuc=true);
00047   declareProperty("MdcCut", m_mdcCut=7);
00048 }

BesNavigatorInit::BesNavigatorInit const std::string &  name,
ISvcLocator *  pSvcLocator
 


Member Function Documentation

StatusCode BesNavigatorInit::execute  ) 
 

StatusCode BesNavigatorInit::execute  ) 
 

00058                                      {
00059   MsgStream log(msgSvc(), name());
00060   
00061   m_navigator = new EventNavigator;
00062   m_navigator->setMdcCut(m_mdcCut);
00063   
00064   SmartDataPtr<McParticleCol> mcParticles(eventSvc(),"/Event/MC/McParticleCol");
00065   if( ! mcParticles )
00066     {
00067       log << MSG::ERROR << "Unable to retrieve McParticleCol" << endreq;
00068       return StatusCode::FAILURE;
00069     }
00070   else
00071     log << MSG::DEBUG << "McParticleCol retrieved of size "<< mcParticles->size() << endreq;
00072 
00073   for(McParticleCol::const_iterator it = mcParticles->begin(); it != mcParticles->end(); it++)
00074     m_navigator->addIdLink( (*it)->trackIndex(), *it );
00075 
00076   // store MDC relations
00077   if( b_fillMdc )
00078     fillMdcInfo();
00079 
00080   // store EMC relations
00081   if( b_fillEmc )
00082     fillEmcInfo();
00083 
00084   // store TOF relations
00085   if( b_fillTof )
00086     fillTofInfo();
00087 
00088   // store MUC relations
00089   if( b_fillMuc )
00090     fillMucInfo();
00091 
00092   // Register EventNavigator to Gaudi TDS
00093   
00094   StatusCode sc = eventSvc()->registerObject("/Event/Navigator",m_navigator);
00095   if (sc != StatusCode::SUCCESS)
00096     {
00097       log << MSG::ERROR << "Could not register EventNavigator" << endreq;
00098       return StatusCode::FAILURE;
00099     }            
00100   else
00101     log << MSG::INFO << "EventNavigator registered successfully in TDS" << endreq;
00102   
00103   return StatusCode::SUCCESS;
00104 }

void BesNavigatorInit::fillEmcInfo  ) 
 

void BesNavigatorInit::fillEmcInfo  ) 
 

00219 {   
00220   MsgStream log(msgSvc(), name());
00221 
00222   SmartDataPtr<EmcMcHitCol> emcMcHits(eventSvc(),"/Event/MC/EmcMcHitCol");
00223   if( ! emcMcHits )
00224     {
00225       log << MSG::ERROR << "Unable to retrieve EmcMcHitCol" << endreq;
00226       return;
00227     }
00228   else
00229     log << MSG::DEBUG << "EmcMcHitsCol retrieved of size "<< emcMcHits->size() << endreq;
00230   
00231    
00232   SmartDataPtr<RecEmcShowerCol> emcRecShowers(eventSvc(),"/Event/Recon/RecEmcShowerCol");
00233   if( ! emcRecShowers )
00234    {
00235      log << MSG::ERROR << "Unable to retrieve RecEmcShowers" << endreq;
00236      return;
00237    }
00238   else
00239     log << MSG::DEBUG << "RecEmcShowers retrieved of size "<< emcRecShowers->size() << endreq;
00240   
00241 
00242   for(EmcMcHitCol::const_iterator it = emcMcHits->begin(); it != emcMcHits->end(); it++)
00243     {
00244       //first put Id of crystal, which particle hits initially
00245       int crystalId = (*it)->identify().get_value();
00246       if(crystalId != 0) // not gamma conerted in TOF
00247         m_navigator->addIdLink( crystalId, *it );
00248       //then add all other crystals touched by shower
00249       const map<Identifier,double>& hitmap = (*it)->getHitMap();
00250       map<Identifier,double>::const_iterator jt;
00251       for (jt=hitmap.begin(); jt!=hitmap.end(); jt++)
00252         m_navigator->addIdLink( (*jt).first.get_value(), *it );
00253     }
00254 
00255   for(RecEmcShowerCol::const_iterator it = emcRecShowers->begin(); it != emcRecShowers->end(); it++)
00256     {
00257       const RecEmcFractionMap& fractionMap = (*it)->getFractionMap();
00258       for(RecEmcFractionMap::const_iterator jt = fractionMap.begin(); jt != fractionMap.end(); jt++)
00259         {
00260           int crystalId = (*jt).first.get_value();
00261           m_navigator->addIdLink( crystalId, *it );
00262           EmcMcHitVector emcMcHitV = m_navigator->getEmcMcHits(crystalId);
00263           for( EmcMcHitVector::iterator kt = emcMcHitV.begin(); kt!=emcMcHitV.end(); kt++)
00264             {
00265               m_navigator->addLink(*it, *kt); // EmcMcHits corresponding given shower
00266               const McParticle* mcParticle = m_navigator->getMcParticle((*kt)->getTrackIndex());
00267               m_navigator->addLink(*it, mcParticle);
00268             }
00269         }
00270     }  
00271   
00272   for(EmcMcHitCol::iterator it = emcMcHits->begin(); it != emcMcHits->end(); it++)
00273     {
00274       const McParticle* mcParticle = m_navigator->getMcParticle((*it)->getTrackIndex());
00275       const map<Identifier,double>& hitmap = (*it)->getHitMap();
00276       map<Identifier,double>::const_iterator jt;
00277       // for all crystalls fired by this particle
00278       int crystalId = (*it)->identify().get_value();
00279       RecEmcShowerVector showerVector = m_navigator->getEmcRecShowers(crystalId);
00280       RecEmcShowerVector::const_iterator kt;
00281       for(kt = showerVector.begin(); kt != showerVector.end(); kt++)
00282         {
00283           m_navigator->addLink(*it, *kt);
00284           m_navigator->addLink(mcParticle, *kt);
00285         }
00286       
00287       for (jt=hitmap.begin(); jt!=hitmap.end(); jt++)
00288         {
00289           crystalId = (*jt).first.get_value();
00290           RecEmcShowerVector showerVector = m_navigator->getEmcRecShowers(crystalId);
00291           for(kt = showerVector.begin(); kt != showerVector.end(); kt++)
00292             {
00293               m_navigator->addLink(*it, *kt);
00294               m_navigator->addLink(mcParticle, *kt);
00295             }
00296         }
00297     }
00298 }

void BesNavigatorInit::fillMdcInfo  ) 
 

void BesNavigatorInit::fillMdcInfo  ) 
 

00113 {
00114   MsgStream log(msgSvc(), name());
00115   
00116   // Get MDC info from TDS
00117   SmartDataPtr<RecMdcTrackCol> mdcTracks(eventSvc(),"/Event/Recon/RecMdcTrackCol");
00118   if( ! mdcTracks )
00119     {
00120       log << MSG::ERROR << "Unable to retrieve RecMdcTrackCol" << endreq;
00121       return;
00122     }
00123   else
00124     log << MSG::DEBUG << "MdcTrackCol retrieved of size "<< mdcTracks->size() << endreq;
00125   
00126   SmartDataPtr<MdcMcHitCol> mdcMcHits(eventSvc(),"/Event/MC/MdcMcHitCol");
00127   if( ! mdcMcHits )
00128    {
00129      log << MSG::ERROR << "Unable to retrieve MdcMcHitCol" << endreq;
00130      return;
00131    }
00132   else
00133     log << MSG::DEBUG << "MdcMcHitsCol retrieved of size "<< mdcMcHits->size() << endreq;
00134   
00135   SmartDataPtr<RecMdcHitCol> mdcRecHits(eventSvc(),"/Event/Recon/RecMdcHitCol");
00136   if( ! mdcRecHits )
00137     {
00138       log << MSG::ERROR << "Unable to retrieve RecMdcHitCol" << endreq;
00139       return;
00140     }
00141   else
00142     log << MSG::DEBUG << "MdcRecHitCol retrieved of size "<< mdcRecHits->size() << endreq;
00143   
00144   SmartDataPtr<MdcDigiCol> mdcDigits(eventSvc(),"/Event/Digi/MdcDigiCol");
00145   if( ! mdcDigits )
00146     {
00147       log << MSG::ERROR << "Unable to retrieve MdcDigiCol" << endreq;
00148       return;
00149     }
00150   else
00151     log << MSG::DEBUG << "MdcDigiCol retrieved of size "<< mdcDigits->size() << endreq;
00152   
00153   // Fill auxillary lookup lists of correspondence id<->pointer
00154   
00155   for(RecMdcTrackCol::const_iterator it = mdcTracks->begin(); it != mdcTracks->end(); it++)
00156     m_navigator->addIdLink( (*it)->trackId(), *it );
00157   
00158   for(MdcMcHitCol::const_iterator it = mdcMcHits->begin(); it != mdcMcHits->end(); it++)
00159     m_navigator->addIdLink( (*it)->identify().get_value(), *it );
00160   
00161   for(RecMdcHitCol::const_iterator it = mdcRecHits->begin(); it != mdcRecHits->end(); it++)
00162     m_navigator->addIdLink( (*it)->getMdcId().get_value(), *it);
00163   
00164   for(MdcDigiCol::const_iterator it = mdcDigits->begin(); it != mdcDigits->end(); it++)
00165     m_navigator->addIdLink( (*it)->identify().get_value(), *it);
00166   
00167   // Fill MDC info into EventNavigator
00168   
00169   for(RecMdcHitCol::iterator it=mdcRecHits->begin(); it!=mdcRecHits->end(); it++)
00170     {
00171       int mdcId = ((*it)->getMdcId()).get_value();
00172       
00173       // vector is needed, because several MdcMcHits may correspond to one detector Id 
00174       // (for instance two tracks produce signal in the same wire)
00175       
00176       MdcMcHitVector mdcMcHitV = m_navigator->getMdcMcHits(mdcId);
00177       
00178       if ( mdcMcHitV.size() == 0 )
00179         continue;
00180       
00181       const RecMdcTrack* mdcTrack = m_navigator->getMdcTrack((*it)->getTrkId());
00182       for( MdcMcHitVector::iterator jt = mdcMcHitV.begin(); jt!=mdcMcHitV.end(); jt++)
00183         {
00184           m_navigator->addLink( (*it), (*jt) );
00185           
00186           if( mdcTrack == 0 )
00187             continue;
00188 
00189           const McParticle* mcParticle = m_navigator->getMcParticle((*jt)->getTrackIndex());
00190           m_navigator->addLink( mdcTrack, (*jt) );
00191           m_navigator->addLink( mdcTrack, mcParticle );
00192         }    
00193     }
00194   
00195   
00196   for(MdcMcHitCol::iterator it = mdcMcHits->begin(); it != mdcMcHits->end(); it++)
00197     {
00198       const McParticle* mcParticle = m_navigator->getMcParticle((*it)->getTrackIndex());
00199       
00200       int mdcId = (*it)->identify().get_value();
00201       const RecMdcHit* recHit = m_navigator->getMdcRecHit(mdcId);
00202 
00203       if( recHit == 0 )
00204         continue;
00205 
00206       m_navigator->addLink( (*it), recHit);
00207       m_navigator->addLink( mcParticle, recHit);
00208       const RecMdcTrack* mdcTrack = m_navigator->getMdcTrack(recHit->getTrkId());
00209       
00210       if( mdcTrack == 0 )
00211         continue;
00212       
00213       m_navigator->addLink( mcParticle, mdcTrack);
00214     }
00215 }

void BesNavigatorInit::fillMucInfo  ) 
 

void BesNavigatorInit::fillMucInfo  ) 
 

00305 {
00306 }

void BesNavigatorInit::fillTofInfo  ) 
 

void BesNavigatorInit::fillTofInfo  ) 
 

00301 {
00302 }

StatusCode BesNavigatorInit::finalize  ) 
 

StatusCode BesNavigatorInit::finalize  ) 
 

00108                                       {
00109   return StatusCode::SUCCESS;
00110 }

StatusCode BesNavigatorInit::initialize  ) 
 

StatusCode BesNavigatorInit::initialize  ) 
 

00052                                        {
00053   return StatusCode::SUCCESS;
00054 }


Member Data Documentation

bool BesNavigatorInit::b_fillEmc [private]
 

bool BesNavigatorInit::b_fillMdc [private]
 

bool BesNavigatorInit::b_fillMuc [private]
 

bool BesNavigatorInit::b_fillTof [private]
 

int BesNavigatorInit::m_mdcCut [private]
 

EventNavigator* BesNavigatorInit::m_navigator [private]
 

EventNavigator* BesNavigatorInit::m_navigator [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 15:53:02 2011 for BOSS6.5.5 by  doxygen 1.3.9.1