1 //DEFINITION OF A FEW CONSTANTS
2 const Double_t ptmin = 0.0 ;
3 const Double_t ptmax = 1.0 ;
4 const Double_t etamin = -1.5 ;
5 const Double_t etamax = 1.5 ;
7 const Int_t minclustersTPC = 40 ;
8 //----------------------------------------------------
10 Bool_t AliCFTaskForUnfolding()
14 benchmark.Start("AliSingleTrackTask");
16 AliLog::SetGlobalDebugLevel(0);
18 Load() ; //load the required libraries
20 TChain * analysisChain ;
21 printf("\n\nRunning on local file, please check the path\n\n");
23 analysisChain = new TChain("esdTree");
24 analysisChain->Add("AliESDs.root");
26 Info("AliCFTaskForUnfolding",Form("CHAIN HAS %d ENTRIES",(Int_t)analysisChain->GetEntries()));
28 //CONTAINER DEFINITION
29 Info("AliCFTaskForUnfolding","SETUP CONTAINER");
30 //the sensitive variables (2 in this example), their indices
33 //Setting up the container grid...
34 UInt_t nstep = 3 ; //number of selection steps MC
35 const Int_t nvar = 2 ; //number of variables on the grid:pt,eta
36 const Int_t nbin[nvar] = {20,20} ;
38 //arrays for the number of bins in each dimension
43 //arrays for lower bounds :
44 Double_t *binLim0=new Double_t[nbin[0]+1];
45 Double_t *binLim1=new Double_t[nbin[1]+1];
47 //values for bin lower bounds
48 for(Int_t i=0; i<=nbin[0]; i++) binLim0[i]=(Double_t)ptmin + ( ptmax- ptmin)/nbin[0]*(Double_t)i ;
49 for(Int_t i=0; i<=nbin[1]; i++) binLim1[i]=(Double_t)etamin + (etamax-etamin)/nbin[1]*(Double_t)i ;
51 //one "container" for MC
52 AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin);
53 //setting the bin limits
54 container -> SetBinLimits(ipt,binLim0);
55 container -> SetBinLimits(ieta ,binLim1);
57 // Gen-Level kinematic cuts
58 AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
59 mcKineCuts->SetPtRange (ptmin ,ptmax );
60 mcKineCuts->SetEtaRange(etamin,etamax);
62 //Particle-Level cuts:
63 AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts");
64 mcGenCuts->SetRequireIsPrimary();
65 mcGenCuts->SetRequirePdgCode(PDG);
67 // Rec-Level kinematic cuts
68 AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts","rec-level kine cuts");
69 recKineCuts->SetPtRange( ptmin, ptmax);
70 recKineCuts->SetPtRange(etamin,etamax);
72 AliCFTrackQualityCuts *recQualityCuts = new AliCFTrackQualityCuts("recQualityCuts","rec-level quality cuts");
73 recQualityCuts->SetMinNClusterTPC(minclustersTPC);
75 AliCFTrackIsPrimaryCuts *recIsPrimaryCuts = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts","rec-level isPrimary cuts");
76 recIsPrimaryCuts->SetMaxNSigmaToVertex(3);
78 printf("CREATE MC KINE CUTS\n");
79 TObjArray* mcList = new TObjArray(0) ;
80 mcList->AddLast(mcKineCuts);
81 mcList->AddLast(mcGenCuts);
83 printf("CREATE RECONSTRUCTION CUTS\n");
84 TObjArray* recList = new TObjArray(0) ;
85 recList->AddLast(recKineCuts);
86 recList->AddLast(recQualityCuts);
87 recList->AddLast(recIsPrimaryCuts);
89 TObjArray* emptyList = new TObjArray(0);
91 //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK
92 printf("CREATE INTERFACE AND CUTS\n");
93 AliCFManager* man = new AliCFManager() ;
94 man->SetNStepEvent(0);
95 man->SetParticleContainer(container);
96 man->SetParticleCutsList(0,mcList);
97 man->SetParticleCutsList(1,recList);
98 man->SetParticleCutsList(2,emptyList); // this is special step for monte carlo spectrum
101 printf("CREATE TASK\n");
103 AliCFTaskForUnfolding *task = new AliCFTaskForUnfolding("AliCFTaskForUnfolding");
104 task->SetCFManager(man); //here is set the CF manager
106 //create correlation matrix for unfolding
107 Int_t thnDim[2*nvar];
108 for (int k=0; k<nvar; k++) {
109 //first half : reconstructed
112 thnDim[k+nvar] = nbin[k];
114 THnSparseD* correlation = new THnSparseD("correlation","THnSparse with correlations",2*nvar,thnDim);
115 Double_t** binEdges = new Double_t[nvar];
116 for (int k=0; k<nvar; k++) {
117 binEdges[k]=new Double_t[nbin[k]+1];
118 container->GetBinLimits(k,binEdges[k]);
119 correlation->SetBinEdges(k,binEdges[k]);
120 correlation->SetBinEdges(k+nvar,binEdges[k]);
122 task->SetCorrelationMatrix(correlation);
125 //SETUP THE ANALYSIS MANAGER TO READ INPUT CHAIN AND WRITE DESIRED OUTPUTS
126 printf("CREATE ANALYSIS MANAGER\n");
127 // Make the analysis manager
128 AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
129 mgr->SetAnalysisType(AliAnalysisManager::kLocalAnalysis);
131 AliMCEventHandler* mcHandler = new AliMCEventHandler();
132 mgr->SetMCtruthEventHandler(mcHandler);
134 AliInputEventHandler* dataHandler = new AliESDInputHandler();
135 mgr->SetInputEventHandler(dataHandler);
137 // Create and connect containers for input/output
139 //------ input data ------
140 AliAnalysisDataContainer *cinput0 = mgr->CreateContainer("cchain0",TChain::Class(),AliAnalysisManager::kInputContainer);
142 // ----- output data -----
144 //slot 0 : default output tree (by default handled by AliAnalysisTaskSE)
145 AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("ctree0", TTree::Class(),AliAnalysisManager::kOutputContainer,"output.root");
147 //now comes user's output objects :
149 // output TH1I for event counting
150 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist0", TH1I::Class(),AliAnalysisManager::kOutputContainer,"output.root");
151 // output Correction Framework Container (for acceptance & efficiency calculations)
152 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,"output.root");
153 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("corr0", THnSparseD::Class(),AliAnalysisManager::kOutputContainer,"output.root");
155 cinput0->SetData(analysisChain);
158 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
159 mgr->ConnectOutput(task,0,coutput0);
160 mgr->ConnectOutput(task,1,coutput1);
161 mgr->ConnectOutput(task,2,coutput2);
162 mgr->ConnectOutput(task,3,coutput3);
164 printf("READY TO RUN\n");
166 if (mgr->InitAnalysis()) {
168 mgr->StartAnalysis("local",analysisChain);
171 benchmark.Stop("AliSingleTrackTask");
172 benchmark.Show("AliSingleTrackTask");
179 //load the required aliroot libraries
180 gSystem->Load("libANALYSIS") ;
181 gSystem->Load("libANALYSISalice") ;
182 gSystem->Load("libCORRFW.so") ;
184 //compile online the task class
185 gSystem->SetIncludePath("-I. -I$ALICE_ROOT/include -I$ROOTSYS/include");
186 gROOT->LoadMacro("./AliCFTaskForUnfolding.cxx+");