Skip to content

Commit

Permalink
determine SiPM type by number of layers in depth
Browse files Browse the repository at this point in the history
  • Loading branch information
kpedro88 committed Sep 27, 2016
1 parent ced0b24 commit 94965c0
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 9 deletions.
7 changes: 6 additions & 1 deletion CalibCalorimetry/HcalAlgos/interface/HcalDbHardcode.h
Expand Up @@ -28,8 +28,11 @@
#include "CondFormats/HcalObjects/interface/HcalTPChannelParameters.h"
#include "CalibCalorimetry/HcalAlgos/interface/HcalHardcodeParameters.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "Geometry/CaloTopology/interface/HcalTopology.h"

#include <vector>
#include <map>
#include <utility>

/**
Expand Down Expand Up @@ -82,19 +85,21 @@ class HcalDbHardcode {
void makeHardcodeMap(HcalElectronicsMap& emap, const std::vector<HcalGenericDetId>& cells);
void makeHardcodeDcsMap(HcalDcsMap& dcs_map);
void makeHardcodeFrontEndMap(HcalFrontEndMap& emap, const std::vector<HcalGenericDetId>& cells);
HcalSiPMParameter makeHardcodeSiPMParameter (HcalGenericDetId fId);
HcalSiPMParameter makeHardcodeSiPMParameter (HcalGenericDetId fId, const HcalTopology* topo);
void makeHardcodeSiPMCharacteristics (HcalSiPMCharacteristics& sipm);
HcalTPChannelParameter makeHardcodeTPChannelParameter (HcalGenericDetId fId);
void makeHardcodeTPParameters (HcalTPParameters& tppar);

private:
int getLayersInDepth(int ieta, int depth, const HcalTopology* topo);
//member variables
HcalHardcodeParameters theDefaultParameters_;
HcalHardcodeParameters theHBParameters_, theHEParameters_, theHFParameters_, theHOParameters_;
HcalHardcodeParameters theHBUpgradeParameters_, theHEUpgradeParameters_, theHFUpgradeParameters_;
bool setHB_, setHE_, setHF_, setHO_, setHBUpgrade_, setHEUpgrade_, setHFUpgrade_;
bool useHBUpgrade_, useHEUpgrade_, useHOUpgrade_, useHFUpgrade_, testHFQIE10_;
std::vector<edm::ParameterSet> theSiPMCharacteristics_;
std::map<std::pair<int,int>,int> theLayersInDepths_;
};

#endif
37 changes: 31 additions & 6 deletions CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc
Expand Up @@ -538,18 +538,43 @@ void HcalDbHardcode::makeHardcodeFrontEndMap(HcalFrontEndMap& emap, const std::v
emap.sort();
}

HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter (HcalGenericDetId fId) {
int HcalDbHardcode::getLayersInDepth(int ieta, int depth, const HcalTopology* topo){
//check for cached value
auto eta_depth_pair = std::make_pair(ieta,depth);
auto nLayers = theLayersInDepths_.find(eta_depth_pair);
if(nLayers != theLayersInDepths_.end()){
return nLayers->second;
}
else {
std::vector<int> segmentation;
topo->getDepthSegmentation(ieta,segmentation);
//assume depth segmentation vector is sorted
int nLayersInDepth = std::distance(std::lower_bound(segmentation.begin(),segmentation.end(),depth),
std::upper_bound(segmentation.begin(),segmentation.end(),depth));
theLayersInDepths_.insert(std::make_pair(eta_depth_pair,nLayersInDepth));
return nLayersInDepth;
}
}

HcalSiPMParameter HcalDbHardcode::makeHardcodeSiPMParameter (HcalGenericDetId fId, const HcalTopology* topo) {
// SiPMParameter defined for each DetId the following quantities:
// SiPM type, PhotoElectronToAnalog, Dark Current, two auxiliary words
// These numbers come from some measurements done with SiPMs
// rule for type: cells with >4 layers use larger device (3.3mm diameter), otherwise 2.8mm
HcalSiPMType theType = HcalNoSiPM;
double thePe2fC = getParameters(fId).photoelectronsToAnalog();
double theDC = getParameters(fId).darkCurrent();
if (fId.genericSubdet() == HcalGenericDetId::HcalGenBarrel) {
theType = HcalHBHamamatsu1;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenEndcap) {
theType = HcalHEHamamatsu1;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenOuter) {
if (fId.genericSubdet() == HcalGenericDetId::HcalGenBarrel && useHBUpgrade_) {
HcalDetId hid(fId);
int nLayersInDepth = getLayersInDepth(hid.ietaAbs(),hid.depth(),topo);
if(nLayersInDepth > 4) theType = HcalHBHamamatsu2;
else theType = HcalHBHamamatsu1;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenEndcap && useHEUpgrade_) {
HcalDetId hid(fId);
int nLayersInDepth = getLayersInDepth(hid.ietaAbs(),hid.depth(),topo);
if(nLayersInDepth > 4) theType = HcalHEHamamatsu2;
else theType = HcalHEHamamatsu1;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenOuter && useHOUpgrade_) {
theType = HcalHOHamamatsu;
}

Expand Down
Expand Up @@ -114,13 +114,14 @@
photoelectronsToAnalog = cms.double(0.0),
darkCurrent = cms.double(0.0),
),
# types (in order): HcalHOZecotek, HcalHOHamamatsu, HcalHEHamamatsu1, HcalHEHamamatsu2, HcalHBHamamatsu1
# types (in order): HcalHOZecotek, HcalHOHamamatsu, HcalHEHamamatsu1, HcalHEHamamatsu2, HcalHBHamamatsu1, HcalHBHamamatsu2
SiPMCharacteristics = cms.VPSet(
cms.PSet( pixels = cms.int32(36000), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.0), nonlin2 = cms.double(0.0), nonlin3 = cms.double(0.0) ),
cms.PSet( pixels = cms.int32(2500), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.0), nonlin2 = cms.double(0.0), nonlin3 = cms.double(0.0) ),
cms.PSet( pixels = cms.int32(27370), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.000669), nonlin2 = cms.double(1.34646E-5), nonlin3 = cms.double(1.57918E-10) ),
cms.PSet( pixels = cms.int32(38018), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.000669), nonlin2 = cms.double(1.34646E-5), nonlin3 = cms.double(1.57918E-10) ),
cms.PSet( pixels = cms.int32(27370), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.000669), nonlin2 = cms.double(1.34646E-5), nonlin3 = cms.double(1.57918E-10) ),
cms.PSet( pixels = cms.int32(38018), crosstalk = cms.double(0.32), nonlin1 = cms.double(1.000669), nonlin2 = cms.double(1.34646E-5), nonlin3 = cms.double(1.57918E-10) ),
),
)

Expand Down
Expand Up @@ -771,7 +771,7 @@ std::unique_ptr<HcalSiPMParameters> HcalHardcodeCalibrations::produceSiPMParamet
auto result = std::make_unique<HcalSiPMParameters>(topo);
std::vector <HcalGenericDetId> cells = allCells(*htopo);
for (std::vector <HcalGenericDetId>::const_iterator cell = cells.begin (); cell != cells.end (); ++cell) {
HcalSiPMParameter item = dbHardcode.makeHardcodeSiPMParameter (*cell);
HcalSiPMParameter item = dbHardcode.makeHardcodeSiPMParameter (*cell,topo);
result->addValues(item);
}
return result;
Expand Down

0 comments on commit 94965c0

Please sign in to comment.