Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MdcFakeTrackCheck Class Reference

#include <MdcFakeTrackCheck.h>

List of all members.

Public Member Functions

StatusCode execute ()
StatusCode execute ()
StatusCode finalize ()
StatusCode finalize ()
StatusCode initialize ()
StatusCode initialize ()
 MdcFakeTrackCheck (const std::string &name, ISvcLocator *pSvcLocator)
 MdcFakeTrackCheck (const std::string &name, ISvcLocator *pSvcLocator)

Private Member Functions

StatusCode bookNTuple ()
StatusCode bookNTuple ()
StatusCode fillInit ()
StatusCode fillInit ()
HepSymMatrix helixErrToBabar (const HepSymMatrix &err)
HepSymMatrix helixErrToBabar (const HepSymMatrix &err)
HepVector helixParToBabar (const HepVector &helixPar)
HepVector helixParToBabar (const HepVector &helixPar)
int testFromSameParticle (const RecMdcTrack *tk1, const RecMdcTrack *tk2)
int testFromSameParticle (const RecMdcTrack *tk1, const RecMdcTrack *tk2)

Private Attributes

int allNum [43][288]
double Bz
const BFieldm_bfield
const BFieldm_bfield
int m_debug
double m_dMomentum
double m_dphi
double m_dpt
bool m_dropHot
bool m_dropUnmatch
double m_dtheta
NTuple::Item< double > m_fake_dPhi
NTuple::Item< double > m_fake_dPhi
NTuple::Item< double > m_fake_dPt
NTuple::Item< double > m_fake_dPt
NTuple::Item< double > m_fake_dTheta
NTuple::Item< double > m_fake_dTheta
NTuple::Item< long > m_fake_evtId
NTuple::Item< long > m_fake_evtId
NTuple::Item< long > m_fake_evtNo
NTuple::Item< long > m_fake_evtNo
NTuple::Item< long > m_fake_fake
NTuple::Item< long > m_fake_fake
NTuple::Item< long > m_fake_nTdsTk
NTuple::Item< long > m_fake_nTdsTk
NTuple::Item< long > m_fake_runNo
NTuple::Item< long > m_fake_runNo
const MdcDetectorm_gm
const MdcDetectorm_gm
bool m_hist
double m_hotDriftDist [43][288]
bool m_keepFirstTdc
unsigned int m_maxMdcDigi
const MdcCalibFunSvcm_mdcCalibFunSvc
const MdcCalibFunSvcm_mdcCalibFunSvc
IMdcGeomSvcm_mdcGeomSvc
IMdcGeomSvcm_mdcGeomSvc
IMagneticFieldSvcm_pIMF
IMagneticFieldSvcm_pIMF
bool m_poca
RawDataProviderSvcm_rawDataProviderSvc
RawDataProviderSvcm_rawDataProviderSvc
NTuple::Tuple * m_tuple1
NTuple::Tuple * m_tuple1
double t_dPhi
double t_dPt
double t_dTheta
long t_eventNo
int t_evtIndex
int t_mdcxRecTk
int t_nTk
int t_patRecTk
int t_recTkNum
long t_runNo
double t_t0
int t_t0Stat
int t_trkRecoTk


Constructor & Destructor Documentation

MdcFakeTrackCheck::MdcFakeTrackCheck const std::string &  name,
ISvcLocator *  pSvcLocator
 

00042                                                                                  : 
00043   Algorithm(name, pSvcLocator) {
00044     declareProperty("hist", m_hist = false);
00045     declareProperty("debug", m_debug= 0);
00046     declareProperty("dphi", m_dphi= 0.1);
00047     //    declareProperty("dMomentum", m_dMomentum= 0.15);      
00048     declareProperty("dtheta", m_dtheta= 0.7);
00049     declareProperty("dPt", m_dpt= 0.15);
00050     declareProperty("dropHot", m_dropHot = false);
00051     declareProperty("dropUnmatch", m_dropUnmatch = true);
00052     declareProperty("maxMdcDigi", m_maxMdcDigi = 6796);
00053     declareProperty("keepFirstTdc", m_keepFirstTdc = true);
00054     declareProperty("poca", m_poca = false);
00055   }

