Skip to content

Commit 6aa5780

Browse files
authored
[Common/EventSelection,DPG] adding kNoHighMultCollInPrevRof event selection bit (#8652)
1 parent db1b2ee commit 6aa5780

File tree

4 files changed

+81
-35
lines changed

4 files changed

+81
-35
lines changed

Common/CCDB/EventSelectionParams.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ const char* selectionLabels[kNsel] = {
6060
"kNoCollInTimeRangeStandard",
6161
"kNoCollInTimeRangeVzDependent",
6262
"kNoCollInRofStrict",
63-
"kNoCollInRofStandard"};
63+
"kNoCollInRofStandard",
64+
"kNoHighMultCollInPrevRof"};
6465
} // namespace o2::aod::evsel
6566

6667
using namespace o2::aod::evsel;

Common/CCDB/EventSelectionParams.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ enum EventSelectionFlags {
6666
kNoCollInTimeRangeVzDependent, // no other collisions in vZ-dependent time range near a given collision
6767
kNoCollInRofStrict, // no other collisions in this Readout Frame
6868
kNoCollInRofStandard, // no other collisions in this Readout Frame with per-collision multiplicity above threshold
69+
kNoHighMultCollInPrevRof, // veto an event if FT0C amplitude in previous ITS ROF is above threshold
6970
kNsel // counter
7071
};
7172

Common/TableProducer/eventSelection.cxx

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// In applying this license CERN does not waive the privileges and immunities
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
11+
#include <vector>
12+
#include <map>
1113

1214
#include "Framework/ConfigParamSpec.h"
1315
#include "Framework/runDataProcessing.h"
@@ -624,7 +626,7 @@ struct EventSelectionTask {
624626
}
625627
PROCESS_SWITCH(EventSelectionTask, processRun2, "Process Run2 event selection", true);
626628

