Skip to content

Commit b5c3b9b

Browse files
committed
Some extra debug functionality
1 parent 13cd401 commit b5c3b9b

3 files changed

Lines changed: 58 additions & 3 deletions

File tree

Common/DataModel/Multiplicity.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ DECLARE_SOA_COLUMN(MultNTracksGlobal, multNTracksGlobal, int); //!
7575

7676
DECLARE_SOA_COLUMN(BCNumber, bcNumber, int); //!
7777

78+
// even further QA: timing information for neighboring events
79+
DECLARE_SOA_COLUMN(TimeToPrePrevious, timeToPrePrevious, float); //!
80+
DECLARE_SOA_COLUMN(TimeToPrevious, timeToPrevious, float); //!
81+
DECLARE_SOA_COLUMN(TimeToNext, timeToNext, float); //!
82+
DECLARE_SOA_COLUMN(TimeToNeNext, timeToNeNext, float); //!
83+
7884
} // namespace mult
7985
DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector
8086
mult::MultFV0A, mult::MultFV0C,
@@ -109,6 +115,10 @@ DECLARE_SOA_TABLE(MultsExtra, "AOD", "MULTEXTRA", //!
109115
mult::MultAllTracksTPCOnly, mult::MultAllTracksITSTPC,
110116
mult::BCNumber);
111117

118+
DECLARE_SOA_TABLE(MultNeighs, "AOD", "MULTNEIGH", //!
119+
mult::TimeToPrePrevious, mult::TimeToPrevious,
120+
mult::TimeToNext, mult::TimeToNeNext);
121+
112122
// for QA purposes
113123
DECLARE_SOA_TABLE(MultsGlobal, "AOD", "MULTGLOBAL", //! counters that use Track Selection (optional)
114124
mult::MultNTracksGlobal);

Common/TableProducer/multiplicityExtraTable.cxx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const int nBCsPerOrbit = o2::constants::lhc::LHCMaxBunches;
3232

