-
Notifications
You must be signed in to change notification settings - Fork 4.4k
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
Ecal phase2 new digitization 11 2 x #31726
Changes from 6 commits
09ee5b4
921a4c7
47d5b27
26b327a
ac272c7
09dee48
b797ece
1c6eadc
b3bab5b
edb236f
f24b107
a2b2a57
9f47a87
495c566
da7bc0e
d63c30b
7f23644
7d7fa8d
2b887b5
65e5511
eececcb
571f1cb
37c3122
6b8e764
4cc80a8
f9aa038
6bf7919
58a8a67
f757774
00980d2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
#include "CalibFormats/CaloObjects/interface/CaloTSamples.icc" | ||
#include "CalibFormats/CaloObjects/interface/CaloTSamplesBase.icc" | ||
#include "CalibFormats/CaloObjects/interface/CaloTSamples.icc" | ||
#include "CondFormats/EcalObjects/interface/EcalConstants.h" | ||
|
||
template class CaloTSamplesBase<float>; | ||
|
||
template class CaloTSamples<float, 10>; | ||
template class CaloTSamples<float, ecalPh2::sampleSize>; | ||
template class CaloTSamples<float, 3>; | ||
template class CaloTSamples<float, 10>; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#ifndef CondFormats_DataRecord_EcalCATIAGainRatiosRcd_H | ||
#define CondFormats_DataRecord_EcalCATIAGainRatiosRcd_H | ||
|
||
#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" | ||
class EcalCATIAGainRatiosRcd : public edm::eventsetup::EventSetupRecordImplementation<EcalCATIAGainRatiosRcd> {}; | ||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#ifndef CondFormats_DataRecord_EcalLiteDTUPedestalsRcd_h | ||
#define CondFormats_DataRecord_EcalLiteDTUPedestalsRcd_h | ||
|
||
#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" | ||
class EcalLiteDTUPedestalsRcd : public edm::eventsetup::EventSetupRecordImplementation<EcalLiteDTUPedestalsRcd> {}; | ||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" | ||
#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" | ||
|
||
EVENTSETUP_RECORD_REG(EcalCATIAGainRatiosRcd); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" | ||
#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" | ||
|
||
EVENTSETUP_RECORD_REG(EcalLiteDTUPedestalsRcd); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef CondFormats_EcalObjects_EcalCATIAGainRatios_h | ||
#define CondFormats_EcalObjects_EcalCATIAGainRatios_h | ||
|
||
#include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h" | ||
|
||
typedef float EcalCATIAGainRatio; | ||
typedef EcalFloatCondObjectContainer EcalCATIAGainRatioMap; | ||
typedef EcalCATIAGainRatioMap EcalCATIAGainRatios; | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
//Namespaces for Phase1 and Phase2 | ||
#ifndef CondFormats_EcalObject_EcalConstants_h | ||
#define CondFormats_EcalObject_EcalConstants_h | ||
|
||
class ecalPh2 { | ||
public: | ||
static constexpr double Samp_Period = 6.25; | ||
static constexpr unsigned int NGAINS = 2; | ||
static constexpr float gains[NGAINS] = {10., 1.}; | ||
static constexpr unsigned int gainId1 = 1; | ||
static constexpr unsigned int gainId10 = 0; | ||
static constexpr unsigned int sampleSize = 16; | ||
static constexpr unsigned int NBITS = 12; // number of available bits | ||
static constexpr unsigned int MAXADC = (1 << NBITS) - 1; // 2^12 -1, adc max range | ||
static constexpr unsigned int kEBChannels = 61200; | ||
static constexpr double maxEneEB = 2000.; | ||
static constexpr unsigned int kNOffsets = 2000; | ||
static constexpr unsigned int kAdcMask = 0xFFF; | ||
static constexpr unsigned int kGainIdMask = 0x3; | ||
|
||
}; // namespace ecalPh2 | ||
|
||
class ecalPh1 { | ||
public: | ||
static constexpr double Samp_Period = 25.; | ||
static constexpr unsigned int NGAINS = 4; | ||
static constexpr float gains[NGAINS] = {0., 12., 6., 1.}; | ||
static constexpr unsigned int sampleSize = 10; | ||
static constexpr unsigned int kNOffsets = 2000; | ||
}; // namespace ecalPh1 | ||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#ifndef CondFormats_EcalObject_EcalLiteDTUPedestals_h | ||
#define CondFormats_EcalObject_EcalLiteDTUPedestals_h | ||
|
||
#include "CondFormats/Serialization/interface/Serializable.h" | ||
#include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h" | ||
#include "CondFormats/EcalObjects/interface/EcalConstants.h" | ||
|
||
class EcalLiteDTUPedestals { | ||
public: | ||
int setMean(unsigned int i, float value) { | ||
if (i >= ecalPh2::NGAINS) | ||
return -1; | ||
else | ||
meanarray[i] = value; | ||
return 1; | ||
} | ||
|
||
int setRMS(unsigned int i, float value) { | ||
if (i >= ecalPh2::NGAINS) | ||
return -1; | ||
else | ||
rmsarray[i] = value; | ||
return 1; | ||
} | ||
|
||
float mean(unsigned int i) const { return meanarray[i]; } | ||
|
||
float rms(unsigned int i) const { return rmsarray[i]; } | ||
|
||
private: | ||
float meanarray[ecalPh2::NGAINS] = {13., 8.}; | ||
float rmsarray[ecalPh2::NGAINS] = {2.8, 1.2}; | ||
COND_SERIALIZABLE; | ||
}; | ||
|
||
typedef EcalCondObjectContainer<EcalLiteDTUPedestals> EcalLiteDTUPedestalsMap; | ||
typedef EcalLiteDTUPedestalsMap::const_iterator EcalLiteDTUPedestalsMapIterator; | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" | ||
#include "FWCore/Utilities/interface/typelookup.h" | ||
|
||
TYPELOOKUP_DATA_REG(EcalLiteDTUPedestalsMap); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import FWCore.ParameterSet.Config as cms | ||
|
||
from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 | ||
from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel | ||
|
||
Phase2C11_Ecal_Devel = cms.ModifierChain(Phase2C11,phase2_ecal_devel) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import FWCore.ParameterSet.Config as cms | ||
|
||
phase2_ecal_devel = cms.Modifier() | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -83,3 +83,24 @@ def _modifyEnableHcalHardcode( theProcess ): | |
|
||
from Configuration.Eras.Modifier_hcalHardcodeConditions_cff import hcalHardcodeConditions | ||
modifyEnableHcalHardcode_ = hcalHardcodeConditions.makeProcessModifier( _modifyEnableHcalHardcode ) | ||
|
||
|
||
#phase 2 ecal pedestals | ||
def _modifyEcalPedestals( process ): | ||
process.load("SimCalorimetry.EcalSimProducers.esEcalLiteDTUPedestalsProducer_cfi") | ||
|
||
from CondCore.CondDB.CondDB_cfi import CondDB | ||
CondDB.connect = cms.string('sqlite_file:SimCalorimetry/EcalSimProducers/data/simPulseShapePhaseII.db') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @christopheralanwest @ggovi There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Indeed. If this payload is needed, please provide a validation of the new tag and we can add it to the global tag. Can the new tag be used independent of this PR or must the code and conditions be changed simultaneously? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well, the code compiles and runs even without the tag, but the results are non physical because the shape of phase1 is much larger. Indeed we are trying to have this "development" branch as a temporary workflow, because the reco part must be finished. it would be nice to have the code shared with other people. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The current Phase 2 GT There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK we will upload the payload contained in simPulseShapePhaseII.db There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the pulse shape is now on the DB, thus, as you can see here https://github.com/dariosol/cmssw/blob/b9214d31f4c48eb4765fd6ceeb1f890fd9b05422/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py#L31 |
||
process.ecalConditions = cms.ESSource("PoolDBESSource", CondDB, | ||
toGet = cms.VPSet( | ||
cms.PSet( | ||
record = cms.string('EcalSimPulseShapeRcd') , | ||
tag = cms.string('EcalSimPulseShape_default_mc') | ||
) | ||
) | ||
) | ||
process.es_prefer_ecalPulseShape = cms.ESPrefer("PoolDBESSource","ecalConditions") | ||
|
||
from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel | ||
modifyDigi_Phase2EcalPed = phase2_ecal_devel.makeProcessModifier(_modifyEcalPedestals) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#ifndef DataFormats_EcalDigi_EcalDataFrame_Ph2_h | ||
#define DataFormats_EcalDigi_EcalDataFrame_Ph2_h | ||
#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" | ||
#include "DataFormats/DetId/interface/DetId.h" | ||
#include "DataFormats/Common/interface/DataFrame.h" | ||
#include "CondFormats/EcalObjects/interface/EcalConstants.h" | ||
|
||
/** \class EcalDataFrame_Ph2 | ||
|
||
*/ | ||
class EcalDataFrame_Ph2 { | ||
public: | ||
EcalDataFrame_Ph2() {} | ||
EcalDataFrame_Ph2(edm::DataFrame const& iframe) : m_data(iframe) {} | ||
|
||
virtual ~EcalDataFrame_Ph2() {} | ||
|
||
DetId id() const { return m_data.id(); } | ||
|
||
int size() const { return m_data.size(); } | ||
|
||
EcalLiteDTUSample operator[](int i) const { return m_data[i]; } | ||
EcalLiteDTUSample sample(int i) const { return m_data[i]; } | ||
|
||
// FIXME (shall we throw??) | ||
void setSize(int) {} | ||
void setSample(int i, EcalLiteDTUSample sam) { m_data[i] = sam; } | ||
|
||
static constexpr int MAXSAMPLES = ecalPh2::sampleSize; | ||
|
||
edm::DataFrame const& frame() const { return m_data; } | ||
edm::DataFrame& frame() { return m_data; } | ||
|
||
private: | ||
edm::DataFrame m_data; | ||
}; | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#ifndef DataFormats_EcalDigi_EcalLiteDTUSample_h | ||
#define DataFormats_EcalDigi_EcalLiteDTUSample_h | ||
|
||
#include <iosfwd> | ||
#include <cstdint> | ||
#include "CondFormats/EcalObjects/interface/EcalConstants.h" | ||
silviodonato marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
namespace ecalLiteDTU { | ||
typedef uint16_t sample_type; | ||
|
||
/// get the ADC sample (12 bits) | ||
constexpr int adc(sample_type sample) { return sample & ecalPh2::kAdcMask; } | ||
/// get the gainId (2 bits) | ||
constexpr int gainId(sample_type sample) { return (sample >> ecalPh2::NBITS) & ecalPh2::kGainIdMask; } | ||
constexpr sample_type pack(int adc, int gainId) { | ||
return (adc & ecalPh2::kAdcMask) | ((gainId & ecalPh2::kGainIdMask) << ecalPh2::NBITS); | ||
} | ||
} // namespace ecalLiteDTU | ||
|
||
/** \class EcalLiteDTUSample | ||
* Simple container packer/unpacker for a single sample from the Lite_CATIA electronics | ||
* | ||
* | ||
*/ | ||
class EcalLiteDTUSample { | ||
public: | ||
EcalLiteDTUSample() { theSample = 0; } | ||
EcalLiteDTUSample(uint16_t data) { theSample = data; } | ||
EcalLiteDTUSample(int adc, int gainId); | ||
|
||
/// get the raw word | ||
uint16_t raw() const { return theSample; } | ||
/// get the ADC sample (12 bits) | ||
int adc() const { return theSample & ecalPh2::kAdcMask; } | ||
/// get the gainId (2 bits) | ||
int gainId() const { return (theSample >> ecalPh2::NBITS) & ecalPh2::kGainIdMask; } | ||
/// for streaming | ||
uint16_t operator()() const { return theSample; } | ||
operator uint16_t() const { return theSample; } | ||
|
||
private: | ||
uint16_t theSample; | ||
}; | ||
|
||
std::ostream& operator<<(std::ostream&, const EcalLiteDTUSample&); | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" | ||
#include <iostream> | ||
|
||
EcalLiteDTUSample::EcalLiteDTUSample(int adc, int gainId) { | ||
theSample = (adc & ecalPh2::kAdcMask) | ((gainId & ecalPh2::kGainIdMask) << ecalPh2::NBITS); | ||
} | ||
|
||
std::ostream& operator<<(std::ostream& s, const EcalLiteDTUSample& samp) { | ||
s << "ADC=" << samp.adc() << ", gainId=" << samp.gainId(); | ||
return s; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would like the opinion of @ggovi prior to signing off for alca: should these be converted to
std::vector
to avoid changing the definitions of the member data ifecalPh2::NGAINS
is modified at some point in the future?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In principle the number of gains is fixed by the HW (The CATIA ASIC) so unless we change the design of the chips this should never change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, I think it's fine then.