ROOT logo
//
// This macro adds the specific RSN input handler, with all single particle cuts
//
void AddRsnInputHandler(Bool_t isMC, AliMultiInputEventHandler *multi)
{
   void myError  (const char *msg) {::Error  ("AddRsnInputHandler", msg);}
   void myWarning(const char *msg) {::Warning("AddRsnInputHandler", msg);}
   void myInfo   (const char *msg) {::Info   ("AddRsnInputHandler", msg);}
   
   if (!multi) {
      ::Error("AddRsnInputHandler", "Required a WELL INITIALIZED AliMultiInputEventHandler object");
      return;
   }
   
   //---------------------------------------------
   //  Define single cuts
   //---------------------------------------------

   // Track quality for ITS standalone:
   // this cut is used to select tracks of good quality, irrespective of the PID.
   // When adding status flags, the second argument tells if each considered flag
   // must be active or not in the track status, since the ITS-SA tracks need that
   // some of them are OFF (e.g.: kTPCin)
   AliRsnCutTrackQuality *cutQualityITS = new AliRsnCutTrackQuality("cutQualityITS");
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSin    , kTRUE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kTPCin    , kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSrefit , kTRUE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kTPCrefit , kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSpureSA, kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSpid   , kTRUE);
   cutQualityITS->SetPtRange(0.15, 1E+20);
   cutQualityITS->SetEtaRange(-0.8, 0.8);
   cutQualityITS->SetDCARPtFormula("0.0595+0.0182/pt^1.55");
   cutQualityITS->SetDCAZmax(2.0);
   cutQualityITS->SetSPDminNClusters(1);
   cutQualityITS->SetITSminNClusters(4);
   cutQualityITS->SetITSmaxChi2(2.0);
   cutQualityITS->SetTPCminNClusters(0);
   cutQualityITS->SetTPCmaxChi2(1E+10);
   cutQualityITS->SetRejectKinkDaughters();
      
   // Track quality for TPC+ITS:
   // works exactly like the one above, but has settings for selecting TPC+ITS tracks
   // in this case, the flags required are all necessary, so here the procedure is simpler
   AliRsnCutTrackQuality *cutQualityTPC = new AliRsnCutTrackQuality("cutQualityTPC");
   cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);
   cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
   cutQualityTPC->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
   cutQualityTPC->SetPtRange(0.15, 1E+20);
   cutQualityTPC->SetEtaRange(-0.8, 0.8);
   cutQualityTPC->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
   cutQualityTPC->SetDCAZmax(2.0);
   cutQualityTPC->SetSPDminNClusters(1);
   cutQualityTPC->SetITSminNClusters(0);
   cutQualityTPC->SetITSmaxChi2(1E+20);
   cutQualityTPC->SetTPCminNClusters(70);
   cutQualityTPC->SetTPCmaxChi2(4.0);
   cutQualityTPC->SetRejectKinkDaughters();
   
   // PID cuts for all needed detectors:
   // use new implementation based on AliPIDResponse and its related task
   // requires that AliAnalysisTaskPIDResponse is added otherwise it will raise errors
   AliRsnCutPIDNSigma *cutPIDITSpion   = new AliRsnCutPIDNSigma("cutPIDITSpion"  , AliPID::kPion, AliRsnCutPIDNSigma::kITS, 3.0);
   AliRsnCutPIDNSigma *cutPIDTPCpion   = new AliRsnCutPIDNSigma("cutPIDTPCpion"  , AliPID::kPion, AliRsnCutPIDNSigma::kTPC, 3.0);
   AliRsnCutPIDNSigma *cutPIDTOFpion   = new AliRsnCutPIDNSigma("cutPIDITSpion"  , AliPID::kPion, AliRsnCutPIDNSigma::kTOF, 3.0);
   AliRsnCutPIDNSigma *cutPIDITSkaon   = new AliRsnCutPIDNSigma("cutPIDITSkaon"  , AliPID::kKaon, AliRsnCutPIDNSigma::kITS, 3.0);
   AliRsnCutPIDNSigma *cutPIDTPCkaonLo = new AliRsnCutPIDNSigma("cutPIDTPCkaonLo", AliPID::kKaon, AliRsnCutPIDNSigma::kTPC, 5.0);
   AliRsnCutPIDNSigma *cutPIDTPCkaonHi = new AliRsnCutPIDNSigma("cutPIDTPCkaonHi", AliPID::kKaon, AliRsnCutPIDNSigma::kTPC, 3.0);
   AliRsnCutPIDNSigma *cutPIDTOFkaon   = new AliRsnCutPIDNSigma("cutPIDITSkaon"  , AliPID::kKaon, AliRsnCutPIDNSigma::kTOF, 3.0);
   
   // ITS PID:
   // - reject unmatched tracks
   cutPIDITSpion->SetRejectUnmatched();
   cutPIDITSkaon->SetRejectUnmatched();
   
   // TPC PID:
   // - pions               --> 3 sigma cut
   // - kaons below 350 MeV --> 5 sigma cut
   // - kaons above 350 MeV --> 3 sigma cut
   // - reject unmatched tracks
   cutPIDTPCkaonLo->SetMomentumRange(0.00, 0.35);
   cutPIDTPCkaonHi->SetMomentumRange(0.35, 1E20);
   cutPIDTPCkaonLo->SetRejectOutside();
   cutPIDTPCkaonHi->SetRejectOutside();
   cutPIDTPCpion  ->SetRejectUnmatched();
   cutPIDTPCkaonLo->SetRejectUnmatched();
   cutPIDTPCkaonHi->SetRejectUnmatched();
   
   // TOF PID:
   // must specify that unmatched tracks must be accepted
   cutPIDTOFpion->SetRejectUnmatched(kFALSE);
   cutPIDTOFkaon->SetRejectUnmatched(kFALSE);
   
   //---------------------------------------------
   //  Combine cuts
   //---------------------------------------------
   
   // make several combinations of cuts:
   // ITS and TPC standard
   //AliRsnCutSet *cutsQualityITS = new AliRsnCutSet("qualityITS", AliRsnTarget::kDaughter);
   AliRsnCutSet *cutsQualityTPC = new AliRsnCutSet("qualityTPC", AliRsnTarget::kDaughter);
   //AliRsnCutSet *cutsPionITS    = new AliRsnCutSet("pionITS"   , AliRsnTarget::kDaughter);
   AliRsnCutSet *cutsPionTPC    = new AliRsnCutSet("pionTPC"   , AliRsnTarget::kDaughter);
   //AliRsnCutSet *cutsKaonITS    = new AliRsnCutSet("kaonITS"   , AliRsnTarget::kDaughter);
   AliRsnCutSet *cutsKaonTPC    = new AliRsnCutSet("kaonTPC"   , AliRsnTarget::kDaughter);
   
   // ITS standalone: quality only
   //cutsQualityITS->AddCut(cutQualityITS);
   //cutsQualityITS->SetCutScheme(cutQualityITS->GetName());
   
   // TPC+ITS: quality only
   cutsQualityTPC->AddCut(cutQualityTPC);
   cutsQualityTPC->SetCutScheme(cutQualityTPC->GetName());
   
   // ITS standalone: quality and ITS PID
   //cutsPionITS->AddCut(cutQualityITS);
   //cutsPionITS->AddCut(cutPIDITSpion);
   //cutsPionITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSpion->GetName()));
   //cutsKaonITS->AddCut(cutQualityITS);
   //cutsKaonITS->AddCut(cutPIDITSkaon);
   //cutsKaonITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSkaon->GetName()));
   
   // TPC standalone: quality and TPC PID
   cutsPionTPC->AddCut(cutQualityTPC);
   cutsPionTPC->AddCut(cutPIDTPCpion);
   cutsPionTPC->AddCut(cutPIDTOFpion);
   cutsPionTPC->SetCutScheme(Form("%s&%s&%s", cutQualityTPC->GetName(), cutPIDTPCpion->GetName(), cutPIDTOFpion->GetName()));
   
   cutsKaonTPC->AddCut(cutQualityTPC);
   cutsKaonTPC->AddCut(cutPIDTPCkaonLo);
   cutsKaonTPC->AddCut(cutPIDTPCkaonHi);
   cutsKaonTPC->AddCut(cutPIDTOFkaon);
   cutsKaonTPC->SetCutScheme(Form("%s&(%s|%s)&%s", cutQualityTPC->GetName(), cutPIDTPCkaonLo->GetName(), cutPIDTPCkaonHi->GetName(), cutPIDTOFkaon->GetName()));
   
   // setup selector in the handler and add RSN input handler
   AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
   AliRsnDaughterSelector *sel = rsnIH->GetSelector();
   //sel->Add(cutsQualityITS, kTRUE);
   sel->Add(cutsQualityTPC, kTRUE);
   //sel->Add(cutsPionITS, kTRUE);
   sel->Add(cutsPionTPC, kTRUE);
   //sel->Add(cutsKaonITS, kTRUE);
   sel->Add(cutsKaonTPC, kTRUE);
   //sel->Add(cutsKaonAll, kTRUE);
   sel->Init();
   multi->AddInputEventHandler(rsnIH);
}
 AddRsnInputHandlerNew.C:1
 AddRsnInputHandlerNew.C:2
 AddRsnInputHandlerNew.C:3
 AddRsnInputHandlerNew.C:4
 AddRsnInputHandlerNew.C:5
 AddRsnInputHandlerNew.C:6
 AddRsnInputHandlerNew.C:7
 AddRsnInputHandlerNew.C:8
 AddRsnInputHandlerNew.C:9
 AddRsnInputHandlerNew.C:10
 AddRsnInputHandlerNew.C:11
 AddRsnInputHandlerNew.C:12
 AddRsnInputHandlerNew.C:13
 AddRsnInputHandlerNew.C:14
 AddRsnInputHandlerNew.C:15
 AddRsnInputHandlerNew.C:16
 AddRsnInputHandlerNew.C:17
 AddRsnInputHandlerNew.C:18
 AddRsnInputHandlerNew.C:19
 AddRsnInputHandlerNew.C:20
 AddRsnInputHandlerNew.C:21
 AddRsnInputHandlerNew.C:22
 AddRsnInputHandlerNew.C:23
 AddRsnInputHandlerNew.C:24
 AddRsnInputHandlerNew.C:25
 AddRsnInputHandlerNew.C:26
 AddRsnInputHandlerNew.C:27
 AddRsnInputHandlerNew.C:28
 AddRsnInputHandlerNew.C:29
 AddRsnInputHandlerNew.C:30
 AddRsnInputHandlerNew.C:31
 AddRsnInputHandlerNew.C:32
 AddRsnInputHandlerNew.C:33
 AddRsnInputHandlerNew.C:34
 AddRsnInputHandlerNew.C:35
 AddRsnInputHandlerNew.C:36
 AddRsnInputHandlerNew.C:37
 AddRsnInputHandlerNew.C:38
 AddRsnInputHandlerNew.C:39
 AddRsnInputHandlerNew.C:40
 AddRsnInputHandlerNew.C:41
 AddRsnInputHandlerNew.C:42
 AddRsnInputHandlerNew.C:43
 AddRsnInputHandlerNew.C:44
 AddRsnInputHandlerNew.C:45
 AddRsnInputHandlerNew.C:46
 AddRsnInputHandlerNew.C:47
 AddRsnInputHandlerNew.C:48
 AddRsnInputHandlerNew.C:49
 AddRsnInputHandlerNew.C:50
 AddRsnInputHandlerNew.C:51
 AddRsnInputHandlerNew.C:52
 AddRsnInputHandlerNew.C:53
 AddRsnInputHandlerNew.C:54
 AddRsnInputHandlerNew.C:55
 AddRsnInputHandlerNew.C:56
 AddRsnInputHandlerNew.C:57
 AddRsnInputHandlerNew.C:58
 AddRsnInputHandlerNew.C:59
 AddRsnInputHandlerNew.C:60
 AddRsnInputHandlerNew.C:61
 AddRsnInputHandlerNew.C:62
 AddRsnInputHandlerNew.C:63
 AddRsnInputHandlerNew.C:64
 AddRsnInputHandlerNew.C:65
 AddRsnInputHandlerNew.C:66
 AddRsnInputHandlerNew.C:67
 AddRsnInputHandlerNew.C:68
 AddRsnInputHandlerNew.C:69
 AddRsnInputHandlerNew.C:70
 AddRsnInputHandlerNew.C:71
 AddRsnInputHandlerNew.C:72
 AddRsnInputHandlerNew.C:73
 AddRsnInputHandlerNew.C:74
 AddRsnInputHandlerNew.C:75
 AddRsnInputHandlerNew.C:76
 AddRsnInputHandlerNew.C:77
 AddRsnInputHandlerNew.C:78
 AddRsnInputHandlerNew.C:79
 AddRsnInputHandlerNew.C:80
 AddRsnInputHandlerNew.C:81
 AddRsnInputHandlerNew.C:82
 AddRsnInputHandlerNew.C:83
 AddRsnInputHandlerNew.C:84
 AddRsnInputHandlerNew.C:85
 AddRsnInputHandlerNew.C:86
 AddRsnInputHandlerNew.C:87
 AddRsnInputHandlerNew.C:88
 AddRsnInputHandlerNew.C:89
 AddRsnInputHandlerNew.C:90
 AddRsnInputHandlerNew.C:91
 AddRsnInputHandlerNew.C:92
 AddRsnInputHandlerNew.C:93
 AddRsnInputHandlerNew.C:94
 AddRsnInputHandlerNew.C:95
 AddRsnInputHandlerNew.C:96
 AddRsnInputHandlerNew.C:97
 AddRsnInputHandlerNew.C:98
 AddRsnInputHandlerNew.C:99
 AddRsnInputHandlerNew.C:100
 AddRsnInputHandlerNew.C:101
 AddRsnInputHandlerNew.C:102
 AddRsnInputHandlerNew.C:103
 AddRsnInputHandlerNew.C:104
 AddRsnInputHandlerNew.C:105
 AddRsnInputHandlerNew.C:106
 AddRsnInputHandlerNew.C:107
 AddRsnInputHandlerNew.C:108
 AddRsnInputHandlerNew.C:109
 AddRsnInputHandlerNew.C:110
 AddRsnInputHandlerNew.C:111
 AddRsnInputHandlerNew.C:112
 AddRsnInputHandlerNew.C:113
 AddRsnInputHandlerNew.C:114
 AddRsnInputHandlerNew.C:115
 AddRsnInputHandlerNew.C:116
 AddRsnInputHandlerNew.C:117
 AddRsnInputHandlerNew.C:118
 AddRsnInputHandlerNew.C:119
 AddRsnInputHandlerNew.C:120
 AddRsnInputHandlerNew.C:121
 AddRsnInputHandlerNew.C:122
 AddRsnInputHandlerNew.C:123
 AddRsnInputHandlerNew.C:124
 AddRsnInputHandlerNew.C:125
 AddRsnInputHandlerNew.C:126
 AddRsnInputHandlerNew.C:127
 AddRsnInputHandlerNew.C:128
 AddRsnInputHandlerNew.C:129
 AddRsnInputHandlerNew.C:130
 AddRsnInputHandlerNew.C:131
 AddRsnInputHandlerNew.C:132
 AddRsnInputHandlerNew.C:133
 AddRsnInputHandlerNew.C:134
 AddRsnInputHandlerNew.C:135
 AddRsnInputHandlerNew.C:136
 AddRsnInputHandlerNew.C:137
 AddRsnInputHandlerNew.C:138
 AddRsnInputHandlerNew.C:139
 AddRsnInputHandlerNew.C:140
 AddRsnInputHandlerNew.C:141
 AddRsnInputHandlerNew.C:142
 AddRsnInputHandlerNew.C:143
 AddRsnInputHandlerNew.C:144
 AddRsnInputHandlerNew.C:145
 AddRsnInputHandlerNew.C:146
 AddRsnInputHandlerNew.C:147
 AddRsnInputHandlerNew.C:148