]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/mini/AddTaskKStarPPB.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / AddTaskKStarPPB.C
1 /***************************************************************************
2               fbellini@cern.ch - last modified on 28/11/2013
3 //
4 //Lauches KStar analysis with rsn mini package
5 //Allows basic configuration of pile-up check and event cuts
6 //
7 ****************************************************************************/
8 enum pairYCutSet { kPairDefault,
9                    kNegative,
10                    kCentral
11                  };
12
13 enum eventCutSet { kOld = -1, 
14                    kEvtDefault, //=0
15                    kNoPileUpCut, //=1
16                    kPileUpMV, //=2
17                    kPileUpSPD3, //=3                  
18                    kDefaultVtx8, //=4
19                    kDefaultVtx5, //=5                    
20                    kMCEvtDefault //=6
21 };
22
23 enum eventMixConfig { kDisabled = -1,
24                       kMixDefault,//=0 //10 events, Dvz = 1cm, DC = 10
25                       k5Evts, //=1 //5 events, Dvz = 1cm, DC = 10
26                       k5Cent,  //=2 //10 events, Dvz = 1cm, DC = 5
27                     };
28
29
30 AliRsnMiniAnalysisTask * AddTaskKStarPPB
31 (
32  Bool_t      isMC = kFALSE,
33  Bool_t      isPP = kFALSE,
34  TString     outNameSuffix = "tof2s",
35  Int_t       evtCutSetID = 0,
36  Int_t       pairCutSetID = 0,
37  Int_t       mixingConfigID = 0,
38  Int_t       aodFilterBit = 5,
39  Int_t       customQualityCutsID = -1,
40  AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
41  AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
42  Float_t     nsigmaPi = 2.0,
43  Float_t     nsigmaKa = 2.0,
44  Bool_t      enableMonitor = kTRUE,
45  Bool_t      IsMcTrueOnly = kFALSE,
46  TString     monitorOpt = "",
47  Bool_t      useMixLS = 0,
48  Bool_t      checkReflex = 0,
49  AliRsnMiniValue::EType yaxisvar = AliRsnMiniValue::kPt
50 )
51 {  
52
53   
54   //-------------------------------------------
55   // event cuts
56   //-------------------------------------------
57   UInt_t      triggerMask = AliVEvent::kINT7;
58   Bool_t      rmFirstEvtChunk = kTRUE; //needed for pA 2013
59   Bool_t      rejectPileUp = kTRUE; //best if used, for pA 2013
60   Int_t       MinPlpContribSPD = 5; //default value if used
61   Bool_t      useMVPileUpSelection = kFALSE; //
62   Int_t       MinPlpContribMV = 5; //default value if used
63   Bool_t      useVtxCut2013pA = kTRUE; //default use recommended 2013 pA vtx selection
64   Double_t    vtxZcut = 10.0; //cm, default cut on vtx z
65   
66   if (evtCutSetID==eventCutSet::kOld) {
67     triggerMask = AliVEvent::kAnyINT;
68     rmFirstEvtChunk = kFALSE;
69     rejectPileUp = kFALSE;
70     useVtxCut2013pA = kFALSE;
71   }
72   
73   if (evtCutSetID==eventCutSet::kNoPileUpCut) {
74     rmFirstEvtChunk = kTRUE;
75     rejectPileUp = kFALSE;
76   }
77   
78   if (evtCutSetID==eventCutSet::kPileUpMV) {
79     useMVPileUpSelection = kTRUE;
80     MinPlpContribSPD = 3;
81     //MinPlpContribMV = 5; //already set as default
82   }
83   
84   if (evtCutSetID==eventCutSet::kPileUpSPD3) {
85     MinPlpContribSPD = 3;
86   }
87   
88   if (evtCutSetID==eventCutSet::kDefaultVtx8){
89     vtxZcut = 8.0; //cm
90   } 
91   
92   if (evtCutSetID==eventCutSet::kDefaultVtx5){
93     vtxZcut = 5.0; //cm
94   }
95   
96   if (evtCutSetID==eventCutSet::kMCEvtDefault) {
97     rmFirstEvtChunk = kFALSE;
98     rejectPileUp = kFALSE;
99   }
100   
101   //-------------------------------------------
102   //pair cuts
103   //-------------------------------------------
104   Double_t    minYlab =  -0.465;
105   Double_t    maxYlab =  0.035;
106
107   if (pairCutSetID==pairYCutSet::kNegative) { //-0.5<y_cm<0.0
108     minYlab = -0.965;    maxYlab = -0.465;
109   }
110   
111   if (pairCutSetID==pairYCutSet::kCentral) { //|y_cm|<0.3
112     minYlab = -0.765;    maxYlab = -0.165;
113   }
114
115   //-------------------------------------------
116   //mixing settings
117   //-------------------------------------------
118   Int_t       nmix = 0;
119   Float_t     maxDiffVzMix = 1.0;
120   Float_t     maxDiffMultMix = 10.0;
121   
122   if (mixingConfigID == eventMixConfig::kMixDefault) {
123     nmix = 10;
124   }
125
126   if (mixingConfigID == eventMixConfig::k5Evts) {
127     nmix = 5;
128   }
129   
130   if (mixingConfigID == eventMixConfig::k5Cent) {
131     maxDiffMultMix = 5;
132   }
133
134   //
135   // -- INITIALIZATION ----------------------------------------------------------------------------
136   // retrieve analysis manager
137   //
138   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
139    if (!mgr) {
140       ::Error("AddAnalysisTaskTOFKStar", "No analysis manager to connect to.");
141       return NULL;
142    } 
143
144    // create the task and configure 
145    TString taskName = Form("TOFKStar%s%s_%i%i", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), (Int_t)cutPiCandidate,(Int_t)cutKaCandidate );
146    AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
147    //task->UseESDTriggerMask(triggerMask); //ESD
148    task->SelectCollisionCandidates(triggerMask); //AOD
149    
150    if (isPP) 
151      task->UseMultiplicity("QUALITY");
152    else
153      task->UseCentrality("V0A");   
154    // set event mixing options
155    task->UseContinuousMix();
156    //task->UseBinnedMix();
157    task->SetNMix(nmix);
158    task->SetMaxDiffVz(maxDiffVzMix);
159    task->SetMaxDiffMult(maxDiffMultMix);
160    ::Info("AddAnalysisTaskTOFKStar", Form("Event mixing configuration: \n events to mix = %i \n max diff. vtxZ = cm %5.3f \n max diff multi = %5.3f", nmix, maxDiffVzMix, maxDiffMultMix));
161    
162    mgr->AddTask(task);
163    
164    //
165    // -- EVENT CUTS (same for all configs) ---------------------------------------------------------
166    //  
167    // cut on primary vertex:
168    // - 2nd argument --> |Vz| range
169    // - 3rd argument --> minimum required number of contributors to vtx
170    // - 4th argument --> tells if TPC stand-alone vertexes must be accepted
171    AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", vtxZcut, 0, kFALSE);
172    //if (isPP) cutVertex->SetCheckPileUp(kTRUE);   // set the check for pileup 
173    //set check for pileup in 2013
174    AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", rmFirstEvtChunk, rejectPileUp);
175    cutEventUtils->SetUseVertexSelection2013pA(useVtxCut2013pA);
176    ::Info("AddAnalysisTaskTOFKStar", Form(":::::::::::::::::: Vertex cut as pA 2013: %s", (useVtxCut2013pA?"ON":"OFF")));   
177    if (useMVPileUpSelection){
178      cutEventUtils->SetUseMVPlpSelection(useMVPileUpSelection);
179      cutEventUtils->SetMinPlpContribMV(MinPlpContribMV);
180      cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
181      ::Info("AddAnalysisTaskTOFKStar", Form("Multiple-vtx Pile-up rejection settings: MinPlpContribMV = %i, MinPlpContribSPD = %i", MinPlpContribMV, MinPlpContribSPD));
182    } else {
183      cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
184      ::Info("AddAnalysisTaskTOFKStar", Form("SPD Pile-up rejection settings: MinPlpContribSPD = %i", MinPlpContribSPD));
185    }
186    ::Info("AddAnalysisTaskTOFKStar", Form(":::::::::::::::::: Pile-up rejection mode: %s", (rejectPileUp?"ON":"OFF")));   
187    ::Info("AddAnalysisTaskTOFKStar", Form("::::::::::::: Remove first event in chunk: %s", (rmFirstEvtChunk?"ON":"OFF")));   
188    
189    // define and fill cut set for event cut
190    AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
191    eventCuts->AddCut(cutEventUtils);
192    eventCuts->AddCut(cutVertex);
193    eventCuts->SetCutScheme(Form("%s&%s", cutEventUtils->GetName(), cutVertex->GetName()));
194    // set cuts in task
195    task->SetEventCuts(eventCuts);
196    
197    //
198    // -- EVENT-ONLY COMPUTATIONS -------------------------------------------------------------------
199    //   
200    //vertex
201    Int_t vtxID = task->CreateValue(AliRsnMiniValue::kVz, kFALSE);
202    AliRsnMiniOutput *outVtx = task->CreateOutput("eventVtx", "HIST", "EVENT");
203    outVtx->AddAxis(vtxID, 240, -12.0, 12.0);
204    
205    //multiplicity or centrality
206    Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
207    AliRsnMiniOutput *outMult = task->CreateOutput("eventMult", "HIST", "EVENT");
208    if (isPP) 
209      outMult->AddAxis(multID, 400, 0.0, 400.0);
210    else
211      outMult->AddAxis(multID, 100, 0.0, 100.0);
212    
213    TH2F* hvz=new TH2F("hVzVsCent","", 100, 0., 100., 240, -12.0, 12.0);
214    task->SetEventQAHist("vz",hvz);//plugs this histogram into the fHAEventVz data member
215
216    TH2F* hmc=new TH2F("MultiVsCent","", 100, 0., 100., 400, 0., 400.);
217    hmc->GetYaxis()->SetTitle("QUALITY");
218    task->SetEventQAHist("multicent",hmc);//plugs this histogram into the fHAEventMultiCent data member
219
220    //
221    // -- PAIR CUTS (common to all resonances) ------------------------------------------------------
222    //
223    AliRsnCutMiniPair *cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange);
224    cutY->SetRangeD(minYlab, maxYlab);
225    
226    AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
227    cutsPair->AddCut(cutY);
228    cutsPair->SetCutScheme(cutY->GetName());
229    
230    //
231    // -- CONFIG ANALYSIS --------------------------------------------------------------------------
232    //   
233    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigKStarPPb.C");
234    if (!ConfigKStarPPb(task, isMC, isPP, "", cutsPair, aodFilterBit, customQualityCutsID, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly,  monitorOpt.Data(), useMixLS, isMC&checkReflex, yaxisvar)) return 0x0;
235    
236    
237    //
238    // -- CONTAINERS --------------------------------------------------------------------------------
239    //
240    TString outputFileName = AliAnalysisManager::GetCommonFileName();
241    //  outputFileName += ":Rsn";
242    Printf("AddAnalysisTaskTOFKStar - Set OutputFileName : \n %s\n", outputFileName.Data() );
243    
244    AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s",outNameSuffix.Data()), 
245                                                            TList::Class(), 
246                                                            AliAnalysisManager::kOutputContainer, 
247                                                            outputFileName);
248    mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
249    mgr->ConnectOutput(task, 1, output);
250    
251    return task;
252 }