CalibEventSelect Class Reference

#include <CalibEventSelect.h>

List of all members.

Public Member Functions

 CalibEventSelect (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()
bool WhetherSector (double ph, double ph1, double ph2)
void readbeamEfromDb (int runNo, double &beamE)

Private Attributes

int m_BarrelOrEndcap
bool m_output
bool m_display
int m_run
double m_ecm
IHistogram1D * h_nGood
IHistogram1D * h_nCharge
IHistogram1D * h_pmaxobeam
IHistogram1D * h_eopmax
IHistogram1D * h_eopsec
IHistogram1D * h_deltap
IHistogram1D * h_esumoecm
IHistogram1D * h_egmax
IHistogram1D * h_deltaphi
IHistogram1D * h_Pt
bool m_isRadBhabha
bool m_isGGEE
bool m_isGG4Pi
bool m_isRadBhabhaT
bool m_isRhoPi
bool m_isKstarK
bool m_isPPPiPi
bool m_isRecoJpsi
bool m_isBhabha
bool m_isDimu
bool m_isCosmic
bool m_isGenProton
bool m_isPsipRhoPi
bool m_isPsipKstarK
bool m_isPsipPPPiPi
bool m_isPsippCand
bool m_printmonitor
bool m_selectRadBhabha
bool m_selectGGEE
bool m_selectGG4Pi
bool m_selectRadBhabhaT
bool m_selectRhoPi
bool m_selectKstarK
bool m_selectPPPiPi
bool m_selectRecoJpsi
bool m_selectBhabha
bool m_selectDimu
bool m_selectCosmic
bool m_selectGenProton
bool m_selectPsipRhoPi
bool m_selectPsipKstarK
bool m_selectPsipPPPiPi
bool m_selectPsippCand
bool m_writeDst
bool m_writeRec
double m_vr0cut
double m_vz0cut
double m_pt0HighCut
double m_pt0LowCut
double m_energyThreshold
double m_gammaPhiCut
double m_gammaThetaCut
long int m_events
int m_radbhabha_scale
int m_bhabha_scale
int m_dimu_scale
int m_cosmic_scale
int m_proton_scale
double m_cosmic_lowp
long int m_radBhabhaNumber
long int m_GGEENumber
long int m_GG4PiNumber
long int m_radBhabhaTNumber
long int m_rhoPiNumber
long int m_kstarKNumber
long int m_ppPiPiNumber
long int m_recoJpsiNumber
long int m_bhabhaNumber
long int m_dimuNumber
long int m_cosmicNumber
long int m_genProtonNumber
long int m_psipRhoPiNumber
long int m_psipKstarKNumber
long int m_psipPPPiPiNumber
long int m_psippCandNumber
Algorithmm_subalg1
Algorithmm_subalg2
Algorithmm_subalg3
Algorithmm_subalg4
Algorithmm_subalg5
Algorithmm_subalg6
Algorithmm_subalg7
Algorithmm_subalg8
Algorithmm_subalg9
Algorithmm_subalg10
Algorithmm_subalg11
Algorithmm_subalg12
Algorithmm_subalg13
Algorithmm_subalg14
Algorithmm_subalg15
Algorithmm_subalg16
Algorithmm_subalg17
Algorithmm_subalg18
NTuple::Tuple * m_tuple0
NTuple::Item< double > m_esum
NTuple::Item< double > m_eemc
NTuple::Item< double > m_etot
NTuple::Item< double > m_nGood
NTuple::Item< double > m_nCharge
NTuple::Item< double > m_nGam
NTuple::Item< double > m_ptot
NTuple::Item< double > m_pp
NTuple::Item< double > m_pm
NTuple::Item< long > m_runnb
NTuple::Item< long > m_evtnb
NTuple::Item< double > m_maxE
NTuple::Item< double > m_secE
NTuple::Item< double > m_dThe
NTuple::Item< double > m_dPhi
NTuple::Item< long > m_mdcHit1
NTuple::Item< long > m_mdcHit2
NTuple::Tuple * m_tuple1
NTuple::Item< double > m_vx0
NTuple::Item< double > m_vy0
NTuple::Item< double > m_vz0
NTuple::Item< double > m_vr0
NTuple::Item< double > m_theta0
NTuple::Item< double > m_p0
NTuple::Item< double > m_pt0
NTuple::Tuple * m_tuple2
NTuple::Item< double > m_dthe
NTuple::Item< double > m_dphi
NTuple::Item< double > m_dang
NTuple::Item< double > m_eraw

Static Private Attributes

static int idmax [43]


Detailed Description

Definition at line 17 of file CalibEventSelect.h.


Constructor & Destructor Documentation

CalibEventSelect::CalibEventSelect ( const std::string name,
ISvcLocator *  pSvcLocator 
)

Definition at line 121 of file CalibEventSelect.cxx.

References m_bhabha_scale, m_cosmic_lowp, m_cosmic_scale, m_dimu_scale, m_display, m_ecm, m_energyThreshold, m_gammaPhiCut, m_gammaThetaCut, m_output, m_printmonitor, m_proton_scale, m_pt0HighCut, m_pt0LowCut, m_radbhabha_scale, m_selectBhabha, m_selectCosmic, m_selectDimu, m_selectGenProton, m_selectGG4Pi, m_selectGGEE, m_selectKstarK, m_selectPPPiPi, m_selectPsipKstarK, m_selectPsippCand, m_selectPsipPPPiPi, m_selectPsipRhoPi, m_selectRadBhabha, m_selectRadBhabhaT, m_selectRecoJpsi, m_selectRhoPi, m_vr0cut, m_vz0cut, m_writeDst, and m_writeRec.

00121                                                                                    :  
00122    Algorithm(name, pSvcLocator) {
00123      //Declare the properties  
00124 
00125      declareProperty("Output",           m_output = false);
00126      declareProperty("Display",           m_display = false);
00127      declareProperty("PrintMonitor",     m_printmonitor=false);
00128      declareProperty("SelectRadBhabha",  m_selectRadBhabha=false);
00129      declareProperty("SelectGGEE",       m_selectGGEE=false);
00130      declareProperty("SelectGG4Pi",      m_selectGG4Pi=false);
00131      declareProperty("SelectRadBhabhaT", m_selectRadBhabhaT=false);
00132      declareProperty("SelectRhoPi",      m_selectRhoPi=false);
00133      declareProperty("SelectKstarK",     m_selectKstarK=false);
00134      declareProperty("SelectPPPiPi",     m_selectPPPiPi=false);
00135      declareProperty("SelectRecoJpsi",   m_selectRecoJpsi=false);
00136      declareProperty("SelectBhabha",     m_selectBhabha=false);
00137      declareProperty("SelectDimu",       m_selectDimu=false);
00138      declareProperty("SelectCosmic",     m_selectCosmic=false);
00139      declareProperty("SelectGenProton",  m_selectGenProton=false);
00140      declareProperty("SelectPsipRhoPi",  m_selectPsipRhoPi=false);
00141      declareProperty("SelectPsipKstarK", m_selectPsipKstarK=false);
00142      declareProperty("SelectPsipPPPiPi", m_selectPsipPPPiPi=false);
00143      declareProperty("SelectPsippCand",  m_selectPsippCand=false);
00144 
00145      declareProperty("BhabhaScale",     m_radbhabha_scale=1000);
00146      declareProperty("RadBhabhaScale",  m_bhabha_scale=1000);
00147      declareProperty("DimuScale",       m_dimu_scale=10);
00148      declareProperty("CosmicScale",     m_cosmic_scale=3);
00149      declareProperty("ProtonScale",     m_proton_scale=100);
00150 
00151      declareProperty("CosmicLowp",      m_cosmic_lowp=1.0);
00152    
00153      declareProperty("WriteDst",         m_writeDst=false);
00154      declareProperty("WriteRec",         m_writeRec=false);
00155      declareProperty("Ecm",              m_ecm=3.1);
00156      declareProperty("Vr0cut",           m_vr0cut=1.0);
00157      declareProperty("Vz0cut",           m_vz0cut=10.0);
00158      declareProperty("Pt0HighCut",       m_pt0HighCut=5.0);
00159      declareProperty("Pt0LowCut",        m_pt0LowCut=0.05);
00160      declareProperty("EnergyThreshold",  m_energyThreshold=0.05);
00161      declareProperty("GammaPhiCut",      m_gammaPhiCut=20.0);
00162      declareProperty("GammaThetaCut",    m_gammaThetaCut=20.0);
00163 
00164 
00165  }


Member Function Documentation

StatusCode CalibEventSelect::execute (  ) 

Definition at line 484 of file CalibEventSelect.cxx.

References VFHelix::a(), KinematicFit::AddFourMomentum(), TrackPool::AddTrack(), DstMdcKalTrack::charge(), KinematicFit::chisq(), cos(), Bes_Common::DEBUG, ecms, DstMdcKalTrack::electron, DstEmcShower::energy(), EventModel::EvtRec::EvtRecDTagCol, EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, Bes_Common::FATAL, KinematicFit::Fit(), RecMdcKalTrack::getZError(), RecMdcKalTrack::getZErrorK(), RecMdcKalTrack::getZHelix(), RecMdcKalTrack::getZHelixK(), h_deltap, h_deltaphi, h_egmax, h_eopmax, h_eopsec, h_esumoecm, h_nCharge, h_nGood, h_pmaxobeam, h_Pt, genRecEmupikp::i, Bes_Common::INFO, KinematicFit::init(), KinematicFit::instance(), IVertexDbSvc::isVertexValid(), iter(), EvtRecDTag::kD0toKPiPi0, EvtRecDTag::kD0toKPiPi0Pi0, EvtRecDTag::kD0toKPiPiPi, EvtRecDTag::kD0toKPiPiPiPi0, EvtRecDTag::kD0toKsPiPi, EvtRecDTag::kD0toKsPiPiPi0, EvtRecDTag::kDptoKPiPi, EvtRecDTag::kDptoKPiPiPi0, EvtRecDTag::kDptoKsPiPi0, EvtRecDTag::kDptoKsPiPiPi, m_bhabha_scale, m_bhabhaNumber, m_cosmic_lowp, m_cosmicNumber, m_dimu_scale, m_dimuNumber, m_display, m_ecm, m_events, m_genProtonNumber, m_GG4PiNumber, m_GGEENumber, m_isBhabha, m_isCosmic, m_isDimu, m_isGenProton, m_isGG4Pi, m_isGGEE, m_isKstarK, m_isPPPiPi, m_isPsipKstarK, m_isPsippCand, m_isPsipPPPiPi, m_isPsipRhoPi, m_isRadBhabha, m_isRadBhabhaT, m_isRecoJpsi, m_isRhoPi, m_kstarKNumber, m_output, m_p0, m_ppPiPiNumber, m_printmonitor, m_proton_scale, m_psipKstarKNumber, m_psippCandNumber, m_psipPPPiPiNumber, m_psipRhoPiNumber, m_pt0, m_pt0HighCut, m_pt0LowCut, m_radBhabhaNumber, m_radBhabhaTNumber, m_rhoPiNumber, m_run, m_selectBhabha, m_selectCosmic, m_selectDimu, m_selectGenProton, m_selectGG4Pi, m_selectGGEE, m_selectKstarK, m_selectPPPiPi, m_selectPsipKstarK, m_selectPsippCand, m_selectPsipPPPiPi, m_selectPsipRhoPi, m_selectRadBhabha, m_selectRadBhabhaT, m_selectRecoJpsi, m_selectRhoPi, m_subalg1, m_subalg10, m_subalg11, m_subalg12, m_subalg13, m_subalg14, m_subalg15, m_subalg16, m_subalg17, m_subalg18, m_subalg2, m_subalg3, m_subalg4, m_subalg5, m_subalg6, m_subalg7, m_subalg8, m_subalg9, m_theta0, m_tuple1, m_vr0, m_vr0cut, m_vx0, m_vy0, m_vz0, m_vz0cut, m_writeDst, m_writeRec, mkaon, mpi, mpi0, mproton, msgSvc(), P(), DstEmcShower::phi(), Phi(), pi, DstMdcKalTrack::pion, VFHelix::pivot(), IVertexDbSvc::PrimaryVertex(), DstMdcKalTrack::proton, Px(), Py(), Pz(), DstMdcKalTrack::r(), readbeamEfromDb(), DstMdcKalTrack::setPidType(), IVertexDbSvc::SigmaPrimaryVertex(), sin(), DstEmcShower::theta(), DstMdcKalTrack::theta(), theta0, DstEmcShower::time(), type, DstMdcKalTrack::x(), DstMdcKalTrack::y(), and DstMdcKalTrack::z().

00484                                       {
00485 
00486    //setFilterPassed(false);
00487 
00488    MsgStream log(msgSvc(), name());
00489    log << MSG::INFO << "in execute()" << endreq;
00490 
00491    if( m_writeDst) m_subalg1->execute();
00492    if( m_writeRec) m_subalg2->execute();
00493 
00494 
00495    m_isRadBhabha       = false; 
00496    m_isGGEE            = false; 
00497    m_isGG4Pi           = false; 
00498    m_isRadBhabhaT      = false; 
00499    m_isRhoPi           = false; 
00500    m_isKstarK          = false; 
00501    m_isRecoJpsi        = false; 
00502    m_isPPPiPi          = false; 
00503    m_isBhabha          = false; 
00504    m_isDimu            = false; 
00505    m_isCosmic          = false; 
00506    m_isGenProton       = false; 
00507    m_isPsipRhoPi       = false; 
00508    m_isPsipKstarK      = false; 
00509    m_isPsipPPPiPi      = false; 
00510    m_isPsippCand       = false; 
00511 
00512    SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00513    if(!eventHeader)
00514    {
00515      cout<<"  eventHeader  "<<endl;
00516      return StatusCode::FAILURE;
00517    }
00518 
00519    int run=eventHeader->runNumber();
00520    int event=eventHeader->eventNumber();
00521 
00522    //get run by run ebeam
00523    if(m_run !=run){
00524      m_run=run;
00525      double beamE=0;
00526      readbeamEfromDb(run,beamE);
00527      cout<<"new run is:"<<m_run<<endl;
00528      cout<<"beamE is:"<<beamE<<endl;
00529      if(beamE>0 && beamE<3)
00530        m_ecm=2*beamE;
00531    }
00532 
00533 
00534 
00535    if(m_display && m_events%1000==0){   
00536      cout<< m_events << "  --------  run,event:  "<<run<<","<<event<<endl;
00537      cout<<"m_ecm="<<m_ecm<<endl;
00538    }
00539    m_events++;
00540 
00541    SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00542    if(!evtRecEvent ) {
00543      cout<<"  evtRecEvent  "<<endl;
00544      return StatusCode::FAILURE;
00545    }
00546 
00547    log << MSG::DEBUG <<"ncharg, nneu, tottks = " 
00548      << evtRecEvent->totalCharged() << " , "
00549      << evtRecEvent->totalNeutral() << " , "
00550      << evtRecEvent->totalTracks() <<endreq;
00551    SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(),  EventModel::EvtRec::EvtRecTrackCol);
00552    if(!evtRecTrkCol){
00553      cout<<"  evtRecTrkCol  "<<endl;
00554      return StatusCode::FAILURE;
00555    }
00556 
00557    if(evtRecEvent->totalTracks()!=evtRecTrkCol->size()) return StatusCode::SUCCESS;
00558 
00559 
00560    //get pi0 reconstruction
00561    SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col");
00562    if ( ! recPi0Col ) {
00563      log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq;
00564      return StatusCode::FAILURE;
00565    }
00566 
00567 
00568    int nPi0 = recPi0Col->size(); 
00569    EvtRecPi0Col::iterator itpi0 = recPi0Col->begin();
00570    if(nPi0==1){
00571      double mpi0 =  (*itpi0)->unconMass();
00572      if ( fabs( mpi0 - 0.135 )> 0.015 )  
00573        nPi0=0;
00574    }
00575    
00576    /*
00577    int nPi0=0;
00578    for(EvtRecPi0Col::iterator it=itpi0; it!= recPi0Col->end(); it++){
00579      double mpi0 =  (*itpi0)->unconMass();
00580      if ( fabs( mpi0 - 0.135 )<= 0.015 )  
00581        nPi0++;
00582    }
00583    */
00584 
00585 
00586    // -------- Good Charged Track Selection
00587    Vint iGood;
00588    iGood.clear();
00589    vector<int> iCP, iCN;
00590    iCP.clear();
00591    iCN.clear();
00592 
00593    Vint iCosmicGood;
00594    iCosmicGood.clear();
00595 
00596    int nCharge = 0;
00597    int nCosmicCharge =0;
00598 
00599    for(int i = 0;i < evtRecEvent->totalCharged(); i++)
00600    {     
00601      //if(i>=evtRecTrkCol->size()) break;
00602      EvtRecTrackIterator  itTrk=evtRecTrkCol->begin() + i;
00603 
00604      //if(!(*itTrk)->isMdcTrackValid()) continue;
00605      //RecMdcTrack *mdcTrk =(*itTrk)->mdcTrack();
00606      if(!(*itTrk)->isMdcKalTrackValid()) continue;
00607      RecMdcKalTrack *mdcTrk = (*itTrk)->mdcKalTrack();
00608      //  mdcTrk->setPidType(RecMdcKalTrack::electron);
00609 
00610 
00611      double vx0 = mdcTrk->x();
00612      double vy0 = mdcTrk->y();
00613      double vz0 = mdcTrk->z();
00614      double vr0 = mdcTrk->r();
00615      double theta0 = mdcTrk->theta();
00616      double p0 = P(mdcTrk);
00617      double pt0 = sqrt( pow(Px(mdcTrk),2)+pow(Py(mdcTrk),2));
00618      
00619      
00620      if(m_output) {
00621       m_vx0 = vx0;
00622       m_vy0 = vy0;
00623       m_vz0 = vz0;
00624       m_vr0 = vr0;
00625       m_theta0 = theta0;
00626       m_p0 = p0;
00627       m_pt0 = pt0;
00628       m_tuple1->write();
00629     }
00630 
00631     //db 
00632     
00633     Hep3Vector xorigin(0,0,0);
00634     IVertexDbSvc*  vtxsvc;
00635     Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc);
00636     if(vtxsvc->isVertexValid()){
00637       double* dbv = vtxsvc->PrimaryVertex();
00638       double*  vv = vtxsvc->SigmaPrimaryVertex();
00639       xorigin.setX(dbv[0]);
00640       xorigin.setY(dbv[1]);
00641       xorigin.setZ(dbv[2]);
00642     }
00643     HepVector a = mdcTrk->getZHelix();
00644     HepSymMatrix Ea = mdcTrk->getZError();
00645     HepPoint3D point0(0.,0.,0.);   // the initial point for MDC recosntruction
00646     HepPoint3D IP(xorigin[0],xorigin[1],xorigin[2]);
00647     VFHelix helixip(point0,a,Ea);
00648     helixip.pivot(IP);
00649     HepVector vecipa = helixip.a();
00650     double db=fabs(vecipa[0]);
00651     double dz=vecipa[3];
00652 
00653 
00654 
00655 
00656     if(fabs(dz) >= m_vz0cut) continue;
00657     if(db >= m_vr0cut) continue;
00658     
00659     //cosmic tracks
00660     if(p0>m_cosmic_lowp && p0<20){
00661       iCosmicGood.push_back((*itTrk)->trackId());
00662       nCosmicCharge += mdcTrk->charge();
00663     }
00664       
00665     
00666 
00667     if(pt0 >= m_pt0HighCut) continue;
00668     if(pt0 <= m_pt0LowCut) continue;
00669 
00670     iGood.push_back((*itTrk)->trackId());
00671     nCharge += mdcTrk->charge();
00672     if(mdcTrk->charge()>0)
00673       iCP.push_back((*itTrk)->trackId());
00674     else if(mdcTrk->charge()<0)
00675       iCN.push_back((*itTrk)->trackId());
00676     
00677 
00678   }
00679   int nGood = iGood.size();
00680   int nCosmicGood = iCosmicGood.size();
00681   
00682   // -------- Good Photon Selection
00683   Vint iGam;
00684   iGam.clear();
00685   for(int i = evtRecEvent->totalCharged(); i< evtRecEvent->totalTracks(); i++) {
00686     //if(i>=evtRecTrkCol->size()) break;
00687     EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
00688     if(!(*itTrk)->isEmcShowerValid()) continue;
00689     RecEmcShower *emcTrk = (*itTrk)->emcShower();
00690     double eraw = emcTrk->energy();
00691     double time = emcTrk->time();
00692     double costh = cos(emcTrk->theta());
00693     if(fabs(costh)<0.83 && eraw<0.025)  continue;
00694     if(fabs(costh)>=0.83 && eraw<0.05)  continue;
00695     if(time<0 || time>14) continue;
00696 
00697     iGam.push_back((*itTrk)->trackId());
00698   }
00699   int nGam = iGam.size();
00700 
00701   // -------- Assign 4-momentum to each charged track
00702   Vint ipip, ipim;
00703   ipip.clear();
00704   ipim.clear();
00705   Vp4 ppip, ppim;
00706   ppip.clear();
00707   ppim.clear();
00708 
00709   //cout<<"charged track:"<<endl;
00710   double echarge = 0.;  //total energy of charged track
00711   double ptot = 0.; //total momentum of charged track
00712   double etot = 0.; //total energy in MDC and EMC
00713   double eemc = 0.; //total energy in EMC
00714   double pp = 0.;
00715   double pm = 0.;
00716   double pmax=0.0;
00717   double psec=0.0;
00718   double eccmax=0.0;
00719   double eccsec=0.0;
00720   double phimax=0.0;
00721   double phisec=0.0;
00722   double eopmax=0.0;
00723   double eopsec=0.0;
00724   Hep3Vector Pt_charge(0,0,0);
00725   
00726   for(int i = 0; i < nGood; i++) {
00727     EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i]; 
00728 
00729     double p3=0;
00730     //if((*itTrk)->isMdcTrackValid()) { 
00731     //RecMdcTrack* mdcTrk = (*itTrk)->mdcTrack();
00732     
00733     if((*itTrk)->isMdcKalTrackValid()) { 
00734       RecMdcKalTrack *mdcTrk = (*itTrk)->mdcKalTrack();
00735       mdcTrk->setPidType(RecMdcKalTrack::electron);
00736     
00737       ptot += P(mdcTrk);
00738 
00739       //double phi= mdcTrk->phi();
00740       double phi= Phi(mdcTrk);
00741 
00742       
00743       HepLorentzVector ptrk;
00744       ptrk.setPx(Px(mdcTrk));
00745       ptrk.setPy(Py(mdcTrk));
00746       ptrk.setPz(Pz(mdcTrk));
00747       p3 = fabs(ptrk.mag());
00748       
00749      
00750       
00751       //cout<<"p3 before compa="<<p3<<endl;
00752       //cout<<"pmax before compa ="<<pmax<<endl;
00753       //cout<<"psec before compa ="<<psec<<endl;
00754 
00755       Hep3Vector ptemp(Px(mdcTrk),Py(mdcTrk),0);
00756       Pt_charge+=ptemp;
00757       
00758       double ecc=0.0;
00759       if((*itTrk)->isEmcShowerValid()) {
00760         RecEmcShower* emcTrk = (*itTrk)->emcShower();
00761         ecc = emcTrk->energy();
00762       }
00763       
00764       if( p3 > pmax){
00765         psec=pmax;
00766         eccsec=eccmax;
00767         phisec=phimax;
00768         pmax=p3;
00769         eccmax=ecc;
00770         phimax=phi;
00771       }
00772       else if( p3 < pmax && p3> psec){
00773         psec=p3;
00774         eccsec=ecc;
00775         phisec=phi;
00776       }
00777       
00778       // cout<<"p3 after compa="<<p3<<endl;
00779       // cout<<"pmax after compa ="<<pmax<<endl;
00780       //cout<<"psec after compa ="<<psec<<endl;
00781       
00782       ptrk.setE(sqrt(p3*p3+mpi*mpi));
00783       ptrk = ptrk.boost(-0.011,0,0);//boost to cms
00784 
00785       
00786       echarge += ptrk.e();
00787       etot += ptrk.e();
00788 
00789       if(mdcTrk->charge() >0) {
00790         ppip.push_back(ptrk);
00791         pp = ptrk.rho();
00792       } else {
00793         ppim.push_back(ptrk);
00794         pm = ptrk.rho();
00795       }
00796 
00797     } 
00798     
00799     if((*itTrk)->isEmcShowerValid()) {
00800 
00801       RecEmcShower* emcTrk = (*itTrk)->emcShower();
00802       double eraw = emcTrk->energy();
00803       double phiemc = emcTrk->phi();
00804       double the = emcTrk->theta();
00805 
00806       HepLorentzVector pemc;
00807       pemc.setPx(eraw*sin(the)*cos(phiemc));
00808       pemc.setPy(eraw*sin(the)*sin(phiemc));
00809       pemc.setPz(eraw*cos(the));
00810       pemc.setE(eraw);
00811       pemc = pemc.boost(-0.011,0,0);// boost to cms
00812 
00813       // eemc += eraw;
00814       etot += pemc.e();
00815 
00816     }
00817     
00818     
00819 
00820 
00821   } //end of looping over good charged track
00822 
00823   if(pmax!=0)  eopmax=eccmax/pmax;
00824   if(psec!=0)  eopsec=eccsec/psec;
00825 
00826   eemc=eccmax+eccsec;
00827   
00828   /*
00829   if(nGood>1){
00830     cout<<"pmax="<<pmax<<endl;
00831     cout<<"psec="<<psec<<endl;
00832     cout<<"eopmax="<<eopmax<<endl;
00833     cout<<"dphi-180="<< (fabs(phimax-phisec)-CLHEP::pi)*180/CLHEP::pi <<endl;
00834   }
00835   */
00836 
00837   // -------- Assign 4-momentum to each photon
00838   //cout<<"neutral:"<<endl;
00839   Vp4 pGam;
00840   pGam.clear();
00841   double eneu=0;  //total energy of neutral track
00842   double egmax=0;
00843   Hep3Vector Pt_neu(0,0,0);
00844   
00845   for(int i = 0; i < nGam; i++) {
00846     EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGam[i]; 
00847     RecEmcShower* emcTrk = (*itTrk)->emcShower();
00848     double eraw = emcTrk->energy();
00849     double phi = emcTrk->phi();
00850     double the = emcTrk->theta();
00851     HepLorentzVector ptrk;
00852     ptrk.setPx(eraw*sin(the)*cos(phi));
00853     ptrk.setPy(eraw*sin(the)*sin(phi));
00854     ptrk.setPz(eraw*cos(the));
00855     ptrk.setE(eraw);
00856     ptrk = ptrk.boost(-0.011,0,0);// boost to cms
00857     pGam.push_back(ptrk);
00858     eneu += ptrk.e();
00859     etot += ptrk.e();
00860     eemc += eraw;
00861   
00862     Hep3Vector ptemp(eraw*sin(the)*cos(phi), eraw*sin(the)*sin(phi),0);
00863     Pt_neu+=ptemp;
00864 
00865     if(ptrk.e()>egmax)
00866       egmax=ptrk.e();
00867     
00868   }
00869 
00870   double esum = echarge + eneu;
00871   Hep3Vector Pt=Pt_charge+Pt_neu;
00872   
00873 
00874   double phid=phimax-phisec;
00875   phid = fmod(phid+CLHEP::twopi+CLHEP::twopi+pi, CLHEP::twopi) - CLHEP::pi;  
00876   
00877   // -------- Select each event
00878   
00879  
00880   //select bhabha/dimu/cosmic events, need prescale
00881 
00882   if( nGood == 2 && nCharge==0 && (m_selectBhabha || m_selectDimu) ){
00883     
00884     //bhabha
00885     if( m_events%m_bhabha_scale == 0 && m_selectBhabha && echarge/m_ecm>0.8 && eopmax>0.8 && eopsec>0.8){
00886       m_isBhabha=true;
00887       m_bhabhaNumber++;
00888     }
00889 
00890 
00891     //dimu 
00892     if( m_events%m_dimu_scale == 0 && m_selectDimu && eemc/m_ecm<0.3){
00893       
00894       EvtRecTrackIterator itp = evtRecTrkCol->begin() + iCP[0];
00895       EvtRecTrackIterator itn = evtRecTrkCol->begin() + iCN[0];
00896       
00897       double time1=-99,depth1=-99;
00898       double time2=-99,depth2=-99;
00899       if( (*itp)->isTofTrackValid() ){
00900         SmartRefVector<RecTofTrack> tofTrkCol= (*itp)->tofTrack();
00901         SmartRefVector<RecTofTrack>::iterator iter_tof=tofTrkCol.begin();
00902 
00903         for(;iter_tof!=tofTrkCol.end();iter_tof++){
00904           TofHitStatus* status =new TofHitStatus;
00905           status->setStatus( (*iter_tof)->status() );
00906           if(status->is_cluster()){
00907             time1=(*iter_tof)->tof();
00908           }
00909           delete status;
00910         }
00911       }
00912 
00913       if(  (*itp)->isMucTrackValid() ){
00914         RecMucTrack* mucTrk=(*itp)->mucTrack();
00915         depth1=mucTrk->depth();
00916       }
00917 
00918       if( (*itn)->isTofTrackValid() ){
00919         SmartRefVector<RecTofTrack> tofTrkCol= (*itn)->tofTrack();
00920         SmartRefVector<RecTofTrack>::iterator iter_tof=tofTrkCol.begin();
00921 
00922         for(;iter_tof!=tofTrkCol.end();iter_tof++){
00923           TofHitStatus* status =new TofHitStatus;
00924           status->setStatus( (*iter_tof)->status() );
00925           if(status->is_cluster()){
00926             time2=(*iter_tof)->tof();
00927           }
00928           delete status;
00929         }
00930       }
00931       
00932       if(  (*itn)->isMucTrackValid() ){
00933         RecMucTrack* mucTrk=(*itn)->mucTrack();
00934         depth2=mucTrk->depth();
00935       }
00936 
00937       
00938       //dimu
00939       //if( m_selectDimu && time1!=-99 && time2!=-99 && fabs(time1-time2)<5 && depth1>5 && depth2>5){  //tight, no endcap
00940       // if( eopmax<0.3 && eopsec<0.3 && fabs( fabs(phid)-CLHEP::pi)*180.0/CLHEP::pi<6 && fabs(psec)>m_ecm/4.0 ){  //tight, no rad dimu
00941       // if( eemc<0.3*m_ecm && (fabs(pmax)>0.45*m_ecm || fabs(psec)>0.45*m_ecm) ){
00942       if( ((fabs(pmax)/0.5/m_ecm>0.15 && fabs(pmax)/0.5/m_ecm<.75) || (fabs(psec)/0.5/m_ecm>0.15 && fabs(psec)/0.5/m_ecm<.75)) && (eopmax<0.4 || eopsec<0.4)
00943           && (depth1>=3 || depth2>=3)){
00944         m_isDimu=true;
00945         m_dimuNumber++;
00946       }         
00947     }//end of dimu
00948     
00949 
00950     
00951   }//end of bhabha, dimu 
00952 
00953 
00954   
00955   if(m_selectCosmic && nCosmicGood == 2 && eemc/m_ecm<0.3){
00956     
00957     EvtRecTrackIterator itp = evtRecTrkCol->begin() + iCosmicGood[0];
00958     EvtRecTrackIterator itn = evtRecTrkCol->begin() + iCosmicGood[1];
00959     
00960     double time1=-99,depth1=-99;
00961     double time2=-99,depth2=-99;
00962     if( (*itp)->isTofTrackValid() ){
00963       SmartRefVector<RecTofTrack> tofTrkCol= (*itp)->tofTrack();
00964       SmartRefVector<RecTofTrack>::iterator iter_tof=tofTrkCol.begin();
00965       
00966       for(;iter_tof!=tofTrkCol.end();iter_tof++){
00967           TofHitStatus* status =new TofHitStatus;
00968           status->setStatus( (*iter_tof)->status() );
00969           if(status->is_cluster()){
00970             time1=(*iter_tof)->tof();
00971           }
00972           delete status;
00973       }
00974     }
00975     
00976     if(  (*itp)->isMucTrackValid() ){
00977       RecMucTrack* mucTrk=(*itp)->mucTrack();
00978       depth1=mucTrk->depth();
00979     }
00980     
00981     if( (*itn)->isTofTrackValid() ){
00982       SmartRefVector<RecTofTrack> tofTrkCol= (*itn)->tofTrack();
00983       SmartRefVector<RecTofTrack>::iterator iter_tof=tofTrkCol.begin();
00984       
00985       for(;iter_tof!=tofTrkCol.end();iter_tof++){
00986         TofHitStatus* status =new TofHitStatus;
00987         status->setStatus( (*iter_tof)->status() );
00988         if(status->is_cluster()){
00989           time2=(*iter_tof)->tof();
00990         }
00991         delete status;
00992         }
00993     }
00994     
00995     if(  (*itn)->isMucTrackValid() ){
00996       RecMucTrack* mucTrk=(*itn)->mucTrack();
00997       depth2=mucTrk->depth();
00998     }
00999     
01000     //cosmic
01001     //if( m_selectCosmic && time1!=-99 && time2!=-99 && fabs(time1-time2)>5 && depth1>5 && depth2>5){
01002     if( m_selectCosmic && time1!=-99 && time2!=-99 && fabs(time1-time2)>5 ){
01003       m_isCosmic=true;
01004       m_cosmicNumber++;
01005     }           
01006     
01007       
01008   }//end of cosmic
01009     
01010 
01011   //select generic protons
01012   
01013   if(m_events%m_proton_scale ==0 ){
01014  
01015     bool protoncand=false;
01016     for(int i=0; i<nGood; i++){
01017       
01018       EvtRecTrackIterator iter = evtRecTrkCol->begin() + iGood[i];
01019       RecMdcKalTrack *mdcTrk = (*iter)->mdcKalTrack();
01020       mdcTrk->setPidType(RecMdcKalTrack::proton);
01021       
01022       double pp =  P(mdcTrk);
01023       double chiP=-99;
01024       if((*iter)->isMdcDedxValid()){
01025         RecMdcDedx* dedxTrk=(*iter)->mdcDedx();
01026         chiP=dedxTrk->chiP();
01027     }
01028        
01029       if( fabs(pp)<0.6 && fabs(chiP)<5){
01030         protoncand=true;
01031         break;
01032       }  
01033     }
01034     
01035     if( protoncand ){
01036       m_isGenProton=true;
01037       m_genProtonNumber++;
01038     }  
01039     
01040   }//end of generic proton
01041 
01042 
01043   //fill monitoring histograms for rad bhabha
01044   
01045   
01046   if(m_printmonitor){
01047     h_nGood->fill(nGood);
01048     h_nCharge->fill(nCharge);
01049     h_pmaxobeam->fill(pmax/(m_ecm/2.0));
01050     h_eopmax->fill(eopmax);
01051     h_eopsec->fill(eopsec);
01052     h_deltap->fill(pmax-psec);
01053     h_esumoecm->fill(esum/m_ecm);
01054     h_egmax->fill(egmax);
01055     h_deltaphi->fill(phid);
01056     h_Pt->fill(Pt.mag());
01057   }
01058 
01059   
01060 
01061    //select radbhabha
01062   if(nGood>1  && pmax/(m_ecm/2.0)>0.4 && eopmax>0.5 && esum/m_ecm>0.75 && 
01063     egmax>0.08 && fabs( fabs(phid)-CLHEP::pi)*180.0/CLHEP::pi>2.86 )
01064     {
01065       m_isRadBhabha=true;
01066       m_radBhabhaNumber++;
01067     }   
01068   //select radbhabha tight 
01069   if( m_isRadBhabha )
01070     {
01071       //prescale high momentum tracks
01072       if(nGood==2 && nCharge==0 && eemc/m_ecm>=0.7 && eopmax>=0.85 && eopmax<=1.15 && eopsec>=0.85 && eopsec<=1.15 ){
01073         
01074         if( fabs(fabs(pmax)-m_ecm/2.0)<0.1 && fabs(fabs(psec)-m_ecm/2.0)<0.1 ){
01075           if(m_events%1000==0){
01076             m_isRadBhabhaT=true;
01077             m_radBhabhaTNumber++;
01078           }
01079         }
01080         else{
01081           m_isRadBhabhaT=true;
01082           m_radBhabhaTNumber++;
01083         }
01084       
01085       }
01086       
01087 
01088       
01089     }   
01090 
01091   //select ggee events, (exclude radee tight)
01092   //if(!m_isRadBhabhaT && nGood==2 && nCharge==0 && eopmax>=0.85 && eopsec>=0.85 && eemc/m_ecm<=0.8 && Pt.mag()<=0.2)
01093   if(!m_isRadBhabhaT && nGood==2 && nCharge==0 && eopmax>=0.85 && eopmax<=1.15 && eopsec>=0.85 && eopsec<=1.15 && eemc/m_ecm<=0.8 && Pt.mag()<=0.2)
01094     {
01095       m_isGGEE=true;
01096       m_GGEENumber++;
01097     }
01098   
01099   //select gg4pi events
01100   if(m_selectGG4Pi && nGood==4 && nCharge==0 && pmax/(m_ecm/2.0)>0.04 && pmax/(m_ecm/2.0)<0.9 && esum/m_ecm>0.04 && esum/m_ecm<0.75 && Pt.mag()<=0.2)
01101     {
01102       m_isGG4Pi=true;
01103       m_GG4PiNumber++;
01104     }
01105  
01106   //select rhopi/kstark events
01107   if( (m_selectRhoPi || m_selectKstarK) && nGood == 2 && nCharge==0 && nPi0 == 1){
01108     
01109     EvtRecTrackIterator itone = evtRecTrkCol->begin() + iGood[0];
01110     EvtRecTrackIterator ittwo = evtRecTrkCol->begin() + iGood[1];
01111  
01112     
01113     if( (*itone)->isMdcKalTrackValid() && (*ittwo)->isMdcKalTrackValid() ) {
01114 
01115       RecMdcKalTrack *trk1 = (*itone)->mdcKalTrack();
01116       RecMdcKalTrack *trk2 = (*ittwo)->mdcKalTrack();
01117       
01118       HepLorentzVector p4trk1;
01119       p4trk1.setPx(Px(trk1));
01120       p4trk1.setPy(Py(trk1));
01121       p4trk1.setPz(Pz(trk1));
01122       p4trk1.setE(sqrt( pow(P(trk1),2)+ mkaon*mkaon) );
01123 
01124       HepLorentzVector p4trk2;
01125       p4trk2.setPx(Px(trk2));
01126       p4trk2.setPy(Py(trk2));
01127       p4trk2.setPz(Pz(trk2));
01128       p4trk2.setE(sqrt( pow(P(trk2),2)+ mkaon*mkaon) );
01129 
01130 
01131       HepLorentzVector p4trk3;
01132       p4trk3.setPx(Px(trk1));
01133       p4trk3.setPy(Py(trk1));
01134       p4trk3.setPz(Pz(trk1));
01135       p4trk3.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01136 
01137       HepLorentzVector p4trk4;
01138       p4trk4.setPx(Px(trk2));
01139       p4trk4.setPy(Py(trk2));
01140       p4trk4.setPz(Pz(trk2));
01141       p4trk4.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01142 
01143       
01144       //EvtRecPi0Col::iterator itpi0 = recPi0Col->begin();
01145       itpi0 = recPi0Col->begin();
01146       HepLorentzVector p4gam1 = (*itpi0)->hiPfit();
01147       HepLorentzVector p4gam2 = (*itpi0)->loPfit();
01148       HepLorentzVector p4pi0 = p4gam1+p4gam2;
01149 
01150       HepLorentzVector p4total = p4trk1 + p4trk2 + p4pi0; //kstark
01151       HepLorentzVector p4total2 = p4trk3 + p4trk4 + p4pi0; // rhopi
01152       
01153       double rhopimass=p4total2.m();
01154       double kstarkmass=p4total.m();
01155       if( (kstarkmass > 3.0 && kstarkmass < 3.15) || (rhopimass > 3.0 && rhopimass < 3.15) ){
01156         
01157         //tight cuts
01158           
01159         //remove bhabha background
01160         double eop1=0.0,eop2=0.0;
01161         if( (*itone)->isEmcShowerValid() ){
01162           RecEmcShower *emcTrk = (*itone)->emcShower();
01163           double etrk=emcTrk->energy();
01164           //cout<<"trk1 p="<<P(trk1)<<endl;
01165           if(P(trk1)!=0){
01166             eop1 = etrk/P(trk1);
01167             //if( fabs(eop1)> 0.8 ) return StatusCode::SUCCESS;
01168           }
01169         }
01170         
01171         if( (*ittwo)->isEmcShowerValid() ){
01172           RecEmcShower *emcTrk = (*ittwo)->emcShower();
01173           double etrk=emcTrk->energy();
01174           //cout<<"trk2 p="<<P(trk2)<<endl;
01175           if(P(trk2)!=0){
01176             eop2 = etrk/P(trk2);
01177             //if( fabs(eop2)> 0.8 ) return StatusCode::SUCCESS;
01178           }
01179         }
01180         
01181         if(eop1<0.8 && eop2<0.8){ 
01182         
01183           if(rhopimass>3.0 && rhopimass<3.15){
01184             //kinematic fit
01185             //HepLorentzVector ecms(0.034,0,0,3.097);
01186             HepLorentzVector ecms(0.034,0,0,m_ecm);
01187             
01188             
01189             WTrackParameter wvpiTrk1, wvpiTrk2;
01190             wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
01191             wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01192             
01193             const EvtRecTrack* gTrk1 = (*itpi0)->hiEnGamma();
01194             const EvtRecTrack* gTrk2 = (*itpi0)->loEnGamma();
01195             RecEmcShower *gShr1 = const_cast<EvtRecTrack*>(gTrk1)->emcShower();
01196             RecEmcShower *gShr2 = const_cast<EvtRecTrack*>(gTrk2)->emcShower();
01197             
01198             KinematicFit * kmfit = KinematicFit::instance();
01199             kmfit->init();
01200             kmfit->AddTrack(0, wvpiTrk1);
01201             kmfit->AddTrack(1, wvpiTrk2);
01202             kmfit->AddTrack(2, 0.0, gShr1);
01203             kmfit->AddTrack(3, 0.0, gShr2);
01204             kmfit->AddFourMomentum(0, ecms);
01205             
01206             bool oksq1 = kmfit->Fit();
01207             double chi1 = kmfit->chisq();
01208             
01209             //
01210             if(oksq1 && chi1<=60){
01211               m_isRhoPi = true;
01212               m_rhoPiNumber++;
01213             }
01214           } //end of selecting rhopi
01215 
01216 
01217           if(kstarkmass>3.0 && kstarkmass<3.15){
01218             
01219             //kstark resonances
01220             double mkstarp=0, mkstarm=0;
01221             if( trk1->charge() >0 ){
01222               HepLorentzVector p4kstarp =  p4trk1 + p4pi0;
01223               HepLorentzVector p4kstarm =  p4trk2 + p4pi0;
01224               mkstarp = p4kstarp.m();
01225               mkstarm = p4kstarm.m();
01226             }
01227             else{
01228               HepLorentzVector p4kstarm =  p4trk1 + p4pi0;
01229               HepLorentzVector p4kstarp =  p4trk2 + p4pi0;
01230               mkstarp = p4kstarp.m();
01231               mkstarm = p4kstarm.m();
01232             }
01233 
01234             if ( (fabs(mkstarp-0.89166)<0.1 && fabs(mkstarm-0.89166)>0.1) || (fabs(mkstarm-0.89166)<0.1 && fabs(mkstarp-0.89166)>0.1 ) ){
01235               //kinematic fit
01236               //HepLorentzVector ecms(0.034,0,0,3.097);
01237               HepLorentzVector ecms(0.034,0,0,m_ecm);
01238               
01239               WTrackParameter wvpiTrk1, wvpiTrk2;
01240               wvpiTrk1 = WTrackParameter(mkaon, trk1->getZHelix(), trk1->getZError());
01241               wvpiTrk2 = WTrackParameter(mkaon, trk2->getZHelix(), trk2->getZError());
01242 
01243               const EvtRecTrack* gTrk1 = (*itpi0)->hiEnGamma();
01244               const EvtRecTrack* gTrk2 = (*itpi0)->loEnGamma();
01245               RecEmcShower *gShr1 = const_cast<EvtRecTrack*>(gTrk1)->emcShower();
01246               RecEmcShower *gShr2 = const_cast<EvtRecTrack*>(gTrk2)->emcShower();
01247 
01248               KinematicFit * kmfit = KinematicFit::instance();
01249               kmfit->init();
01250               kmfit->AddTrack(0, wvpiTrk1);
01251               kmfit->AddTrack(1, wvpiTrk2);
01252               kmfit->AddTrack(2, 0.0, gShr1);
01253               kmfit->AddTrack(3, 0.0, gShr2);
01254               kmfit->AddFourMomentum(0, ecms);
01255 
01256               bool oksq1 = kmfit->Fit();
01257               double chi1 = kmfit->chisq();
01258               //
01259             
01260               if(oksq1 && chi1<=60){
01261                 m_isKstarK = true;
01262                 m_kstarKNumber++;
01263               }
01264               
01265             }
01266             
01267           } //end of selecting kstark
01268 
01269         }//end of non di-electron
01270         
01271         //end of tight cuts
01272         
01273       }
01274     } 
01275     
01276 
01277 
01278   } //end of selecting rhopi/kstark events
01279 
01280   //select ppPiPi events
01281   if(m_selectPPPiPi && nGood ==4 && nCharge == 0 && nPi0==0){
01282 
01283     EvtRecTrackIterator itone = evtRecTrkCol->begin() + iCP[0];
01284     EvtRecTrackIterator ittwo = evtRecTrkCol->begin() + iCP[1];
01285     EvtRecTrackIterator itthr = evtRecTrkCol->begin() + iCN[0];
01286     EvtRecTrackIterator itfor = evtRecTrkCol->begin() + iCN[1];
01287     RecMdcKalTrack *trk1 = (*itone)->mdcKalTrack();
01288     RecMdcKalTrack *trk2 = (*ittwo)->mdcKalTrack();
01289     RecMdcKalTrack *trk3 = (*itthr)->mdcKalTrack();
01290     RecMdcKalTrack *trk4 = (*itfor)->mdcKalTrack();
01291 
01292     HepLorentzVector p4trkpp;
01293     HepLorentzVector p4trkpm;
01294     HepLorentzVector p4trkpip;
01295     HepLorentzVector p4trkpim;
01296 
01297     //hypothesis 1
01298 
01299     trk1->setPidType(RecMdcKalTrack::proton);
01300     trk2->setPidType(RecMdcKalTrack::pion);
01301     trk3->setPidType(RecMdcKalTrack::proton);
01302     trk4->setPidType(RecMdcKalTrack::pion);
01303 
01304 
01305     p4trkpp.setPx(Px(trk1));
01306     p4trkpp.setPy(Py(trk1));
01307     p4trkpp.setPz(Pz(trk1));
01308     p4trkpp.setE(sqrt( pow(P(trk1),2)+ mproton*mproton) );
01309 
01310     p4trkpm.setPx(Px(trk3));
01311     p4trkpm.setPy(Py(trk3));
01312     p4trkpm.setPz(Pz(trk3));
01313     p4trkpm.setE(sqrt( pow(P(trk3),2)+ mproton*mproton) );
01314 
01315 
01316     p4trkpip.setPx(Px(trk2));
01317     p4trkpip.setPy(Py(trk2));
01318     p4trkpip.setPz(Pz(trk2));
01319     p4trkpip.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01320 
01321     p4trkpim.setPx(Px(trk4));
01322     p4trkpim.setPy(Py(trk4));
01323     p4trkpim.setPz(Pz(trk4));
01324     p4trkpim.setE(sqrt( pow(P(trk4),2)+ mpi*mpi) );
01325 
01326     double jpsimass1= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01327 
01328 
01329     //hypothesis 2
01330     
01331     trk1->setPidType(RecMdcKalTrack::proton);
01332     trk2->setPidType(RecMdcKalTrack::pion);
01333     trk3->setPidType(RecMdcKalTrack::pion);
01334     trk4->setPidType(RecMdcKalTrack::proton);
01335 
01336     
01337     p4trkpp.setPx(Px(trk1));
01338     p4trkpp.setPy(Py(trk1));
01339     p4trkpp.setPz(Pz(trk1));
01340     p4trkpp.setE(sqrt( pow(P(trk1),2)+ mproton*mproton) );
01341 
01342     p4trkpm.setPx(Px(trk4));
01343     p4trkpm.setPy(Py(trk4));
01344     p4trkpm.setPz(Pz(trk4));
01345     p4trkpm.setE(sqrt( pow(P(trk4),2)+ mproton*mproton) );
01346 
01347 
01348     p4trkpip.setPx(Px(trk2));
01349     p4trkpip.setPy(Py(trk2));
01350     p4trkpip.setPz(Pz(trk2));
01351     p4trkpip.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01352 
01353     p4trkpim.setPx(Px(trk3));
01354     p4trkpim.setPy(Py(trk3));
01355     p4trkpim.setPz(Pz(trk3));
01356     p4trkpim.setE(sqrt( pow(P(trk3),2)+ mpi*mpi) );
01357 
01358     double jpsimass2= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01359 
01360 
01361     //hypothesis 3
01362 
01363     trk1->setPidType(RecMdcKalTrack::pion);
01364     trk2->setPidType(RecMdcKalTrack::proton);
01365     trk3->setPidType(RecMdcKalTrack::proton);
01366     trk4->setPidType(RecMdcKalTrack::pion);
01367 
01368 
01369     p4trkpp.setPx(Px(trk2));
01370     p4trkpp.setPy(Py(trk2));
01371     p4trkpp.setPz(Pz(trk2));
01372     p4trkpp.setE(sqrt( pow(P(trk2),2)+ mproton*mproton) );
01373 
01374     p4trkpm.setPx(Px(trk3));
01375     p4trkpm.setPy(Py(trk3));
01376     p4trkpm.setPz(Pz(trk3));
01377     p4trkpm.setE(sqrt( pow(P(trk3),2)+ mproton*mproton) );
01378 
01379 
01380     p4trkpip.setPx(Px(trk1));
01381     p4trkpip.setPy(Py(trk1));
01382     p4trkpip.setPz(Pz(trk1));
01383     p4trkpip.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01384 
01385     p4trkpim.setPx(Px(trk4));
01386     p4trkpim.setPy(Py(trk4));
01387     p4trkpim.setPz(Pz(trk4));
01388     p4trkpim.setE(sqrt( pow(P(trk4),2)+ mpi*mpi) );
01389 
01390     double jpsimass3= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01391 
01392     
01393     //hypothesis 4
01394 
01395     trk1->setPidType(RecMdcKalTrack::pion);
01396     trk2->setPidType(RecMdcKalTrack::proton);
01397     trk3->setPidType(RecMdcKalTrack::pion);
01398     trk4->setPidType(RecMdcKalTrack::proton);
01399 
01400 
01401     p4trkpp.setPx(Px(trk2));
01402     p4trkpp.setPy(Py(trk2));
01403     p4trkpp.setPz(Pz(trk2));
01404     p4trkpp.setE(sqrt( pow(P(trk2),2)+ mproton*mproton) );
01405 
01406     p4trkpm.setPx(Px(trk4));
01407     p4trkpm.setPy(Py(trk4));
01408     p4trkpm.setPz(Pz(trk4));
01409     p4trkpm.setE(sqrt( pow(P(trk4),2)+ mproton*mproton) );
01410 
01411 
01412     p4trkpip.setPx(Px(trk1));
01413     p4trkpip.setPy(Py(trk1));
01414     p4trkpip.setPz(Pz(trk1));
01415     p4trkpip.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01416 
01417     p4trkpim.setPx(Px(trk3));
01418     p4trkpim.setPy(Py(trk3));
01419     p4trkpim.setPz(Pz(trk3));
01420     p4trkpim.setE(sqrt( pow(P(trk3),2)+ mpi*mpi) );
01421 
01422     double jpsimass4= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01423     
01424 
01425     
01426     
01427     if( fabs(jpsimass1-3.075)<=0.075 || fabs(jpsimass2-3.075)<=0.075 || 
01428         fabs(jpsimass3-3.075)<=0.075 || fabs(jpsimass4-3.075)<=0.075){
01429       
01430       //tight cuts
01431       
01432       //kinematic fits
01433       double chi1, chi2, chi3, chi4;
01434       int type=0;
01435       double chimin=-999;
01436       HepLorentzVector ecms(0.034,0,0,m_ecm);
01437       
01438       WTrackParameter wvpiTrk1, wvpiTrk2, wvpiTrk3, wvpiTrk4 ;
01439 
01440       {
01441         wvpiTrk1 = WTrackParameter(mproton, trk1->getZHelix(), trk1->getZError());
01442         wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01443         wvpiTrk3 = WTrackParameter(mproton, trk3->getZHelix(), trk3->getZError());
01444         wvpiTrk4 = WTrackParameter(mpi, trk4->getZHelix(), trk4->getZError());
01445 
01446 
01447         KinematicFit * kmfit = KinematicFit::instance();
01448         kmfit->init();
01449         kmfit->AddTrack(0, wvpiTrk1);
01450         kmfit->AddTrack(1, wvpiTrk2);
01451         kmfit->AddTrack(2, wvpiTrk3);
01452         kmfit->AddTrack(3, wvpiTrk4);
01453         kmfit->AddFourMomentum(0, ecms);
01454 
01455         bool oksq1 = kmfit->Fit();
01456         chi1 = kmfit->chisq();
01457         if(oksq1) {
01458           chimin=chi1;
01459           type=1;
01460         }
01461         //
01462       }
01463 
01464       
01465       {
01466         wvpiTrk1 = WTrackParameter(mproton, trk1->getZHelix(), trk1->getZError());
01467         wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01468         wvpiTrk3 = WTrackParameter(mpi, trk3->getZHelix(), trk3->getZError());
01469         wvpiTrk4 = WTrackParameter(mproton, trk4->getZHelix(), trk4->getZError());
01470 
01471 
01472         KinematicFit * kmfit = KinematicFit::instance();
01473         kmfit->init();
01474         kmfit->AddTrack(0, wvpiTrk1);
01475         kmfit->AddTrack(1, wvpiTrk2);
01476         kmfit->AddTrack(2, wvpiTrk3);
01477         kmfit->AddTrack(3, wvpiTrk4);
01478         kmfit->AddFourMomentum(0, ecms);
01479 
01480         bool oksq1 = kmfit->Fit();
01481         chi2 = kmfit->chisq();
01482         if(oksq1){
01483           if(type==0){
01484             chimin=chi2;
01485             type=2;
01486           }
01487           else if(chi2<chimin){
01488             chimin=chi2;
01489             type=2;
01490           }
01491         }
01492         //
01493       }
01494 
01495       {
01496         wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
01497         wvpiTrk2 = WTrackParameter(mproton, trk2->getZHelix(), trk2->getZError());
01498         wvpiTrk3 = WTrackParameter(mpi, trk3->getZHelix(), trk3->getZError());
01499         wvpiTrk4 = WTrackParameter(mproton, trk4->getZHelix(), trk4->getZError());
01500 
01501         KinematicFit * kmfit = KinematicFit::instance();
01502         kmfit->init();
01503         kmfit->AddTrack(0, wvpiTrk1);
01504         kmfit->AddTrack(1, wvpiTrk2);
01505         kmfit->AddTrack(2, wvpiTrk3);
01506         kmfit->AddTrack(3, wvpiTrk4);
01507 
01508         kmfit->AddFourMomentum(0, ecms);
01509 
01510         bool oksq1 = kmfit->Fit();
01511         chi3 = kmfit->chisq();
01512         if(oksq1){
01513           if(type==0){
01514             chimin=chi3;
01515             type=3;
01516           }
01517           else if(chi3<chimin){
01518             chimin=chi3;
01519             type=3;
01520           }
01521         }
01522         
01523         //
01524       }
01525 
01526 
01527       {
01528         wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
01529         wvpiTrk2 = WTrackParameter(mproton, trk2->getZHelix(), trk2->getZError());
01530         wvpiTrk3 = WTrackParameter(mproton, trk3->getZHelix(), trk3->getZError());
01531         wvpiTrk4 = WTrackParameter(mpi, trk4->getZHelix(), trk4->getZError());
01532 
01533         KinematicFit * kmfit = KinematicFit::instance();
01534         kmfit->init();
01535         kmfit->AddTrack(0, wvpiTrk1);
01536         kmfit->AddTrack(1, wvpiTrk2);
01537         kmfit->AddTrack(2, wvpiTrk3);
01538         kmfit->AddTrack(3, wvpiTrk4);
01539 
01540         kmfit->AddFourMomentum(0, ecms);
01541 
01542         bool oksq1 = kmfit->Fit();
01543         chi4 = kmfit->chisq();
01544         
01545         if(oksq1){
01546           if(type==0){
01547             chimin=chi4;
01548             type=4;
01549           }
01550           else if(chi4<chimin){
01551             chimin=chi4;
01552             type=4;
01553           }
01554         }
01555 
01556         //
01557       }
01558 
01559       if(type!=0 && chimin<100){
01560         m_isPPPiPi = true;
01561         m_ppPiPiNumber++;
01562       }
01563       
01564       //end of tight cuts
01565       
01566 
01567     } //end of loose cuts
01568 
01569   }//end of selecting pppipi
01570   
01571   //select recoil events
01572   //if( m_selectRecoJpsi && (nGood==4 || nGood==6) && nCharge==0 ){
01573   if( (m_selectPsipRhoPi || m_selectPsipKstarK || m_selectPsipPPPiPi) && (nGood==4 || nGood==6) && nCharge==0 ){
01574     EvtRecTrackIterator pione, pitwo;
01575     RecMdcKalTrack *pitrk1;
01576     RecMdcKalTrack *pitrk2;
01577 
01578     double bestmass=1.0;
01579     int pindex,nindex;
01580     vector<int> iJPsiP,iJPsiN;
01581     for(int ip=0; ip<iCP.size(); ip++){
01582       for(int in=0; in<iCN.size();in++){
01583         pione = evtRecTrkCol->begin() + iCP[ip];
01584         pitwo = evtRecTrkCol->begin() + iCN[in];
01585         pitrk1 = (*pione)->mdcKalTrack();
01586         pitrk2 = (*pitwo)->mdcKalTrack();
01587         Hep3Vector p1(Px(pitrk1), Py(pitrk1), Pz(pitrk1));
01588         Hep3Vector p2(Px(pitrk2), Py(pitrk2), Pz(pitrk2));
01589         double E1=sqrt( pow(P(pitrk1),2)+mpi*mpi);
01590         double E2=sqrt( pow(P(pitrk2),2)+mpi*mpi);
01591         double recomass = sqrt(pow(3.686-E1-E2,2)- (-(p1+p2)).mag2() );
01592         //if(fabs(recomass-3.686)< fabs(bestmass-3.686)){
01593         if(fabs(recomass-3.096)< fabs(bestmass-3.096)){
01594           bestmass=recomass;
01595           pindex=ip;
01596           nindex=in;
01597         }
01598       }
01599     }
01600 
01601 
01602     //soft pions
01603     pione = evtRecTrkCol->begin() + iCP[pindex];
01604     pitwo = evtRecTrkCol->begin() + iCN[nindex];
01605     pitrk1 = (*pione)->mdcKalTrack();
01606     pitrk2 = (*pitwo)->mdcKalTrack();
01607 
01608 
01609     //tracks from jpsi
01610     double jpsicharge=0;
01611     for(int ip=0; ip<iCP.size(); ip++){
01612       if(ip!=pindex){ 
01613         iJPsiP.push_back(iCP[ip]);
01614         EvtRecTrackIterator itertmp=evtRecTrkCol->begin() + iCP[ip];
01615         RecMdcKalTrack* trktmp=(*itertmp)->mdcKalTrack();
01616         jpsicharge+=trktmp->charge();
01617       }
01618     }
01619 
01620     for(int in=0; in<iCN.size(); in++){
01621       if(in!=nindex){ 
01622         iJPsiN.push_back(iCN[in]);
01623         EvtRecTrackIterator itertmp=evtRecTrkCol->begin() + iCN[in];
01624         RecMdcKalTrack* trktmp=(*itertmp)->mdcKalTrack();
01625         jpsicharge+=trktmp->charge();
01626       }
01627     }
01628     
01629     
01630     HepLorentzVector ecms(0.034,0,0,m_ecm);
01631 
01632     //jpsi to 2 charged track and 1 pi0
01633     if( (m_selectPsipRhoPi || m_selectPsipKstarK) && (bestmass>3.075 && bestmass<3.120) && nGood==4 && jpsicharge==0 && nPi0==1){
01634 
01635       EvtRecTrackIterator itone = evtRecTrkCol->begin() + iJPsiP[0];
01636       EvtRecTrackIterator ittwo = evtRecTrkCol->begin() + iJPsiN[0];
01637       
01638       
01639       if( (*itone)->isMdcKalTrackValid() && (*ittwo)->isMdcKalTrackValid() ) {
01640         
01641         RecMdcKalTrack *trk1 = (*itone)->mdcKalTrack();
01642         RecMdcKalTrack *trk2 = (*ittwo)->mdcKalTrack();
01643       
01644         HepLorentzVector p4trk1;
01645         p4trk1.setPx(Px(trk1));
01646         p4trk1.setPy(Py(trk1));
01647         p4trk1.setPz(Pz(trk1));
01648         p4trk1.setE(sqrt( pow(P(trk1),2)+ mkaon*mkaon) );
01649 
01650         HepLorentzVector p4trk2;
01651         p4trk2.setPx(Px(trk2));
01652         p4trk2.setPy(Py(trk2));
01653         p4trk2.setPz(Pz(trk2));
01654         p4trk2.setE(sqrt( pow(P(trk2),2)+ mkaon*mkaon) );
01655         
01656 
01657         HepLorentzVector p4trk3;
01658         p4trk3.setPx(Px(trk1));
01659         p4trk3.setPy(Py(trk1));
01660         p4trk3.setPz(Pz(trk1));
01661         p4trk3.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01662 
01663         HepLorentzVector p4trk4;
01664         p4trk4.setPx(Px(trk2));
01665         p4trk4.setPy(Py(trk2));
01666         p4trk4.setPz(Pz(trk2));
01667         p4trk4.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01668         
01669         
01670         EvtRecPi0Col::iterator itpi0 = recPi0Col->begin();
01671         const EvtRecTrack* gTrk1 = (*itpi0)->hiEnGamma();
01672         const EvtRecTrack* gTrk2 = (*itpi0)->loEnGamma();
01673         RecEmcShower *gShr1 = const_cast<EvtRecTrack*>(gTrk1)->emcShower();
01674         RecEmcShower *gShr2 = const_cast<EvtRecTrack*>(gTrk2)->emcShower();
01675         RecEmcShower *gShr3 = const_cast<EvtRecTrack*>(gTrk1)->emcShower();
01676         RecEmcShower *gShr4 = const_cast<EvtRecTrack*>(gTrk2)->emcShower();
01677 
01678 
01679         HepLorentzVector p4gam1 = (*itpi0)->hiPfit();
01680         HepLorentzVector p4gam2 = (*itpi0)->loPfit();
01681         HepLorentzVector p4pi0 = p4gam1 + p4gam2;
01682         HepLorentzVector p4total = p4trk1 + p4trk2 + p4pi0;
01683         HepLorentzVector p4total2 = p4trk3 + p4trk4 + p4pi0;
01684         
01685 
01686         HepLorentzVector p4kstarp =  p4trk1 + p4pi0;
01687         HepLorentzVector p4kstarm =  p4trk2 + p4pi0;
01688         double mkstarp = p4kstarp.m();
01689         double mkstarm = p4kstarm.m();
01690 
01691         if( (p4total.m() > 3.0 && p4total.m() < 3.15) || (p4total2.m() > 3.0 && p4total2.m() < 3.15) ){
01692           //m_isRecoJpsi = true;
01693           //m_recoJpsiNumber++;
01694         
01695           
01696           //tighten cuts for rhopi and kstark
01697         
01698           
01699           WTrackParameter wvpiTrk1, wvpiTrk2;
01700           wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
01701           wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01702           
01703           WTrackParameter wvkTrk1, wvkTrk2;
01704           wvkTrk1 = WTrackParameter(mkaon, trk1->getZHelixK(), trk1->getZErrorK());//kaon
01705           wvkTrk2 = WTrackParameter(mkaon, trk2->getZHelixK(), trk2->getZErrorK());//kaon
01706           
01707           //soft pions
01708           WTrackParameter wvpiTrk3, wvpiTrk4;
01709           wvpiTrk3 = WTrackParameter(mpi, pitrk1->getZHelix(), pitrk1->getZError());
01710           wvpiTrk4 = WTrackParameter(mpi, pitrk2->getZHelix(), pitrk2->getZError());
01711           
01712           if(m_selectPsipRhoPi){
01713             KinematicFit * kmfit = KinematicFit::instance();   
01714             kmfit->init();
01715             kmfit->AddTrack(0, wvpiTrk1);
01716             kmfit->AddTrack(1, wvpiTrk2);
01717             kmfit->AddTrack(2, 0.0, gShr1);
01718             kmfit->AddTrack(3, 0.0, gShr2);
01719             kmfit->AddTrack(4, wvpiTrk3);
01720             kmfit->AddTrack(5, wvpiTrk4);
01721             kmfit->AddFourMomentum(0, ecms);
01722             
01723             bool oksq1 = kmfit->Fit();
01724             double chi1 = kmfit->chisq();
01725             //
01726           
01727             if(oksq1 && chi1>0 && chi1<100){
01728               m_isPsipRhoPi = true;
01729               m_psipRhoPiNumber++;
01730             }
01731           }
01732           if(m_selectPsipKstarK){
01733             KinematicFit * kmfit2 = KinematicFit::instance();   
01734             kmfit2->init();
01735             kmfit2->AddTrack(0, wvkTrk1);
01736             kmfit2->AddTrack(1, wvkTrk2);
01737             kmfit2->AddTrack(2, 0.0, gShr3);
01738             kmfit2->AddTrack(3, 0.0, gShr4);
01739             kmfit2->AddTrack(4, wvpiTrk3);
01740             kmfit2->AddTrack(5, wvpiTrk4);
01741             kmfit2->AddFourMomentum(0, ecms);
01742             
01743             
01744             bool oksq2 = kmfit2->Fit();
01745             double chi2 = kmfit2->chisq();
01746             
01747             if(oksq2 && chi2>0 && chi2<200 && 
01748                ( (fabs(mkstarp-0.89166)<0.1 && fabs(mkstarm-0.89166)>0.1)
01749                  || (fabs(mkstarm-0.89166)<0.1 && fabs(mkstarp-0.89166)>0.1 ) )){
01750               m_isPsipKstarK = true;
01751               m_psipKstarKNumber++;
01752             }
01753             
01754           }
01755 
01756           
01757         }//end of loose cuts
01758         
01759       }
01760       
01761     } //recoil jpsi to 2tracks and 1 pi0
01762     
01763 
01764 
01765     //jpsi to pppipi
01766     if(m_selectPsipPPPiPi && (bestmass>3.075 && bestmass<3.120) && nGood==6 && jpsicharge==0 && nPi0==0){
01767 
01768       
01769       EvtRecTrackIterator itone = evtRecTrkCol->begin() + iJPsiP[0];
01770       EvtRecTrackIterator ittwo = evtRecTrkCol->begin() + iJPsiP[1];
01771       EvtRecTrackIterator itthr = evtRecTrkCol->begin() + iJPsiN[0];
01772       EvtRecTrackIterator itfor = evtRecTrkCol->begin() + iJPsiN[1];
01773       RecMdcKalTrack *trk1 = (*itone)->mdcKalTrack();
01774       RecMdcKalTrack *trk2 = (*ittwo)->mdcKalTrack();
01775       RecMdcKalTrack *trk3 = (*itthr)->mdcKalTrack();
01776       RecMdcKalTrack *trk4 = (*itfor)->mdcKalTrack();
01777       
01778       HepLorentzVector p4trkpp;
01779       HepLorentzVector p4trkpm;
01780       HepLorentzVector p4trkpip;
01781       HepLorentzVector p4trkpim;
01782       
01783       //hypothesis 1
01784 
01785       trk1->setPidType(RecMdcKalTrack::proton);
01786       trk2->setPidType(RecMdcKalTrack::pion);
01787       trk3->setPidType(RecMdcKalTrack::proton);
01788       trk4->setPidType(RecMdcKalTrack::pion);
01789       
01790       
01791       p4trkpp.setPx(Px(trk1));
01792       p4trkpp.setPy(Py(trk1));
01793       p4trkpp.setPz(Pz(trk1));
01794       p4trkpp.setE(sqrt( pow(P(trk1),2)+ mproton*mproton) );
01795       
01796       p4trkpm.setPx(Px(trk3));
01797       p4trkpm.setPy(Py(trk3));
01798       p4trkpm.setPz(Pz(trk3));
01799       p4trkpm.setE(sqrt( pow(P(trk3),2)+ mproton*mproton) );
01800       
01801       
01802       p4trkpip.setPx(Px(trk2));
01803       p4trkpip.setPy(Py(trk2));
01804       p4trkpip.setPz(Pz(trk2));
01805       p4trkpip.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01806 
01807       p4trkpim.setPx(Px(trk4));
01808       p4trkpim.setPy(Py(trk4));
01809       p4trkpim.setPz(Pz(trk4));
01810       p4trkpim.setE(sqrt( pow(P(trk4),2)+ mpi*mpi) );
01811       
01812       double jpsimass1= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01813       
01814       
01815       //hypothesis 2
01816       
01817       trk1->setPidType(RecMdcKalTrack::proton);
01818       trk2->setPidType(RecMdcKalTrack::pion);
01819       trk3->setPidType(RecMdcKalTrack::pion);
01820       trk4->setPidType(RecMdcKalTrack::proton);
01821       
01822       
01823       p4trkpp.setPx(Px(trk1));
01824       p4trkpp.setPy(Py(trk1));
01825       p4trkpp.setPz(Pz(trk1));
01826       p4trkpp.setE(sqrt( pow(P(trk1),2)+ mproton*mproton) );
01827       
01828       p4trkpm.setPx(Px(trk4));
01829       p4trkpm.setPy(Py(trk4));
01830       p4trkpm.setPz(Pz(trk4));
01831       p4trkpm.setE(sqrt( pow(P(trk4),2)+ mproton*mproton) );
01832 
01833       
01834       p4trkpip.setPx(Px(trk2));
01835       p4trkpip.setPy(Py(trk2));
01836       p4trkpip.setPz(Pz(trk2));
01837       p4trkpip.setE(sqrt( pow(P(trk2),2)+ mpi*mpi) );
01838       
01839       p4trkpim.setPx(Px(trk3));
01840       p4trkpim.setPy(Py(trk3));
01841       p4trkpim.setPz(Pz(trk3));
01842       p4trkpim.setE(sqrt( pow(P(trk3),2)+ mpi*mpi) );
01843       
01844       double jpsimass2= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01845       
01846       
01847       //hypothesis 3
01848       
01849       trk1->setPidType(RecMdcKalTrack::pion);
01850       trk2->setPidType(RecMdcKalTrack::proton);
01851       trk3->setPidType(RecMdcKalTrack::proton);
01852       trk4->setPidType(RecMdcKalTrack::pion);
01853       
01854       
01855       p4trkpp.setPx(Px(trk2));
01856       p4trkpp.setPy(Py(trk2));
01857       p4trkpp.setPz(Pz(trk2));
01858       p4trkpp.setE(sqrt( pow(P(trk2),2)+ mproton*mproton) );
01859       
01860       p4trkpm.setPx(Px(trk3));
01861       p4trkpm.setPy(Py(trk3));
01862       p4trkpm.setPz(Pz(trk3));
01863       p4trkpm.setE(sqrt( pow(P(trk3),2)+ mproton*mproton) );
01864       
01865       
01866       p4trkpip.setPx(Px(trk1));
01867       p4trkpip.setPy(Py(trk1));
01868       p4trkpip.setPz(Pz(trk1));
01869       p4trkpip.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01870       
01871       p4trkpim.setPx(Px(trk4));
01872       p4trkpim.setPy(Py(trk4));
01873       p4trkpim.setPz(Pz(trk4));
01874       p4trkpim.setE(sqrt( pow(P(trk4),2)+ mpi*mpi) );
01875       
01876       double jpsimass3= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01877       
01878       
01879       //hypothesis 4
01880       
01881       trk1->setPidType(RecMdcKalTrack::pion);
01882       trk2->setPidType(RecMdcKalTrack::proton);
01883       trk3->setPidType(RecMdcKalTrack::pion);
01884       trk4->setPidType(RecMdcKalTrack::proton);
01885       
01886       
01887       p4trkpp.setPx(Px(trk2));
01888       p4trkpp.setPy(Py(trk2));
01889       p4trkpp.setPz(Pz(trk2));
01890       p4trkpp.setE(sqrt( pow(P(trk2),2)+ mproton*mproton) );
01891       
01892       p4trkpm.setPx(Px(trk4));
01893       p4trkpm.setPy(Py(trk4));
01894       p4trkpm.setPz(Pz(trk4));
01895       p4trkpm.setE(sqrt( pow(P(trk4),2)+ mproton*mproton) );
01896       
01897       
01898       p4trkpip.setPx(Px(trk1));
01899       p4trkpip.setPy(Py(trk1));
01900       p4trkpip.setPz(Pz(trk1));
01901       p4trkpip.setE(sqrt( pow(P(trk1),2)+ mpi*mpi) );
01902 
01903       p4trkpim.setPx(Px(trk3));
01904       p4trkpim.setPy(Py(trk3));
01905       p4trkpim.setPz(Pz(trk3));
01906       p4trkpim.setE(sqrt( pow(P(trk3),2)+ mpi*mpi) );
01907       
01908       double jpsimass4= (p4trkpp+p4trkpm+p4trkpip+p4trkpim).m();
01909           
01910       if( fabs(jpsimass1-3.075)<=0.075 || fabs(jpsimass2-3.075)<=0.075 || 
01911           fabs(jpsimass3-3.075)<=0.075 || fabs(jpsimass4-3.075)<=0.075){
01912         
01913 
01914         //tighten cuts
01915         double chi1, chi2, chi3, chi4;
01916         int type=0;
01917         double chimin=-999;
01918         
01919         
01920         WTrackParameter wvpiTrk1, wvpiTrk2, wvpiTrk3, wvpiTrk4 , wvpiTrk5, wvpiTrk6 ;
01921         
01922         {
01923           wvpiTrk1 = WTrackParameter(mproton, trk1->getZHelix(), trk1->getZError());
01924           wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01925           wvpiTrk3 = WTrackParameter(mproton, trk3->getZHelix(), trk3->getZError());
01926           wvpiTrk4 = WTrackParameter(mpi, trk4->getZHelix(), trk4->getZError());
01927           wvpiTrk5 = WTrackParameter(mpi, pitrk1->getZHelix(), pitrk1->getZError());
01928           wvpiTrk6 = WTrackParameter(mpi, pitrk2->getZHelix(), pitrk2->getZError());
01929         
01930 
01931      
01932           KinematicFit * kmfit = KinematicFit::instance();   
01933           kmfit->init();
01934           kmfit->AddTrack(0, wvpiTrk1);
01935           kmfit->AddTrack(1, wvpiTrk2);
01936           kmfit->AddTrack(2, wvpiTrk3);
01937           kmfit->AddTrack(3, wvpiTrk4);
01938           kmfit->AddTrack(4, wvpiTrk5);
01939           kmfit->AddTrack(5, wvpiTrk6);
01940           kmfit->AddFourMomentum(0, ecms);
01941           
01942           bool oksq1 = kmfit->Fit();
01943           chi1 = kmfit->chisq();
01944           if(oksq1){
01945             chimin=chi1;
01946             type=1;
01947           }
01948           
01949         }
01950    
01951    
01952         {
01953           wvpiTrk1 = WTrackParameter(mproton, trk1->getZHelix(), trk1->getZError());
01954           wvpiTrk2 = WTrackParameter(mpi, trk2->getZHelix(), trk2->getZError());
01955           wvpiTrk3 = WTrackParameter(mpi, trk3->getZHelix(), trk3->getZError());
01956           wvpiTrk4 = WTrackParameter(mproton, trk4->getZHelix(), trk4->getZError());
01957           wvpiTrk5 = WTrackParameter(mpi, pitrk1->getZHelix(), pitrk1->getZError());
01958           wvpiTrk6 = WTrackParameter(mpi, pitrk2->getZHelix(), pitrk2->getZError());
01959      
01960 
01961 
01962           KinematicFit * kmfit = KinematicFit::instance();
01963           kmfit->init();
01964           kmfit->AddTrack(0, wvpiTrk1);
01965           kmfit->AddTrack(1, wvpiTrk2);
01966           kmfit->AddTrack(2, wvpiTrk3);
01967           kmfit->AddTrack(3, wvpiTrk4);
01968           kmfit->AddTrack(4, wvpiTrk5);
01969           kmfit->AddTrack(5, wvpiTrk6);
01970           kmfit->AddFourMomentum(0, ecms);
01971           
01972           bool oksq1 = kmfit->Fit();
01973           chi2 = kmfit->chisq();
01974           if(oksq1){
01975             if(type==0){
01976               chimin=chi2;
01977               type=2;
01978             }
01979             else if(chi2<chimin){
01980               chimin=chi2;
01981               type=2;
01982             }
01983 
01984           }
01985           //
01986         }
01987         
01988         {
01989           wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
01990           wvpiTrk2 = WTrackParameter(mproton, trk2->getZHelix(), trk2->getZError());
01991           wvpiTrk3 = WTrackParameter(mpi, trk3->getZHelix(), trk3->getZError());
01992           wvpiTrk4 = WTrackParameter(mproton, trk4->getZHelix(), trk4->getZError());
01993           wvpiTrk5 = WTrackParameter(mpi, pitrk1->getZHelix(), pitrk1->getZError());
01994           wvpiTrk6 = WTrackParameter(mpi, pitrk2->getZHelix(), pitrk2->getZError());
01995           
01996           
01997           
01998           KinematicFit * kmfit = KinematicFit::instance();
01999           kmfit->init();
02000           kmfit->AddTrack(0, wvpiTrk1);
02001           kmfit->AddTrack(1, wvpiTrk2);
02002           kmfit->AddTrack(2, wvpiTrk3);
02003           kmfit->AddTrack(3, wvpiTrk4);
02004           kmfit->AddTrack(4, wvpiTrk5);
02005           kmfit->AddTrack(5, wvpiTrk6);
02006           kmfit->AddFourMomentum(0, ecms);
02007           
02008           bool oksq1 = kmfit->Fit();
02009           chi3 = kmfit->chisq();
02010           if(oksq1){
02011             if(type==0){
02012               chimin=chi3;
02013               type=3;
02014             }
02015             else if(chi3<chimin){
02016               chimin=chi3;
02017               type=3;
02018             }
02019           }
02020           //delete kmfit;
02021         }
02022         
02023         {
02024           wvpiTrk1 = WTrackParameter(mpi, trk1->getZHelix(), trk1->getZError());
02025           wvpiTrk2 = WTrackParameter(mproton, trk2->getZHelix(), trk2->getZError());
02026           wvpiTrk3 = WTrackParameter(mproton, trk3->getZHelix(), trk3->getZError());
02027           wvpiTrk4 = WTrackParameter(mpi, trk4->getZHelix(), trk4->getZError());
02028           wvpiTrk5 = WTrackParameter(mpi, pitrk1->getZHelix(), pitrk1->getZError());
02029           wvpiTrk6 = WTrackParameter(mpi, pitrk2->getZHelix(), pitrk2->getZError());
02030           
02031           
02032           KinematicFit * kmfit = KinematicFit::instance();
02033           kmfit->init();
02034           kmfit->AddTrack(0, wvpiTrk1);
02035           kmfit->AddTrack(1, wvpiTrk2);
02036           kmfit->AddTrack(2, wvpiTrk3);
02037           kmfit->AddTrack(3, wvpiTrk4);
02038           kmfit->AddTrack(4, wvpiTrk5);
02039           kmfit->AddTrack(5, wvpiTrk6);
02040           kmfit->AddFourMomentum(0, ecms);
02041           
02042           bool oksq1 = kmfit->Fit();
02043           chi4 = kmfit->chisq();
02044           if(oksq1){
02045             if(type==0){
02046               chimin=chi4;
02047               type=4;
02048             }
02049             else if(chi4<chimin){
02050               chimin=chi4;
02051               type=4;
02052             }
02053           }
02054 
02055         }
02056         
02057    
02058         if(chimin>0 && chimin<200){
02059           m_isPsipPPPiPi = true;
02060           m_psipPPPiPiNumber++;
02061         }
02062 
02063       }//end of loose cuts
02064       
02065     }//end of selecting recol jpsi to pppipi
02066     
02067 
02068 
02069         
02070   }//end of recoil jpsi selection
02071 
02072 
02073 
02074   //select psi'' events using dtaging
02075   
02076   if(m_selectPsippCand){
02077     
02078     SmartDataPtr<EvtRecDTagCol> evtRecDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol);
02079     if ( ! evtRecDTagCol ) {
02080       log << MSG::FATAL << "Could not find EvtRecDTagCol" << endreq;
02081       return StatusCode::FAILURE;
02082     }
02083     if(evtRecDTagCol->size()>0){
02084       
02085       EvtRecDTagCol::iterator m_iterbegin=evtRecDTagCol->begin();
02086       EvtRecDTagCol::iterator m_iterend=evtRecDTagCol->end();
02087       for(EvtRecDTagCol::iterator iter=m_iterbegin; iter != m_iterend; iter++){
02088         
02089         if( ((*iter)->decayMode()==EvtRecDTag::kD0toKPiPi0 && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03)  || 
02090             ((*iter)->decayMode()==EvtRecDTag::kD0toKPiPi0Pi0 && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03)  || 
02091             ((*iter)->decayMode()==EvtRecDTag::kD0toKPiPiPi && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.03 && (*iter)->deltaE()<0.03) ||
02092             ((*iter)->decayMode()==EvtRecDTag::kD0toKPiPiPiPi0 && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03) ||
02093             ((*iter)->decayMode()==EvtRecDTag::kD0toKsPiPi && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.03 && (*iter)->deltaE()<0.03) ||
02094             ((*iter)->decayMode()==EvtRecDTag::kD0toKsPiPiPi0 && fabs((*iter)->mBC()-1.865)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03)|| 
02095             ((*iter)->decayMode()==EvtRecDTag::kDptoKPiPi && fabs((*iter)->mBC()-1.87)<0.006 && (*iter)->deltaE()>-0.03 && (*iter)->deltaE()<0.03)  || 
02096             ((*iter)->decayMode()==EvtRecDTag::kDptoKPiPiPi0 && fabs((*iter)->mBC()-1.87)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03)|| 
02097             ((*iter)->decayMode()==EvtRecDTag::kDptoKsPiPi0 && fabs((*iter)->mBC()-1.87)<0.006 && (*iter)->deltaE()>-0.05 && (*iter)->deltaE()<0.03) || 
02098             ((*iter)->decayMode()==EvtRecDTag::kDptoKsPiPiPi&& fabs((*iter)->mBC()-1.87)<0.006 && (*iter)->deltaE()>-0.03 && (*iter)->deltaE()<0.03) ) {
02099           m_isPsippCand = true;
02100           m_psippCandNumber++;
02101         }
02102 
02103           
02104       }//end of looping D modes
02105 
02106 
02107     }//end of non-zero dtag list
02108     
02109   }//end of selecting psi'' events
02110   
02111   // -------- Write to root file
02112   
02113   if( m_selectRadBhabha && m_isRadBhabha ) m_subalg3->execute();
02114   if( m_selectGGEE && m_isGGEE ) m_subalg4->execute();
02115   if( m_selectGG4Pi && m_isGG4Pi ) m_subalg5->execute();
02116   if( m_selectRadBhabhaT && m_isRadBhabhaT ) m_subalg6->execute();
02117   if( m_selectRhoPi && m_isRhoPi ) m_subalg7->execute();
02118   if( m_selectKstarK && m_isKstarK ) m_subalg8->execute();
02119   if( m_selectPPPiPi && m_isPPPiPi ) m_subalg9->execute();
02120   if( m_selectRecoJpsi && m_isRecoJpsi ) m_subalg10->execute();
02121   if( m_selectBhabha && m_isBhabha ) m_subalg11->execute();
02122   if( m_selectDimu && m_isDimu ) m_subalg12->execute();
02123   if( m_selectCosmic && m_isCosmic ) m_subalg13->execute();
02124   if( m_selectGenProton && m_isGenProton ) m_subalg14->execute();
02125   if( m_selectPsipRhoPi && m_isPsipRhoPi ) m_subalg15->execute();
02126   if( m_selectPsipKstarK && m_isPsipKstarK ) m_subalg16->execute();
02127   if( m_selectPsipPPPiPi && m_isPsipPPPiPi ) m_subalg17->execute();
02128   if( m_selectPsippCand && m_isPsippCand ) m_subalg18->execute();
02129 
02130 
02131  //if(m_output) {
02132  //  m_runnb = run;
02133  //  m_evtnb = event;
02134  //  m_esum = esum;
02135  //  m_eemc = eemc;
02136  //  m_etot = etot;
02137  //  m_nCharge = nCharge;
02138  //  m_nGood = nGood;
02139  //  m_nGam = nGam;
02140  //  m_ptot = ptot;
02141  //  m_pp = pp;
02142  //  m_pm = pm;
02143  //  m_maxE = maxE;
02144  //  m_secE = secE;
02145  //  m_dThe = dthe;
02146  //  m_dPhi = dphi;
02147  //  m_mdcHit1 = mdcHit1;
02148  //  m_mdcHit2 = mdcHit2;
02149  //  m_tuple0->write();
02150  //}
02151 
02152   return StatusCode::SUCCESS;
02153 
02154 }

