175 {
176 MsgStream log(
msgSvc(), name() );
177 log << MSG::INFO << "in execute()" << endmsg;
179 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
180 runNo = eventHeader->runNumber();
181 int event = eventHeader->eventNumber();
182 log << MSG::INFO << "run,evtnum=" << runNo << "," << event << endmsg;
183 m_run = eventHeader->runNumber();
184 m_rec = eventHeader->eventNumber();
185
186 if ( flag == true )
187 {
188 flag = false;
189 log << MSG::DEBUG << "setting parameter" << endmsg;
190
191 m_BeamEnergySvc->getBeamEnergyInfo();
192 if ( !m_BeamEnergySvc->isRunValid() ) return StatusCode::FAILURE;
193 E_cms = 2 * m_BeamEnergySvc->getbeamE();
194 log << MSG::DEBUG << "cms energy is " << E_cms << endmsg;
195
196 Parameter* func = new Parameter();
198
204
205 log << MSG::DEBUG << "parameters: " << CrossSection << " " << MCEff << endmsg;
206 }
207
209 log << MSG::INFO << "ncharg,nneu,tottks=" << evtRecEvent->totalCharged() << ","
210 << evtRecEvent->totalNeutral() << "," << evtRecEvent->totalTracks() << endmsg;
212 std::vector<int> iGam;
213 iGam.clear();
215 for ( int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
216 {
218 if ( !( *itTrk )->isEmcShowerValid() ) continue;
219 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
220 if ( emcTrk->
energy() < 0.6 )
continue;
221 if ( fabs(
cos( emcTrk->
theta() ) ) > 0.83 )
continue;
222 iGam.push_back( ( *itTrk )->trackId() );
223 }
224 if ( iGam.size() < 2 ) return StatusCode::SUCCESS;
226 double energy1 = 0.5;
227 double energy2 = 0.5;
228 int gam1 = -9999;
229 int gam2 = -9999;
230 for ( int i = 0; i < iGam.size(); i++ )
231 {
233 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
234
235 if ( emcTrk->
energy() > energy1 )
236 {
237 energy2 = energy1;
238 gam2 = gam1;
239 energy1 = emcTrk->
energy();
240 gam1 = iGam[i];
241 }
242 else if ( emcTrk->
energy() > energy2 )
243 {
244 energy2 = emcTrk->
energy();
245 gam2 = iGam[i];
246 }
247 }
248 if ( gam1 == -9999 || gam2 == -9999 ) return StatusCode::SUCCESS;
250 m_tot = energy1 + energy2;
251 RecEmcShower* maxEmc = ( *( evtRecTrkCol->begin() + gam1 ) )->emcShower();
252 RecEmcShower* minEmc = ( *( evtRecTrkCol->begin() + gam2 ) )->emcShower();
253 m_maxE = maxEmc->
energy();
254 m_minE = minEmc->
energy();
255 m_maxTheta = maxEmc->
theta();
256 m_minTheta = minEmc->
theta();
257 m_maxPhi = maxEmc->
phi();
258 m_minPhi = minEmc->
phi();
259 m_delPhi = ( fabs( m_maxPhi - m_minPhi ) -
pai ) * 180. /
pai;
260 m_delTheta = ( fabs( m_maxTheta + m_minTheta ) -
pai ) * 180. /
pai;
261
262 HepLorentzVector
max,
min;
263 max.setPx( m_maxE *
sin( m_maxTheta ) *
cos( m_maxPhi ) );
264 max.setPy( m_maxE *
sin( m_maxTheta ) *
sin( m_maxPhi ) );
265 max.setPz( m_maxE *
cos( m_maxTheta ) );
267 min.setPx( m_minE *
sin( m_minTheta ) *
cos( m_minPhi ) );
268 min.setPy( m_minE *
sin( m_minTheta ) *
sin( m_minPhi ) );
269 min.setPz( m_minE *
cos( m_minTheta ) );
271 m_angle =
max.angle(
min.vect() ) * 180. /
pai;
273 m_IM =
max.invariantMass(
min );
274
275 if ( m_minE >= boostMinEmin && m_delPhi > dPhiMin && m_delPhi < dPhiMax &&
276 m_minE <= boostMinEmax )
277 tot++;
278 if ( m_minE >= boostMinEmin && m_delPhi > dPhiMinSig && m_delPhi < dPhiMaxSig &&
279 m_minE <= boostMinEmax )
280 signal++;
281
282
283
284 HepLorentzVector boost1 =
max.boost( -0.011, 0, 0 );
285 HepLorentzVector boost2 =
min.boost( -0.011, 0, 0 );
286 m_boostAngle = boost1.angle( boost2.vect() ) * 180. /
pai;
287 m_boostMaxE = boost1.e();
288 m_boostMinE = boost2.e();
289 m_boostDelPhi = ( fabs( boost1.phi() - boost2.phi() ) -
pai ) * 180. /
pai;
290 m_boostDelTheta = ( fabs( boost1.theta() + boost2.theta() ) -
pai ) * 180. /
pai;
291 m_boostM = ( boost1 + boost2 ).m();
292 m_boostIM = boost1.invariantMass( boost2 );
293 log << MSG::INFO << "num Good Photon " << iGam.size() << endmsg;
294 if ( m_boostMinE >= boostMinEmin && m_boostMinE <= boostMinEmax &&
295 fabs( m_boostDelPhi ) <= boostPhimin )
296 boost_signal++;
297 if ( m_boostMinE >= boostMinEmin && m_boostMinE <= boostMinEmax &&
298 fabs( m_boostDelPhi ) <= boostPhimax )
299 boost_tot++;
300
301 if ( eventHeader->runNumber() < 0 )
302 {
303 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
304 int m_numParticle = 0;
305 if ( !mcParticleCol )
306 {
307
308 return StatusCode::FAILURE;
309 }
310 else
311 {
312 bool jpsipDecay = false;
313 int rootIndex = -1;
314 Event::McParticleCol::iterator iter_mc = mcParticleCol->begin();
315 for ( ; iter_mc != mcParticleCol->end(); iter_mc++ )
316 {
317 if ( ( *iter_mc )->primaryParticle() ) continue;
318 if ( !( *iter_mc )->decayFromGenerator() ) continue;
319
320 if ( ( *iter_mc )->particleProperty() == 443 )
321 {
322 jpsipDecay = true;
323 rootIndex = ( *iter_mc )->trackIndex();
324 }
325 if ( !jpsipDecay ) continue;
326 int mcidx = ( ( *iter_mc )->mother() ).trackIndex() - rootIndex;
327 int pdgid = ( *iter_mc )->particleProperty();
328 m_pdgid[m_numParticle] = pdgid;
329 m_motheridx[m_numParticle] = mcidx;
330 m_numParticle += 1;
331 }
332 }
333 m_idxmc = m_numParticle;
334 }
336 m_tuple2->write().ignore();
337 return StatusCode::SUCCESS;
338}
EvtRecTrackCol::iterator EvtRecTrackIterator
double sin(const BesAngle a)
double cos(const BesAngle a)
void parameters(double E_cms)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol