Skip to content

Commit 19d5489

Browse files
author
Sawan Sawan
committed
calibrated multiplicity used
1 parent 5c5b0cb commit 19d5489

File tree

1 file changed

+110
-25
lines changed

1 file changed

+110
-25
lines changed

PWGLF/Tasks/Resonances/k892analysis.cxx

Lines changed: 110 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,23 @@
1515
///
1616
/// \author Bong-Hwi Lim <bong-hwi.lim@cern.ch>, Sawan Sawan <sawan.sawan@cern.ch>
1717

18-
#include <TLorentzVector.h>
19-
#include "TF1.h"
20-
#include "TRandom3.h"
18+
#include "PWGLF/DataModel/LFResonanceTables.h"
19+
#include "PWGLF/DataModel/mcCentrality.h"
20+
#include "PWGLF/Utils/inelGt.h"
2121

22-
#include "Common/DataModel/PIDResponse.h"
2322
#include "Common/DataModel/Centrality.h"
2423
#include "Common/DataModel/EventSelection.h"
25-
#include "Framework/AnalysisTask.h"
24+
#include "Common/DataModel/PIDResponse.h"
25+
26+
#include "CommonConstants/PhysicsConstants.h"
27+
#include "DataFormatsParameters/GRPObject.h"
2628
#include "Framework/ASoAHelpers.h"
29+
#include "Framework/AnalysisTask.h"
2730
#include "Framework/runDataProcessing.h"
28-
#include "PWGLF/DataModel/LFResonanceTables.h"
29-
#include "DataFormatsParameters/GRPObject.h"
30-
#include "CommonConstants/PhysicsConstants.h"
31+
32+
#include "TF1.h"
33+
#include "TRandom3.h"
34+
#include <TLorentzVector.h>
3135