StatusCode CalibEventSelect::finalize (  ) 

Definition at line 2157 of file CalibEventSelect.cxx.

References Bes_Common::INFO, m_bhabhaNumber, m_cosmicNumber, m_dimuNumber, m_events, m_genProtonNumber, m_GG4PiNumber, m_GGEENumber, m_kstarKNumber, m_ppPiPiNumber, m_psipKstarKNumber, m_psippCandNumber, m_psipPPPiPiNumber, m_psipRhoPiNumber, m_radBhabhaNumber, m_radBhabhaTNumber, m_recoJpsiNumber, m_rhoPiNumber, m_selectBhabha, m_selectCosmic, m_selectDimu, m_selectGenProton, m_selectGG4Pi, m_selectGGEE, m_selectKstarK, m_selectPPPiPi, m_selectPsipKstarK, m_selectPsippCand, m_selectPsipPPPiPi, m_selectPsipRhoPi, m_selectRadBhabha, m_selectRadBhabhaT, m_selectRecoJpsi, m_selectRhoPi, and msgSvc().

02157                                       {
02158 
02159   MsgStream log(msgSvc(), name());
02160   log << MSG::INFO << "in finalize()" << endmsg;
02161 
02162   cout<<"Total events: "<<m_events<<endl;
02163 
02164 
02165   if(m_selectRadBhabha) {
02166     cout << "Selected rad bhabha: "     << m_radBhabhaNumber   << endl;
02167   }
02168 
02169 
02170   if(m_selectGGEE) {
02171     cout << "Selected ggee events: "     << m_GGEENumber   << endl;
02172   }
02173  
02174   if(m_selectGG4Pi) {
02175     cout << "Selected gg4pi events: "     << m_GG4PiNumber   << endl;
02176   }
02177   
02178   if(m_selectRadBhabhaT) {
02179     cout << "Selected rad bhabha tight: "     << m_radBhabhaTNumber   << endl;
02180   }
02181 
02182   if(m_selectRhoPi) {
02183     cout << "Selected rhopi events: "     << m_rhoPiNumber   << endl;
02184   }
02185 
02186   if(m_selectKstarK) {
02187     cout << "Selected kstark events: "     << m_kstarKNumber   << endl;
02188   }
02189 
02190   if(m_selectPPPiPi) {
02191     cout << "Selected pppipi events: "     << m_ppPiPiNumber   << endl;
02192   }
02193 
02194   if(m_selectRecoJpsi) {
02195     cout << "Selected recoil jsi events: "     << m_recoJpsiNumber   << endl;
02196   }
02197 
02198   
02199   if(m_selectBhabha) {
02200     cout << "Selected bhabha events: "     << m_bhabhaNumber   << endl;
02201   }
02202 
02203 
02204   if(m_selectDimu) {
02205     cout << "Selected dimu events: "     << m_dimuNumber   << endl;
02206   }
02207 
02208 
02209   if(m_selectCosmic) {
02210     cout << "Selected cosmic events: "     << m_cosmicNumber   << endl;
02211   }
02212 
02213   if(m_selectGenProton) {
02214     cout << "Selected generic proton events: "     << m_genProtonNumber   << endl;
02215   }
02216 
02217   if(m_selectPsipRhoPi) {
02218     cout << "Selected recoil rhopi events: "     << m_psipRhoPiNumber   << endl;
02219   }
02220 
02221   if(m_selectPsipKstarK) {
02222     cout << "Selected recoil kstark events: "     << m_psipKstarKNumber   << endl;
02223   }
02224 
02225   if(m_selectPsipPPPiPi) {
02226     cout << "Selected recoil pppipi events: "     << m_psipPPPiPiNumber   << endl;
02227   }
02228 
02229  if(m_selectPsippCand) {
02230     cout << "Selected psi'' candi events: "     << m_psippCandNumber   << endl;
02231   }
02232 
02233   return StatusCode::SUCCESS;
02234 }

