#include "TChain.h"
#include "TTree.h"
+#include "TString.h"
#include "TList.h"
#include "TH2F.h"
+#include "TH1I.h"
#include "TF1.h"
#include "TCanvas.h"
#include "TLorentzVector.h"
#include "AliESDInputHandler.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
+#include "AliCFContainer.h"
#include "PWG2spectra/SPECTRA/AliProtonAnalysis.h"
#include "AliAnalysisTaskProtons.h"
ClassImp(AliAnalysisTaskProtons)
+//________________________________________________________________________
+AliAnalysisTaskProtons::AliAnalysisTaskProtons()
+ : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0), fAnalysisType("ESD"),
+ fList(0), fAnalysis(0),
+ fElectronFunction(0), fMuonFunction(0),
+ fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
+ fFunctionUsed(kFALSE) {
+ //Dummy constructor
+
+}
+
//________________________________________________________________________
AliAnalysisTaskProtons::AliAnalysisTaskProtons(const char *name)
-: AliAnalysisTask(name, ""), fESD(0), fAOD(0), fAnalysisType("ESD"),
+: AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), fAnalysisType("ESD"),
fList(0), fAnalysis(0),
fElectronFunction(0), fMuonFunction(0),
fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
if (!tree) {
Printf("ERROR: Could not read chain from input slot 0");
} else {
- // Disable all branches and enable only the needed ones
- // The next two lines are different when data produced as AliESDEvent is read
if(fAnalysisType == "ESD") {
tree->SetBranchStatus("*", kFALSE);
- tree->SetBranchStatus("fTracks.*", kTRUE);
-
- AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+ tree->SetBranchStatus("Tracks.*", kTRUE);
+ AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+
if (!esdH) {
Printf("ERROR: Could not get ESDInputHandler");
} else
fESD = esdH->GetEvent();
}
else if(fAnalysisType == "AOD") {
- AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
- if (!aodH) {
- Printf("ERROR: Could not get AODInputHandler");
- } else
- fAOD = aodH->GetEvent();
+ AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+
+ if (!aodH) {
+ Printf("ERROR: Could not get AODInputHandler");
+ } else
+ fAOD = aodH->GetEvent();
}
- else
- Printf("Wrong analysis type: Only ESD and AOD types are allowed!");
+ else if(fAnalysisType == "MC") {
+ AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+ if (!mcH) {
+ Printf("ERROR: Could not retrieve MC event handler");
+ }
+ else
+ fMC = mcH->MCEvent();
+ }
+ else
+ Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
}
}
void AliAnalysisTaskProtons::CreateOutputObjects() {
// Create histograms
// Called once
+ //Prior probabilities
Double_t partFrac[5] = {0.01, 0.01, 0.85, 0.10, 0.05};
-
+
+ //proton analysis object
fAnalysis = new AliProtonAnalysis();
- fAnalysis->InitHistograms(10,-1.0,1.0,30,0.1,3.1);
+ fAnalysis->InitAnalysisHistograms(10,-1.0,1.0,26,0.5,3.1);
+
if(fAnalysisType == "ESD") {
+ //Use of TPConly tracks
+ fAnalysis->UseTPCOnly();
+
+ //TPC related cuts
fAnalysis->SetMinTPCClusters(50);
- fAnalysis->SetMinITSClusters(1);
fAnalysis->SetMaxChi2PerTPCCluster(3.5);
fAnalysis->SetMaxCov11(2.0);
fAnalysis->SetMaxCov22(2.0);
fAnalysis->SetMaxCov33(0.5);
fAnalysis->SetMaxCov44(0.5);
fAnalysis->SetMaxCov55(2.0);
- fAnalysis->SetMaxSigmaToVertex(3.);
- fAnalysis->SetITSRefit();
+ fAnalysis->SetMaxSigmaToVertex(2.5);
fAnalysis->SetTPCRefit();
+
+ //ITS related cuts - to be used for the analysis of global tracking
+ //fAnalysis->SetMinITSClusters(5);
+ //fAnalysis->SetITSRefit();
}
+
if(fFunctionUsed)
fAnalysis->SetPriorProbabilityFunctions(fElectronFunction,
fMuonFunction,
fProtonFunction);
else
fAnalysis->SetPriorProbabilities(partFrac);
+
+ fList = new TList();
+ fList->Add(fAnalysis->GetProtonYPtHistogram());
+ fList->Add(fAnalysis->GetAntiProtonYPtHistogram());
+ fList->Add(fAnalysis->GetEventHistogram());
+ fList->Add(fAnalysis->GetProtonContainer());
+ fList->Add(fAnalysis->GetAntiProtonContainer());
}
//________________________________________________________________________
Printf("ERROR: fESD not available");
return;
}
-
- Printf("Proton analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks());
+
+ Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks());
fAnalysis->Analyze(fESD);
- }
+ }//ESD analysis
+
else if(fAnalysisType == "AOD") {
if (!fAOD) {
Printf("ERROR: fAOD not available");
return;
}
- Printf("Proton analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());
+ Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());
fAnalysis->Analyze(fAOD);
- }
- fList = new TList();
- fList->Add(fAnalysis->GetProtonYPtHistogram());
- fList->Add(fAnalysis->GetAntiProtonYPtHistogram());
+ }//AOD analysis
+
+ else if(fAnalysisType == "MC") {
+ if (!fMC) {
+ Printf("ERROR: Could not retrieve MC event");
+ return;
+ }
+
+ AliStack* stack = fMC->Stack();
+ if (!stack) {
+ Printf("ERROR: Could not retrieve the stack");
+ return;
+ }
+ Printf("Proton MC analysis task: There are %d primaries in this event", stack->GetNprimary());
+ fAnalysis->Analyze(stack);
+ }//MC analysis
// Post output data.
PostData(0, fList);
TH2F *fHistYPtProtons = (TH2F *)fList->At(0);
TH2F *fHistYPtAntiProtons = (TH2F *)fList->At(1);
- TCanvas *c2 = new TCanvas("c2","p-\bar{p}",200,0,800,400);
- c2->SetFillColor(10); c2->SetHighLightColor(10); c2->Divide(2,1);
+ TCanvas *c1 = new TCanvas("c1","p-\bar{p}",200,0,800,400);
+ c1->SetFillColor(10); c1->SetHighLightColor(10); c1->Divide(2,1);
- c2->cd(1)->SetLeftMargin(0.15); c2->cd(1)->SetBottomMargin(0.15);
+ c1->cd(1)->SetLeftMargin(0.15); c1->cd(1)->SetBottomMargin(0.15);
if (fHistYPtProtons) fHistYPtProtons->DrawCopy("colz");
- c2->cd(2)->SetLeftMargin(0.15); c2->cd(2)->SetBottomMargin(0.15);
+ c1->cd(2)->SetLeftMargin(0.15); c1->cd(2)->SetBottomMargin(0.15);
if (fHistYPtAntiProtons) fHistYPtAntiProtons->DrawCopy("colz");
}