File indexing completed on 2024-04-06 12:29:31
0001 #include "SimCalorimetry/HcalSimAlgos/interface/HcalSimParameterMap.h"
0002 #include "DataFormats/DetId/interface/DetId.h"
0003 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
0004 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
0005 #include "DataFormats/HcalDetId/interface/HcalZDCDetId.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007
0008 HcalSimParameterMap::HcalSimParameterMap()
0009 : theHBParameters(2000., 117, 5, 10, 5, true, true, 1, std::vector<double>(16, 117.), 10.),
0010 theHEParameters(2000., 178, 5, 10, 5, true, true, 16, std::vector<double>(16, 178.), 10.),
0011 theHOParameters(4000., 217., 5, 10, 5, true, true, 1, std::vector<double>(16, 217.), 5.),
0012 theHOZecotekSiPMParameters(4000., 217., 5, 10, 5, true, true, 1, std::vector<double>(16, 217.), 5.),
0013 theHOHamamatsuSiPMParameters(4000., 217., 5, 10, 5, true, true, 1, std::vector<double>(16, 217.), 5.),
0014 theHFParameters1(6., 2.79, 1 / 0.278, -4, true),
0015 theHFParameters2(6., 2.06, 1 / 0.267, -4, true),
0016 theZDCParameters(1., 4.3333, 2.09, -4, false),
0017 theHOZecotekDetIds(),
0018 theHOHamamatsuDetIds() {}
0019
0020 HcalSimParameterMap::HcalSimParameterMap(const edm::ParameterSet &p)
0021 : theHBParameters(p.getParameter<edm::ParameterSet>("hb")),
0022 theHEParameters(p.getParameter<edm::ParameterSet>("he")),
0023 theHOParameters(p.getParameter<edm::ParameterSet>("ho")),
0024 theHOZecotekSiPMParameters(p.getParameter<edm::ParameterSet>("hoZecotek")),
0025 theHOHamamatsuSiPMParameters(p.getParameter<edm::ParameterSet>("hoHamamatsu")),
0026 theHFParameters1(p.getParameter<edm::ParameterSet>("hf1")),
0027 theHFParameters2(p.getParameter<edm::ParameterSet>("hf2")),
0028 theZDCParameters(p.getParameter<edm::ParameterSet>("zdc")) {}
0029
0030 const CaloSimParameters &HcalSimParameterMap::simParameters(const DetId &detId) const {
0031 HcalGenericDetId genericId(detId);
0032 if (genericId.isHcalZDCDetId())
0033 return theZDCParameters;
0034 HcalDetId hcalDetId(detId);
0035 if (hcalDetId.subdet() == HcalBarrel) {
0036 return theHBParameters;
0037 } else if (hcalDetId.subdet() == HcalEndcap) {
0038 return theHEParameters;
0039 } else if (hcalDetId.subdet() == HcalOuter) {
0040 if (std::find(theHOZecotekDetIds.begin(), theHOZecotekDetIds.end(), hcalDetId) != theHOZecotekDetIds.end()) {
0041 return theHOZecotekSiPMParameters;
0042 }
0043 if (std::find(theHOHamamatsuDetIds.begin(), theHOHamamatsuDetIds.end(), hcalDetId) != theHOHamamatsuDetIds.end()) {
0044 return theHOHamamatsuSiPMParameters;
0045 } else {
0046 return theHOParameters;
0047 }
0048 } else {
0049 if (hcalDetId.depth() == 1 || hcalDetId.depth() == 3) {
0050 return theHFParameters1;
0051 } else {
0052 return theHFParameters2;
0053 }
0054 }
0055 }
0056
0057 void HcalSimParameterMap::setDbService(const HcalDbService *dbService) {
0058 theHBParameters.setDbService(dbService);
0059 theHEParameters.setDbService(dbService);
0060 theHOParameters.setDbService(dbService);
0061 theHOZecotekSiPMParameters.setDbService(dbService);
0062 theHOHamamatsuSiPMParameters.setDbService(dbService);
0063 theHFParameters1.setDbService(dbService);
0064 theHFParameters2.setDbService(dbService);
0065 theZDCParameters.setDbService(dbService);
0066 }
0067
0068 void HcalSimParameterMap::setFrameSize(const DetId &detId, int frameSize) {
0069 HcalGenericDetId genericId(detId);
0070 if (genericId.isHcalZDCDetId())
0071 setFrameSize(theZDCParameters, frameSize);
0072 else {
0073 HcalDetId hcalDetId(detId);
0074 if (hcalDetId.subdet() == HcalForward) {
0075
0076 setFrameSize(theHFParameters1, frameSize);
0077 setFrameSize(theHFParameters2, frameSize);
0078 } else {
0079 CaloSimParameters ¶meters = const_cast<CaloSimParameters &>(simParameters(detId));
0080 setFrameSize(parameters, frameSize);
0081 }
0082 }
0083 }
0084
0085 void HcalSimParameterMap::setFrameSize(CaloSimParameters ¶meters, int frameSize) {
0086 int binOfMaximum = 5;
0087 if (frameSize == 10) {
0088 } else if (frameSize == 6)
0089 binOfMaximum = 4;
0090 else {
0091 edm::LogError("HcalSimParameterMap") << "Bad HCAL frame size " << frameSize;
0092 }
0093 if (parameters.readoutFrameSize() != frameSize) {
0094 edm::LogWarning("HcalSignalGenerator") << "Mismatch in frame sizes. Setting to " << frameSize;
0095 parameters.setReadoutFrameSize(frameSize);
0096 parameters.setBinOfMaximum(binOfMaximum);
0097 }
0098 }