StatusCode CalibEventSelect::initialize (  ) 

Definition at line 168 of file CalibEventSelect.cxx.

References calibUtil::ERROR, h_deltap, h_deltaphi, h_egmax, h_eopmax, h_eopsec, h_esumoecm, h_nCharge, h_nGood, h_pmaxobeam, h_Pt, histoSvc(), Bes_Common::INFO, m_bhabhaNumber, m_cosmicNumber, m_dang, m_dimuNumber, m_dphi, m_dthe, m_eemc, m_eraw, m_esum, m_etot, m_events, m_evtnb, m_genProtonNumber, m_GG4PiNumber, m_GGEENumber, m_kstarKNumber, m_maxE, m_mdcHit1, m_mdcHit2, m_nCharge, m_nGam, m_nGood, m_output, m_p0, m_pm, m_pp, m_ppPiPiNumber, m_psipKstarKNumber, m_psipPPPiPiNumber, m_psipRhoPiNumber, m_pt0, m_ptot, m_radBhabhaNumber, m_radBhabhaTNumber, m_recoJpsiNumber, m_rhoPiNumber, m_run, m_runnb, m_secE, m_selectBhabha, m_selectCosmic, m_selectDimu, m_selectGenProton, m_selectGG4Pi, m_selectGGEE, m_selectKstarK, m_selectPPPiPi, m_selectPsipKstarK, m_selectPsippCand, m_selectPsipPPPiPi, m_selectPsipRhoPi, m_selectRadBhabha, m_selectRadBhabhaT, m_selectRecoJpsi, m_selectRhoPi, m_subalg1, m_subalg10, m_subalg11, m_subalg12, m_subalg13, m_subalg14, m_subalg15, m_subalg16, m_subalg17, m_subalg18, m_subalg2, m_subalg3, m_subalg4, m_subalg5, m_subalg6, m_subalg7, m_subalg8, m_subalg9, m_theta0, m_tuple0, m_tuple1, m_tuple2, m_vr0, m_vx0, m_vy0, m_vz0, m_writeDst, m_writeRec, msgSvc(), and ntupleSvc().

