116 MsgStream log(
msgSvc(), name() );
120 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
123 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
124 return ( StatusCode::FAILURE );
128 SmartDataPtr<RecMdcTrackCol> mdcTrackCol( eventSvc(),
"/Event/Recon/RecMdcTrackCol" );
131 log << MSG::FATAL <<
"Could not find Mdc track collection!!" << endmsg;
132 return ( StatusCode::FAILURE );
135 RecMdcTrackCol::iterator iterTrk = mdcTrackCol->begin();
138 double cost1 = -999, cost2 = -999,
phi1 = -999,
phi2 = -999;
139 int hit1 = -999, hit2 = -999, shit1 = -999, shit2 = -999, charg1 = -999, charg2 = -999;
140 double mdcbalance = -999;
142 unsigned int ntrk = mdcTrackCol->size();
143 double kappa = -999, tanl = -999, sint = -999;
144 double p = -999, theta = -999, phi = -999;
145 double vz1 = -999, vz2 = -999, vr1 = -999, vr2 = -999;
148 for ( ; iterTrk != mdcTrackCol->end(); iterTrk++ )
153 phi = ( *iterTrk )->helix( 1 );
154 kappa = ( *iterTrk )->helix( 2 );
155 tanl = ( *iterTrk )->helix( 4 );
157 theta = 0.5 * 3.1415926 - atan( tanl );
162 if (
abs( kappa ) > 0.001 &&
abs( sint ) > 0.01 ) { p =
abs( 1. / kappa ) / sint; }
166 log << MSG::WARNING <<
"FastTrk=>"
167 <<
" kappa=" << kappa <<
"; sint=" << sint << endmsg;
175 cost1 =
cos( theta );
178 vz1 = ( *iterTrk )->helix( 3 );
180 vr1 = ( *iterTrk )->helix( 0 );
182 hit1 = ( *iterTrk )->getNhits();
184 shit1 = ( *iterTrk )->nster();
186 charg1 = ( *iterTrk )->charge();
191 cost2 =
cos( theta );
193 vz2 = ( *iterTrk )->helix( 3 );
194 vr2 = ( *iterTrk )->helix( 0 );
195 hit2 = ( *iterTrk )->getNhits();
196 shit2 = ( *iterTrk )->nster();
197 charg2 = ( *iterTrk )->charge();
199 log << MSG::DEBUG <<
"p=" << p <<
", "
200 <<
"theta=" << theta <<
", phi=" << phi <<
", vz=" << ( *iterTrk )->helix( 3 )
201 <<
", vr=" << ( *iterTrk )->helix( 0 ) << endmsg;
202 if (
cos( theta ) > 0 ) mdcbalance += 1.;
203 else if (
cos( theta ) < 0 ) mdcbalance -= 1.;
205 if ( ntrk >= 2 ) mdcbalance /= ntrk;
218 log << MSG::INFO <<
"ntrk=" << ntrk <<
"; mdc balance=" << mdcbalance <<
"; pmax1=" << max1
219 <<
"; pmax2=" << max2 <<
"; acol=" << acol <<
"; cost1=" << cost1 <<
"; cost2=" << cost2
223 m_ntrk->setValue( ntrk );
224 m_acol->setValue( acol );
225 m_mbal->setValue( mdcbalance );
226 m_pmax1->setValue( max1 );
227 m_pmax2->setValue( max2 );
228 m_cost1->setValue( cost1 );
229 m_cost2->setValue( cost2 );
230 m_vr->setValue( vr1 );
231 m_vz->setValue( vz1 );
233 m_ef->addToEFVec( ntrk, 6 );
234 m_ef->appToEFVec( max1, 7 );
235 m_ef->appToEFVec( cost1, 8 );
236 m_ef->appToEFVec( vz1, 9 );
238 m_ef->appToEFVec( vr1, 11 );
239 m_ef->addToEFVec( hit1, 12 );
240 m_ef->addToEFVec( shit1, 13 );
241 m_ef->appToEFVec( max2, 14 );
242 m_ef->appToEFVec( cost2, 15 );
243 m_ef->appToEFVec( vz2, 16 );
245 m_ef->appToEFVec( vr2, 18 );
246 m_ef->addToEFVec( hit2, 19 );
247 m_ef->addToEFVec( shit2, 20 );
248 m_ef->appToEFVec( acol, 21 );
249 m_ef->setVecBit(
true, 0, 4 );
250 if ( ntrk == 0 )
m_ef->addToEFVec( 1, 1 );
251 else if ( ntrk == 1 )
m_ef->addToEFVec( 8, 1 );
252 else if ( ntrk >= 2 )
m_ef->addToEFVec( 16, 1 );
253 else m_ef->addToEFVec( 0, 1 );
255 m_ef->addToEFVec( charg1, 23 );
256 m_ef->addToEFVec( charg2, 24 );
260 return StatusCode::SUCCESS;