ROOT logo
//
// This cut implements all the checks done to accept a track as a proton or pion
// for the pp analysis using 2010 runs. 
// It is based on standard cuts on track quality and nsigma cuts
// with respect to the TPC and TOF signals for the PID.
//

#include <Riostream.h>

#include "AliPID.h"
#include "AliPIDResponse.h"
#include "AliRsnCutDelta.h"

ClassImp(AliRsnCutDelta)

//__________________________________________________________________________________________________
AliRsnCutDelta::AliRsnCutDelta(const char *name,AliPID::EParticleType pid, Bool_t TPCMethod) :
   AliRsnCut(name, AliRsnTarget::kDaughter),
   fPID(pid),
   fNSigmaTPC(3.0),
   fLimitTPC(0.350),
   fNSigmaTOF(3.0),
   fTPCMethod(TPCMethod),
   fNSigmaTPCProton(3.0),
   fNSigmaTPCPion(3.0),
   fNSigmaTOFProton(3.0),
   fNSigmaTOFPion(3.0),
   fTPCMomProton(1.1),
   fTOFMomProton(2.5),
   fEtaRange(0.8),
   fTPCNCluster(70),
   fPtDepDCASigma(7.0),

   fCutQuality(Form("%sQuality", name))
{
//
// Constructor
// Initialize the contained cuts and sets defaults
//
    Double_t a=0; a=fPtDepDCASigma*0.0026; //This will be used in pt dep dca formula
    Double_t b=0; b=fPtDepDCASigma*0.05;   //This will also be used in pt dep dca formula

   // track quality 
   fCutQuality.SetPtRange(0.15, 1E+20);
   fCutQuality.SetEtaRange(-fEtaRange, fEtaRange);
   fCutQuality.SetDCARPtFormula(Form("%f+%f/pt^1.01",a,b));    //("0.0182+0.0350/pt^1.01");
   fCutQuality.SetDCAZmax(2.0);
   fCutQuality.SetSPDminNClusters(1);
   fCutQuality.SetITSminNClusters(0);
   fCutQuality.SetITSmaxChi2(1E+20);
   fCutQuality.SetTPCminNClusters(fTPCNCluster);
   fCutQuality.SetTPCmaxChi2(4.0);
   fCutQuality.SetRejectKinkDaughters();
   fCutQuality.SetAODTestFilterBit(5);
}
//
//__________________________________________________________________________________________________
Bool_t AliRsnCutDelta::IsSelected(TObject *obj)
{
//
// Global check
//

   // coherence check
   if (!TargetOK(obj)) return kFALSE;
   
   // check track
   AliVTrack *track = fDaughter->Ref2Vtrack();
   if (!track) {
      if (!fDaughter->GetRef()) AliWarning("NULL ref");
      return kFALSE;
   }
   
   // check flags
   if ((track->GetStatus() & AliESDtrack::kTPCin   ) == 0) return kFALSE;
   if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) return kFALSE;
   if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) return kFALSE;
   
   // quality
   if (!fCutQuality.IsSelected(obj)) return kFALSE;


   
   // check initialization of PID object
   AliPIDResponse *pid = fEvent->GetPIDResponse();
   if (!pid) {
      AliFatal("NULL PID response");
      return kFALSE;
   }
   
   // check if TOF is matched
   // and computes all values used in the PID cut
   Bool_t   isTOF        	= MatchTOF(track);
   Double_t pTPC         	= track->GetTPCmomentum();
   Double_t pTOF            	= track->P();
   Double_t nsTPC        	= TMath::Abs(pid->NumberOfSigmasTPC(track, fPID));
   Double_t nsTPCProton  	= TMath::Abs(pid->NumberOfSigmasTPC(track, AliPID::kProton));
   Double_t nsTPCPion	  	= TMath::Abs(pid->NumberOfSigmasTPC(track, AliPID::kPion));
   Double_t nsTOFProton  	= TMath::Abs(pid->NumberOfSigmasTOF(track, AliPID::kProton));
   Double_t nsTOF        	= TMath::Abs(pid->NumberOfSigmasTOF(track, fPID));
   Double_t maxTPC       	= 1E20;
   Double_t maxTOF       	= 1E20;

 	if (fTPCMethod) {
		if(fPID == AliPID::kPion) { 
 
         	  if(nsTPCPion>fNSigmaTPCPion) return kFALSE;
	 	  maxTPC = fNSigmaTPCPion; 
         	  if(nsTPC > maxTPC) return kFALSE;
		  return kTRUE;

        	}
		else if (fPID == AliPID::kProton) { 

        	  if(nsTPCPion<=fNSigmaTPCPion) return kFALSE;
        	  if(pTPC>=fTPCMomProton) return kFALSE; 
		  if(nsTPCProton>fNSigmaTPCProton) return kFALSE;
                  maxTPC = fNSigmaTPCProton; 
        	  if(nsTPC > maxTPC) return kFALSE;
         	  return kTRUE;

         	}

   	} else {

		if(fPID == AliPID::kProton) {  

          	  if(!isTOF) return kFALSE;
          	  if(nsTPCProton>fNSigmaTPCProton) return kFALSE;
          	  if(pTOF >= fTOFMomProton) return kFALSE;
          	  if(nsTOFProton>fNSigmaTOFProton) return kFALSE;
          	  maxTOF = fNSigmaTOFProton;
          	  if (nsTOF > maxTOF) return kFALSE; 
          	  return kTRUE;

        	}

		else if (fPID == AliPID::kPion) { 

	  	  if(isTOF && nsTPCProton<=fNSigmaTPCProton && pTOF < fTOFMomProton && nsTOFProton<=fNSigmaTOFProton) return kFALSE; 

	  	  if(nsTPCPion>fNSigmaTPCPion) return kFALSE;
	  	  maxTPC = fNSigmaTPCPion;
	  	  if (nsTPC > maxTPC) return kFALSE; 
	  	  return kTRUE;

		}//pion pid

	} //else tpcmethod
return kTRUE;
}

Bool_t AliRsnCutDelta::MatchTOF(const AliVTrack *vtrack)
{
    //
    // Checks if the track has matched the TOF detector
    //
    
    if (!vtrack) {
        AliWarning("NULL argument: impossible to check status");
        return kFALSE;
    }
    
    Bool_t isTOFout = ((vtrack->GetStatus() & AliESDtrack::kTOFout) != 0);
    Bool_t isTIME   = ((vtrack->GetStatus() & AliESDtrack::kTIME) != 0);
    
    return (isTOFout && isTIME);
}

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