00168                                          {
00169    MsgStream log(msgSvc(), name());
00170 
00171    log << MSG::INFO << "in initialize()" << endmsg;
00172 
00173    m_run=0;
00174    //m_ecm=3.1;
00175 
00176 
00177    h_nGood= histoSvc()->book("1D/nGoodtracks", 1, "num of good chaged tracks", 20, 0, 20);
00178    h_nCharge= histoSvc()->book("1D/nCharge", 1, "net charge", 20, -10, 10);
00179    h_pmaxobeam= histoSvc()->book("1D/pmax", 1, "pmax over beam ratio", 100, 0, 3);
00180    h_eopmax= histoSvc()->book("1D/eopmax", 1, "e over pmax ratio", 100, 0, 3);
00181    h_eopsec= histoSvc()->book("1D/eopsec", 1, "e over psec ratio", 100, 0, 3);
00182    h_deltap= histoSvc()->book("1D/deltap", 1, "pmax minus psec", 100, -3, 3);
00183    h_esumoecm= histoSvc()->book("1D/esumoverecm", 1, "total energy over ecm ratio", 100, 0, 3);  
00184    h_egmax= histoSvc()->book("1D/egmax", 1, "most energetic photon energy", 100, 0, 3);
00185    h_deltaphi= histoSvc()->book("1D/deltaphi", 1, "phi_pmax minus phi_sec", 150, -4, 4);
00186    h_Pt= histoSvc()->book("1D/Pt", 1, "total Transverse Momentum", 200,-1, 4);
00187 
00188    StatusCode sc;
00189 
00190    log << MSG::INFO << "creating sub-algorithms...." << endreq;
00191 
00192 
00193 
00194 
00195 
00196    if(m_writeDst) {
00197      sc =  createSubAlgorithm( "EventWriter", "WriteDst", m_subalg1);
00198      if( sc.isFailure() ) {
00199        log << MSG::ERROR << "Error creating Sub-Algorithm WriteDst" <<endreq;
00200        return sc;
00201      } else {
00202        log << MSG::INFO << "Success creating Sub-Algorithm WriteDst" <<endreq;
00203      }
00204    }
00205 
00206    if(m_writeRec) {
00207      sc =  createSubAlgorithm( "EventWriter", "WriteRec", m_subalg2);
00208      if( sc.isFailure() ) {
00209        log << MSG::ERROR << "Error creating Sub-Algorithm WriteRec" <<endreq;
00210        return sc;
00211      } else {
00212        log << MSG::INFO << "Success creating Sub-Algorithm WriteRec" <<endreq;
00213      }
00214    }
00215 
00216 
00217    if(m_selectRadBhabha) {
00218      sc =  createSubAlgorithm( "EventWriter", "SelectRadBhabha", m_subalg3);
00219      if( sc.isFailure() ) {
00220        log << MSG::ERROR << "Error creating Sub-Algorithm SelectRadBhabha" <<endreq;
00221        return sc;
00222      } else {
00223        log << MSG::INFO << "Success creating Sub-Algorithm SelectRadBhabha" <<endreq;
00224      }
00225    }
00226 
00227    if(m_selectGGEE) {
00228      sc =  createSubAlgorithm( "EventWriter", "SelectGGEE", m_subalg4);
00229      if( sc.isFailure() ) {
00230        log << MSG::ERROR << "Error creating Sub-Algorithm SelectGGEE" <<endreq;
00231        return sc;
00232      } else {
00233        log << MSG::INFO << "Success creating Sub-Algorithm SelectGGEE" <<endreq;
00234      }
00235    }
00236 
00237    if(m_selectGG4Pi) {
00238      sc =  createSubAlgorithm( "EventWriter", "SelectGG4Pi", m_subalg5);
00239      if( sc.isFailure() ) {
00240        log << MSG::ERROR << "Error creating Sub-Algorithm SelectGG4Pi" <<endreq;
00241        return sc;
00242      } else {
00243        log << MSG::INFO << "Success creating Sub-Algorithm SelectGG4Pi" <<endreq;
00244      }
00245    }
00246 
00247 
00248    if(m_selectRadBhabhaT) {
00249      sc =  createSubAlgorithm( "EventWriter", "SelectRadBhabhaT", m_subalg6);
00250      if( sc.isFailure() ) {
00251        log << MSG::ERROR << "Error creating Sub-Algorithm SelectRadBhabhaT" <<endreq;
00252        return sc;
00253      } else {
00254        log << MSG::INFO << "Success creating Sub-Algorithm SelectRadBhabhaT" <<endreq;
00255      }
00256    }
00257 
00258 
00259    if(m_selectRhoPi) {
00260      sc =  createSubAlgorithm( "EventWriter", "SelectRhoPi", m_subalg7);
00261      if( sc.isFailure() ) {
00262        log << MSG::ERROR << "Error creating Sub-Algorithm SelectRhoPi" <<endreq;
00263        return sc;
00264      } else {
00265        log << MSG::INFO << "Success creating Sub-Algorithm SelectRhoPi" <<endreq;
00266      }
00267    }
00268 
00269 
00270    if(m_selectKstarK) {
00271      sc =  createSubAlgorithm( "EventWriter", "SelectKstarK", m_subalg8);
00272      if( sc.isFailure() ) {
00273        log << MSG::ERROR << "Error creating Sub-Algorithm SelectKstarK" <<endreq;
00274        return sc;
00275      } else {
00276        log << MSG::INFO << "Success creating Sub-Algorithm SelectKstarK" <<endreq;
00277      }
00278    }
00279 
00280 
00281 
00282    if(m_selectPPPiPi) {
00283      sc =  createSubAlgorithm( "EventWriter", "SelectPPPiPi", m_subalg9);
00284      if( sc.isFailure() ) {
00285        log << MSG::ERROR << "Error creating Sub-Algorithm SelectPPPiPi" <<endreq;
00286        return sc;
00287      } else {
00288        log << MSG::INFO << "Success creating Sub-Algorithm SelectPPPiPi" <<endreq;
00289      }
00290    }
00291 
00292 
00293    if(m_selectRecoJpsi) {
00294      sc =  createSubAlgorithm( "EventWriter", "SelectRecoJpsi", m_subalg10);
00295      if( sc.isFailure() ) {
00296        log << MSG::ERROR << "Error creating Sub-Algorithm SelectRecoJpsi" <<endreq;
00297        return sc;
00298      } else {
00299        log << MSG::INFO << "Success creating Sub-Algorithm SelectRecoJpsi" <<endreq;
00300      }
00301    }
00302 
00303 
00304    if(m_selectBhabha) {
00305      sc =  createSubAlgorithm( "EventWriter", "SelectBhabha", m_subalg11);
00306      if( sc.isFailure() ) {
00307        log << MSG::ERROR << "Error creating Sub-Algorithm SelectBhabha" <<endreq;
00308        return sc;
00309      } else {
00310        log << MSG::INFO << "Success creating Sub-Algorithm SelectBhabha" <<endreq;
00311      }
00312    }
00313 
00314    if(m_selectDimu) {
00315      sc =  createSubAlgorithm( "EventWriter", "SelectDimu", m_subalg12);
00316      if( sc.isFailure() ) {
00317        log << MSG::ERROR << "Error creating Sub-Algorithm SelectDimu" <<endreq;
00318        return sc;
00319      } else {
00320        log << MSG::INFO << "Success creating Sub-Algorithm SelectDimu" <<endreq;
00321      }
00322    }
00323 
00324    if(m_selectCosmic) {
00325      sc =  createSubAlgorithm( "EventWriter", "SelectCosmic", m_subalg13);
00326      if( sc.isFailure() ) {
00327        log << MSG::ERROR << "Error creating Sub-Algorithm SelectCosmic" <<endreq;
00328        return sc;
00329      } else {
00330        log << MSG::INFO << "Success creating Sub-Algorithm SelectCosmic" <<endreq;
00331      }
00332    }
00333 
00334    if(m_selectGenProton) {
00335      sc =  createSubAlgorithm( "EventWriter", "SelectGenProton", m_subalg14);
00336      if( sc.isFailure() ) {
00337        log << MSG::ERROR << "Error creating Sub-Algorithm SelectGenProton" <<endreq;
00338        return sc;
00339      } else {
00340        log << MSG::INFO << "Success creating Sub-Algorithm SelectGenProton" <<endreq;
00341      }
00342    }
00343 
00344 
00345    if(m_selectPsipRhoPi) {
00346      sc =  createSubAlgorithm( "EventWriter", "SelectPsipRhoPi", m_subalg15);
00347      if( sc.isFailure() ) {
00348        log << MSG::ERROR << "Error creating Sub-Algorithm SelectPsipRhoPi" <<endreq;
00349        return sc;
00350      } else {
00351        log << MSG::INFO << "Success creating Sub-Algorithm SelectPsipRhoPi" <<endreq;
00352      }
00353    }
00354 
00355 
00356    if(m_selectPsipKstarK) {
00357      sc =  createSubAlgorithm( "EventWriter", "SelectPsipKstarK", m_subalg16);
00358      if( sc.isFailure() ) {
00359        log << MSG::ERROR << "Error creating Sub-Algorithm SelectPsipKstarK" <<endreq;
00360        return sc;
00361      } else {
00362        log << MSG::INFO << "Success creating Sub-Algorithm SelectPsipKstarK" <<endreq;
00363      }
00364    }
00365 
00366 
00367    if(m_selectPsipPPPiPi) {
00368      sc =  createSubAlgorithm( "EventWriter", "SelectPsipPPPiPi", m_subalg17);
00369      if( sc.isFailure() ) {
00370        log << MSG::ERROR << "Error creating Sub-Algorithm SelectPsipPPPiPi" <<endreq;
00371        return sc;
00372      } else {
00373        log << MSG::INFO << "Success creating Sub-Algorithm SelectPsipPPPiPi" <<endreq;
00374      }
00375    }
00376 
00377 
00378    if(m_selectPsippCand) {
00379      sc =  createSubAlgorithm( "EventWriter", "SelectPsippCand", m_subalg18);
00380      if( sc.isFailure() ) {
00381        log << MSG::ERROR << "Error creating Sub-Algorithm SelectPsippCand" <<endreq;
00382        return sc;
00383      } else {
00384        log << MSG::INFO << "Success creating Sub-Algorithm SelectPsippCand" <<endreq;
00385      }
00386    }
00387 
00388 
00389 
00390 
00391    if(m_output) {
00392      StatusCode status;
00393      NTuplePtr nt0(ntupleSvc(), "FILE1/hadron");
00394      if ( nt0 ) m_tuple0 = nt0;
00395      else {
00396        m_tuple0 = ntupleSvc()->book ("FILE1/hadron", CLID_ColumnWiseTuple, "N-Tuple example");
00397        if ( m_tuple0 )    {
00398          status = m_tuple0->addItem ("esum",     m_esum);
00399          status = m_tuple0->addItem ("eemc",     m_eemc);
00400          status = m_tuple0->addItem ("etot",     m_etot);
00401          status = m_tuple0->addItem ("nGood",    m_nGood);
00402          status = m_tuple0->addItem ("nCharge",  m_nCharge);
00403          status = m_tuple0->addItem ("nGam",     m_nGam);
00404          status = m_tuple0->addItem ("ptot",     m_ptot);
00405          status = m_tuple0->addItem ("pp",       m_pp);
00406          status = m_tuple0->addItem ("pm",       m_pm);
00407          status = m_tuple0->addItem ("run",      m_runnb);
00408          status = m_tuple0->addItem ("event",    m_evtnb);
00409          status = m_tuple0->addItem ("maxE",     m_maxE);
00410          status = m_tuple0->addItem ("secE",     m_secE);
00411          status = m_tuple0->addItem ("dthe",     m_dthe);
00412          status = m_tuple0->addItem ("dphi",     m_dphi);
00413          status = m_tuple0->addItem ("mdcHit1",  m_mdcHit1);
00414          status = m_tuple0->addItem ("mdcHit2",  m_mdcHit2);
00415        }
00416        else    { 
00417          log << MSG::ERROR << "    Cannot book N-tuple:" << long(m_tuple0) << endmsg;
00418          return StatusCode::FAILURE;
00419        }
00420      }
00421 
00422      NTuplePtr nt1(ntupleSvc(), "FILE1/vxyz");
00423      if ( nt1 ) m_tuple1 = nt1;
00424      else {
00425        m_tuple1 = ntupleSvc()->book ("FILE1/vxyz", CLID_ColumnWiseTuple, "ks N-Tuple example");
00426        if ( m_tuple1 )    {
00427          status = m_tuple1->addItem ("vx0",    m_vx0);
00428          status = m_tuple1->addItem ("vy0",    m_vy0);
00429          status = m_tuple1->addItem ("vz0",    m_vz0);
00430          status = m_tuple1->addItem ("vr0",    m_vr0);
00431          status = m_tuple1->addItem ("theta0", m_theta0);
00432          status = m_tuple1->addItem ("p0",     m_p0);
00433          status = m_tuple1->addItem ("pt0",    m_pt0);
00434        }
00435        else    { 
00436          log << MSG::ERROR << "    Cannot book N-tuple:" << long(m_tuple1) << endmsg;
00437          return StatusCode::FAILURE;
00438        }
00439      }
00440 
00441      NTuplePtr nt2(ntupleSvc(), "FILE1/photon");
00442      if ( nt2 ) m_tuple2 = nt2;
00443      else {
00444        m_tuple2 = ntupleSvc()->book ("FILE1/photon", CLID_ColumnWiseTuple, "ks N-Tuple example");
00445        if ( m_tuple2 )    {
00446          status = m_tuple2->addItem ("dthe",   m_dthe);
00447          status = m_tuple2->addItem ("dphi",   m_dphi);
00448          status = m_tuple2->addItem ("dang",   m_dang);
00449          status = m_tuple2->addItem ("eraw",   m_eraw);
00450        }
00451        else    { 
00452          log << MSG::ERROR << "    Cannot book N-tuple:" << long(m_tuple2) << endmsg;
00453          return StatusCode::FAILURE;
00454        }
00455      }
00456    }
00457    //
00458    //--------end of book--------
00459    //
00460 
00461    m_events=0;
00462    m_radBhabhaNumber=0;
00463    m_GGEENumber=0;
00464    m_GG4PiNumber=0;
00465    m_radBhabhaTNumber=0;
00466    m_rhoPiNumber=0;
00467    m_kstarKNumber=0;
00468    m_ppPiPiNumber=0;
00469    m_recoJpsiNumber=0;
00470    m_bhabhaNumber=0;
00471    m_dimuNumber=0;
00472    m_cosmicNumber=0;
00473    m_genProtonNumber=0;
00474    m_psipRhoPiNumber=0;
00475    m_psipKstarKNumber=0;
00476    m_psipPPPiPiNumber=0;
00477 
00478    log << MSG::INFO << "successfully return from initialize()" <<endmsg;
00479    return StatusCode::SUCCESS;
00480 
00481  }

