129 {
130 MsgStream log(
msgSvc(), name() );
131
132
133
134 SmartDataPtr<MdcMcHitCol> mdcMcHits( eventSvc(), "/Event/MC/MdcMcHitCol" );
135 if ( mdcMcHits )
136 {
137 log << MSG::DEBUG << "MdcMcHitsCol retrieved of size " << mdcMcHits->size() << endmsg;
138
139 if ( mdcMcHits->size() != 0 ) m_navigator->getMcMdcMcHitsIdx().clear();
140
141 for ( MdcMcHitCol::const_iterator it = mdcMcHits->begin(); it != mdcMcHits->end(); it++ )
142 {
143
144 m_navigator->getMcMdcMcHitsIdx().insert(
145 pair<int, int>( ( *it )->identify().get_value(), ( *it )->getTrackIndex() ) );
146
147
148 }
149 }
150 else { log << MSG::DEBUG << "Unable to retrieve MdcMcHitCol" << endmsg; }
151
152
153 SmartDataPtr<RecMdcHitCol> mdcRecHits( eventSvc(), "/Event/Recon/RecMdcHitCol" );
154 if ( mdcRecHits )
155 {
156 log << MSG::DEBUG << "MdcRecHitCol retrieved of size " << mdcRecHits->size() << endmsg;
157
158 if ( mdcRecHits->size() != 0 ) m_navigator->getMcMdcTracksIdx().clear();
159
160 IndexMap& mchits = m_navigator->getMcMdcMcHitsIdx();
161 for ( RecMdcHitCol::iterator it = mdcRecHits->begin(); it != mdcRecHits->end(); it++ )
162 {
163 int mdcId = ( ( *it )->getMdcId() ).get_value();
164
165
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++ )
169 {
170 m_navigator->getMcMdcTracksIdx().insert(
171 pair<int, int>( ( *jt ).second, ( *it )->getTrkId() ) );
172 }
173 }
174 }
175 else log << MSG::DEBUG << "Unable to retrieve RecMdcHitCol" << endmsg;
176
177
178
179 SmartDataPtr<RecMdcTrackCol> mdcTracks( eventSvc(), "/Event/Recon/RecMdcTrackCol" );
180 if ( mdcTracks )
181 {
182 log << MSG::DEBUG << "MdcTrackCol retrieved of size " << mdcTracks->size() << endmsg;
183 for ( RecMdcTrackCol::const_iterator it = mdcTracks->begin(); it != mdcTracks->end();
184 it++ )
185 m_navigator->addIdLink( ( *it )->trackId(), *it );
186 }
187 else { log << MSG::DEBUG << "Unable to retrieve RecMdcTrackCol" << endmsg; }
188
189
190 SmartDataPtr<RecMdcKalTrackCol> mdcKalTracks( eventSvc(), "/Event/Recon/RecMdcKalTrackCol" );
191 if ( mdcKalTracks )
192 {
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 );
197 }
198 else { log << MSG::DEBUG << "Unable to retrieve RecMdcTrackCol" << endmsg; }
199
200
201 IndexMap::const_iterator i;
202 IndexMap& index = m_navigator->getMcMdcTracksIdx();
203 for ( i = index.begin(); i != index.end(); i++ )
204 {
205
206 const McParticle* mcParticle = m_navigator->getMcParticle( ( *i ).first );
207
208 if ( mcParticle == 0 ) continue;
209
210 const RecMdcTrack* mdcTrack = m_navigator->getMdcTrack( ( *i ).second );
211
212 if ( mdcTrack != 0 )
213 {
214 m_navigator->addLink( mcParticle, mdcTrack );
215 m_navigator->addLink( mdcTrack, mcParticle );
216 }
217
218 const RecMdcKalTrack* mdcKalTrack =
219 m_navigator->getMdcKalTrack( ( *i ).second );
220 if ( mdcKalTrack != 0 )
221 {
222 m_navigator->addLink( mcParticle, mdcKalTrack );
223 m_navigator->addLink( mdcKalTrack, mcParticle );
224 }
225 }
226}