fPhysicsSelection(0),
fProtonAnalysisMode(kTPC), fProtonPIDMode(kBayesian),
fAnalysisEtaMode(kFALSE),
+ fRunQAAnalysis(kFALSE),
fVxMax(100.), fVyMax(100.), fVzMax(100.), fMinNumOfContributors(0),
fNBinsX(0), fMinX(0), fMaxX(0),
fNBinsY(0), fMinY(0), fMaxY(0),
fPointOnITSLayer3Flag(0), fPointOnITSLayer4Flag(0),
fPointOnITSLayer5Flag(0), fPointOnITSLayer6Flag(0),
fMinTPCdEdxPointsFlag(kFALSE),
+ fPtDependentDcaXY(0), fPtDependentDcaXYFlag(kFALSE), fNSigmaDCAXY(0.0),
fFunctionProbabilityFlag(kFALSE),
fNSigma(0), fNRatio(0),
fElectronFunction(0), fMuonFunction(0),
fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
- fDebugMode(kFALSE), fListVertexQA(new TList()) {
+ fDebugMode(kFALSE), fListVertexQA(0) {
//Default constructor
for(Int_t i = 0; i < 5; i++) fPartFrac[i] = 0.0;
/*for(Int_t i = 0; i < 24; i++) {
fdEdxMean[i] = 0.0;
fdEdxSigma[i] = 0.0;
}*/
+
+ fListVertexQA = new TList();
fListVertexQA->SetName("fListVertexQA");
TH1F *gHistVx = new TH1F("gHistVx",
"Vx distribution;V_{x} [cm];Entries",
if(fKaonFunction) delete fKaonFunction;
if(fProtonFunction) delete fProtonFunction;
if(fListVertexQA) delete fListVertexQA;
+ if(fPtDependentDcaXY) delete fPtDependentDcaXY;
+ if(fPhysicsSelection) delete fPhysicsSelection;
}
//____________________________________________________________________//
Double_t gP = 0.0, gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
Double_t eta = 0.0;
- if((fProtonAnalysisMode == kTPC) || (fProtonAnalysisMode == kHybrid)) {
+ if((fProtonAnalysisMode == kTPC) || (fProtonAnalysisMode == kHybrid) || (fProtonAnalysisMode == kFullHybrid)) {
AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
if(!tpcTrack) {
gP = 0.0; gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0; eta = -10.0;
//____________________________________________________________________//
Bool_t AliProtonAnalysisBase::IsAccepted(AliESDtrack* track) {
// Checks if the track is excluded from the cuts
- Int_t fIdxInt[200];
- Int_t nClustersITS = track->GetITSclusters(fIdxInt);
- Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
+ //Int_t fIdxInt[200];
+ //Int_t nClustersITS = track->GetITSclusters(fIdxInt);
+ //Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
+ Int_t nClustersITS = track->GetITSclusters(0x0);
+ Int_t nClustersTPC = track->GetTPCclusters(0x0);
Float_t chi2PerClusterITS = -1;
if (nClustersITS!=0)
return kTRUE;
}
+//____________________________________________________________________//
+void AliProtonAnalysisBase::SetPtDependentDCAxy(Int_t nSigma,
+ Double_t p0,
+ Double_t p1,
+ Double_t p2) {
+ //Pt dependent dca cut in xy
+ fNSigmaDCAXY = nSigma;
+ fPtDependentDcaXY = new TF1("fPtDependentDcaXY","[0]+[1]/x^[2]",0.1,10.1);
+ fPtDependentDcaXY->SetParameter(0,p0);
+ fPtDependentDcaXY->SetParameter(1,p1);
+ fPtDependentDcaXY->SetParameter(2,p2);
+ fPtDependentDcaXYFlag = kTRUE;
+}
+
//____________________________________________________________________//
Bool_t AliProtonAnalysisBase::IsPrimary(AliESDEvent *esd,
const AliESDVertex *vertex,
AliESDtrack* track) {
// Checks if the track is a primary-like candidate
+ const Double_t kMicrometer2Centimeter = 0.0001;
Double_t gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0}; //The impact parameters and their covariance.
Double_t dca3D = 0.0;
-
+ Float_t dcaXY = 0.0, dcaZ = 0.0;
+
if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)) {
AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
if(!tpcTrack) {
100.,dca,cov);
}
}//standalone TPC or hybrid TPC approaches
+ if(fProtonAnalysisMode == kFullHybrid) {
+ AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+ AliExternalTrackParam cParam;
+ if(!tpcTrack) {
+ gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
+ dca[0] = -100.; dca[1] = -100.; dca3D = -100.;
+ cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
+ }
+ else {
+ gPt = tpcTrack->Pt();
+ gPx = tpcTrack->Px();
+ gPy = tpcTrack->Py();
+ gPz = tpcTrack->Pz();
+ track->RelateToVertex(vertex,
+ esd->GetMagneticField(),
+ 100.,&cParam);
+ track->GetImpactParameters(dcaXY,dcaZ);
+ dca[0] = dcaXY; dca[1] = dcaZ;
+ }
+ }//standalone TPC or hybrid TPC approaches
else {
gPt = track->Pt();
gPx = track->Px();
return kFALSE;
}
}
+ if(fPtDependentDcaXYFlag) {
+ if(TMath::Abs(dca[0]) > kMicrometer2Centimeter*fNSigmaDCAXY*fPtDependentDcaXY->Eval(gPt)) {
+ if(fDebugMode)
+ Printf("IsPrimary: Track rejected because it has a value of the dca(xy) higher than the %d sigma pt dependent cut: %lf (max. requested: %lf)",fNSigmaDCAXY,TMath::Abs(dca[0]),fNSigmaDCAXY*fPtDependentDcaXY->Eval(gPt));
+ return kFALSE;
+ }
+ }
return kTRUE;
}
Float_t b[2];
Float_t bRes[2];
Float_t bCov[3];
- if((fProtonAnalysisMode == kTPC)&&(fProtonAnalysisMode != kHybrid))
+ if((fProtonAnalysisMode == kTPC)&&(fProtonAnalysisMode != kHybrid)&&(fProtonAnalysisMode != kFullHybrid))
esdTrack->GetImpactParametersTPC(b,bCov);
else
esdTrack->GetImpactParameters(b,bCov);
// Second argument decides which vertex is used (this selects
// also the quality criteria that are applied)
const AliESDVertex* vertex = 0;
- if(mode == kHybrid)
+ if((mode == kHybrid)||(mode == kFullHybrid))
vertex = esd->GetPrimaryVertexSPD();
else if(mode == kTPC){
Double_t kBz = esd->GetMagneticField();
listOfCuts = "Analysis mode: ";
if(fProtonAnalysisMode == kTPC) listOfCuts += "TPC standalone";
if(fProtonAnalysisMode == kHybrid) listOfCuts += "Hybrid TPC";
+ if(fProtonAnalysisMode == kFullHybrid) listOfCuts += "Full Hybrid TPC";
if(fProtonAnalysisMode == kGlobal) listOfCuts += "Global tracking";
l.DrawLatex(0.1,0.74,listOfCuts.Data());
listOfCuts = "Trigger mode: ";
//Bayesian approach for the PID
if(fProtonPIDMode == kBayesian) {
- if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)) {
+ if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)||(fProtonAnalysisMode == kFullHybrid)) {
AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
if(tpcTrack) {
gPt = tpcTrack->Pt();
AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
if(tpcTrack) {
gPt = tpcTrack->Pt();
- gP = tpcTrack->P();
+ gP = track->GetInnerParam()->P();
gEta = tpcTrack->Eta();
}
Double_t fAlephParameters[5];
fAlephParameters[4] = 4.88663e+00;
}
- AliESDpid *fESDpid = new AliESDpid();
- AliTPCPIDResponse tpcResponse = fESDpid->GetTPCResponse();
- tpcResponse.SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
- Double_t normalizeddEdx = TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton));
-
+ AliTPCPIDResponse *tpcResponse = new AliTPCPIDResponse();
+ tpcResponse->SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+
+ Double_t normalizeddEdx = -10.;
+ if((track->GetTPCsignal() > 0.0) && (tpcResponse->GetExpectedSignal(gP,AliPID::kProton) > 0.0))
+ normalizeddEdx = TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton));
+
+ delete tpcResponse;
+
if(normalizeddEdx >= fNRatio)
return kTRUE;
}//kRatio PID mode
}
Double_t nsigma = 100.0;
- AliESDpid *fESDpid = new AliESDpid();
- fESDpid->GetTPCResponse().SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+ AliTPCPIDResponse *tpcResponse = new AliTPCPIDResponse();
+ tpcResponse->SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
- AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
- if(tpcTrack)
- nsigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track,AliPID::kProton));
+ Double_t mom = track->GetP();
+ const AliExternalTrackParam *in = track->GetInnerParam();
+ if (in)
+ mom = in->GetP();
+
+ nsigma = TMath::Abs(tpcResponse->GetNumberOfSigmas(mom,track->GetTPCsignal(),track->GetTPCsignalN(),AliPID::kProton));
+ delete tpcResponse;
if(nsigma <= fNSigma)
return kTRUE;
}//kSigma PID method
- //Another definition of an N-sigma area around the dE/dx vs P band
- /*else if(fProtonPIDMode == kSigma2) {
- AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
- if(tpcTrack) {
- gPt = tpcTrack->Pt();
- gP = tpcTrack->P();
- gEta = tpcTrack->Eta();
- }
- Double_t fAlephParameters[5];
- if(fAnalysisMC) {
- fAlephParameters[0] = 2.15898e+00/50.;
- fAlephParameters[1] = 1.75295e+01;
- fAlephParameters[2] = 3.40030e-09;
- fAlephParameters[3] = 1.96178e+00;
- fAlephParameters[4] = 3.91720e+00;
- }
- else {
- fAlephParameters[0] = 0.0283086;
- fAlephParameters[1] = 2.63394e+01;
- fAlephParameters[2] = 5.04114e-11;
- fAlephParameters[3] = 2.12543e+00;
- fAlephParameters[4] = 4.88663e+00;
- }
-
- AliESDpid *fESDpid = new AliESDpid();
- AliTPCPIDResponse tpcResponse = fESDpid->GetTPCResponse();
- tpcResponse.SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
- Double_t normalizeddEdx = TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton));
-
- if(normalizeddEdx >= -0.15)
- return kTRUE;
- }*/
return kFALSE;
}