Skip to content

Commit d767c50

Browse files
authored
Merge pull request cms-sw#33893 from lecriste/TST-to-SimTST_assoc
[HGCAL] Trackster to SimTrackster associator
2 parents e2670c9 + 2d178de commit d767c50

12 files changed

+865
-2
lines changed

SimCalorimetry/HGCalAssociatorProducers/plugins/TSToSCAssociatorEDProducer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ void TSToSCAssociatorEDProducer::produce(edm::StreamID, edm::Event &iEvent, cons
7575
Handle<reco::CaloClusterCollection> LCCollection;
7676
iEvent.getByToken(LCCollectionToken_, LCCollection);
7777

78-
// associate LC and SC
78+
// associate TS and SC
7979
LogTrace("AssociatorValidator") << "Calling associateRecoToSim method\n";
8080
hgcal::RecoToSimCollectionTracksters recSimColl =
8181
theAssociator->associateRecoToSim(TSCollection, LCCollection, SCCollection);

SimCalorimetry/HGCalAssociatorProducers/plugins/TSToSimTSAssociatorByEnergyScoreImpl.cc

Lines changed: 471 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// Original Author: Leonardo Cristella
2+
3+
#include <vector>
4+
#include <map>
5+
#include <unordered_map>
6+
#include <memory> // shared_ptr
7+
8+
#include "DataFormats/ForwardDetId/interface/HGCalDetId.h"
9+
#include "DataFormats/HGCRecHit/interface/HGCRecHit.h"
10+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociator.h"
11+
#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h"
12+
13+
namespace edm {
14+
class EDProductGetter;
15+
}
16+
17+
namespace hgcal {
18+
struct lcInfoInTrackster {
19+
bool operator==(const lcInfoInTrackster &o) const { return clusterId == o.clusterId; };
20+
long unsigned int clusterId;
21+
float fraction;
22+
lcInfoInTrackster(long unsigned int cId, float fr) {
23+
clusterId = cId;
24+
fraction = fr;
25+
}
26+
};
27+
28+
struct simTracksterOnLayer {
29+
unsigned int simTracksterId;
30+
float energy = 0;
31+
std::vector<std::pair<unsigned int, float>> lcs_and_fractions;
32+
std::unordered_map<int, std::pair<float, float>> tracksterIdToEnergyAndScore;
33+
};
34+
35+
typedef std::vector<std::vector<std::pair<unsigned int, float>>> tracksterToSimTrackster;
36+
typedef std::vector<hgcal::simTracksterOnLayer> simTracksterToTrackster;
37+
typedef std::tuple<tracksterToSimTrackster, simTracksterToTrackster> association;
38+
} // namespace hgcal
39+
40+
class TSToSimTSAssociatorByEnergyScoreImpl : public hgcal::TracksterToSimTracksterAssociatorBaseImpl {
41+
public:
42+
explicit TSToSimTSAssociatorByEnergyScoreImpl(edm::EDProductGetter const &,
43+
bool,
44+
std::shared_ptr<hgcal::RecHitTools>,
45+
const std::unordered_map<DetId, const HGCRecHit *> *);
46+
47+
hgcal::RecoToSimCollectionSimTracksters associateRecoToSim(
48+
const edm::Handle<ticl::TracksterCollection> &tCH,
49+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
50+
const edm::Handle<ticl::TracksterCollection> &sTCH) const override;
51+
52+
hgcal::SimToRecoCollectionSimTracksters associateSimToReco(
53+
const edm::Handle<ticl::TracksterCollection> &tCH,
54+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
55+
const edm::Handle<ticl::TracksterCollection> &sTCH) const override;
56+
57+
private:
58+
const bool hardScatterOnly_;
59+
std::shared_ptr<hgcal::RecHitTools> recHitTools_;
60+
const std::unordered_map<DetId, const HGCRecHit *> *hitMap_;
61+
unsigned layers_;
62+
edm::EDProductGetter const *productGetter_;
63+
hgcal::association makeConnections(const edm::Handle<ticl::TracksterCollection> &tCH,
64+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
65+
const edm::Handle<ticl::TracksterCollection> &sTCH) const;
66+
};
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Original author: Leonardo Cristella
2+
3+
// user include files
4+
#include "FWCore/Framework/interface/Frameworkfwd.h"
5+
#include "FWCore/Framework/interface/global/EDProducer.h"
6+
7+
#include "FWCore/Framework/interface/Event.h"
8+
#include "FWCore/Framework/interface/MakerMacros.h"
9+
10+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
11+
#include "FWCore/Utilities/interface/EDGetToken.h"
12+
#include "FWCore/Utilities/interface/ESGetToken.h"
13+
14+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociator.h"
15+
#include "TSToSimTSAssociatorByEnergyScoreImpl.h"
16+
17+
class TSToSimTSAssociatorByEnergyScoreProducer : public edm::global::EDProducer<> {
18+
public:
19+
explicit TSToSimTSAssociatorByEnergyScoreProducer(const edm::ParameterSet &);
20+
~TSToSimTSAssociatorByEnergyScoreProducer() override;
21+
22+
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
23+
24+
private:
25+
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
26+
edm::EDGetTokenT<std::unordered_map<DetId, const HGCRecHit *>> hitMap_;
27+
edm::ESGetToken<CaloGeometry, CaloGeometryRecord> caloGeometry_;
28+
const bool hardScatterOnly_;
29+
std::shared_ptr<hgcal::RecHitTools> rhtools_;
30+
};
31+
32+
TSToSimTSAssociatorByEnergyScoreProducer::TSToSimTSAssociatorByEnergyScoreProducer(const edm::ParameterSet &ps)
33+
: hitMap_(consumes<std::unordered_map<DetId, const HGCRecHit *>>(ps.getParameter<edm::InputTag>("hitMapTag"))),
34+
caloGeometry_(esConsumes<CaloGeometry, CaloGeometryRecord>()),
35+
hardScatterOnly_(ps.getParameter<bool>("hardScatterOnly")) {
36+
rhtools_.reset(new hgcal::RecHitTools());
37+
38+
// Register the product
39+
produces<hgcal::TracksterToSimTracksterAssociator>();
40+
}
41+
42+
TSToSimTSAssociatorByEnergyScoreProducer::~TSToSimTSAssociatorByEnergyScoreProducer() {}
43+
44+
void TSToSimTSAssociatorByEnergyScoreProducer::produce(edm::StreamID,
45+
edm::Event &iEvent,
46+
const edm::EventSetup &es) const {
47+
edm::ESHandle<CaloGeometry> geom = es.getHandle(caloGeometry_);
48+
rhtools_->setGeometry(*geom);
49+
50+
const auto hitMap = &iEvent.get(hitMap_);
51+
52+
auto impl = std::make_unique<TSToSimTSAssociatorByEnergyScoreImpl>(
53+
iEvent.productGetter(), hardScatterOnly_, rhtools_, hitMap);
54+
auto toPut = std::make_unique<hgcal::TracksterToSimTracksterAssociator>(std::move(impl));
55+
iEvent.put(std::move(toPut));
56+
}
57+
58+
void TSToSimTSAssociatorByEnergyScoreProducer::fillDescriptions(edm::ConfigurationDescriptions &cfg) {
59+
edm::ParameterSetDescription desc;
60+
desc.add<edm::InputTag>("hitMapTag", edm::InputTag("hgcalRecHitMapProducer"));
61+
desc.add<bool>("hardScatterOnly", true);
62+
63+
cfg.add("simTracksterAssociatorByEnergyScore", desc);
64+
}
65+
66+
//define this as a plug-in
67+
DEFINE_FWK_MODULE(TSToSimTSAssociatorByEnergyScoreProducer);
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//
2+
// Original Author: Leonardo Cristella
3+
// Created: Thu Dec 3 10:52:11 CET 2020
4+
//
5+
//
6+
7+
// system include files
8+
#include <memory>
9+
#include <string>
10+
11+
// user include files
12+
#include "FWCore/Framework/interface/global/EDProducer.h"
13+
14+
#include "FWCore/Framework/interface/Event.h"
15+
#include "FWCore/Framework/interface/MakerMacros.h"
16+
17+
#include "FWCore/Framework/interface/ESHandle.h"
18+
19+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
20+
21+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociator.h"
22+
23+
#include "FWCore/MessageLogger/interface/MessageLogger.h"
24+
#include "DataFormats/HGCalReco/interface/Trackster.h"
25+
26+
#include "FWCore/Utilities/interface/EDGetToken.h"
27+
28+
//
29+
// class decleration
30+
//
31+
32+
class TSToSimTSAssociatorEDProducer : public edm::global::EDProducer<> {
33+
public:
34+
explicit TSToSimTSAssociatorEDProducer(const edm::ParameterSet &);
35+
~TSToSimTSAssociatorEDProducer() override;
36+
37+
private:
38+
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
39+
40+
edm::EDGetTokenT<ticl::TracksterCollection> TSCollectionToken_;
41+
edm::EDGetTokenT<ticl::TracksterCollection> SimTSCollectionToken_;
42+
edm::EDGetTokenT<reco::CaloClusterCollection> LCCollectionToken_;
43+
edm::EDGetTokenT<hgcal::TracksterToSimTracksterAssociator> associatorToken_;
44+
};
45+
46+
TSToSimTSAssociatorEDProducer::TSToSimTSAssociatorEDProducer(const edm::ParameterSet &pset) {
47+
produces<hgcal::SimToRecoCollectionSimTracksters>();
48+
produces<hgcal::RecoToSimCollectionSimTracksters>();
49+
50+
TSCollectionToken_ = consumes<ticl::TracksterCollection>(pset.getParameter<edm::InputTag>("label_tst"));
51+
SimTSCollectionToken_ = consumes<ticl::TracksterCollection>(pset.getParameter<edm::InputTag>("label_simTst"));
52+
LCCollectionToken_ = consumes<reco::CaloClusterCollection>(pset.getParameter<edm::InputTag>("label_lcl"));
53+
associatorToken_ = consumes<hgcal::TracksterToSimTracksterAssociator>(pset.getParameter<edm::InputTag>("associator"));
54+
}
55+
56+
TSToSimTSAssociatorEDProducer::~TSToSimTSAssociatorEDProducer() {}
57+
58+
//
59+
// member functions
60+
//
61+
62+
// ------------ method called to produce the data ------------
63+
void TSToSimTSAssociatorEDProducer::produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const {
64+
using namespace edm;
65+
66+
edm::Handle<hgcal::TracksterToSimTracksterAssociator> theAssociator;
67+
iEvent.getByToken(associatorToken_, theAssociator);
68+
69+
Handle<ticl::TracksterCollection> TSCollection;
70+
iEvent.getByToken(TSCollectionToken_, TSCollection);
71+
72+
Handle<ticl::TracksterCollection> SimTSCollection;
73+
iEvent.getByToken(SimTSCollectionToken_, SimTSCollection);
74+
75+
Handle<reco::CaloClusterCollection> LCCollection;
76+
iEvent.getByToken(LCCollectionToken_, LCCollection);
77+
78+
// associate TS and SimTS
79+
LogTrace("AssociatorValidator") << "Calling associateRecoToSim method\n";
80+
hgcal::RecoToSimCollectionSimTracksters recSimColl =
81+
theAssociator->associateRecoToSim(TSCollection, LCCollection, SimTSCollection);
82+
83+
LogTrace("AssociatorValidator") << "Calling associateSimToReco method\n";
84+
hgcal::SimToRecoCollectionSimTracksters simRecColl =
85+
theAssociator->associateSimToReco(TSCollection, LCCollection, SimTSCollection);
86+
87+
auto rts = std::make_unique<hgcal::RecoToSimCollectionSimTracksters>(recSimColl);
88+
auto str = std::make_unique<hgcal::SimToRecoCollectionSimTracksters>(simRecColl);
89+
90+
iEvent.put(std::move(rts));
91+
iEvent.put(std::move(str));
92+
}
93+
94+
// define this as a plug-in
95+
DEFINE_FWK_MODULE(TSToSimTSAssociatorEDProducer);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import FWCore.ParameterSet.Config as cms
2+
3+
tracksterSimTracksterAssociation = cms.EDProducer("TSToSimTSAssociatorEDProducer",
4+
associator = cms.InputTag('simTsAssocByEnergyScoreProducer'),
5+
label_tst = cms.InputTag("ticlTrackstersMerge"),
6+
label_simTst = cms.InputTag("ticlSimTracksters"),
7+
label_lcl = cms.InputTag("hgcalLayerClusters")
8+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#ifndef SimDataFormats_Associations_TracksterToSimTracksterAssociator_h
2+
#define SimDataFormats_Associations_TracksterToSimTracksterAssociator_h
3+
// Original Author: Leonardo Cristella
4+
5+
// system include files
6+
#include <memory>
7+
8+
// user include files
9+
10+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociatorBaseImpl.h"
11+
12+
// forward declarations
13+
14+
namespace hgcal {
15+
16+
class TracksterToSimTracksterAssociator {
17+
public:
18+
TracksterToSimTracksterAssociator(std::unique_ptr<hgcal::TracksterToSimTracksterAssociatorBaseImpl>);
19+
TracksterToSimTracksterAssociator() = default;
20+
TracksterToSimTracksterAssociator(TracksterToSimTracksterAssociator &&) = default;
21+
TracksterToSimTracksterAssociator &operator=(TracksterToSimTracksterAssociator &&) = default;
22+
~TracksterToSimTracksterAssociator() = default;
23+
24+
// ---------- const member functions ---------------------
25+
/// Associate a Trackster to SimClusters
26+
hgcal::RecoToSimCollectionSimTracksters associateRecoToSim(
27+
const edm::Handle<ticl::TracksterCollection> &tCH,
28+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
29+
const edm::Handle<ticl::TracksterCollection> &sTCH) const {
30+
return m_impl->associateRecoToSim(tCH, lCCH, sTCH);
31+
};
32+
33+
/// Associate a SimCluster to Tracksters
34+
hgcal::SimToRecoCollectionSimTracksters associateSimToReco(
35+
const edm::Handle<ticl::TracksterCollection> &tCH,
36+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
37+
const edm::Handle<ticl::TracksterCollection> &sTCH) const {
38+
return m_impl->associateSimToReco(tCH, lCCH, sTCH);
39+
}
40+
41+
private:
42+
TracksterToSimTracksterAssociator(const TracksterToSimTracksterAssociator &) = delete; // stop default
43+
44+
const TracksterToSimTracksterAssociator &operator=(const TracksterToSimTracksterAssociator &) =
45+
delete; // stop default
46+
47+
// ---------- member data --------------------------------
48+
std::unique_ptr<TracksterToSimTracksterAssociatorBaseImpl> m_impl;
49+
};
50+
} // namespace hgcal
51+
52+
#endif
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef SimDataFormats_Associations_TracksterToSimTracksterAssociatorBaseImpl_h
2+
#define SimDataFormats_Associations_TracksterToSimTracksterAssociatorBaseImpl_h
3+
4+
/** \class TracksterToSimTracksterAssociatorBaseImpl
5+
*
6+
* Base class for TracksterToSimTracksterAssociator. Methods take as input
7+
* the handles of Tracksters, LayerClusters and SimTracksters collections and return an
8+
* AssociationMap (oneToManyWithQuality)
9+
*
10+
* \author Leonardo Cristella
11+
*/
12+
13+
#include "DataFormats/Common/interface/Handle.h"
14+
#include "DataFormats/Common/interface/AssociationMap.h"
15+
#include "DataFormats/HGCalReco/interface/Trackster.h"
16+
#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
17+
18+
#include "SimDataFormats/CaloAnalysis/interface/SimClusterFwd.h"
19+
20+
namespace hgcal {
21+
22+
typedef edm::AssociationMap<
23+
edm::OneToManyWithQualityGeneric<ticl::TracksterCollection, ticl::TracksterCollection, std::pair<float, float>>>
24+
SimToRecoCollectionSimTracksters;
25+
typedef edm::AssociationMap<
26+
edm::OneToManyWithQualityGeneric<ticl::TracksterCollection, ticl::TracksterCollection, float>>
27+
RecoToSimCollectionSimTracksters;
28+
29+
class TracksterToSimTracksterAssociatorBaseImpl {
30+
public:
31+
/// Constructor
32+
TracksterToSimTracksterAssociatorBaseImpl();
33+
/// Destructor
34+
virtual ~TracksterToSimTracksterAssociatorBaseImpl();
35+
36+
/// Associate a Trackster to SimClusters
37+
virtual hgcal::RecoToSimCollectionSimTracksters associateRecoToSim(
38+
const edm::Handle<ticl::TracksterCollection> &tCH,
39+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
40+
const edm::Handle<ticl::TracksterCollection> &sTCH) const;
41+
42+
/// Associate a SimCluster to Tracksters
43+
virtual hgcal::SimToRecoCollectionSimTracksters associateSimToReco(
44+
const edm::Handle<ticl::TracksterCollection> &tCH,
45+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
46+
const edm::Handle<ticl::TracksterCollection> &sTCH) const;
47+
};
48+
} // namespace hgcal
49+
50+
#endif
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Original Author: Leonardo Cristella
2+
3+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociator.h"
4+
5+
hgcal::TracksterToSimTracksterAssociator::TracksterToSimTracksterAssociator(
6+
std::unique_ptr<hgcal::TracksterToSimTracksterAssociatorBaseImpl> ptr)
7+
: m_impl(std::move(ptr)) {}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Original Author: Leonardo Cristella
2+
3+
#include "SimDataFormats/Associations/interface/TracksterToSimTracksterAssociatorBaseImpl.h"
4+
5+
namespace hgcal {
6+
TracksterToSimTracksterAssociatorBaseImpl::TracksterToSimTracksterAssociatorBaseImpl(){};
7+
TracksterToSimTracksterAssociatorBaseImpl::~TracksterToSimTracksterAssociatorBaseImpl(){};
8+
9+
hgcal::RecoToSimCollectionSimTracksters TracksterToSimTracksterAssociatorBaseImpl::associateRecoToSim(
10+
const edm::Handle<ticl::TracksterCollection> &tCH,
11+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
12+
const edm::Handle<ticl::TracksterCollection> &sTCH) const {
13+
return hgcal::RecoToSimCollectionSimTracksters();
14+
}
15+
16+
hgcal::SimToRecoCollectionSimTracksters TracksterToSimTracksterAssociatorBaseImpl::associateSimToReco(
17+
const edm::Handle<ticl::TracksterCollection> &tCH,
18+
const edm::Handle<reco::CaloClusterCollection> &lCCH,
19+
const edm::Handle<ticl::TracksterCollection> &sTCH) const {
20+
return hgcal::SimToRecoCollectionSimTracksters();
21+
}
22+
23+
} // namespace hgcal

0 commit comments

Comments
 (0)