33 Vint iGam,
double Ebeam,
int PID_flag,
int Charge_candidate_D ) {
35 int nGood = iGood.size();
36 int nGam = iGam.size();
41 double mass_bcgg, delE_tag_temp;
42 int m_chargetag, m_chargepi1, m_chargepi2, m_chargek, m_chargepi3;
43 int ik1_temp, ipi1_temp, ipi2_temp, ipi3_temp;
44 HepLorentzVector pddd;
45 HepLorentzVector pddd_temp;
47 IDataProviderSvc* eventSvc = NULL;
48 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
50 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc,
"/Event/EventHeader" );
52 int runNo = eventHeader->runNumber();
53 int rec = eventHeader->eventNumber();
55 double xecm = 2 * Ebeam;
60 if ( ( evtRecEvent->totalCharged() < 4 ) ) {
return; }
65 Gaudi::svcLocator()->service(
"SimplePIDSvc", simple_pid );
67 double deltaE_tem = 0.20;
70 Hep3Vector xorigin( 0, 0, 0 );
71 HepSymMatrix xoriginEx( 3, 0 );
73 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc );
78 xorigin.setX( dbv[0] );
79 xorigin.setY( dbv[1] );
80 xorigin.setZ( dbv[2] );
82 xoriginEx[0][0] = vv[0] * vv[0];
83 xoriginEx[1][1] = vv[1] * vv[1];
84 xoriginEx[2][2] = vv[2] * vv[2];
87 double xv = xorigin.x();
88 double yv = xorigin.y();
89 double zv = xorigin.z();
91 HepPoint3D point0( 0., 0., 0. );
92 HepPoint3D IP( xorigin[0], xorigin[1], xorigin[2] );
94 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
98 int ipi1 = ( *itTrk )->trackId();
100 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
104 m_chargepi1 = mdcKalTrk1->
charge();
105 if ( m_chargepi1 != 1 )
continue;
109 HepSymMatrix Ea1 = mdcKalTrk1->
getZError();
111 VFHelix helixip3_1( point0, a1, Ea1 );
112 helixip3_1.
pivot( IP );
113 HepVector vecipa1 = helixip3_1.
a();
115 double dr1 = fabs( vecipa1[0] );
116 double dz1 = fabs( vecipa1[3] );
117 double costheta1 =
cos( mdcKalTrk1->
theta() );
119 if ( dr1 >= 15.0 )
continue;
120 if ( dz1 >= 25.0 )
continue;
121 if ( fabs( costheta1 ) >= 0.93 )
continue;
128 for (
int j = 0; j < evtRecEvent->totalCharged(); j++ )
132 int ipi2 = ( *itTrk )->trackId();
133 if ( ipi1 == ipi2 )
continue;
135 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
139 m_chargepi2 = mdcKalTrk2->
charge();
140 if ( ( m_chargepi2 + m_chargepi1 ) != 0 )
continue;
144 HepSymMatrix Ea2 = mdcKalTrk2->
getZError();
145 VFHelix helixip3_2( point0, a2, Ea2 );
146 helixip3_2.
pivot( IP );
147 HepVector vecipa2 = helixip3_2.
a();
149 double dr2 = fabs( vecipa2[0] );
150 double dz2 = fabs( vecipa2[3] );
151 double costheta2 =
cos( mdcKalTrk2->
theta() );
152 if ( dr2 >= 15.0 )
continue;
153 if ( dz2 >= 25.0 )
continue;
154 if ( fabs( costheta2 ) >= 0.93 )
continue;
158 HepVector pip_val = HepVector( 7, 0 );
159 HepVector pim_val = HepVector( 7, 0 );
162 HepLorentzVector ptrktagk0( pip_val[0] + pim_val[0], pip_val[1] + pim_val[1],
163 pip_val[2] + pim_val[2], pip_val[3] + pim_val[3] );
164 double m_xmtagk0_tem = ptrktagk0.mag();
165 if ( fabs( ptrktagk0.m() - 0.498 ) > 0.1 )
continue;
167 HepPoint3D vx( xorigin.x(), xorigin.y(), xorigin.z() );
168 HepSymMatrix Evx( 3, 0 );
184 if ( !( vtxfit0->
Fit( 0 ) ) )
continue;
194 for (
int k = 0; k < evtRecEvent->totalCharged(); k++ )
198 int ik1 = ( *itTrk )->trackId();
199 if ( ipi2 == ik1 || ipi1 == ik1 )
continue;
201 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
205 m_chargek = mdcKalTrk3->
charge();
206 if (
abs( m_chargek ) != 1 )
continue;
211 VFHelix helixip3_3( point0, a3, Ea3 );
212 helixip3_3.
pivot( IP );
213 HepVector vecipa3 = helixip3_3.
a();
215 double dr3 = fabs( vecipa3[0] );
216 double dz3 = fabs( vecipa3[3] );
217 double costheta3 =
cos( mdcKalTrk3->
theta() );
218 if ( dr3 >= 1.0 )
continue;
219 if ( dz3 >= 10.0 )
continue;
220 if ( fabs( costheta3 ) >= 0.93 )
continue;
225 if ( simple_pid->
probKaon() < 0.0 ||
235 for (
int l = 0; l < evtRecEvent->totalCharged(); l++ )
239 int ipi3 = ( *itTrk )->trackId();
240 if ( ipi3 == ik1 || ipi3 == ipi2 || ipi3 == ipi1 )
continue;
242 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
246 m_chargepi3 = mdcKalTrk4->
charge();
247 if ( ( m_chargepi3 + m_chargek ) != 0 )
continue;
251 HepSymMatrix Ea4 = mdcKalTrk4->
getZError();
252 VFHelix helixip3_4( point0, a4, Ea4 );
253 helixip3_4.
pivot( IP );
254 HepVector vecipa4 = helixip3_4.
a();
256 double dr4 = fabs( vecipa4[0] );
257 double dz4 = fabs( vecipa4[3] );
258 double costheta4 =
cos( mdcKalTrk4->
theta() );
259 if ( dr4 >= 1.0 )
continue;
260 if ( dz4 >= 10.0 )
continue;
261 if ( fabs( costheta4 ) >= 0.93 )
continue;
266 if ( simple_pid->
probPion() < 0.0 ||
278 if ( !vtxfit_2->
Fit( 0 ) )
continue;
286 vxpar.
setEvx( xoriginEx );
290 if ( !vtxfit->
Fit() )
continue;
292 if ( vtxfit->
chisq() > 999. )
continue;
295 double m_massks1_tem = vtxfit->
p4par().m();
296 if ( m_massks1_tem < 0.485 || m_massks1_tem > 0.515 )
continue;
297 HepLorentzVector p4kstag = vtxfit->
p4par();
300 HepVector ka_val = HepVector( 7, 0 );
301 HepVector pi_val = HepVector( 7, 0 );
302 HepVector ksp_val = HepVector( 7, 0 );
303 HepVector ksm_val = HepVector( 7, 0 );
310 HepLorentzVector P_KA( ka_val[0], ka_val[1], ka_val[2], ka_val[3] );
311 HepLorentzVector P_PI( pi_val[0], pi_val[1], pi_val[2], pi_val[3] );
312 HepLorentzVector P_KSP( ksp_val[0], ksp_val[1], ksp_val[2], ksp_val[3] );
313 HepLorentzVector P_KSM( ksm_val[0], ksm_val[1], ksm_val[2], ksm_val[3] );
315 P_KA.boost( -0.011, 0, 0 );
316 P_PI.boost( -0.011, 0, 0 );
317 P_KSP.boost( -0.011, 0, 0 );
318 P_KSM.boost( -0.011, 0, 0 );
320 p4kstag.boost( -0.011, 0, 0 );
322 pddd = P_KA + P_PI + p4kstag;
324 double pk0kpi = pddd.rho();
326 double temp1 = (
ecms / 2 ) * (
ecms / 2 ) - pk0kpi * pk0kpi;
327 if ( temp1 < 0 ) temp1 = 0;
328 double mass_bc_tem = sqrt( temp1 );
329 if ( mass_bc_tem < 1.82 || mass_bc_tem > 1.89 )
continue;
331 double delE_tag_tag =
ecms / 2 - pddd.e();
333 if ( fabs( delE_tag_tag ) < deltaE_tem )
335 deltaE_tem = fabs( delE_tag_tag );
336 delE_tag_temp = delE_tag_tag;
337 mass_bcgg = mass_bc_tem;
356 if ( m_chargetag < 0 ) tagmode = -21;
359 delE_tag = delE_tag_temp;
362 iGoodtag.push_back( ipi1_temp );
363 iGoodtag.push_back( ipi2_temp );
364 iGoodtag.push_back( ik1_temp );
365 iGoodtag.push_back( ipi3_temp );
367 iGamtag.push_back( 9999 );
368 iGamtag.push_back( 9999 );
369 iGamtag.push_back( 9999 );
370 iGamtag.push_back( 9999 );