void CalibEventSelect::readbeamEfromDb ( int  runNo,
double &  beamE 
)

Definition at line 2266 of file CalibEventSelect.cxx.

Referenced by execute().

02266                                                                {
02267 
02268   const char host[]     = "202.122.37.69";
02269   const char user[]     = "guest";
02270   const char passwd[]   = "guestpass";
02271   const char db[]       = "run";
02272   unsigned int port_num = 3306;
02273 
02274 
02275   MYSQL* mysql = mysql_init(NULL);
02276   mysql = mysql_real_connect(mysql, host, user, passwd, db, port_num,
02277                              NULL,  // socket
02278                              0);    // client_flag
02279 
02280   if (mysql == NULL) {
02281     fprintf(stderr, "can not open database: RunInfo for run %d lum\n", runNo);
02282   }
02283 
02284   char stmt[1024];
02285   
02286   snprintf(stmt, 1024,
02287            "select BER_PRB, BPR_PRB "
02288            "from RunParams where run_number = %d", runNo);
02289   if (mysql_real_query(mysql, stmt, strlen(stmt))) {
02290     fprintf(stderr, "query error\n");
02291   }
02292 
02293   MYSQL_RES* result_set = mysql_store_result(mysql);
02294   MYSQL_ROW row = mysql_fetch_row(result_set);
02295   if (!row) {
02296     fprintf(stderr, "cannot find data for RunNo %d\n", runNo);
02297     return ;
02298   }
02299   
02300   double E_E=0, E_P=0;
02301   sscanf(row[0], "%lf", &E_E);
02302   sscanf(row[1], "%lf", &E_P);
02303   
02304   beamE=(E_E+E_P)/2.0;
02305 } 

