1 AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calorimeter, Bool_t kUseKinematics = kFALSE, Bool_t kPrintSettings = kFALSE)
3 // Creates a PartCorr task, configures it and adds it to the analysis manager.
5 // Get the pointer to the existing analysis manager via the static access method.
6 //==============================================================================
7 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
9 ::Error("AddTaskPartCorr", "No analysis manager to connect to.");
13 // Check the analysis type using the event handlers connected to the analysis manager.
14 //==============================================================================
15 if (!mgr->GetInputEventHandler()) {
16 ::Error("AddTaskPartCorr", "This task requires an input event handler");
19 TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
20 //cout<<"DATA TYPE :: "<<inputDataType<<endl;
21 // inputDataType: data managed by the input handler
22 // data: can be same as one managed by input handler, or the output AOD created by the filter. By default use AOD
25 //===========================================================================
28 AliCaloTrackReader * reader = 0x0;
29 if(data=="AOD") reader = new AliCaloTrackAODReader();
30 else if(data=="ESD") reader = new AliCaloTrackESDReader();
31 else if(data=="MC" && dataType == "ESD") reader = new AliCaloTrackMCReader();
32 reader->SetDebug(-1);//10 for lots of messages
33 if(calorimeter == "EMCAL") reader->SwitchOnEMCALCells();
34 if(calorimeter == "PHOS") reader->SwitchOnPHOSCells();
36 if(inputDataType == "ESD"){
37 reader->SwitchOnStack();
38 reader->SwitchOffAODMCParticles();
40 else if(inputDataType == "AOD"){
41 reader->SwitchOffStack();
42 reader->SwitchOnAODMCParticles();
47 reader->SetEMCALPtMin(0.2);
48 reader->SetPHOSPtMin(0.2);
49 reader->SetCTSPtMin(0.2);
50 if(kPrintSettings) reader->Print("");
52 //Needed line, do not clear standard output AODs, we are not writing there
53 reader->SwitchOnWriteStdAOD();
55 // ##### Analysis algorithm settings ####
57 // --------------------
58 // --- Pi0 Analysis ---
59 // --------------------
61 AliCaloPID * pid = new AliCaloPID();
62 pid->SetDispersionCut(1.5);
63 pid->SetTOFCut(5.e-9);
65 if(kPrintSettings) pid->Print("");
67 AliFidutialCut * fidCut = new AliFidutialCut();
68 fidCut->DoCTSFidutialCut(kFALSE) ;
69 fidCut->DoEMCALFidutialCut(kTRUE) ;
70 fidCut->DoPHOSFidutialCut(kTRUE) ;
72 AliAnaCalorimeterQA *qa = new AliAnaCalorimeterQA();
73 qa->SetDebug(-1); //10 for lots of messages
74 qa->SetCalorimeter(calorimeter);
75 if(kUseKinematics && inputDataType!="AOD") qa->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
76 else qa->SwitchOffDataMC() ;
77 //qa->AddToHistogramsName(Form("AnaCaloQA_%s",calorimeter.Data()));
78 qa->AddToHistogramsName("AnaCaloQA_");
79 qa->SetFidutialCut(fidCut);
80 qa->SwitchOnFidutialCut();
81 if(kPrintSettings) qa->Print("");
83 AliFidutialCut * fidCut1stYear = new AliFidutialCut();
84 fidCut1stYear->DoCTSFidutialCut(kFALSE) ;
85 fidCut1stYear->DoEMCALFidutialCut(kTRUE) ;
86 fidCut1stYear->DoPHOSFidutialCut(kTRUE) ;
87 fidCut1stYear->SetSimpleEMCALFidutialCut(0.7,80.,120.);
88 fidCut1stYear->SetSimplePHOSFidutialCut(0.12,260.,320.);
90 AliAnaPhoton *anaphoton1 = new AliAnaPhoton();
91 anaphoton1->SetDebug(-1); //10 for lots of messages
92 //anaphoton->SetMinPt(0.5);
93 anaphoton1->SetMinDistanceToBadChannel(2, 4, 5);
94 anaphoton1->SetCaloPID(pid);
95 anaphoton1->SetCalorimeter(calorimeter);
96 if(kUseKinematics) anaphoton1->SwitchOnDataMC() ;//Access MC stack and fill more histograms
97 else anaphoton1->SwitchOffDataMC() ;
98 anaphoton1->SwitchOffCaloPID();
99 anaphoton1->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
100 anaphoton1->SwitchOnFidutialCut();
101 anaphoton1->SetFidutialCut(fidCut1stYear);
102 anaphoton1->SetOutputAODName(Form("PhotonsForIM%s",calorimeter.Data()));
103 if(kPrintSettings) anaphoton1->Print("");
105 AliAnaPi0 *anapi0 = new AliAnaPi0();
106 anapi0->SetDebug(-1);//10 for lots of messages
107 anapi0->SetInputAODName(Form("PhotonsForIM%s",calorimeter.Data()));
108 anapi0->SetCaloPID(pid);
109 anapi0->SetCalorimeter(calorimeter);
110 anapi0->SwitchOnFidutialCut();
111 anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
112 if(kPrintSettings) anapi0->Print("");
115 // -------------------------------------------------
116 // --- Photon Isolation and Correlation Analysis ---
117 // -------------------------------------------------
119 AliAnaPhoton *anaphoton2 = new AliAnaPhoton();
120 anaphoton2->SetDebug(-1); //10 for lots of messages
121 anaphoton2->SetMinPt(5);
122 anaphoton2->SetCaloPID(pid);
123 anaphoton2->SetCalorimeter(calorimeter);
124 if(kUseKinematics) anaphoton2->SwitchOnDataMC() ;//Access MC stack and fill more histograms
125 else anaphoton2->SwitchOffDataMC() ;
126 anaphoton2->SwitchOnCaloPID();
127 if(calorimeter == "EMCAL") anaphoton2->SwitchOnCaloPIDRecalculation();
128 anaphoton2->SwitchOffFidutialCut();
129 anaphoton2->SetOutputAODName(Form("DirectPhotons%s",calorimeter.Data()));
130 anaphoton2->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
131 anaphoton2->AddToHistogramsName("AnaPhotonCorr_");
132 if(kPrintSettings) anaphoton2->Print("");
133 // ### Isolation analysis ###
135 AliIsolationCut * ic = new AliIsolationCut();
136 ic->SetConeSize(0.5);
137 ic->SetPtThreshold(1.);
138 ic->SetICMethod(AliIsolationCut::kPtThresIC);
139 if(kPrintSettings) ic->Print("");
141 AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
142 anaisol->SetDebug(-1);
143 //anaisol->SetMinPt(5);
144 anaisol->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
145 anaisol->SetCalorimeter(calorimeter);
146 if(kUseKinematics) anaisol->SwitchOnDataMC() ;//Access MC stack and fill more histograms
147 else anaisol->SwitchOffDataMC() ;
148 //Select clusters with no pair, if both clusters with pi0 mass
149 anaisol->SwitchOffInvariantMass();
150 //anaisol->SetNeutralMesonSelection(nms);
152 anaisol->SetIsolationCut(ic);
153 //Do or not do isolation with previously produced AODs.
154 //No effect if use of SwitchOnSeveralIsolation()
155 anaisol->SwitchOffReIsolation();
157 anaisol->SwitchOffSeveralIsolation() ;
158 if(kPrintSettings) anaisol->Print("");
160 // ### Correlation with Jet Finder AOD output
161 AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation();
162 anacorrjet->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
163 anacorrjet->SwitchOffFidutialCut();
164 anacorrjet->SetDebug(-1);
165 anacorrjet->SetConeSize(1);
166 anacorrjet->SelectIsolated(kTRUE); // do correlation with isolated photons
167 anacorrjet->SetPtThresholdInCone(0.2);
168 anacorrjet->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts
169 anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts
170 anacorrjet->UseJetRefTracks(kFALSE); //Not working now
171 if(kPrintSettings) anacorrjet->Print("");
173 // ### Correlation with hadrons
174 AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation();
175 anacorrhadron->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
176 anacorrhadron->SetOutputAODName(Form("CorrelatedPi0s%s",calorimeter.Data()));
177 anacorrhadron->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
178 anacorrhadron->SetDebug(-1);
179 anacorrhadron->SwitchOffCaloPID();
180 anacorrhadron->SwitchOffFidutialCut();
181 anacorrhadron->SetPtCutRange(1,100);
182 anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
183 anacorrhadron->SelectIsolated(kTRUE); // do correlation with isolated photons
184 if(calorimeter=="PHOS"){
185 //Correlate with particles in EMCAL
186 anacorrhadron->SwitchOnCaloPID();
187 anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
189 if(kPrintSettings) anacorrhadron->Print("");
191 // #### Configure Maker ####
192 AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
193 maker->SetReader(reader);//pointer to reader
194 maker->AddAnalysis(qa,0);
195 maker->AddAnalysis(anaphoton1,1);
196 maker->AddAnalysis(anapi0,2);
197 maker->AddAnalysis(anaphoton2,3);
198 maker->AddAnalysis(anaisol,4);
199 maker->AddAnalysis(anacorrjet,5);
200 maker->AddAnalysis(anacorrhadron,6);
201 maker->SetAnaDebug(-1) ;
202 maker->SwitchOnHistogramsMaker() ;
203 maker->SwitchOnAODsMaker() ;
204 if(kPrintSettings) maker->Print("");
206 printf("======================== \n");
207 printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data());
208 printf("======================== \n");
211 //===========================================================================
212 AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (Form("PartCorr%s",calorimeter.Data()));
213 task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
214 //task->SetDebugLevel(-1);
215 task->SetAnalysisMaker(maker);
219 sprintf(name,"PartCorr_%s",calorimeter.Data());
220 cout<<"Name of task "<<name<<endl;
221 //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
222 // AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
224 TString outputfile = AliAnalysisManager::GetCommonFileName();
225 // AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr_%s",calorimeter.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr_%s",outputfile.Data(),calorimeter.Data()));
226 AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(calorimeter.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr",outputfile.Data()));
228 // Create ONLY the output containers for the data produced by the task.
229 // Get and connect other common input/output containers via the manager as below
230 //==============================================================================
231 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
232 // AOD output slot will be used in a different way in future
233 mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
234 mgr->ConnectOutput (task, 1, cout_pc);