627-
Partition<FullTracksIU> pvTracks = ((aod::track::flags & (uint32_t)o2::aod::track::PVContributor) == (uint32_t)o2::aod::track::PVContributor);
629+
Partition<FullTracksIU> pvTracks = ((aod::track::flags & static_cast<uint32_t>(o2::aod::track::PVContributor)) == static_cast<uint32_t>(o2::aod::track::PVContributor));
628630
void processRun3(aod::Collisions const& cols, FullTracksIU const&, BCsWithBcSelsRun3 const& bcs, aod::FT0s const&)
629631
{
630632
int run = bcs.iteratorAt(0).runNumber();
@@ -821,8 +823,9 @@ struct EventSelectionTask {
821823
}
822824

823825
// save indices of collisions for occupancy calculation (both in ROF and in time range)
824-
std::vector<std::vector<int>> vCollsInTimeWin;
825826
std::vector<std::vector<int>> vCollsInSameITSROF;
827+
std::vector<std::vector<int>> vCollsInPrevITSROF;
828+
std::vector<std::vector<int>> vCollsInTimeWin;
826829
std::vector<std::vector<float>> vTimeDeltaForColls; // delta time wrt a given collision
827830
for (auto& col : cols) {
828831
int32_t colIndex = col.globalIndex();
@@ -835,7 +838,7 @@ struct EventSelectionTask {
835838
int64_t rofId = (foundGlobalBC + 3564 - rofOffset) / rofLength;
836839

837840
// ### for in-ROF occupancy
838-
std::vector<int> vAssocToSameROF;
841+
std::vector<int> vAssocCollInSameROF;
839842
// find all collisions in the same ROF before a given collision
840843
int32_t minColIndex = colIndex - 1;
841844
while (minColIndex >= 0) {
@@ -850,7 +853,7 @@ struct EventSelectionTask {
850853
// check if we are within the same ROF
851854
if (thisRofId != rofId)
852855
break;
853-
vAssocToSameROF.push_back(minColIndex);
856+
vAssocCollInSameROF.push_back(minColIndex);
854857
minColIndex--;
855858
}
856859
// find all collisions in the same ROF after the current one
@@ -860,14 +863,31 @@ struct EventSelectionTask {
860863
int64_t thisTFid = (thisBC - bcSOR) / nBCsPerTF;
861864
if (thisTFid != TFid)
862865
break;
863-
// int thisRofIdInTF = (thisBC - rofOffset) / rofLength;
864866
int64_t thisRofId = (thisBC + 3564 - rofOffset) / rofLength;
865867
if (thisRofId != rofId)
866868
break;
867-
vAssocToSameROF.push_back(maxColIndex);
869+
vAssocCollInSameROF.push_back(maxColIndex);
868870
maxColIndex++;
869871
}
870-
vCollsInSameITSROF.push_back(vAssocToSameROF);
872+
vCollsInSameITSROF.push_back(vAssocCollInSameROF);
873+
874+
// ### bookkeep collisions in previous ROF
875+
std::vector<int> vAssocCollInPrevROF;
876+
minColIndex = colIndex - 1;
877+
while (minColIndex >= 0) {
878+
int64_t thisBC = vFoundGlobalBC[minColIndex];
879+
// check if this is still the same TF
880+
int64_t thisTFid = (thisBC - bcSOR) / nBCsPerTF;
881+
if (thisTFid != TFid)
882+
break;
883+
int64_t thisRofId = (thisBC + 3564 - rofOffset) / rofLength;
884+
if (thisRofId == rofId - 1)
885+
vAssocCollInPrevROF.push_back(minColIndex);
886+
else if (thisRofId < rofId - 1)
887+
break;
888+
minColIndex--;
889+
}
890+
vCollsInPrevITSROF.push_back(vAssocCollInPrevROF);
871891

872892
// ### for occupancy in time windows
873893
std::vector<int> vAssocToThisCol;
@@ -924,29 +944,40 @@ struct EventSelectionTask {
924944
std::vector<bool> vNoCollInSameRofStrict(cols.size(), 0); // to veto events with other collisions in the same ITS ROF
925945
std::vector<bool> vNoCollInSameRofStandard(cols.size(), 0); // to veto events with other collisions in the same ITS ROF, with per-collision multiplicity above threshold
926946
std::vector<bool> vNoCollInSameRofWithCloseVz(cols.size(), 0); // to veto events with nearby collisions with close vZ
947+
std::vector<bool> vNoHighMultCollInPrevRof(cols.size(), 0); // veto events if FT0C amplitude in previous ITS ROF is above threshold
927948

928949
for (auto& col : cols) {
929950
int32_t colIndex = col.globalIndex();
930951
float vZ = col.posZ();
931952

932953
// ### in-ROF occupancy
933-
std::vector<int> vAssocToSameROF = vCollsInSameITSROF[colIndex];
934-
int nITS567tracksForRofVetoStrict = 0; // to veto events with other collisions in the same ITS ROF
954+
std::vector<int> vAssocCollInSameROF = vCollsInSameITSROF[colIndex];
955+
int nITS567tracksForSameRofVetoStrict = 0; // to veto events with other collisions in the same ITS ROF
935956
int nCollsInRofWithFT0CAboveVetoStandard = 0; // to veto events with other collisions in the same ITS ROF, with per-collision multiplicity above threshold
936957
int nITS567tracksForRofVetoOnCloseVz = 0; // to veto events with nearby collisions with close vZ
937-
for (uint32_t iCol = 0; iCol < vAssocToSameROF.size(); iCol++) {
938-
int thisColIndex = vAssocToSameROF[iCol];
939-
nITS567tracksForRofVetoStrict += vTracksITS567perColl[thisColIndex];
958+
for (uint32_t iCol = 0; iCol < vAssocCollInSameROF.size(); iCol++) {
959+
int thisColIndex = vAssocCollInSameROF[iCol];
960+
nITS567tracksForSameRofVetoStrict += vTracksITS567perColl[thisColIndex];
940961
if (vAmpFT0CperColl[thisColIndex] > confFT0CamplCutVetoOnCollInROF)
941962
nCollsInRofWithFT0CAboveVetoStandard++;
942963
if (fabs(vCollVz[thisColIndex] - vZ) < confEpsilonVzDiffVetoInROF)
943964
nITS567tracksForRofVetoOnCloseVz += vTracksITS567perColl[thisColIndex];
944965
}
945966
// in-ROF occupancy flags
946-
vNoCollInSameRofStrict[colIndex] = (nITS567tracksForRofVetoStrict == 0);
967+
vNoCollInSameRofStrict[colIndex] = (nITS567tracksForSameRofVetoStrict == 0);
947968
vNoCollInSameRofStandard[colIndex] = (nCollsInRofWithFT0CAboveVetoStandard == 0);
948969
vNoCollInSameRofWithCloseVz[colIndex] = (nITS567tracksForRofVetoOnCloseVz == 0);
949970

971+
// ### occupancy in previous ROF
972+
std::vector<int> vAssocCollInPrevROF = vCollsInPrevITSROF[colIndex];
973+
float totalFT0amplInPrevROF = 0;
974+
for (uint32_t iCol = 0; iCol < vAssocCollInPrevROF.size(); iCol++) {
975+
int thisColIndex = vAssocCollInPrevROF[iCol];
976+
totalFT0amplInPrevROF += vAmpFT0CperColl[thisColIndex];
977+
}
978+
// veto events if FT0C amplitude in previous ITS ROF is above threshold
979+
vNoHighMultCollInPrevRof[colIndex] = (totalFT0amplInPrevROF < confFT0CamplCutVetoOnCollInROF);
980+
950981
// ### occupancy in time windows
951982
// protection against TF borders
952983
if (!vIsFullInfoForOccupancy[colIndex]) { // occupancy in undefined (too close to TF borders)
@@ -1058,6 +1089,7 @@ struct EventSelectionTask {
10581089
// selection bits based on ITS in-ROF occupancy
10591090
selection |= vNoCollInSameRofStrict[colIndex] ? BIT(kNoCollInRofStrict) : 0;
10601091
selection |= (vNoCollInSameRofStandard[colIndex] && vNoCollInSameRofWithCloseVz[colIndex]) ? BIT(kNoCollInRofStandard) : 0;
1092+
selection |= vNoHighMultCollInPrevRof[colIndex] ? BIT(kNoHighMultCollInPrevRof) : 0;
10611093

10621094
// apply int7-like selections
10631095
bool sel7 = 0;

DPG/Tasks/AOTEvent/rofOccupancyQa.cxx

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -342,27 +342,31 @@ struct RofOccupancyQaTask {
342342
histos.add("ROFbyROF/nPV_000_00y_x00_0", "", kTH2D, {{250, 0., 8000 * k}, {250, 0., 8000 * k}});
343343

344344
// #### new occupancy studies
345-
histos.add("nPV_vs_occupancyByTracks/sel8", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
346-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeNarrow", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
347-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
348-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
349-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeVzDependent", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
350-
histos.add("nPV_vs_occupancyByTracks/NoCollInRofStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
351-
histos.add("nPV_vs_occupancyByTracks/NoCollInRofStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
352-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
353-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
354-
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict_vZ_5cm", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 25000 * k}});
355-
356-
histos.add("nPV_vs_occupancyByFT0C/sel8", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
357-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeNarrow", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
358-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
359-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
360-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeVzDependent", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
361-
histos.add("nPV_vs_occupancyByFT0C/NoCollInRofStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
362-
histos.add("nPV_vs_occupancyByFT0C/NoCollInRofStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
363-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStandard", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
364-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
365-
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict_vZ_5cm", "", kTH2D, {{250, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
345+
histos.add("nPV_vs_occupancyByTracks/sel8", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
346+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeNarrow", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
347+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
348+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
349+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeRangeVzDependent", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
350+
histos.add("nPV_vs_occupancyByTracks/NoCollInRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
351+
histos.add("nPV_vs_occupancyByTracks/NoCollInRofStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
352+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
353+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
354+
histos.add("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict_vZ_5cm", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
355+
histos.add("nPV_vs_occupancyByTracks/kNoHighMultCollInPrevRof", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
356+
histos.add("nPV_vs_occupancyByTracks/kNoHighMultCollInPrevRofAndRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 25000 * k}});
357+
358+
histos.add("nPV_vs_occupancyByFT0C/sel8", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
359+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeNarrow", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
360+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
361+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
362+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeRangeVzDependent", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
363+
histos.add("nPV_vs_occupancyByFT0C/NoCollInRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
364+
histos.add("nPV_vs_occupancyByFT0C/NoCollInRofStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
365+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStandard", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
366+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
367+
histos.add("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict_vZ_5cm", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
368+
histos.add("nPV_vs_occupancyByFT0C/kNoHighMultCollInPrevRof", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
369+
histos.add("nPV_vs_occupancyByFT0C/kNoHighMultCollInPrevRofAndRofStrict", "", kTH2D, {{125, 0., 8000 * k}, {100, 0., 2.5e5 * k}});
366370
}
367371

368372
Partition<FullTracksIU> pvTracks = ((aod::track::flags & static_cast<uint32_t>(o2::aod::track::PVContributor)) == static_cast<uint32_t>(o2::aod::track::PVContributor));
@@ -978,6 +982,10 @@ struct RofOccupancyQaTask {
978982
histos.fill(HIST("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict"), nPV, occTracks);
979983
if (col.selection_bit(kNoCollInTimeRangeStrict) && col.selection_bit(kNoCollInRofStrict) && fabs(vZ) < 5)
980984
histos.fill(HIST("nPV_vs_occupancyByTracks/NoCollInTimeAndRofStrict_vZ_5cm"), nPV, occTracks);
985+
if (col.selection_bit(kNoHighMultCollInPrevRof))
986+
histos.fill(HIST("nPV_vs_occupancyByTracks/kNoHighMultCollInPrevRof"), nPV, occTracks);
987+
if (col.selection_bit(kNoHighMultCollInPrevRof) && col.selection_bit(kNoCollInRofStrict))
988+
histos.fill(HIST("nPV_vs_occupancyByTracks/kNoHighMultCollInPrevRofAndRofStrict"), nPV, occTracks);
981989
}
982990
if (occFT0C >= 0 && fabs(vZ) < 8) {
983991
histos.fill(HIST("nPV_vs_occupancyByFT0C/sel8"), nPV, occFT0C);
@@ -999,6 +1007,10 @@ struct RofOccupancyQaTask {
9991007
histos.fill(HIST("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict"), nPV, occFT0C);
10001008
if (col.selection_bit(kNoCollInTimeRangeStrict) && col.selection_bit(kNoCollInRofStrict) && fabs(vZ) < 5)
10011009
histos.fill(HIST("nPV_vs_occupancyByFT0C/NoCollInTimeAndRofStrict_vZ_5cm"), nPV, occFT0C);
1010+
if (col.selection_bit(kNoHighMultCollInPrevRof))
1011+
histos.fill(HIST("nPV_vs_occupancyByFT0C/kNoHighMultCollInPrevRof"), nPV, occFT0C);
1012+
if (col.selection_bit(kNoHighMultCollInPrevRof) && col.selection_bit(kNoCollInRofStrict))
1013+
histos.fill(HIST("nPV_vs_occupancyByFT0C/kNoHighMultCollInPrevRofAndRofStrict"), nPV, occFT0C);
10021014
}
10031015
}
10041016

0 commit comments

Comments
 (0)