Skip to content

Commit 29362f0

Browse files
committed
Add outer and rct info and converter to multBC table for centrality studies
1 parent 464441b commit 29362f0

6 files changed

Lines changed: 184 additions & 29 deletions

File tree

Common/DataModel/Multiplicity.h

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ 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
106+
105107

106108
} // namespace mult
107109
DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector
@@ -260,7 +262,7 @@ DECLARE_SOA_COLUMN(MultCollidingBC, multCollidingBC, bool); //! CTP tri
260262
DECLARE_SOA_COLUMN(MultFT0PosZ, multFT0PosZ, float); //! Position along Z computed with the FT0 information within the BC
261263
DECLARE_SOA_COLUMN(MultFT0PosZValid, multFT0PosZValid, bool); //! Validity of the position along Z computed with the FT0 information
262264
} // namespace mult
263-
DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //!
265+
DECLARE_SOA_TABLE(MultBCs_000, "AOD", "MULTBC", //!
264266
mult::MultFT0A,
265267
mult::MultFT0C,
266268
mult::MultFT0PosZ,
@@ -283,11 +285,46 @@ DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //!
283285
mult::MultCollidingBC,
284286
timestamp::Timestamp,
285287
bc::Flags);
286-
using MultBC = MultBCs::iterator;
287288

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

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

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+
for (const auto& multbc : multBCs) {
35+
multBC(
36+
multbc.multFT0A(),
37+
multbc.multFT0C(),
38+
multbc.multFV0A(),
39+
multbc.multFDDA(),
40+
multbc.multFDDC(),
41+
multbc.multZNA(),
42+
multbc.multZNC(),
43+
multbc.multZEM1(),
44+
multbc.multZEM2(),
45+
multbc.multZPA(),
46+
multbc.multZPC(),
47+
DummyValue, // dummy amplitude for FV0A Outer
48+
DummyValue // dummy amplitude for FT0A Outer
49+
);
50+
51+
multBcSel(
52+
multbc.selection_raw(),
53+
DummyRct, // all flags to false
54+
multbc.flags(),
55+
multbc.timestamp(),
56+
multbc.multFT0PosZ(),
57+
multbc.multFT0PosZValid(),
58+
multbc.multV0triggerBits(),
59+
multbc.multT0triggerBits(),
60+
multbc.multFDDtriggerBits(),
61+
multbc.multTriggerMask(),
62+
multbc.multCollidingBC(),
63+
multbc.multTVX(),
64+
multbc.multFV0OrA()
65+
);
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: 42 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,36 @@ 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+
282+
multBcSel(
283+
bc.selection_raw(),
284+
bc.rct_raw(),
285+
bc.flags(),
262286
bc.timestamp(),
263-
bc.flags());
264-
265-
multBcSel(bc.selection_raw());
287+
tru(posZFT0),
288+
posZFT0valid,
289+
multFV0TriggerBits,
290+
multFT0TriggerBits,
291+
multFDDTriggerBits,
292+
multBCTriggerMask,
293+
collidingBC,
294+
Tvx,
295+
isFV0OrA
296+
);
266297
}
267298
}
268299

Common/Tasks/centralityStudy.cxx

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

332332
histos.add("hFT0C_BCs", "hFT0C_BCs", kTH1D, {axisMultUltraFineFT0C});
333333
histos.add("hFT0A_BCs", "hFT0A_BCs", kTH1D, {axisMultUltraFineFT0A});
334+
histos.add("hFT0AOuter_BCs", "hFT0AOuter_BCs", kTH1D, {axisMultUltraFineFT0A});
334335
histos.add("hFT0M_BCs", "hFT0M_BCs", kTH1D, {axisMultUltraFineFT0M});
336+
histos.add("hFT0MOuterA_BCs", "hFT0MOuterA_BCs", kTH1D, {axisMultUltraFineFT0M});
335337
histos.add("hFV0A_BCs", "hFV0A_BCs", kTH1D, {axisMultUltraFineFV0A});
336338
histos.add("hInteractionRate_BCs", "hInteractionRate_BCs", kTH1D, {axisInteractionRate});
337339