3236
using namespace o2;
3337
using namespace o2::framework;
@@ -59,6 +63,9 @@ struct K892analysis {
5963
Configurable<bool> invmass1D{"invmass1D", false, "Invariant mass 1D"};
6064
Configurable<bool> studyAntiparticle{"studyAntiparticle", false, "Study anti-particles separately"};
6165
Configurable<bool> fillPidPlots{"fillPidPlots", false, "Make TPC and TOF PID plots"};
66+
Configurable<bool> cisInelGt0{"cisInelGt0", true, "check if INEL>0"};
67+
Configurable<bool> cMCCent{"cMCCent", true, "Using calibrated MC centrality (for FT0M)"};
68+
6269
// Configurable<bool> applyOccupancyCut{"applyOccupancyCut", false, "Apply occupancy cut"};
6370
// Configurable<int> occupancyCut{"occupancyCut", 1000, "Mimimum Occupancy cut"};
6471

@@ -426,11 +433,11 @@ struct K892analysis {
426433
return false;
427434
}
428435

429-
template <bool IsMC, bool IsMix, typename CollisionType, typename TracksType>
430-
void fillHistograms(const CollisionType& collision, const TracksType& dTracks1, const TracksType& dTracks2)
436+
template <bool IsMC, bool IsMix, typename CollisionType, typename TracksType, typename Multdatamc>
437+
void fillHistograms(const CollisionType& collision, const TracksType& dTracks1, const TracksType& dTracks2, const Multdatamc& multiplicity)
431438
{
432439
// auto multNTracksPV = collision.multNTracksPV();
433-
auto multiplicity = collision.cent();
440+
// auto multiplicity = collision.cent();
434441
if (additionalEvsel && !eventSelected(collision, multiplicity)) {
435442
return;
436443
}
@@ -703,28 +710,105 @@ struct K892analysis {
703710
}
704711
}
705712

706-
void processDataLight(aod::ResoCollision const& collision,
707-
aod::ResoTracks const& resotracks)
713+
void processDataLight(aod::ResoCollision const& resocollisions, aod::ResoCollisionColls const& collisionIndex, soa::Join<aod::Collisions, aod::PVMults> const& collisions, aod::ResoTracks const& resotracks)
708714
{
709715
// LOG(info) << "new collision, zvtx: " << collision.posZ();
716+
if (cisInelGt0) {
717+
auto linkRow = collisionIndex.iteratorAt(resocollisions.globalIndex());
718+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
719+
720+
auto coll = collisions.iteratorAt(collId); // Take original collision matched with resoCollision
721+
722+
if (!coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision
723+
return;
724+
}
710725
if (additionalQAeventPlots)
711726
histos.fill(HIST("QAevent/hEvtCounterSameE"), 1.0);
712-
fillHistograms<false, false>(collision, resotracks, resotracks);
727+
auto multiplicity = resocollisions.cent();
728+
fillHistograms<false, false>(resocollisions, resotracks, resotracks, multiplicity);
713729
}
714730
PROCESS_SWITCH(K892analysis, processDataLight, "Process Event for data", false);
715731

716-
void processMCLight(ResoMCCols::iterator const& collision,
717-
soa::Join<aod::ResoTracks, aod::ResoMCTracks> const& resotracks)
732+
void processMCLight(ResoMCCols::iterator const& resoCollision,
733+
aod::ResoCollisionColls const& collisionIndex,
734+
soa::Join<aod::ResoCollisionCandidatesMC, aod::PVMults> const& collisionsMC,
735+
soa::Join<aod::ResoTracks, aod::ResoMCTracks> const& resoTracks,
736+
soa::Join<aod::McCollisions, aod::McCentFT0Ms> const&)
718737
{
719-
if (!collision.isInAfterAllCuts() || (std::abs(collision.posZ()) > cZvertCutMC)) // MC event selection, all cuts missing vtx cut
738+
float multiplicity;
739+
if (cMCCent && cisInelGt0) {
740+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
741+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
742+
743+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
744+
745+
if (!coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision
746+
return;
747+
748+
auto mcColl = coll.mcCollision_as<soa::Join<aod::McCollisions, aod::McCentFT0Ms>>();
749+
multiplicity = mcColl.centFT0M();
750+
} else if (!cMCCent && cisInelGt0) {
751+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
752+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
753+
754+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
755+
756+
if (!coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision
757+
return;
758+
759+
multiplicity = resoCollision.cent();
760+
} else if (cMCCent && !cisInelGt0) {
761+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
762+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
763+
764+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
765+
766+
auto mcColl = coll.mcCollision_as<soa::Join<aod::McCollisions, aod::McCentFT0Ms>>();
767+
multiplicity = mcColl.centFT0M();
768+
} else {
769+
multiplicity = resoCollision.cent();
770+
}
771+
if (!resoCollision.isInAfterAllCuts() || (std::abs(resoCollision.posZ()) > cZvertCutMC)) // MC event selection, all cuts missing vtx cut
720772
return;
721-
fillHistograms<true, false>(collision, resotracks, resotracks);
773+
fillHistograms<true, false>(resoCollision, resoTracks, resoTracks, multiplicity);
722774
}
723775
PROCESS_SWITCH(K892analysis, processMCLight, "Process Event for MC (Reconstructed)", false);
724776

725-
void processMCTrue(ResoMCCols::iterator const& collision, aod::ResoMCParents const& resoParents)
777+
void processMCTrue(ResoMCCols::iterator const& resoCollision, aod::ResoCollisionColls const& collisionIndex, aod::ResoMCParents const& resoParents, aod::ResoCollisionCandidatesMC const& collisionsMC, soa::Join<aod::McCollisions, aod::McCentFT0Ms> const&)
726778
{
727-
auto multiplicity = collision.cent();
779+
float multiplicity;
780+
if (cMCCent && cisInelGt0) {
781+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
782+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
783+
784+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
785+
786+
if (!coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision
787+
return;
788+
789+
auto mcColl = coll.mcCollision_as<soa::Join<aod::McCollisions, aod::McCentFT0Ms>>();
790+
multiplicity = mcColl.centFT0M();
791+
} else if (!cMCCent && cisInelGt0) {
792+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
793+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
794+
795+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
796+
797+
if (!coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision
798+
return;
799+
800+
multiplicity = resoCollision.cent();
801+
} else if (cMCCent && !cisInelGt0) {
802+
auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex());
803+
auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision
804+
805+
auto coll = collisionsMC.iteratorAt(collId); // Take original collision matched with resoCollision
806+
807+
auto mcColl = coll.mcCollision_as<soa::Join<aod::McCollisions, aod::McCentFT0Ms>>();
808+
multiplicity = mcColl.centFT0M();
809+
} else {
810+
multiplicity = resoCollision.cent();
811+
}
728812
for (const auto& part : resoParents) { // loop over all pre-filtered MC particles
729813
if (std::abs(part.pdgCode()) != 313 || std::abs(part.y()) >= 0.5)
730814
continue;
@@ -734,28 +818,28 @@ struct K892analysis {
734818
if (!pass1 || !pass2)
735819
continue;
736820

737-
if (collision.isVtxIn10()) // INEL10
821+
if (resoCollision.isVtxIn10()) // INEL10
738822
{
739823
if (part.pdgCode() > 0)
740824
histos.fill(HIST("k892Gen"), 0, part.pt(), multiplicity);
741825
else
742826
histos.fill(HIST("k892GenAnti"), 0, part.pt(), multiplicity);
743827
}
744-
if (collision.isVtxIn10() && collision.isInSel8()) // INEL>10, vtx10
828+
if (resoCollision.isVtxIn10() && resoCollision.isInSel8()) // INEL>10, vtx10
745829
{
746830
if (part.pdgCode() > 0)
747831
histos.fill(HIST("k892Gen"), 1, part.pt(), multiplicity);
748832
else
749833
histos.fill(HIST("k892GenAnti"), 1, part.pt(), multiplicity);
750834
}
751-
if (collision.isVtxIn10() && collision.isTriggerTVX()) // vtx10, TriggerTVX
835+
if (resoCollision.isVtxIn10() && resoCollision.isTriggerTVX()) // vtx10, TriggerTVX
752836
{
753837
if (part.pdgCode() > 0)
754838
histos.fill(HIST("k892Gen"), 2, part.pt(), multiplicity);
755839
else
756840
histos.fill(HIST("k892GenAnti"), 2, part.pt(), multiplicity);
757841
}
758-
if (collision.isInAfterAllCuts()) // after all event selection
842+
if (resoCollision.isInAfterAllCuts()) // after all event selection
759843
{
760844
if (part.pdgCode() > 0)
761845
histos.fill(HIST("k892Gen"), 3, part.pt(), multiplicity);
@@ -775,9 +859,10 @@ struct K892analysis {
775859
SameKindPair<aod::ResoCollisions, aod::ResoTracks, BinningTypeVtxZT0M> pairs{colBinning, nEvtMixing, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
776860

777861
for (const auto& [collision1, tracks1, collision2, tracks2] : pairs) {
862+
auto multiplicity = collision1.cent();
778863
if (additionalQAeventPlots)
779864
histos.fill(HIST("QAevent/hEvtCounterMixedE"), 1.0);
780-
fillHistograms<false, true>(collision1, tracks1, tracks2);
865+
fillHistograms<false, true>(collision1, tracks1, tracks2, multiplicity);
781866
}
782867
};
783868
PROCESS_SWITCH(K892analysis, processMELight, "Process EventMixing light without partition", false);

0 commit comments

Comments
 (0)