File indexing completed on 2024-04-06 12:29:31
0001
0002 #ifndef HcalSimAlgos_HcalSiPMHitResponse_h
0003 #define HcalSimAlgos_HcalSiPMHitResponse_h
0004
0005 #include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h"
0006 #include "SimCalorimetry/HcalSimAlgos/interface/HcalSiPM.h"
0007 #include "SimCalorimetry/HcalSimAlgos/interface/HcalSiPMShape.h"
0008
0009 #include <map>
0010 #include <set>
0011 #include <vector>
0012
0013 namespace CLHEP {
0014 class HepRandomEngine;
0015 }
0016
0017 class PCaloHitCompareTimes {
0018 public:
0019 bool operator()(const PCaloHit* a, const PCaloHit* b) const { return a->time() < b->time(); }
0020 };
0021
0022 class HcalSiPMHitResponse final : public CaloHitResponse {
0023 public:
0024 HcalSiPMHitResponse(const CaloVSimParameterMap* parameterMap,
0025 const CaloShapes* shapes,
0026 bool PreMix1 = false,
0027 bool HighFidelity = true);
0028
0029 ~HcalSiPMHitResponse() override;
0030
0031 typedef std::vector<unsigned int> photonTimeHist;
0032 typedef std::map<DetId, photonTimeHist> photonTimeMap;
0033
0034 void initializeHits() override;
0035
0036 void finalizeHits(CLHEP::HepRandomEngine*) override;
0037
0038 void add(const PCaloHit& hit, CLHEP::HepRandomEngine*) override;
0039
0040 void add(const CaloSamples& signal) override;
0041
0042 virtual void addPEnoise(CLHEP::HepRandomEngine* engine);
0043
0044 virtual CaloSamples makeBlankSignal(const DetId& detId) const;
0045
0046 virtual void setDetIds(const std::vector<DetId>& detIds);
0047
0048 virtual int getReadoutFrameSize(const DetId& id) const;
0049
0050 protected:
0051 virtual CaloSamples makeSiPMSignal(DetId const& id, photonTimeHist const& photons, CLHEP::HepRandomEngine*);
0052
0053 private:
0054 HcalSiPM theSiPM;
0055 bool PreMixDigis;
0056 bool HighFidelityPreMix;
0057 int nbins;
0058 double dt, invdt;
0059
0060 photonTimeMap precisionTimedPhotons;
0061
0062 const std::vector<DetId>* theDetIds;
0063
0064 std::map<int, HcalSiPMShape> shapeMap;
0065 };
0066
0067 #endif