45 MsgStream log(
msgSvc(),
"RecMdcDedxCnv" );
46 log << MSG::DEBUG <<
"RecMdcDedxCnv::TObjectToDataObject" << endmsg;
47 StatusCode sc = StatusCode::SUCCESS;
51 refpObject = recMdcDedxCol;
53 if ( !m_recMdcDedxCol )
return sc;
57 IDataProviderSvc* dataSvc = 0;
58 sc = serviceLocator()->getService(
"EventDataSvc", IDataProviderSvc::interfaceID(),
59 (IInterface*&)dataSvc );
62 log << MSG::FATAL <<
"Could not get EventDataSvc in RecMdcDedxCnv" << endmsg;
67 SmartDataPtr<RecMdcDedxHitCol> recMdcDedxHitCol( dataSvc,
"/Event/Recon/RecMdcDedxHitCol" );
68 if ( !recMdcDedxHitCol )
70 log << MSG::FATAL <<
"Could not find RecMdcDedxHitCol" << endmsg;
71 return ( StatusCode::FAILURE );
79 log << MSG::INFO <<
"Could not find RecMdcTrackCol" << endmsg;
80 SmartDataPtr<DstMdcTrackCol> dstMdcTrackCol( dataSvc,
"/Event/Dst/DstMdcTrackCol" );
81 if ( !dstMdcTrackCol ) { log << MSG::INFO <<
"Could not find DstMdcTrackCol" << endmsg; }
85 DstMdcTrackCol::iterator iter_mdc = dstMdcTrackCol->begin();
87 for ( ; iter_mdc != dstMdcTrackCol->end(); iter_mdc++, trackID++ )
90 *recMdcTrack = **iter_mdc;
91 ( *mdcTrackCol ).push_back( recMdcTrack );
92 log << MSG::INFO <<
" Mdc Track ID = " << trackID
93 <<
" Mdc Track Nster = " << ( *iter_mdc )->
nster() << endmsg;
100 SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol( dataSvc,
102 if ( !mdcKalTrackCol )
104 log << MSG::INFO <<
"Could not find RecMdcKalTrackCol" << endmsg;
105 SmartDataPtr<DstMdcKalTrackCol> dstMdcKalTrackCol( dataSvc,
106 "/Event/Dst/DstMdcKalTrackCol" );
107 if ( !dstMdcKalTrackCol )
108 { log << MSG::INFO <<
"Could not find DstMdcKalTrackCol" << endmsg; }
112 DstMdcKalTrackCol::iterator iter_mdc = dstMdcKalTrackCol->begin();
114 for ( ; iter_mdc != dstMdcKalTrackCol->end(); iter_mdc++, trackID++ )
117 *recMdcKalTrack = **iter_mdc;
118 ( *mdcKalTrackCol ).push_back( recMdcKalTrack );
119 log << MSG::INFO <<
" MdcKalTrack ID = " << trackID
120 <<
" MdcKalTrack Nster = " << ( *iter_mdc )->
nster()
121 <<
" MdcKalTrack poca = " << ( *iter_mdc )->poca() << endmsg;
129 TIter dedxIter( m_recMdcDedxCol );
131 while ( ( recMdcDedxRoot = (
TRecMdcDedx*)dedxIter.Next() ) )
133 double dedxHit = recMdcDedxRoot->
dedxHit();
134 double dedxEsat = recMdcDedxRoot->
dedxEsat();
135 double dedxNoRun = recMdcDedxRoot->
dedxNoRun();
136 double dedxMoment = recMdcDedxRoot->
dedxMoment();
138 int trackId = recMdcDedxRoot->
trackId();
139 int particleId = recMdcDedxRoot->
particleId();
140 int status = recMdcDedxRoot->
status();
141 int truncAlg = recMdcDedxRoot->
truncAlg();
152 chi[0] = recMdcDedxRoot->
chiE();
153 chi[1] = recMdcDedxRoot->
chiMu();
154 chi[2] = recMdcDedxRoot->
chiPi();
155 chi[3] = recMdcDedxRoot->
chiK();
156 chi[4] = recMdcDedxRoot->
chiP();
160 double probPH = recMdcDedxRoot->
probPH();
161 double normPH = recMdcDedxRoot->
normPH();
162 double errorPH = recMdcDedxRoot->
errorPH();
163 double twentyPH = recMdcDedxRoot->
twentyPH();
164 double dedxExpect[5], sigmaDedx[5], pidProb[5];
166 for (
int i = 0; i < 5; i++ )
168 dedxExpect[i] = recMdcDedxRoot->
dedxExpect( i );
169 sigmaDedx[i] = recMdcDedxRoot->
sigmaDedx( i );
170 pidProb[i] = recMdcDedxRoot->
pidProb( i );
173 log << MSG::DEBUG <<
"TObjectToDataObject: check Reconstrunction of dE/dx root::"
174 <<
" trackId: " << trackId <<
" particleId: " << particleId <<
" status: " << status
175 <<
" truncAlg: " << truncAlg <<
" chi[2]: " << chi[2]
176 <<
" numTotalHits: " << numTotalHits <<
" probPH: " << probPH
177 <<
" errorPH: " << errorPH <<
" dedxExpect[2]: " << dedxExpect[2] << endmsg;
180 m_common.m_rootRecMdcDedxMap[recMdcDedxRoot] = recMdcDedx;
192 recMdcDedx->
setChi( chi );
212 RecMdcDedxHitCol::iterator
iter = recMdcDedxHitCol->begin();
213 for ( ;
iter != recMdcDedxHitCol->end();
iter++ )
215 if ( ( *iter )->getTrkId() == trackId )
217 SmartRef<RecMdcDedxHit> refDedxHit( *
iter );
218 theDedxHitRefVec.push_back( refDedxHit );
224 for (
int ii = 0; ii < nhits; ii++ )
232 int mdcTrackId = recMdcDedxRoot->
mdcTrackId();
235 if ( mdcTrackId >= 0 )
238 dynamic_cast<RecMdcTrack*
>( mdcTrackCol->containedObject( mdcTrackId ) ) );
243 if ( mdcKalTrackId >= 0 )
246 dynamic_cast<RecMdcKalTrack*
>( mdcKalTrackCol->containedObject( mdcKalTrackId ) ) );
249 recMdcDedxCol->push_back( recMdcDedx );
254 delete m_recMdcDedxCol;
257 return StatusCode::SUCCESS;
261 MsgStream log(
msgSvc(),
"RecMdcDedxCnv" );
262 log << MSG::DEBUG <<
"RecMdcDedxCnv::DataObjectToTObject" << endmsg;
263 StatusCode sc = StatusCode::SUCCESS;
266 if ( !recMdcDedxCol )
268 log << MSG::ERROR <<
"Could not downcast to RecMdcDedxCol" << endmsg;
269 return StatusCode::FAILURE;
276 log << MSG::ERROR <<
"Could not get RecEvent in TDS " << endmsg;
277 return StatusCode::FAILURE;
281 { log << MSG::ERROR <<
"RecMdcDedxCnv:Could not downcast to TDS RecEvent" << endmsg; }
283 IOpaqueAddress* addr;
284 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
288 if ( !m_recMdcDedxCol )
return sc;
294 RecMdcTrackCol::iterator recMdcTrackColbegin, recMdcTrackColend;
295 RecMdcKalTrackCol::iterator recMdcKalTrackColbegin, recMdcKalTrackColend;
297 IDataProviderSvc* dataSvc = 0;
298 sc = serviceLocator()->getService(
"EventDataSvc", IDataProviderSvc::interfaceID(),
299 (IInterface*&)dataSvc );
300 if ( sc.isFailure() )
302 log << MSG::FATAL <<
"Could not get EventDataSvc in RecMdcDedxCnv" << endmsg;
306 if ( !recMdcTrackCol )
308 log << MSG::ERROR <<
"Could not downcast to RecMdcTrackCol" << endmsg;
309 return StatusCode::FAILURE;
313 recMdcTrackColbegin = recMdcTrackCol->begin();
314 recMdcTrackColend = recMdcTrackCol->end();
317 SmartDataPtr<RecMdcKalTrackCol> recMdcKalTrackCol( dataSvc,
319 if ( !recMdcKalTrackCol )
321 log << MSG::ERROR <<
"Could not downcast to RecMdcKalTrackCol" << endmsg;
322 return StatusCode::FAILURE;
326 recMdcKalTrackColbegin = recMdcKalTrackCol->begin();
327 recMdcKalTrackColend = recMdcKalTrackCol->end();
331 RecMdcDedxCol::const_iterator recMdcDedx;
333 for ( recMdcDedx = recMdcDedxCol->begin(); recMdcDedx != recMdcDedxCol->end(); recMdcDedx++ )
335 Int_t trackId = ( *recMdcDedx )->trackId();
336 Int_t particleId = ( *recMdcDedx )->particleId();
337 Int_t status = ( *recMdcDedx )->status();
338 Int_t truncAlg = ( *recMdcDedx )->truncAlg();
342 Double_t dedxHit = ( *recMdcDedx )->getDedxHit();
343 Double_t dedxEsat = ( *recMdcDedx )->getDedxEsat();
344 Double_t dedxNoRun = ( *recMdcDedx )->getDedxNoRun();
345 Double_t dedxMoment = ( *recMdcDedx )->getDedxMoment();
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 );
353 Int_t numGoodHits = ( *recMdcDedx )->numGoodHits();
354 Int_t numTotalHits = ( *recMdcDedx )->numTotalHits();
356 Double_t probPH = ( *recMdcDedx )->probPH();
357 Double_t normPH = ( *recMdcDedx )->normPH();
358 Double_t errorPH = ( *recMdcDedx )->errorPH();
359 Double_t twentyPH = ( *recMdcDedx )->twentyPH();
363 double dedxExpect[5], sigmaDedx[5], pidProb[5], chi[5];
364 for (
int i = 0; i < 5; i++ )
366 chi[i] = ( *recMdcDedx )->chi( i );
367 dedxExpect[i] = ( *recMdcDedx )->getDedxExpect( i );
368 sigmaDedx[i] = ( *recMdcDedx )->getSigmaDedx( i );
369 pidProb[i] = ( *recMdcDedx )->getPidProb( i );
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;
388 recMdcDedxRoot->
setChiE( chiE );
391 recMdcDedxRoot->
setChiK( chiK );
392 recMdcDedxRoot->
setChiP( chiP );
402 recMdcDedxRoot->
setChi( chi );
413 if ( ( *recMdcDedx )->isMdcTrackValid() )
415 RecMdcTrackCol::iterator it =
416 find( recMdcTrackColbegin, recMdcTrackColend, ( *recMdcDedx )->getMdcTrack() );
421 if ( ( *recMdcDedx )->isMdcKalTrackValid() )
423 RecMdcKalTrackCol::iterator it = find( recMdcKalTrackColbegin, recMdcKalTrackColend,
424 ( *recMdcDedx )->getMdcKalTrack() );
429 log << MSG::INFO <<
"check Reconstrunction root"
430 <<
" particle Id is : " << particleId <<
"track id is : " << trackId
431 <<
" and status is : " << status << endmsg;
439 return StatusCode::SUCCESS;