bool CalibEventSelect::WhetherSector ( double  ph,
double  ph1,
double  ph2 
)

Definition at line 2236 of file CalibEventSelect.cxx.

References max, min, phi1, phi2, and pi.

02236                                                                     {
02237   double phi1=min(ph1,ph2);
02238   double phi2=max(ph1,ph2);
02239   double delta=0.0610865; //3.5*3.1415926/180.
02240   if((phi2-phi1)<CLHEP::pi){
02241     phi1 -=delta;
02242     phi2 +=delta;
02243     if(phi1<0.) phi1 += CLHEP::twopi;
02244     if(phi2>CLHEP::twopi) phi2 -= CLHEP::twopi;
02245     double tmp1=min(phi1,phi2);
02246     double tmp2=max(phi1,phi2);
02247     phi1=tmp1;
02248     phi2=tmp2;
02249   }
02250   else{
02251     phi1 +=delta;
02252     phi2 -=delta;
02253   }
02254   if((phi2-phi1)<CLHEP::pi){
02255     if(ph<=phi2&&ph>=phi1) return true;
02256     else   return false;
02257   }
02258   else{
02259     if(ph>=phi2||ph<=phi1) return true;
02260     else   return false;
02261   }
02262 }


Member Data Documentation

IHistogram1D* CalibEventSelect::h_deltap [private]

