24 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
25 MsgStream log(
msgSvc,
"MdcCalRecTrk" );
26 log << MSG::DEBUG <<
"MdcCalRecTrk::setRecTrk()" << endmsg;
28 m_dr = ( *it_trk )->helix( 0 );
29 m_phi0 = ( *it_trk )->helix( 1 );
30 m_kappa = ( *it_trk )->helix( 2 );
31 m_dz = ( *it_trk )->helix( 3 );
32 m_tanl = ( *it_trk )->helix( 4 );
33 m_chisq = ( *it_trk )->chi2();
34 m_nhits = ( *it_trk )->getNhits();
35 m_helix = ( *it_trk )->helix();
36 m_helixerr = ( *it_trk )->err();
40 if ( 0 == m_pid )
mass = 0.000511;
41 else if ( 1 == m_pid )
mass = 0.105658;
42 else if ( 2 == m_pid )
mass = 0.139570;
43 else if ( 3 == m_pid )
mass = 0.493677;
44 else if ( 4 == m_pid )
mass = 0.938272;
45 else if ( 5 == m_pid )
mass = 0.139570;
46 else log << MSG::FATAL <<
"wrong particle type" << endmsg;
47 m_p4 = ( *it_trk )->p4(
mass );
53 m_p = m_pt * sqrt( m_tanl * m_tanl + 1.0 );
55 HitRefVec gothits = ( *it_trk )->getVecHits();
56 HitRefVec::iterator it_hit = gothits.begin();
58 for ( ; it_hit != gothits.end(); it_hit++ )
62 m_rechit.push_back( rechit );
68 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
69 MsgStream log(
msgSvc,
"MdcCalRecTrk" );
70 log << MSG::DEBUG <<
"MdcCalRecTrk::setKalTrk()" << endmsg;
78 else log << MSG::FATAL <<
"wrong particle type" << endmsg;
80 m_dr = ( *it_trk )->dr();
81 m_phi0 = ( *it_trk )->fi0();
82 m_kappa = ( *it_trk )->kappa();
83 m_dz = ( *it_trk )->dz();
84 m_tanl = ( *it_trk )->tanl();
85 m_chisq = ( *it_trk )->chi2();
88 m_p4.setPx( -
sin( m_phi0 ) / fabs( m_kappa ) );
89 m_p4.setPy(
cos( m_phi0 ) / fabs( m_kappa ) );
90 m_p4.setPz( m_tanl / fabs( m_kappa ) );
91 double p3 = m_p4.mag();
93 if ( 0 == m_pid )
mass = 0.000511;
94 else if ( 1 == m_pid )
mass = 0.105658;
95 else if ( 2 == m_pid )
mass = 0.139570;
96 else if ( 3 == m_pid )
mass = 0.493677;
97 else if ( 4 == m_pid )
mass = 0.938272;
98 else if ( 5 == m_pid )
mass = 0.139570;
99 m_p4.setE( sqrt( p3 * p3 +
mass *
mass ) );
104 m_pt = 1.0 / m_kappa;
105 m_p = m_pt * sqrt( m_tanl * m_tanl + 1.0 );
111 HelixSegRefVec::iterator it_hit = gothelixsegs.begin();
115 for ( ; it_hit != gothelixsegs.end(); it_hit++ )
119 m_rechit.push_back( rechit );
129 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
130 MsgStream log(
msgSvc,
"MdcCalib" );
132 IDataProviderSvc* eventSvc = NULL;
133 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
134 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc,
"/Event/Digi/MdcDigiCol" );
135 if ( !mdcDigiCol ) { log << MSG::FATAL <<
"Could not find event" << endmsg; }
139 bool hitCel[43][288];
140 for ( lay = 0; lay < 43; lay++ )
142 for ( cel = 0; cel < 288; cel++ ) { hitCel[lay][cel] =
false; }
145 MdcDigiCol::iterator
iter = mdcDigiCol->begin();
149 for ( ;
iter != mdcDigiCol->end();
iter++, digiId++ )
152 id = ( aDigi )->identify();
155 fgOverFlow = ( aDigi )->getOverflow();
158 if ( ( ( fgOverFlow & 3 ) != 0 ) || ( ( fgOverFlow & 12 ) != 0 ) ||
164 if ( ( ( fgOverFlow & 1 ) != 0 ) || ( aDigi->
getTimeChannel() == 0x7FFFFFFF ) )
168 if ( !goodT )
continue;
170 hitCel[lay][cel] =
true;
173 SmartDataPtr<RecMdcTrackCol> newtrkCol( eventSvc,
"/Event/Recon/RecMdcTrackCol" );
176 log << MSG::ERROR <<
"Could not find RecMdcTrackCol" << endmsg;
182 RecMdcTrackCol::iterator it_trk = newtrkCol->begin();
183 for ( it_trk = newtrkCol->begin(); it_trk != newtrkCol->end(); it_trk++ )
185 HitRefVec gothits = ( *it_trk )->getVecHits();
186 HitRefVec::iterator it_hit = gothits.begin();
187 HepVector helix = ( *it_trk )->helix();
188 HepSymMatrix helixErr = ( *it_trk )->err();
189 double phi0Rec = ( *it_trk )->helix( 1 );
191 if ( phi0Rec > phi0 ) delphi = phi0Rec - phi0;
192 else delphi = phi0 - phi0Rec;
193 if ( delphi > CLHEP::pi ) delphi -= CLHEP::pi;
194 if ( delphi > ( CLHEP::pi * 0.17 ) )
continue;
204 for ( lay = 0; lay < 8; lay++ )
206 double docamin = 0.7;
207 if ( lay > 7 ) docamin = 0.9;
209 int ncel = m_mdcGeomSvc->Layer( lay )->NCell();
210 for ( cel = 0; cel < ncel; cel++ )
213 const MdcGeoWire* pWire = m_mdcGeomSvc->Wire( lay, cel );
216 double rr = sqrt( ( xx * xx ) + ( yy * yy ) );
217 if ( yy >= 0 ) wphi = acos( xx / rr );
218 else wphi = CLHEP::twopi - acos( xx / rr );
220 double phiTrk = phi0 + CLHEP::halfpi;
221 if ( phiTrk > CLHEP::twopi ) phiTrk -= CLHEP::twopi;
222 if ( !( ( fabs( wphi - phiTrk ) < dphi ) ||
223 ( fabs( wphi + CLHEP::twopi - phiTrk ) < dphi ) ||
224 ( fabs( wphi - CLHEP::twopi - phiTrk ) < dphi ) ) )
227 double doca = m_mdcUtilitySvc->doca( lay, cel, helix, helixErr );
230 if ( fabs( doca ) < fabs( docamin ) )
238 if ( lay < 4 ) nhitLay1++;
239 else if ( lay < 8 ) nhitLay2++;
240 else if ( lay < 20 ) nhitLay3++;
242 for (
int ii = ( -nNoiRange ); ii <= nNoiRange; ii++ )
244 if ( 0 == ii )
continue;
245 int icell = celmin + ii;
246 if ( icell >= ncel ) icell -= ncel;
247 if ( icell < 0 ) icell += ncel;
250 if ( hitCel[lay][icell] )
252 if ( lay < 4 ) nhitT1++;
253 else if ( lay < 8 ) nhitT2++;
254 else if ( lay < 20 ) nhitT3++;
260 if ( ( nhitLay1 <= 0 ) || ( nhitLay2 <= 0 ) || ( nhitLay3 <= 0 ) || ( nhitLay4 <= 0 ) )
262 double ratio1 = (double)nhitT1 / ( (
double)nhitLay1 * (
double)nNoiRange * 2.0 );
263 double ratio2 = (double)nhitT2 / ( (
double)nhitLay2 * (
double)nNoiRange * 2.0 );
264 double ratio3 = (double)nhitT3 / ( (
double)nhitLay3 * (
double)nNoiRange * 2.0 );
265 double ratio4 = (double)nhitT4 / ( (
double)nhitLay4 * (
double)nNoiRange * 2.0 );
267 if ( ( ratio1 > 0.08 ) || ( ratio2 > 0.08 ) || ( ratio3 > 0.03 ) || ( ratio4 > 0.03 ) )