]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliProtonAnalysisBase.cxx
Fixing warnings
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonAnalysisBase.cxx
index 725d003e662787f588cc05a9072b926ef4981695..d518dfa81f8c348244fa4b20437e8de41683099b 100644 (file)
@@ -45,6 +45,7 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
   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),
@@ -72,17 +73,20 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
   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",
@@ -129,6 +133,8 @@ AliProtonAnalysisBase::~AliProtonAnalysisBase() {
   if(fKaonFunction) delete fKaonFunction;
   if(fProtonFunction) delete fProtonFunction;
   if(fListVertexQA) delete fListVertexQA;
+  if(fPtDependentDcaXY) delete fPtDependentDcaXY;
+  if(fPhysicsSelection) delete fPhysicsSelection;
 }
 
 //____________________________________________________________________//
@@ -153,7 +159,7 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
   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;
@@ -207,9 +213,11 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
 //____________________________________________________________________//
 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)
@@ -393,15 +401,31 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDtrack* track) {
   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) {
@@ -419,6 +443,26 @@ Bool_t AliProtonAnalysisBase::IsPrimary(AliESDEvent *esd,
                               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();
@@ -495,6 +539,13 @@ Bool_t AliProtonAnalysisBase::IsPrimary(AliESDEvent *esd,
       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;
 }
@@ -505,7 +556,7 @@ Float_t AliProtonAnalysisBase::GetSigmaToVertex(AliESDtrack* esdTrack) const {
   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);
@@ -556,7 +607,7 @@ const AliESDVertex* AliProtonAnalysisBase::GetVertex(AliESDEvent* esd,
   // 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();
@@ -698,6 +749,7 @@ TCanvas *AliProtonAnalysisBase::GetListOfCuts() {
   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: "; 
@@ -887,7 +939,7 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
  
   //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();
@@ -918,7 +970,7 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(tpcTrack) {
       gPt = tpcTrack->Pt();
-      gP = tpcTrack->P();
+      gP = track->GetInnerParam()->P();
       gEta = tpcTrack->Eta();
     }
     Double_t fAlephParameters[5];
@@ -937,11 +989,15 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
       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
@@ -964,48 +1020,20 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
     }
 
     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;
 }