MdcFakeTrackCheck::MdcFakeTrackCheck const std::string &  name,
ISvcLocator *  pSvcLocator
 


Member Function Documentation

StatusCode MdcFakeTrackCheck::bookNTuple  )  [private]
 

StatusCode MdcFakeTrackCheck::bookNTuple  )  [private]
 

00182                                         {
00183   MsgStream log(msgSvc(), name());
00184   StatusCode sc = StatusCode::SUCCESS;
00185   NTuplePtr nt1(ntupleSvc(), "FILE111/fake");
00186   if ( nt1 ) { m_tuple1 = nt1;}
00187   else {
00188     m_tuple1 = ntupleSvc()->book ("FILE111/fake", CLID_RowWiseTuple, "event");
00189     if ( m_tuple1 ) {
00190       sc = m_tuple1->addItem ("fake",   m_fake_fake);
00191       sc = m_tuple1->addItem ("evtNo",  m_fake_evtNo);
00192       sc = m_tuple1->addItem ("runNo",  m_fake_runNo);
00193       sc = m_tuple1->addItem ("nTdsTk", m_fake_nTdsTk);
00194       sc = m_tuple1->addItem ("dTheta", m_fake_dTheta);
00195       sc = m_tuple1->addItem ("dPhi",   m_fake_dPhi);
00196       sc = m_tuple1->addItem ("dPt",    m_fake_dPt);
00197     } else {   
00198       log << MSG::ERROR << "Cannot book tuple FILE111/fake" << endmsg;
00199       return StatusCode::FAILURE;
00200     }
00201   }
00202   return sc;
00203 
00204 }

StatusCode MdcFakeTrackCheck::execute  ) 
 

StatusCode MdcFakeTrackCheck::execute  ) 
 

00116                                       {
00117   setFilterPassed(false);
00118 
00119   MsgStream log(msgSvc(), name());
00120   StatusCode sc = StatusCode::SUCCESS;
00121 
00122   // Get eventNo, t0 and MdcDigi
00123   if(m_hist){ sc = fillInit(); }
00124 
00125   // Get RecMdcTrackCol and RecMdcHitCol
00126   SmartDataPtr<RecMdcTrackCol> recMdcTrackCol(eventSvc(), "/Event/Recon/RecMdcTrackCol");
00127   if (!recMdcTrackCol){
00128     log << MSG::WARNING<< " Unable to retreve recMdcTrackCol" << endreq;
00129     return StatusCode::SUCCESS;
00130   }
00131   int t_nTdsTk = recMdcTrackCol->size(); 
00132   int fake = -1;
00133   if(0==t_nTdsTk) return StatusCode::SUCCESS;
00134 
00135   int tkStat = 0; 
00136   fake = 0;
00137   for( RecMdcTrackCol::iterator it1 = recMdcTrackCol->begin(); it1 != recMdcTrackCol->end(); it1++ ) {   
00138     int id = -1;
00139     for(RecMdcTrackCol::iterator it2=it1;it2!=recMdcTrackCol->end();it2++){   
00140       if ((*it2)->trackId()<=(*it1)->trackId()) continue;
00141       int id = testFromSameParticle(*it1,*it2);
00142       if(m_debug>0 && id>0) {
00143         cout<<"evt "<<t_eventNo<<" fake "<<(*it1)->trackId()
00144           <<" with " << (*it2)->trackId() <<endl;
00145       }
00146       if (id<0){continue;} 
00147       else { 
00148         fake++;
00149         //(*it1)->setStat(++tkStat);
00150         //(*it2)->setStat(++tkStat);
00151       }
00152     }
00153   }
00154   
00155   //fake track not found
00156   //if (fake<=0)  return StatusCode::SUCCESS; 
00157   if(fake>0) t_evtIndex++;
00158   if(m_tuple1){
00159     m_fake_runNo  = t_runNo;
00160     m_fake_evtNo  = t_eventNo;
00161     m_fake_nTdsTk = t_nTdsTk;
00162     m_fake_dTheta = t_dTheta;
00163     m_fake_dPhi   = t_dPhi;
00164     m_fake_dPt    = t_dPt;
00165     m_fake_fake   = fake;
00166     m_tuple1->write();
00167   }
00168 
00169   if((t_nTdsTk>1)&&(fake>0)) setFilterPassed(true);
00170   return StatusCode::SUCCESS;
00171 }

