]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/mini/ConfigSigmaStarPbPb.C
a0a5a5f5282a8be350b170ecf68a714e7b095502
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigSigmaStarPbPb.C
1 //
2 // *** Configuration script for Sigma*->Lambda-Pi analysis with 2010 runs ***
3 // 
4 // A configuration script for RSN package needs to define the followings:
5 //
6 // (1) decay tree of each resonance to be studied, which is needed to select
7 //     true pairs and to assign the right mass to all candidate daughters
8 // (2) cuts at all levels: single daughters, tracks, events
9 // (3) output objects: histograms or trees
10 //
11 Bool_t ConfigSigmaStarPbPb
12 (  
13    AliRsnMiniAnalysisTask *task,
14    Bool_t                  isPP, 
15    Bool_t                  isMC,
16    Float_t                 piPIDCut,
17    Float_t                 pPIDCut,
18    Int_t                   aodFilterBit,
19    Float_t                 piDCAcut,
20    Float_t                 massTol,
21    Float_t                 lambdaDCA,
22    Float_t                 lambdaCosPoinAn,
23    Float_t                 lambdaDaughDCA,
24    Int_t                   NTPCcluster,
25    const char             *suffix,
26    AliRsnCutSet           *cutsPair
27 )
28 {
29    // manage suffix
30    if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
31    
32    // 
33    // -- Define track cuts -------------------------------------------------------------------------
34    //
35
36    // integrated pion cut
37    AliRsnCutDaughterSigmaStar2010PP *cutPi = new AliRsnCutDaughterSigmaStar2010PP("cutPionForSigmaStar", AliPID::kPion);
38    cutPi->SetPIDCut(piPIDCut);
39    cutPi->SetMinTPCcluster(NTPCcluster);
40    AliRsnCutTrackQuality *cutQuality = (AliRsnCutTrackQuality*) cutPi->CutQuality();
41    cutQuality->SetAODTestFilterBit(aodFilterBit);
42    cutQuality->SetDCARmax(piDCAcut);             
43     
44    // cut set
45    AliRsnCutSet *cutSetPi = new AliRsnCutSet("setPionForSigmaStar", AliRsnTarget::kDaughter);
46    cutSetPi->AddCut(cutPi);
47    cutSetPi->SetCutScheme(cutPi->GetName());
48    // add to task
49    Int_t iCutPi = task->AddTrackCuts(cutSetPi);
50    
51    // quality cuts
52    AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("qualityDaughterLambda");
53    
54    esdTrackCuts->SetAcceptKinkDaughters(0); // 0 = kFalse
55    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
56    esdTrackCuts->SetMaxChi2PerClusterTPC(4);
57    esdTrackCuts->SetMinNClustersTPC(NTPCcluster);
58    esdTrackCuts->SetRequireTPCRefit();
59    
60    // cut lambda
61    AliRsnCutV0 *cutLambda = new AliRsnCutV0("cutLambda", kLambda0, AliPID::kProton, AliPID::kPion);
62    cutLambda->SetESDtrackCuts(esdTrackCuts);
63    cutLambda->SetTolerance(massTol);
64    cutLambda->SetMaxDCAVertex(lambdaDCA);
65    cutLambda->SetMinCosPointingAngle(lambdaCosPoinAn);
66    cutLambda->SetMaxDaughtersDCA(lambdaDaughDCA);
67    cutLambda->SetMinTPCcluster(NTPCcluster);
68    cutLambda->SetMaxRapidity(0.8);
69    cutLambda->SetAODTestFilterBit(aodFilterBit);
70    cutLambda->SetPIDCut1(pPIDCut);
71    cutLambda->SetPIDCut2(piPIDCut);
72    cutLambda->SetPIDCut3(piPIDCut);
73    
74    // cut set
75    AliRsnCutSet *cutSetLambda = new AliRsnCutSet("setLambda", AliRsnTarget::kDaughter);
76    cutSetLambda->AddCut(cutLambda);
77    cutSetLambda->SetCutScheme(cutLambda->GetName());
78    
79    // add to task
80    Int_t iCutLambda = task->AddTrackCuts(cutSetLambda);
81    
82    // cut anti-AntiLambda
83    AliRsnCutV0 *cutAntiLambda = new AliRsnCutV0("cutAntiLambda", kLambda0Bar, AliPID::kProton, AliPID::kPion);
84    cutAntiLambda->SetESDtrackCuts(esdTrackCuts);
85    cutAntiLambda->SetTolerance(massTol);
86    cutAntiLambda->SetMaxDCAVertex(lambdaDCA);
87    cutAntiLambda->SetMinCosPointingAngle(lambdaCosPoinAn);
88    cutAntiLambda->SetMaxDaughtersDCA(lambdaDaughDCA);
89    cutAntiLambda->SetMinTPCcluster(NTPCcluster);
90    cutAntiLambda->SetMaxRapidity(0.8);
91    cutAntiLambda->SetAODTestFilterBit(aodFilterBit);
92    cutAntiLambda->SetPIDCut1(pPIDCut);
93    cutAntiLambda->SetPIDCut2(piPIDCut);
94    cutAntiLambda->SetPIDCut3(piPIDCut);
95    
96    // cut set
97    AliRsnCutSet *cutSetAntiLambda = new AliRsnCutSet("setAntiLambda", AliRsnTarget::kDaughter);
98    cutSetAntiLambda->AddCut(cutAntiLambda);
99    cutSetAntiLambda->SetCutScheme(cutAntiLambda->GetName());
100    // add to task
101    Int_t iCutAntiLambda = task->AddTrackCuts(cutSetAntiLambda); 
102    
103    
104    //######################################################################################################  
105     
106    //
107    // -- Values ------------------------------------------------------------------------------------
108    //
109    
110    /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
111    /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
112    /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
113    /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
114    /* rapidity         */ Int_t rapID  = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
115    
116    //
117    // -- Create all needed outputs -----------------------------------------------------------------
118    //
119    
120    // use an array for more compact writing, which are different on mixing and charges
121    // [0] = unlike
122    // [1] = mixing
123    // [2] = like ++
124    // [3] = like --
125    Bool_t   use     [18] = { 1         ,  1         ,  1             ,  1             ,  1         ,  1         ,  1             ,  1             ,  1         ,  1         ,  1             ,  1             ,  1          ,  1              ,  1              ,  1              ,  1              ,  1              };
126    Bool_t   useIM   [18] = { 1         ,  1         ,  1             ,  1             ,  1         ,  1         ,  1             ,  1             ,  1         ,  1         ,  1             ,  1             ,  1          ,  1              ,  1              ,  1              ,  1              ,  1              };
127    TString  name    [18] = {"SigmaP"   , "SigmaM"   , "ASigmaP"      , "ASigmaM"      , "SigmaPmix", "SigmaMmix", "ASigmaPmix"   , "ASigmaMmix"   , "SigmaPt"  , "SigmaMt"  , "ASigmaPt"     , "ASigmaMt"     , "XiM"       , "XiP"           , "Lambda1520P"   , "Lambda1520M"   , "Lambda1520PBar", "Lambda1520MBar"};
128    TString  comp    [18] = {"PAIR"     , "PAIR"     , "PAIR"         , "PAIR"         , "MIX"      , "MIX"      , "MIX"          , "MIX"          , "TRUE"     , "TRUE"     , "TRUE"         , "TRUE"         , "TRUE"      , "TRUE"          , "TRUE"          , "TRUE"          , "TRUE"          , "TRUE"          };
129    TString  output  [18] = {"HIST"     , "HIST"     , "HIST"         , "HIST"         , "HIST"     , "HIST"     , "HIST"         , "HIST"         , "HIST"     , "HIST"     , "HIST"         , "HIST"         , "HIST"      , "HIST"          , "HIST"          , "HIST"          , "HIST"          , "HIST"          };
130    Char_t   charge1 [18] = {'0'        , '0'        , '0'            , '0'            , '0'        , '0'        , '0'            , '0'            , '0'        , '0'        , '0'            , '0'            , '0'         , '0'             , '0'             , '0'             , '0'             , '0'             };
131    Char_t   charge2 [18] = {'+'        , '-'        , '-'            , '+'            , '+'        , '-'        , '-'            , '+'            , '+'        , '-'        , '-'            , '+'            , '-'         , '+'             , '+'             , '-'             , '-'             , '+'             };
132    Int_t    cutID1  [18] = { iCutLambda,  iCutLambda,  iCutAntiLambda,  iCutAntiLambda,  iCutLambda,  iCutLambda,  iCutAntiLambda,  iCutAntiLambda,  iCutLambda,  iCutLambda,  iCutAntiLambda,  iCutAntiLambda,  iCutLambda ,  iCutAntiLambda ,  iCutLambda     ,  iCutLambda     ,  iCutAntiLambda ,  iCutAntiLambda };
133    Int_t    cutID2  [18] = { iCutPi    ,  iCutPi    ,  iCutPi        ,  iCutPi        ,  iCutPi    ,  iCutPi    ,  iCutPi        ,  iCutPi        ,  iCutPi    ,  iCutPi    ,  iCutPi        ,  iCutPi        ,  iCutPi     ,  iCutPi         ,  iCutPi         ,  iCutPi         ,  iCutPi         ,  iCutPi         };
134    Int_t    ipdg    [18] = { 3224      ,  3114      , -3224          , -3114          ,  3224      ,  3114      , -3224          , -3114          ,  3224      ,  3114      , -3224          , -3114          ,  3312       , -3312           ,  3124           ,  3124           , -3124           , -3124           };
135    Double_t mass    [18] = { 1.3828    ,  1.3872    ,  1.3828        ,  1.3872        ,  1.3828    ,  1.3872    ,  1.3828        ,  1.3872        ,  1.3828    ,  1.3872    ,  1.3828        ,  1.3872        ,  1.32171    ,  1.32171        ,  1.5195         ,  1.5195         ,  1.5195         ,  1.5195         };
136    
137    for (Int_t i = 0; i < 18; i++) {
138       if (!use[i]) continue;
139       if (!isPP) output[i] = "SPARSE";
140       // create output
141       AliRsnMiniOutput *out = task->CreateOutput(Form("sigmastar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
142       // selection settings
143       out->SetCutID(0, cutID1[i]);
144       out->SetCutID(1, cutID2[i]);
145       out->SetDaughter(0, AliRsnDaughter::kLambda);
146       out->SetDaughter(1, AliRsnDaughter::kPion);
147       out->SetCharge(0, charge1[i]);
148       out->SetCharge(1, charge2[i]);
149       out->SetMotherPDG(ipdg[i]);
150       out->SetMotherMass(mass[i]);
151       // pair cuts
152       out->SetPairCuts(cutsPair);
153       // axis X: invmass
154       if (useIM[i]) 
155          out->AddAxis(imID, 800, 1.2, 2.0);
156       // axis Y: transverse momentum
157          out->AddAxis(ptID, 100, 0.0, 10.0);
158       // axis Z: rapidity
159          //out->AddAxis(rapID, 160, -0.8, 0.8);
160          
161       if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
162       
163     } 
164     
165    
166    if (isMC) {
167    
168    TString mode = "HIST";
169    if (!isPP) mode = "SPARSE";
170    
171    // create output
172    AliRsnMiniOutput *out = task->CreateOutput(Form("sigmastarP_TrueMC%s", suffix), mode.Data(), "MOTHER");
173    // selection settings
174    out->SetDaughter(0, AliRsnDaughter::kLambda);
175    out->SetDaughter(1, AliRsnDaughter::kPion);
176    out->SetMotherPDG(3224);
177    out->SetMotherMass(1.3828);
178    // pair cuts
179    out->SetPairCuts(cutsPair);
180    // binnings
181    out->AddAxis(imID, 800, 1.2, 2.0);
182    out->AddAxis(ptID, 100, 0.0, 10.0);
183    //out->AddAxis(rapID, 160, -0.8, 0.8);
184    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
185    
186    // create output
187    AliRsnMiniOutput *out = task->CreateOutput(Form("sigmastarM_TrueMC%s", suffix), mode.Data(), "MOTHER");
188    // selection settings
189    out->SetDaughter(0, AliRsnDaughter::kLambda);
190    out->SetDaughter(1, AliRsnDaughter::kPion);
191    out->SetMotherPDG(3114);
192    out->SetMotherMass(1.3872);
193    // pair cuts
194    out->SetPairCuts(cutsPair);
195    // binnings
196    out->AddAxis(imID, 800, 1.2, 2.0);
197    out->AddAxis(ptID, 100, 0.0, 10.0);
198    //out->AddAxis(rapID, 160, -0.8, 0.8);
199    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
200    
201    // create output
202    AliRsnMiniOutput *out = task->CreateOutput(Form("sigmastarPBar_TrueMC%s", suffix), mode.Data(), "MOTHER");
203    // selection settings
204    out->SetDaughter(0, AliRsnDaughter::kLambda);
205    out->SetDaughter(1, AliRsnDaughter::kPion);
206    out->SetMotherPDG(-3224);
207    out->SetMotherMass(1.3828);
208    // pair cuts
209    out->SetPairCuts(cutsPair);
210    // binnings
211    out->AddAxis(imID, 800, 1.2, 2.0);
212    out->AddAxis(ptID, 100, 0.0, 10.0);
213    //out->AddAxis(rapID, 160, -0.8, 0.8);
214    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
215    
216    
217    // create output
218    AliRsnMiniOutput *out = task->CreateOutput(Form("sigmastarMBar_TrueMC%s", suffix), mode.Data(), "MOTHER");
219    // selection settings
220    out->SetDaughter(0, AliRsnDaughter::kLambda);
221    out->SetDaughter(1, AliRsnDaughter::kPion);
222    out->SetMotherPDG(-3114);
223    out->SetMotherMass(1.3872);
224    // pair cuts
225    out->SetPairCuts(cutsPair);
226    // binnings
227    out->AddAxis(imID, 800, 1.2, 2.0);
228    out->AddAxis(ptID, 100, 0.0, 10.0);
229    //out->AddAxis(rapID, 160, -0.8, 0.8);
230    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
231    
232    // create output
233    AliRsnMiniOutput *out = task->CreateOutput(Form("XiP_TrueMC%s", suffix), mode.Data(), "MOTHER");
234    // selection settings
235    out->SetDaughter(0, AliRsnDaughter::kLambda);
236    out->SetDaughter(1, AliRsnDaughter::kPion);
237    out->SetMotherPDG(-3312);
238    out->SetMotherMass(1.32171);
239    // pair cuts
240    out->SetPairCuts(cutsPair);
241    // binnings
242    out->AddAxis(imID, 800, 1.2, 2.0);
243    out->AddAxis(ptID, 100, 0.0, 10.0);
244    //out->AddAxis(rapID, 160, -0.8, 0.8);
245    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
246    
247    
248    // create output
249    AliRsnMiniOutput *out = task->CreateOutput(Form("XiM_TrueMC%s", suffix), mode.Data(), "MOTHER");
250    // selection settings
251    out->SetDaughter(0, AliRsnDaughter::kLambda);
252    out->SetDaughter(1, AliRsnDaughter::kPion);
253    out->SetMotherPDG(3312);
254    out->SetMotherMass(1.32171);
255    // pair cuts
256    out->SetPairCuts(cutsPair);
257    // binnings
258    out->AddAxis(imID, 800, 1.2, 2.0);
259    out->AddAxis(ptID, 100, 0.0, 10.0);
260    //out->AddAxis(rapID, 160, -0.8, 0.8);
261    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
262    
263    
264    AliRsnMiniOutput *out = task->CreateOutput(Form("Lambda1520P_TrueMC%s", suffix), mode.Data(), "MOTHER");
265    // selection settings
266    out->SetDaughter(0, AliRsnDaughter::kLambda);
267    out->SetDaughter(1, AliRsnDaughter::kPion);
268    out->SetCharge(0, 0);
269    out->SetCharge(1, 1);
270    out->SetMotherPDG(3124);
271    out->SetMotherMass(1.5195);
272    // pair cuts
273    out->SetPairCuts(cutsPair);
274    // binnings
275    out->AddAxis(imID, 800, 1.2, 2.0);
276    out->AddAxis(ptID, 100, 0.0, 10.0);
277    //out->AddAxis(rapID, 160, -0.8, 0.8);
278    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
279    
280    AliRsnMiniOutput *out = task->CreateOutput(Form("Lambda1520M_TrueMC%s", suffix), mode.Data(), "MOTHER");
281    // selection settings
282    out->SetDaughter(0, AliRsnDaughter::kLambda);
283    out->SetDaughter(1, AliRsnDaughter::kPion);
284    out->SetCharge(0, 0);
285    out->SetCharge(1, -1);
286    out->SetMotherPDG(3124);
287    out->SetMotherMass(1.5195);
288    // pair cuts
289    out->SetPairCuts(cutsPair);
290    // binnings
291    out->AddAxis(imID, 800, 1.2, 2.0);
292    out->AddAxis(ptID, 100, 0.0, 10.0);
293    //out->AddAxis(rapID, 160, -0.8, 0.8);
294    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
295    
296    
297    // create output
298    AliRsnMiniOutput *out = task->CreateOutput(Form("Lambda1520PBar_TrueMC%s", suffix), mode.Data(), "MOTHER");
299    // selection settings
300    out->SetDaughter(0, AliRsnDaughter::kLambda);
301    out->SetDaughter(1, AliRsnDaughter::kPion);
302    out->SetCharge(0, 0);
303    out->SetCharge(1, 1);
304    out->SetMotherPDG(-3124);
305    out->SetMotherMass(1.5195);
306    // pair cuts
307    out->SetPairCuts(cutsPair);
308    // binnings
309    out->AddAxis(imID, 800, 1.2, 2.0);
310    out->AddAxis(ptID, 100, 0.0, 10.0);
311    //out->AddAxis(rapID, 160, -0.8, 0.8);
312    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
313    
314    AliRsnMiniOutput *out = task->CreateOutput(Form("Lambda1520MBar_TrueMC%s", suffix), mode.Data(), "MOTHER");
315    // selection settings
316    out->SetDaughter(0, AliRsnDaughter::kLambda);
317    out->SetDaughter(1, AliRsnDaughter::kPion);
318    out->SetCharge(0, 0);
319    out->SetCharge(1, -1);
320    out->SetMotherPDG(-3124);
321    out->SetMotherMass(1.5195);
322    // pair cuts
323    out->SetPairCuts(cutsPair);
324    // binnings
325    out->AddAxis(imID, 800, 1.2, 2.0);
326    out->AddAxis(ptID, 100, 0.0, 10.0);
327    //out->AddAxis(rapID, 160, -0.8, 0.8);
328    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
329    
330    
331    
332    }
333
334    return kTRUE;
335 }
336
337
338
339 void AddMonitorOutput(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0)
340 {
341
342    // Mass
343    AliRsnValueDaughter *axisMass = new AliRsnValueDaughter("m", AliRsnValueDaughter::kMass);
344    axisMass->SetBins(0.7,1.5,0.05);
345
346    // output: 2D histogram
347    AliRsnListOutput *outMonitorM = new AliRsnListOutput("M", AliRsnListOutput::kHistoDefault);
348    outMonitorM->AddValue(axisMass);
349
350    // add outputs to loop
351    if (mon) mon->Add(outMonitorM);
352    if (lm) lm->AddOutput(outMonitorM);
353   
354 }