#include <MdcFakeTrackCheck.h>
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 BField * | m_bfield |
const BField * | m_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 MdcDetector * | m_gm |
const MdcDetector * | m_gm |
bool | m_hist |
double | m_hotDriftDist [43][288] |
bool | m_keepFirstTdc |
unsigned int | m_maxMdcDigi |
const MdcCalibFunSvc * | m_mdcCalibFunSvc |
const MdcCalibFunSvc * | m_mdcCalibFunSvc |
IMdcGeomSvc * | m_mdcGeomSvc |
IMdcGeomSvc * | m_mdcGeomSvc |
IMagneticFieldSvc * | m_pIMF |
IMagneticFieldSvc * | m_pIMF |
bool | m_poca |
RawDataProviderSvc * | m_rawDataProviderSvc |
RawDataProviderSvc * | m_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 |
|
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 }
|
|
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
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 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|