StatusCode MdcFakeTrackCheck::fillInit  )  [private]
 

StatusCode MdcFakeTrackCheck::fillInit  )  [private]
 

00207                                       {
00208   MsgStream log(msgSvc(), name());
00209   StatusCode sc = StatusCode::SUCCESS;
00210   // Get event header
00211   SmartDataPtr<Event::EventHeader> evtHead(eventSvc(),"/Event/EventHeader");
00212   if (evtHead) {
00213     t_runNo = evtHead->runNumber();
00214     t_eventNo = evtHead->eventNumber();
00215   }else{
00216     log << MSG::WARNING<< "Could not retreve event header" << endreq;
00217   }
00218 
00219   if(m_debug) if(t_eventNo%1000==0)cout<< name()<<" runNo:"<<t_runNo<<" evtNo:"<<t_eventNo << endl;//yzhang debug
00220   return sc; 
00221 }

StatusCode MdcFakeTrackCheck::finalize  ) 
 

StatusCode MdcFakeTrackCheck::finalize  ) 
 

00174                                        {
00175   MsgStream log(msgSvc(), name());
00176   log << MSG::INFO << "in finalize()" << endreq;
00177   if(m_debug>0) cout<<t_evtIndex<<" fake events founded"<<endl;
00178   return StatusCode::SUCCESS;
00179 }

HepSymMatrix MdcFakeTrackCheck::helixErrToBabar const HepSymMatrix &  err  )  [private]
 

HepSymMatrix MdcFakeTrackCheck::helixErrToBabar const HepSymMatrix &  err  )  [private]
 

00284                                                                       {
00285   //error matrix
00286   //cout<<" err1  "<<err<<" "<<err.num_row()<<endl;
00287   //V(Y)=S * V(X) * ST , mS = S , mVy = V(Y) , err() = V(X)
00288   //int n = err.num_row();
00289   HepSymMatrix mS(err.num_row(),0);
00290   mS[0][0]=-1.;//dr0=-d0
00291   mS[1][1]=1.;
00292   mS[2][2]=Bz/-333.567;//pxy -> cpa
00293   mS[3][3]=1.;
00294   mS[4][4]=1.;
00295   HepSymMatrix mVy= err.similarity(mS);
00296   //cout<<" err2  "<<n<<" "<<mVy<<endl;
00297   return mVy;
00298 }

HepVector MdcFakeTrackCheck::helixParToBabar const HepVector &  helixPar  )  [private]
 

HepVector MdcFakeTrackCheck::helixParToBabar const HepVector &  helixPar  )  [private]
 

00267                                                                      {
00268   HepVector helix(5,0);
00269   double d0 = -helixPar[0];    //cm
00270   double phi0 = helixPar[1]+ Constants::halfPi;
00271   double omega = Bz*helixPar[2]/-333.567;
00272   double z0 = helixPar[3];    //cm
00273   double tanl = helixPar[4];
00274   helix[0] = d0;
00275   helix[1] = phi0;
00276   helix[2] = omega;
00277   helix[3] = z0;
00278   helix[4] = tanl;
00279   //cout<<"helix   "<<helix<<endl;
00280   return helix;
00281 }

StatusCode MdcFakeTrackCheck::initialize  ) 
 

StatusCode MdcFakeTrackCheck::initialize  ) 
 

