1 /***************************************************************************
2 fbellini@cern.ch - created on 19/09/2013
4 // *** Configuration script for K*, anti-K* syst. analysis with p-Pb runs ***
6 // A configuration script for RSN package needs to define the followings:
8 // (1) decay tree of each resonance to be studied, which is needed to select
9 // true pairs and to assign the right mass to all candidate daughters
10 // (2) cuts at all levels: single daughters, tracks, events
11 // (3) output objects: histograms or trees
12 ****************************************************************************/
14 Bool_t ConfigKStarTrkSyst
16 AliRsnMiniAnalysisTask *task,
20 AliRsnCutSet *cutsPair,
21 Int_t aodFilterBit = 5,
22 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
23 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
24 Float_t nsigmaPi = 2.0,
25 Float_t nsigmaKa = 2.0,
26 Bool_t enableMonitor = kTRUE,
27 Bool_t IsMcTrueOnly = kFALSE,
29 Int_t signedPdg = 313,
30 TString monitorOpt = "",
31 AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt,
32 Bool_t enableTrkSyst = kFALSE,
33 Double_t dcaxymax = 2.4,
34 Double_t dcazmax = 3.2,
35 Double_t minNcls = 70,
36 Double_t maxX2cls = 4.0
37 // Double_t minCrossedRows = 50.0,
38 // Double_t maxClsCrossedRows = 0.8
42 if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
45 AliRsnCutSetDaughterParticle * cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
46 AliRsnCutSetDaughterParticle * cutSetK = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutKaCandidate, nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
47 AliRsnCutSetDaughterParticle * cutSetQ = new AliRsnCutSetDaughterParticle(Form("cut_quality"), AliRsnCutSetDaughterParticle::kQualityStd2011, 1e20, 1e20, aodFilterBit);
50 ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetDCARmax(dcaxymax);
51 ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetDCAZmax(dcazmax);
52 ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetTPCminNClusters(minNcls);
53 ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetTPCmaxChi2(maxX2cls);
54 //cutSetQ->SetTPCminNcrossedRows(minCrossedRows); //TO BE IMPLEMENTED
55 //cutSetQ->SetTPCminNclsPerCrossedRow(maxClsCrossedRows); //TO BE IMPLEMENTED
58 Int_t iCutQ = task->AddTrackCuts(cutSetQ);
59 Int_t iCutPi = task->AddTrackCuts(cutSetPi);
60 Int_t iCutK = task->AddTrackCuts(cutSetK);
63 Printf("======== Cut monitoring enabled");
64 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
65 AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput(), monitorOpt.Data());
66 AddMonitorOutput(isMC, cutSetPi->GetMonitorOutput(), monitorOpt.Data());
67 AddMonitorOutput(isMC, cutSetK->GetMonitorOutput()), monitorOpt.Data();
70 // -- Values ------------------------------------------------------------------------------------
71 /* invariant mass */ Int_t imID = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
72 /* IM resolution */ Int_t resID = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
73 /* transv. momentum */ Int_t ptID = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
74 /* centrality */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
75 /* pseudorapidity */ Int_t etaID = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
76 /* rapidity */ Int_t yID = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
77 /* 1st daughter pt */ Int_t fdpt = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE);
78 /* 2nd daughter pt */ Int_t sdpt = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE);
79 /* 1st daughter p */ Int_t fdp = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE);
80 /* 2nd daughter p */ Int_t sdp = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, kFALSE);
82 // -- Create all needed outputs -----------------------------------------------------------------
83 // use an array for more compact writing, which are different on mixing and charges
89 Bool_t use [12] = { !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly , !IsMcTrueOnly, !IsMcTrueOnly, isMC , isMC , isMC , isMC , useMixLS, useMixLS };
90 Bool_t useIM [12] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 };
91 TString name [12] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM", "TruesMP", "ResPM" , "ResMP", "MixingPP", "MixingMM" };
92 TString comp [12] = {"PAIR" , "PAIR" , "MIX" , "MIX" , "PAIR" , "PAIR" , "TRUE" , "TRUE" , "TRUE" , "TRUE", "MIX","MIX"};
93 //TString output [10] = {"HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" };
94 TString output [12] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE", "SPARSE" , "SPARSE"};
95 Char_t charge1 [12] = {'+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-'};
96 Char_t charge2 [12] = {'-' , '+' , '-' , '+' , '+' , '-' , '-' , '+' , '-' , '+' ,'+' , '-' };
97 Int_t cutID1 [12] = { iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK, iCutK };
98 Int_t cutID2 [12] = { iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi, iCutPi, iCutPi };
100 for (Int_t i = 0; i < 12; i++) {
101 if (!use[i]) continue;
102 AliRsnMiniOutput *out = task->CreateOutput(Form("kstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
103 out->SetCutID(0, cutID1[i]);
104 out->SetCutID(1, cutID2[i]);
105 out->SetDaughter(0, AliRsnDaughter::kKaon);
106 out->SetDaughter(1, AliRsnDaughter::kPion);
107 out->SetCharge(0, charge1[i]);
108 out->SetCharge(1, charge2[i]);
109 out->SetMotherPDG(signedPdg);
110 out->SetMotherMass(0.89594);
111 out->SetPairCuts(cutsPair);
113 // axis X: invmass (or resolution)
115 out->AddAxis(imID, 90, 0.6, 1.5);
117 out->AddAxis(resID, 200, -0.02, 0.02);
119 // axis Y: transverse momentum of pair as default - else chosen value
120 if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt)
121 out->AddAxis(fdpt, 100, 0.0, 10.0);
123 if (yaxisVar==AliRsnMiniValue::kSecondDaughterPt)
124 out->AddAxis(sdpt, 100, 0.0, 10.0);
126 if (yaxisVar==AliRsnMiniValue::kFirstDaughterP)
127 out->AddAxis(fdp, 100, 0.0, 10.0);
129 if (yaxisVar==AliRsnMiniValue::kSecondDaughterP)
130 out->AddAxis(sdp, 100, 0.0, 10.0);
132 out->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt
134 // axis Z: centrality-multiplicity
136 out->AddAxis(centID, 100, 0.0, 100.0);
138 out->AddAxis(centID, 400, 0.0, 400.0);
140 // axis W: pseudorapidity
141 // out->AddAxis(etaID, 20, -1.0, 1.0);
143 // out->AddAxis(yID, 10, -0.5, 0.5);
149 AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother%s", suffix), "SPARSE", "MOTHER");
150 outm->SetDaughter(0, AliRsnDaughter::kKaon);
151 outm->SetDaughter(1, AliRsnDaughter::kPion);
152 outm->SetMotherPDG(signedPdg);
153 outm->SetMotherMass(0.89594);
155 outm->SetPairCuts(cutsPair);
157 outm->AddAxis(imID, 90, 0.6, 1.5);
158 outm->AddAxis(ptID, 100, 0.0, 10.0);
160 outm->AddAxis(centID, 100, 0.0, 100.0);
162 outm->AddAxis(centID, 400, 0.0, 400.0);