#include <BesNavigatorInit.h>
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 |
EventNavigator * | m_navigator |
EventNavigator * | m_navigator |
|
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 }
|
|
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
00305 { 00306 }
|
|
|
|
00301 { 00302 }
|
|
|
|
00108 {
00109 return StatusCode::SUCCESS;
00110 }
|
|
|
|
00052 {
00053 return StatusCode::SUCCESS;
00054 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|