Skip to content

Commit 6a1d682

Browse files
abylinkinalibuild
andauthored
[PWGUD] Data Model Change: IR and Occupancy (AliceO2Group#8987)
Co-authored-by: ALICE Action Bot <[email protected]>
1 parent a0ff0ba commit 6a1d682

File tree

9 files changed

+195
-33
lines changed

9 files changed

+195
-33
lines changed

PWGUD/DataModel/SGTables.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ DECLARE_SOA_COLUMN(GS, gs, int);
3131
DECLARE_SOA_COLUMN(ZNA, zna, float);
3232
DECLARE_SOA_COLUMN(ZNC, znc, float);
3333
DECLARE_SOA_COLUMN(Ntr, ntr, int);
34+
DECLARE_SOA_COLUMN(Occ, occ, int);
35+
DECLARE_SOA_COLUMN(Ir, ir, float);
3436
} // namespace sgevent
3537
DECLARE_SOA_TABLE(SGEvents, "AOD", "SGEVENT", // o2::soa::Index<>,
36-
sgevent::Run, sgevent::Flag, sgevent::GS, sgevent::ZNA, sgevent::ZNC, sgevent::Ntr);
38+
sgevent::Run, sgevent::Flag, sgevent::GS, sgevent::ZNA, sgevent::ZNC, sgevent::Ntr, sgevent::Occ, sgevent::Ir);
3739
// sgevent::Run, sgevent::Flag);
3840
using SGEvent = SGEvents::iterator;
3941
namespace sgtrack

PWGUD/DataModel/UDTables.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ DECLARE_SOA_COLUMN(TotalFV0AmplitudeA, totalFV0AmplitudeA, float); //! sum of am
101101
DECLARE_SOA_COLUMN(TimeFV0A, timeFV0A, float); //! FV0A average time
102102
DECLARE_SOA_COLUMN(TriggerMaskFV0A, triggerMaskFV0A, uint8_t); //! FV0 trigger mask
103103
DECLARE_SOA_COLUMN(ChFV0A, chFV0A, uint8_t); //! number of FV0A active channels
104+
DECLARE_SOA_COLUMN(OccupancyInTime, occupancyInTime, int);
105+
DECLARE_SOA_COLUMN(HadronicRate, hadronicRate, double);
106+
DECLARE_SOA_COLUMN(Trs, trs, int);
107+
DECLARE_SOA_COLUMN(Trofs, trofs, int);
108+
DECLARE_SOA_COLUMN(Hmpr, hmpr, int);
104109
// Gap Side Information
105110
DECLARE_SOA_COLUMN(GapSide, gapSide, uint8_t); // 0 for side A, 1 for side C, 2 for both sides (or use an enum for better readability)
106111
// FIT selection flags
@@ -203,13 +208,25 @@ DECLARE_SOA_TABLE(UDCollisionsSels, "AOD", "UDCOLLISIONSEL",
203208
udcollision::BBFV0A<udcollision::BBFV0APF>, udcollision::BGFV0A<udcollision::BGFV0APF>,
204209
udcollision::BBFDDA<udcollision::BBFDDAPF>, udcollision::BBFDDC<udcollision::BBFDDCPF>, udcollision::BGFDDA<udcollision::BGFDDAPF>, udcollision::BGFDDC<udcollision::BGFDDCPF>);
205210

