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