Definition at line 45 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_deltaphi [private]

Definition at line 48 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_egmax [private]

Definition at line 47 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_eopmax [private]

Definition at line 43 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_eopsec [private]

Definition at line 44 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_esumoecm [private]

Definition at line 46 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_nCharge [private]

Definition at line 41 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_nGood [private]

Definition at line 40 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_pmaxobeam [private]

Definition at line 42 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

IHistogram1D* CalibEventSelect::h_Pt [private]

Definition at line 49 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

int CalibEventSelect::idmax [static, private]

Initial value:

{40,44,48,56,64,72,80,80,76,76,
   88,88,100,100,112,112,128,128,140,140,
   160,160,160,160,176,176,176,176,208,208,
   208,208,240,240,240,240,256,256,256,256,
   288,288,288}

Definition at line 36 of file CalibEventSelect.h.

int CalibEventSelect::m_BarrelOrEndcap [private]

Definition at line 30 of file CalibEventSelect.h.

int CalibEventSelect::m_bhabha_scale [private]

Definition at line 112 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

long int CalibEventSelect::m_bhabhaNumber [private]

Definition at line 129 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

double CalibEventSelect::m_cosmic_lowp [private]

Definition at line 117 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

int CalibEventSelect::m_cosmic_scale [private]

Definition at line 114 of file CalibEventSelect.h.