@@ -711,14 +713,18 @@ struct centralityStudy {
711713
getHist(TH1, histPath + "hCollisionSelection")->Fill(15);
712714
}
713715
if (evsel.rejectIsFlangeEvent) {
714-
if constexpr (requires { collision.ft0TriggerMask(); }) {
715-
constexpr int IsFlangeEventId = 7;
716-
std::bitset<8> ft0TriggerMask = collision.ft0TriggerMask();
717-
if (ft0TriggerMask[IsFlangeEventId]) {
718-
return;
716+
if constexpr (requires { collision.has_multBC(); }) {
717+
if (collision.has_multBC()) {
718+
auto multbc = collision.template multBC_as<soa::Join<aod::MultBCs, aod::MultBcSel>>();
719+
constexpr int IsFlangeEventId = 7;
720+
std::bitset<8> ft0TriggerMask = multbc.multT0triggerBits();
721+
if (ft0TriggerMask[IsFlangeEventId]) {
722+
return;
723+
}
719724
}
720725
}
721726
}
727+
722728
histos.fill(HIST("hCollisionSelection"), 16 /* reject flange events */);
723729
if (studies.doRunByRunHistograms) {
724730
getHist(TH1, histPath + "hCollisionSelection")->Fill(16);
@@ -865,7 +871,7 @@ struct centralityStudy {
865871

866872
if constexpr (requires { collision.has_multBC(); }) {
867873
if (collision.has_multBC()) {
868-
auto multbc = collision.template multBC_as<aod::MultBCs>();
874+
auto multbc = collision.template multBC_as<soa::Join<aod::MultBCs, aod::MultBcSel>>();
869875
uint64_t bcTimestamp = multbc.timestamp();
870876
const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz
871877
histos.fill(HIST("hInteractionRate"), interactionRate);
@@ -877,7 +883,7 @@ struct centralityStudy {
877883
getHist(TH2, histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C());
878884
getHist(TH2, histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M());
879885
getHist(TH2, histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A());
880-
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0AOuter());
886+
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, multbc.multFV0AOuter());
881887
getHist(TH2, histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks());
882888
getHist(TH2, histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal());
883889
getHist(TH2, histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors());
@@ -890,22 +896,22 @@ struct centralityStudy {
890896
}
891897
}
892898

893-
void processCollisions(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultsGlobal, aod::MultSelections, aod::Mults2BC, aod::FITExtraMults>::iterator const& collision, aod::MultBCs const&)
899+
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&)
894900
{
895901
genericProcessCollision(collision);
896902
}
897903

898-
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&)
904+
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&)
899905
{
900906
genericProcessCollision(collision);
901907
}
902908

903-
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&)
909+
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&)
904910
{
905911
genericProcessCollision(collision);
906912
}
907913

908-
void processCollisionsWithCentralityWithNeighbours(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::MultNeighs, aod::FITExtraMults>::iterator const& collision)
914+
void processCollisionsWithCentralityWithNeighbours(soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal, aod::MultNeighs>::iterator const& collision)
909915
{
910916
genericProcessCollision(collision);
911917
}
@@ -998,7 +1004,7 @@ struct centralityStudy {
9981004
return true;
9991005
}
10001006

1001-
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&)
1007+
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&)
10021008
{
10031009
// process BCs, calculate FT0C distribution
10041010
for (const auto& multbc : multbcs) {
@@ -1009,7 +1015,9 @@ struct centralityStudy {
10091015
// if we got here, we also finally fill the FT0C histogram, please
10101016
histos.fill(HIST("hFT0C_BCs"), multbc.multFT0C() * scale.factorFT0C);
10111017
histos.fill(HIST("hFT0A_BCs"), multbc.multFT0A() * scale.factorFT0A);
1018+
histos.fill(HIST("hFT0AOuter_BCs"), multbc.multFT0AOuter() * scale.factorFT0A);
10121019
histos.fill(HIST("hFT0M_BCs"), (multbc.multFT0A() + multbc.multFT0C()) * scale.factorFT0M);
1020+
histos.fill(HIST("hFT0MOuterA_BCs"), (multbc.multFT0AOuter() + multbc.multFT0C()) * scale.factorFT0M);
10131021
histos.fill(HIST("hFV0A_BCs"), multbc.multFV0A() * scale.factorFV0A);
10141022
histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C);
10151023

@@ -1034,7 +1042,7 @@ struct centralityStudy {
10341042
}
10351043

10361044
if (multbc.has_ft0Mult()) {
1037-
auto multco = multbc.ft0Mult_as<soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::CentFT0Cs, aod::MultsGlobal>>();
1045+
auto multco = multbc.ft0Mult_as<soa::Join<aod::MultsRun3, aod::MFTMults, aod::MultsExtra, aod::MultSelections, aod::MultsGlobal>>();
10381046
if (multbc.multFT0PosZValid()) {
10391047
histos.fill(HIST("hVertexZ_BCvsCO"), multco.multPVz(), multbc.multFT0PosZ());
10401048
}

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)