]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/macros/train/AddRsnInputHandler.C
Add new version of macros for RSN analysis
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / macros / train / AddRsnInputHandler.C
1 //
2 // This macro adds the specific RSN input handler, with all single particle cuts
3 //
4 void AddRsnInputHandler(Bool_t isMC, AliMultiInputEventHandler *multi)
5 {
6    void myError  (const char *msg) {::Error  ("AddRsnInputHandler", msg);}
7    void myWarning(const char *msg) {::Warning("AddRsnInputHandler", msg);}
8    void myInfo   (const char *msg) {::Info   ("AddRsnInputHandler", msg);}
9    
10    if (!multi) {
11       ::Error("AddRsnInputHandler", "Required a WELL INITIALIZED AliMultiInputEventHandler object");
12       return;
13    }
14    
15    //---------------------------------------------
16    //  Define single cuts
17    //---------------------------------------------
18
19    // Track quality for ITS standalone:
20    // this cut is used to select tracks of good quality, irrespective of the PID.
21    // When adding status flags, the second argument tells if each considered flag
22    // must be active or not in the track status, since the ITS-SA tracks need that
23    // some of them are OFF (e.g.: kTPCin)
24    AliRsnCutTrackQuality *cutQualityITS = new AliRsnCutTrackQuality("cutQualityITS");
25    cutQualityITS->AddStatusFlag(AliESDtrack::kITSin    , kTRUE);
26    cutQualityITS->AddStatusFlag(AliESDtrack::kTPCin    , kFALSE);
27    cutQualityITS->AddStatusFlag(AliESDtrack::kITSrefit , kTRUE);
28    cutQualityITS->AddStatusFlag(AliESDtrack::kTPCrefit , kFALSE);
29    cutQualityITS->AddStatusFlag(AliESDtrack::kITSpureSA, kFALSE);
30    cutQualityITS->AddStatusFlag(AliESDtrack::kITSpid   , kTRUE);
31    cutQualityITS->SetPtRange(0.15, 1E+20);
32    cutQualityITS->SetEtaRange(-0.8, 0.8);
33    cutQualityITS->SetDCARPtFormula("0.0595+0.0182/pt^1.55");
34    cutQualityITS->SetDCAZmax(2.0);
35    cutQualityITS->SetSPDminNClusters(1);
36    cutQualityITS->SetITSminNClusters(4);
37    cutQualityITS->SetITSmaxChi2(2.0);
38    cutQualityITS->SetTPCminNClusters(0);
39    cutQualityITS->SetTPCmaxChi2(1E+10);
40    cutQualityITS->SetRejectKinkDaughters();
41       
42    // Track quality for TPC+ITS:
43    // works exactly like the one above, but has settings for selecting TPC+ITS tracks
44    // in this case, the flags required are all necessary, so here the procedure is simpler
45    AliRsnCutTrackQuality *cutQualityTPC = new AliRsnCutTrackQuality("cutQualityTPC");
46    cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);
47    cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
48    cutQualityTPC->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
49    cutQualityTPC->SetPtRange(0.15, 1E+20);
50    cutQualityTPC->SetEtaRange(-0.8, 0.8);
51    cutQualityTPC->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
52    cutQualityTPC->SetDCAZmax(2.0);
53    cutQualityTPC->SetSPDminNClusters(1);
54    cutQualityTPC->SetITSminNClusters(0);
55    cutQualityTPC->SetITSmaxChi2(1E+20);
56    cutQualityTPC->SetTPCminNClusters(70);
57    cutQualityTPC->SetTPCmaxChi2(4.0);
58    cutQualityTPC->SetRejectKinkDaughters();
59    
60    // ITS PID
61    // -- pions: 3sigma dE/dx cut
62    // -- kaons: 3sigma dE/dx cut
63    //
64    // NOTE:
65    // --> need to know if running on MC or data (for initializing the BB)
66    AliRsnCutPIDITS *cutPIDITSpion = new AliRsnCutPIDITS("cutPIDITSpion", AliPID::kPion, -3.0, 3.0);
67    AliRsnCutPIDITS *cutPIDITSkaon = new AliRsnCutPIDITS("cutPIDITSkaon", AliPID::kKaon, -3.0, 3.0);
68    cutPIDITSpion->SetMC(isMC);
69    cutPIDITSkaon->SetMC(isMC);
70    
71    // TPC PID
72    // -- pions: 3sigma dE/dx cut
73    // -- kaons: 3(5)sigma dE/dx cut for p_TPC above(below) 350 MeV/c
74    //
75    // NOTE:
76    // --> The initialization of the BB is different between data and MC.
77    AliRsnCutPIDTPC *cutPIDTPCpion  = new AliRsnCutPIDTPC("cutPIDTPCpion" , AliPID::kPion, -3.0, 3.0);
78    AliRsnCutPIDTPC *cutPIDTPCkaonL = new AliRsnCutPIDTPC("cutPIDTPCkaonL", AliPID::kKaon, -5.0, 5.0);
79    AliRsnCutPIDTPC *cutPIDTPCkaonH = new AliRsnCutPIDTPC("cutPIDTPCkaonH", AliPID::kKaon, -3.0, 3.0);
80    
81    // assign the momentum range and tell to reject tracks outside it
82    cutPIDTPCkaonL->SetMomentumRange(0.00, 0.35);
83    cutPIDTPCkaonH->SetMomentumRange(0.35, 1E20);
84    cutPIDTPCkaonL->SetRejectOutside(kTRUE);
85    cutPIDTPCkaonH->SetRejectOutside(kTRUE);
86    
87    // BB parameterization depends on data sample (MC, data)
88    // the momentum range is passed and tracks outside it are rejected
89    Double_t bbPar[5];
90    if (isMC) {
91       bbPar[0] = 2.15898 / 50.0;
92       bbPar[1] = 1.75295E1;
93       bbPar[2] = 3.40030E-9;
94       bbPar[3] = 1.96178;
95       bbPar[4] = 3.91720;
96    } else {
97       bbPar[0] = 1.41543 / 50.0;
98       bbPar[1] = 2.63394E1;
99       bbPar[2] = 5.0411E-11;
100       bbPar[3] = 2.12543;
101       bbPar[4] = 4.88663;
102    }
103    cutPIDTPCpion ->SetBBParam(bbPar);
104    cutPIDTPCkaonL->SetBBParam(bbPar);
105    cutPIDTPCkaonH->SetBBParam(bbPar);
106    
107    // TOF PID
108    // -- pions: 3sigma cut
109    // -- kaons: 3sigma cut
110    //
111    // NOTE:
112    // --> since we use also TPC, unmatched tracks are accepted
113    AliRsnCutPIDTOF *cutPIDTOFpion = new AliRsnCutPIDTOF("cutPIDTOFpion", AliPID::kPion, -3.0, 3.0);
114    AliRsnCutPIDTOF *cutPIDTOFkaon = new AliRsnCutPIDTOF("cutPIDTOFkaon", AliPID::kKaon, -3.0, 3.0);
115    cutPIDTOFpion->SetRejectUnmatched(kFALSE);
116    cutPIDTOFkaon->SetRejectUnmatched(kFALSE);
117    
118    //---------------------------------------------
119    //  Combine cuts
120    //---------------------------------------------
121    
122    // make several combinations of cuts:
123    // ITS and TPC standard
124    AliRsnCutSet *cutsQualityITS = new AliRsnCutSet("qualityITS", AliRsnTarget::kDaughter);
125    AliRsnCutSet *cutsQualityTPC = new AliRsnCutSet("qualityTPC", AliRsnTarget::kDaughter);
126    AliRsnCutSet *cutsPionITS    = new AliRsnCutSet("pionITS"   , AliRsnTarget::kDaughter);
127    AliRsnCutSet *cutsPionTPC    = new AliRsnCutSet("pionTPC"   , AliRsnTarget::kDaughter);
128    AliRsnCutSet *cutsPionAll    = new AliRsnCutSet("pionAll"   , AliRsnTarget::kDaughter);
129    AliRsnCutSet *cutsKaonITS    = new AliRsnCutSet("kaonITS"   , AliRsnTarget::kDaughter);
130    AliRsnCutSet *cutsKaonTPC    = new AliRsnCutSet("kaonTPC"   , AliRsnTarget::kDaughter);
131    AliRsnCutSet *cutsKaonAll    = new AliRsnCutSet("kaonAll"   , AliRsnTarget::kDaughter);
132    
133    // ITS standalone: quality only
134    cutsQualityITS->AddCut(cutQualityITS);
135    cutsQualityITS->SetCutScheme(cutQualityITS->GetName());
136    
137    // TPC+ITS: quality only
138    cutsQualityTPC->AddCut(cutQualityTPC);
139    cutsQualityTPC->SetCutScheme(cutQualityTPC->GetName());
140    
141    // ITS standalone: quality and ITS PID (pions)
142    cutsPionITS->AddCut(cutQualityITS);
143    cutsPionITS->AddCut(cutPIDITSpion);
144    cutsPionITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSpion->GetName()));
145    
146    // ITS standalone: quality and ITS PID (kaons)
147    cutsKaonITS->AddCut(cutQualityITS);
148    cutsKaonITS->AddCut(cutPIDITSkaon);
149    cutsKaonITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSkaon->GetName()));
150    
151    // TPC standalone: quality and TPC + TOF PID (pions)
152    cutsPionTPC->AddCut(cutQualityTPC);
153    cutsPionTPC->AddCut(cutPIDTPCpion);
154    cutsPionTPC->AddCut(cutPIDTOFpion);
155    cutsPionTPC->SetCutScheme(Form("%s & %s & %s", cutQualityTPC->GetName(), cutPIDTPCpion->GetName(), cutPIDTOFpion->GetName()));
156    
157    // TPC standalone: quality and TPC + TOF PID (kaons)
158    cutsKaonTPC->AddCut(cutQualityTPC);
159    cutsKaonTPC->AddCut(cutPIDTPCkaonL);
160    cutsKaonTPC->AddCut(cutPIDTPCkaonH);
161    cutsKaonTPC->AddCut(cutPIDTOFkaon);
162    cutsKaonTPC->SetCutScheme(Form("%s & (%s|%s) & %s", cutQualityTPC->GetName(), cutPIDTPCkaonL->GetName(), cutPIDTPCkaonH->GetName(), cutPIDTOFkaon->GetName()));
163    
164    // all tracks: both qualities and PIDs (pion)
165    cutsPionAll->AddCut(cutQualityITS);
166    cutsPionAll->AddCut(cutQualityTPC);
167    cutsPionAll->AddCut(cutPIDITSpion);
168    cutsPionAll->AddCut(cutPIDTPCpion);
169    cutsPionAll->AddCut(cutPIDTOFpion);
170    cutsPionAll->SetCutScheme(Form("(%s)|(%s)", cutsKaonITS->GetCutScheme().Data(), cutsKaonTPC->GetCutScheme().Data()));
171    
172    // all tracks: both qualities and PIDs (kaon)
173    cutsKaonAll->AddCut(cutQualityITS);
174    cutsKaonAll->AddCut(cutQualityTPC);
175    cutsKaonAll->AddCut(cutPIDITSkaon);
176    cutsKaonAll->AddCut(cutPIDTPCkaonL);
177    cutsKaonAll->AddCut(cutPIDTPCkaonH);
178    cutsKaonAll->AddCut(cutPIDTOFkaon);
179    cutsKaonAll->SetCutScheme(Form("(%s)|(%s)", cutsKaonITS->GetCutScheme().Data(), cutsKaonTPC->GetCutScheme().Data()));
180    
181    // setup selector in the handler and add RSN input handler
182    AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
183    AliRsnDaughterSelector *sel = rsnIH->GetSelector();
184 // sel->Add(cutsQualityITS, kTRUE);
185    sel->Add(cutsQualityTPC, kTRUE);
186 // sel->Add(cutsPionITS   , kTRUE);
187 // sel->Add(cutsPionTPC   , kTRUE);
188 // sel->Add(cutsPionAll   , kTRUE);
189 // sel->Add(cutsKaonITS   , kTRUE);
190    sel->Add(cutsKaonTPC   , kTRUE);
191 // sel->Add(cutsKaonAll   , kTRUE);
192    sel->Init();
193    multi->AddInputEventHandler(rsnIH);
194 }