]>
Commit | Line | Data |
---|---|---|
00163883 | 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 | // PID cuts for all needed detectors: | |
61 | // use new implementation based on AliPIDResponse and its related task | |
62 | // requires that AliAnalysisTaskPIDResponse is added otherwise it will raise errors | |
63 | AliRsnCutPIDNSigma *cutPIDITSpion = new AliRsnCutPIDNSigma("cutPIDITSpion" , AliPID::kPion, AliRsnCutPIDNSigma::kITS, 3.0); | |
64 | AliRsnCutPIDNSigma *cutPIDTPCpion = new AliRsnCutPIDNSigma("cutPIDTPCpion" , AliPID::kPion, AliRsnCutPIDNSigma::kTPC, 3.0); | |
65 | AliRsnCutPIDNSigma *cutPIDTOFpion = new AliRsnCutPIDNSigma("cutPIDITSpion" , AliPID::kPion, AliRsnCutPIDNSigma::kTOF, 3.0); | |
66 | AliRsnCutPIDNSigma *cutPIDITSkaon = new AliRsnCutPIDNSigma("cutPIDITSkaon" , AliPID::kKaon, AliRsnCutPIDNSigma::kITS, 3.0); | |
67 | AliRsnCutPIDNSigma *cutPIDTPCkaonLo = new AliRsnCutPIDNSigma("cutPIDTPCkaonLo", AliPID::kKaon, AliRsnCutPIDNSigma::kTPC, 5.0); | |
68 | AliRsnCutPIDNSigma *cutPIDTPCkaonHi = new AliRsnCutPIDNSigma("cutPIDTPCkaonHi", AliPID::kKaon, AliRsnCutPIDNSigma::kTPC, 3.0); | |
69 | AliRsnCutPIDNSigma *cutPIDTOFkaon = new AliRsnCutPIDNSigma("cutPIDITSkaon" , AliPID::kKaon, AliRsnCutPIDNSigma::kTOF, 3.0); | |
70 | ||
71 | // ITS PID: | |
72 | // - reject unmatched tracks | |
73 | cutPIDITSpion->SetRejectUnmatched(); | |
74 | cutPIDITSkaon->SetRejectUnmatched(); | |
75 | ||
76 | // TPC PID: | |
77 | // - pions --> 3 sigma cut | |
78 | // - kaons below 350 MeV --> 5 sigma cut | |
79 | // - kaons above 350 MeV --> 3 sigma cut | |
80 | // - reject unmatched tracks | |
81 | cutPIDTPCkaonLo->SetMomentumRange(0.00, 0.35); | |
82 | cutPIDTPCkaonHi->SetMomentumRange(0.35, 1E20); | |
83 | cutPIDTPCkaonLo->SetRejectOutside(); | |
84 | cutPIDTPCkaonHi->SetRejectOutside(); | |
85 | cutPIDTPCpion ->SetRejectUnmatched(); | |
86 | cutPIDTPCkaonLo->SetRejectUnmatched(); | |
87 | cutPIDTPCkaonHi->SetRejectUnmatched(); | |
88 | ||
89 | // TOF PID: | |
90 | // must specify that unmatched tracks must be accepted | |
91 | cutPIDTOFpion->SetRejectUnmatched(kFALSE); | |
92 | cutPIDTOFkaon->SetRejectUnmatched(kFALSE); | |
93 | ||
94 | //--------------------------------------------- | |
95 | // Combine cuts | |
96 | //--------------------------------------------- | |
97 | ||
98 | // make several combinations of cuts: | |
99 | // ITS and TPC standard | |
100 | //AliRsnCutSet *cutsQualityITS = new AliRsnCutSet("qualityITS", AliRsnTarget::kDaughter); | |
101 | AliRsnCutSet *cutsQualityTPC = new AliRsnCutSet("qualityTPC", AliRsnTarget::kDaughter); | |
102 | //AliRsnCutSet *cutsPionITS = new AliRsnCutSet("pionITS" , AliRsnTarget::kDaughter); | |
103 | AliRsnCutSet *cutsPionTPC = new AliRsnCutSet("pionTPC" , AliRsnTarget::kDaughter); | |
104 | //AliRsnCutSet *cutsKaonITS = new AliRsnCutSet("kaonITS" , AliRsnTarget::kDaughter); | |
105 | AliRsnCutSet *cutsKaonTPC = new AliRsnCutSet("kaonTPC" , AliRsnTarget::kDaughter); | |
106 | ||
107 | // ITS standalone: quality only | |
108 | //cutsQualityITS->AddCut(cutQualityITS); | |
109 | //cutsQualityITS->SetCutScheme(cutQualityITS->GetName()); | |
110 | ||
111 | // TPC+ITS: quality only | |
112 | cutsQualityTPC->AddCut(cutQualityTPC); | |
113 | cutsQualityTPC->SetCutScheme(cutQualityTPC->GetName()); | |
114 | ||
115 | // ITS standalone: quality and ITS PID | |
116 | //cutsPionITS->AddCut(cutQualityITS); | |
117 | //cutsPionITS->AddCut(cutPIDITSpion); | |
118 | //cutsPionITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSpion->GetName())); | |
119 | //cutsKaonITS->AddCut(cutQualityITS); | |
120 | //cutsKaonITS->AddCut(cutPIDITSkaon); | |
121 | //cutsKaonITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSkaon->GetName())); | |
122 | ||
123 | // TPC standalone: quality and TPC PID | |
124 | cutsPionTPC->AddCut(cutQualityTPC); | |
125 | cutsPionTPC->AddCut(cutPIDTPCpion); | |
126 | cutsPionTPC->AddCut(cutPIDTOFpion); | |
127 | cutsPionTPC->SetCutScheme(Form("%s&%s&%s", cutQualityTPC->GetName(), cutPIDTPCpion->GetName(), cutPIDTOFpion->GetName())); | |
128 | ||
129 | cutsKaonTPC->AddCut(cutQualityTPC); | |
130 | cutsKaonTPC->AddCut(cutPIDTPCkaonLo); | |
131 | cutsKaonTPC->AddCut(cutPIDTPCkaonHi); | |
132 | cutsKaonTPC->AddCut(cutPIDTOFkaon); | |
133 | cutsKaonTPC->SetCutScheme(Form("%s&(%s|%s)&%s", cutQualityTPC->GetName(), cutPIDTPCkaonLo->GetName(), cutPIDTPCkaonHi->GetName(), cutPIDTOFkaon->GetName())); | |
134 | ||
135 | // setup selector in the handler and add RSN input handler | |
136 | AliRsnInputHandler *rsnIH = new AliRsnInputHandler(); | |
137 | AliRsnDaughterSelector *sel = rsnIH->GetSelector(); | |
138 | //sel->Add(cutsQualityITS, kTRUE); | |
139 | sel->Add(cutsQualityTPC, kTRUE); | |
140 | //sel->Add(cutsPionITS, kTRUE); | |
141 | sel->Add(cutsPionTPC, kTRUE); | |
142 | //sel->Add(cutsKaonITS, kTRUE); | |
143 | sel->Add(cutsKaonTPC, kTRUE); | |
144 | //sel->Add(cutsKaonAll, kTRUE); | |
145 | sel->Init(); | |
146 | multi->AddInputEventHandler(rsnIH); | |
147 | } |