Skip to content

Commit

Permalink
Merge pull request #13334 from kpedro88/Phase1-HF4b
Browse files Browse the repository at this point in the history
SIM/DIGI/RECO changes for HF QIE10 (part B)
  • Loading branch information
davidlange6 committed Feb 26, 2016
2 parents 375c28b + abaf9a4 commit 7623111
Show file tree
Hide file tree
Showing 36 changed files with 414 additions and 24 deletions.
2 changes: 2 additions & 0 deletions CalibCalorimetry/HcalAlgos/interface/HcalDbHardcode.h
Expand Up @@ -13,6 +13,7 @@
#include "CondFormats/HcalObjects/interface/HcalGainWidth.h"
#include "CondFormats/HcalObjects/interface/HcalQIECoder.h"
#include "CondFormats/HcalObjects/interface/HcalQIEShape.h"
#include "CondFormats/HcalObjects/interface/HcalQIEType.h"
#include "CondFormats/HcalObjects/interface/HcalCalibrationQIECoder.h"
#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
#include "DataFormats/HcalDetId/interface/HcalDcsDetId.h"
Expand All @@ -38,6 +39,7 @@ namespace HcalDbHardcode {
HcalQIECoder makeQIECoder (HcalGenericDetId fId);
HcalCalibrationQIECoder makeCalibrationQIECoder (HcalGenericDetId fId);
HcalQIEShape makeQIEShape ();
HcalQIEType makeQIEType (HcalGenericDetId fId, bool testHFQIE10);
HcalRecoParam makeRecoParam (HcalGenericDetId fId);
HcalMCParam makeMCParam (HcalGenericDetId fId);
HcalTimingParam makeTimingParam (HcalGenericDetId fId);
Expand Down
23 changes: 23 additions & 0 deletions CalibCalorimetry/HcalAlgos/src/HcalDbHardcode.cc
Expand Up @@ -6,6 +6,7 @@

#include "CLHEP/Random/RandGauss.h"
#include "CalibCalorimetry/HcalAlgos/interface/HcalDbHardcode.h"
#include "DataFormats/HcalDigi/interface/HcalQIENum.h"

HcalPedestal HcalDbHardcode::makePedestal (HcalGenericDetId fId, bool fSmear) {
HcalPedestalWidth width = makePedestalWidth (fId);
Expand Down Expand Up @@ -564,6 +565,28 @@ HcalQIECoder HcalDbHardcode::makeQIECoder (HcalGenericDetId fId) {
return result;
}

HcalQIEType HcalDbHardcode::makeQIEType (HcalGenericDetId fId, bool testHFQIE10) {
HcalQIENum qieType = QIE8; //default
if (testHFQIE10){ //2016 test
if(fId.genericSubdet() == HcalGenericDetId::HcalGenForward && fId.isHcalDetId()) {
HcalDetId hid(fId);
if(hid.depth()>=3) qieType = QIE10;
}
}
else { //generic upgrade case: QIE8 for HO, QIE10 for HF, QIE11 for HBHE
if (fId.genericSubdet() == HcalGenericDetId::HcalGenBarrel || fId.genericSubdet() == HcalGenericDetId::HcalGenEndcap) {
qieType = QIE11;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenOuter) {
qieType = QIE8;
} else if (fId.genericSubdet() == HcalGenericDetId::HcalGenForward) {
qieType = QIE10;
}
}

HcalQIEType result(fId.rawId(),qieType);
return result;
}

HcalCalibrationQIECoder HcalDbHardcode::makeCalibrationQIECoder (HcalGenericDetId fId) {
HcalCalibrationQIECoder result (fId.rawId ());
float lowEdges [64];
Expand Down
Expand Up @@ -5,20 +5,21 @@
file = cms.untracked.string('')
)

from Geometry.HcalEventSetup.HcalRelabel_cfi import HcalReLabel
#------------------------- HARDCODED conditions

es_hardcode = cms.ESSource("HcalHardcodeCalibrations",
toGet = cms.untracked.vstring('GainWidths'),
#--- the following 5 parameters can be omitted in case of regular Geometry
iLumi = cms.double(-1.), # for Upgrade: fb-1
HcalReLabel = HcalReLabel, # for Upgrade
HERecalibration = cms.bool(False), # True for Upgrade
HEreCalibCutoff = cms.double(20.), # if above is True
HFRecalibration = cms.bool(False), # True for Upgrade
GainWidthsForTrigPrims = cms.bool(False) # True Upgrade
GainWidthsForTrigPrims = cms.bool(False),# True Upgrade
testHFQIE10 = cms.bool(False) # True 2016
)

from Configuration.StandardSequences.Eras import eras
eras.run2_HF_2016.toModify( es_hardcode, testHFQIE10=cms.bool(True) )

es_prefer_hcalHardcode = cms.ESPrefer("HcalHardcodeCalibrations", "es_hardcode")

20 changes: 18 additions & 2 deletions CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.cc
Expand Up @@ -115,7 +115,9 @@ namespace {

}

HcalHardcodeCalibrations::HcalHardcodeCalibrations ( const edm::ParameterSet& iConfig ): he_recalibration(0), hf_recalibration(0), setHEdsegm(false), setHBdsegm(false), SipmLumi(0.0) {
HcalHardcodeCalibrations::HcalHardcodeCalibrations ( const edm::ParameterSet& iConfig ):
he_recalibration(0), hf_recalibration(0), setHEdsegm(false), setHBdsegm(false), SipmLumi(0.0), testHFQIE10(iConfig.getParameter<bool>("testHFQIE10"))
{
edm::LogInfo("HCAL") << "HcalHardcodeCalibrations::HcalHardcodeCalibrations->...";

if ( iConfig.exists("GainWidthsForTrigPrims") )
Expand Down Expand Up @@ -365,7 +367,7 @@ std::auto_ptr<HcalQIETypes> HcalHardcodeCalibrations::produceQIETypes (const Hca
std::auto_ptr<HcalQIETypes> result (new HcalQIETypes (topo));
std::vector <HcalGenericDetId> cells = allCells(*topo);
for (std::vector <HcalGenericDetId>::const_iterator cell = cells.begin (); cell != cells.end (); ++cell) {
HcalQIEType item(cell->rawId(),0);
HcalQIEType item = HcalDbHardcode::makeQIEType(*cell,testHFQIE10);
result->addValues(item);
}
return result;
Expand Down Expand Up @@ -758,3 +760,17 @@ std::auto_ptr<HcalCovarianceMatrices> HcalHardcodeCalibrations::produceCovarianc
}
return result;
}

void HcalHardcodeCalibrations::fillDescriptions(edm::ConfigurationDescriptions & descriptions){
edm::ParameterSetDescription desc;
desc.add<double>("iLumi",-1.);
desc.add<bool>("HERecalibration",false);
desc.add<double>("HEreCalibCutoff",20.);
desc.add<bool>("HFRecalibration",false);
desc.add<bool>("GainWidthsForTrigPrims",false);
desc.add<bool>("testHFQIE10",false);
desc.addUntracked<std::vector<std::string>>("toGet",std::vector<std::string>());
desc.addUntracked<bool>("fromDDD",false);

descriptions.addDefault(desc);
}
4 changes: 4 additions & 0 deletions CalibCalorimetry/HcalPlugins/src/HcalHardcodeCalibrations.h
Expand Up @@ -9,6 +9,8 @@
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "Geometry/CaloTopology/interface/HcalTopology.h"
#include "CondFormats/HcalObjects/interface/AllObjects.h"
#include "HERecalibration.h"
Expand Down Expand Up @@ -50,6 +52,7 @@ class HcalHardcodeCalibrations : public edm::ESProducer, public edm::EventSetupR
~HcalHardcodeCalibrations ();

void produce () {};
static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);

protected:
virtual void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
Expand Down Expand Up @@ -97,5 +100,6 @@ class HcalHardcodeCalibrations : public edm::ESProducer, public edm::EventSetupR
bool setHEdsegm;
bool setHBdsegm;
double SipmLumi;
bool testHFQIE10;
};

3 changes: 3 additions & 0 deletions CalibFormats/HcalObjects/interface/HcalCoder.h
Expand Up @@ -7,6 +7,7 @@
#include "DataFormats/HcalDigi/interface/HcalCalibDataFrame.h"
#include "DataFormats/HcalDigi/interface/ZDCDataFrame.h"
#include "DataFormats/HcalDigi/interface/HcalUpgradeDataFrame.h"
#include "DataFormats/HcalDigi/interface/QIE10DataFrame.h"
#include "CalibFormats/CaloObjects/interface/CaloSamples.h"

/** \class HcalCoder
Expand All @@ -23,12 +24,14 @@ class HcalCoder {
virtual void adc2fC(const ZDCDataFrame& df, CaloSamples& lf) const = 0;
virtual void adc2fC(const HcalCalibDataFrame& df, CaloSamples& lf) const = 0;
virtual void adc2fC(const HcalUpgradeDataFrame& df, CaloSamples& lf) const = 0;
virtual void adc2fC(const QIE10DataFrame& df, CaloSamples& lf) const = 0;
virtual void fC2adc(const CaloSamples& clf, HBHEDataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, HFDataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, HODataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, ZDCDataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, HcalCalibDataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, HcalUpgradeDataFrame& df, int fCapIdOffset) const = 0;
virtual void fC2adc(const CaloSamples& clf, QIE10DataFrame& df, int fCapIdOffset) const = 0;
};

#endif
2 changes: 2 additions & 0 deletions CalibFormats/HcalObjects/interface/HcalCoderDb.h
Expand Up @@ -22,13 +22,15 @@ class HcalCoderDb : public HcalCoder {
virtual void adc2fC(const ZDCDataFrame& df, CaloSamples& lf) const;
virtual void adc2fC(const HcalCalibDataFrame& df, CaloSamples& lf) const;
virtual void adc2fC(const HcalUpgradeDataFrame& df, CaloSamples& lf) const;
virtual void adc2fC(const QIE10DataFrame& df, CaloSamples& lf) const;

virtual void fC2adc(const CaloSamples& clf, HBHEDataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, HFDataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, HODataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, ZDCDataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, HcalCalibDataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, HcalUpgradeDataFrame& df, int fCapIdOffset) const;
virtual void fC2adc(const CaloSamples& clf, QIE10DataFrame& df, int fCapIdOffset) const;

private:
template <class Digi> void adc2fC_ (const Digi& df, CaloSamples& clf) const;
Expand Down
3 changes: 2 additions & 1 deletion CalibFormats/HcalObjects/interface/HcalNominalCoder.h
Expand Up @@ -22,7 +22,8 @@ class HcalNominalCoder : public HcalCoder {
virtual void fC2adc(const CaloSamples& clf, HcalCalibDataFrame& df, int fCapIdOffset) const;
virtual void adc2fC(const HcalUpgradeDataFrame& df, CaloSamples& lf) const {}
virtual void fC2adc(const CaloSamples& clf, HcalUpgradeDataFrame& df, int fCapIdOffset) const { }

virtual void adc2fC(const QIE10DataFrame& df, CaloSamples& lf) const {}
virtual void fC2adc(const CaloSamples& clf, QIE10DataFrame& df, int fCapIdOffset) const { }
};

#endif
17 changes: 17 additions & 0 deletions CalibFormats/HcalObjects/src/HcalCoderDb.cc
Expand Up @@ -21,6 +21,13 @@ template <class Digi> void HcalCoderDb::adc2fC_ (const Digi& df, CaloSamples& cl
clf.setPresamples(df.presamples());
}

template <> void HcalCoderDb::adc2fC_<QIE10DataFrame> (const QIE10DataFrame& df, CaloSamples& clf) const {
clf=CaloSamples(df.id(),df.samples());
for (int i=0; i<df.samples(); i++) {
clf[i]=mCoder->charge (*mShape, df[i].adc (), df[i].capid ());
}
}

template <class Digi> void HcalCoderDb::fC2adc_ (const CaloSamples& clf, Digi& df, int fCapIdOffset) const {
df = Digi (clf.id ());
df.setSize (clf.size ());
Expand All @@ -40,18 +47,28 @@ template <class Digi> void HcalCoderDb::fCUpgrade2adc_ (const CaloSamples& clf,
}
}

template <> void HcalCoderDb::fC2adc_<QIE10DataFrame> (const CaloSamples& clf, QIE10DataFrame& df, int fCapIdOffset) const {
int presample = clf.presamples ();
for (int i=0; i<clf.size(); i++) {
int capId = (fCapIdOffset + i) % 4;
bool soi = (i==presample);
df.setSample(i, mCoder->adc(*mShape, clf[i], capId), 0, 0, capId, soi, true);
}
}

void HcalCoderDb::adc2fC(const HBHEDataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const HODataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const HFDataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const ZDCDataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const HcalCalibDataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const HcalUpgradeDataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}
void HcalCoderDb::adc2fC(const QIE10DataFrame& df, CaloSamples& lf) const {adc2fC_ (df, lf);}

void HcalCoderDb::fC2adc(const CaloSamples& clf, HBHEDataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, HFDataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, HODataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, ZDCDataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, HcalCalibDataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, HcalUpgradeDataFrame& df, int fCapIdOffset) const {fCUpgrade2adc_ (clf, df, fCapIdOffset);}
void HcalCoderDb::fC2adc(const CaloSamples& clf, QIE10DataFrame& df, int fCapIdOffset) const {fC2adc_ (clf, df, fCapIdOffset);}

1 change: 1 addition & 0 deletions Configuration/EventContent/python/EventContent_cff.py
Expand Up @@ -359,6 +359,7 @@
'keep HBHEDataFramesSorted_hcalDigis_*_*',
'keep HFDataFramesSorted_hcalDigis_*_*',
'keep HODataFramesSorted_hcalDigis_*_*',
'keep QIE10DataFrameHcalDataFrameContainer_hcalDigis_*_*',
'keep ZDCDataFramesSorted_hcalDigis_*_*',
'keep CastorDataFramesSorted_castorDigis_*_*',
'keep EBDigiCollection_ecalDigis_*_*',
Expand Down
5 changes: 4 additions & 1 deletion Configuration/StandardSequences/python/Eras.py
Expand Up @@ -11,6 +11,7 @@ def __init__(self):
self.run2_25ns_specific = cms.Modifier()
self.run2_50ns_specific = cms.Modifier()
self.run2_HI_specific = cms.Modifier()
self.run2_HF_2016 = cms.Modifier()
self.stage1L1Trigger = cms.Modifier()
self.stage2L1Trigger = cms.Modifier()
self.phase1Pixel = cms.Modifier()
Expand Down Expand Up @@ -46,7 +47,7 @@ def __init__(self):
self.Run2_50ns = cms.ModifierChain( self.run2_common, self.run2_50ns_specific, self.stage1L1Trigger )
self.Run2_HI = cms.ModifierChain( self.run2_common, self.run2_HI_specific, self.stage1L1Trigger )
# Future Run 2 scenarios.
self.Run2_2016 = cms.ModifierChain( self.run2_common, self.run2_25ns_specific, self.stage2L1Trigger )
self.Run2_2016 = cms.ModifierChain( self.run2_common, self.run2_25ns_specific, self.stage2L1Trigger, self.run2_HF_2016 )
self.Run2_2017 = cms.ModifierChain( self.Run2_2016, self.phase1Pixel )
# Scenarios further afield.
# Phase2 is everything for the 2023 (2026?) detector that works so far in this release.
Expand All @@ -61,6 +62,8 @@ def __init__(self):
self.internalUseEras = [self.run2_common, self.run2_25ns_specific,
self.run2_50ns_specific, self.run2_HI_specific,
self.stage1L1Trigger, self.fastSim,
self.run2_HF_2016, self.stage2L1Trigger,
self.phase1Pixel,
self.phase2_common, self.phase2_tracker,
self.phase2_hgc, self.phase2_muon,
self.phase2dev_common, self.phase2dev_tracker,
Expand Down
6 changes: 6 additions & 0 deletions DataFormats/HcalDigi/interface/HcalQIENum.h
@@ -0,0 +1,6 @@
#ifndef DATAFORMATS_HCALDIGI_HCALQIENUM_H
#define DATAFORMATS_HCALDIGI_HCALQIENUM_H

enum HcalQIENum { QIE8=0, QIE10=1, QIE11=2 };

#endif
2 changes: 2 additions & 0 deletions RecoLocalCalo/HcalRecAlgos/interface/HcalSimpleRecAlgo.h
Expand Up @@ -5,6 +5,7 @@
#include "boost/shared_ptr.hpp"

#include "DataFormats/HcalDigi/interface/HcalUpgradeDataFrame.h"
#include "DataFormats/HcalDigi/interface/QIE10DataFrame.h"
#include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
#include "DataFormats/HcalDigi/interface/HFDataFrame.h"
#include "DataFormats/HcalDigi/interface/HODataFrame.h"
Expand Down Expand Up @@ -71,6 +72,7 @@ class HcalSimpleRecAlgo {
HBHERecHit reconstructHBHEUpgrade(const HcalUpgradeDataFrame& digi, int first, int toadd, const HcalCoder& coder, const HcalCalibrations& calibs) const;

HFRecHit reconstruct(const HFDataFrame& digi, int first, int toadd, const HcalCoder& coder, const HcalCalibrations& calibs) const;
HFRecHit reconstructQIE10(const QIE10DataFrame& digi, int first, int toadd, const HcalCoder& coder, const HcalCalibrations& calibs) const;
HFRecHit reconstructHFUpgrade(const HcalUpgradeDataFrame& digi, int first, int toadd, const HcalCoder& coder, const HcalCalibrations& calibs) const;

HORecHit reconstruct(const HODataFrame& digi, int first, int toadd, const HcalCoder& coder, const HcalCalibrations& calibs) const;
Expand Down
29 changes: 29 additions & 0 deletions RecoLocalCalo/HcalRecAlgos/src/HcalSimpleRecAlgo.cc
Expand Up @@ -602,6 +602,35 @@ HFRecHit HcalSimpleRecAlgo::reconstruct(const HFDataFrame& digi,
return rh;
}

HFRecHit HcalSimpleRecAlgo::reconstructQIE10(const QIE10DataFrame& digi,
const int first,
const int toadd,
const HcalCoder& coder,
const HcalCalibrations& calibs) const
{
const HcalPulseContainmentCorrection* corr = pulseCorr_->get(digi.id(), toadd, phaseNS_);

double amp_fC, ampl, uncorr_ampl, maxA;
int nRead, maxI;
bool leakCorrApplied;
float t0, t2;

HcalSimpleRecAlgoImpl::removePileup(digi, coder, calibs, first, toadd,
correctForPulse_, corr, hfPileupCorr_.get(),
bunchCrossingInfo_, lenBunchCrossingInfo_,
&maxA, &ampl, &uncorr_ampl, &amp_fC, &nRead,
&maxI, &leakCorrApplied, &t0, &t2);

float time=-9999.f;
if (maxI > 0 && maxI < (nRead - 1))
time = HcalSimpleRecAlgoImpl::recoHFTime(digi,maxI,amp_fC,correctForTimeslew_,maxA,t0,t2) -
calibs.timecorr();

HFRecHit rh(digi.id(),ampl,time);
setRawEnergy(rh, static_cast<float>(uncorr_ampl));
return rh;
}


// NB: Upgrade HFRecHit method content is just the same as regular HFRecHit
// with one exclusion: double time (second is dummy) in constructor
Expand Down
15 changes: 15 additions & 0 deletions RecoLocalCalo/HcalRecProducers/python/hfQIE10Reco_cfi.py
@@ -0,0 +1,15 @@
import FWCore.ParameterSet.Config as cms

hfQIE10Reco = cms.EDProducer("HcalSimpleReconstructor",
correctionPhaseNS = cms.double(0.0),
digiLabel = cms.InputTag("simHcalUnsuppressedDigis","HFQIE10DigiCollection"),
Subdetector = cms.string('HFQIE10'),
correctForPhaseContainment = cms.bool(False),
correctForTimeslew = cms.bool(False),
dropZSmarkedPassed = cms.bool(True),
firstSample = cms.int32(2),
samplesToAdd = cms.int32(1),
tsFromDB = cms.bool(True)
)


0 comments on commit 7623111

Please sign in to comment.