206-
DECLARE_SOA_TABLE(UDCollisionSelExtras, "AOD", "UDCOLSELEXTRA",
211+
DECLARE_SOA_TABLE(UDCollisionSelExtras_000, "AOD", "UDCOLSELEXTRA",
207212
udcollision::ChFT0A, //! number of active channels in FT0A
208213
udcollision::ChFT0C, //! number of active channels in FT0C
209214
udcollision::ChFDDA, //! number of active channels in FDDA
210215
udcollision::ChFDDC, //! number of active channels in FDDC
211216
udcollision::ChFV0A); //! number of active channels in FV0A
212217

218+
DECLARE_SOA_TABLE_VERSIONED(UDCollisionSelExtras_001, "AOD", "UDCOLSELEXTRA", 1,
219+
udcollision::ChFT0A, //! number of active channels in FT0A
220+
udcollision::ChFT0C, //! number of active channels in FT0C
221+
udcollision::ChFDDA, //! number of active channels in FDDA
222+
udcollision::ChFDDC, //! number of active channels in FDDC
223+
udcollision::ChFV0A, //! number of active channels in FV0A
224+
udcollision::OccupancyInTime, //! Occupancy
225+
udcollision::HadronicRate, //! Interaction Rate
226+
udcollision::Trs,
227+
udcollision::Trofs,
228+
udcollision::Hmpr);
229+
213230
// central barrel-specific selections
214231
DECLARE_SOA_TABLE(UDCollisionsSelsCent, "AOD", "UDCOLSELCNT",
215232
udcollision::DBcTOR,
@@ -233,6 +250,7 @@ DECLARE_SOA_TABLE(UDMcCollsLabels, "AOD", "UDMCCOLLSLABEL",
233250
udcollision::UDMcCollisionId);
234251

235252
using UDCollisions = UDCollisions_001;
253+
using UDCollisionSelExtras = UDCollisionSelExtras_001;
236254

237255
using UDCollision = UDCollisions::iterator;
238256
using SGCollision = SGCollisions::iterator;

PWGUD/TableProducer/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ add_subdirectory(Converters)
1313

1414
o2physics_add_dpl_workflow(dgcand-producer
1515
SOURCES DGCandProducer.cxx
16-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::DGCutparHolder
16+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::DGCutparHolder O2Physics::AnalysisCCDB
1717
COMPONENT_NAME Analysis)
1818

1919
o2physics_add_dpl_workflow(sgcand-producer
2020
SOURCES SGCandProducer.cxx
21-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::SGCutParHolder
21+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::SGCutParHolder O2Physics::AnalysisCCDB
2222
COMPONENT_NAME Analysis)
2323

2424
o2physics_add_dpl_workflow(dgbccand-producer

PWGUD/TableProducer/Converters/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@ o2physics_add_dpl_workflow(collisions-converter
2020
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
2121
COMPONENT_NAME Analysis)
2222

23+
o2physics_add_dpl_workflow(collisionselextras-converter
24+
SOURCES UDCollisionSelExtrasConverter.cxx
25+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
26+
COMPONENT_NAME Analysis)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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 UDCollisionSelExtrasConverter.cxx
13+
/// \brief Converts UDCollisionSelExtras table from version 000 to 001
14+
15+
/// This task allows for the conversion of the UDCollisionSelExtras table from the version 000,
16+
/// to include occupancy and interaction rate
17+
/// to the version 001, that includes it
18+
19+
/// executable name o2-analysis-ud-collisionselectras-converter
20+
21+
/// \author Sasha Bylinkin <[email protected]>
22+
23+
#include "Framework/runDataProcessing.h"
24+
#include "Framework/AnalysisTask.h"
25+
#include "Framework/AnalysisDataModel.h"
26+
#include "PWGUD/DataModel/UDTables.h"
27+
28+
using namespace o2;
29+
using namespace o2::framework;
30+
31+
// Converts UDCollisions for version 000 to 001
32+
struct UDCollisionSelExtrasConverter {
33+
Produces<o2::aod::UDCollisionSelExtras_001> udCollisionSelExtras_001;
34+
35+
void process(o2::aod::UDCollisionSelExtras_000 const& collisions)
36+
{
37+
38+
for (const auto& collision : collisions) {
39+
40+
udCollisionSelExtras_001(collision.chFT0A(),
41+
collision.chFT0C(),
42+
collision.chFDDA(),
43+
collision.chFDDC(),
44+
collision.chFV0A(),
45+
0, // dummy occupancy
46+
0.0f, // dummy rate
47+
0, // dummy trs
48+
0, // dummy trofs
49+
0); // dummy hmpr
50+
}
51+
}
52+
};
53+
54+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
55+
{
56+
return WorkflowSpec{
57+
adaptAnalysisTask<UDCollisionSelExtrasConverter>(cfgc),
58+
};
59+
}

PWGUD/TableProducer/DGCandProducer.cxx

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
#include <vector>
1616
#include <string>
1717
#include <map>
18+
#include "CCDB/BasicCCDBManager.h"
1819
#include "Framework/runDataProcessing.h"
1920
#include "Framework/AnalysisTask.h"
2021
#include "ReconstructionDataFormats/Vertex.h"
22+
#include "Common/CCDB/ctpRateFetcher.h"
2123
#include "PWGUD/DataModel/UDTables.h"
2224
#include "PWGUD/Core/UPCHelpers.h"
2325
#include "PWGUD/Core/DGSelector.h"
@@ -27,6 +29,8 @@ using namespace o2::framework;
2729
using namespace o2::framework::expressions;
2830

2931
struct DGCandProducer {
32+
Service<o2::ccdb::BasicCCDBManager> ccdb;
33+
ctpRateFetcher mRateFetcher;
3034
// get a DGCutparHolder
3135
DGCutparHolder diffCuts = DGCutparHolder();
3236
Configurable<DGCutparHolder> DGCuts{"DGCuts", {}, "DG event cuts"};
@@ -39,6 +43,7 @@ struct DGCandProducer {
3943
// data tables
4044
Produces<aod::UDCollisions> outputCollisions;
4145
Produces<aod::UDCollisionsSels> outputCollisionsSels;
46+
Produces<aod::UDCollisionSelExtras> outputCollisionSelExtras;
4247
Produces<aod::UDCollsLabels> outputCollsLabels;
4348
Produces<aod::UDZdcs> outputZdcs;
4449
Produces<aod::UDZdcsReduced> outputZdcsReduced;
@@ -198,7 +203,9 @@ struct DGCandProducer {
198203
void init(InitContext&)
199204
{
200205
LOGF(debug, "<DGCandProducer> beginning of init reached");
201-
206+
ccdb->setURL("http://alice-ccdb.cern.ch");
207+
ccdb->setCaching(true);
208+
ccdb->setFatalWhenNull(false);
202209
diffCuts = (DGCutparHolder)DGCuts;
203210

204211
const int nXbinsInStatH = 25;
@@ -250,6 +257,31 @@ struct DGCandProducer {
250257
}
251258
registry.get<TH1>(HIST("reco/Stat"))->Fill(1., 1.);
252259
auto bc = collision.foundBC_as<BCs>();
260+
int trs = 0;
261+
if (collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
262+
trs = 1;
263+
}
264+
int trofs = 0;
265+
if (collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
266+
trofs = 1;
267+
}
268+
int hmpr = 0;
269+
if (collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
270+
hmpr = 1;
271+
}
272+
double ir = 0.;
273+
const uint64_t ts = bc.timestamp();
274+
const int runnumber = bc.runNumber();
275+
if (bc.has_zdc()) {
276+
ir = mRateFetcher.fetch(ccdb.service, ts, runnumber, "ZNC hadronic") * 1.e-3;
277+
}
278+
uint8_t chFT0A = 0;
279+
uint8_t chFT0C = 0;
280+
uint8_t chFDDA = 0;
281+
uint8_t chFDDC = 0;
282+
uint8_t chFV0A = 0;
283+
int occ = 0;
284+
occ = collision.trackOccupancyInTimeRange();
253285
LOGF(debug, "<DGCandProducer> BC id %d", bc.globalBC());
254286

255287
// fill FIT histograms
@@ -289,6 +321,7 @@ struct DGCandProducer {
289321
fitInfo.BBFT0Apf, fitInfo.BBFT0Cpf, fitInfo.BGFT0Apf, fitInfo.BGFT0Cpf,
290322
fitInfo.BBFV0Apf, fitInfo.BGFV0Apf,
291323
fitInfo.BBFDDApf, fitInfo.BBFDDCpf, fitInfo.BGFDDApf, fitInfo.BGFDDCpf);
324+
outputCollisionSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A, occ, ir, trs, trofs, hmpr);
292325
outputCollsLabels(collision.globalIndex());
293326

294327
// update DGTracks tables

PWGUD/TableProducer/SGCandProducer.cxx

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,45 @@
1212
#include <cmath>
1313
#include <vector>
1414
#include <map>
15+
#include "CCDB/BasicCCDBManager.h"
1516
#include "Framework/ASoA.h"
1617
#include "Framework/AnalysisDataModel.h"
1718
#include "ReconstructionDataFormats/Vertex.h"
18-
#include "Common/CCDB/EventSelectionParams.h"
19-
#include "Common/DataModel/EventSelection.h"
2019
#include "CommonConstants/LHCConstants.h"
2120
#include "DataFormatsFIT/Triggers.h"
21+
#include "DataFormatsParameters/GRPMagField.h"
22+
#include "DataFormatsParameters/GRPObject.h"
2223

23-
#include "Framework/runDataProcessing.h"
2424
#include "Framework/AnalysisTask.h"
25+
#include "Framework/ASoAHelpers.h"
26+
#include "Framework/HistogramRegistry.h"
27+
#include "Framework/runDataProcessing.h"
28+
#include "Common/CCDB/EventSelectionParams.h"
29+
#include "Common/CCDB/ctpRateFetcher.h"
30+
#include "Common/DataModel/EventSelection.h"
2531
#include "PWGUD/DataModel/UDTables.h"
2632
#include "PWGUD/Core/UPCHelpers.h"
2733
#include "PWGUD/Core/SGSelector.h"
2834

2935
using namespace o2;
3036
using namespace o2::framework;
3137
using namespace o2::framework::expressions;
38+
using namespace o2::dataformats;
3239

3340
struct SGCandProducer {
41+
Service<o2::ccdb::BasicCCDBManager> ccdb;
42+
// data inputs
43+
using CCs = soa::Join<aod::Collisions, aod::EvSels>;
44+
using CC = CCs::iterator;
45+
using BCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
46+
using BC = BCs::iterator;
47+
using TCs = soa::Join<aod::Tracks, /*aod::TracksCov,*/ aod::TracksExtra, aod::TracksDCA, aod::TrackSelection,
48+
aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr,
49+
aod::pidTPCFullDe, aod::pidTPCFullTr, aod::pidTPCFullHe, aod::pidTPCFullAl,
50+
aod::TOFSignal, aod::pidTOFbeta,
51+
aod::pidTOFFullDe, aod::pidTOFFullTr, aod::pidTOFFullHe, aod::pidTOFFullAl,
52+
aod::pidTOFFullEl, aod::pidTOFFullMu, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>;
53+
using FWs = aod::FwdTracks;
3454
// get an SGCutparHolder
3555
SGCutParHolder sameCuts = SGCutParHolder(); // SGCutparHolder
3656
Configurable<SGCutParHolder> SGCuts{"SGCuts", {}, "SG event cuts"};
@@ -46,14 +66,15 @@ struct SGCandProducer {
4666
// Configurables to decide which tables are filled
4767
Configurable<bool> fillTrackTables{"fillTrackTables", true, "Fill track tables"};
4868
Configurable<bool> fillFwdTrackTables{"fillFwdTrackTables", true, "Fill forward track tables"};
49-
5069
// SG selector
5170
SGSelector sgSelector;
71+
ctpRateFetcher mRateFetcher;
5272

5373
// data tables
5474
Produces<aod::SGCollisions> outputSGCollisions;
5575
Produces<aod::UDCollisions> outputCollisions;
5676
Produces<aod::UDCollisionsSels> outputCollisionsSels;
77+
Produces<aod::UDCollisionSelExtras> outputCollisionSelExtras;
5778
Produces<aod::UDCollsLabels> outputCollsLabels;
5879
Produces<aod::UDZdcs> outputZdcs;
5980
Produces<aod::UDZdcsReduced> udZdcsReduced;
@@ -73,19 +94,6 @@ struct SGCandProducer {
7394
"registry",
7495
{}};
7596

76-
// data inputs
77-
using CCs = soa::Join<aod::Collisions, aod::EvSels>;
78-
using CC = CCs::iterator;
79-
using BCs = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
80-
using BC = BCs::iterator;
81-
using TCs = soa::Join<aod::Tracks, /*aod::TracksCov,*/ aod::TracksExtra, aod::TracksDCA, aod::TrackSelection,
82-
aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr,
83-
aod::pidTPCFullDe, aod::pidTPCFullTr, aod::pidTPCFullHe, aod::pidTPCFullAl,
84-
aod::TOFSignal, aod::pidTOFbeta,
85-
aod::pidTOFFullDe, aod::pidTOFFullTr, aod::pidTOFFullHe, aod::pidTOFFullAl,
86-
aod::pidTOFFullEl, aod::pidTOFFullMu, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>;
87-
using FWs = aod::FwdTracks;
88-
8997
// function to update UDFwdTracks, UDFwdTracksExtra
9098
template <typename TFwdTrack>
9199
void updateUDFwdTrackTables(TFwdTrack const& fwdtrack, uint64_t const& bcnum)
@@ -165,6 +173,9 @@ struct SGCandProducer {
165173

166174
void init(InitContext&)
167175
{
176+
ccdb->setURL("http://alice-ccdb.cern.ch");
177+
ccdb->setCaching(true);
178+
ccdb->setFatalWhenNull(false);
168179
sameCuts = (SGCutParHolder)SGCuts;
169180
registry.add("reco/Stat", "Cut statistics; Selection criterion; Collisions", {HistType::kTH1F, {{14, -0.5, 13.5}}});
170181
}
@@ -206,7 +217,25 @@ struct SGCandProducer {
206217
return;
207218
}
208219
registry.get<TH1>(HIST("reco/Stat"))->Fill(6., 1.);
220+
int trs = 0;
221+
if (collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
222+
trs = 1;
223+
}
224+
int trofs = 0;
225+
if (collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
226+
trofs = 1;
227+
}
228+
int hmpr = 0;
229+
if (collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
230+
hmpr = 1;
231+
}
209232
auto bc = collision.foundBC_as<BCs>();
233+
double ir = 0.;
234+
const uint64_t ts = bc.timestamp();
235+
const int runnumber = bc.runNumber();
236+
if (bc.has_zdc()) {
237+
ir = mRateFetcher.fetch(ccdb.service, ts, runnumber, "ZNC hadronic") * 1.e-3;
238+
}
210239
auto newbc = bc;
211240

212241
// obtain slice of compatible BCs
@@ -229,6 +258,13 @@ struct SGCandProducer {
229258
return;
230259
}
231260
upchelpers::FITInfo fitInfo{};
261+
uint8_t chFT0A = 0;
262+
uint8_t chFT0C = 0;
263+
uint8_t chFDDA = 0;
264+
uint8_t chFDDC = 0;
265+
uint8_t chFV0A = 0;
266+
int occ = 0;
267+
occ = collision.trackOccupancyInTimeRange();
232268
udhelpers::getFITinfo(fitInfo, newbc, bcs, ft0s, fv0as, fdds);
233269
// update SG candidates tables
234270
int upc_flag = 0;
@@ -249,6 +285,7 @@ struct SGCandProducer {
249285
fitInfo.BBFT0Apf, fitInfo.BBFT0Cpf, fitInfo.BGFT0Apf, fitInfo.BGFT0Cpf,
250286
fitInfo.BBFV0Apf, fitInfo.BGFV0Apf,
251287
fitInfo.BBFDDApf, fitInfo.BBFDDCpf, fitInfo.BGFDDApf, fitInfo.BGFDDCpf);
288+
outputCollisionSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A, occ, ir, trs, trofs, hmpr);
252289
outputCollsLabels(collision.globalIndex());
253290
if (newbc.has_zdc()) {
254291
auto zdc = newbc.zdc();

PWGUD/TableProducer/UPCCandidateProducer.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,7 +1466,7 @@ struct UpcCandProducer {
14661466
fitInfo.BBFT0Apf, fitInfo.BBFT0Cpf, fitInfo.BGFT0Apf, fitInfo.BGFT0Cpf,
14671467
fitInfo.BBFV0Apf, fitInfo.BGFV0Apf,
14681468
fitInfo.BBFDDApf, fitInfo.BBFDDCpf, fitInfo.BGFDDApf, fitInfo.BGFDDCpf);
1469-
eventCandidatesSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A);
1469+
eventCandidatesSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A, 0, 0, 0, 0, 0);
14701470
eventCandidatesSelsFwd(fitInfo.distClosestBcV0A,
14711471
fitInfo.distClosestBcT0A,
14721472
amplitudesT0A,
@@ -1724,7 +1724,7 @@ struct UpcCandProducer {
17241724
fitInfo.BBFT0Apf, fitInfo.BBFT0Cpf, fitInfo.BGFT0Apf, fitInfo.BGFT0Cpf,
17251725
fitInfo.BBFV0Apf, fitInfo.BGFV0Apf,
17261726
fitInfo.BBFDDApf, fitInfo.BBFDDCpf, fitInfo.BGFDDApf, fitInfo.BGFDDCpf);
1727-
eventCandidatesSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A);
1727+
eventCandidatesSelExtras(chFT0A, chFT0C, chFDDA, chFDDC, chFV0A, 0, 0, 0, 0, 0);
17281728
eventCandidatesSelsFwd(fitInfo.distClosestBcV0A,
17291729
fitInfo.distClosestBcT0A,
17301730
amplitudesT0A,

0 commit comments

Comments
 (0)