Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIM/DIGI/RECO changes for HF QIE10 (part B) #13334

Merged
merged 2 commits into from Feb 26, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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)
)