60 MsgStream log(
msgSvc(), name() );
64 SmartDataPtr<EventNavigator> nav( eventSvc(),
"/Event/Navigator" );
67 log << MSG::DEBUG <<
"Create EventNavigator" << endmsg;
73 log << MSG::DEBUG <<
"Found EventNavigator (read from DST)" << endmsg;
76 if ( log.level() < 3 ) m_navigator->Print();
79 SmartDataPtr<McParticleCol> mcParticles( eventSvc(),
"/Event/MC/McParticleCol" );
82 log << MSG::ERROR <<
"Unable to retrieve McParticleCol" << endmsg;
83 return StatusCode::FAILURE;
86 log << MSG::DEBUG <<
"McParticleCol retrieved of size " << mcParticles->size() << endmsg;
88 for ( McParticleCol::const_iterator it = mcParticles->begin(); it != mcParticles->end();
90 { m_navigator->addIdLink( ( *it )->trackIndex(), *it ); }
107 StatusCode sc = eventSvc()->registerObject(
"/Event/Navigator", m_navigator );
108 if ( sc != StatusCode::SUCCESS )
110 log << MSG::ERROR <<
"Could not register EventNavigator" << endmsg;
111 return StatusCode::FAILURE;
113 else log << MSG::INFO <<
"EventNavigator registered successfully in TDS" << endmsg;
116 if ( log.level() < 3 )
118 log << MSG::DEBUG <<
"Write EventNavigator" << endmsg;
119 m_navigator->Print();
122 return StatusCode::SUCCESS;
130 MsgStream log(
msgSvc(), name() );
134 SmartDataPtr<MdcMcHitCol> mdcMcHits( eventSvc(),
"/Event/MC/MdcMcHitCol" );
137 log << MSG::DEBUG <<
"MdcMcHitsCol retrieved of size " << mdcMcHits->size() << endmsg;
139 if ( mdcMcHits->size() != 0 ) m_navigator->getMcMdcMcHitsIdx().clear();
141 for ( MdcMcHitCol::const_iterator it = mdcMcHits->begin(); it != mdcMcHits->end(); it++ )
144 m_navigator->getMcMdcMcHitsIdx().insert(
145 pair<int, int>( ( *it )->identify().get_value(), ( *it )->getTrackIndex() ) );
150 else { log << MSG::DEBUG <<
"Unable to retrieve MdcMcHitCol" << endmsg; }
153 SmartDataPtr<RecMdcHitCol> mdcRecHits( eventSvc(),
"/Event/Recon/RecMdcHitCol" );
156 log << MSG::DEBUG <<
"MdcRecHitCol retrieved of size " << mdcRecHits->size() << endmsg;
158 if ( mdcRecHits->size() != 0 ) m_navigator->getMcMdcTracksIdx().clear();
160 IndexMap& mchits = m_navigator->getMcMdcMcHitsIdx();
161 for ( RecMdcHitCol::iterator it = mdcRecHits->begin(); it != mdcRecHits->end(); it++ )
163 int mdcId = ( ( *it )->getMdcId() ).get_value();
166 const pair<IndexMap::const_iterator, IndexMap::const_iterator> range =
167 mchits.equal_range( mdcId );
168 for ( IndexMap::const_iterator jt = range.first; jt != range.second; jt++ )
170 m_navigator->getMcMdcTracksIdx().insert(
171 pair<int, int>( ( *jt ).second, ( *it )->getTrkId() ) );
175 else log << MSG::DEBUG <<
"Unable to retrieve RecMdcHitCol" << endmsg;
179 SmartDataPtr<RecMdcTrackCol> mdcTracks( eventSvc(),
"/Event/Recon/RecMdcTrackCol" );
182 log << MSG::DEBUG <<
"MdcTrackCol retrieved of size " << mdcTracks->size() << endmsg;
183 for ( RecMdcTrackCol::const_iterator it = mdcTracks->begin(); it != mdcTracks->end();
185 m_navigator->addIdLink( ( *it )->trackId(), *it );
187 else { log << MSG::DEBUG <<
"Unable to retrieve RecMdcTrackCol" << endmsg; }
190 SmartDataPtr<RecMdcKalTrackCol> mdcKalTracks( eventSvc(),
"/Event/Recon/RecMdcKalTrackCol" );
193 log << MSG::DEBUG <<
"MdcKalTrackCol retrieved of size " << mdcKalTracks->size() << endmsg;
194 for ( RecMdcKalTrackCol::const_iterator it = mdcKalTracks->begin();
195 it != mdcKalTracks->end(); it++ )
196 m_navigator->addIdLink( ( *it )->trackId(), *it );
198 else { log << MSG::DEBUG <<
"Unable to retrieve RecMdcTrackCol" << endmsg; }
201 IndexMap::const_iterator i;
202 IndexMap& index = m_navigator->getMcMdcTracksIdx();
203 for ( i = index.begin(); i != index.end(); i++ )
206 const McParticle* mcParticle = m_navigator->getMcParticle( ( *i ).first );
208 if ( mcParticle == 0 )
continue;
210 const RecMdcTrack* mdcTrack = m_navigator->getMdcTrack( ( *i ).second );
214 m_navigator->addLink( mcParticle, mdcTrack );
215 m_navigator->addLink( mdcTrack, mcParticle );
219 m_navigator->getMdcKalTrack( ( *i ).second );
220 if ( mdcKalTrack != 0 )
222 m_navigator->addLink( mcParticle, mdcKalTrack );
223 m_navigator->addLink( mdcKalTrack, mcParticle );
229 MsgStream log(
msgSvc(), name() );
233 SmartDataPtr<EmcMcHitCol> emcMcHits( eventSvc(),
"/Event/MC/EmcMcHitCol" );
236 log << MSG::DEBUG <<
"EmcMcHitsCol retrieved of size " << emcMcHits->size() << endmsg;
238 if ( emcMcHits->size() != 0 ) m_navigator->getMcEmcMcHitsIdx().clear();
240 for ( EmcMcHitCol::const_iterator it = emcMcHits->begin(); it != emcMcHits->end(); it++ )
243 int crystalId = ( *it )->identify().get_value();
244 int McParticleID = 0;
245 if ( crystalId != 0 )
247 McParticleID = ( *it )->getTrackIndex();
248 m_navigator->getMcEmcMcHitsIdx().insert( pair<int, int>( crystalId, McParticleID ) );
253 const map<Identifier, double>& hitmap = ( *it )->getHitMap();
254 map<Identifier, double>::const_iterator jt;
255 for ( jt = hitmap.begin(); jt != hitmap.end(); jt++ )
257 int crystalId = ( *jt ).first.get_value();
259 if ( McParticleID != 0 )
261 m_navigator->getMcEmcMcHitsIdx().insert(
262 pair<int, int>( crystalId, McParticleID ) );
268 else { log << MSG::DEBUG <<
"Unable to retrieve EmcMcHitCol" << endmsg; }
272 SmartDataPtr<RecEmcShowerCol> emcRecShowers( eventSvc(),
"/Event/Recon/RecEmcShowerCol" );
275 log << MSG::DEBUG <<
"RecEmcShowerCol retrieved of size " << emcRecShowers->size()
278 IndexMap& mchits = m_navigator->getMcEmcMcHitsIdx();
280 for ( RecEmcShowerCol::const_iterator it = emcRecShowers->begin();
281 it != emcRecShowers->end(); it++ )
283 int showerId = ( *it )->getShowerId().get_value();
284 m_navigator->addIdLink( showerId, *it );
288 if ( !mchits.empty() )
291 for ( RecEmcFractionMap::const_iterator jt = fractionMap.begin();
292 jt != fractionMap.end(); jt++ )
294 int crystalId = ( *jt ).first.get_value();
295 const pair<IndexMap::const_iterator, IndexMap::const_iterator> range =
296 mchits.equal_range( crystalId );
298 for ( IndexMap::const_iterator kt = range.first; kt != range.second; kt++ )
300 m_navigator->getMcEmcRecShowersIdx().insert( pair<int, int>(
301 ( *kt ).second, showerId ) );
307 else { log << MSG::DEBUG <<
"Unable to retrieve RecEmcShowerCol" << endmsg; }
310 IndexMap::const_iterator i;
311 IndexMap& index = m_navigator->getMcEmcRecShowersIdx();
312 for ( i = index.begin(); i != index.end(); i++ )
315 const McParticle* mcParticle = m_navigator->getMcParticle( ( *i ).first );
317 if ( mcParticle == 0 )
continue;
319 const RecEmcShowerVector& emcShowers = m_navigator->getEmcRecShowers( ( *i ).second );
321 if ( !emcShowers.empty() )
323 RecEmcShowerVector::const_iterator j;
324 for ( j = emcShowers.begin(); j != emcShowers.end(); j++ )
326 m_navigator->addLink( mcParticle, *j );
327 m_navigator->addLink( *j, mcParticle );