]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/macros/AddTaskEMCALClusterize.C
Changes for 2012 data analysis
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / macros / AddTaskEMCALClusterize.C
1 AliAnalysisTaskEMCALClusterize* AddTaskEMCALClusterize(
2                                                        const Int_t   bMC        = kFALSE,
3                                                        const TString name       = "V1Unfold", 
4                                                        const TString trigger    = "", 
5                                                        const Int_t   run        = 0, 
6                                                        const TString pass       = "pass3",
7                                                        const Bool_t  tm         = kTRUE, 
8                                                        const Int_t   minEcell   = 50,
9                                                        const Int_t   minEseed   = 100,
10                                                        const Int_t   maxDeltaT  = 250,
11                                                        const Int_t   timeWindow = 1000,
12                                                        const Int_t   minEUnf    = 15, 
13                                                        const Int_t   minFrac    = 1
14                                                        )
15 {  
16   // Get the pointer to the existing analysis manager via the static access method.
17   //==============================================================================
18   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
19   if (!mgr) {
20     ::Error("AddTaskEMCALClusterize", "No analysis manager to connect to.");
21     return NULL;
22   }  
23   
24   // Check the analysis type using the event handlers connected to the analysis manager.
25   //==============================================================================
26   if (!mgr->GetInputEventHandler()) {
27     ::Error("AddTaskEMCALClusterize", "This task requires an input event handler");
28     return NULL;
29   }
30   
31   AliAnalysisTaskEMCALClusterize* clusterize = new AliAnalysisTaskEMCALClusterize(Form("EMCALClusterize%s_Ecell%d_Eseed%d_DT%d_WT%d",
32                                                                                        name.Data(),minEcell,minEseed,maxDeltaT,timeWindow));
33
34   clusterize->SetAODBranchName(Form("%s_Ecell%d_Eseed%d_DT%d_WT%d",
35                                     name.Data(),minEcell,minEseed,maxDeltaT,timeWindow));
36
37   printf("Created Branch Name: %s_Ecell%d_Eseed%d_DT%d_WT%d\n",name.Data(),minEcell,minEseed, maxDeltaT,timeWindow);
38   //clusterize->SetOCDBPath("local://$ALICE_ROOT/OCDB");
39
40   clusterize->SwitchOffFillAODCaloCells();
41   clusterize->SwitchOffFillAODHeader();
42   clusterize->FillAODFile(kFALSE); // fill aod.root with clusters?, not really needed for analysis.
43
44   if(tm) clusterize->SwitchOnTrackMatching();
45   else   clusterize->SwitchOffTrackMatching();
46   
47   // Settings for LHC11a
48   if(run > 140000 && run <= 146860) {
49     clusterize->SwitchOnLEDEventsRemoval() ;
50     printf("Clusterizer: Reject LED events\n");
51   }
52   else clusterize->SwitchOffLEDEventsRemoval() ;
53   
54   printf(" ---- Clusterize RUN >%d< ---- \n",run);
55   
56   if     (run > 140000)  clusterize->SetGeometryName("EMCAL_COMPLETEV1");
57   else if(run > 171000)  clusterize->SetGeometryName("EMCAL_COMPLETE12SMV1");
58   else                   clusterize->SetGeometryName("EMCAL_FIRSTYEARV1");
59
60   AliEMCALRecParam * params = clusterize->GetRecParam();
61
62   params->SetW0(4.5);
63
64   //printf("**** InputHandler %s ***\n",(mgr->GetInputEventHandler())->ClassName());
65   TString sHandler((mgr->GetInputEventHandler())->ClassName());
66   if(sHandler.Contains("AOD")){
67     printf("AliAnalysisTaskEMCALClusterize - Open time cuts for AODs\n");
68     params->SetTimeCut(1e6);//Open this cut for AODs
69     params->SetTimeMin(-1); //Open this cut for AODs
70     params->SetTimeMax(1e6);//Open this cut for AODs    
71   }
72   else{
73     printf("AliAnalysisTaskEMCALClusterize - Set time cuts for ESDs\n");
74     if(maxDeltaT > 1) params->SetTimeCut(maxDeltaT*1.e-9);
75     else            { params->SetTimeCut(250*1.e-9); printf("default maxDeltaT = 250 ns\n"); }// Same as in reco
76     
77     if(timeWindow > 1){
78       params->SetTimeMin(-1*timeWindow*1.e-9);
79       params->SetTimeMax(timeWindow*1.e-9);
80     }
81     else{ // same as in reco
82       params->SetTimeMin(425*1.e-9);
83       params->SetTimeMax(825*1.e-9);
84       printf("default time window 425 ns < T < 825 ns\n");
85     }
86   }
87
88   params->SetClusteringThreshold(minEseed/1.e3);                                          
89   params->SetMinECut            (minEcell/1.e3); 
90
91   // Clusterizer type
92   if(name.Contains("V2")) params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerv2);
93   if(name.Contains("V1")) params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerv1);
94   if(name.Contains("NxN"))params->SetClusterizerFlag(AliEMCALRecParam::kClusterizerNxN);
95
96
97   //Unfolding
98   if(name.Contains("JustUnfold"))
99     clusterize->JustUnfold(kTRUE); // if TRUE, do just unfolding, do not recluster cells
100   else  
101     clusterize->JustUnfold(kFALSE); 
102
103   if (name.Contains("Unfold")){
104
105     clusterize->SwitchOnCellEnergySelection();
106     clusterize->SetCellCuts(minEUnf/1000.,minFrac/10000.);
107     printf("AliAnalysisTaskEMCALClusterize - Cuts: min E %f, frac %f\n",minEUnf/1000.,minFrac/10000.);
108     //clusterize->SwitchOffCellEnergySelection(); 
109
110     if(!name.Contains("Just"))
111     params->SetUnfold(kTRUE);
112   else 
113     params->SetUnfold(kFALSE);
114
115   } // unfold
116   
117   TGeoHMatrix* matrix[12];
118   AliEMCALRecoUtils * reco = clusterize->GetRecoUtils();
119   
120   gROOT->LoadMacro("ConfigureEMCALRecoUtils.C"); // $ALICE_ROOT/PWGGA/EMCALTasks/macros
121   ConfigureEMCALRecoUtils(
122                           reco,
123                           bMC, 
124                           matrix,
125                           "",//AODB path, default
126                           run, 
127                           pass
128                           );
129   
130   //Alignment matrices
131   
132   clusterize->SetImportGeometryFromFile(kTRUE); // import geometry.root file
133   
134   for (Int_t mod=0;mod<12;mod++)
135   {
136     //((TGeoHMatrix*) mobj->At(mod))->Print();
137     clusterize->SetGeometryMatrixInSM(matrix[mod],mod);
138   }
139   
140   clusterize->SwitchOnLoadOwnGeometryMatrices();
141     
142   if(trigger=="EMC7"){
143     printf("AliAnalysisTaskEMCALClusterize ---Data with kEMC7 Trigger and clusterizer %s\n",name.Data());
144     clusterize->SelectCollisionCandidates(AliVEvent::kEMC7);
145   }
146   else if (trigger=="INT7"){
147     printf("AliAnalysisTaskEMCALClusterize ---Data with kINT7 Trigger and clusterizer %s\n",name.Data());
148     clusterize->SelectCollisionCandidates(AliVEvent::kINT7);
149   }
150   else if(trigger=="EMC1"){
151     printf("AliAnalysisTaskEMCALClusterize ---Data with kEMC1 Trigger and clusterizer %s\n",name.Data());
152     clusterize->SelectCollisionCandidates(AliVEvent::kEMC1);
153   }
154   else if(trigger=="MB"){
155     printf("AliAnalysisTaskEMCALClusterize ---Data with kMB Trigger and clusterizer %s\n",name.Data());
156     clusterize->SelectCollisionCandidates(AliVEvent::kMB);
157   }
158
159   mgr->AddTask(clusterize);
160   
161   // Create containers for input/output
162   AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer()  ;
163   AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer() ;
164   
165   mgr->ConnectInput  (clusterize, 0,  cinput1 );
166   mgr->ConnectOutput (clusterize, 0, coutput1 );
167   
168   return clusterize;
169   
170 }