Skip to content

Commit 2a807a7

Browse files
jesgumalibuild
andauthored
[Common,PWGLF] Add outer and rct info and converter to multBC table for centrality studies (#16516)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 879ce9a commit 2a807a7

6 files changed

Lines changed: 179 additions & 29 deletions

File tree

Common/DataModel/Multiplicity.h

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,9 @@ DECLARE_SOA_COLUMN(TimeToNext, timeToNext, float); //!
100100
DECLARE_SOA_COLUMN(TimeToNeNext, timeToNeNext, float); //!
101101

102102
// Extra information from FIT detectors
103-
DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring
104103
DECLARE_SOA_COLUMN(FT0TriggerMask, ft0TriggerMask, uint8_t); //!
104+
DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring
105+
DECLARE_SOA_COLUMN(MultFT0AOuter, multFT0AOuter, float); //! FT0A without innermost ring
105106

106107
} // namespace mult
107108
DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector
@@ -260,7 +261,7 @@ DECLARE_SOA_COLUMN(MultCollidingBC, multCollidingBC, bool); //! CTP tri
260261
DECLARE_SOA_COLUMN(MultFT0PosZ, multFT0PosZ, float); //! Position along Z computed with the FT0 information within the BC
261262
DECLARE_SOA_COLUMN(MultFT0PosZValid, multFT0PosZValid, bool); //! Validity of the position along Z computed with the FT0 information
262263
} // namespace mult
263-
DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //!
264+
DECLARE_SOA_TABLE(MultBCs_000, "AOD", "MULTBC", //!
264265
mult::MultFT0A,
265266
mult::MultFT0C,
266267
mult::MultFT0PosZ,
@@ -283,11 +284,44 @@ DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //!
283284
mult::MultCollidingBC,
284285
timestamp::Timestamp,
285286
bc::Flags);
286-
using MultBC = MultBCs::iterator;
287287