00059                                         {
00060   MsgStream log(msgSvc(), name());
00061   StatusCode sc;
00062 
00063   //Iintalze RawDataProviderSvc
00064   IRawDataProviderSvc* rawDataProviderSvc;
00065   sc = service ("RawDataProviderSvc", rawDataProviderSvc);
00066   m_rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*> (rawDataProviderSvc);
00067   if ( sc.isFailure() ){
00068     log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq;
00069     return StatusCode::FAILURE;
00070   }
00071 
00072   // Book NTuple
00073   if (m_hist){ 
00074     sc = bookNTuple();
00075     if (!sc.isSuccess()) { 
00076       log << MSG::ERROR << " Could not book NTuple" << endreq; 
00077       m_hist = 0;
00078     }
00079   }
00080 
00081   //Initalze magnetic flied 
00082   sc = service ("MagneticFieldSvc",m_pIMF);
00083   if(sc!=StatusCode::SUCCESS) {
00084     log << MSG::ERROR << "Unable to open Magnetc feld service"<<endreq;
00085     return StatusCode::FAILURE;
00086   }
00087   m_bfield = new BField(m_pIMF);
00088   Bz = (m_bfield->bFieldNominal());
00089 
00090   // Initialize MdcGeomSvc
00091   IMdcGeomSvc* iMdcGeomSvc;
00092   sc = service ("MdcGeomSvc",iMdcGeomSvc);
00093   m_mdcGeomSvc = dynamic_cast<MdcGeomSvc*> (iMdcGeomSvc);
00094   if ( sc.isFailure() ){
00095     log << MSG::FATAL << "Could not load MdcGeomSvc!" << endreq;
00096     return StatusCode::FAILURE;
00097   }
00098 
00099   // Initialze MdcCalibFunSvc
00100   IMdcCalibFunSvc* imdcCalibSvc;
00101   sc = service ("MdcCalibFunSvc",imdcCalibSvc);
00102   m_mdcCalibFunSvc = dynamic_cast<MdcCalibFunSvc*> (imdcCalibSvc);
00103   if ( sc.isFailure() ){
00104     log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endreq;
00105     return StatusCode::FAILURE;
00106   }
00107 
00108 
00109   //Initialze MdcDetector
00110   m_gm = MdcDetector::instance();
00111   t_evtIndex=0;
00112   return StatusCode::SUCCESS;
00113 }

int MdcFakeTrackCheck::testFromSameParticle const RecMdcTrack tk1,
const RecMdcTrack tk2
[private]
 

int MdcFakeTrackCheck::testFromSameParticle const RecMdcTrack tk1,
const RecMdcTrack tk2
[private]
 

00226                                                                                          {
00227   int notFake = -1;
00228   t_dPhi = 999.;
00229   t_dTheta = 999.;
00230   t_dPt = 999.;
00231 
00232   BesAngle phi1(tk1->phi());
00233   BesAngle phi2(tk2->phi());
00234   double theta1 = tk1->theta();
00235   double theta2 = tk2->theta();
00236   double pxy1= tk1->pxy();
00237   double pxy2 = tk2->pxy();
00238   int charge1 = tk1->charge();
00239   int charge2 = tk2->charge();
00240 
00241   t_dPhi = fabs(phi1-phi2);
00242   t_dTheta = fabs(theta1 - theta2);
00243   t_dPt = fabs(pxy1-pxy2);
00244 
00245   if (fabs(phi1 - phi2)> m_dphi) return notFake;
00246   if (fabs(theta1-theta2)> m_dtheta) return notFake;
00247   if (fabs(pxy1-pxy2)> m_dpt) return notFake;
00248   if (charge1*charge2<0) return notFake;
00249 
00250   if (m_debug==1){
00251     if(t_dPhi<= m_dphi) cout<<"phi:"<<phi1<<" "<<phi2<<" "<<t_dPhi<<endl; 
00252     if(t_dTheta<=m_dtheta) cout<<"theta:"<<theta1<<" "<<theta2<<" "<<t_dTheta<<endl;
00253     if(t_dPt<= m_dpt) cout<<"pt:"<<pxy1<<" "<<pxy2<<"   "<<t_dPt<<endl;
00254   }
00255 
00256   int id1 = tk1->trackId();
00257   int id2 = tk2->trackId();
00258   double ndof1 = tk1->ndof();
00259   double ndof2 = tk2->ndof();
00260   if ((ndof2 - ndof1) > 4) return id2;
00261   return id1;
00262 }


