File indexing completed on 2024-04-06 11:58:08
0001 #include "CalibCalorimetry/HcalAlgos/interface/HcalSiPMRadiationDamage.h"
0002
0003 #include <vector>
0004 #include <cmath>
0005
0006
0007 HcalSiPMRadiationDamage::HcalSiPMRadiationDamage()
0008 : temperatureBase_(0.0), temperatureNew_(0.0), intlumiOffset_(0.0), depVsTemp_(0.0), intlumiToNeutrons_(0.0) {}
0009
0010 HcalSiPMRadiationDamage::HcalSiPMRadiationDamage(std::vector<double> darkCurrentBase, const edm::ParameterSet& p)
0011 : darkCurrentBase_(darkCurrentBase),
0012 temperatureBase_(p.getParameter<double>("temperatureBase")),
0013 temperatureNew_(p.getParameter<double>("temperatureNew")),
0014 intlumiOffset_(p.getParameter<double>("intlumiOffset")),
0015 depVsTemp_(p.getParameter<double>("depVsTemp")),
0016 intlumiToNeutrons_(p.getParameter<double>("intlumiToNeutrons")),
0017 depVsNeutrons_(p.getParameter<std::vector<double>>("depVsNeutrons")) {}
0018
0019
0020 double HcalSiPMRadiationDamage::getDarkCurrent(double intlumi, unsigned index) const {
0021 intlumi -= intlumiOffset_;
0022 if (intlumi <= 0)
0023 return darkCurrentBase_.at(index);
0024 double darkCurrentNewLumi = darkCurrentBase_.at(index) + depVsNeutrons_.at(index) * (intlumi * intlumiToNeutrons_);
0025 double darkCurrentNewTemp = darkCurrentNewLumi * std::exp(depVsTemp_ * (temperatureNew_ - temperatureBase_));
0026 return darkCurrentNewTemp;
0027 }