288-
DECLARE_SOA_TABLE(MultBcSel, "AOD", "MULTBCSEL", //! BC selection bits joinable with multBCs
288+
DECLARE_SOA_TABLE_VERSIONED(MultBCs_001, "AOD", "MULTBC", 1, //!
289+
mult::MultFT0A,
290+
mult::MultFT0C,
291+
mult::MultFV0A,
292+
mult::MultFDDA,
293+
mult::MultFDDC,
294+
mult::MultZNA,
295+
mult::MultZNC,
296+
mult::MultZEM1,
297+
mult::MultZEM2,
298+
mult::MultZPA,
299+
mult::MultZPC,
300+
mult::MultFV0AOuter,
301+
mult::MultFT0AOuter);
302+
303+
DECLARE_SOA_TABLE(MultBcSel_000, "AOD", "MULTBCSEL", //! BC selection bits joinable with multBCs
289304
evsel::Selection);
290305

306+
DECLARE_SOA_TABLE_VERSIONED(MultBcSel_001, "AOD", "MULTBCSEL", 1, //! BC selection bits joinable with multBCs
307+
evsel::Selection,
308+
evsel::Rct,
309+
bc::Flags,
310+
timestamp::Timestamp,
311+
mult::MultFT0PosZ,
312+
mult::MultFT0PosZValid,
313+
mult::MultV0triggerBits,
314+
mult::MultT0triggerBits,
315+
mult::MultFDDtriggerBits,
316+
mult::MultTriggerMask,
317+
mult::MultCollidingBC,
318+
mult::MultTVX,
319+
mult::MultFV0OrA);
320+
321+
using MultBCs = MultBCs_001;
322+
using MultBcSel = MultBcSel_001;
323+
using MultBC = MultBCs::iterator;
324+
291325
// crosslinks
292326
namespace mult
293327
{

Common/TableProducer/Converters/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,8 @@ o2physics_add_dpl_workflow(run2-tiny-to-full-pid
113113
SOURCES run2TinyToFullPID.cxx
114114
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
115115
COMPONENT_NAME Analysis)
116+
117+
o2physics_add_dpl_workflow(mult-bcs-converter
118+
SOURCES multBCsConverter.cxx
119+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
120+
COMPONENT_NAME Analysis)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
/// \file multBCsConverter.cxx
13+
/// \brief Converts MultBCs and MultBcSel table from version 000 to 001
14+
/// \author Jesper Karlsson Gumrpecht
15+
16+
#include "Common/DataModel/Multiplicity.h"
17+
18+
#include <Framework/AnalysisDataModel.h>
19+
#include <Framework/AnalysisHelpers.h>
20+
#include <Framework/AnalysisTask.h>
21+
#include <Framework/runDataProcessing.h>
22+
23+
using namespace o2;
24+
using namespace o2::framework;
25+
26+
struct MultBCsConverter {
27+
Produces<aod::MultBCs_001> multBC;
28+
Produces<aod::MultBcSel_001> multBcSel;
29+
30+
static constexpr float DummyValue = -1.f;
31+
static constexpr int DummyRct = 0;
32+
void process(soa::Join<aod::MultBCs_000, aod::MultBcSel_000> const& multBCs)
33+
{
34+
multBC.reserve(multBCs.size());
35+
multBcSel.reserve(multBCs.size());
36+
for (const auto& multbc : multBCs) {
37+
multBC(
38+
multbc.multFT0A(),
39+
multbc.multFT0C(),
40+
multbc.multFV0A(),
41+
multbc.multFDDA(),
42+
multbc.multFDDC(),
43+
multbc.multZNA(),
44+
multbc.multZNC(),
45+
multbc.multZEM1(),
46+
multbc.multZEM2(),
47+
multbc.multZPA(),
48+
multbc.multZPC(),
49+
DummyValue, // dummy amplitude for FV0A Outer
50+
DummyValue); // dummy amplitude for FT0A Outer
51+
52+
multBcSel(
53+
multbc.selection_raw(),
54+
DummyRct, // all flags to false
55+
multbc.flags(),
56+
multbc.timestamp(),
57+
multbc.multFT0PosZ(),
58+
multbc.multFT0PosZValid(),
59+
multbc.multV0triggerBits(),
60+
multbc.multT0triggerBits(),
61+
multbc.multFDDtriggerBits(),
62+
multbc.multTriggerMask(),
63+
multbc.multCollidingBC(),
64+
multbc.multTVX(),
65+
multbc.multFV0OrA());
66+
}
67+
}
68+
};
69+
70+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
71+
{
72+
return WorkflowSpec{
73+
adaptAnalysisTask<MultBCsConverter>(cfgc)};
74+
}

Common/TableProducer/multiplicityExtraTable.cxx

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ struct MultiplicityExtraTable {
155155
float multFV0A = 0.f;
156156
float multFDDA = 0.f;
157157
float multFDDC = 0.f;
158+
float multFT0AOuter = 0.f;
159+
float multFV0AOuter = 0.f;
158160

159161
// ZDC amplitudes
160162
float multZEM1 = -1.f;
@@ -195,8 +197,11 @@ struct MultiplicityExtraTable {
195197
multFT0TriggerBits = static_cast<uint8_t>(triggers.to_ulong());
196198

197199
// calculate T0 charge
198-
for (auto amplitude : ft0.amplitudeA()) {
199-
multFT0A += amplitude;
200+
for (size_t ii = 0; ii < ft0.amplitudeA().size(); ++ii) {
201+
multFT0A += ft0.amplitudeA()[ii];
202+
if (ft0.channelA()[ii] > 31) {
203+
multFT0AOuter += ft0.amplitudeA()[ii];
204+
}
200205
}
201206
for (auto amplitude : ft0.amplitudeC()) {
202207
multFT0C += amplitude;
@@ -212,8 +217,13 @@ struct MultiplicityExtraTable {
212217
std::bitset<8> fV0Triggers = fv0.triggerMask();
213218
multFV0TriggerBits = static_cast<uint8_t>(fV0Triggers.to_ulong());
214219

215-
for (auto amplitude : fv0.amplitude()) {
220+
for (size_t ii = 0; ii < fv0.amplitude().size(); ii++) {
221+
auto amplitude = fv0.amplitude()[ii];
222+
auto channel = fv0.channel()[ii];
216223
multFV0A += amplitude;
224+
if (channel > 7) {
225+
multFV0AOuter += amplitude;
226+
}
217227
}
218228
isFV0OrA = fV0Triggers[o2::fit::Triggers::bitA];
219229
} else {
@@ -254,15 +264,34 @@ struct MultiplicityExtraTable {
254264

255265
bc2mult(bc2multArray[bc.globalIndex()]);
256266
multBC(
257-
tru(multFT0A), tru(multFT0C),
258-
tru(posZFT0), posZFT0valid, tru(multFV0A),
259-
tru(multFDDA), tru(multFDDC), tru(multZNA), tru(multZNC), tru(multZEM1),
260-
tru(multZEM2), tru(multZPA), tru(multZPC), Tvx, isFV0OrA,
261-
multFV0TriggerBits, multFT0TriggerBits, multFDDTriggerBits, multBCTriggerMask, collidingBC,
267+
tru(multFT0A),
268+
tru(multFT0C),
269+
tru(multFV0A),
270+
tru(multFDDA),
271+
tru(multFDDC),
272+
tru(multZNA),
273+
tru(multZNC),
274+
tru(multZEM1),
275+
tru(multZEM2),
276+
tru(multZPA),
277+
tru(multZPC),
278+
tru(multFV0AOuter),
279+
tru(multFT0AOuter));
280+
281+
multBcSel(
282+
bc.selection_raw(),
283+
bc.rct_raw(),
284+
bc.flags(),
262285
bc.timestamp(),
263-
bc.flags());
264-
265-
multBcSel(bc.selection_raw());
286+
tru(posZFT0),
287+
posZFT0valid,
288+
multFV0TriggerBits,
289+
multFT0TriggerBits,
290+
multFDDTriggerBits,
291+
multBCTriggerMask,
292+
collidingBC,
293+
Tvx,
294+
isFV0OrA);
266295
}
267296
}
268297

Common/Tasks/centralityStudy.cxx

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,9 @@ struct centralityStudy {
344344

345345
histos.add("hFT0C_BCs", "hFT0C_BCs", kTH1D, {axisMultUltraFineFT0C});
346346
histos.add("hFT0A_BCs", "hFT0A_BCs", kTH1D, {axisMultUltraFineFT0A});
347+
histos.add("hFT0AOuter_BCs", "hFT0AOuter_BCs", kTH1D, {axisMultUltraFineFT0A});
347348
histos.add("hFT0M_BCs", "hFT0M_BCs", kTH1D, {axisMultUltraFineFT0M});
349+
histos.add("hFT0MOuterA_BCs", "hFT0MOuterA_BCs", kTH1D, {axisMultUltraFineFT0M});
348350
histos.add("hFV0A_BCs", "hFV0A_BCs", kTH1D, {axisMultUltraFineFV0A});
349351
histos.add("hInteractionRate_BCs", "hInteractionRate_BCs", kTH1D, {axisInteractionRate});
350352

@@ -795,14 +797,18 @@ struct centralityStudy {
795797
getHist(TH1, histPath + "hCollisionSelection")->Fill(15);
796798
}
797799
if (evsel.rejectIsFlangeEvent) {
798-
if constexpr (requires { collision.ft0TriggerMask(); }) {
799-
constexpr int IsFlangeEventId = 7;
800-
std::bitset<8> ft0TriggerMask = collision.ft0TriggerMask();
801-
if (ft0TriggerMask[IsFlangeEventId]) {
802-
return;
800+
if constexpr (requires { collision.has_multBC(); }) {
801+
if (collision.has_multBC()) {
802+
auto multbc = collision.template multBC_as<soa::Join<aod::MultBCs, aod::MultBcSel>>();
803+
constexpr int IsFlangeEventId = 7;
804+
std::bitset<8> ft0TriggerMask = multbc.multT0triggerBits();
805+
if (ft0TriggerMask[IsFlangeEventId]) {
806+
return;
807+
}
803808
}
804809
}
805810
}
811+
806812
histos.fill(HIST("hCollisionSelection"), 16 /* reject flange events */);
807813
if (studies.doRunByRunHistograms) {
808814
getHist(TH1, histPath + "hCollisionSelection")->Fill(16);
@@ -949,7 +955,7 @@ struct centralityStudy {
949955

950956
if constexpr (requires { collision.has_multBC(); }) {
951957
if (collision.has_multBC()) {
952-
auto multbc = collision.template multBC_as<aod::MultBCs>();
958+
auto multbc = collision.template multBC_as<soa::Join<aod::MultBCs, aod::MultBcSel>>();
953959
const uint64_t bcTimestamp = multbc.timestamp();
954960
const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, ccdbSettings.irSource.value, ccdbSettings.irCrashOnNull) / 1000.; // kHz
955961
histos.fill(HIST("hInteractionRate"), interactionRate);
@@ -967,7 +973,7 @@ struct centralityStudy {
967973
getHist(TH2, histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C());
968974
getHist(TH2, histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M());
969975
getHist(TH2, histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A());
970-
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0AOuter());
976+
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, multbc.multFV0AOuter());
971977
getHist(TH2, histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks());
972978
getHist(TH2, histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal());
973979
getHist(TH2, histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors());
@@ -980,22 +986,22 @@ struct centralityStudy {
980986
}
981987
}
982988

983-
void processCollisions(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultsGlobal, aod::MultSelections, aod::Mults2BC, aod::FITExtraMults>::iterator const& collision, aod::MultBCs const&)
989+
void processCollisions(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultsGlobal, aod::MultSelections, aod::Mults2BC>::iterator const& collision, soa::Join<aod::MultBCs, aod::MultBcSel> const&)
984990
{
985991
genericProcessCollision(collision);
986992
}
987993

988-
void processCollisionsWithResolutionStudy(soa::Join<aod::MultsRun3, aod::MFTMults, aod::Mult2MCExtras, aod::MultsExtra, aod::MultsGlobal, aod::MultSelections, aod::Mults2BC, aod::FITExtraMults>::iterator const& collision, soa::Join<aod::MultMCExtras, aod::MultHepMCHIs> const&)
994+
void processCollisionsWithResolutionStudy(soa::Join<aod::MultsRun3, aod::MFTMults, aod::Mult2MCExtras, aod::MultsExtra, aod::MultsGlobal, aod::MultSelections, aod::Mults2BC>::iterator const& collision, soa::Join<aod::MultMCExtras, aod::MultHepMCHIs> const&)
989995
{
990996
genericProcessCollision(collision);
991997
}
992998

993-
void processCollisionsWithCentrality(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::Mults2BC, aod::FITExtraMults>::iterator const& collision, aod::MultBCs const&)
999+
void processCollisionsWithCentrality(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::Mults2BC>::iterator const& collision, soa::Join<aod::MultBCs, aod::MultBcSel> const&)
9941000
{
9951001
genericProcessCollision(collision);
9961002
}
9971003

998-
void processCollisionsWithCentralityWithNeighbours(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::MultNeighs, aod::FITExtraMults>::iterator const& collision)
1004+
void processCollisionsWithCentralityWithNeighbours(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::MultNeighs>::iterator const& collision)
9991005
{
10001006
genericProcessCollision(collision);
10011007
}
@@ -1088,7 +1094,7 @@ struct centralityStudy {
10881094
return true;
10891095
}
10901096

1091-
void processBCs(soa::Join<aod::BC2Mults, aod::MultBCs, aod::MultBcSel> const& multbcs, soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal> const&)
1097+
void processBCs(soa::Join<aod::BC2Mults, aod::MultBCs, aod::MultBcSel> const& multbcs, soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::MultsGlobal> const&)
10921098
{
10931099
// process BCs, calculate FT0C distribution
10941100
for (const auto& multbc : multbcs) {
@@ -1099,7 +1105,9 @@ struct centralityStudy {
10991105
// if we got here, we also finally fill the FT0C histogram, please
11001106
histos.fill(HIST("hFT0C_BCs"), multbc.multFT0C() * scale.factorFT0C);
11011107
histos.fill(HIST("hFT0A_BCs"), multbc.multFT0A() * scale.factorFT0A);
1108+
histos.fill(HIST("hFT0AOuter_BCs"), multbc.multFT0AOuter() * scale.factorFT0A);
11021109
histos.fill(HIST("hFT0M_BCs"), (multbc.multFT0A() + multbc.multFT0C()) * scale.factorFT0M);
1110+
histos.fill(HIST("hFT0MOuterA_BCs"), (multbc.multFT0AOuter() + multbc.multFT0C()) * scale.factorFT0M);
11031111
histos.fill(HIST("hFV0A_BCs"), multbc.multFV0A() * scale.factorFV0A);
11041112
histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C);
11051113

@@ -1124,7 +1132,7 @@ struct centralityStudy {
11241132
}
11251133

11261134
if (multbc.has_ft0Mult()) {
1127-
auto multco = multbc.ft0Mult_as<soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal>>();
1135+
auto multco = multbc.ft0Mult_as<soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::MultsGlobal>>();
11281136
if (multbc.multFT0PosZValid()) {
11291137
histos.fill(HIST("hVertexZ_BCvsCO"), multco.multPVz(), multbc.multFT0PosZ());
11301138
}

PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ struct HeavyionMultiplicity {
10081008
} // collision loop
10091009
}
10101010

1011-
void processBcData(soa::Join<aod::BC2Mults, aod::MultBCs, aod::BCCentFT0Cs, aod::BCCentFT0Ms>::iterator const& multbc)
1011+
void processBcData(soa::Join<aod::BC2Mults, aod::MultBCs, aod::BCCentFT0Cs, aod::BCCentFT0Ms, aod::MultBcSel>::iterator const& multbc)
10121012
{
10131013
histos.fill(HIST("BcHist"), 1); // all BCs
10141014
if (selectCollidingBCs && !multbc.multCollidingBC())

0 commit comments

Comments
 (0)