CMS 3D CMS Logo

HcalSimParameters.cc
Go to the documentation of this file.
9 #include "CLHEP/Random/RandGaussQ.h"
10 using namespace std;
11 
13  double samplingFactor,
14  double timePhase,
15  int readoutFrameSize,
16  int binOfMaximum,
17  bool doPhotostatistics,
18  bool syncPhase,
19  int firstRing,
20  const std::vector<double>& samplingFactors,
21  double sipmTau)
23  0.0,
25  timePhase,
29  syncPhase),
30  theDbService(nullptr),
31  theSiPMcharacteristics(nullptr),
32  theFirstRing(firstRing),
33  theSamplingFactors(samplingFactors),
34  theSiPMSmearing(false),
35  doTimeSmear_(true),
36  theSiPMTau(sipmTau) {
38 
39  edm::LogInfo("HcalSimParameters:") << " doSiPMsmearing = " << theSiPMSmearing;
40 }
41 
44  theDbService(nullptr),
45  theFirstRing(p.getParameter<int>("firstRing")),
46  theSamplingFactors(p.getParameter<std::vector<double> >("samplingFactors")),
47  theSiPMSmearing(p.getParameter<bool>("doSiPMSmearing")),
48  doTimeSmear_(p.getParameter<bool>("timeSmearing")),
49  theSiPMTau(p.getParameter<double>("sipmTau")),
50  threshold_currentTDC_(p.getParameter<double>("threshold_currentTDC")) {
52 
53  edm::LogInfo("HcalSimParameters:") << " doSiPMsmearing = " << theSiPMSmearing;
54 }
55 
57  assert(service);
59  theSiPMcharacteristics = service->getHcalSiPMCharacteristics();
61 }
62 
64  // the gain is in units of GeV/fC. We want a constant with pe/dGeV
65  // pe/dGeV = (GeV/dGeV) / (GeV/fC) / (fC/pe)
67  if (HcalGenericDetId(detId).genericSubdet() != HcalGenericDetId::HcalGenForward ||
68  HcalGenericDetId(detId).genericSubdet() != HcalGenericDetId::HcalGenZDC) {
69  result = samplingFactor(detId) / fCtoGeV(detId) / photoelectronsToAnalog(detId);
70  }
71  return result;
72 }
73 
74 double HcalSimParameters::fCtoGeV(const DetId& detId) const {
75  assert(theDbService != nullptr);
76  HcalGenericDetId hcalGenDetId(detId);
77  const HcalGain* gains = theDbService->getGain(hcalGenDetId);
78  const HcalGainWidth* gwidths = theDbService->getGainWidth(hcalGenDetId);
79  double result = 0.0;
80  if (!gains || !gwidths) {
81  edm::LogError("HcalAmplifier") << "Could not fetch HCAL conditions for channel " << hcalGenDetId;
82  } else {
83  // only one gain will be recorded per channel, so just use capID 0 for now
84  result = gains->getValue(0);
85  // if(doNoise_)
87  // result += CLHEP::RandGaussQ::shoot(0., gwidths->getValue(0));
88  // }
89  }
90  return result;
91 }
92 
93 double HcalSimParameters::samplingFactor(const DetId& detId) const {
94  HcalDetId hcalDetId(detId);
95  return theSamplingFactors.at(hcalDetId.ietaAbs() - theFirstRing);
96 }
97 
99  //now always taken from database for HPDs or SiPMs (HB, HE, HO)
101  return theDbService->getHcalSiPMParameter(detId)->getFCByPE();
102 }
103 
104 //static const double GeV2fC = 1.0/0.145;
105 static const double GeV2fC = 1.0 / 0.4;
106 
108  // GeV->ampl (fC), time (ns)
109  theSmearSettings.emplace_back(4.00 * GeV2fC, 4.050);
110  theSmearSettings.emplace_back(20.00 * GeV2fC, 3.300);
111  theSmearSettings.emplace_back(25.00 * GeV2fC, 2.925);
112  theSmearSettings.emplace_back(30.00 * GeV2fC, 2.714);
113  theSmearSettings.emplace_back(37.00 * GeV2fC, 2.496);
114  theSmearSettings.emplace_back(44.50 * GeV2fC, 2.278);
115  theSmearSettings.emplace_back(56.00 * GeV2fC, 2.138);
116  theSmearSettings.emplace_back(63.50 * GeV2fC, 2.022);
117  theSmearSettings.emplace_back(81.00 * GeV2fC, 1.788);
118  theSmearSettings.emplace_back(88.50 * GeV2fC, 1.695);
119  theSmearSettings.emplace_back(114.50 * GeV2fC, 1.716);
120  theSmearSettings.emplace_back(175.50 * GeV2fC, 1.070);
121  theSmearSettings.emplace_back(350.00 * GeV2fC, 1.564);
122  theSmearSettings.emplace_back(99999.00 * GeV2fC, 1.564);
123 }
124 
125 double HcalSimParameters::timeSmearRMS(double ampl) const {
127  double smearsigma = 0;
128 
129  for (i = 0; i < theSmearSettings.size(); i++)
130  if (theSmearSettings[i].first > ampl)
131  break;
132 
133  // Smearing occurs only within the envelope definitions.
134  if (i != 0 && (i < theSmearSettings.size())) {
135  double energy1 = theSmearSettings[i - 1].first;
136  double sigma1 = theSmearSettings[i - 1].second;
137  double energy2 = theSmearSettings[i].first;
138  double sigma2 = theSmearSettings[i].second;
139 
140  if (energy2 != energy1)
141  smearsigma = sigma1 + ((sigma2 - sigma1) * (ampl - energy1) / (energy2 - energy1));
142  else
143  smearsigma = (sigma2 + sigma1) / 2.;
144  }
145 
146  return smearsigma;
147 }
148 
149 int HcalSimParameters::pixels(const DetId& detId) const {
153 }
154 
155 double HcalSimParameters::sipmDarkCurrentuA(const DetId& detId) const {
158 }
159 
160 double HcalSimParameters::sipmCrossTalk(const DetId& detId) const {
164 }
165 std::vector<float> HcalSimParameters::sipmNonlinearity(const DetId& detId) const {
169 }
170 
171 unsigned int HcalSimParameters::signalShape(const DetId& detId) const {
173  return theDbService->getHcalMCParam(detId)->signalShape();
174 }
service
Definition: service.py:1
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
HcalSimParameters.h
MessageLogger.h
ecalSimParameterMap_cff.syncPhase
syncPhase
Definition: ecalSimParameterMap_cff.py:11
funct::false
false
Definition: Factorize.h:34
HcalDbService::getGainWidth
const HcalGainWidth * getGainWidth(const HcalGenericDetId &fId) const
Definition: HcalDbService.cc:312
HcalGain::getValue
float getValue(int fCapId) const
get value for capId = 0..3
Definition: HcalGain.h:21
HcalGenericDetId
Definition: HcalGenericDetId.h:15
HcalSimParameters::theFirstRing
int theFirstRing
Definition: HcalSimParameters.h:57
CaloSimParameters::photoelectronsToAnalog
double photoelectronsToAnalog() const
the factor which goes from photoelectrons to whatever gets read by ADCs
Definition: CaloSimParameters.h:38
HcalSimParameters::sipmNonlinearity
std::vector< float > sipmNonlinearity(const DetId &detId) const
Definition: HcalSimParameters.cc:165
hcalSimParameters_cfi.simHitToPhotoelectrons
simHitToPhotoelectrons
Definition: hcalSimParameters_cfi.py:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
HcalSimParameters::theSiPMcharacteristics
const HcalSiPMCharacteristics * theSiPMcharacteristics
Definition: HcalSimParameters.h:56
ecalSimParameterMap_cff.samplingFactor
samplingFactor
Definition: ecalSimParameterMap_cff.py:8
HcalSimParameters::pixels
int pixels(const DetId &detId) const
Definition: HcalSimParameters.cc:149
edm::LogInfo
Definition: MessageLogger.h:254
hcalSimParameters_cfi.sipmTau
sipmTau
Definition: hcalSimParameters_cfi.py:23
HcalSiPMParameter::getFCByPE
float getFCByPE() const
get fcByPE
Definition: HcalSiPMParameter.h:12
HcalSiPMCharacteristics::getNonLinearities
std::vector< float > getNonLinearities(int type) const
get nonlinearity constants
Definition: HcalSiPMCharacteristics.cc:77
cms::cuda::assert
assert(be >=bs)
HcalSiPMParameter::getDarkCurrent
float getDarkCurrent() const
get dark current
Definition: HcalSiPMParameter.h:14
HcalDbService::getGain
const HcalGain * getGain(const HcalGenericDetId &fId) const
Definition: HcalDbService.cc:305
HcalGenericDetId.h
CaloSimParameters::simHitToPhotoelectrons
double simHitToPhotoelectrons() const
Definition: CaloSimParameters.h:34
hcalSimParameters_cfi.firstRing
firstRing
Definition: hcalSimParameters_cfi.py:41
HcalSiPMCharacteristics::getCrossTalk
float getCrossTalk(int type) const
get cross talk
Definition: HcalSiPMCharacteristics.cc:88
dqmdumpme.first
first
Definition: dqmdumpme.py:55
HcalSimParameters::sipmCrossTalk
double sipmCrossTalk(const DetId &detId) const
Definition: HcalSimParameters.cc:160
GeV2fC
static const double GeV2fC
Definition: HcalSimParameters.cc:105
HcalDbService::getHcalMCParam
const HcalMCParam * getHcalMCParam(const HcalGenericDetId &fId) const
Definition: HcalDbService.cc:398
HcalGenericDetId::HcalGenZDC
Definition: HcalGenericDetId.h:24
DetId
Definition: DetId.h:17
trigger::size_type
uint16_t size_type
Definition: TriggerTypeDefs.h:18
HcalGain.h
HcalSimParameters::signalShape
unsigned int signalShape(const DetId &detId) const
Definition: HcalSimParameters.cc:171
CaloSimParameters
Main class for Parameters in different subdetectors.
Definition: CaloSimParameters.h:14
HcalSimParameters::samplingFactor
virtual double samplingFactor(const DetId &detId) const
Definition: HcalSimParameters.cc:93
HcalSiPMType.h
HcalSimParameters::theSmearSettings
HcalTimeSmearSettings theSmearSettings
Definition: HcalSimParameters.h:61
HcalGain
Definition: HcalGain.h:16
HcalSimParameters::HcalSimParameters
HcalSimParameters(double simHitToPhotoelectrons, double samplingFactor, double timePhase, int readoutFrameSize, int binOfMaximum, bool doPhotostatistics, bool syncPhase, int firstRing, const std::vector< double > &samplingFactors, double sipmTau)
Definition: HcalSimParameters.cc:12
funct::true
true
Definition: Factorize.h:173
hcalSimParameters_cfi.samplingFactors
samplingFactors
Definition: hcalSimParameters_cfi.py:45
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
HcalSimParameters::sipmDarkCurrentuA
double sipmDarkCurrentuA(const DetId &detId) const
Definition: HcalSimParameters.cc:155
HcalDetId.h
HcalSimParameters::theSamplingFactors
std::vector< double > theSamplingFactors
Definition: HcalSimParameters.h:58
HcalDetId
Definition: HcalDetId.h:12
createfilelist.int
int
Definition: createfilelist.py:10
ecalSimParameterMap_cff.timePhase
timePhase
Definition: ecalSimParameterMap_cff.py:9
HcalSiPMParameter::getType
int getType() const
get SiPM type
Definition: HcalSiPMParameter.h:10
HcalSimParameters::defaultTimeSmearing
void defaultTimeSmearing()
Definition: HcalSimParameters.cc:107
HcalSimParameters::theSiPMSmearing
bool theSiPMSmearing
Definition: HcalSimParameters.h:59
HcalSubdetector.h
ecalEBTriggerPrimitiveDigis_cfi.binOfMaximum
binOfMaximum
Definition: ecalEBTriggerPrimitiveDigis_cfi.py:9
ecalSimParameterMap_cff.readoutFrameSize
readoutFrameSize
Definition: ecalSimParameterMap_cff.py:5
HcalMCParam::signalShape
unsigned int signalShape() const
Definition: HcalMCParam.h:38
HcalDbService
Definition: HcalDbService.h:26
type
type
Definition: HCALResponse.h:21
HcalSimParameters::timeSmearRMS
double timeSmearRMS(double ampl) const
Definition: HcalSimParameters.cc:125
HcalDbService::getHcalSiPMParameter
const HcalSiPMParameter * getHcalSiPMParameter(const HcalGenericDetId &fId) const
Definition: HcalDbService.cc:382
std
Definition: JetResolutionObject.h:76
ecalSimParameterMap_cff.doPhotostatistics
doPhotostatistics
Definition: ecalSimParameterMap_cff.py:12
HcalSimParameters::fCtoGeV
double fCtoGeV(const DetId &detId) const
Definition: HcalSimParameters.cc:74
mps_fire.result
result
Definition: mps_fire.py:303
HcalSimParameters::theDbService
const HcalDbService * theDbService
Definition: HcalSimParameters.h:55
HcalGainWidth.h
HcalDetId::ietaAbs
constexpr int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:148
HcalGenericDetId::HcalGenForward
Definition: HcalGenericDetId.h:22
HcalSiPMCharacteristics::getPixels
int getPixels(int type) const
get # of pixels
Definition: HcalSiPMCharacteristics.cc:72
HcalSimParameters::setDbService
void setDbService(const HcalDbService *service)
Definition: HcalSimParameters.cc:56
HcalGainWidth
Definition: HcalGainWidth.h:15