Skip to content

Commit e6ed01b

Browse files
victor-gonzalezVictor
andauthored
[PWGCF] DptDpt - Improved event selection tracking (#8722)
Co-authored-by: Victor <victor@cern.ch>
1 parent d9bb92e commit e6ed01b

File tree

5 files changed

+123
-95
lines changed

5 files changed

+123
-95
lines changed

PWGCF/TableProducer/dptdptfilter.cxx

Lines changed: 72 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12+
/// \file dptdptfilter.cxx
13+
/// \brief Filters collisions and tracks according to selection criteria
14+
/// \author victor.gonzalez.sebastian@gmail.com
15+
1216
#include <cmath>
1317
#include <algorithm>
1418
#include <string>
@@ -31,7 +35,6 @@
3135
#include "Framework/runDataProcessing.h"
3236
#include "Framework/RunningWorkflowInfo.h"
3337
#include <TROOT.h>
34-
#include <TDatabasePDG.h>
3538
#include <TPDGCode.h>
3639
#include <TParameter.h>
3740
#include <TList.h>
@@ -90,6 +93,7 @@ const char* speciesName[kDptDptNoOfSpecies] = {"h", "e", "mu", "pi", "ka", "p"};
9093
const char* speciesTitle[kDptDptNoOfSpecies] = {"", "e", "#mu", "#pi", "K", "p"};
9194

9295
const char* eventSelectionSteps[knCollisionSelectionFlags] = {
96+
"IN",
9397
"MB",
9498
"INT7",
9599
"SEL7",
@@ -101,7 +105,8 @@ const char* eventSelectionSteps[knCollisionSelectionFlags] = {
101105
"ISVERTEXTRDMATCHED",
102106
"OCCUPANCY",
103107
"CENTRALITY",
104-
"ZVERTEX"};
108+
"ZVERTEX",
109+
"SELECTED"};
105110

106111
//============================================================================================
107112
// The DptDptFilter histogram objects
@@ -187,24 +192,24 @@ using namespace dptdptfilter;
187192
//////////////////////////////////////////////////////////////////////////////
188193

189194
struct Multiplicity {
190-
enum multest {
195+
enum MultEst {
191196
kV0M,
192197
kCL1,
193198
kCL1GAP
194199
};
195200

196-
float getMultiplicityClass() { return multiplicityclass; }
201+
float getMultiplicityClass() { return multiplicityClass; }
197202
float getMultiplicity() { return multiplicity; }
198203

199-
multest classestimator = kV0M;
204+
MultEst classestimator = kV0M;
200205

201-
float multiplicityclass = -1.0;
206+
float multiplicityClass = -1.0;
202207
float multiplicity = 0.0;
203208
bool inelgth0 = false;
204-
int V0AM = 0;
205-
int V0CM = 0;
206-
int CL1M = 0;
207-
int CL1EtaGapM = 0;
209+
int v0am = 0;
210+
int v0cm = 0;
211+
int cl1m = 0;
212+
int cl1EtaGapM = 0;
208213
int dNchdEta = 0;
209214
int nPart = 0;
210215
TH1F* fhNPartTot = nullptr; ///< total number of particles analyzed
@@ -269,11 +274,11 @@ struct Multiplicity {
269274
if (p.eta() < 1.0 && -1.0 < p.eta()) {
270275
inelgth0 = true;
271276
}
272-
addTo(p, V0AM, 2.8, 5.1);
273-
addTo(p, V0CM, -3.7, -1.7);
274-
addTo(p, CL1M, -1.4, 1.4);
275-
addTo(p, CL1EtaGapM, -1.4, -0.8);
276-
addTo(p, CL1EtaGapM, 0.8, 1.4);
277+
addTo(p, v0am, 2.8, 5.1);
278+
addTo(p, v0cm, -3.7, -1.7);
279+
addTo(p, cl1m, -1.4, 1.4);
280+
addTo(p, cl1EtaGapM, -1.4, -0.8);
281+
addTo(p, cl1EtaGapM, 0.8, 1.4);
277282
addTo(p, dNchdEta, -0.5, 0.5);
278283
nPart++;
279284
}
@@ -287,17 +292,17 @@ struct Multiplicity {
287292
template <typename CollisionParticles>
288293
void extractMultiplicity(const CollisionParticles& particles)
289294
{
290-
multiplicityclass = 105;
295+
multiplicityClass = 105;
291296
multiplicity = 0;
292297
inelgth0 = false;
293298
nPart = 0;
294-
V0AM = 0;
295-
V0CM = 0;
296-
CL1M = 0;
297-
CL1EtaGapM = 0;
299+
v0am = 0;
300+
v0cm = 0;
301+
cl1m = 0;
302+
cl1EtaGapM = 0;
298303
dNchdEta = 0;
299304

300-
for (auto particle : particles) {
305+
for (auto const& particle : particles) {
301306
addParticleToMultiplicity(particle);
302307
}
303308

@@ -306,37 +311,37 @@ struct Multiplicity {
306311
fhNPartTot->Fill(nPart);
307312
}
308313
if (fhV0Multiplicity != nullptr) {
309-
fhV0Multiplicity->Fill(V0AM + V0CM, dNchdEta);
314+
fhV0Multiplicity->Fill(v0am + v0cm, dNchdEta);
310315
}
311316
if (fhCL1Multiplicity != nullptr) {
312-
fhCL1Multiplicity->Fill(CL1M, dNchdEta);
317+
fhCL1Multiplicity->Fill(cl1m, dNchdEta);
313318
}
314319
if (fhCL1EtaGapMultiplicity != nullptr) {
315-
fhCL1EtaGapMultiplicity->Fill(CL1EtaGapM, dNchdEta);
320+
fhCL1EtaGapMultiplicity->Fill(cl1EtaGapM, dNchdEta);
316321
}
317322
switch (classestimator) {
318323
case kV0M:
319324
if (fhV0MMultPercentile != nullptr) {
320-
multiplicityclass = fhV0MMultPercentile->GetBinContent(fhV0MMultPercentile->FindFixBin(V0AM + V0CM));
321-
multiplicity = V0AM + V0CM;
325+
multiplicityClass = fhV0MMultPercentile->GetBinContent(fhV0MMultPercentile->FindFixBin(v0am + v0cm));
326+
multiplicity = v0am + v0cm;
322327
}
323328
break;
324329
case kCL1:
325330
if (fhCL1MultPercentile != nullptr) {
326-
multiplicityclass = fhCL1MultPercentile->GetBinContent(fhCL1MultPercentile->FindFixBin(CL1M));
327-
multiplicity = CL1M;
331+
multiplicityClass = fhCL1MultPercentile->GetBinContent(fhCL1MultPercentile->FindFixBin(cl1m));
332+
multiplicity = cl1m;
328333
}
329334
break;
330335
case kCL1GAP:
331336
if (fhCL1EtaGapMultPercentile != nullptr) {
332-
multiplicityclass = fhCL1EtaGapMultPercentile->GetBinContent(fhCL1EtaGapMultPercentile->FindFixBin(CL1EtaGapM));
333-
multiplicity = CL1EtaGapM;
337+
multiplicityClass = fhCL1EtaGapMultPercentile->GetBinContent(fhCL1EtaGapMultPercentile->FindFixBin(cl1EtaGapM));
338+
multiplicity = cl1EtaGapM;
334339
}
335340
break;
336341
default:
337342
break;
338343
}
339-
fhMultiplicity->Fill(multiplicityclass);
344+
fhMultiplicity->Fill(multiplicityClass);
340345
}
341346
}
342347
};
@@ -422,7 +427,7 @@ struct DptDptFilter {
422427

423428
if ((fDataType == kData) || (fDataType == kDataNoEvtSel) || (fDataType == kMC)) {
424429
/* create the reconstructed data histograms */
425-
fhEventSelection = new TH1D("EventSelection", ";counts", knCollisionSelectionFlags, -0.5f, static_cast<float>(knCollisionSelectionFlags) - 0.5f);
430+
fhEventSelection = new TH1D("EventSelection", ";;counts", knCollisionSelectionFlags, -0.5f, static_cast<float>(knCollisionSelectionFlags) - 0.5f);
426431
for (int ix = 0; ix < knCollisionSelectionFlags; ++ix) {
427432
fhEventSelection->GetXaxis()->SetBinLabel(ix + 1, eventSelectionSteps[ix]);
428433
}
@@ -556,7 +561,7 @@ void DptDptFilter::processReconstructed(CollisionObject const& collision, Tracks
556561
fhVertexZB->Fill(collision.posZ());
557562
uint8_t acceptedevent = uint8_t(false);
558563
float centormult = tentativecentmult;
559-
if (IsEvtSelected(collision, centormult)) {
564+
if (isEventSelected(collision, centormult)) {
560565
acceptedevent = true;
561566
fhCentMultA->Fill(centormult);
562567
fhMultA->Fill(mult);
@@ -616,7 +621,7 @@ bool DptDptFilter::processGenerated(CollisionObject const& mccollision, Particle
616621
using namespace dptdptfilter;
617622

618623
uint8_t acceptedevent = uint8_t(false);
619-
if (IsEvtSelected(mccollision, centormult)) {
624+
if (isEventSelected(mccollision, centormult)) {
620625
acceptedevent = uint8_t(true);
621626
}
622627
if (fullDerivedData) {
@@ -643,11 +648,11 @@ void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
643648
}
644649

645650
bool processed = false;
646-
for (auto& tmpcollision : collisions) {
651+
for (auto const& tmpcollision : collisions) {
647652
if (tmpcollision.has_mcCollision()) {
648653
if (tmpcollision.mcCollisionId() == mccollision.globalIndex()) {
649654
typename AllCollisions::iterator const& collision = allcollisions.iteratorAt(tmpcollision.globalIndex());
650-
if (IsEvtSelected(collision, defaultcent)) {
655+
if (isEventSelected(collision, defaultcent)) {
651656
fhTrueVertexZAA->Fill((mccollision.posZ()));
652657
processGenerated(mccollision, mcparticles, defaultcent);
653658
processed = true;
@@ -692,7 +697,7 @@ void DptDptFilter::processOnTheFlyGeneratorLevel(aod::McCollision const& mccolli
692697
fhTrueVertexZB->Fill(mccollision.posZ());
693698
/* we assign a default value for the time being */
694699
float centormult = 50.0f;
695-
if (IsEvtSelected(mccollision, centormult)) {
700+
if (isEventSelected(mccollision, centormult)) {
696701
acceptedEvent = true;
697702
multiplicity.extractMultiplicity(mcparticles);
698703
fhTrueVertexZA->Fill((mccollision.posZ()));
@@ -711,7 +716,7 @@ void DptDptFilter::processVertexGenerated(aod::McCollisions const& mccollisions)
711716
fhTrueVertexZB->Fill(mccollision.posZ());
712717
/* we assign a default value */
713718
float centmult = 50.0f;
714-
if (IsEvtSelected(mccollision, centmult)) {
719+
if (isEventSelected(mccollision, centmult)) {
715720
fhTrueVertexZA->Fill((mccollision.posZ()));
716721
}
717722
}
@@ -727,10 +732,10 @@ T computeRMS(std::vector<T>& vec)
727732

728733
std::vector<T> diff(vec.size());
729734
std::transform(vec.begin(), vec.end(), diff.begin(), [mean](T x) { return x - mean; });
730-
T sq_sum = std::inner_product(diff.begin(), diff.end(), diff.begin(), 0.0);
731-
T stdev = std::sqrt(sq_sum / vec.size());
735+
T sqSum = std::inner_product(diff.begin(), diff.end(), diff.begin(), 0.0);
736+
T stdDev = std::sqrt(sqSum / vec.size());
732737

733-
return stdev;
738+
return stdDev;
734739
}
735740

736741
struct DptDptFilterTracks {
@@ -828,10 +833,10 @@ struct DptDptFilterTracks {
828833
auto insertInPIDselector = [&](auto cfg, uint sp) {
829834
if (cfg.value.mUseIt) {
830835
if (cfg.value.mExclude) {
831-
pidselector.AddExclude(sp, &(cfg.value));
836+
pidselector.addExcludedSpecies(sp, &(cfg.value));
832837
LOGF(info, "Incorporated species: %s to PID selection for exclusion", pidselector.spnames[sp].data());
833838
} else {
834-
pidselector.Add(sp, &(cfg.value));
839+
pidselector.addSpecies(sp, &(cfg.value));
835840
LOGF(info, "Incorporated species: %s to PID selection", pidselector.spnames[sp].data());
836841
}
837842
}
@@ -848,9 +853,9 @@ struct DptDptFilterTracks {
848853
fOutput.setObject(fOutputList);
849854

850855
/* incorporate configuration parameters to the output */
851-
fOutputList->Add(new TParameter<Int_t>("TrackType", cfgTrackType, 'f'));
852-
fOutputList->Add(new TParameter<Int_t>("TrackOneCharge", 1, 'f'));
853-
fOutputList->Add(new TParameter<Int_t>("TrackTwoCharge", -1, 'f'));
856+
fOutputList->Add(new TParameter<int>("TrackType", cfgTrackType, 'f'));
857+
fOutputList->Add(new TParameter<int>("TrackOneCharge", 1, 'f'));
858+
fOutputList->Add(new TParameter<int>("TrackTwoCharge", -1, 'f'));
854859

855860
if ((fDataType == kData) || (fDataType == kDataNoEvtSel) || (fDataType == kMC)) {
856861
/* create the reconstructed data histograms */
@@ -1118,12 +1123,12 @@ struct DptDptFilterTracks {
11181123
if (!fullDerivedData) {
11191124
tracksinfo.reserve(tracks.size());
11201125
}
1121-
for (auto collision : collisions) {
1126+
for (auto const& collision : collisions) {
11221127
if (collision.collisionaccepted()) {
11231128
ncollaccepted++;
11241129
}
11251130
}
1126-
for (auto track : tracks) {
1131+
for (auto const& track : tracks) {
11271132
int8_t pid = -1;
11281133
if (track.has_collision() && (track.template collision_as<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>()).collisionaccepted()) {
11291134
pid = selectTrackAmbiguousCheck<outdebug>(collisions, track);
@@ -1169,13 +1174,13 @@ struct DptDptFilterTracks {
11691174
gentracksinfo.reserve(particles.size());
11701175
}
11711176

1172-
for (auto gencoll : gencollisions) {
1177+
for (auto const& gencoll : gencollisions) {
11731178
if (gencoll.collisionaccepted()) {
11741179
acceptedcollisions++;
11751180
}
11761181
}
11771182

1178-
for (auto& particle : particles) {
1183+
for (auto const& particle : particles) {
11791184
float charge = getCharge(particle);
11801185

11811186
int8_t pid = -1;
@@ -1348,7 +1353,7 @@ int8_t DptDptFilterTracks::selectTrack(TrackObject const& track)
13481353

13491354
/* track selection */
13501355
int8_t sp = -127;
1351-
if (AcceptTrack<CollisionsObject>(track)) {
1356+
if (acceptTrack<CollisionsObject>(track)) {
13521357
/* the track has been accepted */
13531358
/* let's identify it */
13541359
sp = trackIdentification<outdebug>(track);
@@ -1403,22 +1408,22 @@ int8_t DptDptFilterTracks::selectTrackAmbiguousCheck(CollisionObjects const& col
14031408
}
14041409
}
14051410

1406-
float multiplicityclass = (track.template collision_as<CollisionObjects>()).centmult();
1411+
float multiplicityClass = (track.template collision_as<CollisionObjects>()).centmult();
14071412
if (ambiguoustrack) {
14081413
/* keep track of ambiguous tracks */
1409-
fhAmbiguousTrackType->Fill(ambtracktype, multiplicityclass);
1410-
fhAmbiguousTrackPt->Fill(track.pt(), multiplicityclass);
1411-
fhAmbiguityDegree->Fill(zvertexes.size(), multiplicityclass);
1414+
fhAmbiguousTrackType->Fill(ambtracktype, multiplicityClass);
1415+
fhAmbiguousTrackPt->Fill(track.pt(), multiplicityClass);
1416+
fhAmbiguityDegree->Fill(zvertexes.size(), multiplicityClass);
14121417
if (ambtracktype == 2) {
1413-
fhCompatibleCollisionsZVtxRms->Fill(-computeRMS(zvertexes), multiplicityclass);
1418+
fhCompatibleCollisionsZVtxRms->Fill(-computeRMS(zvertexes), multiplicityClass);
14141419
} else {
1415-
fhCompatibleCollisionsZVtxRms->Fill(computeRMS(zvertexes), multiplicityclass);
1420+
fhCompatibleCollisionsZVtxRms->Fill(computeRMS(zvertexes), multiplicityClass);
14161421
}
14171422
return -1;
14181423
} else {
14191424
if (checkAmbiguousTracks) {
14201425
/* feedback of no ambiguous tracks only if checks required */
1421-
fhAmbiguousTrackType->Fill(ambtracktype, multiplicityclass);
1426+
fhAmbiguousTrackType->Fill(ambtracktype, multiplicityClass);
14221427
}
14231428
return selectTrack<outdebug, CollisionObjects>(track);
14241429
}
@@ -1507,7 +1512,7 @@ inline int8_t DptDptFilterTracks::selectParticle(ParticleObject const& particle,
15071512
fillParticleHistosBeforeSelection(particle, mccollision, charge);
15081513

15091514
/* track selection */
1510-
if (AcceptParticle(particle, mccollision)) {
1515+
if (acceptParticle(particle, mccollision)) {
15111516
/* the particle has been accepted */
15121517
/* the particle is only accepted if it is a primary particle */
15131518
/* let's identify the particle */
@@ -1544,14 +1549,14 @@ void DptDptFilterTracks::fillParticleHistosBeforeSelection(ParticleObject const&
15441549
fhTruePtNegB->Fill(particle.pt());
15451550
}
15461551

1547-
float dcaxy = TMath::Sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1548-
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY()));
1552+
float dcaxy = std::sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1553+
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY()));
15491554
if (traceDCAOutliers.mDoIt && (traceDCAOutliers.mLowValue < dcaxy) && (dcaxy < traceDCAOutliers.mUpValue)) {
15501555
fhTrueDCAxyBid->Fill(TString::Format("%d", particle.pdgCode()).Data(), 1.0);
15511556
}
15521557

1553-
fhTrueDCAxyB->Fill(TMath::Sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1554-
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY())));
1558+
fhTrueDCAxyB->Fill(std::sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1559+
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY())));
15551560
fhTrueDCAzB->Fill((particle.vz() - collision.posZ()));
15561561
}
15571562

@@ -1560,16 +1565,16 @@ void DptDptFilterTracks::fillParticleHistosAfterSelection(ParticleObject const&
15601565
{
15611566
fhTrueEtaA->Fill(particle.eta());
15621567
fhTruePhiA->Fill(particle.phi());
1563-
float dcaxy = TMath::Sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1564-
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY()));
1568+
float dcaxy = std::sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1569+
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY()));
15651570
if (traceDCAOutliers.mDoIt && (traceDCAOutliers.mLowValue < dcaxy) && (dcaxy < traceDCAOutliers.mUpValue)) {
15661571
LOGF(info, "DCAxy outlier: Particle with index %d and pdg code %d assigned to MC collision %d, pT: %f, phi: %f, eta: %f",
15671572
particle.globalIndex(), particle.pdgCode(), particle.mcCollisionId(), particle.pt(), particle.phi(), particle.eta());
15681573
LOGF(info, " With status %d and flags %0X", particle.statusCode(), particle.flags());
15691574
}
15701575

1571-
fhTrueDCAxyA->Fill(TMath::Sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1572-
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY())));
1576+
fhTrueDCAxyA->Fill(std::sqrt((particle.vx() - collision.posX()) * (particle.vx() - collision.posX()) +
1577+
(particle.vy() - collision.posY()) * (particle.vy() - collision.posY())));
15731578
fhTrueDCAzA->Fill((particle.vz() - collision.posZ()));
15741579
fhTruePA[sp]->Fill(particle.p());
15751580
fhTruePtA[sp]->Fill(particle.pt());

0 commit comments

Comments
 (0)