]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Possibility to define a momentum dependent prior probabilities from fit functions...
authorpanos <panos@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Nov 2007 12:46:01 +0000 (12:46 +0000)
committerpanos <panos@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Nov 2007 12:46:01 +0000 (12:46 +0000)
PWG2/AliAnalysisTaskProtons.cxx
PWG2/AliAnalysisTaskProtons.h
PWG2/SPECTRA/AliProtonAnalysis.cxx
PWG2/SPECTRA/AliProtonAnalysis.h
PWG2/runProtonAnalysis.C

index 4b48c012f79b46e76cc9c96afff3fb4f9d35b8c7..4b2978d8989eff2059eb5bb8d7a5c3d9b8632a72 100644 (file)
@@ -2,6 +2,7 @@
 #include "TTree.h"
 #include "TList.h"
 #include "TH2F.h"
+#include "TF1.h"
 #include "TCanvas.h"
 #include "TLorentzVector.h"
 
@@ -21,7 +22,10 @@ ClassImp(AliAnalysisTaskProtons)
 
 //________________________________________________________________________
 AliAnalysisTaskProtons::AliAnalysisTaskProtons(const char *name) 
-  : AliAnalysisTask(name, ""), fESD(0), fList(0), fAnalysis(0) { 
+: AliAnalysisTask(name, ""), fESD(0), fList(0), fAnalysis(0), 
+  fElectronFunction(0), fMuonFunction(0),
+  fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
+  fFunctionUsed(kFALSE) { 
   // Constructor
 
   // Define input and output slots here
@@ -73,7 +77,14 @@ void AliAnalysisTaskProtons::CreateOutputObjects() {
   fAnalysis->SetMaxSigmaToVertex(3.);
   fAnalysis->SetITSRefit();
   fAnalysis->SetTPCRefit();
-  fAnalysis->SetPriorProbabilities(partFrac);
+  if(fFunctionUsed)
+    fAnalysis->SetPriorProbabilityFunctions(fElectronFunction,
+                                           fMuonFunction,
+                                           fPionFunction,
+                                           fKaonFunction,
+                                           fProtonFunction);
+  else
+    fAnalysis->SetPriorProbabilities(partFrac);
 }
 
 //________________________________________________________________________
index 05bac66c3ae1baa50b014ac931c6cc475b6951bb..eceeeee02287af4b16bb57919906d93d8b813d10 100644 (file)
@@ -6,6 +6,7 @@
 
 class TList;
 class AliESDEvent;
+#include "TF1.h"
 
 #include "PWG2spectra/SPECTRA/AliProtonAnalysis.h"
 #include "AliAnalysisTask.h"
@@ -19,12 +20,32 @@ class AliAnalysisTaskProtons : public AliAnalysisTask {
   virtual void   CreateOutputObjects();
   virtual void   Exec(Option_t *option);
   virtual void   Terminate(Option_t *);
+
+  void SetPriorProbabilityFunctions(TF1 *felectrons, 
+                                   TF1 *fmuons,
+                                   TF1 *fpions,
+                                   TF1 *fkaons,
+                                   TF1 *fprotons) {
+    fFunctionUsed = kTRUE;
+    fElectronFunction = felectrons;
+    fMuonFunction = fmuons;
+    fPionFunction = fpions;
+    fKaonFunction = fkaons;
+    fProtonFunction = fprotons;
+  }
   
  private:
   AliESDEvent *fESD;    //ESD object
   TList  *fList; //TList output object
   AliProtonAnalysis *fAnalysis; //analysis object
-   
+  TF1 *fElectronFunction; //TF1 for e
+  TF1 *fMuonFunction; //TF1 for mu
+  TF1 *fPionFunction; //TF1 for pi
+  TF1 *fKaonFunction; //TF1 for K
+  TF1 *fProtonFunction; //TF1 for p
+
+  Bool_t fFunctionUsed; //kTRUE if Functions are used
+
   AliAnalysisTaskProtons(const AliAnalysisTaskProtons&); // not implemented
   AliAnalysisTaskProtons& operator=(const AliAnalysisTaskProtons&); // not implemented
   
index 50504ff4d2bc8d05e1f401bbea04a75b8acf13e9..a127d53d7bdf37f1c9e16df46bd039b0d0bf5796 100644 (file)
@@ -21,6 +21,7 @@
 #include <Riostream.h>
 #include <TFile.h>
 #include <TSystem.h>
+#include <TF1.h>
 #include <TH2F.h>
 #include <TH1D.h>
 
@@ -45,6 +46,9 @@ AliProtonAnalysis::AliProtonAnalysis() :
   fMaxCov11Flag(kFALSE), fMaxCov22Flag(kFALSE), fMaxCov33Flag(kFALSE), fMaxCov44Flag(kFALSE), fMaxCov55Flag(kFALSE),
   fMaxSigmaToVertexFlag(kFALSE),
   fITSRefitFlag(kFALSE), fTPCRefitFlag(kFALSE),
+  fFunctionProbabilityFlag(kFALSE), 
+  fElectronFunction(0), fMuonFunction(0),
+  fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
   fHistYPtProtons(0), fHistYPtAntiProtons(0) {
   //Default constructor
   for(Int_t i = 0; i < 5; i++) fPartFrac[i] = 0.0;
@@ -55,6 +59,18 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Float_t fLowY, Float_t fHighY
   TObject(),
   fNBinsY(nbinsY), fMinY(fLowY), fMaxY(fHighY),
   fNBinsPt(nbinsPt), fMinPt(fLowPt), fMaxPt(fHighPt),
+  fMinTPCClusters(0), fMinITSClusters(0),
+  fMaxChi2PerTPCCluster(0), fMaxChi2PerITSCluster(0),
+  fMaxCov11(0), fMaxCov22(0), fMaxCov33(0), fMaxCov44(0), fMaxCov55(0),
+  fMaxSigmaToVertex(0),
+  fMinTPCClustersFlag(kFALSE), fMinITSClustersFlag(kFALSE),
+  fMaxChi2PerTPCClusterFlag(kFALSE), fMaxChi2PerITSClusterFlag(kFALSE),
+  fMaxCov11Flag(kFALSE), fMaxCov22Flag(kFALSE), fMaxCov33Flag(kFALSE), fMaxCov44Flag(kFALSE), fMaxCov55Flag(kFALSE),
+  fMaxSigmaToVertexFlag(kFALSE),
+  fITSRefitFlag(kFALSE), fTPCRefitFlag(kFALSE),
+  fFunctionProbabilityFlag(kFALSE), 
+  fElectronFunction(0), fMuonFunction(0),
+  fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
   fHistYPtProtons(0), fHistYPtAntiProtons(0) {
   //Default constructor
 
@@ -240,6 +256,21 @@ TH1D *AliProtonAnalysis::GetPtAsymmetryHistogram() {
   return hAsymmetryPt;
 }
 
+//____________________________________________________________________//
+Double_t AliProtonAnalysis::GetParticleFraction(Int_t i, Double_t p) {
+  Double_t partFrac;
+  if(fFunctionProbabilityFlag) {
+    if(i == 0) partFrac = fElectronFunction->Eval(p);
+    if(i == 1) partFrac = fMuonFunction->Eval(p);
+    if(i == 2) partFrac = fPionFunction->Eval(p);
+    if(i == 3) partFrac = fKaonFunction->Eval(p);
+    if(i == 4) partFrac = fProtonFunction->Eval(p);
+  }
+  else partFrac = fPartFrac[i];
+
+  return partFrac;
+}
+
 //____________________________________________________________________//
 void AliProtonAnalysis::Analyze(AliESDEvent* fESD) {
   //Main analysis part
@@ -248,15 +279,16 @@ void AliProtonAnalysis::Analyze(AliESDEvent* fESD) {
     AliESDtrack* track = fESD->GetTrack(iTracks);
     if(IsAccepted(track)) {
       Double_t Pt = track->Pt();
+      Double_t P = track->P();
        
-         //pid
+      //pid
       Double_t probability[5];
          track->GetESDpid(probability);
       Double_t rcc = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++) rcc += probability[i]*fPartFrac[i];
+      for(Int_t i = 0; i < AliPID::kSPECIES; i++) rcc += probability[i]*GetParticleFraction(i,P);
       if(rcc == 0.0) continue;
       Double_t w[5];
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++) w[i] = probability[i]*fPartFrac[i]/rcc;
+      for(Int_t i = 0; i < AliPID::kSPECIES; i++) w[i] = probability[i]*GetParticleFraction(i,P)/rcc;
       Long64_t fParticleType = TMath::LocMax(AliPID::kSPECIES,w);
       if(fParticleType == 4) {
         if(track->Charge() > 0) fHistYPtProtons->Fill(Rapidity(track),Pt);
index 1726faeb6a758ce4ed6299ef3a24754766cdd25b..fbaca564dcb5ab0cb9dc300af1a070f3937723a6 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <TObject.h>
 
+class TF1;
 class TH2F;
 class TH1D;
 class AliESDEvent;
@@ -74,7 +75,16 @@ class AliProtonAnalysis : public TObject {
   
   //Prior probabilities
   void    SetPriorProbabilities(Double_t *partFrac) {for(Int_t i = 0; i < 5; i++) fPartFrac[i] = partFrac[i];} 
-  
+  void    SetPriorProbabilityFunctions(TF1 *felectron, TF1 *fmuon, TF1 *fpion, TF1 *fkaon, TF1 *fproton) {
+    fFunctionProbabilityFlag = kTRUE;
+    fElectronFunction = felectron; 
+    fMuonFunction = fmuon; 
+    fPionFunction = fpion;
+    fKaonFunction = fkaon;
+    fProtonFunction = fproton;
+  } 
+  Double_t GetParticleFraction(Int_t i, Double_t p);
+
  private:
   Bool_t IsAccepted(AliESDtrack *track);
   Float_t GetSigmaToVertex(AliESDtrack* esdTrack); 
@@ -97,10 +107,16 @@ class AliProtonAnalysis : public TObject {
   Bool_t fITSRefitFlag, fTPCRefitFlag; //shows if this cut is used or not
   
   //pid
+  Bool_t fFunctionProbabilityFlag; //flag: kTRUE if functions used
   Double_t fPartFrac[5]; //prior probabilities
-  
-  TH2F* fHistYPtProtons; //Y-Pt of Protons
-  TH2F* fHistYPtAntiProtons; // Y-Pt of Antiprotons
+  TF1  *fElectronFunction; //momentum dependence of the prior probs
+  TF1  *fMuonFunction; //momentum dependence of the prior probs
+  TF1  *fPionFunction; //momentum dependence of the prior probs
+  TF1  *fKaonFunction; //momentum dependence of the prior probs
+  TF1  *fProtonFunction; //momentum dependence of the prior probs
+
+  TH2F *fHistYPtProtons; //Y-Pt of Protons
+  TH2F *fHistYPtAntiProtons; // Y-Pt of Antiprotons
   
   ClassDef(AliProtonAnalysis,0);
 };
index 361b1da2b57ba4ea5f5b1f770012edd14fa3f63f..7da6b1f2d29223a31ec424eba42accb34b40855c 100644 (file)
@@ -70,6 +70,17 @@ void runLocal() {
   //____________________________________________//
   // 1st Proton task
   AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
+  TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+  TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons");
+  TF1 *fitMuons = (TF1 *)f->Get("fitMuons");
+  TF1 *fitPions = (TF1 *)f->Get("fitPions");
+  TF1 *fitKaons = (TF1 *)f->Get("fitKaons");
+  TF1 *fitProtons = (TF1 *)f->Get("fitProtons");
+  task1->SetPriorProbabilityFunctions(fitElectrons,
+                                     fitMuons,
+                                     fitPions,
+                                     fitKaons,
+                                     fitProtons);
   mgr->AddTask(task1);
 
   // Create containers for input/output
@@ -153,6 +164,17 @@ void runInteractive() {
   //____________________________________________//
   // 1st Proton task
   AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
+  TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+  TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons");
+  TF1 *fitMuons = (TF1 *)f->Get("fitMuons");
+  TF1 *fitPions = (TF1 *)f->Get("fitPions");
+  TF1 *fitKaons = (TF1 *)f->Get("fitKaons");
+  TF1 *fitProtons = (TF1 *)f->Get("fitProtons");
+  task1->SetPriorProbabilityFunctions(fitElectrons,
+                                     fitMuons,
+                                     fitPions,
+                                     fitKaons,
+                                     fitProtons);
   mgr->AddTask(task1);
 
   // Create containers for input/output
@@ -229,6 +251,17 @@ void runBatch() {
   //____________________________________________//
   // 1st Proton task
   AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
+  TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+  TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons");
+  TF1 *fitMuons = (TF1 *)f->Get("fitMuons");
+  TF1 *fitPions = (TF1 *)f->Get("fitPions");
+  TF1 *fitKaons = (TF1 *)f->Get("fitKaons");
+  TF1 *fitProtons = (TF1 *)f->Get("fitProtons");
+  task1->SetPriorProbabilityFunctions(fitElectrons,
+                                     fitMuons,
+                                     fitPions,
+                                     fitKaons,
+                                     fitProtons);
   mgr->AddTask(task1);
 
   // Create containers for input/output
@@ -252,7 +285,7 @@ void runProof() {
   timer.Start();
   printf("****** Connect to PROOF *******\n");
   TProof::Open("proof://lxb6046.cern.ch"); 
-  gProof->SetParallel(1);
+  gProof->SetParallel();
 
   // Enable the Analysis Package
   gProof->UploadPackage("STEERBase.par");
@@ -283,6 +316,17 @@ void runProof() {
   //____________________________________________//
   // 1st Proton task
   AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
+  TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+  TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons");
+  TF1 *fitMuons = (TF1 *)f->Get("fitMuons");
+  TF1 *fitPions = (TF1 *)f->Get("fitPions");
+  TF1 *fitKaons = (TF1 *)f->Get("fitKaons");
+  TF1 *fitProtons = (TF1 *)f->Get("fitProtons");
+  task1->SetPriorProbabilityFunctions(fitElectrons,
+                                     fitMuons,
+                                     fitPions,
+                                     fitKaons,
+                                     fitProtons);
   mgr->AddTask(task1);
 
   // Create containers for input/output