68 SmartDataPtr<RecMdcTrackCol> mdcTrkCol( evtSvc(),
"/Event/Recon/RecMdcTrackCol" );
71 error() <<
"Could not find RecMdcTrackCol!" << endmsg;
74 info() <<
"MDC tracks: " << mdcTrkCol->size() << endmsg;
76 if ( mdcTrkCol->size() != 2 )
return 0;
80 int c1 = ( *mdcTrkCol )[0]->charge();
81 double r1 = ( *mdcTrkCol )[0]->r();
82 double z1 = ( *mdcTrkCol )[0]->z();
83 double p1 = ( *mdcTrkCol )[0]->p();
85 int c2 = ( *mdcTrkCol )[1]->charge();
86 double r2 = ( *mdcTrkCol )[1]->r();
87 double z2 = ( *mdcTrkCol )[1]->z();
88 double p2 = ( *mdcTrkCol )[1]->p();
90 bool mdcflag1 = c1 + c2 == 0;
91 bool mdcflag2 = fabs( r1 ) <= m_vr0cut && fabs( z1 ) < m_vz0cut;
92 bool mdcflag3 = fabs( r2 ) <= m_vr0cut && fabs( z2 ) < m_vz0cut;
93 bool mdcflag4 =
p1 < m_pcut_up &&
p2 < m_pcut_up;
96 bool mdcflag5 = fabs(
p1 -
p2 ) / (
p1 +
p2 ) < m_psymcut;
98 info() <<
"r1:\t" << r1 <<
"\tz1:" << z1 << endmsg;
99 info() <<
"r2:\t" << r2 <<
"\tz2:" << z2 << endmsg;
100 info() <<
"p1:\t" <<
p1 <<
"\tp2:" <<
p2 << endmsg;
102 double zeroCFlag, vtRZFlag, pLimFlag, pSymFlag;
108 if ( mdcflag2 && mdcflag3 )
124 if ( mdcflag1 && mdcflag2 && mdcflag3 && mdcflag4 && mdcflag5 )
130 info() <<
"MDC selection done!" << endmsg;
133 SmartDataPtr<RecTofTrackCol> tofTrackCol( evtSvc(),
"/Event/Recon/RecTofTrackCol" );
136 error() <<
"Could not find RecTofTrackCol!" << endmsg;
139 info() <<
"TOF tracks: " << tofTrackCol->size() << endmsg;
143 if ( tofTrackCol->size() > 7 && tofTrackCol->size() < 21 )
146 for (
int itof = 0; itof < tofTrackCol->size(); itof++ )
149 status->
setStatus( ( *tofTrackCol )[itof]->status() );
156 if ( goodtof == 0 ) t1 = ( *tofTrackCol )[itof]->tof();
157 if ( goodtof == 1 ) t2 = ( *tofTrackCol )[itof]->tof();
165 bool tofflag1 = fabs( t1 - t2 ) < m_tcut;
166 info() <<
"t1:\t" << t1 <<
"\tt2:" << t2 <<
"dt:\t" << fabs( t1 - t2 ) << endmsg;
174 info() <<
"TOF selection done!" << endmsg;
177 SmartDataPtr<RecEmcShowerCol> emcShowerCol( evtSvc(),
"/Event/Recon/RecEmcShowerCol" );
180 error() <<
"Could not find RecEmcShowerCol!" << endmsg;
183 info() <<
"EMC showers:\t" << emcShowerCol->size() << endmsg;
185 if ( emcShowerCol->size() < 2 )
return 0;
190 e1 = ( *emcShowerCol )[0]->energy();
191 e2 = ( *emcShowerCol )[1]->energy();
192 theta1 = ( *emcShowerCol )[0]->theta();
193 theta2 = ( *emcShowerCol )[1]->theta();
194 phi1 = ( *emcShowerCol )[0]->phi();
195 phi2 = ( *emcShowerCol )[1]->phi();
196 part = ( *emcShowerCol )[0]->module();
200 bool emcFlag3 = fabs(
theta1 +
theta2 - CLHEP::pi ) < m_dthetacut;
201 bool emcFlag4 = fabs(
phi1 -
phi2 ) - CLHEP::pi < m_dphicut;
202 bool emcFlag5 = !m_partselect || ( m_partselect == 1 && part == 1 ) ||
203 ( m_partselect == 2 && part != 1 );
205 info() <<
"e1:\t" <<
e1 <<
"\te2:\t" <<
e2 << endmsg;
206 info() <<
"theta1:\t" <<
theta1 <<
"\ttheta2:\t" <<
theta2 << endmsg;
207 info() <<
"phi1:\t" <<
phi1 <<
"\tphi2:\t" <<
phi2 << endmsg;
208 info() <<
"part:\t" << part <<
"\tpartFlag:\t" << emcFlag5 << endmsg;
210 double eLimFlag, eBBFlag, partFlag;
211 if ( emcFlag1 && emcFlag2 )
216 if ( emcFlag3 && emcFlag4 )
226 if ( emcFlag1 && emcFlag2 && emcFlag3 && emcFlag4 && emcFlag5 )
231 info() <<
"EMC selection done!" << endmsg;
235 SmartDataPtr<MucDigiCol> mucDigiCol( evtSvc(),
"/Event/Digi/MucDigiCol" );
238 error() <<
"Could not find MucDigiCol!" << endmsg;
241 SmartDataPtr<RecMucTrackCol> mucTrackCol( evtSvc(),
"/Event/Recon/RecMucTrackCol" );
244 error() <<
"Could not find RecMucTrackCol" << endmsg;
248 int mudigiNum, mutrkNum;
249 mudigiNum = mutrkNum = 0;
250 mudigiNum = mucDigiCol->size();
251 mutrkNum = mucTrackCol->size();
253 bool mucflag1 = mudigiNum >= m_mudigicut;
254 bool mucflag2 = mutrkNum >= m_mutrkcut;
256 info() <<
"MUC digi:\t" << mudigiNum <<
"\tMUC track:\t" << mutrkNum << endmsg;
258 double mudigiFlag, mutrkFlag;
269 if ( mucflag1 && mucflag2 )
274 info() <<
"MUC selection done!" << endmsg;
295 m_mudigi = mudigiNum;
297 m_zeroCFlag = zeroCFlag;
298 m_vtRZFlag = vtRZFlag;
299 m_pLimFlag = pLimFlag;
300 m_pSymFlag = pSymFlag;
301 m_tLimFlag = tLimFlag;
302 m_eLimFlag = eLimFlag;
304 m_partFlag = partFlag;
305 m_mudigiFlag = mudigiFlag;
306 m_mutrkFlag = mutrkFlag;
308 m_mdcFlag = m_mdcPass;
309 m_tofFlag = m_tofPass;
310 m_emcFlag = m_emcPass;
311 m_mucFlag = m_mucPass;
313 m_passtuple->write().ignore();
317 if ( m_mdcPass && m_tofPass && m_emcPass && m_mucPass )
320 if ( part == 1 )
return 1;