129 {
130 MsgStream log(
msgSvc(),
"RecMdcDedxHitCnv" );
131 log << MSG::DEBUG << "RecMdcDedxHitCnv::DataObjectToTObject" << endmsg;
132 StatusCode sc = StatusCode::SUCCESS;
133
135 if ( !recMdcDedxHitCol )
136 {
137 log << MSG::ERROR << "Could not downcast to RecMdcDedxHitCol" << endmsg;
138 return StatusCode::FAILURE;
139 }
140
141 DataObject* evt;
143 if ( evt == NULL )
144 {
145 log << MSG::ERROR << "Could not get RecEvent in TDS " << endmsg;
146 return StatusCode::FAILURE;
147 }
148 ReconEvent* devtTds = dynamic_cast<ReconEvent*>( evt );
149 if ( !devtTds )
150 { log << MSG::ERROR << "RecMdcDedxHitCnv:Could not downcast to TDS RecEvent" << endmsg; }
151 IOpaqueAddress* addr;
152 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
153 TRecTrackEvent* recEvt =
m_cnvSvc->getRecTrackCnv()->getWriteObject();
155 if ( !m_recMdcDedxHitCol ) return sc;
157
158
159
160
161 RecMdcHitCol::iterator recMdcHitColbegin, recMdcHitColend;
162 RecMdcKalHelixSegCol::iterator recMdcKalHelixSegColbegin, recMdcKalHelixSegColend;
163
164 IDataProviderSvc* dataSvc = 0;
165 sc = serviceLocator()->getService( "EventDataSvc", IDataProviderSvc::interfaceID(),
166 (IInterface*&)dataSvc );
167 if ( sc.isFailure() )
168 {
169 log << MSG::FATAL << "Could not get EventDataSvc in RecMdcDedxHitCnv" << endmsg;
170 return sc;
171 }
172
173
175 if ( !recMdcHitCol )
176 {
177 log << MSG::ERROR << "Could not downcast to RecMdcHitCol" << endmsg;
178 return StatusCode::FAILURE;
179 }
180 else
181 {
182 recMdcHitColbegin = recMdcHitCol->begin();
183 recMdcHitColend = recMdcHitCol->end();
184 }
185
186 SmartDataPtr<RecMdcKalHelixSegCol> recMdcKalHelixSegCol(
188 if ( !recMdcKalHelixSegCol )
189 {
190 log << MSG::ERROR << "Could not downcast to RecMdcKalHelixSegCol" << endmsg;
191 return StatusCode::FAILURE;
192 }
193 else
194 {
195 recMdcKalHelixSegColbegin = recMdcKalHelixSegCol->begin();
196 recMdcKalHelixSegColend = recMdcKalHelixSegCol->end();
197 }
198
199
200 RecMdcDedxHitCol::const_iterator recMdcDedxHit;
201 for ( recMdcDedxHit = recMdcDedxHitCol->begin(); recMdcDedxHit != recMdcDedxHitCol->end();
202 recMdcDedxHit++ )
203 {
204 int trackId = ( *recMdcDedxHit )->getTrkId();
205 int flagLR = ( *recMdcDedxHit )->getFlagLR();
206 UInt_t mdcId = ( *recMdcDedxHit )->getMdcId().get_value();
207 double pathlength = ( *recMdcDedxHit )->getPathLength();
208 double dedx = ( *recMdcDedxHit )->getDedx();
209
210 log << MSG::DEBUG << "DataObjectToTObject: check Reconstrunction of dE/dx Hit::"
211 << " trackId: " << trackId << " flagLR: " << flagLR << " pathlength: " << pathlength
212 << " dedx: " << dedx << endmsg;
213 TRecMdcDedxHit* recMdcDedxHitRoot = new TRecMdcDedxHit();
214
215 recMdcDedxHitRoot->
setTrkId( trackId );
217 recMdcDedxHitRoot->
setMdcId( mdcId );
219 recMdcDedxHitRoot->
setDedx( dedx );
220
221
222
223
224
225
226
227
228
229
230
231
232 if ( ( *recMdcDedxHit )->isMdcHitValid() )
233 {
234 RecMdcHitCol::iterator it =
235 find( recMdcHitColbegin, recMdcHitColend, ( *recMdcDedxHit )->getMdcHit() );
236 recMdcDedxHitRoot->
setMdcHitId( it - recMdcHitColbegin );
237 }
239
240 if ( ( *recMdcDedxHit )->isMdcKalHelixSegValid() )
241 {
242 RecMdcKalHelixSegCol::iterator it =
243 find( recMdcKalHelixSegColbegin, recMdcKalHelixSegColend,
244 ( *recMdcDedxHit )->getMdcKalHelixSeg() );
246 }
248
249
250
252 }
253
254 return StatusCode::SUCCESS;
255}
ObjectVector< RecMdcDedxHit > RecMdcDedxHitCol
IDataProviderSvc * m_eds
pointer to eventdataservice
void setDedx(double dedx)
void setMdcId(UInt_t mdcid)
void setMdcHitId(const int mdcHitId)
void setMdcKalHelixSegId(const int mdcKalHelixSegId)
void setTrkId(Int_t trkid)
void setPathLength(double pathlength)
const TObjArray * getRecMdcDedxHitCol() const
retrieve the whole TObjArray of Dedx Data
void clearRecMdcDedxHitCol()
clear the whole array
void addRecMdcDedxHit(TRecMdcDedxHit *Track)
Add a Dedx into the TOF Data collection.
_EXTERN_ std::string RecMdcKalHelixSegCol
_EXTERN_ std::string Event
_EXTERN_ std::string RecMdcHitCol