1#include "GaudiKernel/MsgStream.h"
2#include "GaudiKernel/AlgFactory.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include "GaudiKernel/IDataProviderSvc.h"
6#include "GaudiKernel/PropertyMgr.h"
8#include "GaudiKernel/Bootstrap.h"
9#include "GaudiKernel/ISvcLocator.h"
22#include "GaudiKernel/INTupleSvc.h"
23#include "GaudiKernel/NTuple.h"
24#include "GaudiKernel/Bootstrap.h"
25#include "GaudiKernel/IHistogramSvc.h"
26#include "CLHEP/Vector/ThreeVector.h"
27#include "CLHEP/Vector/LorentzVector.h"
28#include "CLHEP/Vector/TwoVector.h"
29using CLHEP::Hep3Vector;
30using CLHEP::Hep2Vector;
31using CLHEP::HepLorentzVector;
32#include "CLHEP/Geometry/Point3D.h"
33#ifndef ENABLE_BACKWARDS_COMPATIBILITY
44typedef std::vector<int>
Vint;
45typedef std::vector<HepLorentzVector>
Vp4;
47const double velc = 299.792458;
50 0.000511, 0.105658, 0.139570, 0.493677, 0.938272
52const double pai=3.1415926;
55 Algorithm(name, pSvcLocator)
62 MsgStream log(
msgSvc(), name());
64 log << MSG::INFO <<
"in initialize()" << endmsg;
68 status = service(
"InjSigIntervalSvc", m_intervalSvc);
69 if ( status != StatusCode::SUCCESS ){
70 log << MSG::FATAL <<
"can not use InjSigIntervalSvc" << endreq;
73 NTuplePtr nt2(
ntupleSvc(),
"LumTau/event");
74 if ( nt2 ) m_tuple2 = nt2;
77 m_tuple2 =
ntupleSvc()->book (
"LumTau/event", CLID_ColumnWiseTuple,
"Bhabha N-Tuple signal");
80 status = m_tuple2->addItem (
"topup", m_topup);
81 status = m_tuple2->addItem (
"run", m_run);
82 status = m_tuple2->addItem (
"rec", m_rec);
83 status = m_tuple2->addItem (
"time", m_time);
84 status = m_tuple2->addItem (
"etot", m_etot);
85 status = m_tuple2->addItem (
"e1", m_e1);
86 status = m_tuple2->addItem (
"e2", m_e2);
87 status = m_tuple2->addItem (
"costht1", m_costht1);
88 status = m_tuple2->addItem (
"costht2", m_costht2);
89 status = m_tuple2->addItem (
"dltphi", m_dltphi);
90 status = m_tuple2->addItem (
"dlttht", m_dlttht);
91 status = m_tuple2->addItem (
"phi1", m_phi1);
92 status = m_tuple2->addItem (
"phi2", m_phi2);
96 log << MSG::ERROR <<
"Cannot book N-tuple2:"<<long(m_tuple2)<<endmsg;
97 return StatusCode::FAILURE;
100 return StatusCode::SUCCESS;
105 StatusCode sc=StatusCode::SUCCESS;
107 MsgStream log(
msgSvc(),name());
108 log<<MSG::INFO<<
"in execute()"<<endreq;
110 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),
"/Event/EventHeader");
113 log<<MSG::DEBUG<<
"ncharg, nneu, tottks = "<<evtRecEvent->totalCharged()<<
" , "<<evtRecEvent->totalNeutral()<<
" , "<<evtRecEvent->totalTracks()<<endreq;
116 log<<MSG::DEBUG <<
"ncharg, nneu, tottks = "<<evtRecEvent->totalCharged()<<
" , "<<evtRecEvent->totalNeutral()<<
" , "<<evtRecEvent->totalTracks()<<endreq;
117 SmartDataPtr<RecEsTimeCol> evTimeCol(eventSvc(),
"/Event/Recon/RecEsTimeCol");
120 log<<MSG::DEBUG <<
"interval = " << interval << endreq;
122 if ( interval < 100 ) {
126 double time = eventHeader->time();
127 log << MSG::DEBUG <<
"time = " << time << endreq;
130 m_run = eventHeader->runNumber();
131 m_rec = eventHeader->eventNumber();
133 if(m_rec%1000==0)cout<<
"Run "<<m_run<<
" Event "<<m_rec<<endl;
139 if((evtRecEvent->totalTracks() >= 2)){
141 for(
int i = 0;i < evtRecEvent->totalTracks(); i++)
143 if(i>=evtRecTrkCol->size())
break;
145 if(!(*itTrk)->isEmcShowerValid())
continue;
147 double Ener=emcTrk->
energy();
167 log << MSG::INFO <<
"Emax1 = " << Emax1 <<
"Emax2= "<<Emax2<< endreq;
168 if(Emax1 > 0 && Emax2 > 0){
169 double emcphi[2],emctht[2];
170 for(
int i = 0;i < 2; i++)
172 if(i>=evtRecTrkCol->size())
break;
174 if(!(*itTrk)->isEmcShowerValid())
continue;
176 emcphi[i]=emcTrk->
phi();
177 emctht[i]=emcTrk->
theta();
180 double dltphi=(fabs(emcphi[0]-emcphi[1])-
pai)*180./
pai;
181 double dlttht=(fabs(emctht[0]+emctht[1])-
pai)*180./
pai;
182 m_costht1=
cos(emctht[0]);
183 m_costht2=
cos(emctht[1]);
215 int DiskWrite = m_tuple2->write();
217 log<<MSG::FATAL<<
"ERROR In LumTau DiskWrite!"<<endreq;
221 return StatusCode::SUCCESS;
226 cout<<
"Event Finalize"<<endl;
227 return StatusCode::SUCCESS;
double cos(const BesAngle a)
EvtRecTrackCol::iterator EvtRecTrackIterator
HepGeom::Point3D< double > HepPoint3D
std::vector< HepLorentzVector > Vp4
virtual int getTInterval() const =0
LumTau(const std::string &name, ISvcLocator *pSvcLocator)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol