File indexing completed on 2023-03-17 11:25:28
0001 #ifndef SubsystemNeutronWriter_h
0002 #define SubsystemNeutronWriter_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <vector>
0016 #include <map>
0017 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0018 #include "FWCore/Framework/interface/stream/EDProducer.h"
0019 #include "FWCore/Utilities/interface/InputTag.h"
0020
0021 namespace CLHEP {
0022 class HepRandomEngine;
0023 }
0024
0025 class NeutronWriter;
0026
0027
0028 class SubsystemNeutronWriter : public edm::stream::EDProducer<> {
0029 public:
0030 explicit SubsystemNeutronWriter(edm::ParameterSet const& pset);
0031
0032
0033 ~SubsystemNeutronWriter() override;
0034
0035 void printStats();
0036
0037 void produce(edm::Event& e, edm::EventSetup const& c) override;
0038
0039 virtual int localDetId(int globalDetId) const = 0;
0040
0041 virtual int chamberType(int globalDetId) const = 0;
0042
0043 virtual int chamberId(int globalDetId) const = 0;
0044
0045
0046 virtual bool accept(const edm::PSimHitContainer& cluster) const = 0;
0047
0048
0049 void initialize(int chamberType);
0050
0051 protected:
0052 virtual void writeHits(int chamberType, edm::PSimHitContainer& chamberHits, CLHEP::HepRandomEngine*);
0053
0054 void writeCluster(int chamberType, const edm::PSimHitContainer& cluster);
0055
0056
0057 void adjust(PSimHit& h, float timeOffset, float smearing);
0058
0059
0060 void updateCount(int chamberType);
0061
0062 private:
0063 NeutronWriter* theHitWriter;
0064 bool useRandFlat;
0065 const edm::InputTag theInputTag;
0066 const double theNeutronTimeCut;
0067 const double theTimeWindow;
0068 const double theT0;
0069 const edm::EDGetTokenT<edm::PSimHitContainer> hitToken_;
0070 int theNEvents;
0071 bool initialized;
0072
0073 bool useLocalDetId_;
0074 std::map<int, int> theCountPerChamberType;
0075 };
0076
0077 #endif