3333
struct MultiplicityExtraTable {
3434
Produces<aod::MultsBC> multBC;
35+
Produces<aod::MultNeighs> multNeigh;
3536

3637
o2::ccdb::CcdbApi ccdbApi;
3738
Service<o2::ccdb::BasicCCDBManager> ccdb;
@@ -50,7 +51,7 @@ struct MultiplicityExtraTable {
5051

5152
using BCsWithRun3Matchings = soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>;
5253

53-
void process(BCsWithRun3Matchings::iterator const& bc, aod::FV0As const&, aod::FT0s const&, aod::FDDs const&, aod::Zdcs const&)
54+
void processBCs(BCsWithRun3Matchings::iterator const& bc, aod::FV0As const&, aod::FT0s const&, aod::FDDs const&, aod::Zdcs const&)
5455
{
5556
bool Tvx = false;
5657
bool isFV0OrA = false;
@@ -153,6 +154,33 @@ struct MultiplicityExtraTable {
153154

154155
multBC(multFT0A, multFT0C, multFV0A, multFDDA, multFDDC, multZNA, multZNC, multZEM1, multZEM2, multZPA, multZPC, Tvx, isFV0OrA, multFV0TriggerBits, multFT0TriggerBits, multFDDTriggerBits, multBCTriggerMask, collidingBC);
155156
}
157+
158+
void processCollisionNeighbors(aod::Collisions const& collisions)
159+
{
160+
std::vector<float> timeArray;
161+
timeArray.resize(collisions.size(), 1e+3);
162+
163+
for (const auto& collision : collisions) {
164+
timeArray[collision.globalIndex()] = collision.collisionTime();
165+
}
166+
167+
float deltaPrevious = 1e+6, deltaPrePrevious = 1e+6;
168+
float deltaNext = 1e+6, deltaNeNext = 1e+6;
169+
for (const auto& collision : collisions) {
170+
int ii = collision.globalIndex();
171+
172+
if(ii-1>=0) deltaPrevious = timeArray[ii]-timeArray[ii-1];
173+
if(ii-2>=0) deltaPrePrevious = timeArray[ii]-timeArray[ii-2];
174+
if(ii+1<collisions.size()) deltaNext = timeArray[ii+1]-timeArray[ii];
175+
if(ii+2<collisions.size()) deltaNeNext = timeArray[ii+2]-timeArray[ii];
176+
177+
multNeigh(deltaPrePrevious, deltaPrevious, deltaNext, deltaNeNext);
178+
}
179+
}
180+
181+
// Process switches
182+
PROCESS_SWITCH(MultiplicityExtraTable, processBCs, "Produce BC tables", true);
183+
PROCESS_SWITCH(MultiplicityExtraTable, processCollisionNeighbors, "Produce neighbor timing tables", true);
156184
};
157185

158186
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

Common/Tasks/centralityStudy.cxx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ struct centralityStudy {
4646
Configurable<bool> requireIsVertexTOFmatched{"requireIsVertexTOFmatched", true, "require events with at least one of vertex contributors matched to TOF"};
4747
Configurable<bool> requireIsVertexTRDmatched{"requireIsVertexTRDmatched", true, "require events with at least one of vertex contributors matched to TRD"};
4848
Configurable<bool> rejectSameBunchPileup{"rejectSameBunchPileup", true, "reject collisions in case of pileup with another collision in the same foundBC"};
49+
Configurable<float> minTimeDelta{"minTimeDelta", -1.0f, "reject collision if another collision is this close or less in time"};
4950

5051
// Configurable Axes
5152
ConfigurableAxis axisMultFT0C{"axisMultFT0C", {2000, 0, 100000}, "FT0C amplitude"};
@@ -61,12 +62,13 @@ struct centralityStudy {
6162
// For centrality studies if requested
6263
ConfigurableAxis axisCentrality{"axisCentrality", {100, 0, 100}, "FT0C percentile"};
6364
ConfigurableAxis axisPVChi2{"axisPVChi2", {300, 0, 30}, "FT0C percentile"};
65+
ConfigurableAxis axisDeltaTime{"axisDeltaTime", {300, 0, 300}, "#Delta time"};
6466

6567
void init(InitContext&)
6668
{
6769
if (doprocessCollisions) {
6870
const AxisSpec axisCollisions{100, -0.5f, 99.5f, "Number of collisions"};
69-
histos.add("hCollisionSelection", "hCollisionSelection", kTH1D, {{10, -0.5f, +9.5f}});
71+
histos.add("hCollisionSelection", "hCollisionSelection", kTH1D, {{20, -0.5f, +19.5f}});
7072
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(1, "All collisions");
7173
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(2, "sel8 cut");
7274
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(3, "posZ cut");
@@ -77,6 +79,7 @@ struct centralityStudy {
7779
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(8, "kIsVertexTOFmatched");
7880
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(9, "kIsVertexTRDmatched");
7981
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(10, "kNoSameBunchPileup");
82+
histos.get<TH1>(HIST("hCollisionSelection"))->GetXaxis()->SetBinLabel(11, "Neighbour rejection");
8083

8184
histos.add("hFT0C_Collisions", "hFT0C_Collisions", kTH1D, {axisMultUltraFineFT0C});
8285
histos.add("hNPVContributors", "hNPVContributors", kTH1D, {axisMultUltraFinePVContributors});
@@ -99,6 +102,7 @@ struct centralityStudy {
99102
histos.add("hNITSOnlyTracksVsCentrality", "hNITSOnlyTracksVsCentrality", kTH2F, {axisCentrality, axisMultPVContributors});
100103
histos.add("hNGlobalTracksVsCentrality", "hNGlobalTracksVsCentrality", kTH2F, {axisCentrality, axisMultPVContributors});
101104
histos.add("hPVChi2VsCentrality", "hPVChi2VsCentrality", kTH2F, {axisCentrality, axisPVChi2});
105+
histos.add("hDeltaTimeVsCentrality", "hDeltaTimeVsCentrality", kTH2F, {axisCentrality, axisDeltaTime});
102106
}
103107
}
104108

@@ -152,6 +156,19 @@ struct centralityStudy {
152156
}
153157
histos.fill(HIST("hCollisionSelection"), 9 /* Not at same bunch pile-up */);
154158

159+
//do this only if information is available
160+
if constexpr (requires { collision.timeToNext(); }) {
161+
float timeToNeighbour = TMath::Min(
162+
std::abs(collision.timeToNext()),
163+
std::abs(collision.timeToPrevious())
164+
);
165+
histos.fill(HIST("hDeltaTimeVsCentrality"), collision.centFT0C(), timeToNeighbour);
166+
if(timeToNeighbour<minTimeDelta){
167+
return;
168+
}
169+
histos.fill(HIST("hCollisionSelection"), 10 /* has suspicious neighbour */);
170+
}
171+
155172
// if we got here, we also finally fill the FT0C histogram, please
156173
histos.fill(HIST("hNPVContributors"), collision.multPVTotalContributors());
157174
histos.fill(HIST("hFT0C_Collisions"), collision.multFT0C());
@@ -177,7 +194,7 @@ struct centralityStudy {
177194
genericProcessCollision(collision);
178195
}
179196

180-
void processCollisionsWithCentrality(soa::Join<aod::Mults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal>::iterator const& collision)
197+
void processCollisionsWithCentrality(soa::Join<aod::Mults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::MultNeighs>::iterator const& collision)
181198
{
182199
genericProcessCollision(collision);
183200
}

0 commit comments

Comments
 (0)