#include "AliESDInputHandler.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
#include "AliProtonAnalysis.h"
#include "AliAnalysisTaskProtons.h"
//________________________________________________________________________
AliAnalysisTaskProtons::AliAnalysisTaskProtons()
-: AliAnalysisTask(), fESD(0), fAOD(0), fAnalysisType("ESD"),
+: AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),fAnalysisType("ESD"),
fList(0), fAnalysis(0),
fElectronFunction(0), fMuonFunction(0),
fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
//________________________________________________________________________
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),
// 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") {
-// In train mode branches can be disabled at the level of ESD handler (M.G.)
-// tree->SetBranchStatus("*", kFALSE);
+ // In train mode branches can be disabled at the level of ESD handler (M.G.)
+ // tree->SetBranchStatus("*", kFALSE);
tree->SetBranchStatus("*Tracks.*", kTRUE);
AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
} else
fAOD = aodH->GetEvent();
}
+ 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 and AOD types are allowed!");
+ Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
}
}
fAnalysis = new AliProtonAnalysis();
fAnalysis->InitHistograms(10,-1.0,1.0,30,0.1,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 in the case of the analysis of global tracks
+ //fAnalysis->SetMinITSClusters(5);
+ //fAnalysis->SetITSRefit();
}
if(fFunctionUsed)
fAnalysis->SetPriorProbabilityFunctions(fElectronFunction,
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);
- }
+ }//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);
//runLocal();
//runInteractive();
//runBatch();
- runProof();
+ runProof("/PWG0/COMMON/run30000X_10TeV_0.5T",200000);
timer.Stop();
timer.Print();
//____________________________________________________//
setupPar("AOD");
gSystem->Load("libAOD.so");
-
+
//_________________________________________________________//
//_____________Setting up ANALYSIS.par_____________________//
//_________________________________________________________//
setupPar("ANALYSIS");
gSystem->Load("libANALYSIS.so");
+ //_________________________________________________________//
+ //___________Setting up ANALYSISalice.par__________________//
+ //_________________________________________________________//
+ setupPar("ANALYSISalice");
+ gSystem->Load("libANALYSISalice.so");
+
//____________________________________________________________//
//_____________Setting up PWG2spectra.par_____________________//
//____________________________________________________________//
gROOT->LoadMacro("AliAnalysisTaskProtons.cxx++");
//____________________________________________//
- AliTagAnalysis *TagAna = new AliTagAnalysis("ESD");
- TagAna->ChainLocalTags("/home/pchrist/ALICE/Alien/Tutorial/November2007/Tags");
+ AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
+ tagAnalysis->ChainLocalTags("/home/pchrist/ALICE/Alien/Tutorial/November2007/Tags");
AliRunTagCuts *runCuts = new AliRunTagCuts();
AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
AliEventTagCuts *evCuts = new AliEventTagCuts();
TChain* chain = 0x0;
- chain = TagAna->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
+ chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
chain->SetBranchStatus("*Calo*",0);
//____________________________________________//
mgr->SetInputEventHandler(esdH);
//____________________________________________//
// 1st Proton task
- AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
- TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+ AliAnalysisTaskProtons *taskProtons = 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);
+ taskProtons->SetPriorProbabilityFunctions(fitElectrons,
+ fitMuons,
+ fitPions,
+ fitKaons,
+ fitProtons);*/
+ mgr->AddTask(taskProtons);
+
+ // Create containers for input/output
+ AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("dataChain",
+ TChain::Class(),AliAnalysisManager::kInputContainer);
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList1",
+ TList::Class(),AliAnalysisManager::kOutputCont
+ "Protons.ESD.root");
- // Create containers for input/output
- AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clist1", TList::Class(),AliAnalysisManager::kOutputContainer,"Protons.ESD.root");
-
//____________________________________________//
- mgr->ConnectInput(task1,0,cinput1);
- mgr->ConnectOutput(task1,0,coutput1);
+ mgr->ConnectInput(taskProtons,0,cinput1);
+ mgr->ConnectOutput(taskProtons,0,coutput1);
if (!mgr->InitAnalysis()) return;
mgr->PrintStatus();
mgr->StartAnalysis("local",chain);
setupPar("ANALYSIS");
gSystem->Load("libANALYSIS.so");
+ //_________________________________________________________//
+ //___________Setting up ANALYSISalice.par__________________//
+ //_________________________________________________________//
+ setupPar("ANALYSISalice");
+ gSystem->Load("libANALYSISalice.so");
+
//____________________________________________________________//
//_____________Setting up PWG2spectra.par_____________________//
//____________________________________________________________//
gROOT->LoadMacro("AliAnalysisTaskProtons.cxx++");
//____________________________________________//
- AliTagAnalysis *TagAna = new AliTagAnalysis("ESD");
+ AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
AliRunTagCuts *runCuts = new AliRunTagCuts();
AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
//grid tags
TAlienCollection* coll = TAlienCollection::Open("tag.xml");
TGridResult* TagResult = coll->GetGridResult("",0,0);
- TagAna->ChainGridTags(TagResult);
+ tagAnalysis->ChainGridTags(TagResult);
TChain* chain = 0x0;
- chain = TagAna->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
+ chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
chain->SetBranchStatus("*Calo*",0);
//____________________________________________//
mgr->SetInputEventHandler(esdH);
//____________________________________________//
// 1st Proton task
- AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
- TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+ AliAnalysisTaskProtons *taskProtons = 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
- AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clist1", TList::Class(),AliAnalysisManager::kOutputContainer,"Protons.ESD.root");
+ taskProtons->SetPriorProbabilityFunctions(fitElectrons,
+ fitMuons,
+ fitPions,
+ fitKaons,
+ fitProtons);*/
+ mgr->AddTask(taskProtons);
+
+ // Create containers for input/output
+ AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("dataChain",
+ TChain::Class(),AliAnalysisManager::kInputContainer);
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList1",
+ TList::Class(),AliAnalysisManager::kOutputCont
+ "Protons.ESD.root");
//____________________________________________//
- mgr->ConnectInput(task1,0,cinput1);
- mgr->ConnectOutput(task1,0,coutput1);
+ mgr->ConnectInput(taskProtons,0,cinput1);
+ mgr->ConnectOutput(taskProtons,0,coutput1);
if (!mgr->InitAnalysis()) return;
mgr->PrintStatus();
mgr->StartAnalysis("local",chain);
setupPar("ANALYSIS");
gSystem->Load("libANALYSIS.so");
+ //_________________________________________________________//
+ //___________Setting up ANALYSISalice.par__________________//
+ //_________________________________________________________//
+ setupPar("ANALYSISalice");
+ gSystem->Load("libANALYSISalice.so");
+
//____________________________________________________________//
//_____________Setting up PWG2spectra.par_____________________//
//____________________________________________________________//
//____________________________________________//
//Usage of event tags
- AliTagAnalysis *analysis = new AliTagAnalysis();
+ AliTagAnalysis *tagAnalysis = new AliTagAnalysis();
TChain *chain = 0x0;
- chain = analysis->GetChainFromCollection(collectionfile,"esdTree");
+ chain = tagAnalysis->GetChainFromCollection(collectionfile,"esdTree");
chain->SetBranchStatus("*Calo*",0);
//____________________________________________//
mgr->SetInputEventHandler(esdH);
//____________________________________________//
// 1st Proton task
- AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
- TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+ AliAnalysisTaskProtons *taskProtons = 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);
+ taskProtons->SetPriorProbabilityFunctions(fitElectrons,
+ fitMuons,
+ fitPions,
+ fitKaons,
+ fitProtons);*/
+ mgr->AddTask(taskProtons);
+
+ // Create containers for input/output
+ AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("dataChain",
+ TChain::Class(),AliAnalysisManager::kInputContainer);
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList1",
+ TList::Class(),AliAnalysisManager::kOutputCont
+ "Protons.ESD.root");
- // Create containers for input/output
- AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clist1", TList::Class(),AliAnalysisManager::kOutputContainer,"Protons.ESD.root");
-
//____________________________________________//
- mgr->ConnectInput(task1,0,cinput1);
- mgr->ConnectOutput(task1,0,coutput1);
+ mgr->ConnectInput(taskProtons,0,cinput1);
+ mgr->ConnectOutput(taskProtons,0,coutput1);
if (!mgr->InitAnalysis()) return;
mgr->PrintStatus();
mgr->StartAnalysis("grid",chain);
}
//_________________________________________________//
-void runProof() {
+void runProof(const char* dataset = 0x0, Int_t stats = 0) {
TStopwatch timer;
timer.Start();
printf("****** Connect to PROOF *******\n");
gProof->EnablePackage("AOD");
gProof->UploadPackage("ANALYSIS.par");
gProof->EnablePackage("ANALYSIS");
+ gProof->UploadPackage("ANALYSISalice.par");
+ gProof->EnablePackage("ANALYSISalice");
gProof->UploadPackage("PWG2spectra.par");
gProof->EnablePackage("PWG2spectra");
- // You should get this macro and the txt file from:
- // http://aliceinfo.cern.ch/Offline/Analysis/CAF/
- gROOT->LoadMacro("CreateESDChain.C");
- TChain* chain = 0x0;
- chain = CreateESDChain("ESD82XX_30K.txt",10);
- chain->SetBranchStatus("*Calo*",0);
-
gProof->Load("AliAnalysisTaskProtons.cxx++");
- //____________________________________________//
+ //____________________________________________//
// Make the analysis manager
AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
AliVEventHandler* esdH = new AliESDInputHandler;
mgr->SetInputEventHandler(esdH);
//____________________________________________//
// 1st Proton task
- AliAnalysisTaskProtons *task1 = new AliAnalysisTaskProtons("TaskProtons");
- TFile *f = TFile::Open("PriorProb/PriorProbabilities.root ");
+ AliAnalysisTaskProtons *taskProtons = 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);
+ taskProtons->SetPriorProbabilityFunctions(fitElectrons,
+ fitMuons,
+ fitPions,
+ fitKaons,
+ fitProtons);*/
+ mgr->AddTask(taskProtons);
// Create containers for input/output
- AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clist1", TList::Class(),AliAnalysisManager::kOutputContainer,"Protons.ESD.root");
+ AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("dataChain",
+ TChain::Class(),AliAnalysisManager::kInputContainer);
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList1",
+ TList::Class(),AliAnalysisManager::kOutputCont
+ "Protons.ESD.root");
//____________________________________________//
- mgr->ConnectInput(task1,0,cinput1);
- mgr->ConnectOutput(task1,0,coutput1);
+ mgr->ConnectInput(taskProtons,0,cinput1);
+ mgr->ConnectOutput(taskProtons,0,coutput1);
if (!mgr->InitAnalysis()) return;
mgr->PrintStatus();
- mgr->StartAnalysis("proof",chain);
+
+ if(dataset)
+ mgr->StartAnalysis("proof",dataset,stats);
+ else {
+ // You should get this macro and the txt file from:
+ // http://aliceinfo.cern.ch/Offline/Analysis/CAF/
+ gROOT->LoadMacro("CreateESDChain.C");
+ TChain* chain = 0x0;
+ chain = CreateESDChain("ESD82XX_30K.txt",stats);
+ chain->SetBranchStatus("*Calo*",0);
+
+ mgr->StartAnalysis("proof",chain);
+ }
timer.Stop();
timer.Print();