+++ /dev/null
-//
-// 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);
-}