ade71ecc13dd78e26ffb80b7a235928e59b91bbb
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigLambdaStarPbPb.C
1 /***************************************************************************
2             
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
12 Bool_t ConfigLambdaStarPbPb
13 (  
14     AliRsnMiniAnalysisTask *task, 
15     Bool_t                 isMC , 
16     Bool_t                 isPP ,
17     const char             *suffix,
18     AliRsnCutSet           *cutsPair,
19     Int_t                  aodFilterBit = 5,
20     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPrCandidate = AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010,
21     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010,
22     Float_t                nsigmaPr = 2.0,
23     Float_t                nsigmaKa = 2.0,
24     Bool_t                 enableMonitor = kTRUE,
25     Bool_t                 IsMcTrueOnly = kFALSE,
26     Int_t                  aodN = 0
27 )
28 {
29   // manage suffix
30   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
31   
32   // set daughter cuts
33   AliRsnCutSetDaughterParticle * cutSetQ;
34   AliRsnCutSetDaughterParticle * cutSetPr;
35   AliRsnCutSetDaughterParticle * cutSetK;
36
37   cutSetQ  = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kKaon, -1.0, aodFilterBit);
38   cutSetPr = new AliRsnCutSetDaughterParticle(Form("cutProtonTPCPbPb_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit);
39   cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutKaonTPCPbPb_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
40
41   Int_t iCutQ = task->AddTrackCuts(cutSetQ);
42   Int_t iCutPr = task->AddTrackCuts(cutSetPr);
43   Int_t iCutK = task->AddTrackCuts(cutSetK);
44   
45   if(enableMonitor){
46     Printf("======== Monitoring cut AliRsnCutSetDaughterParticle enabled");
47     gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
48     AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput());
49     AddMonitorOutput(isMC, cutSetPr->GetMonitorOutput());
50     AddMonitorOutput(isMC, cutSetK->GetMonitorOutput());
51   }  
52   
53   // -- Values ------------------------------------------------------------------------------------
54   /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
55   /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
56   /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
57   /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
58   /* pseudorapidity   */ Int_t etaID  = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
59   /* rapidity         */ Int_t yID    = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
60
61   // -- Create all needed outputs -----------------------------------------------------------------
62   // use an array for more compact writing, which are different on mixing and charges
63   // [0] = unlike
64   // [1] = mixing
65   // [2] = like ++
66   // [3] = like --
67   Bool_t  use     [10] = { !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly ,  !IsMcTrueOnly, !IsMcTrueOnly,  isMC   ,   isMC   ,  isMC   ,   isMC   };
68   Bool_t  useIM   [10] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  1      ,   1      ,  0      ,   0      };
69   TString name    [10] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM",  "TruesMP", "ResPM"  ,  "ResMP"  };
70   TString comp    [10] = {"PAIR"   , "PAIR"   , "MIX"    , "MIX"    , "PAIR"  , "PAIR"  , "TRUE"  ,  "TRUE"  , "TRUE"  ,  "TRUE"  };
71   //TString output  [10] = {"HIST"   , "HIST"   , "HIST"   , "HIST"   , "HIST"  , "HIST"  , "HIST"  ,  "HIST"  , "HIST"  ,  "HIST"  };
72   TString output  [10] = {"SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"  , "SPARSE"  , "SPARSE"  ,  "SPARSE"  , "SPARSE"  ,  "SPARSE"  };
73   Char_t  charge1 [10] = {'+'      , '-'      , '+'      , '-'      , '+'     , '-'     , '+'     ,  '-'     , '+'     ,  '-'     };
74   Char_t  charge2 [10] = {'-'      , '+'      , '-'      , '+'      , '+'     , '-'     , '-'     ,  '+'     , '-'     ,  '+'     };
75   Int_t   cutID1  [10] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK  ,  iCutK  ,   iCutK  ,  iCutK  ,   iCutK  };
76   Int_t cutID2    [10] = { iCutPr  ,  iCutPr  ,  iCutPr  ,  iCutPr  ,iCutPr  ,  iCutPr  , iCutPr  ,  iCutPr  ,  iCutPr  ,  iCutPr };
77   
78   for (Int_t i = 0; i < 10; i++) {
79     if (!use[i]) continue;
80     AliRsnMiniOutput *out = task->CreateOutput(Form("lstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
81     out->SetCutID(0, cutID1[i]);
82     out->SetCutID(1, cutID2[i]);
83     out->SetDaughter(0, AliRsnDaughter::kKaon);
84     out->SetDaughter(1, AliRsnDaughter::kProton);
85     out->SetCharge(0, charge1[i]);
86     out->SetCharge(1, charge2[i]);
87     out->SetMotherPDG(3124);
88     out->SetMotherMass(1.520);
89     out->SetPairCuts(cutsPair);
90
91     // axis X: invmass (or resolution)
92     if (useIM[i]) 
93       out->AddAxis(imID, 900, 1.3, 2.2);
94     //else
95     //out->AddAxis(resID, 200, -0.02, 0.02);
96     
97     // axis Y: transverse momentum
98     out->AddAxis(ptID, 100, 0.0, 10.0);
99     
100     // axis Z: centrality-multiplicity
101     if (!isPP)
102       out->AddAxis(centID, 100, 0.0, 100.0);
103     else 
104       out->AddAxis(centID, 400, 0.0, 400.0);
105     
106     // axis W: pseudorapidity
107     //    out->AddAxis(etaID, 20, -1.0, 1.0);
108     // axis J: rapidity
109     // out->AddAxis(yID, 10, -0.5, 0.5);
110     
111   }   
112   return kTRUE;
113 }