File indexing completed on 2024-09-13 22:52:42
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "CaloTowersCreationAlgo.h"
0010 #include "EScales.h"
0011
0012 #include "CommonTools/Utils/interface/StringToEnumValue.h"
0013 #include "DataFormats/Common/interface/Handle.h"
0014 #include "FWCore/Framework/interface/ESHandle.h"
0015 #include "FWCore/Framework/interface/ESWatcher.h"
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "FWCore/Framework/interface/EventSetup.h"
0018 #include "FWCore/Framework/interface/stream/EDProducer.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "FWCore/Utilities/interface/ESGetToken.h"
0021 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0022 #include "Geometry/CaloTopology/interface/CaloTowerTopology.h"
0023 #include "Geometry/CaloTopology/interface/HcalTopology.h"
0024 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0025 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0026 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h"
0027 #include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h"
0028 #include "CondTools/Hcal/interface/HcalPFCutsHandler.h"
0029 #include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h"
0030 #include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h"
0031
0032 class CaloTowersCreator : public edm::stream::EDProducer<> {
0033 public:
0034 explicit CaloTowersCreator(const edm::ParameterSet& ps);
0035 ~CaloTowersCreator() override {}
0036 void produce(edm::Event& e, const edm::EventSetup& c) override;
0037 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0038 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0039 double EBEScale, EEEScale, HBEScale, HESEScale;
0040 double HEDEScale, HOEScale, HF1EScale, HF2EScale;
0041
0042 private:
0043 static const std::vector<double>& getGridValues();
0044
0045 CaloTowersCreationAlgo algo_;
0046 edm::EDGetTokenT<HBHERecHitCollection> tok_hbhe_;
0047 edm::EDGetTokenT<HORecHitCollection> tok_ho_;
0048 edm::EDGetTokenT<HFRecHitCollection> tok_hf_;
0049 std::vector<edm::InputTag> ecalLabels_;
0050 std::vector<edm::EDGetTokenT<EcalRecHitCollection> > toks_ecal_;
0051 bool allowMissingInputs_;
0052
0053 edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tok_geom_;
0054 edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> tok_topo_;
0055 edm::ESGetToken<CaloTowerTopology, HcalRecNumberingRecord> tok_cttopo_;
0056 edm::ESGetToken<CaloTowerConstituentsMap, CaloGeometryRecord> tok_ctmap_;
0057 edm::ESGetToken<EcalChannelStatus, EcalChannelStatusRcd> tok_ecalChStatus_;
0058 edm::ESGetToken<HcalChannelQuality, HcalChannelQualityRcd> tok_hcalChStatus_;
0059 edm::ESGetToken<HcalSeverityLevelComputer, HcalSeverityLevelComputerRcd> tok_hcalSevComputer_;
0060 edm::ESGetToken<EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd> tok_ecalSevAlgo_;
0061
0062
0063
0064 unsigned int theHcalAcceptSeverityLevel_;
0065 std::vector<int> theEcalSeveritiesToBeExcluded_;
0066
0067
0068 bool theRecoveredHcalHitsAreUsed_;
0069 bool theRecoveredEcalHitsAreUsed_;
0070
0071
0072
0073 bool useRejectedHitsOnly_;
0074 unsigned int theHcalAcceptSeverityLevelForRejectedHit_;
0075
0076 std::vector<int> theEcalSeveritiesToBeUsedInBadTowers_;
0077
0078
0079
0080
0081
0082
0083 bool useRejectedRecoveredHcalHits_;
0084 bool useRejectedRecoveredEcalHits_;
0085
0086 edm::ESWatcher<HcalSeverityLevelComputerRcd> hcalSevLevelWatcher_;
0087 edm::ESWatcher<HcalChannelQualityRcd> hcalChStatusWatcher_;
0088 edm::ESWatcher<IdealGeometryRecord> caloTowerConstituentsWatcher_;
0089 edm::ESWatcher<EcalSeverityLevelAlgoRcd> ecalSevLevelWatcher_;
0090 EScales eScales_;
0091
0092 edm::ESGetToken<HcalPFCuts, HcalPFCutsRcd> hcalCutsToken_;
0093 bool cutsFromDB;
0094 HcalPFCuts const* paramPF = nullptr;
0095
0096
0097 edm::ESGetToken<EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd> ecalPFRechitThresholdsToken_;
0098 bool ecalRecHitThresh_;
0099 EcalPFRecHitThresholds const* ecalThresholds = nullptr;
0100 };
0101
0102 #include "FWCore/Framework/interface/MakerMacros.h"
0103 DEFINE_FWK_MODULE(CaloTowersCreator);
0104
0105 CaloTowersCreator::CaloTowersCreator(const edm::ParameterSet& conf)
0106 : algo_(conf.getParameter<double>("EBThreshold"),
0107 conf.getParameter<double>("EEThreshold"),
0108
0109 conf.getParameter<bool>("UseEtEBTreshold"),
0110 conf.getParameter<bool>("UseEtEETreshold"),
0111 conf.getParameter<bool>("UseSymEBTreshold"),
0112 conf.getParameter<bool>("UseSymEETreshold"),
0113
0114 conf.getParameter<double>("HcalThreshold"),
0115 conf.getParameter<double>("HBThreshold"),
0116 conf.getParameter<double>("HBThreshold1"),
0117 conf.getParameter<double>("HBThreshold2"),
0118 conf.getParameter<double>("HESThreshold"),
0119 conf.getParameter<double>("HESThreshold1"),
0120 conf.getParameter<double>("HEDThreshold"),
0121 conf.getParameter<double>("HEDThreshold1"),
0122 conf.getParameter<double>("HOThreshold0"),
0123 conf.getParameter<double>("HOThresholdPlus1"),
0124 conf.getParameter<double>("HOThresholdMinus1"),
0125 conf.getParameter<double>("HOThresholdPlus2"),
0126 conf.getParameter<double>("HOThresholdMinus2"),
0127 conf.getParameter<double>("HF1Threshold"),
0128 conf.getParameter<double>("HF2Threshold"),
0129 conf.getParameter<std::vector<double> >("EBGrid"),
0130 conf.getParameter<std::vector<double> >("EBWeights"),
0131 conf.getParameter<std::vector<double> >("EEGrid"),
0132 conf.getParameter<std::vector<double> >("EEWeights"),
0133 conf.getParameter<std::vector<double> >("HBGrid"),
0134 conf.getParameter<std::vector<double> >("HBWeights"),
0135 conf.getParameter<std::vector<double> >("HESGrid"),
0136 conf.getParameter<std::vector<double> >("HESWeights"),
0137 conf.getParameter<std::vector<double> >("HEDGrid"),
0138 conf.getParameter<std::vector<double> >("HEDWeights"),
0139 conf.getParameter<std::vector<double> >("HOGrid"),
0140 conf.getParameter<std::vector<double> >("HOWeights"),
0141 conf.getParameter<std::vector<double> >("HF1Grid"),
0142 conf.getParameter<std::vector<double> >("HF1Weights"),
0143 conf.getParameter<std::vector<double> >("HF2Grid"),
0144 conf.getParameter<std::vector<double> >("HF2Weights"),
0145 conf.getParameter<double>("EBWeight"),
0146 conf.getParameter<double>("EEWeight"),
0147 conf.getParameter<double>("HBWeight"),
0148 conf.getParameter<double>("HESWeight"),
0149 conf.getParameter<double>("HEDWeight"),
0150 conf.getParameter<double>("HOWeight"),
0151 conf.getParameter<double>("HF1Weight"),
0152 conf.getParameter<double>("HF2Weight"),
0153 conf.getParameter<double>("EcutTower"),
0154 conf.getParameter<double>("EBSumThreshold"),
0155 conf.getParameter<double>("EESumThreshold"),
0156 conf.getParameter<bool>("UseHO"),
0157
0158 conf.getParameter<int>("MomConstrMethod"),
0159 conf.getParameter<double>("MomHBDepth"),
0160 conf.getParameter<double>("MomHEDepth"),
0161 conf.getParameter<double>("MomEBDepth"),
0162 conf.getParameter<double>("MomEEDepth"),
0163 conf.getParameter<int>("HcalPhase")),
0164
0165 ecalLabels_(conf.getParameter<std::vector<edm::InputTag> >("ecalInputs")),
0166 allowMissingInputs_(conf.getParameter<bool>("AllowMissingInputs")),
0167
0168 theHcalAcceptSeverityLevel_(conf.getParameter<unsigned int>("HcalAcceptSeverityLevel")),
0169
0170 theRecoveredHcalHitsAreUsed_(conf.getParameter<bool>("UseHcalRecoveredHits")),
0171 theRecoveredEcalHitsAreUsed_(conf.getParameter<bool>("UseEcalRecoveredHits")),
0172
0173
0174
0175 useRejectedHitsOnly_(conf.getParameter<bool>("UseRejectedHitsOnly")),
0176
0177 theHcalAcceptSeverityLevelForRejectedHit_(
0178 conf.getParameter<unsigned int>("HcalAcceptSeverityLevelForRejectedHit")),
0179
0180 useRejectedRecoveredHcalHits_(conf.getParameter<bool>("UseRejectedRecoveredHcalHits")),
0181 useRejectedRecoveredEcalHits_(conf.getParameter<bool>("UseRejectedRecoveredEcalHits")),
0182 cutsFromDB(conf.getParameter<bool>("usePFThresholdsFromDB")),
0183 ecalRecHitThresh_(conf.getParameter<bool>("EcalRecHitThresh")) {
0184 algo_.setMissingHcalRescaleFactorForEcal(conf.getParameter<double>("missingHcalRescaleFactorForEcal"));
0185
0186
0187 tok_hbhe_ = consumes<HBHERecHitCollection>(conf.getParameter<edm::InputTag>("hbheInput"));
0188 tok_ho_ = consumes<HORecHitCollection>(conf.getParameter<edm::InputTag>("hoInput"));
0189 tok_hf_ = consumes<HFRecHitCollection>(conf.getParameter<edm::InputTag>("hfInput"));
0190 tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
0191 tok_topo_ = esConsumes<HcalTopology, HcalRecNumberingRecord>();
0192 tok_cttopo_ = esConsumes<CaloTowerTopology, HcalRecNumberingRecord>();
0193 tok_ctmap_ = esConsumes<CaloTowerConstituentsMap, CaloGeometryRecord>();
0194 tok_ecalChStatus_ = esConsumes<EcalChannelStatus, EcalChannelStatusRcd>();
0195 tok_hcalChStatus_ = esConsumes<HcalChannelQuality, HcalChannelQualityRcd>(edm::ESInputTag("", "withTopo"));
0196 tok_hcalSevComputer_ = esConsumes<HcalSeverityLevelComputer, HcalSeverityLevelComputerRcd>();
0197 tok_ecalSevAlgo_ = esConsumes<EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd>();
0198
0199 if (cutsFromDB) {
0200 hcalCutsToken_ = esConsumes<HcalPFCuts, HcalPFCutsRcd, edm::Transition::BeginRun>(edm::ESInputTag("", "withTopo"));
0201 }
0202
0203 if (ecalRecHitThresh_) {
0204 ecalPFRechitThresholdsToken_ =
0205 esConsumes<EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd, edm::Transition::BeginRun>();
0206 }
0207
0208 const unsigned nLabels = ecalLabels_.size();
0209 for (unsigned i = 0; i != nLabels; i++)
0210 toks_ecal_.push_back(consumes<EcalRecHitCollection>(ecalLabels_[i]));
0211
0212 EBEScale = eScales_.EBScale;
0213 EEEScale = eScales_.EEScale;
0214 HBEScale = eScales_.HBScale;
0215 HESEScale = eScales_.HESScale;
0216 HEDEScale = eScales_.HEDScale;
0217 HOEScale = eScales_.HOScale;
0218 HF1EScale = eScales_.HF1Scale;
0219 HF2EScale = eScales_.HF2Scale;
0220
0221
0222 const std::vector<std::string> severitynames =
0223 conf.getParameter<std::vector<std::string> >("EcalRecHitSeveritiesToBeExcluded");
0224
0225 theEcalSeveritiesToBeExcluded_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynames);
0226
0227
0228 theEcalSeveritiesToBeUsedInBadTowers_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(
0229 conf.getParameter<std::vector<std::string> >("EcalSeveritiesToBeUsedInBadTowers"));
0230
0231 if (eScales_.instanceLabel.empty())
0232 produces<CaloTowerCollection>();
0233 else
0234 produces<CaloTowerCollection>(eScales_.instanceLabel);
0235
0236 #ifdef EDM_ML_DEBUG
0237 std::cout << "VI Producer " << (useRejectedHitsOnly_ ? "use rejectOnly " : " ")
0238 << (allowMissingInputs_ ? "allowMissing " : " ") << nLabels << ' ' << severitynames.size() << std::endl;
0239 #endif
0240 }
0241
0242 void CaloTowersCreator::beginRun(const edm::Run& run, const edm::EventSetup& es) {
0243 if (cutsFromDB) {
0244 paramPF = &es.getData(hcalCutsToken_);
0245 }
0246
0247 if (ecalRecHitThresh_) {
0248 ecalThresholds = &es.getData(ecalPFRechitThresholdsToken_);
0249 }
0250
0251 algo_.setThresFromDB(ecalThresholds, paramPF);
0252 }
0253
0254 void CaloTowersCreator::produce(edm::Event& e, const edm::EventSetup& c) {
0255
0256 edm::ESHandle<CaloGeometry> pG = c.getHandle(tok_geom_);
0257 edm::ESHandle<HcalTopology> htopo = c.getHandle(tok_topo_);
0258 edm::ESHandle<CaloTowerTopology> cttopo = c.getHandle(tok_cttopo_);
0259 edm::ESHandle<CaloTowerConstituentsMap> ctmap = c.getHandle(tok_ctmap_);
0260
0261
0262 edm::ESHandle<EcalChannelStatus> ecalChStatus = c.getHandle(tok_ecalChStatus_);
0263 const EcalChannelStatus* dbEcalChStatus = ecalChStatus.product();
0264
0265
0266 edm::ESHandle<HcalChannelQuality> hcalChStatus = c.getHandle(tok_hcalChStatus_);
0267
0268 const HcalChannelQuality* dbHcalChStatus = hcalChStatus.product();
0269
0270
0271 edm::ESHandle<HcalSeverityLevelComputer> hcalSevLvlComputerHndl = c.getHandle(tok_hcalSevComputer_);
0272 const HcalSeverityLevelComputer* hcalSevLvlComputer = hcalSevLvlComputerHndl.product();
0273
0274 edm::ESHandle<EcalSeverityLevelAlgo> ecalSevLvlAlgoHndl = c.getHandle(tok_ecalSevAlgo_);
0275 const EcalSeverityLevelAlgo* ecalSevLvlAlgo = ecalSevLvlAlgoHndl.product();
0276
0277 algo_.setEBEScale(EBEScale);
0278 algo_.setEEEScale(EEEScale);
0279 algo_.setHBEScale(HBEScale);
0280 algo_.setHESEScale(HESEScale);
0281 algo_.setHEDEScale(HEDEScale);
0282 algo_.setHOEScale(HOEScale);
0283 algo_.setHF1EScale(HF1EScale);
0284 algo_.setHF2EScale(HF2EScale);
0285 algo_.setGeometry(cttopo.product(), ctmap.product(), htopo.product(), pG.product());
0286
0287
0288
0289 algo_.setHcalChStatusFromDB(dbHcalChStatus);
0290 algo_.setEcalChStatusFromDB(dbEcalChStatus);
0291
0292 algo_.setHcalAcceptSeverityLevel(theHcalAcceptSeverityLevel_);
0293 algo_.setEcalSeveritiesToBeExcluded(theEcalSeveritiesToBeExcluded_);
0294
0295 algo_.setRecoveredHcalHitsAreUsed(theRecoveredHcalHitsAreUsed_);
0296 algo_.setRecoveredEcalHitsAreUsed(theRecoveredEcalHitsAreUsed_);
0297
0298 algo_.setHcalSevLvlComputer(hcalSevLvlComputer);
0299 algo_.setEcalSevLvlAlgo(ecalSevLvlAlgo);
0300
0301 algo_.setUseRejectedHitsOnly(useRejectedHitsOnly_);
0302
0303 algo_.setHcalAcceptSeverityLevelForRejectedHit(theHcalAcceptSeverityLevelForRejectedHit_);
0304 algo_.SetEcalSeveritiesToBeUsedInBadTowers(theEcalSeveritiesToBeUsedInBadTowers_);
0305
0306 algo_.setUseRejectedRecoveredHcalHits(useRejectedRecoveredHcalHits_);
0307 algo_.setUseRejectedRecoveredEcalHits(useRejectedRecoveredEcalHits_);
0308
0309 #ifdef EDM_ML_DEBUG
0310 std::cout << "VI Produce: " << (useRejectedHitsOnly_ ? "use rejectOnly " : " ")
0311 << (allowMissingInputs_ ? "allowMissing " : " ")
0312 << (theRecoveredEcalHitsAreUsed_ ? "use RecoveredEcal " : " ") << toks_ecal_.size() << ' '
0313 << theEcalSeveritiesToBeExcluded_.size() << ' ' << theEcalSeveritiesToBeUsedInBadTowers_.size()
0314 << std::endl;
0315 #endif
0316
0317 algo_.begin();
0318
0319
0320
0321 bool check1 = hcalSevLevelWatcher_.check(c);
0322 bool check2 = hcalChStatusWatcher_.check(c);
0323 bool check3 = caloTowerConstituentsWatcher_.check(c);
0324 if (check1 || check2 || check3) {
0325 algo_.makeHcalDropChMap();
0326 }
0327
0328
0329 if (ecalSevLevelWatcher_.check(c))
0330 algo_.makeEcalBadChs();
0331
0332
0333
0334
0335
0336
0337 edm::Handle<EcalRecHitCollection> ebHandle;
0338 edm::Handle<EcalRecHitCollection> eeHandle;
0339
0340 for (std::vector<edm::EDGetTokenT<EcalRecHitCollection> >::const_iterator i = toks_ecal_.begin();
0341 i != toks_ecal_.end();
0342 i++) {
0343 edm::Handle<EcalRecHitCollection> ec_tmp;
0344
0345 if (!e.getByToken(*i, ec_tmp))
0346 continue;
0347 if (ec_tmp->empty())
0348 continue;
0349
0350
0351 if ((ec_tmp->begin()->detid()).subdetId() == EcalBarrel) {
0352 ebHandle = ec_tmp;
0353 } else if ((ec_tmp->begin()->detid()).subdetId() == EcalEndcap) {
0354 eeHandle = ec_tmp;
0355 }
0356 }
0357
0358 algo_.setEbHandle(ebHandle);
0359 algo_.setEeHandle(eeHandle);
0360
0361
0362
0363 bool present;
0364
0365
0366 edm::Handle<HBHERecHitCollection> hbhe;
0367 present = e.getByToken(tok_hbhe_, hbhe);
0368 if (present || !allowMissingInputs_)
0369 algo_.process(*hbhe);
0370
0371 edm::Handle<HORecHitCollection> ho;
0372 present = e.getByToken(tok_ho_, ho);
0373 if (present || !allowMissingInputs_)
0374 algo_.process(*ho);
0375
0376 edm::Handle<HFRecHitCollection> hf;
0377 present = e.getByToken(tok_hf_, hf);
0378 if (present || !allowMissingInputs_)
0379 algo_.process(*hf);
0380
0381 std::vector<edm::EDGetTokenT<EcalRecHitCollection> >::const_iterator i;
0382 for (i = toks_ecal_.begin(); i != toks_ecal_.end(); i++) {
0383 edm::Handle<EcalRecHitCollection> ec;
0384 present = e.getByToken(*i, ec);
0385 if (present || !allowMissingInputs_)
0386 algo_.process(*ec);
0387 }
0388
0389
0390 auto prod = std::make_unique<CaloTowerCollection>();
0391
0392
0393 algo_.finish(*prod);
0394
0395 #ifdef EDM_ML_DEBUG
0396 int totc = 0;
0397 float totE = 0;
0398 reco::LeafCandidate::LorentzVector totP4;
0399 for (auto const& tw : (*prod)) {
0400 totc += tw.constituents().size();
0401 totE += tw.energy();
0402 totP4 += tw.p4();
0403 std::cout << "CaloTowerCreator: " << tw.id() << " with E " << tw.energy() << " and " << tw.constituents().size()
0404 << " constituents\n";
0405 }
0406 std::cout << "VI " << (*prod).size() << " " << totc << " " << totE << " " << totP4 << std::endl;
0407 #endif
0408
0409
0410 if (eScales_.instanceLabel.empty())
0411 e.put(std::move(prod));
0412 else
0413 e.put(std::move(prod), eScales_.instanceLabel);
0414 }
0415
0416 void CaloTowersCreator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0417 edm::ParameterSetDescription desc;
0418 desc.add<double>("EBSumThreshold", 0.2);
0419 desc.add<double>("HF2Weight", 1.0);
0420 desc.add<double>("EBWeight", 1.0);
0421 desc.add<double>("EESumThreshold", 0.45);
0422 desc.add<double>("HOThreshold0", 1.1);
0423 desc.add<double>("HOThresholdPlus1", 3.5);
0424 desc.add<double>("HOThresholdMinus1", 3.5);
0425 desc.add<double>("HOThresholdPlus2", 3.5);
0426 desc.add<double>("HOThresholdMinus2", 3.5);
0427 desc.add<double>("HBThreshold", 0.7);
0428 desc.add<double>("HBThreshold1", 0.7);
0429 desc.add<double>("HBThreshold2", 0.7);
0430 desc.add<double>("HF1Threshold", 0.5);
0431 desc.add<double>("HEDWeight", 1.0);
0432 desc.add<double>("EEWeight", 1.0);
0433 desc.add<double>("HESWeight", 1.0);
0434 desc.add<double>("HF1Weight", 1.0);
0435 desc.add<double>("HOWeight", 1.0);
0436 desc.add<double>("EBThreshold", 0.07);
0437 desc.add<double>("EEThreshold", 0.3);
0438 desc.add<double>("HcalThreshold", -1000.0);
0439 desc.add<double>("HF2Threshold", 0.85);
0440 desc.add<double>("HESThreshold", 0.8);
0441 desc.add<double>("HESThreshold1", 0.8);
0442 desc.add<double>("HEDThreshold", 0.8);
0443 desc.add<double>("HEDThreshold1", 0.8);
0444 desc.add<double>("EcutTower", -1000.0);
0445 desc.add<double>("HBWeight", 1.0);
0446 desc.add<double>("MomHBDepth", 0.2);
0447 desc.add<double>("MomHEDepth", 0.4);
0448 desc.add<double>("MomEBDepth", 0.3);
0449 desc.add<double>("MomEEDepth", 0.0);
0450 desc.add<bool>("UseHO", true);
0451 desc.add<bool>("UseEtEBTreshold", false);
0452 desc.add<bool>("UseSymEBTreshold", true);
0453 desc.add<bool>("UseEtEETreshold", false);
0454 desc.add<bool>("UseSymEETreshold", true);
0455 desc.add<bool>("UseHcalRecoveredHits", true);
0456 desc.add<bool>("UseEcalRecoveredHits", false);
0457 desc.add<bool>("UseRejectedHitsOnly", false);
0458 desc.add<bool>("UseRejectedRecoveredHcalHits", true);
0459 desc.add<bool>("UseRejectedRecoveredEcalHits", false);
0460 desc.add<double>("missingHcalRescaleFactorForEcal", 0.0);
0461 desc.add<bool>("AllowMissingInputs", false);
0462 desc.add<std::vector<double> >("HBGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0463 desc.add<std::vector<double> >("EEWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0464 desc.add<std::vector<double> >("HF2Weights", {1.0, 1.0, 1.0, 1.0, 1.0});
0465 desc.add<std::vector<double> >("HOWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0466 desc.add<std::vector<double> >("EEGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0467 desc.add<std::vector<double> >("HBWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0468 desc.add<std::vector<double> >("HF2Grid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0469 desc.add<std::vector<double> >("HEDWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0470 desc.add<std::vector<double> >("HF1Grid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0471 desc.add<std::vector<double> >("EBWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0472 desc.add<std::vector<double> >("HF1Weights", {1.0, 1.0, 1.0, 1.0, 1.0});
0473 desc.add<std::vector<double> >("HESGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0474 desc.add<std::vector<double> >("HESWeights", {1.0, 1.0, 1.0, 1.0, 1.0});
0475 desc.add<std::vector<double> >("HEDGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0476 desc.add<std::vector<double> >("HOGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0477 desc.add<std::vector<double> >("EBGrid", {-1.0, 1.0, 10.0, 100.0, 1000.0});
0478 desc.add<edm::InputTag>("hfInput", edm::InputTag("hfreco"));
0479 desc.add<edm::InputTag>("hbheInput", edm::InputTag("hbhereco"));
0480 desc.add<edm::InputTag>("hoInput", edm::InputTag("horeco"));
0481 desc.add<std::vector<edm::InputTag> >(
0482 "ecalInputs", {edm::InputTag("ecalRecHit", "EcalRecHitsEB"), edm::InputTag("ecalRecHit", "EcalRecHitsEE")});
0483 desc.add<int>("MomConstrMethod", 1);
0484 desc.add<unsigned int>("HcalAcceptSeverityLevel", 9);
0485 desc.add<std::vector<std::string> >("EcalRecHitSeveritiesToBeExcluded", {"kTime", "kWeird", "kBad"});
0486 desc.add<unsigned int>("HcalAcceptSeverityLevelForRejectedHit", 9999);
0487 desc.add<std::vector<std::string> >("EcalSeveritiesToBeUsedInBadTowers", {});
0488 desc.add<int>("HcalPhase", 0);
0489 desc.add<bool>("usePFThresholdsFromDB", true);
0490 desc.add<bool>("EcalRecHitThresh", false);
0491 descriptions.addDefault(desc);
0492 }