/*************************************************************************** * * $Id: AliFemtoAODTrackCut.cxx 23733 2008-02-05 16:51:41Z akisiel $ * * *************************************************************************** * * * * *************************************************************************** * * $Log$ * Revision 1.3 2007/05/22 09:01:42 akisiel * Add the possibiloity to save cut settings in the ROOT file * * Revision 1.2 2007/05/21 10:38:25 akisiel * More coding rule conformance * * Revision 1.1 2007/05/16 10:25:06 akisiel * Making the directory structure of AliFemtoUser flat. All files go into one common directory * * Revision 1.4 2007/05/03 09:46:10 akisiel * Fixing Effective C++ warnings * * Revision 1.3 2007/04/27 07:25:59 akisiel * Make revisions needed for compilation from the main AliRoot tree * * Revision 1.1.1.1 2007/04/25 15:38:41 panos * Importing the HBT code dir * * Revision 1.4 2007-04-03 16:00:08 mchojnacki * Changes to iprove memory managing * * Revision 1.3 2007/03/13 15:30:03 mchojnacki * adding reader for simulated data * * Revision 1.2 2007/03/08 14:58:03 mchojnacki * adding some alice stuff * * Revision 1.1.1.1 2007/03/07 10:14:49 mchojnacki * First version on CVS * **************************************************************************/ #include "AliFemtoAODTrackCut.h" #include #ifdef __ROOT__ ClassImp(AliFemtoAODTrackCut) #endif // electron // 0.13 - 1.8 // 0 7.594129e-02 8.256141e-03 // 1 -5.535827e-01 8.170825e-02 // 2 1.728591e+00 3.104210e-01 // 3 -2.827893e+00 5.827802e-01 // 4 2.503553e+00 5.736207e-01 // 5 -1.125965e+00 2.821170e-01 // 6 2.009036e-01 5.438876e-02 // pion // 0.13 - 2.0 // 0 1.063457e+00 8.872043e-03 // 1 -4.222208e-01 2.534402e-02 // 2 1.042004e-01 1.503945e-02 // kaon // 0.18 - 2.0 // 0 -7.289406e-02 1.686074e-03 // 1 4.415666e-01 1.143939e-02 // 2 -2.996790e-01 1.840964e-02 // 3 6.704652e-02 7.783990e-03 // proton // 0.26 - 2.0 // 0 -3.730200e-02 2.347311e-03 // 1 1.163684e-01 1.319316e-02 // 2 8.354116e-02 1.997948e-02 // 3 -4.608098e-02 8.336400e-03 AliFemtoAODTrackCut::AliFemtoAODTrackCut() : fCharge(0), fLabel(0), fMaxchiNdof(1000.0), fMaxSigmaToVertex(1000.0), fNTracksPassed(0), fNTracksFailed(0), fMostProbable(0) { // Default constructor fNTracksPassed = fNTracksFailed = 0; fCharge = 0; // takes both charges 0 fPt[0]=0.0; fPt[1] = 100.0;//100 fRapidity[0]=-2; fRapidity[1]=2;//-2 2 fPidProbElectron[0]=-1;fPidProbElectron[1]=2; fPidProbPion[0]=-1; fPidProbPion[1]=2; fPidProbKaon[0]=-1;fPidProbKaon[1]=2; fPidProbProton[0]=-1;fPidProbProton[1]=2; fPidProbMuon[0]=-1;fPidProbMuon[1]=2; fLabel=false; } //------------------------------ AliFemtoAODTrackCut::~AliFemtoAODTrackCut(){ /* noop */ } //------------------------------ bool AliFemtoAODTrackCut::Pass(const AliFemtoTrack* track) { // test the particle and return // true if it meets all the criteria // false if it doesn't meet at least one of the criteria float tMost[5]; if (((track->ITSchi2() + track->TPCchi2())/(track->ITSncls() + track->TPCncls())) > fMaxchiNdof) { return false; } if (fMaxSigmaToVertex < track->SigmaToVertex()) { return false; } if (fLabel) { //cout<<"labels"<Label()<0) { fNTracksFailed++; // cout<<"No Go Through the cut"<fPt[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbElectron()PidProbElectron()>fPidProbElectron[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbPion()PidProbPion()>fPidProbPion[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbKaon()PidProbKaon()>fPidProbKaon[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbProton()PidProbProton()>fPidProbProton[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbMuon()PidProbMuon()>fPidProbMuon[1])) { fNTracksFailed++; //cout<<"No Go Through the cut"<PidProbElectron()*PidFractionElectron(track->P().Mag()); tMost[1] = 0.0; tMost[2] = track->PidProbPion()*PidFractionPion(track->P().Mag()); tMost[3] = track->PidProbKaon()*PidFractionKaon(track->P().Mag()); tMost[4] = track->PidProbProton()*PidFractionProton(track->P().Mag()); int imost=0; float ipidmax = 0.0; for (int ip=0; ip<5; ip++) if (tMost[ip] > ipidmax) { ipidmax = tMost[ip]; imost = ip; }; if (imost != fMostProbable) return false; } // cout<<"Go Through the cut"<Mass()); tStemp=tCtemp; sprintf(tCtemp,"Particle charge:\t%d\n",fCharge); tStemp+=tCtemp; sprintf(tCtemp,"Particle pT:\t%E - %E\n",fPt[0],fPt[1]); tStemp+=tCtemp; sprintf(tCtemp,"Particle rapidity:\t%E - %E\n",fRapidity[0],fRapidity[1]); tStemp+=tCtemp; sprintf(tCtemp,"Number of tracks which passed:\t%ld Number which failed:\t%ld\n",fNTracksPassed,fNTracksFailed); tStemp += tCtemp; AliFemtoString returnThis = tStemp; return returnThis; } TList *AliFemtoAODTrackCut::ListSettings() { // return a list of settings in a writable form TList *tListSetttings = new TList(); char buf[200]; snprintf(buf, 200, "AliFemtoAODTrackCut.mass=%f", this->Mass()); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.charge=%i", fCharge); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobpion.minimum=%f", fPidProbPion[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobpion.maximum=%f", fPidProbPion[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobkaon.minimum=%f", fPidProbKaon[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobkaon.maximum=%f", fPidProbKaon[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobproton.minimum=%f", fPidProbProton[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobproton.maximum=%f", fPidProbProton[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobelectron.minimum=%f", fPidProbElectron[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobelectron.maximum=%f", fPidProbElectron[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobMuon.minimum=%f", fPidProbMuon[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pidprobMuon.maximum=%f", fPidProbMuon[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pt.minimum=%f", fPt[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.pt.maximum=%f", fPt[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.rapidity.minimum=%f", fRapidity[0]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.rapidity.maximum=%f", fRapidity[1]); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.maxchindof=%f", fMaxchiNdof); tListSetttings->AddLast(new TObjString(buf)); snprintf(buf, 200, "AliFemtoAODTrackCut.maxsigmatovertex=%f", fMaxSigmaToVertex); tListSetttings->AddLast(new TObjString(buf)); if (fMostProbable) { if (fMostProbable == 2) snprintf(buf, 200, "AliFemtoAODTrackCut.mostprobable=%s", "Pion"); if (fMostProbable == 3) snprintf(buf, 200, "AliFemtoAODTrackCut.mostprobable=%s", "Kaon"); if (fMostProbable == 4) snprintf(buf, 200, "AliFemtoAODTrackCut.mostprobable=%s", "Proton"); tListSetttings->AddLast(new TObjString(buf)); } return tListSetttings; } // electron // 0.13 - 1.8 // 0 7.594129e-02 8.256141e-03 // 1 -5.535827e-01 8.170825e-02 // 2 1.728591e+00 3.104210e-01 // 3 -2.827893e+00 5.827802e-01 // 4 2.503553e+00 5.736207e-01 // 5 -1.125965e+00 2.821170e-01 // 6 2.009036e-01 5.438876e-02 float AliFemtoAODTrackCut::PidFractionElectron(float mom) const { // Provide a parameterized fraction of electrons dependent on momentum if (mom<0.13) return 0.0; if (mom>1.8) return 0.0; return (7.594129e-02 -5.535827e-01*mom +1.728591e+00*mom*mom -2.827893e+00*mom*mom*mom +2.503553e+00*mom*mom*mom*mom -1.125965e+00*mom*mom*mom*mom*mom +2.009036e-01*mom*mom*mom*mom*mom*mom); } // pion // 0.13 - 2.0 // 0 1.063457e+00 8.872043e-03 // 1 -4.222208e-01 2.534402e-02 // 2 1.042004e-01 1.503945e-02 float AliFemtoAODTrackCut::PidFractionPion(float mom) const { // Provide a parameterized fraction of pions dependent on momentum if (mom<0.13) return 0.0; if (mom>2.0) return 0.0; return ( 1.063457e+00 -4.222208e-01*mom +1.042004e-01*mom*mom); } // kaon // 0.18 - 2.0 // 0 -7.289406e-02 1.686074e-03 // 1 4.415666e-01 1.143939e-02 // 2 -2.996790e-01 1.840964e-02 // 3 6.704652e-02 7.783990e-03 float AliFemtoAODTrackCut::PidFractionKaon(float mom) const { // Provide a parameterized fraction of kaons dependent on momentum if (mom<0.18) return 0.0; if (mom>2.0) return 0.0; return (-7.289406e-02 +4.415666e-01*mom -2.996790e-01*mom*mom +6.704652e-02*mom*mom*mom); } // proton // 0.26 - 2.0 // 0 -3.730200e-02 2.347311e-03 // 1 1.163684e-01 1.319316e-02 // 2 8.354116e-02 1.997948e-02 // 3 -4.608098e-02 8.336400e-03 float AliFemtoAODTrackCut::PidFractionProton(float mom) const { // Provide a parameterized fraction of protons dependent on momentum if (mom<0.26) return 0.0; if (mom>2.0) return 0.0; return (-3.730200e-02 +1.163684e-01*mom +8.354116e-02*mom*mom -4.608098e-02*mom*mom*mom); }