#include <DTagTool.h>
Public Member Functions | |
void | clear () |
void | clear () |
void | clear () |
void | clear () |
bool | cosmicandleptonVeto () |
bool | cosmicandleptonVeto () |
vector< int > | D0modes () |
vector< int > | D0modes () |
vector< int > | D0modes () |
vector< int > | D0modes () |
vector< int > | Dpmodes () |
vector< int > | Dpmodes () |
vector< int > | Dpmodes () |
vector< int > | Dpmodes () |
vector< int > | Dsmodes () |
vector< int > | Dsmodes () |
vector< int > | Dsmodes () |
vector< int > | Dsmodes () |
EvtRecDTagCol::iterator | dtag1 () |
EvtRecDTagCol::iterator | dtag1 () |
EvtRecDTagCol::iterator | dtag1 () |
EvtRecDTagCol::iterator | dtag1 () |
EvtRecDTagCol::iterator | dtag2 () |
EvtRecDTagCol::iterator | dtag2 () |
EvtRecDTagCol::iterator | dtag2 () |
EvtRecDTagCol::iterator | dtag2 () |
DTagTool () | |
DTagTool () | |
DTagTool () | |
DTagTool () | |
bool | findDTag (int mode1, int tagcharm1, int mode2, int tagcharm2) |
bool | findDTag (int mode1, int mode2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, int tagcharm1, EvtRecDTag::DecayMode mode2, int tagcharm2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, EvtRecDTag::DecayMode mode2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, int tagcharm1, EvtRecDTag::DecayMode mode2, int tagcharm2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, int tagcharm1, EvtRecDTag::DecayMode mode2, int tagcharm2) |
bool | findDTag (int mode1, int tagcharm1, int mode2, int tagcharm2) |
bool | findDTag (int mode1, int mode2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, int tagcharm1, EvtRecDTag::DecayMode mode2, int tagcharm2) |
bool | findDTag (EvtRecDTag::DecayMode mode1, EvtRecDTag::DecayMode mode2) |
bool | findSTag (int mode) |
bool | findSTag (int mode, int tagcharm) |
bool | findSTag (EvtRecDTag::DecayMode mode) |
bool | findSTag (EvtRecDTag::DecayMode mode, int tagcharm) |
bool | findSTag (EvtRecDTag::DecayMode mode, int tagcharm) |
bool | findSTag (EvtRecDTag::DecayMode mode, int tagcharm) |
bool | findSTag (int mode) |
bool | findSTag (int mode, int tagcharm) |
bool | findSTag (EvtRecDTag::DecayMode mode) |
bool | findSTag (EvtRecDTag::DecayMode mode, int tagcharm) |
bool | isDTagListEmpty () |
bool | isDTagListEmpty () |
bool | isDTagListEmpty () |
bool | isDTagListEmpty () |
bool | isElectron (EvtRecTrack *trk) |
bool | isElectron (EvtRecTrack *trk) |
bool | isGoodShower (EvtRecTrack *trk) |
bool | isGoodShower (EvtRecTrack *trk) |
bool | isGoodTrack (EvtRecTrack *trk) |
bool | isGoodTrack (EvtRecTrack *trk) |
bool | isKaon (EvtRecTrack *trk) |
bool | isKaon (EvtRecTrack *trk) |
bool | isKaon (EvtRecTrack *trk) |
bool | isKaon (EvtRecTrack *trk) |
bool | isMuon (EvtRecTrack *trk) |
bool | isMuon (EvtRecTrack *trk) |
bool | isPion (EvtRecTrack *trk) |
bool | isPion (EvtRecTrack *trk) |
bool | isPion (EvtRecTrack *trk) |
bool | isPion (EvtRecTrack *trk) |
vector< int > | mode (int decaymode) |
vector< int > | mode (EvtRecDTag::DecayMode decaymode) |
vector< int > | mode (EvtRecDTag::DecayMode decaymode) |
vector< int > | mode (EvtRecDTag::DecayMode decaymode) |
vector< int > | mode (int decaymode) |
vector< int > | mode (EvtRecDTag::DecayMode decaymode) |
EvtRecDTagCol::iterator | modes_begin () |
EvtRecDTagCol::iterator | modes_begin () |
EvtRecDTagCol::iterator | modes_begin () |
EvtRecDTagCol::iterator | modes_begin () |
EvtRecDTagCol::iterator | modes_end () |
EvtRecDTagCol::iterator | modes_end () |
EvtRecDTagCol::iterator | modes_end () |
EvtRecDTagCol::iterator | modes_end () |
void | name () |
void | name () |
void | name () |
void | name () |
void | operator<< (EvtRecDTagCol::iterator iter) |
void | operator<< (EvtRecDTagCol::iterator iter) |
void | operator<< (EvtRecDTagCol::iterator iter) |
void | operator<< (EvtRecDTagCol::iterator iter) |
void | setPID (bool pid) |
void | setPID (bool pid) |
bool | shareTracks (EvtRecDTagCol::iterator iter1, EvtRecDTagCol::iterator iter2) |
bool | shareTracks (EvtRecDTagCol::iterator iter1, EvtRecDTagCol::iterator iter2) |
EvtRecDTagCol::iterator | stag () |
EvtRecDTagCol::iterator | stag () |
EvtRecDTagCol::iterator | stag () |
EvtRecDTagCol::iterator | stag () |
~DTagTool () | |
~DTagTool () | |
~DTagTool () | |
~DTagTool () | |
Protected Member Functions | |
IDataProviderSvc * | eventSvc () |
IDataProviderSvc * | eventSvc () |
IDataProviderSvc * | eventSvc () |
IDataProviderSvc * | eventSvc () |
Private Attributes | |
EvtRecTrackIterator | m_chargebegin |
EvtRecTrackIterator | m_chargeend |
vector< int > | m_d0modes |
vector< int > | m_d0modes |
vector< int > | m_d0modes |
vector< int > | m_d0modes |
vector< int > | m_dpmodes |
vector< int > | m_dpmodes |
vector< int > | m_dpmodes |
vector< int > | m_dpmodes |
vector< int > | m_dsmodes |
vector< int > | m_dsmodes |
vector< int > | m_dsmodes |
vector< int > | m_dsmodes |
IDataProviderSvc * | m_evtSvc |
IDataProviderSvc * | m_evtSvc |
IDataProviderSvc * | m_evtSvc |
IDataProviderSvc * | m_evtSvc |
bool | m_isdtaglistempty |
EvtRecDTagCol::iterator | m_iterbegin |
EvtRecDTagCol::iterator | m_iterdtag1 |
EvtRecDTagCol::iterator | m_iterdtag2 |
EvtRecDTagCol::iterator | m_iterend |
EvtRecDTagCol::iterator | m_iterstag |
bool | m_pid |
EvtRecTrackIterator | m_showerbegin |
EvtRecTrackIterator | m_showerend |
|
00033 : m_evtSvc(0), m_iterbegin(0), m_iterend(0), 00034 m_iterstag(0), m_iterdtag1(0), m_iterdtag2(0), 00035 m_chargebegin(0),m_chargeend(0),m_showerbegin(0),m_showerend(0){ 00036 00037 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), "/Event/EvtRec/EvtRecEvent"); 00038 if ( ! evtRecEvent ) { 00039 cout << MSG::FATAL << "Could not find EvtRecEvent" << endl; 00040 exit(1); 00041 } 00042 00043 SmartDataPtr<EvtRecTrackCol> evtRecTrackCol( eventSvc(), "/Event/EvtRec/EvtRecTrackCol"); 00044 if ( ! evtRecTrackCol ) { 00045 cout << MSG::FATAL << "Could not find EvtRecTrackCol" << endl; 00046 exit(1); 00047 } 00048 00049 m_chargebegin=evtRecTrackCol->begin(); 00050 m_chargeend=evtRecTrackCol->begin()+evtRecEvent->totalCharged(); 00051 m_showerbegin=evtRecTrackCol->begin()+evtRecEvent->totalCharged(); 00052 m_showerend=evtRecTrackCol->begin()+evtRecEvent->totalTracks(); 00053 00054 SmartDataPtr<EvtRecDTagCol> evtRecDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol); 00055 if ( ! evtRecDTagCol ) { 00056 cout << "Could not find EvtRecDTagCol" << endl; 00057 exit(1); 00058 } 00059 00060 m_iterbegin=evtRecDTagCol->begin(); 00061 m_iterend=evtRecDTagCol->end(); 00062 00063 if(evtRecDTagCol->size() > 0) 00064 m_isdtaglistempty=false; 00065 else 00066 m_isdtaglistempty=true; 00067 00068 //set initial pid requirement 00069 m_pid=false; 00070 00071 00072 //fill d0, dp, ds modes seprately 00073 int index=0; 00074 for(EvtRecDTagCol::iterator iter=m_iterbegin; iter != m_iterend; iter++){ 00075 00076 if( (int)( (*iter)->decayMode())< 200 ) 00077 m_d0modes.push_back( index ); 00078 else if( (int)( (*iter)->decayMode())< 400 ) 00079 m_dpmodes.push_back( index ); 00080 else if( (int)( (*iter)->decayMode())< 1000 ) 00081 m_dsmodes.push_back( index ); 00082 00083 index++; 00084 } 00085 00086 }
|
|
00096 { 00097 00098 m_d0modes.clear(); 00099 m_dpmodes.clear(); 00100 m_dsmodes.clear(); 00101 00102 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00088 { 00089 00090 m_d0modes.clear(); 00091 m_dpmodes.clear(); 00092 m_dsmodes.clear(); 00093 00094 }
|
|
|
|
00801 { 00802 00803 //good track list 00804 vector<EvtRecTrackIterator> iGood; 00805 iGood.clear(); 00806 for(EvtRecTrackIterator iter=m_chargebegin; iter!= m_chargeend; iter++){ 00807 if(isGoodTrack(*iter)) 00808 iGood.push_back(iter); 00809 } 00810 00811 if(iGood.size() != 2) 00812 return true; 00813 00814 //cosmic veto 00815 double time1=-99,time2=-99; 00816 for(vector<EvtRecTrackIterator>::size_type i=0;i<2;i++){ 00817 if( (*iGood[i])->isTofTrackValid() ){ 00818 SmartRefVector<RecTofTrack> tofTrkCol= (*iGood[i])->tofTrack(); 00819 SmartRefVector<RecTofTrack>::iterator iter_tof=tofTrkCol.begin(); 00820 00821 for(;iter_tof!=tofTrkCol.end();iter_tof++){ 00822 TofHitStatus* status =new TofHitStatus; 00823 status->setStatus( (*iter_tof)->status() ); 00824 if(status->is_cluster()){ 00825 if(i==0) 00826 time1=(*iter_tof)->tof(); 00827 else 00828 time2=(*iter_tof)->tof(); 00829 } 00830 delete status; 00831 } 00832 } 00833 } 00834 if( time1!=-99 && time2!=-99 && fabs(time1-time2)>5) 00835 return false; 00836 00837 //rad bhabha veto 00838 if(isElectron( *iGood[0]) && isElectron(*iGood[1])) 00839 return false; 00840 00841 //rad dimu veto 00842 if(isMuon( *iGood[0]) && isMuon(*iGood[1])) 00843 return false; 00844 00845 return true; 00846 }
|
|
00036 { return m_d0modes;}
|
|
00039 { return m_d0modes;}
|
|
00039 { return m_d0modes;}
|
|
00036 { return m_d0modes;}
|
|
00037 { return m_dpmodes;}
|
|
00040 { return m_dpmodes;}
|
|
00040 { return m_dpmodes;}
|
|
00037 { return m_dpmodes;}
|
|
00038 { return m_dsmodes;}
|
|
00041 { return m_dsmodes;}
|
|
00041 { return m_dsmodes;}
|
|
00038 { return m_dsmodes;}
|
|
00056 { return m_iterdtag1;}
|
|
00050 { return m_iterdtag1;}
|
|
00050 { return m_iterdtag1;}
|
|
00056 { return m_iterdtag1;}
|
|
00057 { return m_iterdtag2;}
|
|
00051 { return m_iterdtag2;}
|
|
00051 { return m_iterdtag2;}
|
|
00057 { return m_iterdtag2;}
|
|
|
|
|
|
|
|
00874 { 00875 00876 if(m_evtSvc == 0){ 00877 00878 StatusCode sc = Gaudi::svcLocator()->service ( "EventDataSvc", m_evtSvc, true); 00879 if( sc.isFailure() ) { 00880 assert(false); 00881 } 00882 00883 } 00884 00885 return m_evtSvc; 00886 00887 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00575 { 00576 00577 if(tagcharm1*tagcharm2>0){ 00578 cout<<"double tagging warning! two modes can't have same nonzero charmness"<<endl; 00579 return false; 00580 } 00581 00582 //define D candidate mass 00583 double mDcand=0; 00584 if( (int)mode1 < 200 && (int)mode2 < 200) 00585 mDcand = 1.8645; 00586 else if ( (int)mode1 < 400 && (int)mode2 < 400) 00587 mDcand = 1.8693; 00588 else if ( (int)mode1 < 1000 && (int)mode2 < 1000) 00589 mDcand = 1.9682; 00590 else{ 00591 cout<<"double tag modes are not from same particle ! "<<endl; 00592 return false; 00593 } 00594 00595 00596 vector<int> igood1, igood2; 00597 igood1.clear(),igood2.clear(); 00598 int index=0; 00599 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00600 00601 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00602 int iter_mode=(*iter_dtag)->decayMode(); 00603 int iter_charm=(*iter_dtag)->charm(); 00604 int iter_type=(*iter_dtag)->type(); 00605 00606 if(m_pid){ 00607 if( iter_mode == mode1 && iter_charm == tagcharm1 && iter_type==1 ) 00608 igood1.push_back(index); 00609 00610 if( iter_mode == mode2 && iter_charm == tagcharm2 && iter_type==1) 00611 igood2.push_back(index); 00612 } 00613 else{ 00614 if( iter_mode == mode1 && iter_charm == tagcharm1) 00615 igood1.push_back(index); 00616 00617 if( iter_mode == mode2 && iter_charm == tagcharm2) 00618 igood2.push_back(index); 00619 } 00620 00621 00622 index++; 00623 } 00624 00625 //look for the best pair of double-tagged event 00626 00627 bool isDtcand=false; 00628 double deltaM=1.00; 00629 int index_i=0, index_j=0; 00630 EvtRecDTagCol::iterator iter_i, iter_j; 00631 00632 for(int i=0; i<igood1.size(); i++){ 00633 00634 iter_i=m_iterbegin+igood1[i]; 00635 double mass_i=(*iter_i)->mBC(); 00636 int charm_i=(*iter_i)->charm(); 00637 for(int j=0;j<igood2.size();j++){ 00638 iter_j=m_iterbegin+igood2[j]; 00639 double mass_j=(*iter_j)->mBC(); 00640 int charm_j=(*iter_j)->charm(); 00641 if( charm_i*charm_j>0 || igood2[j] == igood1[i] ) continue; 00642 00643 if(shareTracks(iter_i,iter_j)) continue; 00644 00645 if( fabs(0.5*(mass_i+mass_j)-mDcand) < deltaM){ 00646 deltaM = fabs(0.5*(mass_i+mass_j)-mDcand); 00647 index_i = i; 00648 index_j = j; 00649 isDtcand = true; 00650 } 00651 00652 } //end of j loop 00653 } //end of i loop 00654 00655 if(isDtcand){ 00656 m_iterdtag1=m_iterbegin+igood1[index_i]; 00657 m_iterdtag2=m_iterbegin+igood2[index_j]; 00658 } 00659 00660 return isDtcand; 00661 00662 } //end of findDtag
|
|
00475 { 00476 00477 int tagcharm1= (mode1<10 || mode1>=200)?+1:0; 00478 int tagcharm2= (mode2<10 || mode2>=200)?-1:0; 00479 00480 if(tagcharm1*tagcharm2>0){ 00481 cout<<"double tagging warning! two modes can't have same nonzero charmness"<<endl; 00482 return false; 00483 } 00484 00485 //define D candidate mass 00486 double mDcand=0; 00487 if( (int)mode1 < 200 && (int)mode2 < 200) 00488 mDcand = 1.8645; 00489 else if ( (int)mode1 < 400 && (int)mode2 < 400) 00490 mDcand = 1.8693; 00491 else if ( (int)mode1 < 1000 && (int)mode2 < 1000) 00492 mDcand = 1.9682; 00493 else{ 00494 cout<<"double tag modes are not from same particle ! "<<endl; 00495 return false; 00496 } 00497 00498 00499 vector<int> igood1, igood2; 00500 igood1.clear(),igood2.clear(); 00501 int index=0; 00502 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00503 00504 //charge conjucation considered 00505 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00506 int iter_mode=(*iter_dtag)->decayMode(); 00507 int iter_charm=(*iter_dtag)->charm(); 00508 int iter_type=(*iter_dtag)->type(); 00509 00510 if(m_pid){ 00511 if( iter_mode == mode1 && iter_charm == tagcharm1 && iter_type==1 ) 00512 igood1.push_back(index); 00513 if( tagcharm1!=0 && iter_mode == mode1 && iter_charm == -tagcharm1 && iter_type==1 ) 00514 igood1.push_back(index); 00515 00516 if( iter_mode == mode2 && iter_charm == tagcharm2 && iter_type==1 ) 00517 igood2.push_back(index); 00518 if( tagcharm2!=0 && iter_mode == mode2 && iter_charm == -tagcharm2 && iter_type==1 ) 00519 igood2.push_back(index); 00520 } 00521 else{ 00522 if( iter_mode == mode1 && iter_charm == tagcharm1 ) 00523 igood1.push_back(index); 00524 if( tagcharm1!=0 && iter_mode == mode1 && iter_charm == -tagcharm1 ) 00525 igood1.push_back(index); 00526 00527 if( iter_mode == mode2 && iter_charm == tagcharm2 ) 00528 igood2.push_back(index); 00529 if( tagcharm2!=0 && iter_mode == mode2 && iter_charm == -tagcharm2 ) 00530 igood2.push_back(index); 00531 } 00532 00533 index++; 00534 } 00535 00536 //look for the best pair of double-tagged event 00537 00538 bool isDtcand=false; 00539 double deltaM=1.00; 00540 int index_i=0, index_j=0; 00541 EvtRecDTagCol::iterator iter_i, iter_j; 00542 00543 for(int i=0; i<igood1.size(); i++){ 00544 00545 iter_i=m_iterbegin+igood1[i]; 00546 double mass_i=(*iter_i)->mBC(); 00547 int charm_i=(*iter_i)->charm(); 00548 for(int j=0;j<igood2.size();j++){ 00549 iter_j=m_iterbegin+igood2[j]; 00550 double mass_j=(*iter_j)->mBC(); 00551 int charm_j=(*iter_j)->charm(); 00552 if( charm_i*charm_j>0 || igood2[j] == igood1[i] ) continue; 00553 00554 if(shareTracks(iter_i,iter_j)) continue; 00555 00556 if( fabs(0.5*(mass_i+mass_j)-mDcand) < deltaM){ 00557 deltaM = fabs(0.5*(mass_i+mass_j)-mDcand); 00558 index_i = i; 00559 index_j = j; 00560 isDtcand = true; 00561 } 00562 00563 } //end of j loop 00564 } //end of i loop 00565 00566 if(isDtcand){ 00567 m_iterdtag1=m_iterbegin+igood1[index_i]; 00568 m_iterdtag2=m_iterbegin+igood2[index_j]; 00569 } 00570 00571 return isDtcand; 00572 }
|
|
00385 { 00386 00387 if(tagcharm1*tagcharm2>0){ 00388 cout<<"double tagging warning! two modes can't have same nonzero charmness"<<endl; 00389 return false; 00390 } 00391 00392 //define D candidate mass 00393 double mDcand=0; 00394 if( (int)mode1 < 200 && (int)mode2 < 200) 00395 mDcand = 1.8645; 00396 else if ( (int)mode1 < 400 && (int)mode2 < 400) 00397 mDcand = 1.8693; 00398 else if ( (int)mode1 < 1000 && (int)mode2 < 1000) 00399 mDcand = 1.9682; 00400 else{ 00401 cout<<"double tag modes are not from same particle ! "<<endl; 00402 return false; 00403 } 00404 00405 00406 vector<int> igood1, igood2; 00407 igood1.clear(),igood2.clear(); 00408 int index=0; 00409 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00410 00411 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00412 int iter_mode=(*iter_dtag)->decayMode(); 00413 int iter_charm=(*iter_dtag)->charm(); 00414 int iter_type=(*iter_dtag)->type(); 00415 00416 if(m_pid){ 00417 if( iter_mode == mode1 && iter_charm == tagcharm1 && iter_type==1 ) 00418 igood1.push_back(index); 00419 00420 if( iter_mode == mode2 && iter_charm == tagcharm2 && iter_type==1) 00421 igood2.push_back(index); 00422 } 00423 else{ 00424 if( iter_mode == mode1 && iter_charm == tagcharm1) 00425 igood1.push_back(index); 00426 00427 if( iter_mode == mode2 && iter_charm == tagcharm2) 00428 igood2.push_back(index); 00429 } 00430 00431 index++; 00432 } 00433 00434 //look for the best pair of double-tagged event 00435 00436 bool isDtcand=false; 00437 double deltaM=1.00; 00438 int index_i=0, index_j=0; 00439 EvtRecDTagCol::iterator iter_i, iter_j; 00440 00441 for(int i=0; i<igood1.size(); i++){ 00442 00443 iter_i=m_iterbegin+igood1[i]; 00444 double mass_i=(*iter_i)->mBC(); 00445 int charm_i=(*iter_i)->charm(); 00446 for(int j=0;j<igood2.size();j++){ 00447 iter_j=m_iterbegin+igood2[j]; 00448 double mass_j=(*iter_j)->mBC(); 00449 int charm_j=(*iter_j)->charm(); 00450 if( charm_i*charm_j>0 || igood2[j] == igood1[i] ) continue; 00451 00452 if(shareTracks(iter_i,iter_j)) continue; 00453 00454 if( fabs(0.5*(mass_i+mass_j)-mDcand) < deltaM){ 00455 deltaM = fabs(0.5*(mass_i+mass_j)-mDcand); 00456 index_i = i; 00457 index_j = j; 00458 isDtcand = true; 00459 } 00460 00461 } //end of j loop 00462 } //end of i loop 00463 00464 if(isDtcand){ 00465 m_iterdtag1=m_iterbegin+igood1[index_i]; 00466 m_iterdtag2=m_iterbegin+igood2[index_j]; 00467 } 00468 00469 return isDtcand; 00470 00471 } //end of findDtag
|
|
00284 { 00285 00286 int tagcharm1= (mode1<10 || mode1>=200)?+1:0; 00287 int tagcharm2= (mode2<10 || mode2>=200)?-1:0; 00288 00289 if(tagcharm1*tagcharm2>0){ 00290 cout<<"double tagging warning! two modes can't have same nonzero charmness"<<endl; 00291 return false; 00292 } 00293 00294 //define D candidate mass 00295 double mDcand=0; 00296 if( (int)mode1 < 200 && (int)mode2 < 200) 00297 mDcand = 1.8645; 00298 else if ( (int)mode1 < 400 && (int)mode2 < 400) 00299 mDcand = 1.8693; 00300 else if ( (int)mode1 < 1000 && (int)mode2 < 1000) 00301 mDcand = 1.9682; 00302 else{ 00303 cout<<"double tag modes are not from same particle ! "<<endl; 00304 return false; 00305 } 00306 00307 00308 vector<int> igood1, igood2; 00309 igood1.clear(),igood2.clear(); 00310 int index=0; 00311 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00312 00313 //charge conjucation considered 00314 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00315 int iter_mode=(*iter_dtag)->decayMode(); 00316 int iter_charm=(*iter_dtag)->charm(); 00317 int iter_type=(*iter_dtag)->type(); 00318 00319 if(m_pid){ 00320 if( iter_mode == mode1 && iter_charm == tagcharm1 && iter_type==1 ) 00321 igood1.push_back(index); 00322 if( tagcharm1!=0 && iter_mode == mode1 && iter_charm == -tagcharm1 && iter_type==1 ) 00323 igood1.push_back(index); 00324 00325 if( iter_mode == mode2 && iter_charm == tagcharm2 && iter_type==1 ) 00326 igood2.push_back(index); 00327 if( tagcharm2!=0 && iter_mode == mode2 && iter_charm == -tagcharm2 && iter_type==1 ) 00328 igood2.push_back(index); 00329 } 00330 else{ 00331 if( iter_mode == mode1 && iter_charm == tagcharm1 ) 00332 igood1.push_back(index); 00333 if( tagcharm1!=0 && iter_mode == mode1 && iter_charm == -tagcharm1 ) 00334 igood1.push_back(index); 00335 00336 if( iter_mode == mode2 && iter_charm == tagcharm2 ) 00337 igood2.push_back(index); 00338 if( tagcharm2!=0 && iter_mode == mode2 && iter_charm == -tagcharm2 ) 00339 igood2.push_back(index); 00340 } 00341 00342 00343 index++; 00344 } 00345 00346 //look for the best pair of double-tagged event 00347 00348 bool isDtcand=false; 00349 double deltaM=1.00; 00350 int index_i=0, index_j=0; 00351 EvtRecDTagCol::iterator iter_i, iter_j; 00352 00353 for(int i=0; i<igood1.size(); i++){ 00354 00355 iter_i=m_iterbegin+igood1[i]; 00356 double mass_i=(*iter_i)->mBC(); 00357 int charm_i=(*iter_i)->charm(); 00358 for(int j=0;j<igood2.size();j++){ 00359 iter_j=m_iterbegin+igood2[j]; 00360 double mass_j=(*iter_j)->mBC(); 00361 int charm_j=(*iter_j)->charm(); 00362 if( charm_i*charm_j>0 || igood2[j] == igood1[i] ) continue; 00363 00364 if(shareTracks(iter_i,iter_j)) continue; 00365 00366 if( fabs(0.5*(mass_i+mass_j)-mDcand) < deltaM){ 00367 deltaM = fabs(0.5*(mass_i+mass_j)-mDcand); 00368 index_i = i; 00369 index_j = j; 00370 isDtcand = true; 00371 } 00372 00373 } //end of j loop 00374 } //end of i loop 00375 00376 if(isDtcand){ 00377 m_iterdtag1=m_iterbegin+igood1[index_i]; 00378 m_iterdtag2=m_iterbegin+igood2[index_j]; 00379 } 00380 00381 return isDtcand; 00382 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00247 { 00248 00249 bool isStcand=false; 00250 double de_min=1; 00251 00252 //loop over the dtag list 00253 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00254 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00255 00256 if(m_pid){ 00257 if( (*iter_dtag)->type()!=1 || (*iter_dtag)->decayMode() != mode ) 00258 continue; 00259 } 00260 else{ 00261 if( (*iter_dtag)->decayMode() != mode ) 00262 continue; 00263 } 00264 00265 if(fabs((*iter_dtag)->deltaE())<fabs(de_min)){ 00266 isStcand=true; 00267 m_iterstag=iter_dtag; 00268 de_min=(*iter_dtag)->deltaE(); 00269 } 00270 00271 } //end of looping over the entire DTag list 00272 00273 return isStcand; 00274 00275 }//end of stag
|
|
00217 { 00218 00219 bool isStcand=false; 00220 double de_min=1; 00221 00222 //loop over the dtag list 00223 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00224 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00225 00226 if(m_pid){ 00227 if( (*iter_dtag)->type()!=1 || (*iter_dtag)->decayMode() != mode || (*iter_dtag)->charm() != tagcharm ) 00228 continue; 00229 } 00230 else{ 00231 if( (*iter_dtag)->decayMode() != mode || (*iter_dtag)->charm() != tagcharm ) 00232 continue; 00233 } 00234 if(fabs((*iter_dtag)->deltaE())<fabs(de_min)){ 00235 isStcand=true; 00236 m_iterstag=iter_dtag; 00237 de_min=(*iter_dtag)->deltaE(); 00238 } 00239 00240 } //end of looping over the entire DTag list 00241 00242 return isStcand; 00243 00244 }//end of stag
|
|
00185 { 00186 00187 bool isStcand=false; 00188 double de_min=1; 00189 00190 //loop over the dtag list 00191 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00192 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00193 00194 if(m_pid){ 00195 if( (*iter_dtag)->type()!=1 || (*iter_dtag)->decayMode() != mode ) 00196 continue; 00197 } 00198 else{ 00199 if( (*iter_dtag)->decayMode() != mode ) 00200 continue; 00201 } 00202 00203 if(fabs((*iter_dtag)->deltaE())<fabs(de_min)){ 00204 isStcand=true; 00205 m_iterstag=iter_dtag; 00206 de_min=(*iter_dtag)->deltaE(); 00207 } 00208 00209 } //end of looping over the entire DTag list 00210 00211 return isStcand; 00212 00213 }//end of stag
|
|
00152 { 00153 00154 bool isStcand=false; 00155 double de_min=1; 00156 00157 //loop over the dtag list 00158 EvtRecDTagCol::iterator iter_dtag=m_iterbegin; 00159 for ( ; iter_dtag != m_iterend; iter_dtag++){ 00160 00161 if(m_pid){ 00162 if( (*iter_dtag)->type()!=1 || (*iter_dtag)->decayMode() != mode || (*iter_dtag)->charm() != tagcharm ) 00163 continue; 00164 } 00165 else{ 00166 if( (*iter_dtag)->decayMode() != mode || (*iter_dtag)->charm() != tagcharm ) 00167 continue; 00168 } 00169 00170 if(fabs((*iter_dtag)->deltaE())<fabs(de_min)){ 00171 isStcand=true; 00172 m_iterstag=iter_dtag; 00173 de_min=(*iter_dtag)->deltaE(); 00174 } 00175 00176 00177 } //end of looping over the entire DTag list 00178 00179 return isStcand; 00180 00181 }//end of stag
|
|
00028 { return m_isdtaglistempty; }
|
|
00033 { return m_isdtaglistempty; }
|
|
00033 { return m_isdtaglistempty; }
|
|
00028 { return m_isdtaglistempty; }
|
|
|
|
00718 { 00719 double dedxchi=-99; 00720 double Eemc=0; 00721 double ptrk=-99; 00722 00723 if(trk->isMdcDedxValid()){ 00724 RecMdcDedx* dedxTrk=trk->mdcDedx(); 00725 dedxchi=dedxTrk->chiE(); 00726 } 00727 00728 if( trk->isMdcKalTrackValid() ){ 00729 RecMdcKalTrack *mdcKalTrk = trk->mdcKalTrack(); 00730 ptrk= mdcKalTrk->p(); 00731 } 00732 if( trk->isEmcShowerValid()){ 00733 RecEmcShower *emcTrk = trk->emcShower(); 00734 Eemc=emcTrk->energy(); 00735 } 00736 00737 double eop = Eemc/ptrk; 00738 00739 if( fabs(eop)>0.8 && fabs(dedxchi)<5) 00740 return true; 00741 else 00742 return false; 00743 }
|
|
|
|
00787 { 00788 RecEmcShower *emcTrk = trk->emcShower(); 00789 double eraw = emcTrk->energy(); 00790 double time = emcTrk->time(); 00791 double costh = cos(emcTrk->theta()); 00792 if( ( 00793 (fabs(costh)<0.80 && eraw>0.025) 00794 || (fabs(costh)>0.84 && eraw>0.05) 00795 ) && time>0 && time<14 ) 00796 return true; 00797 00798 return false; 00799 }
|
|
|
|
00757 { 00758 Hep3Vector xorigin(0,0,0); 00759 IVertexDbSvc* vtxsvc; 00760 Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc); 00761 if(vtxsvc->isVertexValid()){ 00762 double* dbv = vtxsvc->PrimaryVertex(); 00763 double* vv = vtxsvc->SigmaPrimaryVertex(); 00764 xorigin.setX(dbv[0]); 00765 xorigin.setY(dbv[1]); 00766 xorigin.setZ(dbv[2]); 00767 } 00768 00769 RecMdcKalTrack *mdcKalTrk = trk->mdcKalTrack(); 00770 mdcKalTrk->setPidType(RecMdcKalTrack::pion); 00771 HepVector a = mdcKalTrk->getZHelix(); 00772 HepSymMatrix Ea = mdcKalTrk->getZError(); 00773 HepPoint3D pivot(0.,0.,0.); 00774 HepPoint3D IP(xorigin[0],xorigin[1],xorigin[2]); 00775 VFHelix helixp(pivot,a,Ea); 00776 helixp.pivot(IP); 00777 HepVector vec = helixp.a(); 00778 double vrl = vec[0]; 00779 double vzl = vec[3]; 00780 double costheta = cos(mdcKalTrk->theta()); 00781 00782 if(fabs(vrl)<1 && fabs(vzl)<10 && fabs(costheta)<0.93) 00783 return true; 00784 return false; 00785 }
|
|
|
|
|
|
|
|
00703 { 00704 SmartRefVector<EvtRecTrack> kaonid=(*m_iterbegin)->kaonId(); 00705 00706 for(int i=0; i < kaonid.size() ;i++){ 00707 if( trk->trackId() == kaonid[i]->trackId()){ 00708 return true; 00709 break; 00710 } 00711 } 00712 00713 return false; 00714 }
|
|
|
|
00745 { 00746 00747 double depth=-99; 00748 if( trk->isMucTrackValid() ){ 00749 RecMucTrack* mucTrk=trk->mucTrack(); 00750 depth=mucTrk->depth(); 00751 } 00752 if(depth>=5) 00753 return true; 00754 return false; 00755 }
|
|
|
|
|
|
|
|
00688 { 00689 00690 SmartRefVector<EvtRecTrack> pionid=(*m_iterbegin)->pionId(); 00691 00692 for(int i=0; i < pionid.size() ;i++){ 00693 if( trk->trackId() == pionid[i]->trackId()){ 00694 return true; 00695 break; 00696 } 00697 } 00698 00699 return false; 00700 }
|
|
|
|
|
|
|
|
|
|
00127 { 00128 00129 vector<int> mode; 00130 int index=0; 00131 for(EvtRecDTagCol::iterator iter=m_iterbegin; iter != m_iterend; iter++){ 00132 00133 if(m_pid){ 00134 if( (*iter)->decayMode() == decaymode && (*iter)->type() == 1 ) 00135 mode.push_back( index ); 00136 } 00137 else{ 00138 if( (*iter)->decayMode() == decaymode ) 00139 mode.push_back( index ); 00140 } 00141 00142 index++; 00143 } 00144 00145 return mode; 00146 }
|
|
00105 { 00106 00107 vector<int> mode; 00108 int index=0; 00109 for(EvtRecDTagCol::iterator iter=m_iterbegin; iter != m_iterend; iter++){ 00110 00111 if(m_pid){ 00112 if( (*iter)->decayMode() == decaymode && (*iter)->type() == 1 ) 00113 mode.push_back( index ); 00114 } 00115 else{ 00116 if( (*iter)->decayMode() == decaymode ) 00117 mode.push_back( index ); 00118 } 00119 00120 index++; 00121 } 00122 00123 return mode; 00124 }
|
|
00031 { return m_iterbegin;}
|
|
00036 { return m_iterbegin;}
|
|
00036 { return m_iterbegin;}
|
|
00031 { return m_iterbegin;}
|
|
00032 { return m_iterend;}
|
|
00037 { return m_iterend;}
|
|
00037 { return m_iterend;}
|
|
00032 { return m_iterend;}
|
|
00073 { cout<<" I am the dtag tool"<<endl;}
|
|
00060 { cout<<" I am the dtag tool"<<endl;}
|
|
00060 { cout<<" I am the dtag tool"<<endl;}
|
|
00073 { cout<<" I am the dtag tool"<<endl;}
|
|
|
|
|
|
|
|
00670 { 00671 00672 cout<<" print mode:"<< (*iter)->decayMode()<<endl; 00673 cout<<"beam energy is:"<< (*iter)->beamE()<<endl; 00674 cout<<"mBC is:"<< (*iter)->mBC()<<endl; 00675 cout<<"deltaE is:"<< (*iter)->deltaE()<<endl; 00676 cout<<"inv mass is:"<< (*iter)->mass()<<endl; 00677 cout<<"charge is:"<< (*iter)->charge()<<endl; 00678 cout<<"charm is:"<< (*iter)->charm()<<endl; 00679 cout<<"num of children is:"<< (*iter)->numOfChildren()<<endl; 00680 00681 cout<<"found "<< (*iter)->tracks().size()<<" same side tracks."<<endl; 00682 cout<<"found "<< (*iter)->otherTracks().size()<<" other side tracks."<<endl; 00683 cout<<"found "<< (*iter)->showers().size()<<" same side showers."<<endl; 00684 cout<<"found "<< (*iter)->otherShowers().size()<<" other side showers."<<endl; 00685 00686 }
|
|
00034 {m_pid = pid;}
|
|
00034 {m_pid = pid;}
|
|
|
|
00848 { 00849 00850 SmartRefVector<EvtRecTrack> tracks1=(*iter1)->tracks(); 00851 SmartRefVector<EvtRecTrack> showers1=(*iter1)->showers(); 00852 SmartRefVector<EvtRecTrack> tracks2=(*iter2)->tracks(); 00853 SmartRefVector<EvtRecTrack> showers2=(*iter2)->showers(); 00854 00855 //charged tracks 00856 for(int i=0; i<tracks1.size(); i++){ 00857 for(int j=0; j<tracks2.size(); j++){ 00858 if(tracks1[i]==tracks2[j]) 00859 return true; 00860 } 00861 } 00862 00863 //neutral showers 00864 for(int i=0; i<showers1.size(); i++){ 00865 for(int j=0; j<showers2.size(); j++){ 00866 if(showers1[i]==showers2[j]) 00867 return true; 00868 } 00869 } 00870 00871 return false; 00872 }
|
|
00055 { return m_iterstag;}
|
|
00049 { return m_iterstag;}
|
|
00049 { return m_iterstag;}
|
|
00055 { return m_iterstag;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|