123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- #include "StHbtMaker/Cut/gregsProtonTrackCut.h"
- #include <sstream>
- #ifdef __ROOT__
- ClassImp(gregsProtonTrackCut)
- #endif
- //_________________
- gregsProtonTrackCut::gregsProtonTrackCut() { //Constructor
- mNTracksPassed = 0;
- mNTracksFailed = 0;
- mSelType = 3;
- mType = 1;
- mCharge = 0;
- mNHits[0] = 14; mNHits[1] = 46;
- mFlag[0] = 0; mFlag[1] = 1000;
- mAntiSplit = 0.; //nHitsFit/nHitsPoss
- mNHitsFit[0] = 0; mNHitsFit[1] = 46;
- mP[0] = 0.15; mP[1] = 1.5;
- mPt[0] = -1e9; mPt[1] = +1e9;
- mPx[0] = -1e9; mPx[1] = +1e9;
- mPy[0] = -1e9; mPy[1] = +1e9;
- mPz[0] = -1e9; mPz[1] = +1e9;
- mRapidity[0] = -1e9; mRapidity[1] = +1e9;
- mEta[0] = -1.; mEta[1] = 1.;
- mDCA[0] = -0.01; mDCA[0] = 3.;
- mDCAGlobal[0] = -0.01; mDCAGlobal[1] = 3.;
- mTpcMomentum[0] = 0.15; mTpcMomentum[1] = 0.55;
- mTpcNSigmaElectron[0] = -2.; mTpcNSigmaElectron[1] = 2.;
- mTpcNSigmaPion[0] = -2.; mTpcNSigmaPion[1] = 2.;
- mTpcNSigmaKaon[0] = -2.; mTpcNSigmaKaon[1] = 2.;
- mTpcNSigmaProton[0] = -2.; mTpcNSigmaProton[1] = 2.;
- mTofMomentum[0] = 0.15; mTofMomentum[1] = 1.45;
- mTofMassSqr[0] = 0.2; mTofMassSqr[1] = 0.32;
- mTofInvBetaDiff[0] = -1e9; mTofInvBetaDiff[1] = +1e9;
- mTnTMomentum[0] = 0.15; mTnTMomentum[1] = 1.45;
- mTnTNSigmaProton[0] = -3.; mTnTNSigmaProton[1] = 3.;
- }
- //_________________
- gregsProtonTrackCut::gregsProtonTrackCut(const gregsProtonTrackCut &c) : StHbtTrackCut(c) {
- mNTracksPassed = 0;
- mNTracksFailed = 0;
- mSelType = c.mSelType;
- mCharge = c.mCharge;
- mType = c.mType;
- mAntiSplit = c.mAntiSplit;
- mFlag[0] = c.mFlag[0]; mFlag[1] = c.mFlag[1];
- mNHits[0] = c.mNHits[0]; mNHits[1] = c.mNHits[1];
- mNHitsFit[0] = c.mNHitsFit[0]; mNHitsFit[1] = c.mNHitsFit[1];
- mP[0] = c.mP[0]; mP[1] = c.mP[1];
- mPt[0] = c.mPt[0]; mPt[1] = c.mPt[1];
- mPx[0] = c.mPx[0]; mPx[1] = c.mPx[1];
- mPy[0] = c.mPy[0]; mPy[1] = c.mPy[1];
- mPz[0] = c.mPz[0]; mPz[1] = c.mPz[1];
- mRapidity[0] = c.mRapidity[0]; mRapidity[1] = c.mRapidity[1];
- mEta[0] = c.mEta[0]; mEta[1] = c.mEta[1];
- mDCA[0] = c.mDCA[0]; mDCA[1] = c.mDCA[1];
- mDCAGlobal[0] = c.mDCAGlobal[0]; mDCAGlobal[1] = c.mDCAGlobal[1];
- mTpcMomentum[0] = c.mTpcMomentum[0]; mTpcMomentum[1] = c.mTpcMomentum[1];
- mTpcNSigmaElectron[0] = c.mTpcNSigmaElectron[0]; mTpcNSigmaElectron[1] = c.mTpcNSigmaElectron[1];
- mTpcNSigmaPion[0] = c.mTpcNSigmaPion[0]; mTpcNSigmaPion[1] = c.mTpcNSigmaPion[1];
- mTpcNSigmaKaon[0] = c.mTpcNSigmaKaon[0]; mTpcNSigmaKaon[1] = c.mTpcNSigmaKaon[1];
- mTpcNSigmaProton[0] = -c.mTpcNSigmaProton[0]; mTpcNSigmaProton[1] = c.mTpcNSigmaProton[1];
- mTofMomentum[0] = c.mTofMomentum[0]; mTofMomentum[1] = c.mTofMomentum[1];
- mTofMassSqr[0] = c.mTofMassSqr[0]; mTofMassSqr[1] = c.mTofMassSqr[1];
- mTofInvBetaDiff[0] = c.mTofInvBetaDiff[0]; mTofInvBetaDiff[1] = c.mTofInvBetaDiff[1];
- mTnTMomentum[0] = c.mTnTMomentum[0]; mTnTMomentum[1] = c.mTnTMomentum[1];
- mTnTNSigmaProton[0] = c.mTnTNSigmaProton[0]; mTnTNSigmaProton[1] = c.mTnTNSigmaProton[1];
- }
- //_________________
- gregsProtonTrackCut::~gregsProtonTrackCut() {
- /* empty */
- }
- //_________________
- bool gregsProtonTrackCut::Pass(const StHbtTrack *track) {
- float mEnergy = ::sqrt(track->P().mag2() + mMass*mMass);
- float mY = 0.5*::log( (mEnergy+track->P().z()) / (mEnergy-track->P().z()) );
- bool mGoodCharge = false;
- bool mGoodTrack = false;
- bool mGoodPID = false;
- bool mIsTofTrack = false;
- float mom = track->P().mag();
-
- bool mPassTrack = false;
- //Check the correctness of the detector selection
- if(mSelType<0 || mSelType>3) {
- std::cout << "gregsProtonTrackCut::Pass [WARNING] Wrong detector selection type"
- << mSelType << " . Resetting to 3" << std::endl;
- mSelType = 3;
- }
- //Is the right charge
- if(track->Charge() == mCharge) {
- mGoodCharge = true;
- }
- #ifdef STHBTDEBUG
- std::cout << "gregsProtonTrackCut [DEBUG]" << std::endl
- << "type: " << track->TrackType()
- << " nHF/nHPoss: " << track->NHitsFit2PossRatio()
- << " p: " << track->P().mag() << " eta: " << track->Eta()
- << " y: " << mY << " beta: " << track->TofBeta()
- << " flag: " << track->Flag() <<
- << " dcaXYGlobal: " << track->DCAxyGlobal() << std::endl;
- #endif
- //Is the good track
- if( (track->TrackType() == mType) &&
- (track->NHitsFit2PossRatio() >= mAntiSplit) &&
- (track->DCAxy() >= mDCA[0]) &&
- (track->DCAxy() <= mDCA[1]) &&
- (track->DCAxyGlobal() >= mDCAGlobal[0]) &&
- (track->DCAxyGlobal() <= mDCAGlobal[1]) &&
- (track->NHits() >= mNHits[0]) &&
- (track->NHits() <= mNHits[1]) &&
- (track->NHitsFit() >= mNHitsFit[0]) &&
- (track->NHitsFit() <= mNHitsFit[1]) &&
- (mom >= mP[0]) &&
- (mom <= mP[1]) &&
- (track->Pt() >= mPt[0]) &&
- (track->Pt() <= mPt[1]) &&
- (track->P().x() >= mPx[0]) &&
- (track->P().x() <= mPx[1]) &&
- (track->P().y() >= mPy[0]) &&
- (track->P().y() <= mPy[1]) &&
- (track->P().z() >= mPz[0]) &&
- (track->P().z() <= mPz[1]) &&
- (track->Eta() >= mEta[0]) &&
- (track->Eta() <= mEta[1]) &&
- (mY >= mRapidity[0]) &&
- (mY <= mRapidity[1]) &&
- (track->Flag() >= mFlag[0]) &&
- (track->Flag() <= mFlag[1]) ) {
- mGoodTrack = true;
- }
- if(track->TofBeta() > 0) {
- mIsTofTrack = true;
- }
- if(mSelType == 0) { //TPC selection
- #ifndef TPC_DNDX
- if( (mom >= mTpcMomentum[0]) && (mom <= mTpcMomentum[1]) &&
- ( track->NSigmaPion() <= mTpcNSigmaPion[0]) || (track->NSigmaPion() >= mTpcNSigmaPion[1]) &&
- ( (track->NSigmaElectron() <= mTpcNSigmaElectron[0]) || (track->NSigmaElectron() >= mTpcNSigmaElectron[1]) ) &&
- ( (track->NSigmaKaon() <= mTpcNSigmaKaon[0]) || (track->NSigmaKaon() >= mTpcNSigmaKaon[1]) ) &&
- ( (track->NSigmaProton() >= mTpcNSigmaProton[0]) && (track->NSigmaProton() <= mTpcNSigmaProton[1]) ) ) {
- mGoodPID = true;
- }
- #else
- if( (track->P().mag() >= mTpcMomentum[0]) && (track->P().mag() <= mTpcMomentum[1]) &&
- (track->DndxNSigmaPion() <= mTpcNSigmaPion[0]) || (track->DndxNSigmaPion() >= mTpcNSigmaPion[1]) &&
- ( (track->DndxNSigmaElectron() <= mTpcNSigmaElectron[0]) || (track->DndxNSigmaElectron() >= mTpcNSigmaElectron[1]) ) &&
- ( (track->DndxNSigmaKaon() <= mTpcNSigmaKaon[0]) || (track->DndxNSigmaKaon() >= mTpcNSigmaKaon[1]) ) &&
- ( (track->DndxNSigmaProton() >= mTpcNSigmaProton[0]) && (track->DndxNSigmaProton() <= mTpcNSigmaProton[1]) ) ) {
- mGoodPID = true;
- }
- #endif
- }
- else if(mSelType == 1) { //ToF selection
- if( mIsTofTrack &&
- (track->TofMassSqr() >= mTofMassSqr[0]) && (track->TofMassSqr() <= mTofMassSqr[1]) &&
- (track->P().mag() >= mTofMomentum[0]) && (track->P().mag() <= mTofMomentum[1]) ) {
- mGoodPID = true;
- }
- }
- else if(mSelType == 2) { //TnT selection
- if( mIsTofTrack &&
- (track->P().mag() >= mTnTMomentum[0]) && (track->P().mag() <= mTnTMomentum[1]) &&
- (track->TofMassSqr() >= mTofMassSqr[0]) && (track->TofMassSqr() <= mTofMassSqr[1]) &&
- (track->NSigmaProton() >= mTnTNSigmaProton[0]) && (track->NSigmaProton() <= mTnTNSigmaProton[1]) ) {
- mGoodPID = true;
- }
- }
- else if(mSelType == 3) { //if(ToF signal) {TnT selection} else {TPC selection}
- if(mIsTofTrack) {
- #ifndef TPC_DNDX
- if( (track->P().mag() >= mTnTMomentum[0]) && (track->P().mag() <= mTnTMomentum[1]) &&
- (track->TofMassSqr() >= mTofMassSqr[0]) && (track->TofMassSqr() <= mTofMassSqr[1]) &&
- (track->NSigmaProton() >= mTnTNSigmaProton[0]) && (track->NSigmaProton() <= mTnTNSigmaProton[1]) ) {
- mGoodPID = true;
- }
- #else
- if( (track->P().mag() >= mTnTMomentum[0]) && (track->P().mag() <= mTnTMomentum[1]) &&
- (track->TofMassSqr() >= mTofMassSqr[0]) && (track->TofMassSqr() <= mTofMassSqr[1]) &&
- (track->DndxNSigmaProton() >= mTnTNSigmaProton[0]) && (track->DndxNSigmaProton() <= mTnTNSigmaProton[1]) ) {
- mGoodPID = true;
- }
- #endif
- }
- else {
- #ifndef TPC_DNDX
- if( (track->P().mag() >= mTpcMomentum[0]) && (track->P().mag() <= mTpcMomentum[1]) &&
- (track->NSigmaPion() <= mTpcNSigmaPion[0]) || (track->NSigmaPion() >= mTpcNSigmaPion[1]) &&
- ( (track->NSigmaElectron() <= mTpcNSigmaElectron[0]) || (track->NSigmaElectron() >= mTpcNSigmaElectron[1]) ) &&
- ( (track->NSigmaKaon() <= mTpcNSigmaKaon[0]) || (track->NSigmaKaon() >= mTpcNSigmaKaon[1]) ) &&
- ( (track->NSigmaProton() >= mTpcNSigmaProton[0]) && (track->NSigmaProton() <= mTpcNSigmaProton[1]) ) ) {
- mGoodPID = true;
- }
- #else
- if( (track->P().mag() >= mTpcMomentum[0]) && (track->P().mag() <= mTpcMomentum[1]) &&
- (track->DndxNSigmaPion() <= mTpcNSigmaPion[0]) || (track->DndxNSigmaPion() >= mTpcNSigmaPion[1]) &&
- ( (track->DndxNSigmaElectron() <= mTpcNSigmaElectron[0]) || (track->DndxNSigmaElectron() >= mTpcNSigmaElectron[1]) ) &&
- ( (track->DndxNSigmaKaon() <= mTpcNSigmaKaon[0]) || (track->DndxNSigmaKaon() >= mTpcNSigmaKaon[1]) ) &&
- ( (track->DndxNSigmaProton() >= mTpcNSigmaProton[0]) && (track->DndxNSigmaProton() <= mTpcNSigmaProton[1]) ) ) {
- mGoodPID = true;
- }
- #endif
- }
- } //End with PID
- #ifdef STHBTDEBUG
- std::cout << " gregsProtonTrackCut::Pass() [DEBUG] "
- << "mGoodCharge: " << mGoodCharge << " mGoodTrack: " << mGoodTrack
- << " mGoodPID: " << mGoodPID << std::endl;
- #endif
- if(mGoodCharge && mGoodTrack && mGoodPID) {
- mPassTrack = true;
- mNTracksPassed++;
- }
- else {
- mNTracksFailed++;
- }
- return mPassTrack;
- }
- //_________________
- StHbtString gregsProtonTrackCut::Report() {
- stringstream rep_str;
- rep_str << std::endl << "-- gregsProtonTrackCut --" << std::endl
- << "Particle mass: " << mMass << std::endl
- << " Charge: " << mCharge << std::endl
- << mP[0] << " <= p <= " << mP[1] << std::endl
- << mPt[0] << " <= pT <= " << mPt[1] << std::endl
- << mEta[0] << " <= eta <= " << mEta[1] << std::endl
- << mRapidity[0] << " <= y <= " << mRapidity[1] << std::endl
- << mNHits[0] << " <= nHits <= " << mNHits[1] << std::endl
- << mNHitsFit[0] << " <= nHitsFit <= " << mNHitsFit[1] << std::endl
- << "nHitsFit/nHitsPoss >= " << mAntiSplit << std::endl
- << "Selection type = " << mSelType << std::endl
- << "== TPC identification info:" << std::endl
- << mTpcMomentum[0] << " <= p <= " << mTpcMomentum[1] << std::endl
- << mTpcNSigmaPion[0] << " <= nSigma(pi) <= " << mTpcNSigmaPion[1] << std::endl
- << "nSigma(e) <= " << mTpcNSigmaElectron[0] << " || nSigma(e) >= " << mTpcNSigmaElectron[1] << std::endl
- << "nSigma(K) <= " << mTpcNSigmaKaon[0] << " || nSigma(K) >= " << mTpcNSigmaKaon[1] << std::endl
- << "nSigma(p) <= " << mTpcNSigmaProton[0] << " || nSigma(p) >= " << mTpcNSigmaProton[1] << std::endl
- << "== ToF identification info:" << std::endl
- << mTofMomentum[0] << " <= p <= " << mTofMomentum[1] << std::endl
- << mTofMassSqr[0] << " <= mTofMassSqr <= " << mTofMassSqr[1] << std::endl
- << mTofInvBetaDiff[0] << " <= mInvBetaDiff <= " << mTofInvBetaDiff[1] << std::endl
- << "== TnT identification info:" << std::endl
- << mTnTMomentum[0] << " <= p <= " << mTnTMomentum[1] << std::endl
- << mTnTNSigmaProton[0] << " <= nSigma(pi) <= " << mTnTNSigmaProton[1] << std::endl
- << " >>> N Tracks passed: " << mNTracksPassed << std::endl
- << " >>> N Tracks failed: " << mNTracksFailed << std::endl;
- return rep_str.str();
- }
|