Skip to content

Commit fb4ba20

Browse files
authored
[PWGLF] add truncated mean histograms and configurable to run on skimmed data (#11841)
1 parent 8bca775 commit fb4ba20

File tree

2 files changed

+91
-15
lines changed

2 files changed

+91
-15
lines changed

PWGLF/Tasks/QC/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ o2physics_add_dpl_workflow(mcinelgt0
112112

113113
o2physics_add_dpl_workflow(tracked-cascade-properties
114114
SOURCES trackedCascadeProperties.cxx
115-
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
115+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::EventFilteringUtils
116116
COMPONENT_NAME Analysis)
117117

118118
o2physics_add_dpl_workflow(mc-particle-predictions

PWGLF/Tasks/QC/trackedCascadeProperties.cxx

Lines changed: 90 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,38 @@
1616
/// \author Alberto Caliva (alberto.caliva@cern.ch), Francesca Ercolessi (francesca.ercolessi@cern.ch)
1717
/// \since May 31, 2024
1818

19-
#include <TMath.h>
20-
#include <TObjArray.h>
21-
#include <TPDGCode.h>
22-
#include <TVector2.h>
23-
#include <TVector3.h>
24-
#include <cmath>
25-
#include <vector>
26-
#include <algorithm>
19+
#include "PWGLF/DataModel/LFStrangenessTables.h"
2720

2821
#include "Common/Core/RecoDecay.h"
22+
#include "Common/Core/TrackSelection.h"
2923
#include "Common/Core/trackUtilities.h"
3024
#include "Common/DataModel/EventSelection.h"
31-
#include "Common/DataModel/PIDResponse.h"
3225
#include "Common/DataModel/Multiplicity.h"
33-
#include "Common/Core/TrackSelection.h"
26+
#include "Common/DataModel/PIDResponse.h"
3427
#include "Common/DataModel/TrackSelectionTables.h"
28+
#include "EventFiltering/Zorro.h"
29+
#include "EventFiltering/ZorroSummary.h"
30+
31+
#include "CCDB/BasicCCDBManager.h"
32+
#include "CCDB/CcdbApi.h"
3533
#include "Framework/ASoA.h"
3634
#include "Framework/ASoAHelpers.h"
3735
#include "Framework/AnalysisDataModel.h"
3836
#include "Framework/AnalysisTask.h"
3937
#include "Framework/runDataProcessing.h"
40-
#include "PWGLF/DataModel/LFStrangenessTables.h"
41-
#include "ReconstructionDataFormats/Track.h"
4238
#include "ReconstructionDataFormats/DCA.h"
39+
#include "ReconstructionDataFormats/Track.h"
40+
41+
#include <TMath.h>
42+
#include <TObjArray.h>
43+
#include <TPDGCode.h>
44+
#include <TVector2.h>
45+
#include <TVector3.h>
46+
47+
#include <algorithm>
48+
#include <cmath>
49+
#include <string>
50+
#include <vector>
4351

4452
using namespace std;
4553
using namespace o2;
@@ -54,6 +62,12 @@ using FullTracks = soa::Join<aod::Tracks, aod::TracksIU, aod::TracksExtra, aod::
5462

5563
struct TrackedCascadeProperties {
5664

65+
Service<o2::ccdb::BasicCCDBManager> ccdb;
66+
o2::ccdb::CcdbApi ccdbApi;
67+
68+
Zorro zorro;
69+
OutputObj<ZorroSummary> zorroSummary{"zorroSummary"};
70+
5771
// QC Histograms
5872
HistogramRegistry registryQC{
5973
"registryQC",
@@ -72,15 +86,28 @@ struct TrackedCascadeProperties {
7286

7387
// Global Parameters
7488
Configurable<float> zVtx{"zVtx", 10.0f, "z vertex cut"};
89+
Configurable<bool> cfgSkimmedProcessing{"cfgSkimmedProcessing", false, "Skimmed dataset processing"};
90+
Configurable<std::string> cfgTriggerName{"cfgTriggerName", "fOmega", "trigger Name"};
7591

7692
// Mass Cuts
7793
Configurable<float> massMinXi{"massMinXi", 1.315f, "mMin Xi"};
7894
Configurable<float> massMaxXi{"massMaxXi", 1.328f, "mMax Xi"};
7995
Configurable<float> massMinOmega{"massMinOmega", 1.665f, "mMin Omega"};
8096
Configurable<float> massMaxOmega{"massMaxOmega", 1.680f, "mMax Omega"};
8197

98+
void initCCDB(aod::BCsWithTimestamps::iterator const& bc)
99+
{
100+
if (cfgSkimmedProcessing) {
101+
zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), cfgTriggerName.value);
102+
}
103+
}
104+
82105
void init(InitContext const&)
83106
{
107+
if (cfgSkimmedProcessing) {
108+
zorroSummary.setObject(zorro.getZorroSummary());
109+
}
110+
84111
registryQC.add("matchingChi2", "matching Chi2", HistType::kTH1F, {{200, 0, 1000, "#chi^{2}_{matching}"}});
85112
registryQC.add("topologyChi2", "topology Chi2", HistType::kTH1F, {{500, 0, 0.5, "#chi^{2}_{topology}"}});
86113
registryQC.add("nITScls_vs_p_xi", "nITS Xi", HistType::kTH2F, {{100, 0, 10, "#it{p} (GeV/#it{c})"}, {8, 0, 8, "n_{ITS}^{cls}"}});
@@ -109,6 +136,17 @@ struct TrackedCascadeProperties {
109136
registryData.add("omega_pos_avgclustersize_cosL_vs_betagamma", "omega_pos_avgclustersize_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
110137
registryData.add("omega_neg_avgclustersize_cosL_vs_betagamma", "omega_neg_avgclustersize_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
111138

139+
// Cluster size using truncated mean
140+
registryData.add("xi_pos_avgclustersize_trunc_cosL", "xi_pos_avgclustersize_trunc_cosL", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
141+
registryData.add("xi_neg_avgclustersize_trunc_cosL", "xi_neg_avgclustersize_trunc_cosL", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
142+
registryData.add("omega_pos_avgclustersize_trunc_cosL", "omega_pos_avgclustersize_trunc_cosL", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
143+
registryData.add("omega_neg_avgclustersize_trunc_cosL", "omega_neg_avgclustersize_trunc_cosL", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
144+
145+
registryData.add("xi_pos_avgclustersize_trunc_cosL_vs_betagamma", "xi_pos_avgclustersize_trunc_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
146+
registryData.add("xi_neg_avgclustersize_trunc_cosL_vs_betagamma", "xi_neg_avgclustersize_trunc_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
147+
registryData.add("omega_pos_avgclustersize_trunc_cosL_vs_betagamma", "omega_pos_avgclustersize_trunc_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
148+
registryData.add("omega_neg_avgclustersize_trunc_cosL_vs_betagamma", "omega_neg_avgclustersize_trunc_cosL_vs_betagamma", HistType::kTH2F, {{200, 0.0, 10.0, "#beta#gamma"}, {100, 0.0, 20.0, "#LT ITS cluster size #GT cos(#lambda)"}});
149+
112150
registryData.add("xi_mass_pos", "xi_mass_pos", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {200, 1.28, 1.36, "m_{p#pi#pi} (GeV/#it{c}^{2})"}});
113151
registryData.add("xi_mass_neg", "xi_mass_neg", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {200, 1.28, 1.36, "m_{p#pi#pi} (GeV/#it{c}^{2})"}});
114152
registryData.add("omega_mass_pos", "omega_mass_pos", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p} (GeV/#it{c})"}, {200, 1.63, 1.71, "m_{p#piK} (GeV/#it{c}^{2})"}});
@@ -140,14 +178,22 @@ struct TrackedCascadeProperties {
140178
aod::Cascades const&, FullTracks const&)
141179
{
142180
registryData.fill(HIST("number_of_events_data"), 0.5);
181+
182+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
183+
initCCDB(bc);
184+
if (cfgSkimmedProcessing && !zorro.isSelected(collision.template bc_as<aod::BCsWithTimestamps>().globalBC())) {
185+
return;
186+
}
187+
registryData.fill(HIST("number_of_events_data"), 1.5);
188+
143189
if (!collision.sel8())
144190
return;
145191

146-
registryData.fill(HIST("number_of_events_data"), 1.5);
192+
registryData.fill(HIST("number_of_events_data"), 2.5);
147193
if (std::abs(collision.posZ()) > zVtx)
148194
return;
149195

150-
registryData.fill(HIST("number_of_events_data"), 2.5);
196+
registryData.fill(HIST("number_of_events_data"), 3.5);
151197

152198
std::vector<double> edgesItsLayers = {0.0, 2.2, 2.8, 3.6, 20.0, 22.0, 37.0, 39.0, 100.0};
153199

@@ -188,6 +234,28 @@ struct TrackedCascadeProperties {
188234
}
189235
averageClusterSize = averageClusterSize / static_cast<double>(nCls);
190236

237+
// Average cluster size using truncated mean
238+
double averageClusterSizeTrunc = 0.0;
239+
int nClsTrunc = 0;
240+
double clusterSizeMax = 0.0;
241+
242+
for (int i = 0; i < nClsCascade; i++) {
243+
double clusterSize = static_cast<double>(trackITS.itsClsSizeInLayer(i));
244+
if (clusterSize > clusterSizeMax) {
245+
clusterSizeMax = clusterSize;
246+
}
247+
248+
averageClusterSizeTrunc += clusterSize;
249+
if (clusterSize > 0)
250+
nClsTrunc++;
251+
}
252+
253+
if (nClsTrunc > 1) {
254+
averageClusterSizeTrunc = (averageClusterSizeTrunc - clusterSizeMax) / static_cast<double>(nClsTrunc - 1);
255+
} else {
256+
averageClusterSizeTrunc = 0.0;
257+
}
258+
191259
registryQC.fill(HIST("deltaNclsITS_track"), nCls - track.itsNCls());
192260
registryQC.fill(HIST("deltaNclsITS_itstrack"), nCls - trackITS.itsNCls());
193261

@@ -209,11 +277,15 @@ struct TrackedCascadeProperties {
209277
registryData.fill(HIST("xi_pos_avgclustersize"), track.p(), averageClusterSize, track.eta());
210278
registryData.fill(HIST("xi_pos_avgclustersize_cosL"), track.p(), averageClusterSize * std::cos(lambda));
211279
registryData.fill(HIST("xi_pos_avgclustersize_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiPlusBar, averageClusterSize * std::cos(lambda));
280+
registryData.fill(HIST("xi_pos_avgclustersize_trunc_cosL"), track.p(), averageClusterSizeTrunc * std::cos(lambda));
281+
registryData.fill(HIST("xi_pos_avgclustersize_trunc_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiPlusBar, averageClusterSizeTrunc * std::cos(lambda));
212282
}
213283
if (btrack.sign() < 0) {
214284
registryData.fill(HIST("xi_neg_avgclustersize"), track.p(), averageClusterSize, track.eta());
215285
registryData.fill(HIST("xi_neg_avgclustersize_cosL"), track.p(), averageClusterSize * std::cos(lambda));
216286
registryData.fill(HIST("xi_neg_avgclustersize_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiMinus, averageClusterSize * std::cos(lambda));
287+
registryData.fill(HIST("xi_neg_avgclustersize_trunc_cosL"), track.p(), averageClusterSizeTrunc * std::cos(lambda));
288+
registryData.fill(HIST("xi_neg_avgclustersize_trunc_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiPlusBar, averageClusterSizeTrunc * std::cos(lambda));
217289
}
218290
continue;
219291
}
@@ -233,11 +305,15 @@ struct TrackedCascadeProperties {
233305
registryData.fill(HIST("omega_pos_avgclustersize"), track.p(), averageClusterSize, track.eta());
234306
registryData.fill(HIST("omega_pos_avgclustersize_cosL"), track.p(), averageClusterSize * std::cos(lambda));
235307
registryData.fill(HIST("omega_pos_avgclustersize_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassOmegaPlusBar, averageClusterSize * std::cos(lambda));
308+
registryData.fill(HIST("omega_pos_avgclustersize_trunc_cosL"), track.p(), averageClusterSizeTrunc * std::cos(lambda));
309+
registryData.fill(HIST("omega_pos_avgclustersize_trunc_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiPlusBar, averageClusterSizeTrunc * std::cos(lambda));
236310
}
237311
if (btrack.sign() < 0) {
238312
registryData.fill(HIST("omega_neg_avgclustersize"), track.p(), averageClusterSize, track.eta());
239313
registryData.fill(HIST("omega_neg_avgclustersize_cosL"), track.p(), averageClusterSize * std::cos(lambda));
240314
registryData.fill(HIST("omega_neg_avgclustersize_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassOmegaMinus, averageClusterSize * std::cos(lambda));
315+
registryData.fill(HIST("omega_neg_avgclustersize_trunc_cosL"), track.p(), averageClusterSizeTrunc * std::cos(lambda));
316+
registryData.fill(HIST("omega_neg_avgclustersize_trunc_cosL_vs_betagamma"), track.p() / o2::constants::physics::MassXiPlusBar, averageClusterSizeTrunc * std::cos(lambda));
241317
}
242318
}
243319
}

0 commit comments

Comments
 (0)