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_chargek1, m_chargek2, m_chargepi1, m_chargepi2;
43 int ik1_temp, ik2_temp, ipi1_temp, ipi2_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 );
72 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc );
77 xorigin.setX( dbv[0] );
78 xorigin.setY( dbv[1] );
79 xorigin.setZ( dbv[2] );
82 double xv = xorigin.x();
83 double yv = xorigin.y();
84 double zv = xorigin.z();
86 HepPoint3D point0( 0., 0., 0. );
87 HepPoint3D IP( xorigin[0], xorigin[1], xorigin[2] );
89 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
93 int ik1 = ( *itTrk )->trackId();
95 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
99 m_chargek1 = mdcKalTrk1->
charge();
100 if ( m_chargek1 != 1 )
continue;
106 VFHelix helixip3_1( point0, a1, Ea1 );
107 helixip3_1.
pivot( IP );
108 HepVector vecipa1 = helixip3_1.
a();
110 double dr1 = fabs( vecipa1[0] );
111 double dz1 = fabs( vecipa1[3] );
112 double costheta1 =
cos( mdcKalTrk1->
theta() );
114 if ( dr1 >= 1.0 )
continue;
115 if ( dz1 >= 10.0 )
continue;
116 if ( fabs( costheta1 ) >= 0.93 )
continue;
131 for (
int j = 0; j < evtRecEvent->totalCharged(); j++ )
135 int ik2 = ( *itTrk )->trackId();
136 if ( ik1 == ik2 )
continue;
138 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
142 m_chargek2 = mdcKalTrk2->
charge();
143 if ( ( m_chargek1 + m_chargek2 ) != 0 )
continue;
148 VFHelix helixip3_2( point0, a2, Ea2 );
149 helixip3_2.
pivot( IP );
150 HepVector vecipa2 = helixip3_2.
a();
152 double dr2 = fabs( vecipa2[0] );
153 double dz2 = fabs( vecipa2[3] );
154 double costheta2 =
cos( mdcKalTrk2->
theta() );
155 if ( dr2 >= 1.0 )
continue;
156 if ( dz2 >= 10.0 )
continue;
157 if ( fabs( costheta2 ) >= 0.93 )
continue;
172 for (
int k = 0; k < evtRecEvent->totalCharged(); k++ )
176 int ipi1 = ( *itTrk )->trackId();
177 if ( ipi1 == ik1 || ipi1 == ik2 )
continue;
179 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
183 m_chargepi1 = mdcKalTrk3->
charge();
184 if ( m_chargepi1 != 1 )
continue;
188 HepSymMatrix Ea3 = mdcKalTrk3->
getZError();
189 VFHelix helixip3_3( point0, a3, Ea3 );
190 helixip3_3.
pivot( IP );
191 HepVector vecipa3 = helixip3_3.
a();
193 double dr3 = fabs( vecipa3[0] );
194 double dz3 = fabs( vecipa3[3] );
195 double costheta3 =
cos( mdcKalTrk3->
theta() );
196 if ( dr3 >= 1.0 )
continue;
197 if ( dz3 >= 10.0 )
continue;
198 if ( fabs( costheta3 ) >= 0.93 )
continue;
203 if ( simple_pid->
probPion() < 0.0 ||
213 for (
int l = 0; l < evtRecEvent->totalCharged(); l++ )
217 int ipi2 = ( *itTrk )->trackId();
218 if ( ipi2 == ik1 || ipi2 == ik2 || ipi2 == ipi1 )
continue;
220 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
224 m_chargepi2 = mdcKalTrk4->
charge();
225 if ( ( m_chargepi1 + m_chargepi2 ) != 0 )
continue;
229 HepSymMatrix Ea4 = mdcKalTrk4->
getZError();
230 VFHelix helixip3_4( point0, a4, Ea4 );
231 helixip3_4.
pivot( IP );
232 HepVector vecipa4 = helixip3_4.
a();
234 double dr4 = fabs( vecipa4[0] );
235 double dz4 = fabs( vecipa4[3] );
236 double costheta4 =
cos( mdcKalTrk4->
theta() );
237 if ( dr4 >= 1.0 )
continue;
238 if ( dz4 >= 10.0 )
continue;
239 if ( fabs( costheta4 ) >= 0.93 )
continue;
244 if ( simple_pid->
probPion() < 0.0 ||
253 HepPoint3D vx( xorigin.x(), xorigin.y(), xorigin.z() );
254 HepSymMatrix Evx( 3, 0 );
272 vtxfit->
AddVertex( 0, vxpar, 0, 1, 2, 3 );
273 if ( !vtxfit->
Fit( 0 ) )
continue;
281 HepVector kap_val = HepVector( 7, 0 );
282 HepVector kam_val = HepVector( 7, 0 );
283 HepVector pip_val = HepVector( 7, 0 );
284 HepVector pim_val = HepVector( 7, 0 );
290 HepLorentzVector P_KAP( kap_val[0], kap_val[1], kap_val[2], kap_val[3] );
291 HepLorentzVector P_KAM( kam_val[0], kam_val[1], kam_val[2], kam_val[3] );
292 HepLorentzVector P_PIP( pip_val[0], pip_val[1], pip_val[2], pip_val[3] );
293 HepLorentzVector P_PIM( pim_val[0], pim_val[1], pim_val[2], pim_val[3] );
295 P_KAP.boost( -0.011, 0, 0 );
296 P_KAM.boost( -0.011, 0, 0 );
297 P_PIP.boost( -0.011, 0, 0 );
298 P_PIM.boost( -0.011, 0, 0 );
299 pddd = P_KAP + P_KAM + P_PIP + P_PIM;
301 double pkkpipi = pddd.rho();
303 double temp1 = (
ecms / 2 ) * (
ecms / 2 ) - pkkpipi * pkkpipi;
304 if ( temp1 < 0 ) temp1 = 0;
305 double mass_bc_tem = sqrt( temp1 );
306 if ( mass_bc_tem < 1.82 || mass_bc_tem > 1.89 )
continue;
308 double delE_tag_tag =
ecms / 2 - pddd.e();
310 if ( fabs( delE_tag_tag ) < deltaE_tem )
312 deltaE_tem = fabs( delE_tag_tag );
313 delE_tag_temp = delE_tag_tag;
314 mass_bcgg = mass_bc_tem;
332 if ( m_chargetag < 0 ) tagmode = -20;
335 delE_tag = delE_tag_temp;
338 iGoodtag.push_back( ik1_temp );
339 iGoodtag.push_back( ik2_temp );
340 iGoodtag.push_back( ipi1_temp );
341 iGoodtag.push_back( ipi2_temp );
343 iGamtag.push_back( 9999 );
344 iGamtag.push_back( 9999 );
345 iGamtag.push_back( 9999 );
346 iGamtag.push_back( 9999 );