Skip to content

Commit 3f92df7

Browse files
ddobrigkalibuild
andauthored
Common: add bc2mult / mult2bc maps (#7563)
* Common: add bc2mult / mult2bc maps * Please consider the following formatting changes (#339) * Add MC vtxZ * Please consider the following formatting changes (#340) --------- Co-authored-by: ALICE Builder <alibuild@users.noreply.github.com>
1 parent 4ed329e commit 3f92df7

3 files changed

Lines changed: 150 additions & 102 deletions

File tree

Common/DataModel/Multiplicity.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ DECLARE_SOA_COLUMN(MultMCFT0C, multMCFT0C, int); //!
5151
DECLARE_SOA_COLUMN(MultMCNParticlesEta10, multMCNParticlesEta10, int); //!
5252
DECLARE_SOA_COLUMN(MultMCNParticlesEta08, multMCNParticlesEta08, int); //!
5353
DECLARE_SOA_COLUMN(MultMCNParticlesEta05, multMCNParticlesEta05, int); //!
54+
DECLARE_SOA_COLUMN(MultMCPVz, multMCPVz, float); //!
5455

5556
// complementary / MultsExtra table
5657
DECLARE_SOA_COLUMN(MultPVTotalContributors, multPVTotalContributors, int); //!
@@ -76,7 +77,8 @@ DECLARE_SOA_COLUMN(MultNGlobalTracksPV, multNGlobalTracksPV, int);
7677
DECLARE_SOA_COLUMN(MultNGlobalTracksPVeta1, multNGlobalTracksPVeta1, int);
7778
DECLARE_SOA_COLUMN(MultNGlobalTracksPVetaHalf, multNGlobalTracksPVetaHalf, int);
7879

79-
DECLARE_SOA_COLUMN(BCNumber, bcNumber, int); //!
80+
DECLARE_SOA_INDEX_COLUMN(BC, bc);
81+
DECLARE_SOA_INDEX_COLUMN(Collision, collision);
8082

8183
// even further QA: timing information for neighboring events
8284
DECLARE_SOA_COLUMN(TimeToPrePrevious, timeToPrePrevious, float); //!
@@ -111,12 +113,17 @@ using Mults = soa::Join<BarrelMults, FV0Mults, FT0Mults, FDDMults, ZDCMults>;
111113
using Mult = Mults::iterator;
112114

113115
// for QA purposes
116+
DECLARE_SOA_TABLE(Mults2BC, "AOD", "MULTS2BC", //! Relate mult -> BC
117+
o2::soa::Index<>, mult::BCId);
118+
DECLARE_SOA_TABLE(BC2Mults, "AOD", "BC2MULTS", //! Relate BC -> mult
119+
o2::soa::Index<>, mult::CollisionId);
120+
114121
DECLARE_SOA_TABLE(MultsExtra, "AOD", "MULTEXTRA", //!
115122
mult::MultPVTotalContributors, mult::MultPVChi2, mult::MultCollisionTimeRes, mult::MultRunNumber, mult::MultPVz, mult::MultSel8,
116123
mult::MultNTracksHasITS, mult::MultNTracksHasTPC, mult::MultNTracksHasTOF, mult::MultNTracksHasTRD,
117124
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
118125
mult::MultAllTracksTPCOnly, mult::MultAllTracksITSTPC,
119-
mult::BCNumber, evsel::NumTracksInTimeRange);
126+
evsel::NumTracksInTimeRange);
120127

121128
DECLARE_SOA_TABLE(MultNeighs, "AOD", "MULTNEIGH", //!
122129
mult::TimeToPrePrevious, mult::TimeToPrevious,
@@ -137,6 +144,7 @@ DECLARE_SOA_TABLE(MultsExtraMC, "AOD", "MULTEXTRAMC", //! Table for the MC infor
137144
mult::MultMCNParticlesEta05,
138145
mult::MultMCNParticlesEta08,
139146
mult::MultMCNParticlesEta10,
147+
mult::MultMCPVz,
140148
mult::IsInelGt0<mult::MultMCNParticlesEta10>,
141149
mult::IsInelGt1<mult::MultMCNParticlesEta10>,
142150
o2::soa::Marker<1>);

Common/TableProducer/multiplicityExtraTable.cxx

Lines changed: 137 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ struct MultiplicityExtraTable {
3333
Produces<aod::MultsBC> multBC;
3434
Produces<aod::MultNeighs> multNeigh;
3535

36+
Produces<aod::Mults2BC> mult2bc;
37+
Produces<aod::BC2Mults> bc2mult;
38+
3639
// Allow for downscaling of BC table for less space use in derived data
3740
Configurable<float> bcDownscaleFactor{"bcDownscaleFactor", 2, "Downscale factor for BC table (0: save nothing, 1: save all)"};
3841
Configurable<float> minFT0CforBCTable{"minFT0CforBCTable", 25.0f, "Minimum FT0C amplitude to fill BC table to reduce data"};
@@ -59,117 +62,154 @@ struct MultiplicityExtraTable {
5962

6063
using BCsWithRun3Matchings = soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>;
6164

62-
void processBCs(BCsWithRun3Matchings::iterator const& bc, aod::FV0As const&, aod::FT0s const&, aod::FDDs const&, aod::Zdcs const&)
65+
void processBCs(BCsWithRun3Matchings const& bcs, aod::FV0As const&, aod::FT0s const&, aod::FDDs const&, aod::Zdcs const&, aod::Collisions const& collisions)
6366
{
64-
// downscale if requested to do so
65-
if (bcDownscaleFactor < 1.f && (static_cast<float>(rand_r(&randomSeed)) / static_cast<float>(RAND_MAX)) > bcDownscaleFactor) {
66-
return;
67-
}
67+
//+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+
68+
// determine saved BCs and corresponding new BC table index
69+
std::vector<int> newBCindex(bcs.size());
70+
std::vector<int> bc2multArray(bcs.size());
71+
int atIndex = 0;
72+
for (const auto& bc : bcs) {
73+
newBCindex[bc.globalIndex()] = -1;
74+
bc2multArray[bc.globalIndex()] = -1;
75+
76+
// downscale if requested to do so
77+
if (bcDownscaleFactor < 1.f && (static_cast<float>(rand_r(&randomSeed)) / static_cast<float>(RAND_MAX)) > bcDownscaleFactor) {
78+
continue;
79+
}
6880

69-
bool Tvx = false;
70-
bool isFV0OrA = false;
71-
float multFT0C = 0.f;
72-
float multFT0A = 0.f;
73-
float multFV0A = 0.f;
74-
float multFDDA = 0.f;
75-
float multFDDC = 0.f;
76-
77-
// ZDC amplitudes
78-
float multZEM1 = -1.f;
79-
float multZEM2 = -1.f;
80-
float multZNA = -1.f;
81-
float multZNC = -1.f;
82-
float multZPA = -1.f;
83-
float multZPC = -1.f;
84-
85-
uint8_t multFT0TriggerBits = 0;
86-
uint8_t multFV0TriggerBits = 0;
87-
uint8_t multFDDTriggerBits = 0;
88-
uint64_t multBCTriggerMask = bc.triggerMask();
89-
90-
// initialize - from Arvind
91-
newRunNumber = bc.runNumber();
92-
int localBC = bc.globalBC() % nBCsPerOrbit;
93-
94-
if (newRunNumber != oldRunNumber) {
95-
auto soreor = o2::ccdb::BasicCCDBManager::getRunDuration(ccdbApi, newRunNumber);
96-
auto ts = soreor.first;
97-
98-
LOG(info) << " newRunNumber " << newRunNumber << " time stamp " << ts;
99-
oldRunNumber = newRunNumber;
100-
auto grplhcif = ccdb->getForTimeStamp<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", ts);
101-
CollidingBunch = grplhcif->getBunchFilling().getBCPattern();
102-
} // new run number
103-
104-
bool collidingBC = CollidingBunch.test(localBC);
105-
106-
if (bc.has_ft0()) {
107-
auto ft0 = bc.ft0();
108-
std::bitset<8> triggers = ft0.triggerMask();
109-
Tvx = triggers[o2::fit::Triggers::bitVertex];
110-
multFT0TriggerBits = static_cast<uint8_t>(triggers.to_ulong());
111-
112-
// calculate T0 charge
113-
for (auto amplitude : ft0.amplitudeA()) {
114-
multFT0A += amplitude;
81+
float multFT0C = 0.f;
82+
if (bc.has_ft0()) {
83+
auto ft0 = bc.ft0();
84+
for (auto amplitude : ft0.amplitudeC()) {
85+
multFT0C += amplitude;
86+
}
87+
} else {
88+
multFT0C = -999.0f;
11589
}
116-
for (auto amplitude : ft0.amplitudeC()) {
117-
multFT0C += amplitude;
90+
91+
if (multFT0C < minFT0CforBCTable) {
92+
continue; // skip this event
11893
}
119-
} else {
120-
multFT0A = -999.0f;
121-
multFT0C = -999.0f;
94+
newBCindex[bc.globalIndex()] = atIndex++;
12295
}
123-
if (bc.has_fv0a()) {
124-
auto fv0 = bc.fv0a();
125-
std::bitset<8> fV0Triggers = fv0.triggerMask();
126-
multFV0TriggerBits = static_cast<uint8_t>(fV0Triggers.to_ulong());
96+
//+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+
12797

128-
for (auto amplitude : fv0.amplitude()) {
129-
multFV0A += amplitude;
130-
}
131-
isFV0OrA = fV0Triggers[o2::fit::Triggers::bitA];
132-
} else {
133-
multFV0A = -999.0f;
98+
//+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+
99+
// interlink: collision -> valid BC, BC -> collision
100+
for (const auto& collision : collisions) {
101+
mult2bc(newBCindex[collision.bcId()]);
102+
bc2multArray[collision.bcId()] = collision.globalIndex();
134103
}
104+
//+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+
135105

136-
if (bc.has_fdd()) {
137-
auto fdd = bc.fdd();
138-
std::bitset<8> fFDDTriggers = fdd.triggerMask();
139-
multFDDTriggerBits = static_cast<uint8_t>(fFDDTriggers.to_ulong());
106+
for (const auto& bc : bcs) {
107+
if (newBCindex[bc.globalIndex()] < 0) {
108+
continue; // don't keep if low mult or downsampled out
109+
}
140110

141-
for (auto amplitude : fdd.chargeA()) {
142-
multFDDA += amplitude;
111+
bool Tvx = false;
112+
bool isFV0OrA = false;
113+
float multFT0C = 0.f;
114+
float multFT0A = 0.f;
115+
float multFV0A = 0.f;
116+
float multFDDA = 0.f;
117+
float multFDDC = 0.f;
118+
119+
// ZDC amplitudes
120+
float multZEM1 = -1.f;
121+
float multZEM2 = -1.f;
122+
float multZNA = -1.f;
123+
float multZNC = -1.f;
124+
float multZPA = -1.f;
125+
float multZPC = -1.f;
126+
127+
uint8_t multFT0TriggerBits = 0;
128+
uint8_t multFV0TriggerBits = 0;
129+
uint8_t multFDDTriggerBits = 0;
130+
uint64_t multBCTriggerMask = bc.triggerMask();
131+
132+
// initialize - from Arvind
133+
newRunNumber = bc.runNumber();
134+
int localBC = bc.globalBC() % nBCsPerOrbit;
135+
136+
if (newRunNumber != oldRunNumber) {
137+
auto soreor = o2::ccdb::BasicCCDBManager::getRunDuration(ccdbApi, newRunNumber);
138+
auto ts = soreor.first;
139+
140+
LOG(info) << " newRunNumber " << newRunNumber << " time stamp " << ts;
141+
oldRunNumber = newRunNumber;
142+
auto grplhcif = ccdb->getForTimeStamp<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", ts);
143+
CollidingBunch = grplhcif->getBunchFilling().getBCPattern();
144+
} // new run number
145+
146+
bool collidingBC = CollidingBunch.test(localBC);
147+
148+
if (bc.has_ft0()) {
149+
auto ft0 = bc.ft0();
150+
std::bitset<8> triggers = ft0.triggerMask();
151+
Tvx = triggers[o2::fit::Triggers::bitVertex];
152+
multFT0TriggerBits = static_cast<uint8_t>(triggers.to_ulong());
153+
154+
// calculate T0 charge
155+
for (auto amplitude : ft0.amplitudeA()) {
156+
multFT0A += amplitude;
157+
}
158+
for (auto amplitude : ft0.amplitudeC()) {
159+
multFT0C += amplitude;
160+
}
161+
} else {
162+
multFT0A = -999.0f;
163+
multFT0C = -999.0f;
143164
}
144-
for (auto amplitude : fdd.chargeC()) {
145-
multFDDC += amplitude;
165+
if (bc.has_fv0a()) {
166+
auto fv0 = bc.fv0a();
167+
std::bitset<8> fV0Triggers = fv0.triggerMask();
168+
multFV0TriggerBits = static_cast<uint8_t>(fV0Triggers.to_ulong());
169+
170+
for (auto amplitude : fv0.amplitude()) {
171+
multFV0A += amplitude;
172+
}
173+
isFV0OrA = fV0Triggers[o2::fit::Triggers::bitA];
174+
} else {
175+
multFV0A = -999.0f;
146176
}
147-
} else {
148-
multFDDA = -999.0f;
149-
multFDDC = -999.0f;
150-
}
151177

152-
if (bc.has_zdc()) {
153-
multZNA = bc.zdc().amplitudeZNA();
154-
multZNC = bc.zdc().amplitudeZNC();
155-
multZEM1 = bc.zdc().amplitudeZEM1();
156-
multZEM2 = bc.zdc().amplitudeZEM2();
157-
multZPA = bc.zdc().amplitudeZPA();
158-
multZPC = bc.zdc().amplitudeZPC();
159-
} else {
160-
multZNA = -999.f;
161-
multZNC = -999.f;
162-
multZEM1 = -999.f;
163-
multZEM2 = -999.f;
164-
multZPA = -999.f;
165-
multZPC = -999.f;
166-
}
178+
if (bc.has_fdd()) {
179+
auto fdd = bc.fdd();
180+
std::bitset<8> fFDDTriggers = fdd.triggerMask();
181+
multFDDTriggerBits = static_cast<uint8_t>(fFDDTriggers.to_ulong());
182+
183+
for (auto amplitude : fdd.chargeA()) {
184+
multFDDA += amplitude;
185+
}
186+
for (auto amplitude : fdd.chargeC()) {
187+
multFDDC += amplitude;
188+
}
189+
} else {
190+
multFDDA = -999.0f;
191+
multFDDC = -999.0f;
192+
}
167193

168-
if (multFT0C < minFT0CforBCTable) {
169-
return; // skip this event
170-
}
194+
if (bc.has_zdc()) {
195+
multZNA = bc.zdc().amplitudeZNA();
196+
multZNC = bc.zdc().amplitudeZNC();
197+
multZEM1 = bc.zdc().amplitudeZEM1();
198+
multZEM2 = bc.zdc().amplitudeZEM2();
199+
multZPA = bc.zdc().amplitudeZPA();
200+
multZPC = bc.zdc().amplitudeZPC();
201+
} else {
202+
multZNA = -999.f;
203+
multZNC = -999.f;
204+
multZEM1 = -999.f;
205+
multZEM2 = -999.f;
206+
multZPA = -999.f;
207+
multZPC = -999.f;
208+
}
171209

172-
multBC(multFT0A, multFT0C, multFV0A, multFDDA, multFDDC, multZNA, multZNC, multZEM1, multZEM2, multZPA, multZPC, Tvx, isFV0OrA, multFV0TriggerBits, multFT0TriggerBits, multFDDTriggerBits, multBCTriggerMask, collidingBC);
210+
bc2mult(bc2multArray[bc.globalIndex()]);
211+
multBC(multFT0A, multFT0C, multFV0A, multFDDA, multFDDC, multZNA, multZNC, multZEM1, multZEM2, multZPA, multZPC, Tvx, isFV0OrA, multFV0TriggerBits, multFT0TriggerBits, multFDDTriggerBits, multBCTriggerMask, collidingBC);
212+
}
173213
}
174214

175215
void processCollisionNeighbors(aod::Collisions const& collisions)

Common/TableProducer/multiplicityTable.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ struct MultiplicityTable {
567567
tableExtra(collision.numContrib(), collision.chi2(), collision.collisionTimeRes(),
568568
mRunNumber, collision.posZ(), collision.sel8(),
569569
nHasITS, nHasTPC, nHasTOF, nHasTRD, nITSonly, nTPConly, nITSTPC,
570-
nAllTracksTPCOnly, nAllTracksITSTPC, bcNumber, collision.trackOccupancyInTimeRange());
570+
nAllTracksTPCOnly, nAllTracksITSTPC, collision.trackOccupancyInTimeRange());
571571
} break;
572572
case kMultSelections: // Multiplicity selections
573573
{
@@ -627,7 +627,7 @@ struct MultiplicityTable {
627627
Filter mcParticleFilter = (aod::mcparticle::eta < 4.9f) && (aod::mcparticle::eta > -3.3f);
628628
using mcParticlesFiltered = soa::Filtered<aod::McParticles>;
629629

630-
void processMC(aod::McCollision const&, mcParticlesFiltered const& mcParticles)
630+
void processMC(aod::McCollision const& mcCollision, mcParticlesFiltered const& mcParticles)
631631
{
632632
int multFT0A = 0;
633633
int multFT0C = 0;
@@ -662,7 +662,7 @@ struct MultiplicityTable {
662662
if (3.5 < mcPart.eta() && mcPart.eta() < 4.9)
663663
multFT0A++;
664664
}
665-
tableExtraMc(multFT0A, multFT0C, multBarrelEta05, multBarrelEta08, multBarrelEta10);
665+
tableExtraMc(multFT0A, multFT0C, multBarrelEta05, multBarrelEta08, multBarrelEta10, mcCollision.posZ());
666666
}
667667

668668
Configurable<float> min_pt_globaltrack{"min_pt_globaltrack", 0.15, "min. pT for global tracks"};

0 commit comments

Comments
 (0)