CMS 3D CMS Logo

CSCHitAssociator.cc
Go to the documentation of this file.
7 
9  theDigiSimLinks(0),
10  linksTag(conf.getParameter<edm::InputTag>("CSClinksTag"))
11 {
12  initEvent(event,setup);
13 }
14 
16  theDigiSimLinks(0),
17  linksTag(conf.getParameter<edm::InputTag>("CSClinksTag"))
18 {
19  iC.consumes<DigiSimLinks>(linksTag);
20 }
21 
23 
25  LogTrace("CSCHitAssociator") <<"getting CSC Strip DigiSimLink collection - "<<linksTag;
26  event.getByLabel(linksTag, digiSimLinks);
27  theDigiSimLinks = digiSimLinks.product();
28 
29  // get CSC Geometry to use CSCLayer methods
31  setup.get<MuonGeometryRecord>().get( mugeom );
32  cscgeom = &*mugeom;
33 }
34 
35 std::vector<CSCHitAssociator::SimHitIdpr> CSCHitAssociator::associateCSCHitId(const CSCRecHit2D * cscrechit) const {
36  std::vector<SimHitIdpr> simtrackids;
37 
38  unsigned int detId = cscrechit->geographicalId().rawId();
39  int nchannels = cscrechit->nStrips();
40  const CSCLayerGeometry * laygeom = cscgeom->layer(cscrechit->cscDetId())->geometry();
41 
43 
44  if (layerLinks != theDigiSimLinks->end()) {
45 
46  for(int idigi = 0; idigi < nchannels; ++idigi) {
47  // strip and readout channel numbers may differ in ME1/1A
48  int istrip = cscrechit->channels(idigi);
49  int channel = laygeom->channel(istrip);
50 
51  for (LayerLinks::const_iterator link=layerLinks->begin(); link!=layerLinks->end(); ++link) {
52  int ch = static_cast<int>(link->channel());
53  if (ch == channel) {
54  SimHitIdpr currentId(link->SimTrackId(), link->eventId());
55  if (find(simtrackids.begin(), simtrackids.end(), currentId) == simtrackids.end())
56  simtrackids.push_back(currentId);
57  }
58  }
59  }
60 
61  } else edm::LogWarning("CSCHitAssociator")
62  <<"*** WARNING in CSCHitAssociator::associateCSCHitId - CSC layer "<<detId<<" has no DigiSimLinks !"<<std::endl;
63 
64  return simtrackids;
65 }
66 
67 
68 std::vector<CSCHitAssociator::SimHitIdpr> CSCHitAssociator::associateHitId(const TrackingRecHit & hit) const
69 {
70  std::vector<SimHitIdpr> simtrackids;
71 
72  const TrackingRecHit * hitp = &hit;
73  const CSCRecHit2D * cscrechit = dynamic_cast<const CSCRecHit2D *>(hitp);
74 
75  if (cscrechit) {
76 
77  unsigned int detId = cscrechit->geographicalId().rawId();
78  int nchannels = cscrechit->nStrips();
79  const CSCLayerGeometry * laygeom = cscgeom->layer(cscrechit->cscDetId())->geometry();
80 
82 
83  if (layerLinks != theDigiSimLinks->end()) {
84 
85  for(int idigi = 0; idigi < nchannels; ++idigi) {
86  // strip and readout channel numbers may differ in ME1/1A
87  int istrip = cscrechit->channels(idigi);
88  int channel = laygeom->channel(istrip);
89 
90  for (LayerLinks::const_iterator link=layerLinks->begin(); link!=layerLinks->end(); ++link) {
91  int ch = static_cast<int>(link->channel());
92  if (ch == channel) {
93  SimHitIdpr currentId(link->SimTrackId(), link->eventId());
94  if (find(simtrackids.begin(), simtrackids.end(), currentId) == simtrackids.end())
95  simtrackids.push_back(currentId);
96  }
97  }
98  }
99 
100  } else edm::LogWarning("CSCHitAssociator")
101  <<"*** WARNING in CSCHitAssociator::associateHitId - CSC layer "<<detId<<" has no DigiSimLinks !"<<std::endl;
102 
103  } else edm::LogWarning("CSCHitAssociator")<<"*** WARNING in CSCHitAssociator::associateHitId, null dynamic_cast !";
104 
105  return simtrackids;
106 }
107 
108 
CSCDetId cscDetId() const
Definition: CSCRecHit2D.h:52
iterator find(det_id_type id)
Definition: DetSetVector.h:290
edm::InputTag linksTag
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
std::vector< SimHitIdpr > associateCSCHitId(const CSCRecHit2D *) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
CSCHitAssociator(const edm::Event &, const edm::EventSetup &, const edm::ParameterSet &)
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
int channels(unsigned int i) const
Extracting strip channel numbers comprising the rechit - low.
Definition: CSCRecHit2D.h:55
std::vector< SimHitIdpr > associateHitId(const TrackingRecHit &) const
unsigned int nStrips() const
Definition: CSCRecHit2D.h:56
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:361
#define LogTrace(id)
int channel(int strip) const
std::pair< uint32_t, EncodedEventId > SimHitIdpr
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:55
const DigiSimLinks * theDigiSimLinks
ESHandle< TrackerGeometry > geometry
HLT enums.
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:124
const CSCGeometry * cscgeom
DetId geographicalId() const
collection_type::const_iterator const_iterator
Definition: DetSet.h:33
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:104
void initEvent(const edm::Event &, const edm::EventSetup &)
Definition: event.py:1