]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/macros/train/AddRsnInputHandlerNew.C
PWG2/SPECTRA -> PWGLF/SPECTRA migration
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / macros / train / AddRsnInputHandlerNew.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    // 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 }