]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/macros/train/AddRsnInputHandlerNew.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / train / AddRsnInputHandlerNew.C
CommitLineData
00163883 1//
2// This macro adds the specific RSN input handler, with all single particle cuts
3//
4void 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}