3 AliAnalysisTaskEMCALClusterize* AddTaskEMCALClusterize(
5 const Bool_t bFillAOD = kFALSE,
6 const Int_t bMC = kFALSE,
7 const Bool_t exotic = kTRUE,
8 const TString name = "V1Unfold",
9 const TString trigger = "",
10 const Bool_t tm = kTRUE,
11 const Int_t minEcell = 50,
12 const Int_t minEseed = 100,
13 const Int_t maxDeltaT = 250,
14 const Int_t timeWindow = 1000,
15 const Int_t minEUnf = 15,
16 const Int_t minFrac = 1,
17 const Bool_t bRecalE = kTRUE,
18 const Bool_t bBad = kTRUE,
19 const Bool_t bRecalT = kTRUE,
20 const Bool_t bNonLine = kFALSE,
21 const Int_t minCen = -1,
22 const Int_t maxCen = -1,
23 const Int_t nRowDiff = 1,
24 const Int_t nColDiff = 1
27 // Get the pointer to the existing analysis manager via the static access method.
28 //==============================================================================
29 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
32 ::Error("AddTaskEMCALClusterize", "No analysis manager to connect to.");
36 // Check the analysis type using the event handlers connected to the analysis manager.
37 //==============================================================================
38 if (!mgr->GetInputEventHandler())
40 ::Error("AddTaskEMCALClusterize", "This clusterize requires an input event handler");
44 printf("Passed Settings : mc %d, exo %d, name %s, trigger %s, tm %d\n",bMC,exotic,name.Data(),trigger.Data(),tm);
45 printf(" Ecell %d, Eseed %d, dT %d, wT %d, minUnf %d, minFrac %d \n",minEcell, minEseed,maxDeltaT,timeWindow,minEUnf,minFrac);
46 printf(" recalE %d, bad %d, recalT %d, nonlin %d, minCen %d, maxCen %d, rowDiff %d, colDiff %d \n",bRecalE,bBad,bRecalT,bNonLine,minCen,maxCen,nRowDiff,nColDiff);
48 // Create name of task and AOD branch depending on different settings
50 if(name.Contains("NxN")) arrayName = Form("%dx%d_Ecell%d_Eseed%d_DT%d_WT%d",2*nRowDiff+1,2*nColDiff+1,minEcell,minEseed,maxDeltaT,timeWindow);
51 else arrayName = Form( "%s_Ecell%d_Eseed%d_DT%d_WT%d", name.Data(),minEcell,minEseed,maxDeltaT,timeWindow);
53 if(minCen != -1 && maxCen != -1)
54 arrayName+=Form("_Cen%d_%d",minCen,maxCen);
56 printf("Created Branch Name: \n",arrayName.Data());
59 //-------------------------------------------------------
60 // Init the task and do settings
61 //-------------------------------------------------------
63 AliAnalysisTaskEMCALClusterize* clusterize = new AliAnalysisTaskEMCALClusterize(Form("EMCALClusterize%s",arrayName.Data()));
65 clusterize->SetAODBranchName(arrayName);
67 //clusterize->SetOCDBPath("local://$ALICE_ROOT/OCDB");
69 // Some general settings to create AOD file in case we want to keep it
70 clusterize->SwitchOffFillAODCaloCells();
71 clusterize->SwitchOffFillAODHeader();
72 clusterize->FillAODFile(bFillAOD); // fill aod.root with clusters?, not really needed for analysis.
74 // Do track matching after clusterization
75 if(tm) clusterize->SwitchOnTrackMatching();
76 else clusterize->SwitchOffTrackMatching();
78 //-------------------------------------------------------
79 // Set clusterization parameters via rec param
80 //-------------------------------------------------------
82 AliEMCALRecParam * params = clusterize->GetRecParam();
84 // Position and SS weight parameter
87 // Time cuts, depend on data type (no cells time in AODs)
88 TString sHandler((mgr->GetInputEventHandler())->ClassName());
89 if(sHandler.Contains("AOD"))
91 printf("AliAnalysisTaskEMCALClusterize - Open time cuts for AODs\n");
92 params->SetTimeCut(1e6);//Open this cut for AODs
93 params->SetTimeMin(-1); //Open this cut for AODs
94 params->SetTimeMax(1e6);//Open this cut for AODs
98 printf("AliAnalysisTaskEMCALClusterize - Set time cuts for ESDs\n");
99 if(maxDeltaT > 1) params->SetTimeCut(maxDeltaT*1.e-9);
100 else { params->SetTimeCut(250*1.e-9); printf("default maxDeltaT = 250 ns\n"); }// Same as in reco
104 params->SetTimeMin(-1*timeWindow*1.e-9);
105 params->SetTimeMax(timeWindow*1.e-9);
111 params->SetTimeMin(-250*1.e-9);
112 params->SetTimeMax( 250*1.e-9);
113 printf("default time window for calibrated time -250 ns < T < 250 ns\n");
117 // same as in reco, USE IF NO TIME RECALIBRATION
118 params->SetTimeMin(425*1.e-9);
119 params->SetTimeMax(825*1.e-9);
120 printf("default time window 425 ns < T < 825 ns\n");
126 params->SetClusteringThreshold(minEseed/1.e3);
127 params->SetMinECut (minEcell/1.e3);
130 if(name.Contains("V2")) params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerv2);
131 if(name.Contains("V1")) params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerv1);
132 if(name.Contains("NxN"))
134 params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerNxN);
135 printf("Set NxN cluster size to %dx%d (row diff %d, col diff %d)\n",2*nRowDiff+1,2*nColDiff+1,nRowDiff,nColDiff);
136 params->SetNxM(nRowDiff, nColDiff);
139 //-------------------------------------------------------
140 // Unfolding, 2 options :
141 //-------------------------------------------------------
143 // 1) Just unfold existing clusters
144 if(name.Contains("JustUnfold"))
145 clusterize->JustUnfold(kTRUE); // if TRUE, do just unfolding, do not recluster cells
147 clusterize->JustUnfold(kFALSE);
149 // 2) Unfold clusters created in the clusterize (revise settings)
150 if (name.Contains("Unfold"))
152 clusterize->SwitchOnCellEnergySelection();
153 clusterize->SetCellCuts(minEUnf/1000.,minFrac/10000.);
154 printf("AliAnalysisTaskEMCALClusterize - Cuts: min E %f, frac %f\n",minEUnf/1000.,minFrac/10000.);
155 //clusterize->SwitchOffCellEnergySelection();
157 if(!name.Contains("Just"))
158 params->SetUnfold(kTRUE);
160 params->SetUnfold(kFALSE);
164 //-------------------------------------------------------
165 // Configure AliEMCALRecoUtils
166 //-------------------------------------------------------
168 AliEMCALRecoUtils * reco = clusterize->GetRecoUtils();
169 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C"); // $ALICE_ROOT/PWGGA/EMCALTasks/macros
170 ConfigureEMCALRecoUtils(reco,bMC,exotic,bNonLine,bRecalE,bBad,bRecalT);
172 //-------------------------------------------------------
174 //-------------------------------------------------------
176 clusterize->SetImportGeometryFromFile(kTRUE); // import geometry.root file
180 clusterize->SwitchOnLoadOwnGeometryMatrices();
183 //-------------------------------------------------------
185 //-------------------------------------------------------
189 printf("Clusterizing task trigger EMC7\n");
190 clusterize->SelectCollisionCandidates(AliVEvent::kEMC7);
192 else if (trigger=="INT7")
194 printf("Clusterizing task trigger INT7\n");
195 clusterize->SelectCollisionCandidates(AliVEvent::kINT7);
197 else if(trigger=="EMC1")
199 printf("Clusterizing task trigger EMC1\n");
200 clusterize->SelectCollisionCandidates(AliVEvent::kEMC1);
202 else if(trigger=="MB")
204 printf("Clusterizing task trigger MB\n");
205 clusterize->SelectCollisionCandidates(AliVEvent::kMB);
207 else if(trigger=="PHOS")
209 printf("Clusterizing task trigger PHOS\n");
210 clusterize->SelectCollisionCandidates(AliVEvent::kPHI7);
212 else if(trigger=="PHOSPb")
214 printf("Clusterizing task trigger PHOSPb\n");
215 clusterize->SelectCollisionCandidates(AliVEvent::kPHOSPb);
217 else if(trigger=="AnyINT")
219 printf("Clusterizing task trigger AnyINT\n");
220 clusterize->SelectCollisionCandidates(AliVEvent::kAnyINT);
222 else if(trigger=="INT")
224 printf("Clusterizing task trigger AnyINT\n");
225 clusterize->SelectCollisionCandidates(AliVEvent::kAny);
227 else if(trigger=="EMCEGA")
229 printf("Clusterizing task trigger EMC Gamma\n");
230 clusterize->SelectCollisionCandidates(AliVEvent::kEMCEGA);
232 else if(trigger=="EMCEJE")
234 printf("Clusterizing task trigger EMC Jet\n");
235 clusterize->SelectCollisionCandidates(AliVEvent::kEMCEJE);
237 else if(trigger=="Central")
239 printf("Clusterizing task trigger Central\n");
240 clusterize->SelectCollisionCandidates(AliVEvent::kCentral);
242 else if(trigger=="SemiCentral")
244 printf("Clusterizing task trigger SemiCentral\n");
245 clusterize->SelectCollisionCandidates(AliVEvent::kSemiCentral);
248 // Set clusters branch name, make sure the analysis after this one reads this name
250 //-------------------------------------------------------
251 // Final settings, pass to manager and set the containers
252 //-------------------------------------------------------
254 mgr->AddTask(clusterize);
256 // Create containers for input/output
257 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer() ;
258 mgr->ConnectInput (clusterize, 0, cinput1 );
262 printf("AddTaskEMCALClusterize - Fill output AOD\n");
263 AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer() ;
264 mgr->ConnectOutput (clusterize, 0, coutput1 );