#include "TTree.h"
#include "TList.h"
#include "TH2F.h"
+#include "TF1.h"
#include "TCanvas.h"
#include "TLorentzVector.h"
//________________________________________________________________________
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
fAnalysis->SetMaxSigmaToVertex(3.);
fAnalysis->SetITSRefit();
fAnalysis->SetTPCRefit();
- fAnalysis->SetPriorProbabilities(partFrac);
+ if(fFunctionUsed)
+ fAnalysis->SetPriorProbabilityFunctions(fElectronFunction,
+ fMuonFunction,
+ fPionFunction,
+ fKaonFunction,
+ fProtonFunction);
+ else
+ fAnalysis->SetPriorProbabilities(partFrac);
}
//________________________________________________________________________
class TList;
class AliESDEvent;
+#include "TF1.h"
#include "PWG2spectra/SPECTRA/AliProtonAnalysis.h"
#include "AliAnalysisTask.h"
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
#include <Riostream.h>
#include <TFile.h>
#include <TSystem.h>
+#include <TF1.h>
#include <TH2F.h>
#include <TH1D.h>
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;
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
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
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);
#include <TObject.h>
+class TF1;
class TH2F;
class TH1D;
class AliESDEvent;
//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);
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);
};
//____________________________________________//
// 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
//____________________________________________//
// 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
//____________________________________________//
// 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
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");
//____________________________________________//
// 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