]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/mini/AddTaskSigmaStar.C
Fixed container name in Sigma* macro (Enrico) + Fixed cuts options in K* macro (Franc...
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / AddTaskSigmaStar.C
1 /***************************************************************************
2 //            Modified by Enrico Fragiacomo - 15/01/2014
3 //            Based on AddAnalysisTaskRsnMini
4 //            pPb specific settings from AddTaskKStarPPB.C
5 //
6 // Macro to configure the SigmaStar analysis task 
7 // It calls all configs desired by the user, by means
8 // of the boolean switches defined in the first lines.
9 // ---
10 // Inputs:
11 //  1) flag to know if running on MC or data
12 //  2) collision system, whether pp, pPb or PbPb
13 // --
14 // Returns:
15 //  kTRUE  --> initialization successful
16 //  kFALSE --> initialization failed (some config gave errors)
17 //
18 ****************************************************************************/
19  
20 enum ERsnCollType_t { kPP=0,
21                       kPPb,
22                       kPbPb};
23
24 enum pairYCutSet { kPairDefault, 
25                    kNegative,
26                    kCentral
27                  };
28
29 enum eventCutSet { kOld = -1, 
30                    kEvtDefault, //=0
31                    kNoPileUpCut, //=1
32                    kPileUpMV, //=2
33                    kPileUpSPD3, //=3                  
34                    kDefaultVtx8, //=4
35                    kDefaultVtx5 //=5                    
36                  };
37
38 enum eventMixConfig { kDisabled = -1,
39                       kMixDefault,//=0 //10 events, Dvz = 1cm, DC = 10
40                       k5Evts, //=1 //5 events, Dvz = 1cm, DC = 10
41                       k5Cent,  //=2 //10 events, Dvz = 1cm, DC = 5
42                     };
43
44 AliRsnMiniAnalysisTask *AddTaskSigmaStar
45 (
46  Bool_t      isMC,
47  Int_t      collSyst,
48  Float_t     cutV = 10.0,
49  Int_t       evtCutSetID = 0,
50  Int_t       pairCutSetID = 0,
51  Int_t       mixingConfigID = 0,
52  Int_t       aodFilterBit = 5,
53  Int_t       piPIDCut = 3.0,
54  Int_t       pPIDCut = 3.0,
55  Float_t     trackDCAcut = 7.0,
56  Float_t     massTol = 0.01,
57  Float_t     lambdaDCA = 0.3,
58  Float_t     lambdaCosPoinAn = 0.97,
59  Float_t     lambdaDaughDCA = 0.5,
60  Int_t       NTPCcluster = 70,
61  Float_t     maxDiffVzMix = 1.0,
62  Float_t     maxDiffMultMix = 10.0,
63  Float_t     maxDiffAngleMixDeg = 20.0,
64  Int_t       aodN = 68,
65  TString     outNameSuffix = "Sigma1385"
66  )
67 {  
68   
69   //-------------------------------------------
70   // event cuts
71   // Note that some default values refer to pPb data 2013
72   // settings from AddTaskKStarPPB.C by Francesca Bellini
73   //-------------------------------------------
74   UInt_t      triggerMask = AliVEvent::kINT7;
75   Bool_t      rmFirstEvtChunk = kTRUE; //needed for pA 2013
76   Bool_t      rejectPileUp = kTRUE; //best if used, for pA 2013
77   Int_t       MinPlpContribSPD = 5; //default value if used
78   Bool_t      useMVPileUpSelection = kFALSE; //
79   Int_t       MinPlpContribMV = 5; //default value if used
80   Bool_t      useVtxCut2013pA = kTRUE; //default use recommended 2013 pA vtx selection
81   Double_t    vtxZcut = 10.0; //cm, default cut on vtx z
82   
83   if (evtCutSetID==eventCutSet::kOld) {
84     triggerMask = AliVEvent::kAnyINT;
85     rmFirstEvtChunk = kFALSE;
86     rejectPileUp = kFALSE;
87     useVtxCut2013pA = kFALSE;
88   }
89   
90   if (evtCutSetID==eventCutSet::kNoPileUpCut) {
91     rmFirstEvtChunk = kTRUE;
92     rejectPileUp = kFALSE;
93   }
94   
95   if (evtCutSetID==eventCutSet::kPileUpMV) {
96     useMVPileUpSelection = kTRUE;
97     MinPlpContribSPD = 3;
98     //MinPlpContribMV = 5; //already set as default
99   }
100   
101   if (evtCutSetID==eventCutSet::kPileUpSPD3) {
102     MinPlpContribSPD = 3;
103   }
104   
105   if (evtCutSetID==eventCutSet::kDefaultVtx8){
106     vtxZcut = 8.0; //cm
107   } 
108   
109   if (evtCutSetID==eventCutSet::kDefaultVtx5){
110     vtxZcut = 5.0; //cm
111   } 
112
113   //-------------------------------------------
114   //pair cuts
115   //-------------------------------------------
116   Double_t    minYlab =  -0.5;
117   Double_t    maxYlab =  0.5;
118
119   if( collSyst==kPPb ) {
120     if (pairCutSetID==pairYCutSet::kPairDefault) { //0<y_cm<0.5
121       minYlab =  -0.465;  maxYlab =  0.035;
122     }
123     
124     if (pairCutSetID==pairYCutSet::kNegative) { //-0.5<y_cm<0.0
125       minYlab = -0.965;    maxYlab = -0.465;
126     }
127     
128     if (pairCutSetID==pairYCutSet::kCentral) { //|y_cm|<0.3
129       minYlab = -0.765;    maxYlab = -0.165;
130     }
131   } 
132   ::Info("AddTaskSigmaStar", Form("Min rapidity = %6.3f, Max rapidity = %6.3f",  minYlab, maxYlab) );
133
134   //-------------------------------------------
135   //mixing settings
136   //-------------------------------------------
137
138   Int_t       nmix = 0;
139   Float_t     maxDiffVzMix = 1.0;
140   Float_t     maxDiffMultMix = 10.0;
141   
142   if (mixingConfigID == eventMixConfig::kMixDefault) {
143     nmix = 10;
144   }
145
146   if (mixingConfigID == eventMixConfig::k5Evts) {
147     nmix = 5;
148   }
149   
150   if (mixingConfigID == eventMixConfig::k5Cent) {
151     maxDiffMultMix = 5;
152   }
153
154   //
155   // -- INITIALIZATION ----------------------------------------------------------------------------
156   // retrieve analysis manager
157   //
158   
159   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
160    if (!mgr) {
161       ::Error("AddTaskSigmaStar", "No analysis manager to connect to.");
162       return NULL;
163    } 
164    
165    // create the task and configure 
166    TString collSystName;
167    if(collSyst==kPP) collSystName="pp";
168    else if(collSyst==kPPb) collSystName="pPb";
169    else collSystName="PbPb";
170
171    TString taskName = Form("SigmaStar%s%s_%.1f_%d_%d_%d_%.2f_%.2f_%.1f_%.2f_%.1f", 
172                            collSystName.Data(), (isMC ? "MC" : "Data"),cutV,NTPCcluster,piPIDCut,pPIDCut,trackDCAcut,massTol,lambdaDCA,lambdaCosPoinAn,lambdaDaughDCA);
173
174    AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
175    if (!isMC && (collSyst==kPP) ){
176      Printf(Form("========== SETTING USE CENTRALITY PATCH AOD049 : %s", (aodN==49)? "yes" : "no"));
177      task->SetUseCentralityPatch(aodN==49);
178    }
179
180      if(collSyst==kPPb)  task->UseESDTriggerMask(triggerMask);
181
182
183    if(collSyst==kPPb) 
184      task->SelectCollisionCandidates(triggerMask); //
185    else if ( collSyst == kPP ) 
186      task->SelectCollisionCandidates(AliVEvent::kMB); //
187    else
188      task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral);
189   
190   
191    if ( collSyst == kPP ) 
192      task->UseMultiplicity("QUALITY");
193    else if(collSyst==kPPb) 
194     task->UseCentrality("V0A");   
195    else
196      task->UseCentrality("V0M");   
197
198    // set event mixing options
199    task->UseContinuousMix();
200    //task->UseBinnedMix();
201    task->SetNMix(nmix);
202    task->SetMaxDiffVz(maxDiffVzMix);
203    task->SetMaxDiffMult(maxDiffMultMix);
204
205    if (! (collSyst==kPP) ) task->SetMaxDiffAngle(maxDiffAngleMixDeg*TMath::DegToRad()); //set angle diff in rad
206   ::Info("AddTaskSigmaStar", Form("Event mixing configuration: \n events to mix = %i \n max diff. vtxZ = cm %5.3f \n max diff multi = %5.3f \n max diff EP angle = %5.3f deg", nmix, maxDiffVzMix, maxDiffMultMix, ( !collSyst ? 0.0 : maxDiffAngleMixDeg)));
207    
208    mgr->AddTask(task);
209    
210    //
211    // -- EVENT CUTS (same for all configs) ---------------------------------------------------------
212    //  
213    // cut on primary vertex:
214    // - 2nd argument --> |Vz| range
215    // - 3rd argument --> minimum required number of contributors
216    // - 4th argument --> tells if TPC stand-alone vertexes must be accepted
217
218    AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", cutV, 0, kFALSE);
219    if ( collSyst == kPP ) cutVertex->SetCheckPileUp(kTRUE);   // set the check for pileup
220    
221    if (collSyst==kPPb) { 
222      //set check for pileup in 2013
223      AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", rmFirstEvtChunk, rejectPileUp);
224      cutEventUtils->SetUseVertexSelection2013pA(useVtxCut2013pA);
225      ::Info("AddTaskSigmaStar", Form(":::::::::::::::::: Vertex cut as pA 2013: %s", (useVtxCut2013pA?"ON":"OFF")));   
226      if (useMVPileUpSelection){
227        cutEventUtils->SetUseMVPlpSelection(useMVPileUpSelection);
228        cutEventUtils->SetMinPlpContribMV(MinPlpContribMV);
229        cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
230        ::Info("AddTaskSigmaStar", Form("Multiple-vtx Pile-up rejection settings: MinPlpContribMV = %i, MinPlpContribSPD = %i", 
231                                        MinPlpContribMV, MinPlpContribSPD));
232      } else {
233        cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
234        ::Info("AddTaskSigmaStar", Form("SPD Pile-up rejection settings: MinPlpContribSPD = %i", MinPlpContribSPD));
235      }
236      ::Info("AddTaskSigmaStar", Form(":::::::::::::::::: Pile-up rejection mode: %s", (rejectPileUp?"ON":"OFF")));   
237      ::Info("AddTaskSigmaStar", Form("::::::::::::: Remove first event in chunk: %s", (rmFirstEvtChunk?"ON":"OFF")));   
238    }
239    
240    // define and fill cut set for event cut
241    AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
242    if (collSyst==kPPb) eventCuts->AddCut(cutEventUtils);
243    else eventCuts->AddCut(cutVertex);
244    eventCuts->SetCutScheme(cutVertex->GetName());
245    // set cuts in task
246    task->SetEventCuts(eventCuts);
247    
248    //
249    // -- EVENT-ONLY COMPUTATIONS -------------------------------------------------------------------
250    //   
251    //vertex
252    Int_t vtxID = task->CreateValue(AliRsnMiniValue::kVz, kFALSE);
253    AliRsnMiniOutput *outVtx = task->CreateOutput("eventVtx", "HIST", "EVENT");
254    outVtx->AddAxis(vtxID, 400, -20.0, 20.0);
255    
256    //multiplicity or centrality
257    Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
258    AliRsnMiniOutput *outMult = task->CreateOutput("eventMult", "HIST", "EVENT");
259    if (collSyst==kPP) 
260      outMult->AddAxis(multID, 400, 0.0, 400.0);
261    else
262      outMult->AddAxis(multID, 100, 0.0, 100.0);
263    
264    //event plane (only for PbPb)
265    Int_t planeID = task->CreateValue(AliRsnMiniValue::kPlaneAngle, kFALSE);
266    AliRsnMiniOutput *outPlane = 0x0; //task->CreateOutput("eventPlane", "HIST", "EVENT");
267    if ( collSyst==kPbPb ){
268      outPlane = task->CreateOutput("eventPlane", "HIST", "EVENT");
269      outPlane->AddAxis(planeID, 180, 0.0, TMath::Pi());
270    }
271    
272
273    //
274    // -- PAIR CUTS (common to all resonances) ------------------------------------------------------
275    //
276    AliRsnCutMiniPair *cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange);
277    cutY->SetRangeD(minYlab, maxYlab);
278    
279    AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
280    cutsPair->AddCut(cutY);
281    cutsPair->SetCutScheme(cutY->GetName());
282    
283    //
284    // -- CONFIG ANALYSIS --------------------------------------------------------------------------
285    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigSigmaStar.C");
286    if (isMC) {
287        Printf("========================== MC analysis - PID cuts not used");
288        
289    } else 
290      Printf("========================== DATA analysis - PID cuts used");
291  
292    if (!ConfigSigmaStar(task, collSyst, isMC, piPIDCut, pPIDCut, aodFilterBit, trackDCAcut, massTol, lambdaDCA, lambdaCosPoinAn, lambdaDaughDCA, NTPCcluster, "", cutsPair)) return 0x0;
293    
294    //
295    // -- CONTAINERS --------------------------------------------------------------------------------
296    //
297    TString outputFileName = AliAnalysisManager::GetCommonFileName();
298    //  outputFileName += ":Rsn";
299    Printf("AddTaskSigmaStar - Set OutputFileName : \n %s\n", outputFileName.Data() );
300    
301    
302    AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s_%.1f_%d_%d_%d_%.2f_%.2f_%.1f_%.2f_%.1f",
303                                                                 outNameSuffix.Data(),cutV,NTPCcluster,piPIDCut,pPIDCut,
304                                                                 trackDCAcut,massTol,lambdaDCA,lambdaCosPoinAn,lambdaDaughDCA), 
305                                                            TList::Class(), 
306                                                            AliAnalysisManager::kOutputContainer, 
307                                                            outputFileName);
308    
309    mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
310    mgr->ConnectOutput(task, 1, output);
311    
312    return task;
313 }