ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoBasicTrackCut - the basic cut for tracks.                          //
// Cuts on particle identification, transverse momentum, rapidity, distance   //
// of closest approach to primary vertex and charge                           //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

#include "AliFemtoBasicTrackCut.h"
#include <cstdio>

#ifdef __ROOT__ 
ClassImp(AliFemtoBasicTrackCut)
#endif

AliFemtoBasicTrackCut::AliFemtoBasicTrackCut():
  fCharge(0),
  fNTracksPassed(0),
  fNTracksFailed(0)
{
  // Default constructor
  fNTracksPassed = fNTracksFailed = 0;
  fCharge = 1;  // takes both charges 0
  fNSigmaPion[0] = -100.0;   fNSigmaPion[1] = 100.0;
  fNSigmaKaon[0] = -100.0;   fNSigmaKaon[1] = 100.0;
  fNSigmaProton[0] = -100.0; fNSigmaProton[1] = 100.0;
  fNHits[0] = 10;          fNHits[1] = 180;
  fPt[0]=0.0;              fPt[1] = 100.0;//100
  fRapidity[0]=-2;       fRapidity[1]=2;//-2 2
  fDCA[0] = -1.0;           fDCA[1] = 20.0;

}
//------------------------------
//AliFemtoBasicTrackCut::~AliFemtoBasicTrackCut(){
//  /* noop */
//}
//------------------------------
bool AliFemtoBasicTrackCut::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

  //  return true ;  // THIS CUT IS A STHBTDUMMY!!

  /*
    cout << endl;
    cout << "#track " << trackCount++;
    cout << " * pion " << (track->NSigmaPion() > fNSigmaPion[0]) && (track->NSigmaPion() < fNSigmaPion[1]);
    cout << " * kaon " << (track->NSigmaKaon() > fNSigmaKaon[0]) && (track->NSigmaKaon() < fNSigmaKaon[1]);
    cout << " * proton " << (track->NSigmaProton() > fNSigmaProton[0]) && (track->NSigmaProton() < fNSigmaProton[1]);
    cout << " * charge " << (track->Charge() == fCharge);
  */
  bool goodPID = 1;  
  /* ----- NOT DOING PID CUTS !!!! ------
  bool goodPID = ((track->NSigmaPion()   > fNSigmaPion[0]) &&
                  (track->NSigmaPion()   < fNSigmaPion[1]) &&
                  (track->NSigmaKaon()   > fNSigmaKaon[0]) &&
                  (track->NSigmaKaon()   < fNSigmaKaon[1]) &&
                  (track->NSigmaProton() > fNSigmaProton[0]) &&
                  (track->NSigmaProton() < fNSigmaProton[1]));
  ----- NOT DOING PID CUTS !!!! ------ */
  if (fCharge !=0){               // if user requests "charge=0" then that means ignore charge
    goodPID = (goodPID&&(track->Charge() == fCharge));
  }
  if (goodPID){
    float tEnergy = ::sqrt(track->P().Mag2()+fMass*fMass);
    float tRapidity = 0.5*::log((tEnergy+track->P().z())/
			    (tEnergy-track->P().z()));

    float tPt = ::sqrt((track->P().x())*(track->P().x())+
                    (track->P().y())*(track->P().y()));

    
    /*
      cout << " * DCAxy " << (track->DCAxy()  > fDCA[0]) && (track->DCAxy()  < fDCA[1]);
      cout << " * fDCA[0] " << fDCA[0];
      cout << " * fDCA[1] " << fDCA[1];
      cout << " * track->DCAxy " << track->DCAxy();
      cout << " * NHits " <<  (track->NHits() > fNHits[0]) && (track->NHits() < fNHits[1]); 
      cout << " * tPt " << (tPt > fPt[0]) && (tPt < fPt[1]);
      cout << " * y " << (tRapidity > fRapidity[0]) && (tRapidity < fRapidity[1]);
      cout << endl;
    */

    bool goodTrack=
      (//(track->DCAxy()  > fDCA[0]) &&
     //  (track->DCAxy()  < fDCA[1]) &&
  //     (track->NHits() > fNHits[0]) &&
    //   (track->NHits() < fNHits[1]) &&
       (tPt             > fPt[0]) &&
       (tPt             < fPt[1]) &&
       (tRapidity      > fRapidity[0]) &&
       (tRapidity      < fRapidity[1]));
    //  &&
    //       (track->PidProbPion()>0.5)&&//moje
    //       (track->PidProbMuon()<0.47)&&//moje
    //       (track->Label()>0);//moje

    //    cout << track->DCAxy() << " " << track->NHits() << " " << Pt << " " << tRapidity << " " << tEnergy << endl;

    goodTrack ? fNTracksPassed++ : fNTracksFailed++;
    return (goodTrack);
  }
  else{
    fNTracksFailed++;
    return (goodPID);
  }
}
//------------------------------
AliFemtoString AliFemtoBasicTrackCut::Report(){
  // construct report
  string tStemp;
  char tCtemp[100];
  snprintf(tCtemp , 100, "Particle mass:\t%E\n",this->Mass());
  tStemp=tCtemp;
  snprintf(tCtemp , 100, "Particle charge:\t%d\n",fCharge);
  tStemp=tCtemp;
  snprintf(tCtemp , 100, "Particle Nsigma from pion:\t%E - %E\n",fNSigmaPion[0],fNSigmaPion[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle Nsigma from kaon:\t%E - %E\n",fNSigmaKaon[0],fNSigmaKaon[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle Nsigma from proton:\t%E - %E\n",fNSigmaProton[0],fNSigmaProton[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle #hits:\t%d - %d\n",fNHits[0],fNHits[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle pT:\t%E - %E\n",fPt[0],fPt[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle rapidity:\t%E - %E\n",fRapidity[0],fRapidity[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Particle DCA:\t%E - %E\n",fDCA[0],fDCA[1]);
  tStemp+=tCtemp;
  snprintf(tCtemp , 100, "Number of tracks which passed:\t%ld  Number which failed:\t%ld\n",fNTracksPassed,fNTracksFailed);
  tStemp += tCtemp;
  AliFemtoString returnThis = tStemp;
  return returnThis;
}

TList *AliFemtoBasicTrackCut::ListSettings()
{
  // return a list of settings in a writable form
  TList *tListSetttings = new TList();
  char buf[200];
  snprintf(buf, 200, "AliFemtoBasicTrackCut.mass=%f", this->Mass());
  tListSetttings->AddLast(new TObjString(buf));

  snprintf(buf, 200, "AliFemtoBasicTrackCut.charge=%i", fCharge);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmapion.minimum=%f", fNSigmaPion[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmapion.maximum=%f", fNSigmaPion[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmakaon.minimum=%f", fNSigmaKaon[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmakaon.maximum=%f", fNSigmaKaon[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmaproton.minimum=%f", fNSigmaProton[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nsigmaproton.maximum=%f", fNSigmaProton[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nhits.minimum=%i", fNHits[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.nhits.maximum=%i", fNHits[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.pt.minimum=%f", fPt[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.pt.maximum=%f", fPt[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.rapidity.minimum=%f", fRapidity[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.rapidity.maximum=%f", fRapidity[1]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.dca.minimum=%f", fDCA[0]);
  tListSetttings->AddLast(new TObjString(buf));
  snprintf(buf, 200, "AliFemtoBasicTrackCut.dca.maximum=%f", fDCA[1]);
  tListSetttings->AddLast(new TObjString(buf));

  return tListSetttings;
}
 AliFemtoBasicTrackCut.cxx:1
 AliFemtoBasicTrackCut.cxx:2
 AliFemtoBasicTrackCut.cxx:3
 AliFemtoBasicTrackCut.cxx:4
 AliFemtoBasicTrackCut.cxx:5
 AliFemtoBasicTrackCut.cxx:6
 AliFemtoBasicTrackCut.cxx:7
 AliFemtoBasicTrackCut.cxx:8
 AliFemtoBasicTrackCut.cxx:9
 AliFemtoBasicTrackCut.cxx:10
 AliFemtoBasicTrackCut.cxx:11
 AliFemtoBasicTrackCut.cxx:12
 AliFemtoBasicTrackCut.cxx:13
 AliFemtoBasicTrackCut.cxx:14
 AliFemtoBasicTrackCut.cxx:15
 AliFemtoBasicTrackCut.cxx:16
 AliFemtoBasicTrackCut.cxx:17
 AliFemtoBasicTrackCut.cxx:18
 AliFemtoBasicTrackCut.cxx:19
 AliFemtoBasicTrackCut.cxx:20
 AliFemtoBasicTrackCut.cxx:21
 AliFemtoBasicTrackCut.cxx:22
 AliFemtoBasicTrackCut.cxx:23
 AliFemtoBasicTrackCut.cxx:24
 AliFemtoBasicTrackCut.cxx:25
 AliFemtoBasicTrackCut.cxx:26
 AliFemtoBasicTrackCut.cxx:27
 AliFemtoBasicTrackCut.cxx:28
 AliFemtoBasicTrackCut.cxx:29
 AliFemtoBasicTrackCut.cxx:30
 AliFemtoBasicTrackCut.cxx:31
 AliFemtoBasicTrackCut.cxx:32
 AliFemtoBasicTrackCut.cxx:33
 AliFemtoBasicTrackCut.cxx:34
 AliFemtoBasicTrackCut.cxx:35
 AliFemtoBasicTrackCut.cxx:36
 AliFemtoBasicTrackCut.cxx:37
 AliFemtoBasicTrackCut.cxx:38
 AliFemtoBasicTrackCut.cxx:39
 AliFemtoBasicTrackCut.cxx:40
 AliFemtoBasicTrackCut.cxx:41
 AliFemtoBasicTrackCut.cxx:42
 AliFemtoBasicTrackCut.cxx:43
 AliFemtoBasicTrackCut.cxx:44
 AliFemtoBasicTrackCut.cxx:45
 AliFemtoBasicTrackCut.cxx:46
 AliFemtoBasicTrackCut.cxx:47
 AliFemtoBasicTrackCut.cxx:48
 AliFemtoBasicTrackCut.cxx:49
 AliFemtoBasicTrackCut.cxx:50
 AliFemtoBasicTrackCut.cxx:51
 AliFemtoBasicTrackCut.cxx:52
 AliFemtoBasicTrackCut.cxx:53
 AliFemtoBasicTrackCut.cxx:54
 AliFemtoBasicTrackCut.cxx:55
 AliFemtoBasicTrackCut.cxx:56
 AliFemtoBasicTrackCut.cxx:57
 AliFemtoBasicTrackCut.cxx:58
 AliFemtoBasicTrackCut.cxx:59
 AliFemtoBasicTrackCut.cxx:60
 AliFemtoBasicTrackCut.cxx:61
 AliFemtoBasicTrackCut.cxx:62
 AliFemtoBasicTrackCut.cxx:63
 AliFemtoBasicTrackCut.cxx:64
 AliFemtoBasicTrackCut.cxx:65
 AliFemtoBasicTrackCut.cxx:66
 AliFemtoBasicTrackCut.cxx:67
 AliFemtoBasicTrackCut.cxx:68
 AliFemtoBasicTrackCut.cxx:69
 AliFemtoBasicTrackCut.cxx:70
 AliFemtoBasicTrackCut.cxx:71
 AliFemtoBasicTrackCut.cxx:72
 AliFemtoBasicTrackCut.cxx:73
 AliFemtoBasicTrackCut.cxx:74
 AliFemtoBasicTrackCut.cxx:75
 AliFemtoBasicTrackCut.cxx:76
 AliFemtoBasicTrackCut.cxx:77
 AliFemtoBasicTrackCut.cxx:78
 AliFemtoBasicTrackCut.cxx:79
 AliFemtoBasicTrackCut.cxx:80
 AliFemtoBasicTrackCut.cxx:81
 AliFemtoBasicTrackCut.cxx:82
 AliFemtoBasicTrackCut.cxx:83
 AliFemtoBasicTrackCut.cxx:84
 AliFemtoBasicTrackCut.cxx:85
 AliFemtoBasicTrackCut.cxx:86
 AliFemtoBasicTrackCut.cxx:87
 AliFemtoBasicTrackCut.cxx:88
 AliFemtoBasicTrackCut.cxx:89
 AliFemtoBasicTrackCut.cxx:90
 AliFemtoBasicTrackCut.cxx:91
 AliFemtoBasicTrackCut.cxx:92
 AliFemtoBasicTrackCut.cxx:93
 AliFemtoBasicTrackCut.cxx:94
 AliFemtoBasicTrackCut.cxx:95
 AliFemtoBasicTrackCut.cxx:96
 AliFemtoBasicTrackCut.cxx:97
 AliFemtoBasicTrackCut.cxx:98
 AliFemtoBasicTrackCut.cxx:99
 AliFemtoBasicTrackCut.cxx:100
 AliFemtoBasicTrackCut.cxx:101
 AliFemtoBasicTrackCut.cxx:102
 AliFemtoBasicTrackCut.cxx:103
 AliFemtoBasicTrackCut.cxx:104
 AliFemtoBasicTrackCut.cxx:105
 AliFemtoBasicTrackCut.cxx:106
 AliFemtoBasicTrackCut.cxx:107
 AliFemtoBasicTrackCut.cxx:108
 AliFemtoBasicTrackCut.cxx:109
 AliFemtoBasicTrackCut.cxx:110
 AliFemtoBasicTrackCut.cxx:111
 AliFemtoBasicTrackCut.cxx:112
 AliFemtoBasicTrackCut.cxx:113
 AliFemtoBasicTrackCut.cxx:114
 AliFemtoBasicTrackCut.cxx:115
 AliFemtoBasicTrackCut.cxx:116
 AliFemtoBasicTrackCut.cxx:117
 AliFemtoBasicTrackCut.cxx:118
 AliFemtoBasicTrackCut.cxx:119
 AliFemtoBasicTrackCut.cxx:120
 AliFemtoBasicTrackCut.cxx:121
 AliFemtoBasicTrackCut.cxx:122
 AliFemtoBasicTrackCut.cxx:123
 AliFemtoBasicTrackCut.cxx:124
 AliFemtoBasicTrackCut.cxx:125
 AliFemtoBasicTrackCut.cxx:126
 AliFemtoBasicTrackCut.cxx:127
 AliFemtoBasicTrackCut.cxx:128
 AliFemtoBasicTrackCut.cxx:129
 AliFemtoBasicTrackCut.cxx:130
 AliFemtoBasicTrackCut.cxx:131
 AliFemtoBasicTrackCut.cxx:132
 AliFemtoBasicTrackCut.cxx:133
 AliFemtoBasicTrackCut.cxx:134
 AliFemtoBasicTrackCut.cxx:135
 AliFemtoBasicTrackCut.cxx:136
 AliFemtoBasicTrackCut.cxx:137
 AliFemtoBasicTrackCut.cxx:138
 AliFemtoBasicTrackCut.cxx:139
 AliFemtoBasicTrackCut.cxx:140
 AliFemtoBasicTrackCut.cxx:141
 AliFemtoBasicTrackCut.cxx:142
 AliFemtoBasicTrackCut.cxx:143
 AliFemtoBasicTrackCut.cxx:144
 AliFemtoBasicTrackCut.cxx:145
 AliFemtoBasicTrackCut.cxx:146
 AliFemtoBasicTrackCut.cxx:147
 AliFemtoBasicTrackCut.cxx:148
 AliFemtoBasicTrackCut.cxx:149
 AliFemtoBasicTrackCut.cxx:150
 AliFemtoBasicTrackCut.cxx:151
 AliFemtoBasicTrackCut.cxx:152
 AliFemtoBasicTrackCut.cxx:153
 AliFemtoBasicTrackCut.cxx:154
 AliFemtoBasicTrackCut.cxx:155
 AliFemtoBasicTrackCut.cxx:156
 AliFemtoBasicTrackCut.cxx:157
 AliFemtoBasicTrackCut.cxx:158
 AliFemtoBasicTrackCut.cxx:159
 AliFemtoBasicTrackCut.cxx:160
 AliFemtoBasicTrackCut.cxx:161
 AliFemtoBasicTrackCut.cxx:162
 AliFemtoBasicTrackCut.cxx:163
 AliFemtoBasicTrackCut.cxx:164
 AliFemtoBasicTrackCut.cxx:165
 AliFemtoBasicTrackCut.cxx:166
 AliFemtoBasicTrackCut.cxx:167
 AliFemtoBasicTrackCut.cxx:168
 AliFemtoBasicTrackCut.cxx:169
 AliFemtoBasicTrackCut.cxx:170
 AliFemtoBasicTrackCut.cxx:171
 AliFemtoBasicTrackCut.cxx:172
 AliFemtoBasicTrackCut.cxx:173
 AliFemtoBasicTrackCut.cxx:174
 AliFemtoBasicTrackCut.cxx:175
 AliFemtoBasicTrackCut.cxx:176
 AliFemtoBasicTrackCut.cxx:177
 AliFemtoBasicTrackCut.cxx:178