Skip to content

Commit 89be51e

Browse files
committed
add CCDB-driven info
1 parent c4d8fed commit 89be51e

3 files changed

Lines changed: 46 additions & 57 deletions

File tree

DPG/Tasks/AOTTrack/PID/TPC/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ o2physics_add_dpl_workflow(pid-tpc-qa-mc
2727

2828
o2physics_add_dpl_workflow(tree-creator-pid-tpc-qa
2929
SOURCES treeCreatorPidTpcQa.cxx
30-
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
30+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::AnalysisCCDB
3131
COMPONENT_NAME Analysis)

DPG/Tasks/AOTTrack/PID/TPC/treeCreatorPidTpcQa.cxx

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717

1818
#include "treeCreatorPidTpcQa.h"
1919

20+
#include "Common/CCDB/ctpRateFetcher.h"
2021
#include "Common/DataModel/EventSelection.h"
2122
#include "Common/DataModel/Multiplicity.h"
2223
#include "Common/DataModel/PIDResponseTOF.h"
2324
#include "Common/DataModel/PIDResponseTPC.h"
2425
#include "Common/DataModel/TrackSelectionTables.h"
2526
#include "DPG/Tasks/TPC/tpcSkimsTableCreator.h"
27+
#include "DPG/Tasks/TPC/utilsTpcSkimsTableCreator.h"
2628

29+
#include <CCDB/BasicCCDBManager.h>
2730
#include <Framework/ASoA.h>
2831
#include <Framework/AnalysisHelpers.h>
2932
#include <Framework/AnalysisTask.h>
@@ -35,11 +38,12 @@
3538
#include <ReconstructionDataFormats/PID.h>
3639

3740
#include <cmath>
41+
#include <string>
3842

3943
using namespace o2;
4044
using namespace o2::framework;
4145
using namespace o2::track;
42-
using namespace o2::dpg_pidtpcqa;
46+
using namespace o2::dpg_tpcskimstablecreator;
4347

4448
struct treeCreatorPidTpcQa {
4549
Produces<o2::aod::QaPidTpc> rowPidTpcQa;
@@ -52,6 +56,12 @@ struct treeCreatorPidTpcQa {
5256
Configurable<int16_t> cutMinTPCNcls{"cutMinTPCNcls", 0, "Minimum number or TPC Clusters for tracks"};
5357
Configurable<float> cutRapidity{"cutRapidity", 0.5, "Rapidity cut. Set negative value to switch this cut off"};
5458
Configurable<float> nClNorm{"nClNorm", 152., "Number of cluster normalization. Run 2: 159, Run 3 152"};
59+
// Configurable for the path of CCDB General Run Parameters LHC Interface information
60+
Configurable<std::string> ccdbPathGrpLhcIf{"ccdbPathGrpLhcIf", "GLO/Config/GRPLHCIF", "Path on the CCDB for the GRPLHCIF object"};
61+
62+
Service<o2::ccdb::BasicCCDBManager> ccdb{};
63+
64+
ctpRateFetcher mRateFetcher{};
5565

5666
using CollisionsExtra = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
5767
using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection>;
@@ -60,25 +70,6 @@ struct treeCreatorPidTpcQa {
6070

6171
int mEnabledParticles{0};
6272

63-
// Track selection
64-
template <typename TrackType>
65-
bool isTrackSelected(const TrackType& track)
66-
{
67-
bool isSelected{false};
68-
isSelected |= trackSelection == TrackSelectionNoCut;
69-
isSelected |= (trackSelection == TrackSelectionGlobalTrack) && track.isGlobalTrack();
70-
isSelected |= (trackSelection == TrackSelectionTrackWoPtEta) && track.isGlobalTrackWoPtEta();
71-
isSelected |= (trackSelection == TrackSelectionGlobalTrackWoDCA) && track.isGlobalTrackWoDCA();
72-
isSelected |= (trackSelection == TrackSelectionQualityTracks) && track.isQualityTrack();
73-
isSelected |= (trackSelection == TrackSelectionInAcceptanceTracks) && track.isInAcceptanceTrack();
74-
isSelected &= (!requireGlobalTrack || track.isGlobalTrack());
75-
isSelected &= (!requireIts || track.hasITS());
76-
isSelected &= track.hasTPC();
77-
isSelected &= (track.tpcNClsFound() >= cutMinTPCNcls);
78-
79-
return isSelected;
80-
}
81-
8273
template <o2::track::PID::ID Id>
8374
bool initPerParticle()
8475
{
@@ -125,6 +116,10 @@ struct treeCreatorPidTpcQa {
125116
static_for<0, PID::Alpha>([&](auto Id) {
126117
mEnabledParticles += static_cast<int>(initPerParticle<Id>());
127118
});
119+
120+
ccdb->setURL("http://alice-ccdb.cern.ch");
121+
ccdb->setCaching(true);
122+
ccdb->setFatalWhenNull(false);
128123
}
129124

130125
template <o2::track::PID::ID Id, typename TrackType>
@@ -133,20 +128,35 @@ struct treeCreatorPidTpcQa {
133128
{
134129
rowPidTpcQa.reserve(tracks.size() * mEnabledParticles);
135130

131+
std::string irSource{};
132+
float sqrtSNN{}; // placeholder to satisfy evaluateIrSourceAndSqrtSnn's signature
133+
bool isFirstCollision{true};
136134
for (const auto& collision : collisions) {
137135
if (!isEventSelected(collision, applyEvSel) || ((cutVtxZ > 0.f) && std::abs(collision.posZ()) > cutVtxZ)) {
138136
continue;
139137
}
140138

139+
const auto bc = collision.bc_as<aod::BCsWithTimestamps>();
140+
if (isFirstCollision) {
141+
evaluateIrSourceAndSqrtSnn(ccdb, ccdbPathGrpLhcIf, bc.timestamp(), irSource, sqrtSNN);
142+
}
143+
isFirstCollision = false;
141144
const float ft0Occ = collision.ft0cOccupancyInTimeRange();
142-
const float multTPC = collision.multTPC() / dpg_tpcskimstablecreator::MultiplicityNorm;
145+
const float multTPC = collision.multTPC() / MultiplicityNorm;
146+
const auto hadronicRate = !irSource.empty() ? mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSource) * OneToKilo : 0.;
143147

144148
const auto tracksFromCollision = tracks.sliceBy(perCollisionTracks, static_cast<int>(collision.globalIndex()));
145149

146150
for (const auto& track : tracksFromCollision) {
147-
if (!isTrackSelected(track)) {
151+
bool isGoodTrack = isTrackSelected(track, trackSelection);
152+
isGoodTrack &= (!requireGlobalTrack || track.isGlobalTrack());
153+
isGoodTrack &= (!requireIts || track.hasITS());
154+
isGoodTrack &= track.hasTPC();
155+
isGoodTrack &= (track.tpcNClsFound() >= cutMinTPCNcls);
156+
if (!isGoodTrack) {
148157
continue;
149158
}
159+
150160
const float rapidity = track.rapidity(PID::getMass(Id));
151161
if (cutRapidity > 0.f && std::fabs(rapidity) > cutRapidity) {
152162
continue;
@@ -157,15 +167,16 @@ struct treeCreatorPidTpcQa {
157167
const float tgl = track.tgl();
158168
const float tpcInnerParam = track.tpcInnerParam();
159169

160-
rowPidTpcQa(Id, ft0Occ, multTPC, nClNormalized, phi, tgl, tpcInnerParam, rapidity);
161-
} // tracks
170+
rowPidTpcQa(Id, ft0Occ, hadronicRate, multTPC, nClNormalized, phi, tgl, tpcInnerParam, rapidity);
171+
} // tracksFromCollision
162172
} // collisions
163173
}
164174

165175
// QA of nsigma only tables
166176
#define MAKE_PROCESS_FUNCTION(PidTableTPC, ParticleId) \
167177
void process##ParticleId(CollisionsExtra const& collisions, \
168-
soa::Join<TrackCandidates, PidTableTPC> const& tracks) \
178+
soa::Join<TrackCandidates, PidTableTPC> const& tracks, \
179+
aod::BCsWithTimestamps const&) \
169180
{ \
170181
processSingleParticle<PID::ParticleId>(collisions, tracks); \
171182
} \
@@ -185,7 +196,8 @@ struct treeCreatorPidTpcQa {
185196
// QA of full tables
186197
#define MAKE_PROCESS_FUNCTION(PidTableTPC, ParticleId) \
187198
void processFull##ParticleId(CollisionsExtra const& collisions, \
188-
soa::Join<TrackCandidates, PidTableTPC> const& tracks) \
199+
soa::Join<TrackCandidates, PidTableTPC> const& tracks, \
200+
aod::BCsWithTimestamps const&) \
189201
{ \
190202
processSingleParticle<PID::ParticleId>(collisions, tracks); \
191203
} \
@@ -205,7 +217,8 @@ struct treeCreatorPidTpcQa {
205217
// QA of full tables with TOF information
206218
#define MAKE_PROCESS_FUNCTION(PidTableTPC, PidTableTOF, ParticleId) \
207219
void processFullWithTOF##ParticleId(CollisionsExtra const& collisions, \
208-
soa::Join<TrackCandidates, PidTableTPC, PidTableTOF> const& tracks) \
220+
soa::Join<TrackCandidates, PidTableTPC, PidTableTOF> const& tracks, \
221+
aod::BCsWithTimestamps const&) \
209222
{ \
210223
processSingleParticle<PID::ParticleId>(collisions, tracks); \
211224
} \

DPG/Tasks/AOTTrack/PID/TPC/treeCreatorPidTpcQa.h

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,20 @@
1414
/// \author Oleksii Lubynets <oleksii.lubynets@cern.ch>
1515
/// \brief Creates trees with PID QA variables along with variables used for NN training
1616

17+
#ifndef DPG_TASKS_AOTTRACK_PID_TPC_TREECREATORPIDTPCQA_H_
18+
#define DPG_TASKS_AOTTRACK_PID_TPC_TREECREATORPIDTPCQA_H_
19+
1720
#include "DPG/Tasks/TPC/tpcSkimsTableCreator.h"
1821

1922
#include <Framework/ASoA.h>
20-
21-
#ifndef DPG_TASKS_AOTTRACK_PID_TPC_TREECREATORPIDTPCQA_H_
22-
#define DPG_TASKS_AOTTRACK_PID_TPC_TREECREATORPIDTPCQA_H_
23+
#include <Framework/AnalysisDataModel.h>
2324

2425
namespace o2::aod
2526
{
2627
DECLARE_SOA_TABLE(QaPidTpc, "AOD", "QAPIDTPC",
2728
tpcskims::PidIndex,
2829
tpcskims::Ft0Occ,
30+
tpcskims::HadronicRate,
2931
tpcskims::NormMultTPC,
3032
tpcskims::NormNClustersTPC,
3133
o2::aod::track::Phi,
@@ -34,30 +36,4 @@ DECLARE_SOA_TABLE(QaPidTpc, "AOD", "QAPIDTPC",
3436
o2::aod::track::Y)
3537
} // namespace o2::aod
3638

37-
namespace o2::dpg_pidtpcqa
38-
{
39-
enum {
40-
TrackSelectionNoCut = 0,
41-
TrackSelectionGlobalTrack,
42-
TrackSelectionTrackWoPtEta,
43-
TrackSelectionGlobalTrackWoDCA,
44-
TrackSelectionQualityTracks,
45-
TrackSelectionInAcceptanceTracks
46-
};
47-
48-
enum {
49-
EventSelectionNo = 0,
50-
EventSelectionRun2,
51-
EventSelectionRun3
52-
};
53-
54-
/// Event selection
55-
template <typename CollisionType>
56-
bool isEventSelected(const CollisionType& collision, const int applyEvSel)
57-
{
58-
return ((applyEvSel == EventSelectionRun2 && !collision.sel7()) || (applyEvSel == EventSelectionRun3 && !collision.sel8()));
59-
}
60-
61-
}; // namespace o2::dpg_pidtpcqa
62-
6339
#endif // DPG_TASKS_AOTTRACK_PID_TPC_TREECREATORPIDTPCQA_H_

0 commit comments

Comments
 (0)