Skip to content

Commit

Permalink
Merge pull request #16336 from lgray/topic_reduce_hgcdigitizer_memory
Browse files Browse the repository at this point in the history
Make workspaces in HGCDigitizer only depend on signal size
  • Loading branch information
cmsbuild committed Oct 27, 2016
2 parents c73fdf0 + 8728bd1 commit 5f43103
Show file tree
Hide file tree
Showing 11 changed files with 256 additions and 156 deletions.
3 changes: 2 additions & 1 deletion SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h
Expand Up @@ -18,6 +18,7 @@

#include <vector>
#include <map>
#include <unordered_set>
#include <memory>
#include <tuple>

Expand Down Expand Up @@ -94,7 +95,7 @@ private :
std::unique_ptr<HGCHEfrontDigitizer> theHGCHEfrontDigitizer_;

//geometries
std::vector<DetId> validIds_;
std::unordered_set<DetId> validIds_;
const HGCalGeometry* gHGCal_;
const HcalGeometry* gHcal_;

Expand Down
15 changes: 12 additions & 3 deletions SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h
Expand Up @@ -6,6 +6,7 @@
#include <vector>
#include <memory>
#include <unordered_map>
#include <unordered_set>

#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h"
#include "FWCore/Utilities/interface/EDMException.h"
Expand All @@ -16,6 +17,8 @@

#include "SimCalorimetry/HGCalSimProducers/interface/HGCFEElectronics.h"

#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"

namespace hgc = hgc_digi;

template <class DFr>
Expand All @@ -34,7 +37,9 @@ class HGCDigitizerBase {
/**
@short steer digitization mode
*/
void run(std::unique_ptr<DColl> &digiColl, hgc::HGCSimHitDataAccumulator &simData, uint32_t digitizationType,CLHEP::HepRandomEngine* engine);
void run(std::unique_ptr<DColl> &digiColl, hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
uint32_t digitizationType,CLHEP::HepRandomEngine* engine);

/**
@short getters
Expand All @@ -46,7 +51,9 @@ class HGCDigitizerBase {
/**
@short a trivial digitization: sum energies and digitize without noise
*/
void runSimple(std::unique_ptr<DColl> &coll, hgc::HGCSimHitDataAccumulator &simData, CLHEP::HepRandomEngine* engine);
void runSimple(std::unique_ptr<DColl> &coll, hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
CLHEP::HepRandomEngine* engine);

/**
@short prepares the output according to the number of time samples to produce
Expand All @@ -56,7 +63,9 @@ class HGCDigitizerBase {
/**
@short to be specialized by top class
*/
virtual void runDigitizer(std::unique_ptr<DColl> &coll, hgc::HGCSimHitDataAccumulator &simData,uint32_t digitizerType, CLHEP::HepRandomEngine* engine)
virtual void runDigitizer(std::unique_ptr<DColl> &coll, hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
uint32_t digitizerType, CLHEP::HepRandomEngine* engine)
{
throw cms::Exception("HGCDigitizerBaseException") << " Failed to find specialization of runDigitizer";
}
Expand Down
12 changes: 12 additions & 0 deletions SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerTypes.h
Expand Up @@ -3,6 +3,18 @@

#include <unordered_map>
#include <array>
#include <functional>

#include "DataFormats/DetId/interface/DetId.h"

namespace std {
template<>
struct hash<DetId> {
std::size_t operator()(const DetId& id) const {
return std::hash<uint32_t>()(id.rawId());
}
};
}

namespace hgc_digi {

Expand Down
4 changes: 3 additions & 1 deletion SimCalorimetry/HGCalSimProducers/interface/HGCEEDigitizer.h
Expand Up @@ -8,7 +8,9 @@ class HGCEEDigitizer : public HGCDigitizerBase<HGCEEDataFrame> {

public:
HGCEEDigitizer(const edm::ParameterSet& ps);
void runDigitizer(std::unique_ptr<HGCEEDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData,uint32_t digitizationType, CLHEP::HepRandomEngine* engine);
void runDigitizer(std::unique_ptr<HGCEEDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
uint32_t digitizationType, CLHEP::HepRandomEngine* engine) override;
~HGCEEDigitizer();
private:

Expand Down
Expand Up @@ -9,15 +9,19 @@ class HGCHEbackDigitizer : public HGCDigitizerBase<HGCBHDataFrame>
public:

HGCHEbackDigitizer(const edm::ParameterSet& ps);
void runDigitizer(std::unique_ptr<HGCBHDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData,uint32_t digitizationType, CLHEP::HepRandomEngine* engine);
void runDigitizer(std::unique_ptr<HGCBHDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
uint32_t digitizationType, CLHEP::HepRandomEngine* engine) override;
~HGCHEbackDigitizer();

private:

//calice-like digitization parameters
float keV2MIP_, noise_MIP_;
float nPEperMIP_, nTotalPE_, xTalk_, sdPixels_;
void runCaliceLikeDigitizer(std::unique_ptr<HGCBHDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData, CLHEP::HepRandomEngine* engine);
void runCaliceLikeDigitizer(std::unique_ptr<HGCBHDigiCollection> &digiColl,hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
CLHEP::HepRandomEngine* engine);
};

#endif
Expand Up @@ -8,7 +8,9 @@ class HGCHEfrontDigitizer : public HGCDigitizerBase<HGCHEDataFrame> {

public:
HGCHEfrontDigitizer(const edm::ParameterSet& ps);
void runDigitizer(std::unique_ptr<HGCHEDigiCollection> &digiColl, hgc::HGCSimHitDataAccumulator &simData,uint32_t digitizationType, CLHEP::HepRandomEngine* engine);
void runDigitizer(std::unique_ptr<HGCHEDigiCollection> &digiColl, hgc::HGCSimHitDataAccumulator &simData,
const CaloSubdetectorGeometry* theGeom, const std::unordered_set<DetId>& validIds,
uint32_t digitizationType, CLHEP::HepRandomEngine* engine) override;
~HGCHEfrontDigitizer();
private:

Expand Down

0 comments on commit 5f43103

Please sign in to comment.