Member Data Documentation

int MdcFakeTrackCheck::allNum [private]
 

double MdcFakeTrackCheck::Bz [private]
 

const BField* MdcFakeTrackCheck::m_bfield [private]
 

const BField* MdcFakeTrackCheck::m_bfield [private]
 

int MdcFakeTrackCheck::m_debug [private]
 

double MdcFakeTrackCheck::m_dMomentum [private]
 

double MdcFakeTrackCheck::m_dphi [private]
 

double MdcFakeTrackCheck::m_dpt [private]
 

bool MdcFakeTrackCheck::m_dropHot [private]
 

bool MdcFakeTrackCheck::m_dropUnmatch [private]
 

double MdcFakeTrackCheck::m_dtheta [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dPhi [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dPhi [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dPt [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dPt [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dTheta [private]
 

NTuple::Item<double> MdcFakeTrackCheck::m_fake_dTheta [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_evtId [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_evtId [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_evtNo [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_evtNo [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_fake [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_fake [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_nTdsTk [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_nTdsTk [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_runNo [private]
 

NTuple::Item<long> MdcFakeTrackCheck::m_fake_runNo [private]
 

const MdcDetector* MdcFakeTrackCheck::m_gm [private]
 

const MdcDetector* MdcFakeTrackCheck::m_gm [private]
 

bool MdcFakeTrackCheck::m_hist [private]
 

double MdcFakeTrackCheck::m_hotDriftDist [private]
 

bool MdcFakeTrackCheck::m_keepFirstTdc [private]
 

unsigned int MdcFakeTrackCheck::m_maxMdcDigi [private]
 

const MdcCalibFunSvc* MdcFakeTrackCheck::m_mdcCalibFunSvc [private]
 

const MdcCalibFunSvc* MdcFakeTrackCheck::m_mdcCalibFunSvc [private]
 

IMdcGeomSvc* MdcFakeTrackCheck::m_mdcGeomSvc [private]
 

IMdcGeomSvc* MdcFakeTrackCheck::m_mdcGeomSvc [private]
 

IMagneticFieldSvc* MdcFakeTrackCheck::m_pIMF [private]
 

IMagneticFieldSvc* MdcFakeTrackCheck::m_pIMF [private]
 

bool MdcFakeTrackCheck::m_poca [private]
 

RawDataProviderSvc* MdcFakeTrackCheck::m_rawDataProviderSvc [private]
 

RawDataProviderSvc* MdcFakeTrackCheck::m_rawDataProviderSvc [private]
 

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

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

double MdcFakeTrackCheck::t_dPhi [private]
 

double MdcFakeTrackCheck::t_dPt [private]
 

double MdcFakeTrackCheck::t_dTheta [private]
 

long MdcFakeTrackCheck::t_eventNo [private]
 

int MdcFakeTrackCheck::t_evtIndex [private]
 

int MdcFakeTrackCheck::t_mdcxRecTk [private]
 

int MdcFakeTrackCheck::t_nTk [private]
 

int MdcFakeTrackCheck::t_patRecTk [private]
 

int MdcFakeTrackCheck::t_recTkNum [private]
 

long MdcFakeTrackCheck::t_runNo [private]
 

double MdcFakeTrackCheck::t_t0 [private]
 

int MdcFakeTrackCheck::t_t0Stat [private]
 

int MdcFakeTrackCheck::t_trkRecoTk [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:25:24 2011 for BOSS6.5.5 by  doxygen 1.3.9.1