//DEFINITION OF A FEW CONSTANTS
-const Double_t ptmin = 2.0 ;
-const Double_t ptmax = 100.0 ;
+const Float_t phimin = 0.;
+const Float_t phimax = 2.*TMath::Pi();
+const Float_t etamin = -0.9;
+const Float_t etamax = 0.9;
-const Int_t mintrackrefsTPC = 1;
-const Int_t mintrackrefsITS = 1;
-const Int_t charge = 1 ;
+const Int_t mintrackrefsTPC = 1;
+const Int_t mintrackrefsITS = 1;
+const Int_t charge = 1;
-AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
+AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra(char *prodType = "LHC10e14")
{
- // Creates a HighPtSpectra analysis task and adds it to the analysis manager.
+ // Creates HighPtSpectra analysis task and adds it to the analysis manager.
// A. Get the pointer to the existing analysis manager via the static access method.
//==============================================================================
// manager. The availability of MC handler can also be checked here.
//==============================================================================
if (!mgr->GetInputEventHandler()) {
- ::Error("AddTaskHighPtSpectra", "This task requires an input event handler");
+ ::Error("AddTaskPWG4HighPtSpectra", "This task requires an input event handler");
return NULL;
}
TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
// C. Create the task, add it to manager.
//===========================================================================
- //CONTAINER DEFINITION
+ //CONTAINER DEFINITION
Info("AliPWG4HighPtSpectra","SETUP CONTAINER");
//the sensitive variables, their indices
- UInt_t ipt = 0;
+ UInt_t ipt = 0;
+ UInt_t iphi = 1;
+ UInt_t ieta = 2;
+
//Setting up the container grid...
- UInt_t nstep = 5 ; //Steps/Modes for containers
+ UInt_t nstep = 6; //Steps/Modes for containers
Int_t kStepReconstructed = 0;
Int_t kStepReconstructedTPCOnly = 1;
Int_t kStepSecondaries = 2;
- Int_t kStepMCtrackable = 3;
- Int_t kStepReconstructedMC = 4;
+ Int_t kStepReconstructedMC = 3;
+ Int_t kStepMCAcceptance = 4;
+ Int_t kStepReconstructedTPCOnlyMC = 5;
+
+ //redefine pt ranges in case of Jet-Jet production
+ Float_t ptBinEdges[2][2];
+ Float_t ptmin = 2.0 ;
+ Float_t ptmax = 50.0 ;
+ Float_t binWidth3 = 5.;
+ if(!strcmp(prodType, "LHC10e14") || !strcmp(prodType, "PbPb")) {
+ ptmin = 0.0 ;
+ ptmax = 500.0 ;
+
+ ptBinEdges[0][0] = 100.;
+ ptBinEdges[0][1] = 5.;
+ ptBinEdges[1][0] = 300.;
+ ptBinEdges[1][1] = 10.;
+ binWidth3 = 20.;
+ } else {
+ ptmin = 2.0 ;
+ ptmax = 50.0 ;
+
+ ptBinEdges[0][0] = 10.;
+ ptBinEdges[0][1] = 1.;
+ ptBinEdges[1][0] = 20.;
+ ptBinEdges[1][1] = 2.;
+ binWidth3 = 5.;
+ }
+
+ const Int_t nvar = 3; //number of variables on the grid: pt:phi:eta
+ const Int_t nbin11 = (int)((ptBinEdges[0][0]-ptmin)/ptBinEdges[0][1]);
+ const Int_t nbin12 = (int)((ptBinEdges[1][0]-ptBinEdges[0][0])/ptBinEdges[1][1])+nbin11;
+ const Int_t nbin13 = (int)((ptmax-ptBinEdges[1][0])/binWidth3)+nbin12;
+ const Int_t nbin1 = nbin13; //bins in pt
+ const Int_t nbin2 = 18;//36; //bins in phi
+ const Int_t nbin3 = 8; //bins in eta
- const Int_t nvar = 1; //number of variables on the grid:pt
- const Int_t nbin1 = 98; //bins in pt 98
-
//arrays for the number of bins in each dimension
Int_t iBin[nvar];
iBin[0]=nbin1;
-
+ iBin[1]=nbin2;
+ iBin[2]=nbin3;
+
//arrays for lower bounds :
Double_t *binLim1=new Double_t[nbin1+1];
+ Double_t *binLim2=new Double_t[nbin2+1];
+ Double_t *binLim3=new Double_t[nbin3+1];
+
+ //values for bin lower bounds
+ for(Int_t i=0; i<=nbin1; i++) {
+ if(i<=nbin11) binLim1[i]=(Double_t)ptmin + (ptBinEdges[0][0]-ptmin)/nbin11*(Double_t)i ;
+ if(i<=nbin12 && i>nbin11) binLim1[i]=(Double_t)ptBinEdges[0][0] + (ptBinEdges[1][0]-ptBinEdges[0][0])/(nbin12-nbin11)*((Double_t)i-(Double_t)nbin11) ;
+ if(i<=nbin13 && i>nbin12) binLim1[i]=(Double_t)ptBinEdges[1][0] + (ptmax-ptBinEdges[1][0])/(nbin13-nbin12)*((Double_t)i-(Double_t)nbin12) ;
+ }
+ for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)phimin + (phimax-phimin)/nbin2*(Double_t)i ;
+ for(Int_t i=0; i<=nbin3; i++) binLim3[i]=(Double_t)etamin + (etamax-etamin)/nbin3*(Double_t)i ;
+
- //values for bin lower bounds
- for(Int_t i=0; i<=nbin1; i++) binLim1[i]=(Double_t)ptmin + (ptmax-ptmin)/nbin1*(Double_t)i ;
-
- //one "container" for MC
- AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin);
+ AliCFContainer* containerPos = new AliCFContainer("containerPos","container for positive tracks",nstep,nvar,iBin);
//setting the bin limits
- container -> SetBinLimits(ipt,binLim1);
-
+ containerPos -> SetBinLimits(ipt,binLim1);
+ containerPos -> SetBinLimits(iphi,binLim2);
+ containerPos -> SetBinLimits(ieta,binLim3);
+
+ AliCFContainer* containerNeg = new AliCFContainer("containerNeg","container for negative tracks",nstep,nvar,iBin);
+ //setting the bin limits
+ containerNeg -> SetBinLimits(ipt,binLim1);
+ containerNeg -> SetBinLimits(iphi,binLim2);
+ containerNeg -> SetBinLimits(ieta,binLim3);
+
//CREATE THE CUTS -----------------------------------------------
//Use AliESDtrackCuts
AliESDtrackCuts *trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts");
- //Standard Cuts
- trackCuts->SetAcceptKinkDaughters(kFALSE);//
- trackCuts->SetRequireTPCRefit(kTRUE);//
- trackCuts->SetEtaRange(-0.9,0.9);//-0.5,0.5);//
- trackCuts->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);//
- trackCuts->SetPtRange(0.15, 1e10);//
- trackCuts->SetMinNClustersTPC(50);//
- trackCuts->SetMaxChi2PerClusterTPC(3.5);//
- trackCuts->SetRequireITSRefit(kTRUE);
- trackCuts->SetMaxDCAToVertexXY(2.4);
- trackCuts->SetMaxDCAToVertexZ(3.2);
- trackCuts->SetDCAToVertex2D(kTRUE);
-
+ trackCuts = trackCuts->GetStandardITSTPCTrackCuts2010(kTRUE);//Primary Track Quality Selection for Global tracks
+ trackCuts->SetEtaRange(-0.9,0.9);
+ trackCuts->SetPtRange(0.15, 1e10);
+
+ AliESDtrackCuts *trackCutsTPConly = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts TPC only tracks");
+ trackCutsTPConly = trackCutsTPConly->GetStandardTPCOnlyTrackCuts();//TPC only Track Quality Cuts
+ trackCutsTPConly->SetEtaRange(-0.9,0.9);
+ trackCutsTPConly->SetPtRange(0.15, 1e10);
+ trackCutsTPConly->SetMinNClustersTPC(70);
+
// Gen-Level kinematic cuts
AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
- mcKineCuts->SetPtRange(0.15,1e10);
+ mcKineCuts->SetPtRange(0.15,1e10);
mcKineCuts->SetRapidityRange(-0.9,0.9);//-0.5,0.5);
mcKineCuts->SetRequireIsCharged(kTRUE);
mcAccCuts->SetMinNHitTPC(mintrackrefsTPC);
TObjArray* recList = new TObjArray(0);
- TObjArray* recMCList = new TObjArray(0);
TObjArray* recTPConlyList = new TObjArray(0);
TObjArray* secList = new TObjArray(0) ;
+ TObjArray* recMCList = new TObjArray(0);
+ TObjArray* recTPConlyMCList = new TObjArray(0);
printf("CREATE MC KINE CUTS\n");
TObjArray* mcList = new TObjArray(0) ;
//CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK
printf("CREATE INTERFACE AND CUTS\n");
- AliCFManager* man = new AliCFManager() ;
- man->SetParticleContainer(container);
- man->SetParticleCutsList(0,recList);
- man->SetParticleCutsList(1,recTPConlyList);
- man->SetParticleCutsList(2,secList);
- man->SetParticleCutsList(3,mcList);
- man->SetParticleCutsList(4,recMCList);
-
-
+ AliCFManager* manPos = new AliCFManager("manPos","Manager for Positive tracks") ;
+ manPos->SetParticleContainer(containerPos);
+ manPos->SetParticleCutsList(kStepReconstructed,recList);
+ manPos->SetParticleCutsList(kStepReconstructedTPCOnly,recTPConlyList);
+ manPos->SetParticleCutsList(kStepSecondaries,secList);
+ manPos->SetParticleCutsList(kStepReconstructedMC,recMCList);
+ manPos->SetParticleCutsList(kStepMCAcceptance,mcList);
+ manPos->SetParticleCutsList(kStepReconstructedTPCOnlyMC,recTPConlyMCList);
+
+ AliCFManager* manNeg = new AliCFManager("manNeg","Manager for Negative tracks") ;
+ manNeg->SetParticleContainer(containerNeg);
+ manNeg->SetParticleCutsList(kStepReconstructed,recList);
+ manNeg->SetParticleCutsList(kStepReconstructedTPCOnly,recTPConlyList);
+ manNeg->SetParticleCutsList(kStepSecondaries,secList);
+ manNeg->SetParticleCutsList(kStepReconstructedMC,recMCList);
+ manNeg->SetParticleCutsList(kStepMCAcceptance,mcList);
+ manNeg->SetParticleCutsList(kStepReconstructedTPCOnlyMC,recTPConlyMCList);
+
+
+ printf("Create task AliPWG4HighPtSpectra\n");
AliPWG4HighPtSpectra *taskPWG4HighPtSpectra = new AliPWG4HighPtSpectra("taskPWG4HighPtSpectra");
taskPWG4HighPtSpectra->SetCuts(trackCuts);
- taskPWG4HighPtSpectra->SetCFManager(man); //here is set the CF manager
- taskPWG4HighPtSpectra->SelectTrigger(AliAnalysisHelperJetTasks::kMB1);
+ taskPWG4HighPtSpectra->SetCutsTPConly(trackCutsTPConly);
+ taskPWG4HighPtSpectra->SetCFManagerPos(manPos); //here is set the CF manager +
+ taskPWG4HighPtSpectra->SetCFManagerNeg(manNeg); //here is set the CF manager -
+
// E. Create ONLY the output containers for the data produced by the task.
// Get and connect other common input/output containers via the manager as below
//==============================================================================
- //------ input data ------
- // AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
-// char *outputfile = "outputAliPWG4HighPtSpectraTestTrain.root";
+ //------ output containers ------
TString outputfile = AliAnalysisManager::GetCommonFileName();
outputfile += ":PWG4_HighPtSpectra";
- AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("chist0", TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
-
+
+ AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("chist0HighPtSpectra", TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("ccontainer0HighPtSpectra", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer1HighPtSpectra", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+ AliAnalysisDataContainer *cout_cuts0 = mgr->CreateContainer("qa_trackCuts", AliESDtrackCuts::Class(), AliAnalysisManager::kParamContainer,outputfile);
+ AliAnalysisDataContainer *cout_cuts1 = mgr->CreateContainer("qa_trackCutsTPConly", AliESDtrackCuts::Class(), AliAnalysisManager::kParamContainer,outputfile);
+
mgr->AddTask(taskPWG4HighPtSpectra);
mgr->ConnectInput(taskPWG4HighPtSpectra,0,mgr->GetCommonInputContainer());
mgr->ConnectOutput(taskPWG4HighPtSpectra,0,coutput0);
mgr->ConnectOutput(taskPWG4HighPtSpectra,1,coutput1);
+ mgr->ConnectOutput(taskPWG4HighPtSpectra,2,coutput2);
+ mgr->ConnectOutput(taskPWG4HighPtSpectra,3,cout_cuts0);
+ mgr->ConnectOutput(taskPWG4HighPtSpectra,4,cout_cuts1);
// Return task pointer at the end
return taskPWG4HighPtSpectra;