]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/FlavourJetTasks/macros/AddTaskDFilterAndCorrelations.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGJE / FlavourJetTasks / macros / AddTaskDFilterAndCorrelations.C
1 void *AddTaskDFilterAndCorrelations(
2   AliAnalysisTaskSEDmesonsFilterCJ::ECandidateType cand = AliAnalysisTaskSEDmesonsFilterCJ::kDstartoKpipi,
3   TString filename = "DStartoKpipiCuts.root",
4   Bool_t theMCon = kFALSE,
5   Bool_t reco = kTRUE /*must be true if theMCon is false*/,
6   TString suffix = "",
7   TString jetArrname = "",
8   Bool_t triggerOnLeadingJet = kFALSE,
9   Int_t leadingHadType = 0 /*0 = charged, 1 = neutral, 2 = both*/,
10   Float_t R = 0.4,
11   Float_t jptcut = 10.,
12   const char *cutType = "TPC",
13   Int_t thnsparse=1, /*-1 = no thnsparse, 0 = heavy, 1 = light*/
14   Double_t percjetareacut = 1.,
15   AliAnalysisTaskEmcal::TriggerType trType=AliAnalysisTaskEmcal::kND,
16   Int_t typeDjet=2
17 )
18 {
19   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
20   if (!mgr) {
21     ::Error("AddTaskSEDmesonsFilterCJ", "No analysis manager to connect to.");
22     return NULL;
23   } 
24
25   Bool_t useStdC = kFALSE;
26   TFile* filecuts=TFile::Open(filename);
27   if(!filecuts || (filecuts && !filecuts->IsOpen())) {
28     cout<<"Input file not found: use std cuts"<<endl;
29     useStdC = kTRUE;
30   }
31
32   AliRDHFCuts *analysiscuts=0x0;
33   switch (cand) {
34   case 0 :
35     if(useStdC) {
36       analysiscuts = new AliRDHFCutsD0toKpi();
37       analysiscuts->SetStandardCutsPP2010();
38     } else
39       analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
40     break;
41   case 1 :
42     if(useStdC) {
43       analysiscuts = new AliRDHFCutsDStartoKpipi();
44       analysiscuts->SetStandardCutsPP2010();
45     } else
46       analysiscuts = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
47     analysiscuts->SetName("DStartoKpipiCuts");
48     break;
49   }
50   
51   if (!analysiscuts) { // mm let's see if everything is ok
52     AliFatal("Specific AliRDHFCuts not found");
53     return;
54   } 
55
56   printf("CREATE TASK\n"); //CREATE THE TASK
57
58   TString candname="DStar"; 
59   if(cand==0)  candname="D0";
60
61   TString taskFiltername="DmesonsFilterCJ";
62   taskFiltername+=candname;
63   taskFiltername+=suffix;
64   if(theMCon) taskFiltername+="MC";
65   if(!reco)   taskFiltername+="gen";
66   
67   AliAnalysisTaskSEDmesonsFilterCJ* taskFilter = mgr->GetTask(taskFiltername.Data());
68   if (!taskFilter){
69      taskFilter = new AliAnalysisTaskSEDmesonsFilterCJ(taskFiltername.Data(),analysiscuts,cand);
70      if(!theMCon) reco=kTRUE;
71      taskFilter->SetMC(theMCon); //D meson settings
72      taskFilter->SetUseReco(reco);
73      mgr->AddTask(taskFilter);
74   }
75
76   // create the task
77   TString taskCorrName="TaskFlavourJetCorrelations";
78   taskCorrName+=candname;
79   taskCorrName+=suffix;
80   if(theMCon) taskCorrName+="MC";
81   if(!reco)   taskCorrName+="gen";
82   taskCorrName+=cutType;
83   taskCorrName+=Form("PTj%.0f",jptcut);
84   taskCorrName+="";
85   
86   AliAnalysisTaskFlavourJetCorrelations *taskCorr = new AliAnalysisTaskFlavourJetCorrelations(taskCorrName.Data(), 
87      analysiscuts, cand);
88   
89   taskCorr->SetJetsName(jetArrname);
90   taskCorr->SetMC(theMCon);
91   taskCorr->SetUseReco(reco);
92   taskCorr->SetTriggerOnLeadingJet(triggerOnLeadingJet);
93   taskCorr->SetJetAcceptanceType(cutType);
94   taskCorr->SetJetPtCut(jptcut);
95   taskCorr->SetPercAreaCut(percjetareacut);
96   taskCorr->SetTypeDJetSelection(typeDjet);
97   if(theMCon && trType!=AliAnalysisTaskEmcal::kND){
98      taskCorr->SetCaloTriggerPatchInfoName("EmcalTriggers");
99      taskCorr->SetTriggerTypeSel(trType);
100   }
101   if(thnsparse==-1)taskCorr->TurnOffTHnSparse();
102   if(thnsparse==0) taskCorr->HeavyTHnSparse();
103   if(thnsparse==1) taskCorr->LightTHnSparse();   
104     
105   mgr->AddTask(taskCorr);
106
107   if(theMCon) {
108      suffix+="MC";
109      if(reco) suffix+="rec";  
110   }
111   
112   
113   // Create and connect containers for input/output
114   TString outputfile = AliAnalysisManager::GetCommonFileName();
115   TString outputfileF = outputfile, outputfileC = outputfile;
116   outputfileF += ":PWG3_D2H_DmesonsForJetCorrelations";
117   outputfileC += ":PWG3_D2H_DEmcalJet";
118   
119   outputfileF += suffix;
120   outputfileC += suffix;
121
122   TString nameContainerF0="histograms";
123   TString nameContainerF1="cuts";
124   
125   TString nameContainerC0="hCor";
126   TString nameContainerC1="cutsJ";
127
128   TString nameContainerFC2="Dcandidates";
129   TString nameContainerFC3="DSBcandidates";
130
131   nameContainerF0  += candname;
132   nameContainerF1  += candname;
133   nameContainerC0  += candname;
134   nameContainerC1  += candname;
135   nameContainerFC2 += candname;
136   nameContainerFC3 += candname;
137   
138   nameContainerF0  += suffix;
139   nameContainerF1  += suffix;
140   nameContainerC0  += suffix;
141   nameContainerC1  += suffix;
142   nameContainerFC2 += suffix;
143   nameContainerFC3 += suffix;
144   
145
146   // ------ input data ------
147   AliAnalysisDataContainer *cinput0  = mgr->GetCommonInputContainer();
148   cinput0->SetName(Form("in%s%s",candname.Data(),suffix.Data()));
149   
150   // ----- output data -----
151   
152   AliAnalysisDataContainer *coutputF0 = mgr->CreateContainer(nameContainerF0, TList::Class(),AliAnalysisManager::kOutputContainer,outputfileF.Data());
153   
154   AliAnalysisDataContainer *coutputF1 = mgr->CreateContainer(nameContainerF1, AliRDHFCuts::Class(),AliAnalysisManager::kOutputContainer, outputfileF.Data());
155   
156   AliAnalysisDataContainer *coutputC0 = mgr->CreateContainer(nameContainerC0, TList::Class(),AliAnalysisManager::kOutputContainer,outputfileC.Data());
157
158   AliAnalysisDataContainer *coutputC1 = mgr->CreateContainer(nameContainerC1, AliRDHFCuts::Class(),AliAnalysisManager::kOutputContainer, outputfileC.Data());
159   
160   AliAnalysisDataContainer *coutputFC2 = mgr->CreateContainer(nameContainerFC2, TClonesArray::Class(),AliAnalysisManager::kExchangeContainer, outputfileF.Data()); //
161   
162   AliAnalysisDataContainer *coutputFC3 = mgr->CreateContainer(nameContainerFC3, TClonesArray::Class(),AliAnalysisManager::kExchangeContainer, outputfileF.Data()); //
163   
164   mgr->ConnectInput(taskFilter,0,cinput0);
165   mgr->ConnectInput(taskCorr,0,cinput0);
166   
167   mgr->ConnectOutput(taskFilter,1,coutputF0);
168   mgr->ConnectOutput(taskFilter,2,coutputF1);
169   mgr->ConnectOutput(taskFilter,3,coutputFC2);
170   mgr->ConnectOutput(taskFilter,4,coutputFC3);
171   
172   
173   mgr->ConnectInput(taskCorr,1,coutputFC2);
174   mgr->ConnectInput(taskCorr,2,coutputFC3);
175   mgr->ConnectOutput(taskCorr,1,coutputC0);
176   mgr->ConnectOutput(taskCorr,2,coutputC1);
177   //if(cand==1) mgr->ConnectOutput(task,4,coutput4);
178
179   Printf("Input and Output connected to the manager");
180   return; 
181 }
182