Skip to content
Open
Show file tree
Hide file tree
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
4 changes: 3 additions & 1 deletion DataFormats/HGCalReco/interface/Trackster.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ namespace ticl {
ambiguous,
unknown,
};
/// Length of id_probabilities : to keep same length as enum ParticleType
static constexpr std::size_t kParticleTypeLength = 8;

enum class PCAOrdering { ascending = 0, descending };

Expand Down Expand Up @@ -217,7 +219,7 @@ namespace ticl {
float timeError_;

// trackster ID probabilities
std::array<float, 8> id_probabilities_;
std::array<float, kParticleTypeLength> id_probabilities_;

// The vertices of the DAG are the indices of the
// 2d objects in the global collection
Expand Down
76 changes: 38 additions & 38 deletions HLTrigger/NGTScouting/plugins/SimTracksterTableProducer.cc
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
#include <algorithm>
#include <vector>
#include <limits>
#include <string>
#include <memory>
#include "DataFormats/NanoAOD/interface/FlatTable.h"
#include "DataFormats/HGCalReco/interface/Trackster.h"
#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h"
#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/Framework/interface/Event.h"
Expand All @@ -16,11 +20,13 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> {
: tableName_(cfg.getParameter<std::string>("tableName")),
skipNonExistingSrc_(cfg.getParameter<bool>("skipNonExistingSrc")),
simTrackstersToken_(mayConsume<std::vector<ticl::Trackster>>(cfg.getParameter<edm::InputTag>("simTracksters"))),
caloParticlesToken_(mayConsume<std::vector<CaloParticle>>(cfg.getParameter<edm::InputTag>("caloParticles"))),
simClustersToken_(mayConsume<std::vector<SimCluster>>(cfg.getParameter<edm::InputTag>("simClusters"))),
caloParticleToSimClustersMap_token_(mayConsume<std::map<uint, std::vector<uint>>>(
cfg.getParameter<edm::InputTag>("caloParticleToSimClustersMap"))),
simTracksterToSimClusterMap_token_(
mayConsume<SimClusterRefVector>(cfg.getParameter<edm::InputTag>("simTracksterToSimClusterMap"))),
simTracksterToCaloParticleMap_token_(
mayConsume<CaloParticleRefVector>(cfg.getParameter<edm::InputTag>("simTracksterToCaloParticleMap"))),
precision_(cfg.getParameter<int>("precision")) {
mayConsume<std::vector<SimCluster>>(cfg.getParameter<edm::InputTag>("simClusters"));
mayConsume<std::vector<CaloParticle>>(cfg.getParameter<edm::InputTag>("caloParticles"));
produces<nanoaod::FlatTable>(tableName_);
}

Expand All @@ -31,20 +37,25 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> {
desc.add<bool>("skipNonExistingSrc", false)
->setComment("whether or not to skip producing the table on absent input product");
desc.add<edm::InputTag>("simTracksters", edm::InputTag("hltTiclSimTracksters"));
desc.add<edm::InputTag>("caloParticles", edm::InputTag("mix", "MergedCaloTruth"));
desc.add<edm::InputTag>("simClusters", edm::InputTag("mix", "MergedCaloTruth"));
desc.add<edm::InputTag>("caloParticleToSimClustersMap", edm::InputTag("hltTiclSimTracksters"));
desc.add<edm::InputTag>("simClusters", edm::InputTag("mix", "MergedCaloTruth"))
->setComment("SimCluster collection used to build simTracksters");
desc.add<edm::InputTag>("caloParticles", edm::InputTag("mix", "MergedCaloTruth"))
->setComment("CaloParticle collection (pointed to by caloParticleToSimClustersMap)");
desc.add<edm::InputTag>("simTracksterToSimClusterMap", edm::InputTag("hltTiclSimTracksters"))
->setComment("DMap SimTrackster -> SimCluster it was made from (map produced by SimTrackstersProducer)");
desc.add<edm::InputTag>("simTracksterToCaloParticleMap", edm::InputTag("hltTiclSimTracksters"))
->setComment("Direct map SimTrackster -> CaloParticle (map produced by SimTrackstersProducer)");
desc.add<int>("precision", 7);
descriptions.addWithDefaultLabel(desc);
}

private:
void produce(edm::StreamID id, edm::Event& event, const edm::EventSetup& setup) const override {
const auto simTrackstersHandle = event.getHandle(simTrackstersToken_);
const auto caloParticlesHandle = event.getHandle(caloParticlesToken_);
const auto simClustersHandle = event.getHandle(simClustersToken_);
const auto cpToSCMapHandle = event.getHandle(caloParticleToSimClustersMap_token_);

edm::Handle<SimClusterRefVector> simTracksterToSimCluster_map_handle =
event.getHandle(simTracksterToSimClusterMap_token_);
edm::Handle<CaloParticleRefVector> simTracksterToCaloParticle_map_handle =
event.getHandle(simTracksterToCaloParticleMap_token_);
const size_t nSimTracksters = simTrackstersHandle.isValid() ? simTrackstersHandle->size() : 0;

static constexpr float default_value = std::numeric_limits<float>::quiet_NaN();
Expand All @@ -62,13 +73,12 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> {
std::vector<float> genPt(nSimTracksters, default_value);
std::vector<float> mass(nSimTracksters, default_value);

if ((simTrackstersHandle.isValid() && caloParticlesHandle.isValid() && simClustersHandle.isValid() &&
cpToSCMapHandle.isValid()) ||
if ((simTrackstersHandle.isValid() && simTracksterToSimCluster_map_handle.isValid() &&
simTracksterToCaloParticle_map_handle.isValid()) ||
!(this->skipNonExistingSrc_)) {
const auto& simTracksters = *simTrackstersHandle;
const auto& caloParticles = *caloParticlesHandle;
const auto& simClusters = *simClustersHandle;
const auto& cpToSCMap = *cpToSCMapHandle;
SimClusterRefVector const& simTracksterToSimCluster_map = *simTracksterToSimCluster_map_handle;
CaloParticleRefVector const& simTracksterToCaloParticle_map = *simTracksterToCaloParticle_map_handle;

//utility lambda for filling vectors
auto fillVectors = [&](const auto& obj, size_t iSim, float time) {
Expand All @@ -94,26 +104,14 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> {

for (size_t iSim = 0; iSim < simTracksters.size(); ++iSim) {
const auto& simT = simTracksters[iSim];
float time = default_value;

if (simT.seedID() == caloParticlesHandle.id()) {
const auto& cp = caloParticles[simT.seedIndex()];
time = cp.simTime();
fillVectors(cp, iSim, time);
} else {
const auto& sc = simClusters[simT.seedIndex()];
//SCtoCP map not availalbe, use CPtoSC map instead
for (const auto& [cpIdx, scVec] : cpToSCMap) {
if (std::ranges::find(scVec, simT.seedIndex()) != scVec.end()) {
time = caloParticles[cpIdx].simTime();
break; //dont need to check further
}
}
fillVectors(sc, iSim, time);
}
assert(simT.seedID() == simTracksterToSimCluster_map.id());

SimCluster const& simCluster = *simTracksterToSimCluster_map[iSim];
CaloParticle const& caloParticle = *simTracksterToCaloParticle_map[iSim];

fillVectors(simCluster, iSim, caloParticle.simTime());
}
}

auto simTrackstersTable =
std::make_unique<nanoaod::FlatTable>(nSimTracksters, tableName_, /*singleton*/ false, /*extension*/ true);
simTrackstersTable->addColumn<float>(
Expand Down Expand Up @@ -143,9 +141,11 @@ class SimTracksterTableProducer : public edm::global::EDProducer<> {
const std::string tableName_;
const bool skipNonExistingSrc_;
const edm::EDGetTokenT<std::vector<ticl::Trackster>> simTrackstersToken_;
const edm::EDGetTokenT<std::vector<CaloParticle>> caloParticlesToken_;
const edm::EDGetTokenT<std::vector<SimCluster>> simClustersToken_;
const edm::EDGetTokenT<std::map<uint, std::vector<uint>>> caloParticleToSimClustersMap_token_;
const edm::EDGetTokenT<edm::RefVector<std::vector<SimCluster>>> simTracksterToSimClusterMap_token_;
///< Map from SimTrackster to SimCluster used to make it
const edm::EDGetTokenT<CaloParticleRefVector> simTracksterToCaloParticleMap_token_;
///< Direct map SimTrackster -> CaloParticle (works also for SimTs from SimCluster)

const unsigned int precision_;
};

Expand Down
134 changes: 52 additions & 82 deletions HLTrigger/NGTScouting/python/hltSimTracksters_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,51 @@

hltUpgradeNanoTask = cms.Task(nanoMetadata)

_variables_simTracksters = cms.PSet(
raw_energy=Var("raw_energy", "float",
doc="Raw Energy of the trackster [GeV]"),
raw_em_energy=Var("raw_em_energy", "float",
doc="EM raw Energy of the trackster [GeV]"),
raw_pt=Var(
"raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"),
regressed_energy=Var("regressed_energy", "float",
doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"),
barycenter_x=Var("barycenter.x", "float",
doc="Trackster barycenter x [cm]"),
barycenter_y=Var("barycenter.y", "float",
doc="Trackster barycenter y [cm]"),
barycenter_z=Var("barycenter.z", "float",
doc="Trackster barycenter z [cm]"),
barycenter_eta=Var("barycenter.eta", "float",
doc="Trackster barycenter pseudorapidity"),
barycenter_phi=Var("barycenter.phi", "float",
doc="Trackster barycenter phi"),
EV1=Var("eigenvalues()[0]", "float",
doc="Trackster PCA eigenvalues 0"),
EV2=Var("eigenvalues()[1]", "float",
doc="Trackster PCA eigenvalues 1"),
EV3=Var("eigenvalues()[2]", "float",
doc="Trackster PCA eigenvalues 2"),
eVector0_x=Var(
"eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"),
eVector0_y=Var(
"eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"),
eVector0_z=Var(
"eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"),
time=Var("time", "float", doc="Trackster HGCAL time"),
timeError=Var("timeError", "float",
doc="Trackster HGCAL time error")
)

hltSimTracksterTable = cms.EDProducer(
"TracksterCollectionTableProducer",
skipNonExistingSrc=cms.bool(True),
src=cms.InputTag("hltTiclSimTracksters"),
src=cms.InputTag("hltTiclSimTracksters", "fromBoundarySimCluster"),
cut=cms.string(""),
name=cms.string("hltTiclSimTracksters"),
doc=cms.string("hltTiclSimTracksters"),
singleton=cms.bool(False), # the number of entries is variable
variables=cms.PSet(
raw_energy=Var("raw_energy", "float",
doc="Raw Energy of the trackster [GeV]"),
raw_em_energy=Var("raw_em_energy", "float",
doc="EM raw Energy of the trackster [GeV]"),
raw_pt=Var(
"raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"),
regressed_energy=Var("regressed_energy", "float",
doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"),
barycenter_x=Var("barycenter.x", "float",
doc="Trackster barycenter x [cm]"),
barycenter_y=Var("barycenter.y", "float",
doc="Trackster barycenter y [cm]"),
barycenter_z=Var("barycenter.z", "float",
doc="Trackster barycenter z [cm]"),
barycenter_eta=Var("barycenter.eta", "float",
doc="Trackster barycenter pseudorapidity"),
barycenter_phi=Var("barycenter.phi", "float",
doc="Trackster barycenter phi"),
EV1=Var("eigenvalues()[0]", "float",
doc="Trackster PCA eigenvalues 0"),
EV2=Var("eigenvalues()[1]", "float",
doc="Trackster PCA eigenvalues 1"),
EV3=Var("eigenvalues()[2]", "float",
doc="Trackster PCA eigenvalues 2"),
eVector0_x=Var(
"eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"),
eVector0_y=Var(
"eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"),
eVector0_z=Var(
"eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"),
time=Var("time", "float", doc="Trackster HGCAL time"),
timeError=Var("timeError", "float",
doc="Trackster HGCAL time error")
),
variables=_variables_simTracksters,
collectionVariables=cms.PSet(
tracksterVertices=cms.PSet(
name=cms.string(f"hltTiclSimTrackstersvertices"),
Expand All @@ -70,46 +72,12 @@
hltSimTracksterFromCPsTable = cms.EDProducer(
"TracksterCollectionTableProducer",
skipNonExistingSrc=cms.bool(True),
src=cms.InputTag("hltTiclSimTracksters", "fromCPs"),
src=cms.InputTag("hltTiclSimTracksters", "fromCaloParticle"),
cut=cms.string(""),
name=cms.string("hltTiclSimTrackstersFromCPs"),
doc=cms.string("hltTiclSimTrackstersFromCPs"),
singleton=cms.bool(False), # the number of entries is variable
variables=cms.PSet(
raw_energy=Var("raw_energy", "float",
doc="Raw Energy of the trackster [GeV]"),
raw_em_energy=Var("raw_em_energy", "float",
doc="EM raw Energy of the trackster [GeV]"),
raw_pt=Var(
"raw_pt", "float", doc="Trackster raw pT, computed from trackster raw energy and direction [GeV]"),
regressed_energy=Var("regressed_energy", "float",
doc="Regressed Energy of the trackster, for the SimTrackster it corresponds to the GEN-energy"),
barycenter_x=Var("barycenter.x", "float",
doc="Trackster barycenter x [cm]"),
barycenter_y=Var("barycenter.y", "float",
doc="Trackster barycenter y [cm]"),
barycenter_z=Var("barycenter.z", "float",
doc="Trackster barycenter z [cm]"),
barycenter_eta=Var("barycenter.eta", "float",
doc="Trackster barycenter pseudorapidity"),
barycenter_phi=Var("barycenter.phi", "float",
doc="Trackster barycenter phi"),
EV1=Var("eigenvalues()[0]", "float",
doc="Trackster PCA eigenvalues 0"),
EV2=Var("eigenvalues()[1]", "float",
doc="Trackster PCA eigenvalues 1"),
EV3=Var("eigenvalues()[2]", "float",
doc="Trackster PCA eigenvalues 2"),
eVector0_x=Var(
"eigenvectors()[0].x", "float", doc="Trackster PCA principal axis, x component"),
eVector0_y=Var(
"eigenvectors()[0].z", "float", doc="Trackster PCA principal axis, y component"),
eVector0_z=Var(
"eigenvectors()[0].y", "float", doc="Trackster PCA principal axis, z component"),
time=Var("time", "float", doc="Trackster HGCAL time"),
timeError=Var("timeError", "float",
doc="Trackster HGCAL time error")
),
variables=_variables_simTracksters,
collectionVariables=cms.PSet(
tracksterVertices=cms.PSet(
name=cms.string(f"hltTiclSimTrackstersFromCPsvertices"),
Expand All @@ -132,21 +100,23 @@
# Extra tables for SimTracksters using information from SimClusters and CaloParticles
# Might be replaced in case we save CaloParticles and SimClusters, in that case we just need adding the corresponding SimObject indices in the SimTrackster tables
hltTiclSimTrackstersExtraTable = cms.EDProducer("SimTracksterTableProducer",
tableName = cms.string("hltTiclSimTracksters"),
tableName = hltSimTracksterTable.name,
skipNonExistingSrc = cms.bool(True),
simTracksters = cms.InputTag( "hltTiclSimTracksters" ),
caloParticles = cms.InputTag( "mix", "MergedCaloTruth" ),
simClusters = cms.InputTag( "mix", "MergedCaloTruth" ),
caloParticleToSimClustersMap = cms.InputTag("hltTiclSimTracksters"),
simTracksters = hltSimTracksterTable.src,
caloParticles = cms.InputTag( "mix", "MergedCaloTruth"),
simClusters = cms.InputTag( "mix", "MergedCaloTruthBoundaryTrackSimCluster"), # this has to be the same that was used for hltTiclSimTracksters
simTracksterToSimClusterMap = hltSimTracksterTable.src,
simTracksterToCaloParticleMap = hltSimTracksterTable.src,
precision = cms.int32(7),
)

hltTiclSimTrackstersFromCPsExtraTable = cms.EDProducer("SimTracksterTableProducer",
tableName = cms.string("hltTiclSimTrackstersFromCPs"),
tableName = hltSimTracksterFromCPsTable.name,
skipNonExistingSrc = cms.bool(True),
simTracksters = cms.InputTag( "hltTiclSimTracksters", "fromCPs"),
caloParticles = cms.InputTag( "mix", "MergedCaloTruth" ),
simClusters = cms.InputTag( "mix", "MergedCaloTruth" ),
caloParticleToSimClustersMap = cms.InputTag("hltTiclSimTracksters"),
simTracksters = hltSimTracksterFromCPsTable.src,
caloParticles = cms.InputTag( "mix", "MergedCaloTruth"),
simClusters = cms.InputTag( "mix", "MergedCaloTruthCaloParticle"), # this has to be the same that was used for hltTiclSimTracksters
simTracksterToSimClusterMap = hltSimTracksterFromCPsTable.src,
simTracksterToCaloParticleMap = hltSimTracksterFromCPsTable.src,
precision = cms.int32(7),
)
4 changes: 2 additions & 2 deletions HLTrigger/NGTScouting/python/hltTICLCandidates_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
hltSimTiclCandidateTable = cms.EDProducer(
"TICLCandidateTableProducer",
skipNonExistingSrc=cms.bool(True),
src=cms.InputTag("hltTiclSimTracksters"),
src=cms.InputTag("hltTiclSimTICLCandidatesFromBoundary"),
cut=cms.string(""),
name=cms.string("hltSimTICLCandidates"),
doc=cms.string("SimTICLCandidates"),
Expand Down Expand Up @@ -113,7 +113,7 @@

hltSimTiclCandidateExtraTable = cms.EDProducer(
"TICLCandidateExtraTableProducer",
src = cms.InputTag("hltTiclSimTracksters"),
src = cms.InputTag("hltTiclSimTICLCandidatesFromBoundary"),
name = cms.string("SimCandidate2Tracksters"),
skipNonExistingSrc = cms.bool(True),
doc = cms.string("TICLCandidates extra table with linked Tracksters"),
Expand Down
Loading