|
|
Go to the documentation of this file.
22 edm::LogWarning(
"GEMSimHitMatcher") <<
"+++ Info: GEM geometry is unavailable. +++\n";
40 const auto& gem_ch_ids =
detIds();
41 for (
const auto&
id : gem_ch_ids) {
44 edm::LogInfo(
"GEMSimHitMatcher") <<
"gemchid " <<
GEMDetId(
id) <<
": nHits " << gem_simhits.size() <<
" phi "
54 for (
const auto&
id : gem_sch_ids) {
58 << gem_simhits.size() <<
" " << gem_simhits_gp.phi() <<
" "
68 if (
h.trackId() != track_id)
70 int pdgid =
h.particleType();
86 const auto& detids =
detIds();
88 for (
const auto&
d : detids) {
91 const auto& roll = dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
id);
94 for (
const auto&
h :
hits) {
96 pads.insert(1 + static_cast<int>(roll->padTopology().channel(lp)));
102 for (
const auto&
d : detids) {
104 if (
id1.layer() != 1)
109 const auto& roll1 = dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
id1);
114 for (
const auto&
h : hits1) {
116 pads1.insert(1 + static_cast<int>(roll1->padTopology().channel(lp)));
118 edm::LogInfo(
"GEMSimHitMatcher") <<
"GEMHits detid1 " <<
id1 <<
" pad1 "
119 << 1 + static_cast<int>(roll1->padTopology().channel(lp)) << std::endl;
123 for (
const auto& d2 : detids) {
131 const auto& roll2 = dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
id2);
132 for (
const auto&
h : hits2) {
134 pads2.insert(1 + static_cast<int>(roll2->padTopology().channel(lp)));
136 edm::LogInfo(
"GEMSimHitMatcher") <<
"GEMHits detid2 " <<
id2 <<
" pad2 "
137 << 1 + static_cast<int>(roll2->padTopology().channel(lp)) << std::endl;
141 for (
const auto& pad1 : pads1) {
142 for (
const auto& pad2 : pads2) {
143 if (
abs(pad1 - pad2) <= 2) {
144 if (copads.find(pad1) == copads.end())
146 if (copads.find(pad2) == copads.end())
161 std::set<unsigned int>
result;
163 const auto&
id =
p.first;
175 std::set<unsigned int>
result;
182 std::set<unsigned int>
result;
184 const auto&
id =
p.first;
196 std::set<unsigned int>
result;
203 std::set<unsigned int>
result;
223 set<int> layers_with_hits;
225 for (
const auto&
h :
hits) {
227 layers_with_hits.insert(idd.layer());
229 return layers_with_hits.size();
250 if (sim_hits.empty())
255 for (
const auto&
h : sim_hits) {
263 edm::LogWarning(
"GEMSimHitMatcher") <<
"warning! find more than one simhits in GEM chamber " << std::endl;
271 if (sim_hits.empty())
276 for (
const auto&
h : sim_hits) {
278 const auto&
d =
h.detUnitId();
279 sums += dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
d)->strip(lp);
291 int max_nstrips = dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
id)->nstrips();
295 static_cast<int>(dynamic_cast<const GEMGeometry*>(
geometry_)->etaPartition(
id)->
topology().channel(lp));
296 int smin = central_strip - margin_n_strips;
297 smin = (smin > 0) ? smin : 1;
298 int smax = central_strip + margin_n_strips;
299 smax = (smax <= max_nstrips) ? smax : max_nstrips;
300 for (
int ss = smin;
ss <= smax; ++
ss)
323 const auto& detids =
detIds();
324 for (
const auto&
id : detids) {
333 const auto& pad_ids =
detIds();
334 for (
const auto&
id : pad_ids) {
343 for (
const auto&
id : copad_ids) {
constexpr int ring() const
static int toGEMType(int st, int ri)
const TrackingGeometry * geometry_
int nLayersWithHitsInSuperChamber(unsigned int) const
std::set< unsigned int > superChamberIdsCoincidences() const
std::set< unsigned int > detIdsCoincidences() const
edm::ESHandle< GEMGeometry > gem_geom_
std::map< unsigned int, edm::PSimHitContainer > detid_to_hits_
GlobalPoint simHitsMeanPosition(const edm::PSimHitContainer &sim_hits) const
static bool isGEM(unsigned int detId)
constexpr GEMDetId superChamberId() const
void init(const edm::Event &e, const edm::EventSetup &eventSetup)
initialize the event
int nCoincidencePadsWithHits() const
edm::PSimHitContainer simHits_
bool hitStation(int, int) const
std::set< unsigned int > superChamberIds() const
virtual const GeomDet * idToDet(DetId) const =0
std::set< int > hitCoPadsInDetId(unsigned int) const
const CaloTopology * topology(nullptr)
std::set< int > hitPartitions() const
GEMSimHitMatcher(const edm::ParameterSet &iPS, edm::ConsumesCollector &&iC)
edm::ParameterSet simHitPSet_
int nStations(int nl=2) const
std::vector< unsigned > track_ids_
edm::PSimHitContainer no_hits_
std::set< unsigned int > detIds(int gem_type=MuonHitHelper::GEM_ALL) const
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
float simHitsMeanStrip(const edm::PSimHitContainer &sim_hits) const
void match(const SimTrack &t, const SimVertex &v)
do the matching
constexpr int roll() const
std::map< unsigned int, edm::PSimHitContainer > chamber_to_hits_
std::map< unsigned int, edm::PSimHitContainer > superchamber_to_hits_
edm::EDGetTokenT< edm::PSimHitContainer > simHitInput_
T getParameter(std::string const &) const
const edm::PSimHitContainer & hitsInDetId(unsigned int) const
constexpr uint32_t rawId() const
get the raw id
std::map< unsigned int, std::set< int > > detids_to_copads_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void matchSimHitsToSimTrack()
float simHitsGEMCentralPosition(const edm::PSimHitContainer &sim_hits) const
std::set< int > hitPadsInDetId(unsigned int) const
constexpr int station() const
Abs< T >::type abs(const T &t)
std::vector< PSimHit > PSimHitContainer
std::set< unsigned int > chamberIds(int gem_type=MuonHitHelper::GEM_ALL) const
const edm::PSimHitContainer & hitsInSuperChamber(unsigned int) const
edm::PSimHitContainer hits_
void init(const edm::Event &e, const edm::EventSetup &eventSetup)
initialize the event
std::set< int > hitStripsInDetId(unsigned int, int margin_n_strips=0) const
int nPadsWithHits() const
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers....
ParameterSet const & getParameterSet(std::string const &) const
std::map< unsigned int, std::set< int > > detids_to_pads_
void match(const SimTrack &t, const SimVertex &v)
do the matching