260 {
261 MsgStream log(
msgSvc(),
"RecMdcDedxCnv" );
262 log << MSG::DEBUG << "RecMdcDedxCnv::DataObjectToTObject" << endmsg;
263 StatusCode sc = StatusCode::SUCCESS;
264
266 if ( !recMdcDedxCol )
267 {
268 log << MSG::ERROR << "Could not downcast to RecMdcDedxCol" << endmsg;
269 return StatusCode::FAILURE;
270 }
271
272 DataObject* evt;
274 if ( evt == NULL )
275 {
276 log << MSG::ERROR << "Could not get RecEvent in TDS " << endmsg;
277 return StatusCode::FAILURE;
278 }
279 ReconEvent* devtTds = dynamic_cast<ReconEvent*>( evt );
280 if ( !devtTds )
281 { log << MSG::ERROR << "RecMdcDedxCnv:Could not downcast to TDS RecEvent" << endmsg; }
282
283 IOpaqueAddress* addr;
284 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
285 TRecTrackEvent* recEvt =
m_cnvSvc->getRecTrackCnv()->getWriteObject();
286
288 if ( !m_recMdcDedxCol ) return sc;
290
291
292
293
294 RecMdcTrackCol::iterator recMdcTrackColbegin, recMdcTrackColend;
295 RecMdcKalTrackCol::iterator recMdcKalTrackColbegin, recMdcKalTrackColend;
296
297 IDataProviderSvc* dataSvc = 0;
298 sc = serviceLocator()->getService( "EventDataSvc", IDataProviderSvc::interfaceID(),
299 (IInterface*&)dataSvc );
300 if ( sc.isFailure() )
301 {
302 log << MSG::FATAL << "Could not get EventDataSvc in RecMdcDedxCnv" << endmsg;
303 return sc;
304 }
306 if ( !recMdcTrackCol )
307 {
308 log << MSG::ERROR << "Could not downcast to RecMdcTrackCol" << endmsg;
309 return StatusCode::FAILURE;
310 }
311 else
312 {
313 recMdcTrackColbegin = recMdcTrackCol->begin();
314 recMdcTrackColend = recMdcTrackCol->end();
315 }
316
317 SmartDataPtr<RecMdcKalTrackCol> recMdcKalTrackCol( dataSvc,
319 if ( !recMdcKalTrackCol )
320 {
321 log << MSG::ERROR << "Could not downcast to RecMdcKalTrackCol" << endmsg;
322 return StatusCode::FAILURE;
323 }
324 else
325 {
326 recMdcKalTrackColbegin = recMdcKalTrackCol->begin();
327 recMdcKalTrackColend = recMdcKalTrackCol->end();
328 }
329
330
331 RecMdcDedxCol::const_iterator recMdcDedx;
332
333 for ( recMdcDedx = recMdcDedxCol->begin(); recMdcDedx != recMdcDedxCol->end(); recMdcDedx++ )
334 {
335 Int_t trackId = ( *recMdcDedx )->trackId();
336 Int_t particleId = ( *recMdcDedx )->particleId();
337 Int_t status = ( *recMdcDedx )->status();
338 Int_t truncAlg = ( *recMdcDedx )->truncAlg();
339
340
341
342 Double_t dedxHit = ( *recMdcDedx )->getDedxHit();
343 Double_t dedxEsat = ( *recMdcDedx )->getDedxEsat();
344 Double_t dedxNoRun = ( *recMdcDedx )->getDedxNoRun();
345 Double_t dedxMoment = ( *recMdcDedx )->getDedxMoment();
346
347 Double_t chiE = ( *recMdcDedx )->chi( 0 );
348 Double_t chiMu = ( *recMdcDedx )->chi( 1 );
349 Double_t chiPi = ( *recMdcDedx )->chi( 2 );
350 Double_t chiK = ( *recMdcDedx )->chi( 3 );
351 Double_t chiP = ( *recMdcDedx )->chi( 4 );
352
353 Int_t numGoodHits = ( *recMdcDedx )->numGoodHits();
354 Int_t numTotalHits = ( *recMdcDedx )->numTotalHits();
355
356 Double_t probPH = ( *recMdcDedx )->probPH();
357 Double_t normPH = ( *recMdcDedx )->normPH();
358 Double_t errorPH = ( *recMdcDedx )->errorPH();
359 Double_t twentyPH = ( *recMdcDedx )->twentyPH();
360
361
362
363 double dedxExpect[5], sigmaDedx[5], pidProb[5], chi[5];
364 for ( int i = 0; i < 5; i++ )
365 {
366 chi[i] = ( *recMdcDedx )->chi( i );
367 dedxExpect[i] = ( *recMdcDedx )->getDedxExpect( i );
368 sigmaDedx[i] = ( *recMdcDedx )->getSigmaDedx( i );
369 pidProb[i] = ( *recMdcDedx )->getPidProb( i );
370 }
371
372 log << MSG::DEBUG << "DataObjectToTObject: check Reconstrunction of dE/dx::"
373 << " trackId: " << trackId << " particleId: " << particleId << " status: " << status
374 << " truncAlg: " << truncAlg << " chiPi: " << chiPi
375 << " numTotalHits: " << numTotalHits << " probPH: " << probPH
376 << " errorPH: " << errorPH << " dedxExpect[2]: " << dedxExpect[2] << endmsg;
377
378 TRecMdcDedx* recMdcDedxRoot = new TRecMdcDedx();
379
380
381
386
387
388 recMdcDedxRoot->
setChiE( chiE );
391 recMdcDedxRoot->
setChiK( chiK );
392 recMdcDedxRoot->
setChiP( chiP );
393
396
401
402 recMdcDedxRoot->
setChi( chi );
406
411
412
413 if ( ( *recMdcDedx )->isMdcTrackValid() )
414 {
415 RecMdcTrackCol::iterator it =
416 find( recMdcTrackColbegin, recMdcTrackColend, ( *recMdcDedx )->getMdcTrack() );
418 }
420
421 if ( ( *recMdcDedx )->isMdcKalTrackValid() )
422 {
423 RecMdcKalTrackCol::iterator it = find( recMdcKalTrackColbegin, recMdcKalTrackColend,
424 ( *recMdcDedx )->getMdcKalTrack() );
426 }
428
429 log << MSG::INFO << "check Reconstrunction root"
430 << " particle Id is : " << particleId << "track id is : " << trackId
431 << " and status is : " << status << endmsg;
432
433
434
435
437 }
438
439 return StatusCode::SUCCESS;
440}
ObjectVector< RecMdcDedx > RecMdcDedxCol
IDataProviderSvc * m_eds
pointer to eventdataservice
void setNumTotalHits(const Int_t numTotalHits)
void setProbPH(const Double_t probPH)
void setPidProb(double *pid_prob)
void setDedxHit(const Double_t dedx_hit)
void setTruncAlg(const Int_t trunc_alg)
void setSigmaDedx(double *sigma_dedx)
void setParticleId(const Int_t particleId)
void setMdcTrackId(const int mdcTrackId)
void setTwentyPH(const Double_t twentyPH)
void setDedxMoment(const Double_t dedx_momentum)
void setChiE(const Double_t chiE)
void setDedxEsat(const Double_t dedx_esat)
void setErrorPH(const Double_t errorPH)
void setMdcKalTrackId(const int mdcKalTrackId)
void setStatus(const Int_t status)
void setChiPi(const Double_t chiPi)
void setTrackId(const Int_t trackId)
void setNormPH(const Double_t normPH)
void setChiP(const Double_t chiP)
void setDedxNoRun(const Double_t dedx_norun)
void setDedxExpect(double *dedx_exp)
void setChiMu(const Double_t chiMu)
void setChiK(const Double_t chiK)
void setNumGoodHits(const Int_t numGoodHits)
void clearRecMdcDedxCol()
clear the whole array
void addRecMdcDedx(TRecMdcDedx *Track)
Add a Dedx into the TOF Data collection.
const TObjArray * getRecMdcDedxCol() const
retrieve the whole TObjArray of Dedx Data
_EXTERN_ std::string RecMdcTrackCol
_EXTERN_ std::string Event
_EXTERN_ std::string RecMdcKalTrackCol