Skip to content

Commit 570cb39

Browse files
committed
Add triton femto trigger
1 parent 0474745 commit 570cb39

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

EventFiltering/PWGLF/nucleiFilter.cxx

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include <cmath>
1414
#include <string>
1515

16+
#include "Math/Vector4D.h"
17+
#include "Math/GenVector/Boost.h"
1618
#include "Common/DataModel/EventSelection.h"
1719
#include "Common/DataModel/PIDResponse.h"
1820
#include "Common/DataModel/TrackSelectionTables.h"
@@ -56,7 +58,7 @@ static constexpr std::array<int, nNuclei> charges{1, 1, 2};
5658
static const std::vector<std::string> matterOrNot{"Matter", "Antimatter"};
5759
static const std::vector<std::string> nucleiNames{"H2", "H3", "Helium"};
5860
static const std::vector<std::string> hypernucleiNames{"H3L"}; // 3-body decay case
59-
static const std::vector<std::string> columnsNames{o2::aod::filtering::H2::columnLabel(), o2::aod::filtering::He::columnLabel(), o2::aod::filtering::HeV0::columnLabel(), o2::aod::filtering::H3L3Body::columnLabel(), o2::aod::filtering::Tracked3Body::columnLabel(), o2::aod::filtering::ITSmildIonisation::columnLabel(), o2::aod::filtering::ITSextremeIonisation::columnLabel()};
61+
static const std::vector<std::string> columnsNames{o2::aod::filtering::H2::columnLabel(), o2::aod::filtering::He::columnLabel(), o2::aod::filtering::HeV0::columnLabel(), o2::aod::filtering::TritonFemto::columnLabel(), o2::aod::filtering::H3L3Body::columnLabel(), o2::aod::filtering::Tracked3Body::columnLabel(), o2::aod::filtering::ITSmildIonisation::columnLabel(), o2::aod::filtering::ITSextremeIonisation::columnLabel()};
6062
static const std::vector<std::string> cutsNames{
6163
"TPCnSigmaMin", "TPCnSigmaMax", "TOFnSigmaMin", "TOFnSigmaMax", "TOFpidStartPt"};
6264
constexpr double betheBlochDefault[nNuclei][6]{
@@ -99,6 +101,7 @@ struct nucleiFilter {
99101
Configurable<float> cfgCutNclusTPC{"cfgCutNclusTPC", 80, "Minimum number of TPC clusters"};
100102
Configurable<float> cfgCutDCAxy{"cfgCutDCAxy", 3, "Max DCAxy"};
101103
Configurable<float> cfgCutDCAz{"cfgCutDCAz", 10, "Max DCAz"};
104+
Configurable<float> cfgCutKstar{"cfgCutKstar", 1.f, "Kstar cut for triton femto trigger"};
102105

103106
Configurable<LabeledArray<double>> cfgBetheBlochParams{"cfgBetheBlochParams", {betheBlochDefault[0], nNuclei, 6, nucleiNames, betheBlochParNames}, "TPC Bethe-Bloch parameterisation for light nuclei"};
104107
Configurable<LabeledArray<double>> cfgMomentumScalingBetheBloch{"cfgMomentumScalingBetheBloch", {bbMomScalingDefault[0], nNuclei, 2, nucleiNames, matterOrNot}, "TPC Bethe-Bloch momentum scaling for light nuclei"};
@@ -316,6 +319,7 @@ struct nucleiFilter {
316319
kH2 = 0,
317320
kHe,
318321
kHeV0,
322+
kTritonFemto,
319323
kH3L3Body,
320324
kTracked3Body,
321325
kITSmildIonisation,
@@ -333,7 +337,7 @@ struct nucleiFilter {
333337
hProcessedEvents->Fill(0);
334338
//
335339
if (!collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) {
336-
tags(keepEvent[kH2], keepEvent[kHe], keepEvent[kHeV0], keepEvent[kH3L3Body], keepEvent[kTracked3Body], keepEvent[kITSmildIonisation], keepEvent[kITSextremeIonisation]);
340+
tags(keepEvent[kH2], keepEvent[kHe], keepEvent[kHeV0], keepEvent[kTritonFemto], keepEvent[kH3L3Body], keepEvent[kTracked3Body], keepEvent[kITSmildIonisation], keepEvent[kITSextremeIonisation]);
337341
return;
338342
}
339343

@@ -344,7 +348,8 @@ struct nucleiFilter {
344348
{charges[2] * cfgMomentumScalingBetheBloch->get(2u, 0u) / masses[2], charges[2] * cfgMomentumScalingBetheBloch->get(2u, 1u) / masses[2]}};
345349

346350
constexpr int nucleusIndex[nNuclei]{kH2, -1, kHe}; /// remap for nuclei triggers
347-
std::vector<int> he3indices;
351+
std::vector<int> h3indices, he3indices;
352+
std::vector<ROOT::Math::PtEtaPhiMVector> h3vectors;
348353
for (auto& track : tracks) { // start loop over tracks
349354
if (track.itsNCls() >= cfgCutNclusExtremeIonisationITS) {
350355
double avgClsSize{0.};
@@ -398,15 +403,44 @@ struct nucleiFilter {
398403
if (track.p() > cfgCutsPID->get(iN, 4u) && (nSigmaTOF[iN] < cfgCutsPID->get(iN, 2u) || nSigmaTOF[iN] > cfgCutsPID->get(iN, 3u))) {
399404
continue;
400405
}
406+
if (iN == 1 && passesDCAselection) {
407+
h3indices.push_back(track.globalIndex());
408+
h3vectors.emplace_back(track.pt(), track.eta(), track.phi(), masses[iN]);
409+
}
410+
if (iN == 2) {
411+
he3indices.push_back(track.globalIndex());
412+
}
401413
if (nucleusIndex[iN] < 0) {
402414
continue;
403415
}
404416
keepEvent[nucleusIndex[iN]] = passesDCAselection;
405417
if (keepEvent[nucleusIndex[iN]]) {
406418
h2TPCsignal[iN]->Fill(track.sign() * track.tpcInnerParam() * fixTPCrigidity, track.tpcSignal());
407419
}
408-
if (iN == 2) {
409-
he3indices.push_back(track.globalIndex());
420+
}
421+
422+
for (const auto& track : tracks) {
423+
if (track.itsNCls() < cfgCutNclusITS ||
424+
track.tpcNClsFound() < cfgCutNclusTPC ||
425+
std::abs(track.dcaXY()) > cfgCutDCAxy ||
426+
std::abs(track.dcaZ()) > cfgCutDCAz ||
427+
std::abs(track.eta()) > 0.9) {
428+
continue;
429+
}
430+
const ROOT::Math::PtEtaPhiMVector trackVector(track.pt(), track.eta(), track.phi(), constants::physics::MassPiMinus);
431+
for (size_t iH3{0}; iH3 < h3vectors.size(); ++iH3) {
432+
if (h3indices[iH3] == track.globalIndex()) {
433+
continue;
434+
}
435+
const auto& h3vector = h3vectors[iH3];
436+
auto pivector = trackVector;
437+
auto cm = h3vector + trackVector;
438+
const ROOT::Math::Boost boost(cm.BoostToCM());
439+
boost(pivector);
440+
if (pivector.P() < cfgCutKstar) {
441+
keepEvent[kTritonFemto] = true;
442+
break;
443+
}
410444
}
411445
}
412446

@@ -582,7 +616,7 @@ struct nucleiFilter {
582616
}
583617
}
584618

585-
tags(keepEvent[kH2], keepEvent[kHe], keepEvent[kHeV0], keepEvent[kH3L3Body], keepEvent[kTracked3Body], keepEvent[kITSmildIonisation], keepEvent[kITSextremeIonisation]);
619+
tags(keepEvent[kH2], keepEvent[kHe], keepEvent[kHeV0], keepEvent[kTritonFemto], keepEvent[kH3L3Body], keepEvent[kTracked3Body], keepEvent[kITSmildIonisation], keepEvent[kITSextremeIonisation]);
586620
}
587621
};
588622

EventFiltering/filterTables.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ namespace filtering
4949
DECLARE_SOA_COLUMN(H2, hasH2, bool); //! deuteron trigger for the helium normalisation (to be downscaled)
5050
DECLARE_SOA_COLUMN(He, hasHe, bool); //! helium
5151
DECLARE_SOA_COLUMN(HeV0, hasHeV0, bool); //! V0 containing a V0
52+
DECLARE_SOA_COLUMN(TritonFemto, hasTritonFemto, bool); //! Triton hadron femtoscopy
5253
DECLARE_SOA_COLUMN(H3L3Body, hasH3L3Body, bool); //! hypertriton 3body
5354
DECLARE_SOA_COLUMN(ITSextremeIonisation, hasITSextremeIonisation, bool); //! ITS extreme ionisation
5455
DECLARE_SOA_COLUMN(ITSmildIonisation, hasITSmildIonisation, bool); //! ITS mild ionisation (normalisation of the extreme ionisation), to be downscaled
@@ -216,7 +217,7 @@ DECLARE_SOA_COLUMN(BCend, hasBCend, uint64_t); //! CEFP bcrange
216217

217218
// nuclei
218219
DECLARE_SOA_TABLE(NucleiFilters, "AOD", "NucleiFilters", //!
219-
filtering::H2, filtering::He, filtering::HeV0, filtering::H3L3Body, filtering::Tracked3Body, filtering::ITSmildIonisation,
220+
filtering::H2, filtering::He, filtering::HeV0, filtering::TritonFemto, filtering::H3L3Body, filtering::Tracked3Body, filtering::ITSmildIonisation,
220221
filtering::ITSextremeIonisation);
221222
using NucleiFilter = NucleiFilters::iterator;
222223

0 commit comments

Comments
 (0)