Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 22 additions & 24 deletions PWGJE/TableProducer/secondaryVertexReconstruction.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

#include <TF1.h>
#include <TH1.h>
#include <TGeoGlobalMagField.h>

#include "CommonConstants/PhysicsConstants.h"
#include "DCAFitter/DCAFitterN.h"
Expand All @@ -28,7 +27,6 @@
#include "Framework/runDataProcessing.h"
#include "Common/Core/trackUtilities.h"
#include "Common/Core/RecoDecay.h"
#include "Field/MagneticField.h"

#include "ReconstructionDataFormats/DCA.h"

Expand Down Expand Up @@ -58,6 +56,7 @@ struct SecondaryVertexReconstruction {
Produces<aod::MCDSecondaryVertex2Prongs> sv2prongTableMCD;
Produces<aod::MCDSecondaryVertex2ProngIndices> sv2prongIndicesTableMCD;

Configurable<float> magneticField{"magneticField", 20.0f, "magnetic field in kG"};
Configurable<bool> propagateToPCA{"propagateToPCA", true, "create tracks version propagated to PCA"};
Configurable<bool> useAbsDCA{"useAbsDCA", false, "Minimise abs. distance rather than chi2"};
Configurable<bool> useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"};
Expand Down Expand Up @@ -127,7 +126,7 @@ struct SecondaryVertexReconstruction {
using JetTracksMCDwPIs = soa::Filtered<soa::Join<JetTracksMCD, aod::JTrackPIs>>;
using OriginalTracks = soa::Join<aod::Tracks, aod::TracksCov, aod::TrackSelection, aod::TracksDCA, aod::TracksDCACov>;

template <unsigned int numProngs, bool hasBC, typename AnyCollision, typename AnyJet, typename AnyParticles>
template <unsigned int numProngs, bool externalMagneticField, typename AnyCollision, typename AnyJet, typename AnyParticles>
void runCreatorNProng(AnyCollision const& collision,
AnyJet const& analysisJet,
AnyParticles const& listoftracks,
Expand All @@ -149,15 +148,14 @@ struct SecondaryVertexReconstruction {
trackParVars[inum] = getTrackParCov(prong);
}

if constexpr (hasBC) {
if constexpr (externalMagneticField) {
bz = magneticField;
} else {
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
if (runNumber != bc.runNumber()) {
initCCDB(bc, runNumber, ccdb, ccdbPathGrpMag, lut, false);
bz = o2::base::Propagator::Instance()->getNominalBz();
}
} else {
auto fieldInstance = static_cast<o2::field::MagneticField*>(TGeoGlobalMagField::Instance()->GetField());
bz = fieldInstance->GetBz(0, 0, 0); // to be checked
}

// Use a different fitter depending on the number of prongs
Expand Down Expand Up @@ -268,7 +266,7 @@ struct SecondaryVertexReconstruction {
}

currentCombination.push_back(iprong);
runCreatorNProng<numProngs, hasBC>(
runCreatorNProng<numProngs, externalMagneticField>(
collision, analysisJet, listoftracks, svIndices, df, iprong + 1, currentCombination);
currentCombination.pop_back();
}
Expand All @@ -283,81 +281,81 @@ struct SecondaryVertexReconstruction {
{
for (auto& jet : jets) {
std::vector<int> svIndices;
runCreatorNProng<3, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
runCreatorNProng<3, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
sv3prongIndicesTableData(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processData3Prongs, "Reconstruct the data 3-prong secondary vertex", false);

void processData3ProngsWithoutBCs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, JetTracksData const& jtracks, OriginalTracks const& /*tracks*/)
void processData3ProngsExternalMagneticField(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, JetTracksData const& jtracks, OriginalTracks const& /*tracks*/)
{
for (auto& jet : jets) {
std::vector<int> svIndices;
runCreatorNProng<3, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
runCreatorNProng<3, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
sv3prongIndicesTableData(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processData3ProngsWithoutBCs, "Reconstruct the data 3-prong secondary vertex without BC info", false);
PROCESS_SWITCH(SecondaryVertexReconstruction, processData3ProngsExternalMagneticField, "Reconstruct the data 3-prong secondary vertex with external magnetic field", false);

void processData2Prongs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, JetTracksData const& jtracks, OriginalTracks const& /*tracks*/, aod::BCsWithTimestamps const& /*bcWithTimeStamps*/)
{
for (auto& jet : jets) {
std::vector<int> svIndices;
runCreatorNProng<2, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
runCreatorNProng<2, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
sv2prongIndicesTableData(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processData2Prongs, "Reconstruct the data 2-prong secondary vertex", false);

void processData2ProngsWithoutBCs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, JetTracksData const& jtracks, OriginalTracks const& /*tracks*/)
void processData2ProngsExternalMagneticField(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, JetTracksData const& jtracks, OriginalTracks const& /*tracks*/)
{
for (auto& jet : jets) {
std::vector<int> svIndices;
runCreatorNProng<2, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
runCreatorNProng<2, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
sv2prongIndicesTableData(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processData2ProngsWithoutBCs, "Reconstruct the data 2-prong secondary vertex without BC info", false);
PROCESS_SWITCH(SecondaryVertexReconstruction, processData2ProngsExternalMagneticField, "Reconstruct the data 2-prong secondary vertex with extrernal magnetic field", false);

void processMCD3Prongs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/, aod::BCsWithTimestamps const& /*bcWithTimeStamps*/)
{
for (auto& jet : mcdjets) {
std::vector<int> svIndices;
runCreatorNProng<3, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
runCreatorNProng<3, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
sv3prongIndicesTableMCD(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD3Prongs, "Reconstruct the MCD 3-prong secondary vertex", false);

void processMCD3ProngsWithoutBCs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/)
void processMCD3ProngsExternalMagneticField(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/)
{
for (auto& jet : mcdjets) {
std::vector<int> svIndices;
runCreatorNProng<3, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
runCreatorNProng<3, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df3);
sv3prongIndicesTableMCD(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD3ProngsWithoutBCs, "Reconstruct the MCD 3-prong secondary vertex without BC info", false);
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD3ProngsExternalMagneticField, "Reconstruct the MCD 3-prong secondary vertex with external magnetic field", false);

void processMCD2Prongs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/, aod::BCsWithTimestamps const& /*bcWithTimeStamps*/)
{
for (auto& jet : mcdjets) {
std::vector<int> svIndices;
runCreatorNProng<2, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
runCreatorNProng<2, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
sv2prongIndicesTableMCD(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD2Prongs, "Reconstruct the MCD 2-prong secondary vertex", false);

void processMCD2ProngsWithoutBCs(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/)
void processMCD2ProngsExternalMagneticField(JetCollisionwPIs::iterator const& collision, aod::Collisions const& /*realColl*/, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets, JetTracksMCDwPIs const& jtracks, OriginalTracks const& /*tracks*/)
{
for (auto& jet : mcdjets) {
std::vector<int> svIndices;
runCreatorNProng<2, false>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
runCreatorNProng<2, true>(collision.template collision_as<aod::Collisions>(), jet, jtracks, svIndices, df2);
sv2prongIndicesTableMCD(svIndices);
}
}
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD2ProngsWithoutBCs, "Reconstruct the MCD 2-prong secondary vertex without BC info", false);
PROCESS_SWITCH(SecondaryVertexReconstruction, processMCD2ProngsExternalMagneticField, "Reconstruct the MCD 2-prong secondary vertex with external magnetic field", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down