File indexing completed on 2024-04-06 12:29:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <string>
0015 #include <vector>
0016
0017
0018 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorMakerBase.h"
0019 #include "SimG4Core/Notification/interface/SimActivityRegistryEnroller.h"
0020 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorPluginFactory.h"
0021
0022 #include "CondFormats/GeometryObjects/interface/CaloSimulationParameters.h"
0023 #include "Geometry/Records/interface/HcalParametersRcd.h"
0024 #include "SimG4CMS/Calo/interface/CaloTrkProcessing.h"
0025
0026 #include "FWCore/Framework/interface/ESHandle.h"
0027 #include "FWCore/Framework/interface/EventSetup.h"
0028 #include "FWCore/Framework/interface/ConsumesCollector.h"
0029 #include "FWCore/Utilities/interface/ESGetToken.h"
0030 #include "FWCore/PluginManager/interface/ModuleDef.h"
0031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0032
0033 class CaloTrkProcessingBuilder : public SensitiveDetectorMakerBase {
0034 public:
0035 explicit CaloTrkProcessingBuilder(edm::ParameterSet const& p, edm::ConsumesCollector cc)
0036 : cspsToken_{cc.esConsumes<edm::Transition::BeginRun>()}, caloSimPar_{nullptr} {
0037 bool dd4hep = p.getParameter<bool>("g4GeometryDD4hepSource");
0038 addlevel_ = dd4hep ? 1 : 0;
0039 edm::ParameterSet csps = p.getParameter<edm::ParameterSet>("CaloTrkProcessing");
0040 testBeam_ = csps.getParameter<bool>("TestBeam");
0041 eMin_ = csps.getParameter<double>("EminTrack") * CLHEP::MeV;
0042 putHistory_ = csps.getParameter<bool>("PutHistory");
0043 doFineCalo_ = csps.getParameter<bool>("DoFineCalo");
0044 eMinFine_ = csps.getParameter<double>("EminFineTrack") * CLHEP::MeV;
0045 fineNames_ = csps.getParameter<std::vector<std::string> >("FineCaloNames");
0046 fineLevels_ = csps.getParameter<std::vector<int> >("FineCaloLevels");
0047 useFines_ = csps.getParameter<std::vector<int> >("UseFineCalo");
0048 for (auto& level : fineLevels_)
0049 level += addlevel_;
0050 }
0051
0052 void beginRun(const edm::EventSetup& es) final { caloSimPar_ = &es.getData(cspsToken_); }
0053
0054 std::unique_ptr<SensitiveDetector> make(const std::string& iname,
0055 const SensitiveDetectorCatalog& clg,
0056 const edm::ParameterSet& p,
0057 const SimTrackManager* man,
0058 SimActivityRegistry& reg) const final {
0059 auto sd = std::make_unique<CaloTrkProcessing>(iname,
0060 *caloSimPar_,
0061 clg,
0062 testBeam_,
0063 eMin_,
0064 putHistory_,
0065 doFineCalo_,
0066 eMinFine_,
0067 addlevel_,
0068 fineNames_,
0069 fineLevels_,
0070 useFines_,
0071 man);
0072 SimActivityRegistryEnroller::enroll(reg, sd.get());
0073 return sd;
0074 }
0075
0076 private:
0077 const edm::ESGetToken<CaloSimulationParameters, HcalParametersRcd> cspsToken_;
0078 const CaloSimulationParameters* caloSimPar_;
0079 bool testBeam_;
0080 double eMin_;
0081 bool putHistory_;
0082 bool doFineCalo_;
0083 double eMinFine_;
0084 int addlevel_;
0085 std::vector<std::string> fineNames_;
0086 std::vector<int> fineLevels_;
0087 std::vector<int> useFines_;
0088 };
0089
0090 DEFINE_SENSITIVEDETECTORBUILDER(CaloTrkProcessingBuilder, CaloTrkProcessing);