#include <TMath.h>
#include <TString.h>
#include <TVector3.h>
#include <AliPID.h>
#include <AliAODEvent.h>
#include <AliAODMCParticle.h>
#include <AliAODTrack.h>
#include <AliAODVertex.h>
#include "AliLnAODtrackCuts.h"
ClassImp(AliLnAODtrackCuts)
AliLnAODtrackCuts::AliLnAODtrackCuts()
: TObject()
, fTrackSel("its_tpc_dca")
, fMaxDCAxy(1)
, fMaxDCAz(2)
, fMaxNSigma(3)
, fMaxEta(0.8)
, fTPCXRows(0)
, fMinTPCnClsOrXRows(70)
, fTOFmatch(0)
{
}
AliLnAODtrackCuts::~AliLnAODtrackCuts()
{
}
void AliLnAODtrackCuts::SetSelectionCriteria(const TString& trksel)
{
fTrackSel = trksel;
fTrackSel.ToLower();
fTOFmatch = (fTrackSel.Contains("tof")) ? kTRUE : kFALSE;
}
Bool_t AliLnAODtrackCuts::IsWithinGeoAcceptance(const AliAODMCParticle* prt) const
{
if( TMath::Abs(prt->Eta()) < fMaxEta ) return kTRUE;
return kFALSE;
}
Bool_t AliLnAODtrackCuts::IsWithinGeoAcceptance(const AliAODTrack* trk) const
{
if( TMath::Abs(trk->Eta()) < fMaxEta ) return kTRUE;
return kFALSE;
}
Bool_t AliLnAODtrackCuts::IsWithinGeoAcceptance(Double_t p[3]) const
{
TVector3 trk(p[0],p[1],p[2]);
if( TMath::Abs(trk.Eta()) < fMaxEta ) return kTRUE;
return kFALSE;
}
Bool_t AliLnAODtrackCuts::IsKinkDaughter(const AliAODTrack* trk) const
{
AliAODVertex* vtx = trk->GetProdVertex();
if(vtx == 0 ) return kFALSE;
if(vtx->GetType() == AliAODVertex::kKink) return kTRUE;
return kFALSE;
}
Double_t AliLnAODtrackCuts::GetNTPCXRowsOverFindable(const AliAODTrack* trk) const
{
if(trk->GetTPCNclsF() <= 0) return 1;
return static_cast<Double_t>(trk->GetTPCNCrossedRows())/static_cast<Double_t>(trk->GetTPCNclsF());
}
Bool_t AliLnAODtrackCuts::AcceptItsTpcNSigma(const AliAODTrack* trk, Double_t b[2], Double_t bCov[3]) const
{
if(!trk->IsOn(AliAODTrack::kITSrefit)) return kFALSE;
if(trk->GetITSNcls()<2) return kFALSE;
if(!trk->TestFilterBit(AliAODTrack::kTrkTPCOnly)) return kFALSE;
if(!trk->IsOn(AliAODTrack::kTPCrefit) ) return kFALSE;
if(this->IsKinkDaughter(trk)) return kFALSE;
if(fTPCXRows)
{
if(trk->GetTPCNCrossedRows()<fMinTPCnClsOrXRows) return kFALSE;
if(this->GetNTPCXRowsOverFindable(trk)< 0.8 ) return kFALSE;
}
else
{
if(trk->GetTPCNcls()<fMinTPCnClsOrXRows) return kFALSE;
}
if(this->GetNSigmaToVertex(b, bCov) > fMaxNSigma) return kFALSE;
return kTRUE;
}
Bool_t AliLnAODtrackCuts::AcceptItsTpcDCA(const AliAODTrack* trk, Double_t b[2]) const
{
if(!trk->IsOn(AliAODTrack::kITSrefit) ) return kFALSE;
if(trk->GetITSNcls()<2) return kFALSE;
if(!trk->IsOn(AliAODTrack::kTPCrefit) ) return kFALSE;
if(!trk->TestFilterBit(AliAODTrack::kTrkTPCOnly)) return kFALSE;
if(this->IsKinkDaughter(trk)) return kFALSE;
if(fTPCXRows)
{
if(trk->GetTPCNCrossedRows()<fMinTPCnClsOrXRows) return kFALSE;
if(this->GetNTPCXRowsOverFindable(trk)< 0.8 ) return kFALSE;
}
else
{
if(trk->GetTPCNcls()<fMinTPCnClsOrXRows) return kFALSE;
}
if(TMath::Abs(b[0]) > fMaxDCAxy) return kFALSE;
if(TMath::Abs(b[1]) > fMaxDCAz) return kFALSE;
return kTRUE;
}
Bool_t AliLnAODtrackCuts::AcceptItsTpcStdCut(const AliAODTrack* trk, Double_t b[2]) const
{
if(!trk->TestFilterBit(AliAODTrack::kTrkGlobalNoDCA)) return kFALSE;
if(trk->GetTPCNcls()<70) return kFALSE;
if(TMath::Abs(b[0]) > fMaxDCAxy) return kFALSE;
if(TMath::Abs(b[1]) > fMaxDCAz) return kFALSE;
return kTRUE;
}
Bool_t AliLnAODtrackCuts::AcceptTOF(const AliAODTrack* trk) const
{
if( !trk->IsOn(AliAODTrack::kTOFout) || !trk->IsOn(AliAODTrack::kTIME)) return kFALSE;
if( this->GetIntegratedLength(trk) < 350) return kFALSE;
if( trk->GetTOFsignal() < 1e-6) return kFALSE;
return kTRUE;
}
Bool_t AliLnAODtrackCuts::AcceptTrack(const AliAODTrack* trk, Double_t b[2], Double_t bCov[3]) const
{
if(fTrackSel == "its_tpc_dca")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
}
else if(fTrackSel == "its_tpc_dca_spd1")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
if(!trk->HasPointOnITSLayer(0) ) return kFALSE;
}
else if(fTrackSel == "its_tpc_dca_spd" || fTrackSel == "its_tpc_dca_spd2")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
if(!trk->HasPointOnITSLayer(0) && !trk->HasPointOnITSLayer(1) ) return kFALSE;
}
else if(fTrackSel == "its_tpc_tof_nsigma")
{
if(!this->AcceptItsTpcNSigma(trk, b, bCov)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
}
else if(fTrackSel == "its_tpc_tof_nsigma_spd" || fTrackSel == "its_tpc_tof_nsigma_spd2")
{
if(!this->AcceptItsTpcNSigma(trk, b, bCov)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
if(!trk->HasPointOnITSLayer(0) && !trk->HasPointOnITSLayer(1) ) return kFALSE;
}
else if(fTrackSel == "its_tpc_tof_dca")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
}
else if(fTrackSel == "its_tpc_tof_dca_spd1")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
if(!trk->HasPointOnITSLayer(0) ) return kFALSE;
}
else if(fTrackSel == "its_tpc_tof_dca_spd" || fTrackSel == "its_tpc_tof_dca_spd2")
{
if(!this->AcceptItsTpcDCA(trk, b)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
if(!trk->HasPointOnITSLayer(0) && !trk->HasPointOnITSLayer(1) ) return kFALSE;
}
else if(fTrackSel == "std_its_tpc_dca")
{
if(!this->AcceptItsTpcStdCut(trk, b)) return kFALSE;
}
else if(fTrackSel == "std_its_tpc_tof_dca")
{
if(!this->AcceptItsTpcStdCut(trk, b)) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
}
else if(fTrackSel == "std_its_tpc_2010" || fTrackSel == "std_its_tpc_2011")
{
if(!trk->TestFilterBit(AliAODTrack::kTrkGlobal)) return kFALSE;
if(trk->GetTPCNcls()<70) return kFALSE;
}
else if(fTrackSel == "std_its_tpc_tof_2010" || fTrackSel == "std_its_tpc_tof_2011")
{
if(!trk->TestFilterBit(AliAODTrack::kTrkGlobal)) return kFALSE;
if(trk->GetTPCNcls()<70) return kFALSE;
if(!this->AcceptTOF(trk)) return kFALSE;
}
else
{
return trk->TestFilterBit(AliAODTrack::kTrkGlobal);
}
return kTRUE;
}
Double_t AliLnAODtrackCuts::GetIntegratedLength(const AliAODTrack* trk, Int_t pid) const
{
Double_t times[10];
trk->GetIntegratedTimes(times);
Double_t m = AliPID::ParticleMass(AliPID::kElectron);
Double_t t = times[0];
Double_t p = (pid > AliPID::kTriton) ? 2.*trk->P() : trk->P();
Double_t c = 2.99792458e-2;
Double_t beta = p/TMath::Sqrt(p*p+m*m);
return c*t*beta;
}
Double_t AliLnAODtrackCuts::GetNSigmaToVertex(Double_t b[2], Double_t bCov[3]) const
{
Double_t bRes[2];
if (bCov[0]<=0 || bCov[2]<=0) {
AliDebugClass(1, "Estimated b resolution lower or equal zero!");
bCov[0]=0; bCov[2]=0;
}
bRes[0] = TMath::Sqrt(bCov[0]);
bRes[1] = TMath::Sqrt(bCov[2]);
if (bRes[0] == 0 || bRes[1] ==0)
return -1;
Double_t d = TMath::Sqrt(TMath::Power(b[0]/bRes[0],2) + TMath::Power(b[1]/bRes[1],2));
if (TMath::Exp(-d * d / 2) < 1e-15)
return 1000;
Double_t nSigma = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
return nSigma;
}
AliLnAODtrackCuts.cxx:100 AliLnAODtrackCuts.cxx:101 AliLnAODtrackCuts.cxx:102 AliLnAODtrackCuts.cxx:103 AliLnAODtrackCuts.cxx:104 AliLnAODtrackCuts.cxx:105 AliLnAODtrackCuts.cxx:106 AliLnAODtrackCuts.cxx:107 AliLnAODtrackCuts.cxx:108 AliLnAODtrackCuts.cxx:109 AliLnAODtrackCuts.cxx:110 AliLnAODtrackCuts.cxx:111 AliLnAODtrackCuts.cxx:112 AliLnAODtrackCuts.cxx:113 AliLnAODtrackCuts.cxx:114 AliLnAODtrackCuts.cxx:115 AliLnAODtrackCuts.cxx:116 AliLnAODtrackCuts.cxx:117 AliLnAODtrackCuts.cxx:118 AliLnAODtrackCuts.cxx:119 AliLnAODtrackCuts.cxx:120 AliLnAODtrackCuts.cxx:121 AliLnAODtrackCuts.cxx:122 AliLnAODtrackCuts.cxx:123 AliLnAODtrackCuts.cxx:124 AliLnAODtrackCuts.cxx:125 AliLnAODtrackCuts.cxx:126 AliLnAODtrackCuts.cxx:127 AliLnAODtrackCuts.cxx:128 AliLnAODtrackCuts.cxx:129 AliLnAODtrackCuts.cxx:130 AliLnAODtrackCuts.cxx:131 AliLnAODtrackCuts.cxx:132 AliLnAODtrackCuts.cxx:133 AliLnAODtrackCuts.cxx:134 AliLnAODtrackCuts.cxx:135 AliLnAODtrackCuts.cxx:136 AliLnAODtrackCuts.cxx:137 AliLnAODtrackCuts.cxx:138 AliLnAODtrackCuts.cxx:139 AliLnAODtrackCuts.cxx:140 AliLnAODtrackCuts.cxx:141 AliLnAODtrackCuts.cxx:142 AliLnAODtrackCuts.cxx:143 AliLnAODtrackCuts.cxx:144 AliLnAODtrackCuts.cxx:145 AliLnAODtrackCuts.cxx:146 AliLnAODtrackCuts.cxx:147 AliLnAODtrackCuts.cxx:148 AliLnAODtrackCuts.cxx:149 AliLnAODtrackCuts.cxx:150 AliLnAODtrackCuts.cxx:151 AliLnAODtrackCuts.cxx:152 AliLnAODtrackCuts.cxx:153 AliLnAODtrackCuts.cxx:154 AliLnAODtrackCuts.cxx:155 AliLnAODtrackCuts.cxx:156 AliLnAODtrackCuts.cxx:157 AliLnAODtrackCuts.cxx:158 AliLnAODtrackCuts.cxx:159 AliLnAODtrackCuts.cxx:160 AliLnAODtrackCuts.cxx:161 AliLnAODtrackCuts.cxx:162 AliLnAODtrackCuts.cxx:163 AliLnAODtrackCuts.cxx:164 AliLnAODtrackCuts.cxx:165 AliLnAODtrackCuts.cxx:166 AliLnAODtrackCuts.cxx:167 AliLnAODtrackCuts.cxx:168 AliLnAODtrackCuts.cxx:169 AliLnAODtrackCuts.cxx:170 AliLnAODtrackCuts.cxx:171 AliLnAODtrackCuts.cxx:172 AliLnAODtrackCuts.cxx:173 AliLnAODtrackCuts.cxx:174 AliLnAODtrackCuts.cxx:175 AliLnAODtrackCuts.cxx:176 AliLnAODtrackCuts.cxx:177 AliLnAODtrackCuts.cxx:178 AliLnAODtrackCuts.cxx:179 AliLnAODtrackCuts.cxx:180 AliLnAODtrackCuts.cxx:181 AliLnAODtrackCuts.cxx:182 AliLnAODtrackCuts.cxx:183 AliLnAODtrackCuts.cxx:184 AliLnAODtrackCuts.cxx:185 AliLnAODtrackCuts.cxx:186 AliLnAODtrackCuts.cxx:187 AliLnAODtrackCuts.cxx:188 AliLnAODtrackCuts.cxx:189 AliLnAODtrackCuts.cxx:190 AliLnAODtrackCuts.cxx:191 AliLnAODtrackCuts.cxx:192 AliLnAODtrackCuts.cxx:193 AliLnAODtrackCuts.cxx:194 AliLnAODtrackCuts.cxx:195 AliLnAODtrackCuts.cxx:196 AliLnAODtrackCuts.cxx:197 AliLnAODtrackCuts.cxx:198 AliLnAODtrackCuts.cxx:199 AliLnAODtrackCuts.cxx:200 AliLnAODtrackCuts.cxx:201 AliLnAODtrackCuts.cxx:202 AliLnAODtrackCuts.cxx:203 AliLnAODtrackCuts.cxx:204 AliLnAODtrackCuts.cxx:205 AliLnAODtrackCuts.cxx:206 AliLnAODtrackCuts.cxx:207 AliLnAODtrackCuts.cxx:208 AliLnAODtrackCuts.cxx:209 AliLnAODtrackCuts.cxx:210 AliLnAODtrackCuts.cxx:211 AliLnAODtrackCuts.cxx:212 AliLnAODtrackCuts.cxx:213 AliLnAODtrackCuts.cxx:214 AliLnAODtrackCuts.cxx:215 AliLnAODtrackCuts.cxx:216 AliLnAODtrackCuts.cxx:217 AliLnAODtrackCuts.cxx:218 AliLnAODtrackCuts.cxx:219 AliLnAODtrackCuts.cxx:220 AliLnAODtrackCuts.cxx:221 AliLnAODtrackCuts.cxx:222 AliLnAODtrackCuts.cxx:223 AliLnAODtrackCuts.cxx:224 AliLnAODtrackCuts.cxx:225 AliLnAODtrackCuts.cxx:226 AliLnAODtrackCuts.cxx:227 AliLnAODtrackCuts.cxx:228 AliLnAODtrackCuts.cxx:229 AliLnAODtrackCuts.cxx:230 AliLnAODtrackCuts.cxx:231 AliLnAODtrackCuts.cxx:232 AliLnAODtrackCuts.cxx:233 AliLnAODtrackCuts.cxx:234 AliLnAODtrackCuts.cxx:235 AliLnAODtrackCuts.cxx:236 AliLnAODtrackCuts.cxx:237 AliLnAODtrackCuts.cxx:238 AliLnAODtrackCuts.cxx:239 AliLnAODtrackCuts.cxx:240 AliLnAODtrackCuts.cxx:241 AliLnAODtrackCuts.cxx:242 AliLnAODtrackCuts.cxx:243 AliLnAODtrackCuts.cxx:244 AliLnAODtrackCuts.cxx:245 AliLnAODtrackCuts.cxx:246 AliLnAODtrackCuts.cxx:247 AliLnAODtrackCuts.cxx:248 AliLnAODtrackCuts.cxx:249 AliLnAODtrackCuts.cxx:250 AliLnAODtrackCuts.cxx:251 AliLnAODtrackCuts.cxx:252 AliLnAODtrackCuts.cxx:253 AliLnAODtrackCuts.cxx:254 AliLnAODtrackCuts.cxx:255 AliLnAODtrackCuts.cxx:256 AliLnAODtrackCuts.cxx:257 AliLnAODtrackCuts.cxx:258 AliLnAODtrackCuts.cxx:259 AliLnAODtrackCuts.cxx:260 AliLnAODtrackCuts.cxx:261 AliLnAODtrackCuts.cxx:262 AliLnAODtrackCuts.cxx:263 AliLnAODtrackCuts.cxx:264 AliLnAODtrackCuts.cxx:265 AliLnAODtrackCuts.cxx:266 AliLnAODtrackCuts.cxx:267 AliLnAODtrackCuts.cxx:268 AliLnAODtrackCuts.cxx:269 AliLnAODtrackCuts.cxx:270 AliLnAODtrackCuts.cxx:271 AliLnAODtrackCuts.cxx:272 AliLnAODtrackCuts.cxx:273 AliLnAODtrackCuts.cxx:274 AliLnAODtrackCuts.cxx:275 AliLnAODtrackCuts.cxx:276 AliLnAODtrackCuts.cxx:277 AliLnAODtrackCuts.cxx:278 AliLnAODtrackCuts.cxx:279 AliLnAODtrackCuts.cxx:280 AliLnAODtrackCuts.cxx:281 AliLnAODtrackCuts.cxx:282 AliLnAODtrackCuts.cxx:283 AliLnAODtrackCuts.cxx:284 AliLnAODtrackCuts.cxx:285 AliLnAODtrackCuts.cxx:286 AliLnAODtrackCuts.cxx:287 AliLnAODtrackCuts.cxx:288 AliLnAODtrackCuts.cxx:289 AliLnAODtrackCuts.cxx:290 AliLnAODtrackCuts.cxx:291 AliLnAODtrackCuts.cxx:292 AliLnAODtrackCuts.cxx:293 AliLnAODtrackCuts.cxx:294 AliLnAODtrackCuts.cxx:295 AliLnAODtrackCuts.cxx:296 AliLnAODtrackCuts.cxx:297 AliLnAODtrackCuts.cxx:298 AliLnAODtrackCuts.cxx:299 AliLnAODtrackCuts.cxx:300 AliLnAODtrackCuts.cxx:301 AliLnAODtrackCuts.cxx:302 AliLnAODtrackCuts.cxx:303 AliLnAODtrackCuts.cxx:304 AliLnAODtrackCuts.cxx:305 AliLnAODtrackCuts.cxx:306 AliLnAODtrackCuts.cxx:307 AliLnAODtrackCuts.cxx:308 AliLnAODtrackCuts.cxx:309 AliLnAODtrackCuts.cxx:310 AliLnAODtrackCuts.cxx:311 AliLnAODtrackCuts.cxx:312 AliLnAODtrackCuts.cxx:313 AliLnAODtrackCuts.cxx:314 AliLnAODtrackCuts.cxx:315 AliLnAODtrackCuts.cxx:316 AliLnAODtrackCuts.cxx:317 AliLnAODtrackCuts.cxx:318 AliLnAODtrackCuts.cxx:319 AliLnAODtrackCuts.cxx:320 AliLnAODtrackCuts.cxx:321 AliLnAODtrackCuts.cxx:322 AliLnAODtrackCuts.cxx:323 AliLnAODtrackCuts.cxx:324 AliLnAODtrackCuts.cxx:325 AliLnAODtrackCuts.cxx:326 AliLnAODtrackCuts.cxx:327 AliLnAODtrackCuts.cxx:328 AliLnAODtrackCuts.cxx:329 AliLnAODtrackCuts.cxx:330 AliLnAODtrackCuts.cxx:331 AliLnAODtrackCuts.cxx:332 AliLnAODtrackCuts.cxx:333 AliLnAODtrackCuts.cxx:334 AliLnAODtrackCuts.cxx:335 AliLnAODtrackCuts.cxx:336 AliLnAODtrackCuts.cxx:337 AliLnAODtrackCuts.cxx:338 AliLnAODtrackCuts.cxx:339 AliLnAODtrackCuts.cxx:340 AliLnAODtrackCuts.cxx:341 AliLnAODtrackCuts.cxx:342 AliLnAODtrackCuts.cxx:343 AliLnAODtrackCuts.cxx:344 AliLnAODtrackCuts.cxx:345 AliLnAODtrackCuts.cxx:346