File indexing completed on 2023-03-17 11:25:19
0001 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0002 #include "Geometry/CSCGeometry/interface/CSCChamberSpecs.h"
0003 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0004 #include "SimMuon/CSCDigitizer/src/CSCNeutronReader.h"
0005
0006 void CSCNeutronReader::addHits(std::map<int, edm::PSimHitContainer> &hitMap, CLHEP::HepRandomEngine *engine) {
0007 std::vector<int> chambersDone;
0008
0009 std::map<int, edm::PSimHitContainer> signalHits = hitMap;
0010 for (std::map<int, edm::PSimHitContainer>::const_iterator signalHitItr = signalHits.begin();
0011 signalHitItr != signalHits.end();
0012 ++signalHitItr) {
0013 int chamberIndex = chamberId(signalHitItr->first);
0014
0015
0016 if (find(chambersDone.begin(), chambersDone.end(), chamberIndex) == chambersDone.end()) {
0017 edm::PSimHitContainer neutronHits;
0018 generateChamberNoise(chamberType(chamberIndex), chamberIndex, neutronHits, engine);
0019
0020
0021 for (edm::PSimHitContainer::const_iterator neutronHitItr = neutronHits.begin();
0022 neutronHitItr != neutronHits.end();
0023 ++neutronHitItr) {
0024 uint32_t layerId = neutronHitItr->detUnitId();
0025 hitMap[layerId].push_back(*neutronHitItr);
0026 }
0027
0028 chambersDone.push_back(chamberIndex);
0029 }
0030 }
0031 }
0032
0033 int CSCNeutronReader::detId(int chamberIndex, int localDetId) {
0034
0035 return chamberIndex + localDetId;
0036 }
0037
0038 int CSCNeutronReader::localDetId(int globalDetId) const { return CSCDetId(globalDetId).layer(); }
0039
0040 int CSCNeutronReader::chamberType(int globalDetId) const {
0041 CSCDetId id(globalDetId);
0042 return CSCChamberSpecs::whatChamberType(id.station(), id.ring());
0043 }
0044
0045 int CSCNeutronReader::chamberId(int globalDetId) const { return CSCDetId(globalDetId).chamberId().rawId(); }