43 MsgStream log(
msgSvc(),
"MdcKalTrackCnv" );
44 log << MSG::DEBUG <<
"MdcKalTrackCnv::TObjectToDataObject" << endmsg;
45 StatusCode sc = StatusCode::SUCCESS;
49 refpObject = mdcKalTrackTdsCol;
52 if ( !m_mdcKalTrackCol )
return sc;
53 TIter mdcKalTrackIter( m_mdcKalTrackCol );
55 while ( ( mdcKalTrackRoot = (
TMdcKalTrack*)mdcKalTrackIter.Next() ) )
57 std::vector<HepVector> zhelixs;
58 std::vector<HepSymMatrix> zerrors;
59 std::vector<HepPoint3D> pocas;
60 std::vector<HepVector> fhelixs;
61 std::vector<HepSymMatrix> ferrors;
63 HepVector zhelix( 5 );
64 HepSymMatrix zerror( 5 );
67 HepVector zhelix_e( 5 );
68 HepSymMatrix zerror_e( 5 );
71 HepVector zhelix_mu( 5 );
72 HepSymMatrix zerror_mu( 5 );
75 HepVector zhelix_k( 5 );
76 HepSymMatrix zerror_k( 5 );
79 HepVector zhelix_p( 5 );
80 HepSymMatrix zerror_p( 5 );
83 HepVector fhelix( 5 );
84 HepSymMatrix ferror( 5 );
86 HepVector fhelix_e( 5 );
87 HepSymMatrix ferror_e( 5 );
89 HepVector fhelix_mu( 5 );
90 HepSymMatrix ferror_mu( 5 );
92 HepVector fhelix_k( 5 );
93 HepSymMatrix ferror_k( 5 );
95 HepVector fhelix_p( 5 );
96 HepSymMatrix ferror_p( 5 );
99 m_common.m_rootMdcKalTrackMap[mdcKalTrackRoot] = mdcKalTrackTds;
111 log << MSG::DEBUG <<
"T to DST, poca: " << poca << endmsg;
113 for (
int i = 0; i < 5; i++ )
115 zhelix[i] = mdcKalTrackRoot->
getZHelix( i );
116 zhelix_e[i] = mdcKalTrackRoot->
getZHelixE( i );
118 zhelix_k[i] = mdcKalTrackRoot->
getZHelixK( i );
119 zhelix_p[i] = mdcKalTrackRoot->
getZHelixP( i );
121 fhelix[i] = mdcKalTrackRoot->
getFHelix( i );
122 fhelix_e[i] = mdcKalTrackRoot->
getFHelixE( i );
124 fhelix_k[i] = mdcKalTrackRoot->
getFHelixK( i );
125 fhelix_p[i] = mdcKalTrackRoot->
getFHelixP( i );
127 for (
int j = 0; j <= i; j++ )
129 zerror[i][j] = mdcKalTrackRoot->
getZError( i, j );
130 zerror_e[i][j] = mdcKalTrackRoot->
getZErrorE( i, j );
131 zerror_mu[i][j] = mdcKalTrackRoot->
getZErrorMu( i, j );
132 zerror_k[i][j] = mdcKalTrackRoot->
getZErrorK( i, j );
133 zerror_p[i][j] = mdcKalTrackRoot->
getZErrorP( i, j );
135 zerror[j][i] = zerror[i][j];
136 zerror_e[j][i] = zerror_e[i][j];
137 zerror_mu[j][i] = zerror_mu[i][j];
138 zerror_k[j][i] = zerror_k[i][j];
139 zerror_p[j][i] = zerror_p[i][j];
141 ferror[i][j] = mdcKalTrackRoot->
getFError( i, j );
142 ferror_e[i][j] = mdcKalTrackRoot->
getFErrorE( i, j );
143 ferror_mu[i][j] = mdcKalTrackRoot->
getFErrorMu( i, j );
144 ferror_k[i][j] = mdcKalTrackRoot->
getFErrorK( i, j );
145 ferror_p[i][j] = mdcKalTrackRoot->
getFErrorP( i, j );
147 ferror[j][i] = ferror[i][j];
148 ferror_e[j][i] = ferror_e[i][j];
149 ferror_mu[j][i] = ferror_mu[i][j];
150 ferror_k[j][i] = ferror_k[i][j];
151 ferror_p[j][i] = ferror_p[i][j];
155 double dr = zhelix[0];
156 double phi0 = zhelix[1];
157 double kappa = zhelix[2];
158 double dz = zhelix[3];
159 double tanl = zhelix[4];
160 poca[0] = dr *
cos( phi0 );
161 poca[1] = dr *
sin( phi0 );
169 poca_e[0] = dr *
cos( phi0 );
170 poca_e[1] = dr *
sin( phi0 );
175 kappa = zhelix_mu[2];
178 poca_mu[0] = dr *
cos( phi0 );
179 poca_mu[1] = dr *
sin( phi0 );
187 poca_k[0] = dr *
cos( phi0 );
188 poca_k[1] = dr *
sin( phi0 );
196 poca_p[0] = dr *
cos( phi0 );
197 poca_p[1] = dr *
sin( phi0 );
200 log << MSG::DEBUG <<
"T to DST, zhelix: " << zhelix << endmsg;
201 log << MSG::DEBUG <<
"T to DST, zerror: " << zerror << endmsg;
203 zhelixs.push_back( zhelix_e );
204 zhelixs.push_back( zhelix_mu );
205 zhelixs.push_back( zhelix );
206 zhelixs.push_back( zhelix_k );
207 zhelixs.push_back( zhelix_p );
208 zerrors.push_back( zerror_e );
209 zerrors.push_back( zerror_mu );
210 zerrors.push_back( zerror );
211 zerrors.push_back( zerror_k );
212 zerrors.push_back( zerror_p );
214 fhelixs.push_back( fhelix_e );
215 fhelixs.push_back( fhelix_mu );
216 fhelixs.push_back( fhelix );
217 fhelixs.push_back( fhelix_k );
218 fhelixs.push_back( fhelix_p );
219 ferrors.push_back( ferror_e );
220 ferrors.push_back( ferror_mu );
221 ferrors.push_back( ferror );
222 ferrors.push_back( ferror_k );
223 ferrors.push_back( ferror_p );
225 pocas.push_back( poca_e );
226 pocas.push_back( poca_mu );
227 pocas.push_back( poca );
228 pocas.push_back( poca_k );
229 pocas.push_back( poca_p );
231 for (
int m = 0; m < 5; m++ )
234 double pxy( 0. ), px( 0. ), py( 0. ), pz( 0. ), ptot( 0. ), dr( 0. ), phi0( 0. ),
235 kappa( 0. ), dz( 0. ), tanl( 0. ),
x( 0. ), y( 0. ), z( 0. ), vx0( 0. ), vy0( 0. ),
238 phi0 = zhelixs[m][1];
239 kappa = zhelixs[m][2];
241 tanl = zhelixs[m][4];
247 x = dr *
cos( phi0 );
248 y = dr *
sin( phi0 );
253 if ( kappa > 0.0000000001 ) charge = 1;
254 else if ( kappa < -0.0000000001 ) charge = -1;
257 if ( kappa != 0 ) pxy = 1.0 / fabs( kappa );
260 px = pxy * ( -
sin( phi0 ) );
261 py = pxy *
cos( phi0 );
263 ptot = sqrt( px * px + py * py + pz * pz );
266 mdcKalTrackTds->
setPxy( pxy, m );
267 mdcKalTrackTds->
setPx( px, m );
268 mdcKalTrackTds->
setPy( py, m );
269 mdcKalTrackTds->
setPz( pz, m );
270 mdcKalTrackTds->
setP( ptot, m );
271 mdcKalTrackTds->
setTheta( acos( pz / ptot ), m );
272 mdcKalTrackTds->
setPhi( atan2( py, px ), m );
273 mdcKalTrackTds->
setX( x, m );
274 mdcKalTrackTds->
setY( y, m );
275 mdcKalTrackTds->
setZ( z, m );
276 mdcKalTrackTds->
setR( sqrt( x * x + y * y ), m );
281 mdcKalTrackTds->
setNdf( mdcKalTrackRoot->
getNdf( m ), 0, m );
287 for (
int jj = 0; jj < 5; jj++ )
289 mdcKalTrackTds->
setZHelix( zhelixs[jj], jj );
290 mdcKalTrackTds->
setZError( zerrors[jj], jj );
291 mdcKalTrackTds->
setFHelix( fhelixs[jj], jj );
292 mdcKalTrackTds->
setFError( ferrors[jj], jj );
293 mdcKalTrackTds->
setPoca( pocas[jj], jj );
296 mdcKalTrackTdsCol->push_back( mdcKalTrackTds );
299 delete m_mdcKalTrackCol;
300 m_mdcKalTrackCol = 0;
301 return StatusCode::SUCCESS;
306 MsgStream log(
msgSvc(),
"MdcKalTrackCnv" );
307 log << MSG::DEBUG <<
"MdcKalTrackCnv::DataObjectToTObject" << endmsg;
308 StatusCode sc = StatusCode::SUCCESS;
312 if ( !mdcKalTrackColTds )
314 log << MSG::ERROR <<
"Could not downcast to DstMdcKalTrackCol" << endmsg;
315 return StatusCode::FAILURE;
322 log << MSG::ERROR <<
"Could not get ReconEvent in TDS " << endmsg;
323 return StatusCode::FAILURE;
328 { log << MSG::ERROR <<
"MdcKalTrackCnv:Could not downcast to TDS Dst Event" << endmsg; }
329 IOpaqueAddress* addr;
331 m_cnvSvc->getDstCnv()->createRep( evt, addr );
336 if ( !m_mdcKalTrackCol )
return sc;
340 DstMdcKalTrackCol::const_iterator mdcKalTrackTds;
342 for ( mdcKalTrackTds = mdcKalTrackColTds->begin();
343 mdcKalTrackTds != mdcKalTrackColTds->end(); mdcKalTrackTds++ )
350 Double_t zerror[5][5];
353 Double_t zhelix_e[5];
354 Double_t zerror_e[5][5];
357 Double_t zhelix_mu[5];
358 Double_t zerror_mu[5][5];
361 Double_t zhelix_k[5];
362 Double_t zerror_k[5][5];
365 Double_t zhelix_p[5];
366 Double_t zerror_p[5][5];
369 Double_t ferror[5][5];
370 Double_t fhelix_e[5];
371 Double_t ferror_e[5][5];
372 Double_t fhelix_mu[5];
373 Double_t ferror_mu[5][5];
374 Double_t fhelix_k[5];
375 Double_t ferror_k[5][5];
376 Double_t fhelix_p[5];
377 Double_t ferror_p[5][5];
383 for (
int k = 0; k < 5; k++ )
385 mdcKalTrackRoot->
setStat( ( *mdcKalTrackTds )->getStat( k ), k );
387 mdcKalTrackRoot->
setChisq( ( *mdcKalTrackTds )->getChisq( k ), k );
388 mdcKalTrackRoot->
setNdf( ( *mdcKalTrackTds )->getNdf( k ), k );
389 mdcKalTrackRoot->
setNlayer( ( *mdcKalTrackTds )->getNlayer( k ), k );
396 HepVector h_zhelix = ( *mdcKalTrackTds )->
getZHelix( 2 );
397 HepSymMatrix h_zerror = ( *mdcKalTrackTds )->getZError( 2 );
400 HepVector h_zhelix_e = ( *mdcKalTrackTds )->getZHelix( 0 );
401 HepSymMatrix h_zerror_e = ( *mdcKalTrackTds )->getZError( 0 );
404 HepVector h_zhelix_mu = ( *mdcKalTrackTds )->getZHelix( 1 );
405 HepSymMatrix h_zerror_mu = ( *mdcKalTrackTds )->getZError( 1 );
408 HepVector h_zhelix_k = ( *mdcKalTrackTds )->getZHelix( 3 );
409 HepSymMatrix h_zerror_k = ( *mdcKalTrackTds )->getZError( 3 );
412 HepVector h_zhelix_p = ( *mdcKalTrackTds )->getZHelix( 4 );
413 HepSymMatrix h_zerror_p = ( *mdcKalTrackTds )->getZError( 4 );
415 HepVector h_fhelix = ( *mdcKalTrackTds )->getFHelix( 2 );
416 HepSymMatrix h_ferror = ( *mdcKalTrackTds )->getFError( 2 );
417 HepVector h_fhelix_e = ( *mdcKalTrackTds )->getFHelix( 0 );
418 HepSymMatrix h_ferror_e = ( *mdcKalTrackTds )->getFError( 0 );
419 HepVector h_fhelix_mu = ( *mdcKalTrackTds )->getFHelix( 1 );
420 HepSymMatrix h_ferror_mu = ( *mdcKalTrackTds )->getFError( 1 );
421 HepVector h_fhelix_k = ( *mdcKalTrackTds )->getFHelix( 3 );
422 HepSymMatrix h_ferror_k = ( *mdcKalTrackTds )->getFError( 3 );
423 HepVector h_fhelix_p = ( *mdcKalTrackTds )->getFHelix( 4 );
424 HepSymMatrix h_ferror_p = ( *mdcKalTrackTds )->getFError( 4 );
426 mdcKalTrackRoot->
setTrackId( ( *mdcKalTrackTds )->getTrackId() );
438 for (
int i = 0; i < 5; i++ )
440 zhelix[i] = h_zhelix[i];
441 zhelix_e[i] = h_zhelix_e[i];
442 zhelix_mu[i] = h_zhelix_mu[i];
443 zhelix_p[i] = h_zhelix_p[i];
444 zhelix_k[i] = h_zhelix_k[i];
445 fhelix[i] = h_fhelix[i];
446 fhelix_e[i] = h_fhelix_e[i];
447 fhelix_mu[i] = h_fhelix_mu[i];
448 fhelix_p[i] = h_fhelix_p[i];
449 fhelix_k[i] = h_fhelix_k[i];
450 for (
int j = 0; j <= i; j++ )
452 zerror[i][j] = h_zerror[i][j];
453 zerror_e[i][j] = h_zerror_e[i][j];
454 zerror_mu[i][j] = h_zerror_mu[i][j];
455 zerror_p[i][j] = h_zerror_p[i][j];
456 zerror_k[i][j] = h_zerror_k[i][j];
457 zerror[j][i] = h_zerror[i][j];
458 zerror_e[j][i] = h_zerror_e[i][j];
459 zerror_mu[j][i] = h_zerror_mu[i][j];
460 zerror_p[j][i] = h_zerror_p[i][j];
461 zerror_k[j][i] = h_zerror_k[i][j];
462 ferror[i][j] = h_ferror[i][j];
463 ferror_e[i][j] = h_ferror_e[i][j];
464 ferror_mu[i][j] = h_ferror_mu[i][j];
465 ferror_p[i][j] = h_ferror_p[i][j];
466 ferror_k[i][j] = h_ferror_k[i][j];
467 ferror[j][i] = h_ferror[i][j];
468 ferror_e[j][i] = h_ferror_e[i][j];
469 ferror_mu[j][i] = h_ferror_mu[i][j];
470 ferror_p[j][i] = h_ferror_p[i][j];
471 ferror_k[j][i] = h_ferror_k[i][j];
513 return StatusCode::SUCCESS;