]>
Commit | Line | Data |
---|---|---|
32bb35a1 | 1 | //DEFINITION OF A FEW CONSTANTS |
2 | const Double_t ymin = -2.0 ; | |
3 | const Double_t ymax = 2.0 ; | |
4 | const Double_t ptmin = 0.0 ; | |
5 | const Double_t ptmax = 10.0 ; | |
6 | const Int_t mintrackrefsTPC = 2 ; | |
7 | const Int_t mintrackrefsITS = 3 ; | |
8 | const Int_t charge = 1 ; | |
9 | const Int_t PDG = 421; | |
10 | const Int_t minclustersTPC = 50 ; | |
11 | //---------------------------------------------------- | |
12 | ||
13 | AliCFHeavyFlavourTask *AddTaskCF() | |
14 | { | |
15 | ||
16 | ||
17 | //CONTAINER DEFINITION | |
18 | Info("AliCFHeavyFlavourTask","SETUP CONTAINER"); | |
19 | //the sensitive variables (2 in this example), their indices | |
20 | UInt_t ipt = 0; | |
21 | UInt_t iy = 1; | |
22 | //Setting up the container grid... | |
23 | UInt_t nstep = 2 ; //number of selection steps MC | |
24 | const Int_t nvar = 2 ; //number of variables on the grid:pt,y | |
25 | const Int_t nbin1 = 8 ; //bins in pt | |
26 | const Int_t nbin2 = 8 ; //bins in y | |
27 | ||
28 | //arrays for the number of bins in each dimension | |
29 | Int_t iBin[nvar]; | |
30 | iBin[0]=nbin1; | |
31 | iBin[1]=nbin2; | |
32 | ||
33 | //arrays for lower bounds : | |
34 | Double_t *binLim1=new Double_t[nbin1+1]; | |
35 | Double_t *binLim2=new Double_t[nbin2+1]; | |
36 | ||
37 | //values for bin lower bounds | |
38 | for(Int_t i=0; i<=nbin1; i++) binLim1[i]=(Double_t)ptmin + (ptmax-ptmin)/nbin1*(Double_t)i ; | |
39 | for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)ymin + (ymax-ymin) /nbin2*(Double_t)i ; | |
40 | ||
41 | //one "container" for MC | |
42 | AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin); | |
43 | ||
44 | //setting the bin limits | |
45 | container -> SetBinLimits(ipt,binLim1); | |
46 | container -> SetBinLimits(iy,binLim2); | |
47 | ||
48 | //CREATE THE CUTS ----------------------------------------------- | |
49 | ||
50 | // Gen-Level kinematic cuts | |
51 | AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts"); | |
52 | // mcKineCuts->SetPtRange(ptmin,ptmax); | |
53 | // mcKineCuts->SetRapidityRange(ymin,ymax); | |
54 | // mcKineCuts->SetChargeMC(charge); | |
55 | ||
56 | //Particle-Level cuts: | |
57 | AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts"); | |
58 | //mcGenCuts->SetRequireIsPrimary(); | |
59 | mcGenCuts->SetRequirePdgCode(PDG); | |
60 | mcGenCuts->SetAODMC(1); //special flag for reading MC in AOD tree (important) | |
61 | ||
62 | // Rec-Level kinematic cuts | |
63 | AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts","rec-level kine cuts"); | |
64 | // recKineCuts->SetPtRange(ptmin,ptmax); | |
65 | // recKineCuts->SetRapidityRange(ymin,ymax); | |
66 | // recKineCuts->SetChargeRec(charge); | |
67 | ||
68 | AliCFTrackQualityCuts *recQualityCuts = new AliCFTrackQualityCuts("recQualityCuts","rec-level quality cuts"); | |
69 | //recQualityCuts->SetStatus(AliESDtrack::kITSrefit); | |
70 | ||
71 | AliCFTrackIsPrimaryCuts *recIsPrimaryCuts = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts","rec-level isPrimary cuts"); | |
72 | //recIsPrimaryCuts->SetAODType(AliAODTrack::kPrimary); | |
73 | ||
74 | printf("CREATE MC KINE CUTS\n"); | |
75 | TObjArray* mcList = new TObjArray(0) ; | |
76 | mcList->AddLast(mcKineCuts); | |
77 | mcList->AddLast(mcGenCuts); | |
78 | ||
79 | printf("CREATE RECONSTRUCTION CUTS\n"); | |
80 | TObjArray* recList = new TObjArray(0) ; | |
81 | recList->AddLast(recKineCuts); | |
82 | recList->AddLast(recQualityCuts); | |
83 | recList->AddLast(recIsPrimaryCuts); | |
84 | ||
85 | //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK | |
86 | printf("CREATE INTERFACE AND CUTS\n"); | |
87 | AliCFManager* man = new AliCFManager() ; | |
88 | man->SetParticleContainer (container); | |
89 | man->SetParticleCutsList(0 , mcList); // MC | |
90 | man->SetParticleCutsList(1 , recList); // AOD | |
91 | ||
92 | ||
93 | // Get the pointer to the existing analysis manager via the static access method. | |
94 | //============================================================================== | |
95 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
96 | if (!mgr) { | |
97 | ::Error("AddTaskCompareHF", "No analysis manager to connect to."); | |
98 | return NULL; | |
99 | } | |
100 | //CREATE THE TASK | |
101 | printf("CREATE TASK\n"); | |
102 | // create the task | |
103 | AliCFHeavyFlavourTask *task = new AliCFHeavyFlavourTask("AliCFHeavyFlavourTask"); | |
104 | task->SetCFManager(man); //here is set the CF manager | |
105 | ||
106 | // Create and connect containers for input/output | |
107 | ||
108 | // ------ input data ------ | |
109 | AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer(); | |
110 | ||
111 | // ----- output data ----- | |
112 | ||
113 | //slot 0 : default output tree (by default handled by AliAnalysisTaskSE) | |
114 | AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("ctree0", TTree::Class(),AliAnalysisManager::kOutputContainer,"outputEta.root"); | |
115 | ||
116 | //now comes user's output objects : | |
117 | ||
118 | // output TH1I for event counting | |
119 | AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist0", TH1I::Class(),AliAnalysisManager::kOutputContainer,"output.root"); | |
120 | // output Correction Framework Container (for acceptance & efficiency calculations) | |
121 | AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,"output.root"); | |
122 | ||
123 | // cinput0->SetData(chainAOD); | |
124 | ||
125 | mgr->AddTask(task); | |
126 | mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); | |
127 | mgr->ConnectOutput(task,0,coutput0); | |
128 | mgr->ConnectOutput(task,1,coutput1); | |
129 | mgr->ConnectOutput(task,2,coutput2); | |
130 | ||
131 | return task; | |
132 | } | |
133 |