Referenced by CalibEventSelect().

long int CalibEventSelect::m_cosmicNumber [private]

Definition at line 131 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

NTuple::Item<double> CalibEventSelect::m_dang [private]

Definition at line 191 of file CalibEventSelect.h.

Referenced by initialize().

int CalibEventSelect::m_dimu_scale [private]

Definition at line 113 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

long int CalibEventSelect::m_dimuNumber [private]

Definition at line 130 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

bool CalibEventSelect::m_display [private]

Definition at line 32 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

NTuple::Item<double> CalibEventSelect::m_dphi [private]

Definition at line 190 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_dPhi [private]

Definition at line 175 of file CalibEventSelect.h.

NTuple::Item<double> CalibEventSelect::m_dthe [private]

Definition at line 189 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_dThe [private]

Definition at line 174 of file CalibEventSelect.h.

double CalibEventSelect::m_ecm [private]

Definition at line 35 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

NTuple::Item<double> CalibEventSelect::m_eemc [private]

Definition at line 162 of file CalibEventSelect.h.

Referenced by initialize().

double CalibEventSelect::m_energyThreshold [private]

Definition at line 102 of file CalibEventSelect.h.

Referenced by CalibEventSelect().

NTuple::Item<double> CalibEventSelect::m_eraw [private]

Definition at line 192 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_esum [private]

Definition at line 161 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_etot [private]

Definition at line 163 of file CalibEventSelect.h.

Referenced by initialize().

long int CalibEventSelect::m_events [private]

number of total events

Definition at line 110 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

NTuple::Item<long> CalibEventSelect::m_evtnb [private]

Definition at line 171 of file CalibEventSelect.h.

Referenced by initialize().

double CalibEventSelect::m_gammaPhiCut [private]

Definition at line 103 of file CalibEventSelect.h.

Referenced by CalibEventSelect().

double CalibEventSelect::m_gammaThetaCut [private]

Definition at line 104 of file CalibEventSelect.h.

Referenced by CalibEventSelect().

long int CalibEventSelect::m_genProtonNumber [private]

Definition at line 132 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_GG4PiNumber [private]

Definition at line 123 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_GGEENumber [private]

Definition at line 122 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

bool CalibEventSelect::m_isBhabha [private]

Definition at line 61 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isCosmic [private]

Definition at line 63 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isDimu [private]

Definition at line 62 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isGenProton [private]

Definition at line 64 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isGG4Pi [private]

Definition at line 55 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isGGEE [private]

Definition at line 54 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isKstarK [private]

Definition at line 58 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isPPPiPi [private]

Definition at line 59 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isPsipKstarK [private]

Definition at line 66 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isPsippCand [private]

Definition at line 68 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isPsipPPPiPi [private]

Definition at line 67 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isPsipRhoPi [private]

Definition at line 65 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isRadBhabha [private]

Definition at line 53 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isRadBhabhaT [private]

Definition at line 56 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isRecoJpsi [private]

Definition at line 60 of file CalibEventSelect.h.

Referenced by execute().

bool CalibEventSelect::m_isRhoPi [private]

Definition at line 57 of file CalibEventSelect.h.

Referenced by execute().

long int CalibEventSelect::m_kstarKNumber [private]

Definition at line 126 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

NTuple::Item<double> CalibEventSelect::m_maxE [private]

Definition at line 172 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<long> CalibEventSelect::m_mdcHit1 [private]

Definition at line 176 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<long> CalibEventSelect::m_mdcHit2 [private]

Definition at line 177 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_nCharge [private]

Definition at line 165 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_nGam [private]

Definition at line 166 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_nGood [private]

Definition at line 164 of file CalibEventSelect.h.

Referenced by initialize().

bool CalibEventSelect::m_output [private]

Definition at line 31 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), and initialize().

NTuple::Item<double> CalibEventSelect::m_p0 [private]

Definition at line 185 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Item<double> CalibEventSelect::m_pm [private]

Definition at line 169 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_pp [private]

Definition at line 168 of file CalibEventSelect.h.

Referenced by initialize().

long int CalibEventSelect::m_ppPiPiNumber [private]

Definition at line 127 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

bool CalibEventSelect::m_printmonitor [private]

Definition at line 73 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

int CalibEventSelect::m_proton_scale [private]

Definition at line 115 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

long int CalibEventSelect::m_psipKstarKNumber [private]

Definition at line 134 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_psippCandNumber [private]

Definition at line 136 of file CalibEventSelect.h.

Referenced by execute(), and finalize().

long int CalibEventSelect::m_psipPPPiPiNumber [private]

Definition at line 135 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_psipRhoPiNumber [private]

Definition at line 133 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

NTuple::Item<double> CalibEventSelect::m_pt0 [private]

Definition at line 186 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

double CalibEventSelect::m_pt0HighCut [private]

Definition at line 98 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

double CalibEventSelect::m_pt0LowCut [private]

Definition at line 99 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

NTuple::Item<double> CalibEventSelect::m_ptot [private]

Definition at line 167 of file CalibEventSelect.h.

Referenced by initialize().

int CalibEventSelect::m_radbhabha_scale [private]

Definition at line 111 of file CalibEventSelect.h.

Referenced by CalibEventSelect().

long int CalibEventSelect::m_radBhabhaNumber [private]

number of events selected

Definition at line 121 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_radBhabhaTNumber [private]

Definition at line 124 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

long int CalibEventSelect::m_recoJpsiNumber [private]

Definition at line 128 of file CalibEventSelect.h.

Referenced by finalize(), and initialize().

long int CalibEventSelect::m_rhoPiNumber [private]

Definition at line 125 of file CalibEventSelect.h.

Referenced by execute(), finalize(), and initialize().

int CalibEventSelect::m_run [private]

Definition at line 34 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Item<long> CalibEventSelect::m_runnb [private]

Definition at line 170 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_secE [private]

Definition at line 173 of file CalibEventSelect.h.

Referenced by initialize().

bool CalibEventSelect::m_selectBhabha [private]

Definition at line 82 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectCosmic [private]

Definition at line 84 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectDimu [private]

Definition at line 83 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectGenProton [private]

Definition at line 85 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectGG4Pi [private]

Definition at line 76 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectGGEE [private]

Definition at line 75 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectKstarK [private]

Definition at line 79 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectPPPiPi [private]

Definition at line 80 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectPsipKstarK [private]

Definition at line 87 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectPsippCand [private]

Definition at line 89 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectPsipPPPiPi [private]

Definition at line 88 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectPsipRhoPi [private]

Definition at line 86 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectRadBhabha [private]

Definition at line 74 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectRadBhabhaT [private]

Definition at line 77 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectRecoJpsi [private]

Definition at line 81 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

bool CalibEventSelect::m_selectRhoPi [private]

Definition at line 78 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), finalize(), and initialize().

Algorithm* CalibEventSelect::m_subalg1 [private]

Definition at line 138 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg10 [private]

Definition at line 147 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg11 [private]

Definition at line 148 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg12 [private]

Definition at line 149 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg13 [private]

Definition at line 150 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg14 [private]

Definition at line 151 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg15 [private]

Definition at line 152 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg16 [private]

Definition at line 153 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg17 [private]

Definition at line 154 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg18 [private]

Definition at line 155 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg2 [private]

Definition at line 139 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg3 [private]

Definition at line 140 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg4 [private]

Definition at line 141 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg5 [private]

Definition at line 142 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg6 [private]

Definition at line 143 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg7 [private]

Definition at line 144 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg8 [private]

Definition at line 145 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

Algorithm* CalibEventSelect::m_subalg9 [private]

Definition at line 146 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Item<double> CalibEventSelect::m_theta0 [private]

Definition at line 184 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Tuple* CalibEventSelect::m_tuple0 [private]

Definition at line 160 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Tuple* CalibEventSelect::m_tuple1 [private]

Definition at line 179 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Tuple* CalibEventSelect::m_tuple2 [private]

Definition at line 188 of file CalibEventSelect.h.

Referenced by initialize().

NTuple::Item<double> CalibEventSelect::m_vr0 [private]

Definition at line 183 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

double CalibEventSelect::m_vr0cut [private]

Definition at line 96 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

NTuple::Item<double> CalibEventSelect::m_vx0 [private]

Definition at line 180 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Item<double> CalibEventSelect::m_vy0 [private]

Definition at line 181 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

NTuple::Item<double> CalibEventSelect::m_vz0 [private]

Definition at line 182 of file CalibEventSelect.h.

Referenced by execute(), and initialize().

double CalibEventSelect::m_vz0cut [private]

Definition at line 97 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), and execute().

bool CalibEventSelect::m_writeDst [private]

Definition at line 92 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), and initialize().

bool CalibEventSelect::m_writeRec [private]

Definition at line 93 of file CalibEventSelect.h.

Referenced by CalibEventSelect(), execute(), and initialize().


Generated on Tue Nov 29 23:18:01 2016 for BOSS_7.0.2 by  doxygen 1.4.7