From 9ce2f7deff4b059cd43ea39664392f308767c44d Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 3 Aug 2020 13:43:51 +0200 Subject: [PATCH 01/14] ecal phase 2 digitization --- CalibFormats/CaloObjects/src/CaloTSamples.cc | 6 +- .../interface/EcalCATIAGainRatiosRcd.h | 6 + .../interface/EcalLiteDTUPedestalsRcd.h | 6 + .../DataRecord/src/EcalCATIAGainRatiosRcd.cc | 4 + .../DataRecord/src/EcalLiteDTUPedestalsRcd.cc | 4 + .../interface/EcalCATIAGainRatios.h | 10 + .../EcalObjects/interface/EcalConstants.h | 31 ++ .../interface/EcalLiteDTUPedestals.h | 39 ++ .../EcalObjects/src/SerializationManual.h | 1 + .../src/T_EventSetup_EcalLiteDTUPedestals.cc | 4 + CondFormats/EcalObjects/src/classes.h | 11 +- CondFormats/EcalObjects/src/classes_def.xml | 8 + .../xml/EcalChannelStatus_default.xml | 9 - .../xml/EcalCondObjectContainer_default.xml | 9 - .../xml/EcalFunctionParameters_default.xml | 9 - .../xml/EcalGainRatios_default.xml | 9 - .../xml/EcalLaserAPDPNRatios_default.xml | 9 - .../xml/EcalMappingElectronics_default.xml | 9 - .../EcalObjects/xml/EcalPedestals_default.xml | 9 - .../EcalObjects/xml/EcalTBWeights_default.xml | 9 - .../xml/EcalTPGCrystalStatus_default.xml | 9 - .../xml/EcalTPGFineGrainEBGroup_default.xml | 9 - .../xml/EcalTPGFineGrainEBIdMap_default.xml | 9 - .../xml/EcalTPGFineGrainStripEE_default.xml | 9 - .../xml/EcalTPGLinearizationConst_default.xml | 9 - .../xml/EcalTPGLutGroupIdMap_default.xml | 9 - .../xml/EcalTPGLutGroup_default.xml | 9 - .../xml/EcalTPGPedestals_default.xml | 9 - .../xml/EcalTPGTowerStatus_default.xml | 9 - .../xml/EcalTPGWeightGroup_default.xml | 9 - .../xml/EcalTPGWeightIdMap_default.xml | 9 - .../xml/EcalWeightXtalGroups_default.xml | 9 - DataFormats/EcalDigi/interface/EBDataFrame.h | 1 + .../EcalDigi/interface/EcalDataFrame_Ph2.h | 38 ++ .../EcalDigi/interface/EcalDigiCollections.h | 27 ++ .../EcalDigi/interface/EcalLiteDTUSample.h | 47 +++ DataFormats/EcalDigi/src/EcalLiteDTUSample.cc | 11 + DataFormats/EcalDigi/src/classes_def.xml | 9 + .../Pythia6Interface/test/Py6HadFilter_cfg.py | 60 ---- .../Skimming/plugins/Tau3MuSkim.h | 35 -- .../python/RecoJets_EventContent_cff.py | 31 +- .../python/ecalDigiSequence_cff.py | 10 +- .../python/ecalDigis_cfi.py | 75 ++++ .../EcalSimAlgos/interface/EBHitResponse.h | 28 +- .../EBHitResponse.icc} | 129 +++++-- .../interface/EcalBaseSignalGenerator.h | 1 - .../EcalSimAlgos/interface/EcalCoder.h | 5 +- .../interface/EcalCorrelatedNoiseMatrix.h | 5 +- .../interface/EcalDigitizerTraits.h | 22 +- .../interface/EcalElectronicsSim.h | 35 +- .../EcalSimAlgos/interface/EcalHitResponse.h | 7 +- .../EcalSimAlgos/interface/EcalLiteDTUCoder.h | 75 ++++ .../src/EcalCorrelatedNoiseMatrix.cc | 5 + .../EcalSimAlgos/src/EcalDigitizers.cc | 2 + .../EcalSimAlgos/src/EcalElectronicsSim.cc | 37 -- .../EcalSimAlgos/src/EcalHitResponse.cc | 4 +- .../EcalSimAlgos/src/EcalLiteDTUCoder.cc | 177 +++++++++ .../interface/EcalDigiProducer.h | 12 +- .../interface/EcalDigiProducer_Ph2.h | 121 +++++++ .../interface/EcalTimeDigiProducer.h | 7 +- .../plugins/EcalLiteDTUPedestalsESProducer.cc | 63 ++++ .../EcalSimProducers/plugins/SealModule.cc | 3 +- .../python/ecalDigiParameters_Ph2_cff.py | 23 ++ .../python/ecalElectronicsSim_Ph2_cff.py | 13 + .../python/ecalSimParameterMap_cff.py | 14 +- .../python/esCATIAGainProducer_cfi.py | 12 + .../esEcalLiteDTUPedestalsProducer_cfi.py | 16 + .../EcalSimProducers/src/EcalDigiProducer.cc | 6 +- .../src/EcalDigiProducer_Ph2.cc | 338 ++++++++++++++++++ .../src/EcalTimeDigiProducer.cc | 50 +-- ...ctron_cfi_py_GEN_IDEAL_withECALDigi_Ph1.py | 168 +++++++++ ..._cfi_py_GEN_IDEAL_withECALDigi_newshape.py | 171 +++++++++ ...onPt1000_pythia8_cfi_GEN_SIM_DIG_Phase2.py | 160 +++++++++ SimGeneral/MixingModule/python/aliases_cfi.py | 27 +- .../python/ecalDigitizer_Ph2_cfi.py | 28 ++ .../MixingModule/python/ecalDigitizer_cfi.py | 7 + .../MtdValidation/plugins/BtlRecoHarvester.cc | 123 +++++++ .../plugins/BtlRecoValidation.cc | 219 ++++++++++++ .../MtdValidation/plugins/EtlRecoHarvester.cc | 189 ++++++++++ .../plugins/EtlRecoValidation.cc | 244 +++++++++++++ 80 files changed, 2715 insertions(+), 485 deletions(-) create mode 100644 CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h create mode 100644 CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h create mode 100644 CondFormats/DataRecord/src/EcalCATIAGainRatiosRcd.cc create mode 100644 CondFormats/DataRecord/src/EcalLiteDTUPedestalsRcd.cc create mode 100644 CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h create mode 100644 CondFormats/EcalObjects/interface/EcalConstants.h create mode 100644 CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h create mode 100644 CondFormats/EcalObjects/src/T_EventSetup_EcalLiteDTUPedestals.cc delete mode 100644 CondFormats/EcalObjects/xml/EcalChannelStatus_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalCondObjectContainer_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalFunctionParameters_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalGainRatios_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalLaserAPDPNRatios_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalMappingElectronics_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalPedestals_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTBWeights_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGCrystalStatus_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGFineGrainEBGroup_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGFineGrainEBIdMap_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGFineGrainStripEE_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGLinearizationConst_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGLutGroupIdMap_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGLutGroup_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGPedestals_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGTowerStatus_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGWeightGroup_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalTPGWeightIdMap_default.xml delete mode 100644 CondFormats/EcalObjects/xml/EcalWeightXtalGroups_default.xml create mode 100644 DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h create mode 100644 DataFormats/EcalDigi/interface/EcalLiteDTUSample.h create mode 100644 DataFormats/EcalDigi/src/EcalLiteDTUSample.cc delete mode 100644 GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py delete mode 100644 HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h rename SimCalorimetry/EcalSimAlgos/{src/EBHitResponse.cc => interface/EBHitResponse.icc} (65%) create mode 100644 SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h delete mode 100644 SimCalorimetry/EcalSimAlgos/src/EcalElectronicsSim.cc create mode 100644 SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc create mode 100644 SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h create mode 100644 SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc create mode 100644 SimCalorimetry/EcalSimProducers/python/ecalDigiParameters_Ph2_cff.py create mode 100644 SimCalorimetry/EcalSimProducers/python/ecalElectronicsSim_Ph2_cff.py create mode 100644 SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py create mode 100644 SimCalorimetry/EcalSimProducers/python/esEcalLiteDTUPedestalsProducer_cfi.py create mode 100644 SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc create mode 100644 SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_Ph1.py create mode 100644 SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_newshape.py create mode 100644 SimCalorimetry/EcalSimProducers/test/testSingleElectronPt1000_pythia8_cfi_GEN_SIM_DIG_Phase2.py create mode 100644 SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py create mode 100644 Validation/MtdValidation/plugins/BtlRecoHarvester.cc create mode 100644 Validation/MtdValidation/plugins/BtlRecoValidation.cc create mode 100644 Validation/MtdValidation/plugins/EtlRecoHarvester.cc create mode 100644 Validation/MtdValidation/plugins/EtlRecoValidation.cc diff --git a/CalibFormats/CaloObjects/src/CaloTSamples.cc b/CalibFormats/CaloObjects/src/CaloTSamples.cc index 394eae1f38f60..b293d5c5de85c 100644 --- a/CalibFormats/CaloObjects/src/CaloTSamples.cc +++ b/CalibFormats/CaloObjects/src/CaloTSamples.cc @@ -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; -template class CaloTSamples; +template class CaloTSamples; template class CaloTSamples; +template class CaloTSamples; diff --git a/CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h b/CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h new file mode 100644 index 0000000000000..a05b14aa67d07 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h @@ -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 {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h b/CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h new file mode 100644 index 0000000000000..44cd477b836ef --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h @@ -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 {}; +#endif diff --git a/CondFormats/DataRecord/src/EcalCATIAGainRatiosRcd.cc b/CondFormats/DataRecord/src/EcalCATIAGainRatiosRcd.cc new file mode 100644 index 0000000000000..d59977b155288 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalCATIAGainRatiosRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalCATIAGainRatiosRcd); diff --git a/CondFormats/DataRecord/src/EcalLiteDTUPedestalsRcd.cc b/CondFormats/DataRecord/src/EcalLiteDTUPedestalsRcd.cc new file mode 100644 index 0000000000000..ca644efc17fa3 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalLiteDTUPedestalsRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalLiteDTUPedestalsRcd); diff --git a/CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h b/CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h new file mode 100644 index 0000000000000..56ba116355817 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h @@ -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 diff --git a/CondFormats/EcalObjects/interface/EcalConstants.h b/CondFormats/EcalObjects/interface/EcalConstants.h new file mode 100644 index 0000000000000..3d478730ddad9 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalConstants.h @@ -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 diff --git a/CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h b/CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h new file mode 100644 index 0000000000000..4c505cc05e627 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h @@ -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 EcalLiteDTUPedestalsMap; +typedef EcalLiteDTUPedestalsMap::const_iterator EcalLiteDTUPedestalsMapIterator; + +#endif diff --git a/CondFormats/EcalObjects/src/SerializationManual.h b/CondFormats/EcalObjects/src/SerializationManual.h index 5efd2ebcc7440..2f6158477b05d 100644 --- a/CondFormats/EcalObjects/src/SerializationManual.h +++ b/CondFormats/EcalObjects/src/SerializationManual.h @@ -4,6 +4,7 @@ COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); +COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); COND_SERIALIZATION_INSTANTIATE(EcalCondObjectContainer); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalLiteDTUPedestals.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalLiteDTUPedestals.cc new file mode 100644 index 0000000000000..75bcfb76d8b96 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalLiteDTUPedestals.cc @@ -0,0 +1,4 @@ +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalLiteDTUPedestalsMap); diff --git a/CondFormats/EcalObjects/src/classes.h b/CondFormats/EcalObjects/src/classes.h index 265320eb1ddea..2c40d0319ff6b 100644 --- a/CondFormats/EcalObjects/src/classes.h +++ b/CondFormats/EcalObjects/src/classes.h @@ -1,4 +1,4 @@ - +#include #include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h" #include "CondFormats/EcalObjects/interface/EcalCondTowerObjectContainer.h" #include "CondFormats/EcalObjects/interface/EcalPedestals.h" @@ -64,7 +64,9 @@ #include "CondFormats/EcalObjects/interface/EcalTPGSpike.h" #include "CondFormats/EcalObjects/interface/EcalSRSettings.h" #include "CondFormats/EcalObjects/interface/EcalSimPulseShape.h" -#include +//ECAL PH2: +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" namespace CondFormats_EcalObjects { struct dictionary { @@ -93,6 +95,11 @@ namespace CondFormats_EcalObjects { EcalContainer ec_ebDetId_ecalPedestal; EcalCondObjectContainer pedmap; //typedef EcalPedestals + //ECAL PH2: + std::vector v_ecalDTUPedestals; + EcalContainer ec_ebDetId_ecalLiteDTUPedestals; + EcalCondObjectContainer pedmapDTU; //typedef EcalPedestals + std::vector v_ecalTPGCrystalStatusCode; EcalContainer ec_eeDetId_ecalTPGCrystalStatusCode; EcalContainer ec_ebDetId_ecalTPGCrystalStatusCode; diff --git a/CondFormats/EcalObjects/src/classes_def.xml b/CondFormats/EcalObjects/src/classes_def.xml index 67d8101caa54e..c5cc8af4e828b 100644 --- a/CondFormats/EcalObjects/src/classes_def.xml +++ b/CondFormats/EcalObjects/src/classes_def.xml @@ -82,6 +82,14 @@ + + + + + + + + diff --git a/CondFormats/EcalObjects/xml/EcalChannelStatus_default.xml b/CondFormats/EcalObjects/xml/EcalChannelStatus_default.xml deleted file mode 100644 index be8eb21c4833a..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalChannelStatus_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalCondObjectContainer_default.xml b/CondFormats/EcalObjects/xml/EcalCondObjectContainer_default.xml deleted file mode 100644 index 87fe5b5319af5..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalCondObjectContainer_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalFunctionParameters_default.xml b/CondFormats/EcalObjects/xml/EcalFunctionParameters_default.xml deleted file mode 100644 index ca45832b26b28..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalFunctionParameters_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalGainRatios_default.xml b/CondFormats/EcalObjects/xml/EcalGainRatios_default.xml deleted file mode 100644 index 050c65b234fbb..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalGainRatios_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalLaserAPDPNRatios_default.xml b/CondFormats/EcalObjects/xml/EcalLaserAPDPNRatios_default.xml deleted file mode 100644 index 86d9162ad5b94..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalLaserAPDPNRatios_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalMappingElectronics_default.xml b/CondFormats/EcalObjects/xml/EcalMappingElectronics_default.xml deleted file mode 100644 index a3a56a29dd255..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalMappingElectronics_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalPedestals_default.xml b/CondFormats/EcalObjects/xml/EcalPedestals_default.xml deleted file mode 100644 index d2903c54b44af..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalPedestals_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTBWeights_default.xml b/CondFormats/EcalObjects/xml/EcalTBWeights_default.xml deleted file mode 100644 index 1f5abd1eb0169..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTBWeights_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGCrystalStatus_default.xml b/CondFormats/EcalObjects/xml/EcalTPGCrystalStatus_default.xml deleted file mode 100644 index 488b062cd4a85..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGCrystalStatus_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBGroup_default.xml b/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBGroup_default.xml deleted file mode 100644 index 22c373b740e71..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBGroup_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBIdMap_default.xml b/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBIdMap_default.xml deleted file mode 100644 index 4ae8fd7ecbd3a..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGFineGrainEBIdMap_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGFineGrainStripEE_default.xml b/CondFormats/EcalObjects/xml/EcalTPGFineGrainStripEE_default.xml deleted file mode 100644 index b7fbf86260d3a..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGFineGrainStripEE_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGLinearizationConst_default.xml b/CondFormats/EcalObjects/xml/EcalTPGLinearizationConst_default.xml deleted file mode 100644 index 7e9ecb55e00e5..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGLinearizationConst_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGLutGroupIdMap_default.xml b/CondFormats/EcalObjects/xml/EcalTPGLutGroupIdMap_default.xml deleted file mode 100644 index 35af296d524ae..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGLutGroupIdMap_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGLutGroup_default.xml b/CondFormats/EcalObjects/xml/EcalTPGLutGroup_default.xml deleted file mode 100644 index e6bc278f03428..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGLutGroup_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGPedestals_default.xml b/CondFormats/EcalObjects/xml/EcalTPGPedestals_default.xml deleted file mode 100644 index 91127f56fbcca..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGPedestals_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGTowerStatus_default.xml b/CondFormats/EcalObjects/xml/EcalTPGTowerStatus_default.xml deleted file mode 100644 index 9bb3ad24d8826..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGTowerStatus_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGWeightGroup_default.xml b/CondFormats/EcalObjects/xml/EcalTPGWeightGroup_default.xml deleted file mode 100644 index 07eecbee3c3da..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGWeightGroup_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalTPGWeightIdMap_default.xml b/CondFormats/EcalObjects/xml/EcalTPGWeightIdMap_default.xml deleted file mode 100644 index 1c4a0d9ec30a3..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalTPGWeightIdMap_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CondFormats/EcalObjects/xml/EcalWeightXtalGroups_default.xml b/CondFormats/EcalObjects/xml/EcalWeightXtalGroups_default.xml deleted file mode 100644 index 13d0159cb6d83..0000000000000 --- a/CondFormats/EcalObjects/xml/EcalWeightXtalGroups_default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/DataFormats/EcalDigi/interface/EBDataFrame.h b/DataFormats/EcalDigi/interface/EBDataFrame.h index cb6ded7d25a82..89c6e97da5419 100644 --- a/DataFormats/EcalDigi/interface/EBDataFrame.h +++ b/DataFormats/EcalDigi/interface/EBDataFrame.h @@ -3,6 +3,7 @@ #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" #include /** \class EBDataFrame diff --git a/DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h b/DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h new file mode 100644 index 0000000000000..6e42cbbbee909 --- /dev/null +++ b/DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h @@ -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 diff --git a/DataFormats/EcalDigi/interface/EcalDigiCollections.h b/DataFormats/EcalDigi/interface/EcalDigiCollections.h index 3a117d2cc908a..49b7042bde065 100644 --- a/DataFormats/EcalDigi/interface/EcalDigiCollections.h +++ b/DataFormats/EcalDigi/interface/EcalDigiCollections.h @@ -18,6 +18,29 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" #include "DataFormats/Common/interface/DataFrameContainer.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" + +class EcalDigiCollectionPh2 : public edm::DataFrameContainer { +public: + typedef edm::DataFrameContainer::size_type size_type; + static const size_type MAXSAMPLES = ecalPh2::sampleSize; + explicit EcalDigiCollectionPh2(size_type istride = MAXSAMPLES, int isubdet = 0) + : edm::DataFrameContainer(istride, isubdet) {} + void swap(DataFrameContainer& other) { this->DataFrameContainer::swap(other); } +}; + +class EBDigiCollectionPh2 : public EcalDigiCollectionPh2 { +public: + typedef edm::DataFrameContainer::size_type size_type; + typedef EBDataFrame Digi; + typedef Digi::key_type DetId; + + EBDigiCollectionPh2(size_type istride = MAXSAMPLES) : EcalDigiCollectionPh2(istride, EcalBarrel) {} + void swap(EBDigiCollectionPh2& other) { this->EcalDigiCollectionPh2::swap(other); } + void push_back(const Digi& digi) { DataFrameContainer::push_back(digi.id(), digi.frame().begin()); } + void push_back(id_type iid) { DataFrameContainer::push_back(iid); } + void push_back(id_type iid, data_type const* idata) { DataFrameContainer::push_back(iid, idata); } +}; class EcalDigiCollection : public edm::DataFrameContainer { public: @@ -89,6 +112,10 @@ inline void swap(EEDigiCollection& lhs, EEDigiCollection& rhs) { lhs.swap(rhs); inline void swap(ESDigiCollection& lhs, ESDigiCollection& rhs) { lhs.swap(rhs); } +inline void swap(EcalDigiCollectionPh2& lhs, EcalDigiCollectionPh2& rhs) { lhs.swap(rhs); } + +inline void swap(EBDigiCollectionPh2& lhs, EBDigiCollectionPh2& rhs) { lhs.swap(rhs); } + typedef edm::SortedCollection EcalTimeDigiCollection; typedef edm::SortedCollection EcalTrigPrimDigiCollection; typedef edm::SortedCollection EcalEBTrigPrimDigiCollection; diff --git a/DataFormats/EcalDigi/interface/EcalLiteDTUSample.h b/DataFormats/EcalDigi/interface/EcalLiteDTUSample.h new file mode 100644 index 0000000000000..e359e3438d963 --- /dev/null +++ b/DataFormats/EcalDigi/interface/EcalLiteDTUSample.h @@ -0,0 +1,47 @@ +#ifndef DataFormats_EcalDigi_EcalLiteDTUSample_h +#define DataFormats_EcalDigi_EcalLiteDTUSample_h + +#include +#include +#include "CondFormats/EcalObjects/interface/EcalConstants.h" + +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 diff --git a/DataFormats/EcalDigi/src/EcalLiteDTUSample.cc b/DataFormats/EcalDigi/src/EcalLiteDTUSample.cc new file mode 100644 index 0000000000000..bb036f3472054 --- /dev/null +++ b/DataFormats/EcalDigi/src/EcalLiteDTUSample.cc @@ -0,0 +1,11 @@ +#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" +#include + +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; +} diff --git a/DataFormats/EcalDigi/src/classes_def.xml b/DataFormats/EcalDigi/src/classes_def.xml index cd9b32c91ae11..9c40edacab4db 100644 --- a/DataFormats/EcalDigi/src/classes_def.xml +++ b/DataFormats/EcalDigi/src/classes_def.xml @@ -72,6 +72,13 @@ + + + + + + + @@ -91,6 +98,8 @@ + + diff --git a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py b/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py deleted file mode 100644 index 06cf1b1b42b3b..0000000000000 --- a/GeneratorInterface/Pythia6Interface/test/Py6HadFilter_cfg.py +++ /dev/null @@ -1,60 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from Configuration.Generator.PythiaUESettings_cfi import * - -process = cms.Process("TEST") -process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -#process.load("SimGeneral.HepPDTESSource.pdt_cfi") - -process.load("Configuration.StandardSequences.Services_cff") - -process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", - generator = cms.PSet( - initialSeed = cms.untracked.uint32(123456789), - engineName = cms.untracked.string('HepJamesRandom') - ) -) - -process.randomEngineStateProducer = cms.EDProducer("RandomEngineStateProducer") - -# The following three lines reduce the clutter of repeated printouts -# of the same exception message. -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.destinations = ['cerr'] -process.MessageLogger.statistics = [] -process.MessageLogger.fwkJobReports = [] - -process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(50)) - -process.source = cms.Source("LHESource", - fileNames = cms.untracked.vstring('file:ttbar_5flavours_xqcut20_10TeV.lhe') -) - -process.generator = cms.EDFilter("Pythia6HadronizerFilter", - pythiaHepMCVerbosity = cms.untracked.bool(True), - maxEventsToPrint = cms.untracked.int32(0), - pythiaPylistVerbosity = cms.untracked.int32(1), - comEnergy = cms.double(10000.0), - PythiaParameters = cms.PSet( - pythiaUESettingsBlock, - processParameters = cms.vstring('MSEL=0 ! User defined processes', - 'PMAS(5,1)=4.4 ! b quark mass', - 'PMAS(6,1)=172.4 ! t quark mass', - 'MSTJ(1)=1 ! Fragmentation/hadronization on or off', - 'MSTP(61)=1 ! Parton showering on or off'), - # This is a vector of ParameterSet names to be read, in this order - parameterSets = cms.vstring('pythiaUESettings', - 'processParameters') - ) -) - -process.GEN = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('TestTTbar.root') -) - -process.p = cms.Path(process.generator) -process.p1 = cms.Path(process.randomEngineStateProducer) -process.outpath = cms.EndPath(process.GEN) - -process.schedule = cms.Schedule(process.p, process.p1, process.outpath) diff --git a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h b/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h deleted file mode 100644 index f83574fd5f7c5..0000000000000 --- a/HeavyFlavorAnalysis/Skimming/plugins/Tau3MuSkim.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TAU3MUSKIM -#define TAU3MUSKIM - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDFilter.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -// -// class declaration -// - -class Tau3MuReco; - -class Tau3MuSkim : public edm::EDFilter { -public: - explicit Tau3MuSkim(const edm::ParameterSet&); - ~Tau3MuSkim() override; - -private: - void beginJob() override; - bool filter(edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - // ----------member data --------------------------- - Tau3MuReco* m_Tau3MuReco; -}; - -#endif diff --git a/RecoJets/Configuration/python/RecoJets_EventContent_cff.py b/RecoJets/Configuration/python/RecoJets_EventContent_cff.py index c1bd0d76dec5b..2812077fef52b 100644 --- a/RecoJets/Configuration/python/RecoJets_EventContent_cff.py +++ b/RecoJets/Configuration/python/RecoJets_EventContent_cff.py @@ -6,37 +6,14 @@ 'keep *_ak4CaloJets_rho_*', 'keep *_ak4CaloJets_sigma_*', 'keep *_ak4PFJetsCHS_*_*', + 'keep floatedmValueMap_puppi_*_*', 'keep *_ak4PFJetsPuppi_*_*', 'keep *_ak8PFJetsPuppi_*_*', 'keep *_ak8PFJetsPuppiSoftDrop_*_*', - 'keep recoPFJets_ak4PFJets_*_*', - 'keep *_ak4PFJets_rho_*', - 'keep *_ak4PFJets_sigma_*', - 'keep *_JetPlusTrackZSPCorJetAntiKt4_*_*', - 'keep *_caloTowers_*_*', - 'keep *_CastorTowerReco_*_*', - 'keep *_ak4JetTracksAssociatorAtVertex_*_*', - 'keep *_ak4JetTracksAssociatorAtVertexPF_*_*', - 'keep *_ak4JetTracksAssociatorExplicit_*_*', - 'keep *_ak4JetExtender_*_*', - 'keep *_ak4JetID_*_*', - 'keep recoBasicJets_ak5CastorJets_*_*', - 'keep *_ak5CastorJets_rho_*', - 'keep *_ak5CastorJets_sigma_*', - 'keep *_ak5CastorJetID_*_*', - 'keep recoBasicJets_ak7CastorJets_*_*', - 'keep *_ak7CastorJets_rho_*', - 'keep *_ak7CastorJets_sigma_*', - 'keep *_ak7CastorJetID_*_*', - 'keep *_fixedGridRhoAll_*_*', - 'keep *_fixedGridRhoFastjetAll_*_*', - 'keep *_fixedGridRhoFastjetAllTmp_*_*', - 'keep *_fixedGridRhoFastjetCentral_*_*', - 'keep *_fixedGridRhoFastjetAllCalo_*_*', - 'keep *_fixedGridRhoFastjetCentralCalo_*_*', - 'keep *_fixedGridRhoFastjetCentralChargedPileUp_*_*', - 'keep *_fixedGridRhoFastjetCentralNeutral_*_*', + 'keep *_ak8PFJetsCHS_*_*', + 'keep *_ak8PFJetsCHSSoftDrop_*_*', + 'keep *_cmsTopTagPFJetsCHS_*_*', 'keep *_ak8PFJetsPuppiSoftDropMass_*_*' ) ) diff --git a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py index c8250bc348ae8..c6d368f3569b2 100644 --- a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py +++ b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py @@ -18,8 +18,14 @@ premix_stage1.toReplaceWith(ecalDigiTask, ecalDigiTask.copyAndExclude([simEcalPreshowerDigis])) from SimCalorimetry.EcalEBTrigPrimProducers.ecalEBTriggerPrimitiveDigis_cff import * -_phase2_ecalDigiTask = ecalDigiTask.copy() -_phase2_ecalDigiTask.add(simEcalEBTriggerPrimitiveDigis) + +#DARIO COMMENTED: +#_phase2_ecalDigiTask = ecalDigiTask.copy() +#_phase2_ecalDigiTask.add(simEcalEBTriggerPrimitiveDigis) + +#DARIO ADDED: +#_phase2_ecalDigiTask = cms.Task(simEcalDigis) +_phase2_ecalDigiTask = cms.Task() from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask) diff --git a/SimCalorimetry/EcalSelectiveReadoutProducers/python/ecalDigis_cfi.py b/SimCalorimetry/EcalSelectiveReadoutProducers/python/ecalDigis_cfi.py index 094977444b01f..a0059c85f17e3 100644 --- a/SimCalorimetry/EcalSelectiveReadoutProducers/python/ecalDigis_cfi.py +++ b/SimCalorimetry/EcalSelectiveReadoutProducers/python/ecalDigis_cfi.py @@ -38,6 +38,7 @@ trigPrimCollection = cms.string(''), #switch to run w/o trigger primitive. For debug use only + trigPrimBypass = cms.bool(False), # Mode selection for "Trig bypass" mode @@ -72,6 +73,80 @@ defaultTtf = cms.int32(4) ) + +_simEcalDigisPh2 = cms.EDProducer("EcalSelectiveReadoutProducer", + # Label of input EB and EE digi collections + digiProducer = cms.string('simEcalUnsuppressedDigis'), + + # Instance name of input EB digi collections + EBdigiCollection = cms.string(''), + + # Instance name of input EB digi collections + EEdigiCollection = cms.string(''), + + # Instance name of output EB SR flags collection + EBSrFlagCollection = cms.string('ebSrFlags'), + + # Instance name of output EE SR flags collection + EESrFlagCollection = cms.string('eeSrFlags'), + + # Instance name of output EB digis collection + EBSRPdigiCollection = cms.string('ebDigis'), + + # Instance name of output EE digis collection + EESRPdigiCollection = cms.string('eeDigis'), + + # Switch for reading SRP settings from condition database + configFromCondDB = cms.bool(True), + + # Switch to turn off SRP altogether using special DB payload + UseFullReadout = cms.bool(False), + + # ES label? + # NZSLabel = cms.ESInputTag(' '), + + # Label name of input ECAL trigger primitive collection + trigPrimProducer = cms.string('simEcalTriggerPrimitiveDigis'), + + # Instance name of ECAL trigger primitive collection + trigPrimCollection = cms.string(''), + + #switch to run w/o trigger primitive. For debug use only + trigPrimBypass = cms.bool(True), + + # Mode selection for "Trig bypass" mode + # 0: TT thresholds applied on sum of crystal Et's + # 1: TT thresholds applies on compressed Et from Trigger primitive + # @ee trigPrimByPass_ switch + trigPrimBypassMode = cms.int32(0), + + #for debug mode only: + trigPrimBypassLTH = cms.double(1.0), + + #for debug mode only: + trigPrimBypassHTH = cms.double(1.0), + + #for debug mode only + trigPrimBypassWithPeakFinder = cms.bool(True), + + #number of events whose TT and SR flags must be dumped (for debug purpose): + dumpFlags = cms.untracked.int32(0), + + #logical flag to write out SrFlags + writeSrFlags = cms.untracked.bool(True), + + #switch to apply selective readout decision on the digis and produce + #the "suppressed" digis + produceDigis = cms.untracked.bool(True), + + #Trigger Tower Flag to use when a flag is not found from the input + #Trigger Primitive collection. Must be one of the following values: + # 0: low interest, 1: mid interest, 3: high interest + # 4: forced low interest, 5: forced mid interest, 7: forced high interest + defaultTtf = cms.int32(4) +) + + # Turn off SR in Ecal for premixing stage1 from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 premix_stage1.toModify(simEcalDigis, UseFullReadout = True) diff --git a/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h index 80699d98f24a7..0455558478f4d 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h @@ -4,6 +4,7 @@ #include "CalibFormats/CaloObjects/interface/CaloTSamples.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalHitResponse.h" #include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" class APDSimParameters; @@ -11,21 +12,24 @@ namespace CLHEP { class HepRandomEngine; } -class EBHitResponse : public EcalHitResponse { +template +class EBHitResponseImpl : public EcalHitResponse { public: - typedef CaloTSamples EBSamples; + typedef CaloTSamples EBSamples; typedef std::vector VecD; - enum { kNOffsets = 2000 }; + static constexpr size_t kNOffsets = constset::kNOffsets; - EBHitResponse(const CaloVSimParameterMap* parameterMap, - const CaloVShape* shape, - bool apdOnly, - const APDSimParameters* apdPars, - const CaloVShape* apdShape); + static constexpr double kSamplePeriod = constset::Samp_Period; - ~EBHitResponse() override; + EBHitResponseImpl(const CaloVSimParameterMap* parameterMap, + const CaloVShape* shape, + bool apdOnly, + const APDSimParameters* apdPars = nullptr, + const CaloVShape* apdShape = nullptr); + + ~EBHitResponseImpl() override; void initialize(CLHEP::HepRandomEngine*); @@ -58,6 +62,8 @@ class EBHitResponse : public EcalHitResponse { void putAPDSignal(const DetId& detId, double npe, double time); + void putAnalogSignal(const PCaloHit& inputHit, CLHEP::HepRandomEngine*) override; + private: const VecD& offsets() const { return m_timeOffVec; } @@ -95,4 +101,8 @@ class EBHitResponse : public EcalHitResponse { bool m_isInitialized; }; + +typedef EBHitResponseImpl EBHitResponse; +typedef EBHitResponseImpl EBHitResponse_Ph2; +#include "EBHitResponse.icc" #endif diff --git a/SimCalorimetry/EcalSimAlgos/src/EBHitResponse.cc b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc similarity index 65% rename from SimCalorimetry/EcalSimAlgos/src/EBHitResponse.cc rename to SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc index c500007a729eb..a416605d67bfc 100644 --- a/SimCalorimetry/EcalSimAlgos/src/EBHitResponse.cc +++ b/SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.icc @@ -4,6 +4,7 @@ #include "SimCalorimetry/CaloSimAlgos/interface/CaloSimParameters.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloVHitFilter.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloVShape.h" +#include "SimCalorimetry/CaloSimAlgos/interface/CaloVHitCorrection.h" #include "Geometry/CaloGeometry/interface/CaloGenericDetId.h" #include "CLHEP/Random/RandPoissonQ.h" #include "CLHEP/Random/RandGaussQ.h" @@ -12,11 +13,12 @@ #include "FWCore/Utilities/interface/isFinite.h" #include "FWCore/Utilities/interface/Exception.h" -EBHitResponse::EBHitResponse(const CaloVSimParameterMap* parameterMap, - const CaloVShape* shape, - bool apdOnly, - const APDSimParameters* apdPars = nullptr, - const CaloVShape* apdShape = nullptr) +template +EBHitResponseImpl::EBHitResponseImpl(const CaloVSimParameterMap* parameterMap, + const CaloVShape* shape, + bool apdOnly, + const APDSimParameters* apdPars, + const CaloVShape* apdShape) : EcalHitResponse(parameterMap, shape), @@ -51,34 +53,35 @@ EBHitResponse::EBHitResponse(const CaloVSimParameterMap* parameterMap, } } -EBHitResponse::~EBHitResponse() {} +template +EBHitResponseImpl::~EBHitResponseImpl() {} -void EBHitResponse::initialize(CLHEP::HepRandomEngine* engine) { +template +void EBHitResponseImpl::initialize(CLHEP::HepRandomEngine* engine) { m_isInitialized = true; for (unsigned int i(0); i != kNOffsets; ++i) { m_timeOffVec[i] += CLHEP::RandGaussQ::shoot(engine, 0, apdParameters()->timeOffWidth()); } } -const APDSimParameters* EBHitResponse::apdParameters() const { +template +const APDSimParameters* EBHitResponseImpl::apdParameters() const { assert(nullptr != m_apdPars); return m_apdPars; } -const CaloVShape* EBHitResponse::apdShape() const { +template +const CaloVShape* EBHitResponseImpl::apdShape() const { assert(nullptr != m_apdShape); return m_apdShape; } -void EBHitResponse::putAPDSignal(const DetId& detId, double npe, double time) { +template +void EBHitResponseImpl::putAPDSignal(const DetId& detId, double npe, double time) { const CaloSimParameters& parameters(*params(detId)); const double energyFac(1. / parameters.simHitToPhotoelectrons(detId)); - // std::cout<<"******** Input APD Npe="< +void EBHitResponseImpl::setIntercal(const EcalIntercalibConstantsMC* ical) { + m_intercal = ical; +} -void EBHitResponse::findIntercalibConstant(const DetId& detId, double& icalconst) const { +template +void EBHitResponseImpl::findIntercalibConstant(const DetId& detId, double& icalconst) const { EcalIntercalibConstantMC thisconst(1.); if (nullptr == m_intercal) { @@ -148,7 +180,8 @@ void EBHitResponse::findIntercalibConstant(const DetId& detId, double& icalconst icalconst = thisconst; } -void EBHitResponse::initializeHits() { +template +void EBHitResponseImpl::initializeHits() { if (!index().empty()) blankOutUsedSamples(); @@ -160,7 +193,8 @@ void EBHitResponse::initializeHits() { } } -void EBHitResponse::finalizeHits() { +template +void EBHitResponseImpl::finalizeHits() { const unsigned int bSize(EBDetId::kSizeForDenseIndexing); if (apdParameters()->addToBarrel() || m_apdOnly) { for (unsigned int i(0); i != bSize; ++i) { @@ -175,7 +209,8 @@ void EBHitResponse::finalizeHits() { } } -void EBHitResponse::add(const PCaloHit& hit, CLHEP::HepRandomEngine* engine) { +template +void EBHitResponseImpl::add(const PCaloHit& hit, CLHEP::HepRandomEngine* engine) { if (!edm::isNotFinite(hit.time()) && (nullptr == hitFilter() || hitFilter()->accepts(hit))) { int iddepth = (hit.depth() & PCaloHit::kEcalDepthIdMask); if (0 == iddepth) // for now take only nonAPD hits @@ -194,7 +229,8 @@ void EBHitResponse::add(const PCaloHit& hit, CLHEP::HepRandomEngine* engine) { } } -void EBHitResponse::run(MixCollection& hits, CLHEP::HepRandomEngine* engine) { +template +void EBHitResponseImpl::run(MixCollection& hits, CLHEP::HepRandomEngine* engine) { if (!index().empty()) blankOutUsedSamples(); @@ -240,16 +276,37 @@ void EBHitResponse::run(MixCollection& hits, CLHEP::HepRandomEngine* e } } -unsigned int EBHitResponse::samplesSize() const { return m_vSam.size(); } +template +unsigned int EBHitResponseImpl::samplesSize() const { + return m_vSam.size(); +} -unsigned int EBHitResponse::samplesSizeAll() const { return m_vSam.size(); } +template +unsigned int EBHitResponseImpl::samplesSizeAll() const { + return m_vSam.size(); +} -const EcalHitResponse::EcalSamples* EBHitResponse::operator[](unsigned int i) const { return &m_vSam[i]; } +template +const EcalHitResponse::EcalSamples* EBHitResponseImpl::operator[](unsigned int i) const { + return &m_vSam[i]; +} -EcalHitResponse::EcalSamples* EBHitResponse::operator[](unsigned int i) { return &m_vSam[i]; } +template +EcalHitResponse::EcalSamples* EBHitResponseImpl::operator[](unsigned int i) { + return &m_vSam[i]; +} -EcalHitResponse::EcalSamples* EBHitResponse::vSam(unsigned int i) { return &m_vSam[i]; } +template +EcalHitResponse::EcalSamples* EBHitResponseImpl::vSam(unsigned int i) { + return &m_vSam[i]; +} -EcalHitResponse::EcalSamples* EBHitResponse::vSamAll(unsigned int i) { return &m_vSam[i]; } +template +EcalHitResponse::EcalSamples* EBHitResponseImpl::vSamAll(unsigned int i) { + return &m_vSam[i]; +} -const EcalHitResponse::EcalSamples* EBHitResponse::vSamAll(unsigned int i) const { return &m_vSam[i]; } +template +const EcalHitResponse::EcalSamples* EBHitResponseImpl::vSamAll(unsigned int i) const { + return &m_vSam[i]; +} diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalBaseSignalGenerator.h b/SimCalorimetry/EcalSimAlgos/interface/EcalBaseSignalGenerator.h index 19c7f6f3f6c0b..d5c307f3939f5 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalBaseSignalGenerator.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalBaseSignalGenerator.h @@ -3,7 +3,6 @@ #include "SimCalorimetry/CaloSimAlgos/interface/CaloVNoiseSignalGenerator.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" -class EcalElectronicsSim; class EcalBaseSignalGenerator : public CaloVNoiseSignalGenerator { public: diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h b/SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h index ec60ac2f2af2a..6232f4a3fff43 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h @@ -1,6 +1,5 @@ - -#ifndef EcalSimAlgos_EcalCoder_h -#define EcalSimAlgos_EcalCoder_h 1 +#ifndef SimCalorimetry_EcalSimAlgos_EcalCoder_h +#define SimCalorimetry_EcalSimAlgos_EcalCoder_h #include "CalibFormats/CaloObjects/interface/CaloTSamples.h" #include "CondFormats/EcalObjects/interface/EcalPedestals.h" diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h b/SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h index e2239f4da5048..cb13bec15863f 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h @@ -3,7 +3,8 @@ #include "DataFormats/Math/interface/Error.h" #include "CalibFormats/CaloObjects/interface/CaloSamples.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" -typedef math::ErrorD::type EcalCorrMatrix; - +typedef math::ErrorD::type EcalCorrMatrix; +typedef math::ErrorD::type EcalCorrMatrix_Ph2; #endif diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h b/SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h index f5565cc5d9cfd..31aa28a4f04e3 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h @@ -2,6 +2,8 @@ #define EcalSimAlgos_EcalDigitizerTraits_h #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h" #include "SimCalorimetry/EcalSimAlgos/interface/ESElectronicsSimFast.h" #include "SimCalorimetry/EcalSimAlgos/interface/ESElectronicsSim.h" @@ -10,6 +12,7 @@ #include "DataFormats/EcalDigi/interface/EcalDataFrame.h" #include "DataFormats/EcalDigi/interface/EBDataFrame.h" #include "DataFormats/EcalDigi/interface/EEDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" class EcalHitResponse; @@ -20,9 +23,8 @@ class EBDigitizerTraits { /// the dataframes typedef EBDataFrame Digi; /// the electronics simulation - typedef EcalElectronicsSim ElectronicsSim; - typedef CaloTSamples EcalSamples; + typedef EcalElectronicsSim ElectronicsSim; static void fix(Digi& digi, edm::DataFrame df){}; }; @@ -34,9 +36,8 @@ class EEDigitizerTraits { /// the dataframes typedef EEDataFrame Digi; /// the electronics simulation - typedef EcalElectronicsSim ElectronicsSim; - typedef CaloTSamples EcalSamples; + typedef EcalElectronicsSim ElectronicsSim; static void fix(Digi& digi, edm::DataFrame df) {} }; @@ -75,4 +76,17 @@ class ESOldDigitizerTraits { // typedef CaloTSamples EcalSamples ; }; +class EBDigitizerTraits_Ph2 { +public: + /// the digis collection + typedef EBDigiCollectionPh2 DigiCollection; + /// the dataframes + typedef EcalDataFrame_Ph2 Digi; + /// the electronics simulation + typedef CaloTSamples EcalSamples; + typedef EcalElectronicsSim ElectronicsSim; + + static void fix(Digi& digi, edm::DataFrame df){}; +}; + #endif diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h b/SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h index 73f159b2644be..c92221e031c76 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h @@ -1,11 +1,10 @@ #ifndef EcalSimAlgos_EcalElectronicsSim_h -#define EcalSimAlgos_EcalElectronicsSim_h 1 +#define EcalSimAlgos_EcalElectronicsSim_h -#include "CalibFormats/CaloObjects/interface/CaloTSamples.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloVNoiseSignalGenerator.h" +#include "CLHEP/Random/RandGaussQ.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" -class EcalCoder; -class EcalDataFrame; class EcalSimParameterMap; namespace CLHEP { @@ -17,19 +16,22 @@ namespace CLHEP { * */ +template class EcalElectronicsSim { public: - typedef CaloTSamples EcalSamples; - EcalElectronicsSim(const EcalSimParameterMap* parameterMap, - EcalCoder* coder, + CoderType* coder, bool applyConstantTerm, - double rmsConstantTerm); - - ~EcalElectronicsSim(); + double rmsConstantTerm) + : m_simMap(parameterMap), m_theCoder(coder), m_thisCT(rmsConstantTerm), m_applyConstantTerm(applyConstantTerm) {} /// from EcalSamples to EcalDataFrame - void analogToDigital(CLHEP::HepRandomEngine*, EcalSamples& clf, EcalDataFrame& df) const; + + void analogToDigital(CLHEP::HepRandomEngine* engine, SamplesType& clf, DataFrameType& df) const { + // input signal is in pe. Converted in GeV + amplify(clf, engine); + m_theCoder->analogToDigital(engine, clf, df); + } void newEvent() {} @@ -39,7 +41,14 @@ class EcalElectronicsSim { private: /// input signal is in pe. Converted in GeV - void amplify(EcalSamples& clf, CLHEP::HepRandomEngine*) const; + void amplify(SamplesType& clf, CLHEP::HepRandomEngine* engine) const { + const double fac(m_simMap->simParameters(clf.id()).photoelectronsToAnalog()); + if (m_applyConstantTerm) { + clf *= fac * CLHEP::RandGaussQ::shoot(engine, 1.0, m_thisCT); + } else { + clf *= fac; + } + } /// map of parameters @@ -47,7 +56,7 @@ class EcalElectronicsSim { const CaloVNoiseSignalGenerator* theNoiseSignalGenerator; - EcalCoder* m_theCoder; + CoderType* m_theCoder; const double m_thisCT; const bool m_applyConstantTerm; diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalHitResponse.h b/SimCalorimetry/EcalSimAlgos/interface/EcalHitResponse.h index 925080ee2539d..21fcf61525475 100644 --- a/SimCalorimetry/EcalSimAlgos/interface/EcalHitResponse.h +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalHitResponse.h @@ -8,6 +8,7 @@ #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbService.h" #include "DataFormats/Provenance/interface/Timestamp.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" #include #include @@ -33,12 +34,12 @@ class EcalHitResponse { typedef std::unordered_map CalibCache; - enum { BUNCHSPACE = 25 }; - EcalHitResponse(const CaloVSimParameterMap* parameterMap, const CaloVShape* shape); virtual ~EcalHitResponse(); + const float kSamplePeriod = ecalPh1::Samp_Period; + void setBunchRange(int minBunch, int maxBunch); void setGeometry(const CaloSubdetectorGeometry* geometry); @@ -116,7 +117,6 @@ class EcalHitResponse { const CaloVHitFilter* hitFilter() const; -private: const CaloVSimParameterMap* m_parameterMap; const CaloVShape* m_shape; const CaloVHitCorrection* m_hitCorrection; @@ -125,6 +125,7 @@ class EcalHitResponse { const CaloSubdetectorGeometry* m_geometry; const EcalLaserDbService* m_lasercals; +private: int m_minBunch; int m_maxBunch; double m_phaseShift; diff --git a/SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h b/SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h new file mode 100644 index 0000000000000..5aeab7bd3846b --- /dev/null +++ b/SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h @@ -0,0 +1,75 @@ +#ifndef SimCalorimetry_EcalSimAlgos_EcalLiteDTUCoder_h +#define SimCalorimetry_EcalSimAlgos_EcalLiteDTUCoder_h + +#include "CalibFormats/CaloObjects/interface/CaloTSamples.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h" +#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" + +template +class CorrelatedNoisifier; +class EcalLiteDTUSample; +class EcalDataFrame_Ph2; +class DetId; +class EcalLiteDTUPed; + +#include + +namespace CLHEP { + class HepRandomEngine; +} + +class EcalLiteDTUCoder { +public: + typedef CaloTSamples EcalSamples; + + typedef CorrelatedNoisifier Noisifier; + + /// ctor + EcalLiteDTUCoder(bool addNoise, bool PreMix1, Noisifier* ebCorrNoise0, Noisifier* ebCorrNoise1 = nullptr); + + /// dtor + virtual ~EcalLiteDTUCoder(); + + /// can be fetched every event from the EventSetup + void setPedestals(const EcalLiteDTUPedestalsMap* pedestals); + + void setGainRatios(float gainRatios); + + void setFullScaleEnergy(double EBscale); + + void setIntercalibConstants(const EcalIntercalibConstantsMC* ical); + + /// from EcalSamples to EcalDataFrame_Ph2 + virtual void analogToDigital(CLHEP::HepRandomEngine*, const EcalSamples& clf, EcalDataFrame_Ph2& df) const; + +private: + /// limit on the energy scale due to the electronics range + double fullScaleEnergy(const DetId& did) const; + + /// produce the pulse-shape + void encode(const EcalSamples& ecalSamples, EcalDataFrame_Ph2& df, CLHEP::HepRandomEngine*) const; + + void findPedestal(const DetId& detId, int gainId, double& pedestal, double& width) const; + + void findGains(const DetId& detId, float theGains[]) const; + + void findIntercalibConstant(const DetId& detId, double& icalconst) const; + + const EcalLiteDTUPedestalsMap* m_peds; + + float m_gainRatios; // the electronics gains + + const EcalIntercalibConstantsMC* m_intercals; //record specific for simulation of gain variation in MC + + double m_maxEneEB; // max attainable energy in the ecal barrel + + bool m_addNoise; // whether add noise to the pedestals and the gains + bool m_PreMix1; // Follow necessary steps for PreMixing input + + const Noisifier* m_ebCorrNoise[ecalPh2::NGAINS]; +}; + +#endif diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalCorrelatedNoiseMatrix.cc b/SimCalorimetry/EcalSimAlgos/src/EcalCorrelatedNoiseMatrix.cc index 20d9745aacfb3..02f7e1741a3ca 100644 --- a/SimCalorimetry/EcalSimAlgos/src/EcalCorrelatedNoiseMatrix.cc +++ b/SimCalorimetry/EcalSimAlgos/src/EcalCorrelatedNoiseMatrix.cc @@ -2,7 +2,12 @@ #include "SimGeneral/NoiseGenerators/interface/CorrelatedNoisifier.icc" template class CorrelatedNoisifier; +template class CorrelatedNoisifier; template void CorrelatedNoisifier::noisify(CaloSamples&, CLHEP::HepRandomEngine*, const std::vector* rangau) const; + +template void CorrelatedNoisifier::noisify(CaloSamples&, + CLHEP::HepRandomEngine*, + const std::vector* rangau) const; diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalDigitizers.cc b/SimCalorimetry/EcalSimAlgos/src/EcalDigitizers.cc index 4c3dc081c69bc..f8ed56952ed27 100644 --- a/SimCalorimetry/EcalSimAlgos/src/EcalDigitizers.cc +++ b/SimCalorimetry/EcalSimAlgos/src/EcalDigitizers.cc @@ -4,3 +4,5 @@ template class EcalTDigitizer; template class EcalTDigitizer; template class EcalTDigitizer; + +template class EcalTDigitizer; diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalElectronicsSim.cc b/SimCalorimetry/EcalSimAlgos/src/EcalElectronicsSim.cc deleted file mode 100644 index 35e7ec36d9ffa..0000000000000 --- a/SimCalorimetry/EcalSimAlgos/src/EcalElectronicsSim.cc +++ /dev/null @@ -1,37 +0,0 @@ -#include "SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h" -#include "SimCalorimetry/EcalSimAlgos/interface/EcalCoder.h" -#include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" - -#include "CLHEP/Random/RandGaussQ.h" - -#include -#include -#include -#include -#include - -EcalElectronicsSim::EcalElectronicsSim(const EcalSimParameterMap* parameterMap, - EcalCoder* coder, - bool applyConstantTerm, - double rmsConstantTerm) - : m_simMap(parameterMap), m_theCoder(coder), m_thisCT(rmsConstantTerm), m_applyConstantTerm(applyConstantTerm) {} - -EcalElectronicsSim::~EcalElectronicsSim() {} - -void EcalElectronicsSim::analogToDigital(CLHEP::HepRandomEngine* engine, - EcalElectronicsSim::EcalSamples& clf, - EcalDataFrame& df) const { - //PG input signal is in pe. Converted in GeV - amplify(clf, engine); - - m_theCoder->analogToDigital(engine, clf, df); -} - -void EcalElectronicsSim::amplify(EcalElectronicsSim::EcalSamples& clf, CLHEP::HepRandomEngine* engine) const { - const double fac(m_simMap->simParameters(clf.id()).photoelectronsToAnalog()); - if (m_applyConstantTerm) { - clf *= fac * CLHEP::RandGaussQ::shoot(engine, 1.0, m_thisCT); - } else { - clf *= fac; - } -} diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalHitResponse.cc b/SimCalorimetry/EcalSimAlgos/src/EcalHitResponse.cc index b86a7f949a051..02b9e45f8ce34 100644 --- a/SimCalorimetry/EcalSimAlgos/src/EcalHitResponse.cc +++ b/SimCalorimetry/EcalSimAlgos/src/EcalHitResponse.cc @@ -145,7 +145,7 @@ void EcalHitResponse::putAnalogSignal(const PCaloHit& hit, CLHEP::HepRandomEngin const double jitter(time - timeOfFlight(detId)); const double tzero = (shape()->timeToRise() + parameters->timePhase() - jitter - - BUNCHSPACE * (parameters->binOfMaximum() - m_phaseShift)); + kSamplePeriod * (parameters->binOfMaximum() - m_phaseShift)); double binTime(tzero); EcalSamples& result(*findSignal(detId)); @@ -154,7 +154,7 @@ void EcalHitResponse::putAnalogSignal(const PCaloHit& hit, CLHEP::HepRandomEngin for (unsigned int bin(0); bin != rsize; ++bin) { result[bin] += (*shape())(binTime)*signal; - binTime += BUNCHSPACE; + binTime += kSamplePeriod; } } diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc b/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc new file mode 100644 index 0000000000000..0e65a14ef9366 --- /dev/null +++ b/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc @@ -0,0 +1,177 @@ +#include "SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimGeneral/NoiseGenerators/interface/CorrelatedNoisifier.h" +#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" + +#include "CondFormats/EcalObjects/interface/EcalConstants.h" + +#include + +EcalLiteDTUCoder::EcalLiteDTUCoder(bool addNoise, + bool PreMix1, + EcalLiteDTUCoder::Noisifier* ebCorrNoise0, + EcalLiteDTUCoder::Noisifier* ebCorrNoise1) + : m_peds(nullptr), + m_gainRatios(0), + m_intercals(nullptr), + m_maxEneEB(ecalPh2::maxEneEB), // Maximum for CATIA: LSB gain 10: 0.048 MeV + m_addNoise(addNoise), + m_PreMix1(PreMix1) + +{ + m_ebCorrNoise[0] = ebCorrNoise0; + m_ebCorrNoise[1] = ebCorrNoise1; +} + +EcalLiteDTUCoder::~EcalLiteDTUCoder() {} + +void EcalLiteDTUCoder::setFullScaleEnergy(double EBscale) { m_maxEneEB = ecalPh2::maxEneEB; } + +void EcalLiteDTUCoder::setPedestals(const EcalLiteDTUPedestalsMap* pedestals) { m_peds = pedestals; } + +void EcalLiteDTUCoder::setGainRatios(float gainRatios) { m_gainRatios = gainRatios; } + +void EcalLiteDTUCoder::setIntercalibConstants(const EcalIntercalibConstantsMC* ical) { m_intercals = ical; } + +double EcalLiteDTUCoder::fullScaleEnergy(const DetId& detId) const { return m_maxEneEB; } + +void EcalLiteDTUCoder::analogToDigital(CLHEP::HepRandomEngine* engine, + const EcalSamples& clf, + EcalDataFrame_Ph2& df) const { + df.setSize(clf.size()); + encode(clf, df, engine); +} + +void EcalLiteDTUCoder::encode(const EcalSamples& ecalSamples, + EcalDataFrame_Ph2& df, + CLHEP::HepRandomEngine* engine) const { + const int nSamples(ecalSamples.size()); + + DetId detId = ecalSamples.id(); + double Emax = fullScaleEnergy(detId); + + //N Gains set to 2 in the .h + double pedestals[ecalPh2::NGAINS]; + double widths[ecalPh2::NGAINS]; + double LSB[ecalPh2::NGAINS]; + double trueRMS[ecalPh2::NGAINS]; + int nSaturatedSamples = 0; + double icalconst = 1.; + findIntercalibConstant(detId, icalconst); + + for (unsigned int igain(0); igain < ecalPh2::NGAINS; ++igain) { + // fill in the pedestal and width + findPedestal(detId, igain, pedestals[igain], widths[igain]); + // insert an absolute value in the trueRMS + trueRMS[igain] = std::sqrt(std::abs(widths[igain] * widths[igain] - 1. / 12.)); + + LSB[igain] = Emax / (ecalPh2::MAXADC * ecalPh2::gains[igain]); + } + + CaloSamples noiseframe[ecalPh2::NGAINS] = { + CaloSamples(detId, nSamples), + CaloSamples(detId, nSamples), + }; + + const Noisifier* noisy[ecalPh2::NGAINS] = {m_ebCorrNoise[0], m_ebCorrNoise[1]}; + + if (m_addNoise) { + for (unsigned int ig = 0; ig < ecalPh2::NGAINS; ++ig) { + noisy[ig]->noisify(noiseframe[ig], engine); + } + } + + std::vector> adctrace(nSamples); + int firstSaturatedSample[ecalPh2::NGAINS] = {0, 0}; + + for (int i(0); i != nSamples; ++i) + adctrace[i].resize(ecalPh2::NGAINS); + + for (unsigned int igain = 0; igain < ecalPh2::NGAINS; ++igain) { + for (int i(0); i != nSamples; ++i) { + adctrace[i][igain] = -1; + } + } + + // fill ADC trace in gain 0 (x10) and gain 1 (x1) + for (unsigned int igain = 0; igain < ecalPh2::NGAINS; ++igain) { + for (int i(0); i != nSamples; ++i) { + double asignal = 0; + if (!m_PreMix1) { + asignal = pedestals[igain] + ecalSamples[i] / (LSB[igain] * icalconst) + trueRMS[igain] * noiseframe[igain][i]; + //Analog signal value for each sample in ADC. + //It is corrected by the intercalibration constants + + } else { + // no noise nor pedestal when premixing + asignal = ecalSamples[i] / (LSB[igain] * icalconst); + } + int isignal = asignal; + + unsigned int adc = asignal - (double)isignal < 0.5 ? isignal : isignal + 1; + // gain 0 (x10) channel is saturated, readout will use gain 1 (x10), but I count the number of saturated samples + if (adc > ecalPh2::MAXADC) { + adc = ecalPh2::MAXADC; + if (nSaturatedSamples == 0) + firstSaturatedSample[igain] = i; + nSaturatedSamples++; + } + adctrace[i][igain] = adc; + } + if (nSaturatedSamples == 0) { + break; // gain 0 (x10) is not saturated, so don't bother with gain 1 + } + } // for igain + + int igain = 0; + + //Limits of gain 1: + //The Lite DTU sends 5 samples before the saturating one, and 10 after with gain 1. + //we put the maximum in bin 5, but could happen that the system saturates before. + + int previousSaturatedSamples = 5; + int nextSaturatedSamples = 10; + int startingLowerGainSample = 0; + int endingLowerGainSample = (firstSaturatedSample[0] + nextSaturatedSamples + (nSaturatedSamples)); + + if (nSaturatedSamples != 0 and (firstSaturatedSample[0] - previousSaturatedSamples) < 0) { + startingLowerGainSample = 0; + } else { + startingLowerGainSample = (firstSaturatedSample[0] - previousSaturatedSamples); + } + + //Setting values to the samples: + for (int j = 0; j < nSamples; ++j) { + if (nSaturatedSamples != 0 and j >= startingLowerGainSample and j < endingLowerGainSample) { + igain = 1; + } else { + igain = 0; + } + df.setSample(j, EcalLiteDTUSample(adctrace[j][igain], igain)); + if (nSaturatedSamples != 0) { + } + } +} + +void EcalLiteDTUCoder::findPedestal(const DetId& detId, int gainId, double& ped, double& width) const { + EcalLiteDTUPedestalsMap::const_iterator itped = m_peds->getMap().find(detId); + ped = (*itped).mean(gainId); + width = (*itped).rms(gainId); + + LogDebug("EcalLiteDTUCoder") << "Pedestals for " << detId.rawId() << " gain range " << gainId << " : \n" + << "Mean = " << ped << " rms = " << width; +} + +void EcalLiteDTUCoder::findIntercalibConstant(const DetId& detId, double& icalconst) const { + EcalIntercalibConstantMC thisconst = 1.; + // find intercalib constant for this xtal + const EcalIntercalibConstantMCMap& icalMap = m_intercals->getMap(); + EcalIntercalibConstantMCMap::const_iterator icalit = icalMap.find(detId); + + thisconst = (*icalit); + if (icalconst == 0.) + thisconst = 1.; + + icalconst = thisconst; +} diff --git a/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h index 133852c53dfa4..e54f8332d7570 100644 --- a/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h +++ b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h @@ -2,10 +2,12 @@ #define SimCalorimetry_EcalSimProducers_EcalDigiProducer_h #include "DataFormats/Math/interface/Error.h" +#include "CalibFormats/CaloObjects/interface/CaloTSamples.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "SimCalorimetry/EcalSimAlgos/interface/APDShape.h" #include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h" #include "SimCalorimetry/EcalSimAlgos/interface/EEShape.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h" #include "SimCalorimetry/EcalSimAlgos/interface/ESElectronicsSim.h" #include "SimCalorimetry/EcalSimAlgos/interface/ESShape.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h" @@ -16,6 +18,7 @@ #include "SimCalorimetry/EcalSimAlgos/interface/EcalTDigitizer.h" #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h" #include typedef EcalTDigitizer EBDigitizer; @@ -25,13 +28,11 @@ typedef CaloTDigitizer ESOldDigitizer; class ESDigitizer; class APDSimParameters; -class EBHitResponse; class EEHitResponse; class ESHitResponse; class CaloHitResponse; class EcalSimParameterMap; class EcalCoder; -class EcalElectronicsSim; class ESElectronicsSim; class ESElectronicsSimFast; class EcalBaseSignalGenerator; @@ -141,10 +142,13 @@ class EcalDigiProducer : public DigiAccumulatorMixMod { std::unique_ptr m_BarrelDigitizer; std::unique_ptr m_EndcapDigitizer; - std::unique_ptr m_ElectronicsSim; + typedef CaloTSamples EcalSamples; + + typedef EcalElectronicsSim EcalElectronicsSim_Ph1; + std::unique_ptr m_ElectronicsSim; std::unique_ptr m_Coder; - std::unique_ptr m_APDElectronicsSim; + std::unique_ptr m_APDElectronicsSim; std::unique_ptr m_APDCoder; const CaloGeometry *m_Geometry; diff --git a/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h new file mode 100644 index 0000000000000..e62df03b61a31 --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h @@ -0,0 +1,121 @@ +#ifndef SimCalorimetry_EcalSimProducers_EcalDigiProducer_Ph2_h +#define SimCalorimetry_EcalSimProducers_EcalDigiProducer_Ph2_h + +#include "SimCalorimetry/EcalSimAlgos/interface/APDShape.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h" +#include "DataFormats/Math/interface/Error.h" +#include "FWCore/Framework/interface/ProducesCollector.h" +#include "SimGeneral/NoiseGenerators/interface/CorrelatedNoisifier.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h" +#include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalTDigitizer.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h" +#include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h" +#include + +class APDSimParameters; +class CaloHitResponse; +class EcalSimParameterMap; +class EcalLiteDTUCoder; + +class EcalBaseSignalGenerator; +class CaloGeometry; +class EBDigiCollectionPh2; +class PileUpEventPrincipal; + +namespace edm { + class ConsumesCollector; + class ProducerBase; + class Event; + class EventSetup; + template + class Handle; + class ParameterSet; + class StreamID; +} // namespace edm + +namespace CLHEP { + class HepRandomEngine; +} + +class EcalDigiProducer_Ph2 : public DigiAccumulatorMixMod { +public: + typedef EcalTDigitizer EBDigitizer_Ph2; + typedef EBDigitizerTraits_Ph2::ElectronicsSim EcalElectronicsSim_Ph2; + + EcalDigiProducer_Ph2(const edm::ParameterSet& params, + edm::ProducesCollector producesCollector, + edm::ConsumesCollector& iC); + EcalDigiProducer_Ph2(const edm::ParameterSet& params, edm::ConsumesCollector& iC); + ~EcalDigiProducer_Ph2() override; + + void initializeEvent(edm::Event const& e, edm::EventSetup const& c) override; + void accumulate(edm::Event const& e, edm::EventSetup const& c) override; + void accumulate(PileUpEventPrincipal const& e, edm::EventSetup const& c, edm::StreamID const&) override; + void finalizeEvent(edm::Event& e, edm::EventSetup const& c) override; + void beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& setup) override; + void beginRun(edm::Run const& run, edm::EventSetup const& setup) override; + + void setEBNoiseSignalGenerator(EcalBaseSignalGenerator* noiseGenerator); + +private: + virtual void cacheEBDigis(const EBDigiCollectionPh2* ebDigiPtr) const {} + + typedef edm::Handle > HitsHandle; + void accumulateCaloHits(HitsHandle const& ebHandle, int bunchCrossing); + + void checkGeometry(const edm::EventSetup& eventSetup); + + void updateGeometry(); + + void checkCalibrations(const edm::Event& event, const edm::EventSetup& eventSetup); + + APDShape m_APDShape; + EBShape m_EBShape; + + const std::string m_EBdigiCollection; + const std::string m_hitsProducerTag; + + bool m_useLCcorrection; + + const bool m_apdSeparateDigi; + + const double m_EBs25notCont; + + const unsigned int m_readoutFrameSize; + +protected: + std::unique_ptr m_ParameterMap; + +private: + const std::string m_apdDigiTag; + std::unique_ptr m_apdParameters; + + std::unique_ptr m_APDResponse; + +protected: + std::unique_ptr m_EBResponse; + +private: + const bool m_PreMix1; + const bool m_PreMix2; + + std::unique_ptr m_APDDigitizer; + std::unique_ptr m_BarrelDigitizer; + + std::unique_ptr m_ElectronicsSim; + std::unique_ptr m_Coder; + + typedef CaloTSamples EcalSamples_Ph2; + std::unique_ptr > m_APDElectronicsSim; + std::unique_ptr m_APDCoder; + + const CaloGeometry* m_Geometry; + + std::array >, 2> m_EBCorrNoise; + + CLHEP::HepRandomEngine* randomEngine_ = nullptr; +}; + +#endif diff --git a/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h b/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h index f54cc7106b631..5bd90ff357fed 100644 --- a/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h +++ b/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h @@ -40,26 +40,21 @@ class EcalTimeDigiProducer : public DigiAccumulatorMixMod { private: typedef edm::Handle> HitsHandle; - void accumulateCaloHits(HitsHandle const &ebHandle, HitsHandle const &eeHandle, int bunchCrossing); + void accumulateCaloHits(HitsHandle const &ebHandle, int bunchCrossing); void checkGeometry(const edm::EventSetup &eventSetup); void updateGeometry(); const std::string m_EBdigiCollection; - const std::string m_EEdigiCollection; const edm::InputTag m_hitsProducerTagEB; - const edm::InputTag m_hitsProducerTagEE; const edm::EDGetTokenT> m_hitsProducerTokenEB; - const edm::EDGetTokenT> m_hitsProducerTokenEE; private: int m_timeLayerEB; - int m_timeLayerEE; const CaloGeometry *m_Geometry; EcalTimeMapDigitizer *m_BarrelDigitizer; - EcalTimeMapDigitizer *m_EndcapDigitizer; }; #endif diff --git a/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc b/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc new file mode 100644 index 0000000000000..72376343c11cf --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/plugins/EcalLiteDTUPedestalsESProducer.cc @@ -0,0 +1,63 @@ +#include +#include +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESProductHost.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/EcalObjects/src/classes.h" +#include "CondFormats/EcalObjects/interface/EcalConstants.h" + +// +// class declaration +// + +class EcalLiteDTUPedestalsESProducer : public edm::ESProducer { +public: + EcalLiteDTUPedestalsESProducer(const edm::ParameterSet& p); + + typedef std::unique_ptr ReturnType; + + ReturnType produce(const EcalLiteDTUPedestalsRcd& iRecord); + +private: + double meanPedestalsGain10_; + double rmsPedestalsGain10_; + double meanPedestalsGain1_; + double rmsPedestalsGain1_; +}; + +using namespace edm; + +EcalLiteDTUPedestalsESProducer::EcalLiteDTUPedestalsESProducer(const edm::ParameterSet& p) { + std::string myname = p.getParameter("ComponentName"); + meanPedestalsGain10_ = p.getParameter("MeanPedestalsGain10"); + rmsPedestalsGain10_ = p.getParameter("RMSPedestalsGain10"); + meanPedestalsGain1_ = p.getParameter("MeanPedestalsGain1"); + rmsPedestalsGain1_ = p.getParameter("RMSPedestalsGain1"); + setWhatProduced(this); +} +//// +EcalLiteDTUPedestalsESProducer::ReturnType EcalLiteDTUPedestalsESProducer::produce( + const EcalLiteDTUPedestalsRcd& iRecord) { + auto prod = std::make_unique(); + + for (unsigned int iChannel = 0; iChannel < ecalPh2::kEBChannels; iChannel++) { + EBDetId myEBDetId = EBDetId::unhashIndex(iChannel); + EcalLiteDTUPedestals ped; + ped.setMean(0, meanPedestalsGain10_); + ped.setRMS(0, rmsPedestalsGain10_); + + ped.setMean(1, meanPedestalsGain1_); + ped.setRMS(1, rmsPedestalsGain1_); + + prod->insert(std::make_pair(myEBDetId, ped)); + } + + return prod; +} + +//Define this as a plug-in +DEFINE_FWK_EVENTSETUP_MODULE(EcalLiteDTUPedestalsESProducer); diff --git a/SimCalorimetry/EcalSimProducers/plugins/SealModule.cc b/SimCalorimetry/EcalSimProducers/plugins/SealModule.cc index 43a5ed18e678d..8dd6a263419bd 100644 --- a/SimCalorimetry/EcalSimProducers/plugins/SealModule.cc +++ b/SimCalorimetry/EcalSimProducers/plugins/SealModule.cc @@ -1,7 +1,8 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h" +#include "SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h" #include "SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h" #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixModFactory.h" - DEFINE_DIGI_ACCUMULATOR(EcalDigiProducer); +DEFINE_DIGI_ACCUMULATOR(EcalDigiProducer_Ph2); DEFINE_DIGI_ACCUMULATOR(EcalTimeDigiProducer); diff --git a/SimCalorimetry/EcalSimProducers/python/ecalDigiParameters_Ph2_cff.py b/SimCalorimetry/EcalSimProducers/python/ecalDigiParameters_Ph2_cff.py new file mode 100644 index 0000000000000..d692fd21de0e9 --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/python/ecalDigiParameters_Ph2_cff.py @@ -0,0 +1,23 @@ +import FWCore.ParameterSet.Config as cms + +ecal_digi_parameters = cms.PSet( + EBdigiCollectionPh2 = cms.string(''), + UseLCcorrection = cms.untracked.bool(True), + + #NOTE: Phase2 noise correlation matrices with fake numbers to simply test the code flow. + + EBCorrNoiseMatrixG10Ph2 = cms.vdouble ( + 1.00000, 0.71073, 0.55721, 0.46089, 0.40449, + 0.35931, 0.33924, 0.32439, 0.31581, 0.30481, 0.40449,0.40449,0.40449,0.40449,0.40449,0.40449) , + + EBCorrNoiseMatrixG01Ph2 = cms.vdouble ( + 1.00000, 0.73354, 0.64442, 0.58851, 0.55425, + 0.53082, 0.51916, 0.51097, 0.50732, 0.50409, 0.40449,0.40449,0.40449,0.40449,0.40449,0.40449) , + + EcalPreMixStage1 = cms.bool(False), + EcalPreMixStage2 = cms.bool(False) + +) + +from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 +premix_stage1.toModify(ecal_digi_parameters, EcalPreMixStage1 = True) diff --git a/SimCalorimetry/EcalSimProducers/python/ecalElectronicsSim_Ph2_cff.py b/SimCalorimetry/EcalSimProducers/python/ecalElectronicsSim_Ph2_cff.py new file mode 100644 index 0000000000000..be96c1118914f --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/python/ecalElectronicsSim_Ph2_cff.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +ecal_electronics_sim = cms.PSet( + doENoise = cms.bool(True), + ConstantTerm = cms.double(0.003), + applyConstantTerm = cms.bool(True) +) + +from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 +premix_stage1.toModify(ecal_electronics_sim, + doENoise = False, + applyConstantTerm = False, +) diff --git a/SimCalorimetry/EcalSimProducers/python/ecalSimParameterMap_cff.py b/SimCalorimetry/EcalSimProducers/python/ecalSimParameterMap_cff.py index e265e6ea80c6c..e7aec76c9163a 100644 --- a/SimCalorimetry/EcalSimProducers/python/ecalSimParameterMap_cff.py +++ b/SimCalorimetry/EcalSimProducers/python/ecalSimParameterMap_cff.py @@ -2,7 +2,6 @@ ecal_sim_parameter_map = cms.PSet( photoelectronsToAnalogEndcap = cms.double(0.000555555), - readoutFrameSize = cms.int32(10), binOfMaximum = cms.int32(6), simHitToPhotoelectronsEndcap = cms.double(1800.0), samplingFactor = cms.double(1.0), @@ -10,7 +9,16 @@ simHitToPhotoelectronsBarrel = cms.double(2250.0), syncPhase = cms.bool(True), doPhotostatistics = cms.bool(True), - photoelectronsToAnalogBarrel = cms.double(0.000444444), - timeDependent = cms.bool(False) + photoelectronsToAnalogBarrel = cms.double(0.000444444) +) + +ecal_sim_parameter_map_ph2 = cms.PSet( + binOfMaximum = cms.int32(6), + samplingFactor = cms.double(1.0), + timePhase = cms.double(0.0), + simHitToPhotoelectronsBarrel = cms.double(2250.0), + syncPhase = cms.bool(True), + doPhotostatistics = cms.bool(True), + photoelectronsToAnalogBarrel = cms.double(0.000444444) ) diff --git a/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py b/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py new file mode 100644 index 0000000000000..83f9d520655fe --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +EcalCATIAGainRatiosRcd = cms.ESSource("EmptyESSource", + recordName = cms.string("EcalCATIAGainRatiosRcd"), + firstValid = cms.vuint32(1), + iovIsRunNotTime = cms.bool(True) + ) + +EcalCATIAGainRatios = cms.ESProducer("EcalCATIAGainRatiosESProducer", + ComponentName = cms.string('EcalCatiaGainProducer'), + CATIAGainRatio = cms.double(10.)) + diff --git a/SimCalorimetry/EcalSimProducers/python/esEcalLiteDTUPedestalsProducer_cfi.py b/SimCalorimetry/EcalSimProducers/python/esEcalLiteDTUPedestalsProducer_cfi.py new file mode 100644 index 0000000000000..e34957bb7baac --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/python/esEcalLiteDTUPedestalsProducer_cfi.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +EcalLiteDTUPedestalsRcd = cms.ESSource("EmptyESSource", + recordName = cms.string("EcalLiteDTUPedestalsRcd"), + firstValid = cms.vuint32(1), + iovIsRunNotTime = cms.bool(True) + ) + +EcalLiteDTUPedestals = cms.ESProducer( + "EcalLiteDTUPedestalsESProducer", + ComponentName = cms.string('EcalLiteDTUPedestalProducer'), + MeanPedestalsGain10 = cms.double(12), + RMSPedestalsGain10 = cms.double(2.5), + MeanPedestalsGain1 = cms.double(12.), + RMSPedestalsGain1 = cms.double(2.) +) diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc index 250a823c52e02..6ba2c8e9e87f2 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc @@ -81,7 +81,7 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume m_EBs25notCont(params.getParameter("EBs25notContainment")), m_EEs25notCont(params.getParameter("EEs25notContainment")), - m_readoutFrameSize(params.getParameter("readoutFrameSize")), + m_readoutFrameSize(ecalPh1::sampleSize), m_ParameterMap(new EcalSimParameterMap(params.getParameter("simHitToPhotoelectronsBarrel"), params.getParameter("simHitToPhotoelectronsEndcap"), params.getParameter("photoelectronsToAnalogBarrel"), @@ -237,7 +237,7 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume m_EECorrNoise[2].get())); m_ElectronicsSim.reset( - new EcalElectronicsSim(m_ParameterMap.get(), m_Coder.get(), applyConstantTerm, rmsConstantTerm)); + new EcalElectronicsSim_Ph1(m_ParameterMap.get(), m_Coder.get(), applyConstantTerm, rmsConstantTerm)); if (m_apdSeparateDigi) { m_APDCoder.reset(new EcalCoder(false, @@ -250,7 +250,7 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume m_EECorrNoise[2].get())); m_APDElectronicsSim.reset( - new EcalElectronicsSim(m_ParameterMap.get(), m_APDCoder.get(), applyConstantTerm, rmsConstantTerm)); + new EcalElectronicsSim_Ph1(m_ParameterMap.get(), m_APDCoder.get(), applyConstantTerm, rmsConstantTerm)); m_APDDigitizer.reset(new EBDigitizer(m_APDResponse.get(), m_APDElectronicsSim.get(), false)); } diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc new file mode 100644 index 0000000000000..7bb6f28db429a --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc @@ -0,0 +1,338 @@ +#include "FWCore/Framework/interface/Event.h" +#include "SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer_Ph2.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h" +#include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" +#include "SimCalorimetry/EcalSimAlgos/interface/APDSimParameters.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "SimCalorimetry/EcalSimAlgos/interface/EcalLiteDTUCoder.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "CalibFormats/CaloObjects/interface/CaloSamples.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ProducerBase.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/RandomNumberGenerator.h" +#include "FWCore/Utilities/interface/StreamID.h" +#include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" +#include "SimDataFormats/CaloHit/interface/PCaloHit.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h" +#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsMCRcd.h" +#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbService.h" +#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h" +#include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" +#include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" + +#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" +#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" +//*****************************************// +//Ecal Digi Producer for PhaseII data format +//Removed EE and ES +//Moved to EBDigiCollectionPh2 +//Moved to 2 Gains instead of 3, and from 10 to 16 ecal digi samples +//This producer calls the EcalLiteDTUCoder, the PhaseII noise matrices and the EcalLiteDTUPedestals +//*****************************************// +EcalDigiProducer_Ph2::EcalDigiProducer_Ph2(const edm::ParameterSet& params, + edm::ProducesCollector producesCollector, + edm::ConsumesCollector& iC) + : EcalDigiProducer_Ph2(params, iC) { + if (m_apdSeparateDigi) + producesCollector.produces(m_apdDigiTag); + + producesCollector.produces(m_EBdigiCollection); +} + +// version for Pre-Mixing, for use outside of MixingModule +EcalDigiProducer_Ph2::EcalDigiProducer_Ph2(const edm::ParameterSet& params, edm::ConsumesCollector& iC) + : DigiAccumulatorMixMod(), + m_APDShape(true), + m_EBShape(true), + + m_EBdigiCollection(params.getParameter("EBdigiCollectionPh2")), + + m_hitsProducerTag(params.getParameter("hitsProducer")), + m_useLCcorrection(params.getUntrackedParameter("UseLCcorrection")), + m_apdSeparateDigi(params.getParameter("apdSeparateDigi")), + + m_EBs25notCont(params.getParameter("EBs25notContainment")), + + m_readoutFrameSize(ecalPh2::sampleSize), + + m_ParameterMap(std::make_unique(params.getParameter("simHitToPhotoelectronsBarrel"), + 0, // endcap parameters not needed + params.getParameter("photoelectronsToAnalogBarrel"), + 0, + params.getParameter("samplingFactor"), + params.getParameter("timePhase"), + m_readoutFrameSize, + params.getParameter("binOfMaximum"), + params.getParameter("doPhotostatistics"), + params.getParameter("syncPhase"))), + + m_apdDigiTag(params.getParameter("apdDigiTag")), + m_apdParameters(std::make_unique(params.getParameter("apdAddToBarrel"), + m_apdSeparateDigi, + params.getParameter("apdSimToPELow"), + params.getParameter("apdSimToPEHigh"), + params.getParameter("apdTimeOffset"), + params.getParameter("apdTimeOffWidth"), + params.getParameter("apdDoPEStats"), + m_apdDigiTag, + params.getParameter>("apdNonlParms"))), + + m_APDResponse(!m_apdSeparateDigi + ? nullptr + : std::make_unique( + m_ParameterMap.get(), &m_EBShape, true, m_apdParameters.get(), &m_APDShape)), + + m_EBResponse(std::make_unique(m_ParameterMap.get(), + &m_EBShape, + false, // barrel + m_apdParameters.get(), + &m_APDShape)), + + m_PreMix1(params.getParameter("EcalPreMixStage1")), + m_PreMix2(params.getParameter("EcalPreMixStage2")), + + m_APDDigitizer(nullptr), + m_BarrelDigitizer(nullptr), + m_ElectronicsSim(nullptr), + m_Coder(nullptr), + m_APDElectronicsSim(nullptr), + m_APDCoder(nullptr), + m_Geometry(nullptr), + m_EBCorrNoise({{nullptr, nullptr}}) + +{ + iC.consumes>(edm::InputTag(m_hitsProducerTag, "EcalHitsEB")); + + const std::vector ebCorMatG10Ph2 = params.getParameter>("EBCorrNoiseMatrixG10Ph2"); + const std::vector ebCorMatG01Ph2 = params.getParameter>("EBCorrNoiseMatrixG01Ph2"); + + const bool applyConstantTerm = params.getParameter("applyConstantTerm"); + const double rmsConstantTerm = params.getParameter("ConstantTerm"); + + const bool addNoise = params.getParameter("doENoise"); + const bool cosmicsPhase = params.getParameter("cosmicsPhase"); + const double cosmicsShift = params.getParameter("cosmicsShift"); + + // further phase for cosmics studies + if (cosmicsPhase) { + m_EBResponse->setPhaseShift(1. + cosmicsShift); + } + + EcalCorrMatrix_Ph2 ebMatrix[2]; + const double errorCorrelation = 1.e-7; + assert(ebCorMatG10Ph2.size() == m_readoutFrameSize); + assert(ebCorMatG01Ph2.size() == m_readoutFrameSize); + + assert(errorCorrelation > std::abs(ebCorMatG10Ph2[0] - 1.0)); + assert(errorCorrelation > std::abs(ebCorMatG01Ph2[0] - 1.0)); + + for (unsigned int row(0); row != m_readoutFrameSize; ++row) { + assert(0 == row || 1. >= ebCorMatG10Ph2[row]); + assert(0 == row || 1. >= ebCorMatG01Ph2[row]); + + for (unsigned int column(0); column <= row; ++column) { + const unsigned int index(row - column); + ebMatrix[0](row, column) = ebCorMatG10Ph2[index]; + ebMatrix[1](row, column) = ebCorMatG01Ph2[index]; + } + } + m_EBCorrNoise[0] = std::make_unique>(ebMatrix[0]); + m_EBCorrNoise[1] = std::make_unique>(ebMatrix[1]); + m_Coder = std::make_unique(addNoise, m_PreMix1, m_EBCorrNoise[0].get(), m_EBCorrNoise[1].get()); + m_ElectronicsSim = + std::make_unique(m_ParameterMap.get(), m_Coder.get(), applyConstantTerm, rmsConstantTerm); + + if (m_apdSeparateDigi) { + m_APDCoder = std::make_unique(false, m_PreMix1, m_EBCorrNoise[0].get(), m_EBCorrNoise[1].get()); + + m_APDElectronicsSim = std::make_unique( + m_ParameterMap.get(), m_APDCoder.get(), applyConstantTerm, rmsConstantTerm); + + m_APDDigitizer = std::make_unique(m_APDResponse.get(), m_APDElectronicsSim.get(), false); + } + + m_BarrelDigitizer = std::make_unique(m_EBResponse.get(), m_ElectronicsSim.get(), addNoise); +} + +EcalDigiProducer_Ph2::~EcalDigiProducer_Ph2() {} + +void EcalDigiProducer_Ph2::initializeEvent(edm::Event const& event, edm::EventSetup const& eventSetup) { + edm::Service rng; + randomEngine_ = &rng->getEngine(event.streamID()); + + checkGeometry(eventSetup); + checkCalibrations(event, eventSetup); + + m_BarrelDigitizer->initializeHits(); + if (m_apdSeparateDigi) { + m_APDDigitizer->initializeHits(); + } +} + +void EcalDigiProducer_Ph2::accumulateCaloHits(HitsHandle const& ebHandle, int bunchCrossing) { + if (ebHandle.isValid()) { + m_BarrelDigitizer->add(*ebHandle.product(), bunchCrossing, randomEngine_); + + if (m_apdSeparateDigi) { + m_APDDigitizer->add(*ebHandle.product(), bunchCrossing, randomEngine_); + } + } +} + +void EcalDigiProducer_Ph2::accumulate(edm::Event const& e, edm::EventSetup const& eventSetup) { + // Step A: Get Inputs + edm::Handle> ebHandle; + + m_EBShape.setEventSetup(eventSetup); // need to set the eventSetup here, otherwise pre-mixing module will not wrk + m_APDShape.setEventSetup(eventSetup); // + edm::InputTag ebTag(m_hitsProducerTag, "EcalHitsEB"); + e.getByLabel(ebTag, ebHandle); + + accumulateCaloHits(ebHandle, 0); +} + +void EcalDigiProducer_Ph2::accumulate(PileUpEventPrincipal const& e, + edm::EventSetup const& eventSetup, + edm::StreamID const& streamID) { + // Step A: Get Inputs + edm::Handle> ebHandle; + + edm::InputTag ebTag(m_hitsProducerTag, "EcalHitsEB"); + e.getByLabel(ebTag, ebHandle); + + accumulateCaloHits(ebHandle, e.bunchCrossing()); +} + +void EcalDigiProducer_Ph2::finalizeEvent(edm::Event& event, edm::EventSetup const& eventSetup) { + // Step B: Create empty output + std::unique_ptr apdResult(nullptr); + std::unique_ptr barrelResult = std::make_unique(); + if (m_apdSeparateDigi) { + apdResult = std::make_unique(); + } + // run the algorithm + + m_BarrelDigitizer->run(*barrelResult, randomEngine_); + cacheEBDigis(&*barrelResult); + + edm::LogInfo("DigiInfo") << "EB Digis: " << barrelResult->size(); + + if (m_apdSeparateDigi) { + m_APDDigitizer->run(*apdResult, randomEngine_); + edm::LogInfo("DigiInfo") << "APD Digis: " << apdResult->size(); + } + + // Step D: Put outputs into event + + event.put(std::move(barrelResult), m_EBdigiCollection); + + randomEngine_ = nullptr; // to prevent access outside event +} + +void EcalDigiProducer_Ph2::beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& setup) { + edm::Service rng; + if (!rng.isAvailable()) { + throw cms::Exception("Configuration") << "RandomNumberGenerator service is not available.\n" + "You must add the service in the configuration file\n" + "or remove the module that requires it."; + } + CLHEP::HepRandomEngine* engine = &rng->getEngine(lumi.index()); + + if (nullptr != m_APDResponse) + m_APDResponse->initialize(engine); + m_EBResponse->initialize(engine); +} + +void EcalDigiProducer_Ph2::checkCalibrations(const edm::Event& event, const edm::EventSetup& eventSetup) { + // Pedestals from event setup + + edm::ESHandle dbPed; + eventSetup.get().get(dbPed); + const EcalLiteDTUPedestalsMap* pedestals(dbPed.product()); + + m_Coder->setPedestals(pedestals); + if (nullptr != m_APDCoder) + m_APDCoder->setPedestals(pedestals); + + // Ecal Intercalibration Constants + edm::ESHandle pIcal; + eventSetup.get().get(pIcal); + const EcalIntercalibConstantsMC* ical(pIcal.product()); + + m_Coder->setIntercalibConstants(ical); + if (nullptr != m_APDCoder) + m_APDCoder->setIntercalibConstants(ical); + + m_EBResponse->setIntercal(ical); + if (nullptr != m_APDResponse) + m_APDResponse->setIntercal(ical); + + // Ecal LaserCorrection Constants + edm::ESHandle laser; + eventSetup.get().get(laser); + const edm::TimeValue_t eventTimeValue = event.time().value(); + + m_EBResponse->setEventTime(eventTimeValue); + m_EBResponse->setLaserConstants(laser.product(), m_useLCcorrection); + + // ADC -> GeV Scale + edm::ESHandle pAgc; + eventSetup.get().get(pAgc); + const EcalADCToGeVConstant* agc = pAgc.product(); + + m_Coder->setGainRatios(ecalPh2::gains[0] / ecalPh2::gains[1]); + if (nullptr != m_APDCoder) + m_APDCoder->setGainRatios(ecalPh2::gains[0] / ecalPh2::gains[1]); + + const double EBscale((agc->getEBValue()) * ecalPh2::gains[1] * (ecalPh2::MAXADC)*m_EBs25notCont); + + LogDebug("EcalDigi") << " GeV/ADC = " << agc->getEBValue() << "\n" + << " notCont = " << m_EBs25notCont << "\n" + << " saturation for EB = " << EBscale << ", " << m_EBs25notCont; + + m_Coder->setFullScaleEnergy(EBscale); + if (nullptr != m_APDCoder) + m_APDCoder->setFullScaleEnergy(EBscale); +} + +void EcalDigiProducer_Ph2::checkGeometry(const edm::EventSetup& eventSetup) { + // TODO find a way to avoid doing this every event + edm::ESHandle hGeometry; + eventSetup.get().get(hGeometry); + + const CaloGeometry* pGeometry = &*hGeometry; + + if (pGeometry != m_Geometry) { + m_Geometry = pGeometry; + updateGeometry(); + } +} + +void EcalDigiProducer_Ph2::updateGeometry() { + if (nullptr != m_APDResponse) + m_APDResponse->setGeometry(m_Geometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)); + m_EBResponse->setGeometry(m_Geometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)); +} + +void EcalDigiProducer_Ph2::setEBNoiseSignalGenerator(EcalBaseSignalGenerator* noiseGenerator) { + m_BarrelDigitizer->setNoiseSignalGenerator(noiseGenerator); +} + +void EcalDigiProducer_Ph2::beginRun(edm::Run const& run, edm::EventSetup const& setup) { + m_EBShape.setEventSetup(setup); + m_APDShape.setEventSetup(setup); +} diff --git a/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc b/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc index c6f7f9268bf80..2be3d9f5c9f8f 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc @@ -1,17 +1,12 @@ #include "FWCore/Framework/interface/Event.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalTimeMapDigitizer.h" #include "SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h" - #include "CalibFormats/CaloObjects/interface/CaloSamples.h" - #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" - #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ESHandle.h" - #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -25,27 +20,20 @@ EcalTimeDigiProducer::EcalTimeDigiProducer(const edm::ParameterSet ¶ms, edm::ConsumesCollector &sumes) : DigiAccumulatorMixMod(), m_EBdigiCollection(params.getParameter("EBtimeDigiCollection")), - m_EEdigiCollection(params.getParameter("EEtimeDigiCollection")), m_hitsProducerTagEB(params.getParameter("hitsProducerEB")), - m_hitsProducerTagEE(params.getParameter("hitsProducerEE")), m_hitsProducerTokenEB(sumes.consumes>(m_hitsProducerTagEB)), - m_hitsProducerTokenEE(sumes.consumes>(m_hitsProducerTagEE)), m_timeLayerEB(params.getParameter("timeLayerBarrel")), - m_timeLayerEE(params.getParameter("timeLayerEndcap")), m_Geometry(nullptr) { producesCollector.produces(m_EBdigiCollection); - producesCollector.produces(m_EEdigiCollection); m_BarrelDigitizer = new EcalTimeMapDigitizer(EcalBarrel); - m_EndcapDigitizer = new EcalTimeMapDigitizer(EcalEndcap); #ifdef ecal_time_debug - std::cout << "[EcalTimeDigiProducer]::Create EB " << m_EBdigiCollection << " and EE " << m_EEdigiCollection - << " collections and digitizers" << std::endl; + std::cout << "[EcalTimeDigiProducer]::Create EB " << m_EBdigiCollection << " " + << " collection and digitizer" << std::endl; #endif m_BarrelDigitizer->setTimeLayerId(m_timeLayerEB); - m_EndcapDigitizer->setTimeLayerId(m_timeLayerEE); } EcalTimeDigiProducer::~EcalTimeDigiProducer() {} @@ -55,21 +43,14 @@ void EcalTimeDigiProducer::initializeEvent(edm::Event const &event, edm::EventSe // checkCalibrations( event, eventSetup ); // here the methods to clean the maps m_BarrelDigitizer->initializeMap(); - m_EndcapDigitizer->initializeMap(); } -void EcalTimeDigiProducer::accumulateCaloHits(HitsHandle const &ebHandle, - HitsHandle const &eeHandle, - int bunchCrossing) { +void EcalTimeDigiProducer::accumulateCaloHits(HitsHandle const &ebHandle, int bunchCrossing) { // accumulate the simHits and do the averages in a given layer per bunch // crossing if (ebHandle.isValid()) { m_BarrelDigitizer->add(*ebHandle.product(), bunchCrossing); } - - if (eeHandle.isValid()) { - m_EndcapDigitizer->add(*eeHandle.product(), bunchCrossing); - } } void EcalTimeDigiProducer::accumulate(edm::Event const &e, edm::EventSetup const &eventSetup) { @@ -77,14 +58,11 @@ void EcalTimeDigiProducer::accumulate(edm::Event const &e, edm::EventSetup const edm::Handle> ebHandle; e.getByToken(m_hitsProducerTokenEB, ebHandle); - edm::Handle> eeHandle; - e.getByToken(m_hitsProducerTokenEE, eeHandle); - #ifdef ecal_time_debug std::cout << "[EcalTimeDigiProducer]::Accumulate Hits HS event" << std::endl; #endif - accumulateCaloHits(ebHandle, eeHandle, 0); + accumulateCaloHits(ebHandle, 0); } void EcalTimeDigiProducer::accumulate(PileUpEventPrincipal const &e, @@ -93,18 +71,14 @@ void EcalTimeDigiProducer::accumulate(PileUpEventPrincipal const &e, edm::Handle> ebHandle; e.getByLabel(m_hitsProducerTagEB, ebHandle); - edm::Handle> eeHandle; - e.getByLabel(m_hitsProducerTagEE, eeHandle); - #ifdef ecal_time_debug std::cout << "[EcalTimeDigiProducer]::Accumulate Hits for BC " << e.bunchCrossing() << std::endl; #endif - accumulateCaloHits(ebHandle, eeHandle, e.bunchCrossing()); + accumulateCaloHits(ebHandle, e.bunchCrossing()); } void EcalTimeDigiProducer::finalizeEvent(edm::Event &event, edm::EventSetup const &eventSetup) { - std::unique_ptr barrelResult(new EcalTimeDigiCollection()); - std::unique_ptr endcapResult(new EcalTimeDigiCollection()); + std::unique_ptr barrelResult = std::make_unique(); #ifdef ecal_time_debug std::cout << "[EcalTimeDigiProducer]::finalizeEvent" << std::endl; @@ -119,20 +93,11 @@ void EcalTimeDigiProducer::finalizeEvent(edm::Event &event, edm::EventSetup cons edm::LogInfo("TimeDigiInfo") << "EB time Digis: " << barrelResult->size(); - m_EndcapDigitizer->run(*endcapResult); - -#ifdef ecal_time_debug - std::cout << "[EcalTimeDigiProducer]::EE Digi size " << endcapResult->size() << std::endl; -#endif - - edm::LogInfo("TimeDigiInfo") << "EE Digis: " << endcapResult->size(); - #ifdef ecal_time_debug - std::cout << "[EcalTimeDigiProducer]::putting collections into the event " << std::endl; + std::cout << "[EcalTimeDigiProducer]::putting EcalTimeDigiCollection into the event " << std::endl; #endif event.put(std::move(barrelResult), m_EBdigiCollection); - event.put(std::move(endcapResult), m_EEdigiCollection); } void EcalTimeDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { @@ -150,5 +115,4 @@ void EcalTimeDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { void EcalTimeDigiProducer::updateGeometry() { m_BarrelDigitizer->setGeometry(m_Geometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel)); - m_EndcapDigitizer->setGeometry(m_Geometry->getSubdetectorGeometry(DetId::Ecal, EcalEndcap)); } diff --git a/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_Ph1.py b/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_Ph1.py new file mode 100644 index 0000000000000..3328646be4c20 --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_Ph1.py @@ -0,0 +1,168 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: SingleElectronPt10_pythia8_cfi.py -s GEN,SIM,DIGI --conditions auto:mc --datatier GEN-SIM-RAW --eventcontent RECOSIM -n 10 --no_exec --python_filename SingleElectronPt10_cfi_py_GEN_IDEAL.py +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras + +process = cms.Process('DIGI')#,eras.phase2_common) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.Geometry.GeometrySimDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') +) + + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleElectronPt10_pythia8_cfi.py nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RECOSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM-RAW'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('SingleElectronPt10_pythia8_cfi_py_GEN_SIM_DIGI_Pt10_Ph1.root'), +# outputCommands = process.RECOSIMEventContent.outputCommands, + outputCommands = cms.untracked.vstring('keep *', + 'drop *_mix_*_*'), + splitLevel = cms.untracked.int32(1) +) + +#process.RECOSIMoutput.outputCommands.append('keep EBDigiCollection_ecalDigis_*_*') + + + +# Additional output definition + + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:mc', '') + +process.generator = cms.EDFilter("Pythia8PtGun", + PGunParameters = cms.PSet( + AddAntiParticle = cms.bool(True), + MaxEta = cms.double(1.43), + MaxPhi = cms.double(3.14159265359), + #MaxPt = cms.double(300.01), + MaxPt = cms.double(1110.01), + MinEta = cms.double(1.42), + MinPhi = cms.double(-3.14159265359), + #MinPt = cms.double(299.99), + MinPt = cms.double(1109.99), + ParticleID = cms.vint32(11) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single electron pt 10') +) + + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.digitisation_step = cms.Path(process.pdigi) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RECOSIMoutput_step = cms.EndPath(process.RECOSIMoutput) + + + +##CondCore.CondDB.CondDB_cfi +#from CondCore.DBCommon.CondDBSetup_cfi import * +##from CondCore.CondDB.CondDB_cfi import * +#process.ecalConditions = cms.ESSource("PoolDBESSource", CondDBSetup, +# connect = cms.string('frontier://FrontierProd/CMS_COND_31X_ECAL'), +# #connect = cms.string('oracle://cms_orcoff_prep/CMS_COND_ECAL'), +# #authpath = cms.string('/afs/cern.ch/cms/DB/conddb'), +# connect = cms.string('sqlite_file:/afs/cern.ch/user/d/dsoldi/work/CMS/CMSEcal_Phase2_Ultimate/CMSSW_10_6_1/src/SimCalorimetry/EcalSimProducers/test/simPulseShapePhaseII.db'), +# +# toGet = cms.VPSet( # overide Global Tag use EcalTBWeights_EBEE_offline +# cms.PSet( +# record = cms.string('EcalSimPulseShapeRcd') , +# tag = cms.string('EcalSimPulseShape_default_mc') +# ) +# ) +#) +#process.es_prefer_ecalPulseShape = cms.ESPrefer("PoolDBESSource","ecalConditions") +# +#process.EcalCATIAGainRatiosESProducer = cms.ESProducer( +# "EcalCATIAGainRatiosESProducer", +# ComponentName = cms.string('testGainProducer') +#) +# +#process.EcalLiteDTUPedestalsESProducer = cms.ESProducer( +# "EcalLiteDTUPedestalsESProducer", +# ComponentName = cms.string('testPedestalProducer') +#) + +#LOGGER: +process.MessageLogger.cout = cms.untracked.PSet( + threshold = cms.untracked.string("DEBUG"), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), + FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), +) + + +#process.es_prefer_EcalCATIAGainRatioESProducer = cms.ESPrefer("EcalCATIAGainRatioESProducer","EcalCATIAGainRatioESProducer") + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.digitisation_step,process.endjob_step,process.RECOSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path)._seq = process.generator * getattr(process,path)._seq + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion + + + + + + + diff --git a/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_newshape.py b/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_newshape.py new file mode 100644 index 0000000000000..a5a87a3898a60 --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/test/SingleElectron_cfi_py_GEN_IDEAL_withECALDigi_newshape.py @@ -0,0 +1,171 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: SingleElectronPt10_pythia8_cfi.py -s GEN,SIM,DIGI --conditions auto:mc --datatier GEN-SIM-RAW --eventcontent RECOSIM -n 10 --no_exec --python_filename SingleElectronPt10_cfi_py_GEN_IDEAL.py +import FWCore.ParameterSet.Config as cms + +from Configuration.StandardSequences.Eras import eras + +process = cms.Process('DIGI',eras.phase2_common) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('SimCalorimetry.EcalSimProducers.esCATIAGainProducer_cfi') +process.load('SimCalorimetry.EcalSimProducers.esEcalLiteDTUPedestalsProducer_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_Ph2_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.Geometry.GeometrySimDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('Calibration.EcalCalibAlgos.ecalPedestalPCLHarvester_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_Ph2_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(3) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') +) + + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleElectronPt10_pythia8_cfi.py nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RECOSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM-RAW'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('SingleElectronPt10_pythia8_cfi_py_GEN_SIM_DIGI_Pt10.root'), +# outputCommands = process.RECOSIMEventContent.outputCommands, + outputCommands = cms.untracked.vstring('keep *', + 'drop *_mix_*_*'), + splitLevel = cms.untracked.int32(1) +) + +#process.RECOSIMoutput.outputCommands.append('keep EBDigiCollection_ecalDigis_*_*') + + + +# Additional output definition + + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:mc', '') + +process.generator = cms.EDFilter("Pythia8PtGun", + PGunParameters = cms.PSet( + AddAntiParticle = cms.bool(True), + MaxEta = cms.double(1.43), + MaxPhi = cms.double(3.14159265359), + #MaxPt = cms.double(300.01), + MaxPt = cms.double(10.01), + MinEta = cms.double(1.42), + MinPhi = cms.double(-3.14159265359), + #MinPt = cms.double(299.99), + MinPt = cms.double(9.99), + ParticleID = cms.vint32(11) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single electron pt 10') +) + + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.digitisation_step = cms.Path(process.pdigi) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RECOSIMoutput_step = cms.EndPath(process.RECOSIMoutput) + + + +#CondCore.CondDB.CondDB_cfi +from CondCore.DBCommon.CondDBSetup_cfi import * +#from CondCore.CondDB.CondDB_cfi import * +process.ecalConditions = cms.ESSource("PoolDBESSource", CondDBSetup, + #connect = cms.string('frontier://FrontierProd/CMS_COND_31X_ECAL'), + #connect = cms.string('oracle://cms_orcoff_prep/CMS_COND_ECAL'), + #authpath = cms.string('/afs/cern.ch/cms/DB/conddb'), + connect = cms.string('sqlite_file:SimCalorimetry/EcalSimProducers/test/simPulseShapePhaseII.db'), + + toGet = cms.VPSet( # overide Global Tag use EcalTBWeights_EBEE_offline + cms.PSet( + record = cms.string('EcalSimPulseShapeRcd') , + tag = cms.string('EcalSimPulseShape_default_mc') + ) + ) +) +process.es_prefer_ecalPulseShape = cms.ESPrefer("PoolDBESSource","ecalConditions") + +process.EcalCATIAGainRatiosESProducer = cms.ESProducer( + "EcalCATIAGainRatiosESProducer", + ComponentName = cms.string('testGainProducer') +) + +process.EcalLiteDTUPedestalsESProducer = cms.ESProducer( + "EcalLiteDTUPedestalsESProducer", + ComponentName = cms.string('testPedestalProducer') +) + +#LOGGER: +process.MessageLogger.cout = cms.untracked.PSet( + threshold = cms.untracked.string("DEBUG"), + default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), + FwkReport = cms.untracked.PSet( limit = cms.untracked.int32(-1) ), +) + + +#process.es_prefer_EcalCATIAGainRatioESProducer = cms.ESPrefer("EcalCATIAGainRatioESProducer","EcalCATIAGainRatioESProducer") + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.digitisation_step,process.endjob_step,process.RECOSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path)._seq = process.generator * getattr(process,path)._seq + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion + + + + + + + diff --git a/SimCalorimetry/EcalSimProducers/test/testSingleElectronPt1000_pythia8_cfi_GEN_SIM_DIG_Phase2.py b/SimCalorimetry/EcalSimProducers/test/testSingleElectronPt1000_pythia8_cfi_GEN_SIM_DIG_Phase2.py new file mode 100644 index 0000000000000..13673e4606dfb --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/test/testSingleElectronPt1000_pythia8_cfi_GEN_SIM_DIG_Phase2.py @@ -0,0 +1,160 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: SingleElectronPt1000_pythia8_cfi --conditions auto:phase2_realistic_T14 -n 10 --era Phase2C8 --eventcontent RECOSIM --relval 9000,50 -s GEN,SIM,DIGI --datatier GEN-SIM --beamspot HLLHC --geometry Extended2026D41 --fileout file:step1.root +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C8_cff import Phase2C8 + +process = cms.Process('DIGI',Phase2C8) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimCalorimetry.EcalSimProducers.esCATIAGainProducer_cfi') +process.load('SimCalorimetry.EcalSimProducers.esEcalLiteDTUPedestalsProducer_cfi') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2026D41Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D41_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleElectronPt1000_pythia8_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RECOSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1.root'), +# outputCommands = process.RECOSIMEventContent.outputCommands, + outputCommands = cms.untracked.vstring('keep *', + 'drop *_mix_*_*'), + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T14', '') + +process.generator = cms.EDFilter("Pythia8PtGun", + PGunParameters = cms.PSet( + AddAntiParticle = cms.bool(True), + MaxEta = cms.double(2.5), + MaxPhi = cms.double(3.14159265359), + MaxPt = cms.double(1000.01), + MinEta = cms.double(-2.5), + MinPhi = cms.double(-3.14159265359), + MinPt = cms.double(999.99), + ParticleID = cms.vint32(11) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single electron pt 1000') +) + + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.digitisation_step = cms.Path(process.pdigi) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RECOSIMoutput_step = cms.EndPath(process.RECOSIMoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.digitisation_step,process.endjob_step,process.RECOSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.generator) + + +# Customisation from command line +process.EcalCATIAGainRatiosESProducer = cms.ESProducer( + "EcalCATIAGainRatiosESProducer", + ComponentName = cms.string('testGainProducer'), +) + +process.EcalLiteDTUPedestalsESProducer = cms.ESProducer( + "EcalLiteDTUPedestalsESProducer", + ComponentName = cms.string('testPedestalProducer') +) + +from CondCore.DBCommon.CondDBSetup_cfi import * +process.ecalConditions = cms.ESSource("PoolDBESSource", CondDBSetup, + connect = cms.string('sqlite_file:../SimCalorimetry/EcalSimProducers/test/simPulseShapePhaseII.db'), + toGet = cms.VPSet( # overide Global Tag use EcalTBWeights_EBEE_offline + cms.PSet( + record = cms.string('EcalSimPulseShapeRcd') , + tag = cms.string('EcalSimPulseShape_default_mc') + ) + ) +) +process.es_prefer_ecalPulseShape = cms.ESPrefer("PoolDBESSource","ecalConditions") + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/SimGeneral/MixingModule/python/aliases_cfi.py b/SimGeneral/MixingModule/python/aliases_cfi.py index ab7507921b55c..511af5789932b 100644 --- a/SimGeneral/MixingModule/python/aliases_cfi.py +++ b/SimGeneral/MixingModule/python/aliases_cfi.py @@ -1,5 +1,4 @@ import FWCore.ParameterSet.Config as cms - simCastorDigis = cms.EDAlias( mix = cms.VPSet( cms.PSet(type = cms.string('CastorDataFramesSorted')) @@ -7,11 +6,20 @@ ) simEcalUnsuppressedDigis = cms.EDAlias( mix = cms.VPSet( - cms.PSet(type = cms.string('EBDigiCollection')), - cms.PSet(type = cms.string('EEDigiCollection')), - cms.PSet(type = cms.string('ESDigiCollection')) + cms.PSet(type = cms.string('EBDigiCollection')), + cms.PSet(type = cms.string('EEDigiCollection')), + cms.PSet(type = cms.string('ESDigiCollection')) ) ) + +from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal + +phase2_ecal.toModify(simEcalUnsuppressedDigis, + mix = cms.VPSet( + cms.PSet(type = cms.string('EBDigiCollectionPh2')) + ) +) + simHcalUnsuppressedDigis = cms.EDAlias( mix = cms.VPSet( cms.PSet(type = cms.string('HBHEDataFramesSorted')), @@ -22,13 +30,16 @@ cms.PSet(type = cms.string('QIE11DataFrameHcalDataFrameContainer')) ) ) + _pixelCommon = cms.VPSet( cms.PSet(type = cms.string('PixelDigiedmDetSetVector')), cms.PSet(type = cms.string('PixelDigiSimLinkedmDetSetVector')) ) + simSiPixelDigis = cms.EDAlias( mix = _pixelCommon ) + simSiStripDigis = cms.EDAlias( mix = cms.VPSet( cms.PSet(type = cms.string('SiStripDigiedmDetSetVector')), @@ -36,6 +47,7 @@ cms.PSet(type = cms.string('StripDigiSimLinkedmDetSetVector')) ) ) + simHGCalUnsuppressedDigis = cms.EDAlias( mix = cms.VPSet( cms.PSet( @@ -55,6 +67,7 @@ ), ) ) + simHFNoseUnsuppressedDigis = cms.EDAlias( mix = cms.VPSet( cms.PSet( @@ -66,9 +79,9 @@ ) simAPVsaturation = cms.EDAlias( - mix = cms.VPSet( - cms.PSet(type = cms.string('bool')) - ) + mix = cms.VPSet( + cms.PSet(type = cms.string('bool')) + ) ) from Configuration.Eras.Modifier_run3_common_cff import run3_common diff --git a/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py new file mode 100644 index 0000000000000..72bf5b4f60785 --- /dev/null +++ b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py @@ -0,0 +1,28 @@ +import FWCore.ParameterSet.Config as cms + +from SimCalorimetry.EcalSimProducers.ecalDigiParameters_Ph2_cff import * +from SimCalorimetry.EcalSimProducers.apdSimParameters_cff import * +from SimCalorimetry.EcalSimProducers.ecalSimParameterMap_cff import * +from SimCalorimetry.EcalSimProducers.ecalElectronicsSim_Ph2_cff import * +from SimCalorimetry.EcalSimProducers.ecalNotContainmentSim_cff import * +from SimCalorimetry.EcalSimProducers.ecalCosmicsSim_cff import * + + +ecalDigitizer_Ph2 = cms.PSet( + ecal_digi_parameters, + apd_sim_parameters, + ecal_electronics_sim, + ecal_cosmics_sim, + ecal_sim_parameter_map_ph2, + ecal_notCont_sim, + hitsProducer = cms.string('g4SimHits'), + accumulatorType = cms.string("EcalDigiProducer_Ph2"), + makeDigiSimLinks = cms.untracked.bool(False) +) + +from Configuration.Eras.Modifier_fastSim_cff import fastSim +fastSim.toModify(ecalDigitizer_Ph2, hitsProducer = "fastSimProducer") + + +ecalDigitizer_Ph2.doEB = cms.bool(True) + diff --git a/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py b/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py index d52c937f94c10..e3936b2dc8703 100644 --- a/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py +++ b/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py @@ -8,6 +8,7 @@ from SimCalorimetry.EcalSimProducers.ecalNotContainmentSim_cff import * from SimCalorimetry.EcalSimProducers.ecalCosmicsSim_cff import * + ecalDigitizer = cms.PSet( ecal_digi_parameters, apd_sim_parameters, @@ -32,3 +33,9 @@ phase2_common.toModify( ecalDigitizer, doES = cms.bool(False) ) from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal phase2_hgcal.toModify( ecalDigitizer, doEE = cms.bool(False) ) + + +#phase 2 digitization +from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal +from SimGeneral.MixingModule.ecalDigitizer_Ph2_cfi import ecalDigitizer_Ph2 as _ecalDigitizer_Ph2 +phase2_ecal.toReplaceWith(ecalDigitizer,_ecalDigitizer_Ph2) diff --git a/Validation/MtdValidation/plugins/BtlRecoHarvester.cc b/Validation/MtdValidation/plugins/BtlRecoHarvester.cc new file mode 100644 index 0000000000000..39b6985b865b0 --- /dev/null +++ b/Validation/MtdValidation/plugins/BtlRecoHarvester.cc @@ -0,0 +1,123 @@ +#include + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/ForwardDetId/interface/BTLDetId.h" + +class BtlRecoHarvester : public DQMEDHarvester { +public: + explicit BtlRecoHarvester(const edm::ParameterSet& iConfig); + ~BtlRecoHarvester() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; + +private: + const std::string folder_; + + // --- Histograms + MonitorElement* meBtlEtaEff_; + MonitorElement* meBtlPhiEff_; + MonitorElement* meBtlPtEff_; +}; + +// ------------ constructor and destructor -------------- +BtlRecoHarvester::BtlRecoHarvester(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")) {} + +BtlRecoHarvester::~BtlRecoHarvester() {} + +// ------------ endjob tasks ---------------------------- +void BtlRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { + // --- Get the monitoring histograms + MonitorElement* meTrackEffEtaTot = igetter.get(folder_ + "TrackEffEtaTot"); + MonitorElement* meTrackEffPhiTot = igetter.get(folder_ + "TrackEffPhiTot"); + MonitorElement* meTrackEffPtTot = igetter.get(folder_ + "TrackEffPtTot"); + MonitorElement* meTrackEffEtaMtd = igetter.get(folder_ + "TrackEffEtaMtd"); + MonitorElement* meTrackEffPhiMtd = igetter.get(folder_ + "TrackEffPhiMtd"); + MonitorElement* meTrackEffPtMtd = igetter.get(folder_ + "TrackEffPtMtd"); + + if (!meTrackEffEtaTot || !meTrackEffPhiTot || !meTrackEffPtTot || !meTrackEffEtaMtd || !meTrackEffPhiMtd || + !meTrackEffPtMtd) { + edm::LogError("BtlRecoHarvester") << "Monitoring histograms not found!" << std::endl; + return; + } + + // --- Book histograms + ibook.cd(folder_); + meBtlEtaEff_ = ibook.book1D("BtlEtaEff", + " Track Efficiency VS Eta;#eta;Efficiency", + meTrackEffEtaTot->getNbinsX(), + meTrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(), + meTrackEffEtaTot->getTH1()->GetXaxis()->GetXmax()); + meBtlPhiEff_ = ibook.book1D("BtlPhiEff", + "Track Efficiency VS Phi;#phi;Efficiency [rad]", + meTrackEffPhiTot->getNbinsX(), + meTrackEffPhiTot->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPhiTot->getTH1()->GetXaxis()->GetXmax()); + meBtlPtEff_ = ibook.book1D("BtlPtEff", + "Track Efficiency VS Pt;Pt;Efficiency [GeV]", + meTrackEffPtTot->getNbinsX(), + meTrackEffPtTot->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPtTot->getTH1()->GetXaxis()->GetXmax()); + meBtlEtaEff_->getTH1()->SetMinimum(0.); + meBtlPhiEff_->getTH1()->SetMinimum(0.); + meBtlPtEff_->getTH1()->SetMinimum(0.); + + // --- Calculate efficiency + for (int ibin = 1; ibin <= meTrackEffEtaTot->getNbinsX(); ibin++) { + double eff = meTrackEffEtaMtd->getBinContent(ibin) / meTrackEffEtaTot->getBinContent(ibin); + double bin_err = sqrt((meTrackEffEtaMtd->getBinContent(ibin) * + (meTrackEffEtaTot->getBinContent(ibin) - meTrackEffEtaMtd->getBinContent(ibin))) / + pow(meTrackEffEtaTot->getBinContent(ibin), 3)); + if (meTrackEffEtaTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlEtaEff_->setBinContent(ibin, eff); + meBtlEtaEff_->setBinError(ibin, bin_err); + } + for (int ibin = 1; ibin <= meTrackEffPhiTot->getNbinsX(); ibin++) { + double eff = meTrackEffPhiMtd->getBinContent(ibin) / meTrackEffPhiTot->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPhiMtd->getBinContent(ibin) * + (meTrackEffPhiTot->getBinContent(ibin) - meTrackEffPhiMtd->getBinContent(ibin))) / + pow(meTrackEffPhiTot->getBinContent(ibin), 3)); + if (meTrackEffPhiTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlPhiEff_->setBinContent(ibin, eff); + meBtlPhiEff_->setBinError(ibin, bin_err); + } + for (int ibin = 1; ibin <= meTrackEffPtTot->getNbinsX(); ibin++) { + double eff = meTrackEffPtMtd->getBinContent(ibin) / meTrackEffPtTot->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPtMtd->getBinContent(ibin) * + (meTrackEffPtTot->getBinContent(ibin) - meTrackEffPtMtd->getBinContent(ibin))) / + pow(meTrackEffPtTot->getBinContent(ibin), 3)); + if (meTrackEffPtTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlPtEff_->setBinContent(ibin, eff); + meBtlPtEff_->setBinError(ibin, bin_err); + } +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ---------- +void BtlRecoHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/BTL/Reco/"); + + descriptions.add("btlRecoPostProcessor", desc); +} + +DEFINE_FWK_MODULE(BtlRecoHarvester); diff --git a/Validation/MtdValidation/plugins/BtlRecoValidation.cc b/Validation/MtdValidation/plugins/BtlRecoValidation.cc new file mode 100644 index 0000000000000..ae3e9bb85e9b6 --- /dev/null +++ b/Validation/MtdValidation/plugins/BtlRecoValidation.cc @@ -0,0 +1,219 @@ +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/Common/interface/ValidHandle.h" +#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/ForwardDetId/interface/BTLDetId.h" +#include "DataFormats/FTLRecHit/interface/FTLRecHitCollections.h" +#include "DataFormats/FTLRecHit/interface/FTLClusterCollections.h" + +#include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/Common/interface/PtrVector.h" +#include "DataFormats/Common/interface/RefProd.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/TrackerRecHit2D/interface/MTDTrackingRecHit.h" + +#include "Geometry/Records/interface/MTDDigiGeometryRecord.h" +#include "Geometry/Records/interface/MTDTopologyRcd.h" +#include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" +#include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" +#include "Geometry/MTDGeometryBuilder/interface/ProxyMTDTopology.h" +#include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" + +class BtlRecoValidation : public DQMEDAnalyzer { +public: + explicit BtlRecoValidation(const edm::ParameterSet&); + ~BtlRecoValidation() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + + // ------------ member data ------------ + + const std::string folder_; + const float hitMinEnergy_; + const float trackMinEnergy_; + const float trackMinEta_; + + edm::EDGetTokenT btlRecCluToken_; + edm::EDGetTokenT btlRecTrackToken_; + edm::EDGetTokenT> RecVertexToken_; + + MonitorElement* meCluTime_; + MonitorElement* meCluEnergy_; + MonitorElement* meCluPhi_; + MonitorElement* meCluEta_; + MonitorElement* meCluHits_; + MonitorElement* meCluZvsPhi_; + MonitorElement* meTrackRPTime_; + MonitorElement* meTrackEffEtaTot_; + MonitorElement* meTrackEffPhiTot_; + MonitorElement* meTrackEffPtTot_; + MonitorElement* meTrackEffEtaMtd_; + MonitorElement* meTrackEffPhiMtd_; + MonitorElement* meTrackEffPtMtd_; + MonitorElement* meVerNumber_; + MonitorElement* meVerZ_; + MonitorElement* meVerTime_; +}; + +// ------------ constructor and destructor -------------- +BtlRecoValidation::BtlRecoValidation(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")), + hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")), + trackMinEnergy_(iConfig.getParameter("trackMinimumEnergy")), + trackMinEta_(iConfig.getParameter("trackMinimumEta")) { + btlRecCluToken_ = consumes(iConfig.getParameter("inputTagC")); + btlRecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); + RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); +} + +BtlRecoValidation::~BtlRecoValidation() {} + +// ------------ method called for each event ------------ +void BtlRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + using namespace geant_units::operators; + using namespace std; + + edm::ESHandle geometryHandle; + iSetup.get().get(geometryHandle); + const MTDGeometry* geom = geometryHandle.product(); + + edm::ESHandle topologyHandle; + iSetup.get().get(topologyHandle); + + auto btlRecCluHandle = makeValid(iEvent.getHandle(btlRecCluToken_)); + auto btlRecTrackHandle = makeValid(iEvent.getHandle(btlRecTrackToken_)); + auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); + + // --- Loop over the BTL RECO tracks --- + for (const auto& track : *btlRecTrackHandle) { + if (fabs(track.eta()) > trackMinEta_) + continue; + if (track.pt() < trackMinEnergy_) + continue; + + // --- all BTL tracks (with and without hit in MTD) --- + meTrackEffEtaTot_->Fill(track.eta()); + meTrackEffPhiTot_->Fill(track.phi()); + meTrackEffPtTot_->Fill(track.pt()); + + bool MTDBtl = false; + for (const auto hit : track.recHits()) { + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) + MTDBtl = true; + } + + // --- keeping only tracks with last hit in MTD --- + if (MTDBtl == true) { + meTrackEffEtaMtd_->Fill(track.eta()); + meTrackEffPhiMtd_->Fill(track.phi()); + meTrackEffPtMtd_->Fill(track.pt()); + meTrackRPTime_->Fill(track.t0()); + } + } + + // --- Loop over the RECO vertices --- + int nv = 0; + for (const auto& v : *RecVertexHandle) { + if (v.isValid()) { + meVerZ_->Fill(v.z()); + meVerTime_->Fill(v.t()); + nv++; + } else + cout << "The vertex is not valid" << endl; + } + meVerNumber_->Fill(nv); + + // --- Loop over the BTL RECO clusters --- + for (const auto& DetSetClu : *btlRecCluHandle) { + for (const auto& cluster : DetSetClu) { + if (cluster.energy() < hitMinEnergy_) + continue; + BTLDetId cluId = cluster.id(); + DetId detIdObject(cluId); + const auto& genericDet = geom->idToDetUnit(detIdObject); + if (genericDet == nullptr) { + throw cms::Exception("BtlRecoValidation") + << "GeographicalID: " << std::hex << cluId << " is invalid!" << std::dec << std::endl; + } + + const ProxyMTDTopology& topoproxy = static_cast(genericDet->topology()); + const RectangularMTDTopology& topo = static_cast(topoproxy.specificTopology()); + + Local3DPoint local_point(cluster.x() * 5.7, cluster.y() * 0.3, 0.); + local_point = topo.pixelToModuleLocalPoint(local_point, cluId.row(topo.nrows()), cluId.column(topo.ncolumns())); + const auto& global_point = genericDet->toGlobal(local_point); + + meCluEnergy_->Fill(cluster.energy()); + meCluTime_->Fill(cluster.time()); + meCluPhi_->Fill(global_point.phi()); + meCluEta_->Fill(global_point.eta()); + meCluZvsPhi_->Fill(global_point.z(), global_point.phi()); + meCluHits_->Fill(cluster.size()); + } + } +} + +// ------------ method for histogram booking ------------ +void BtlRecoValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { + ibook.setCurrentFolder(folder_); + + // histogram booking + meCluTime_ = ibook.book1D("BtlCluTime", "BTL cluster time ToA;ToA [ns]", 250, 0, 25); + meCluEnergy_ = ibook.book1D("BtlCluEnergy", "BTL cluster energy;E_{RECO} [MeV]", 100, 0, 20); + meCluPhi_ = ibook.book1D("BtlCluPhi", "BTL cluster #phi;#phi_{RECO} [rad]", 100, -3.2, 3.2); + meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.6, 1.6); + meCluHits_ = ibook.book1D("BtlCluHitNumber", "BTL hits per cluster", 10, 0, 10); + meCluZvsPhi_ = ibook.book2D( + "BtlOccupancy", "BTL cluster Z vs #phi;Z_{RECO} [cm]; #phi_{RECO} [rad]", 100, -260., 260., 100, -3.2, 3.2); + meTrackEffEtaTot_ = ibook.book1D("TrackEffEtaTot", "Track efficiency vs eta D;#eta_{RECO}", 100, -1.6, 1.6); + meTrackEffPhiTot_ = ibook.book1D("TrackEffPhiTot", "Track efficiency vs phi D;#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPtTot_ = ibook.book1D("TrackEffPtTot", "Track efficiency vs pt D;pt_{RECO} [GeV]", 50, 0, 10); + meTrackEffEtaMtd_ = ibook.book1D("TrackEffEtaMtd", "Track efficiency vs eta N;#eta_{RECO}", 100, -1.6, 1.6); + meTrackEffPhiMtd_ = ibook.book1D("TrackEffPhiMtd", "Track efficiency vs phi N;#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPtMtd_ = ibook.book1D("TrackEffPtMtd", "Track efficiency vs pt N;pt_{RECO} [GeV]", 50, 0, 10); + meTrackRPTime_ = ibook.book1D("TrackRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -10, 10); + meVerZ_ = ibook.book1D("VerZ", "RECO Vertex Z;Z_{RECO} [cm]", 180, -18, 18); + meVerTime_ = ibook.book1D("VerTime", "RECO Vertex Time;t0 [ns]", 100, -1, 1); + meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number", 100, 0, 500); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ + +void BtlRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/BTL/Reco"); + desc.add("inputTagC", edm::InputTag("mtdClusters", "FTLBarrel")); + desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); + desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); + desc.add("hitMinimumEnergy", 1.); // [MeV] + desc.add("trackMinimumEnergy", 1.); // [GeV] + desc.add("trackMinimumEta", 1.5); + + descriptions.add("btlReco", desc); +} + +DEFINE_FWK_MODULE(BtlRecoValidation); diff --git a/Validation/MtdValidation/plugins/EtlRecoHarvester.cc b/Validation/MtdValidation/plugins/EtlRecoHarvester.cc new file mode 100644 index 0000000000000..a5763815f2329 --- /dev/null +++ b/Validation/MtdValidation/plugins/EtlRecoHarvester.cc @@ -0,0 +1,189 @@ +#include + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/ForwardDetId/interface/ETLDetId.h" + +class EtlRecoHarvester : public DQMEDHarvester { +public: + explicit EtlRecoHarvester(const edm::ParameterSet& iConfig); + ~EtlRecoHarvester() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; + +private: + const std::string folder_; + + // --- Histograms + MonitorElement* meEtlEtaEff_[2]; + MonitorElement* meEtlPhiEff_[2]; + MonitorElement* meEtlPtEff_[2]; +}; + +// ------------ constructor and destructor -------------- +EtlRecoHarvester::EtlRecoHarvester(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")) {} + +EtlRecoHarvester::~EtlRecoHarvester() {} + +// ------------ endjob tasks ---------------------------- +void EtlRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { + // --- Get the monitoring histograms + MonitorElement* meTrackEffEtaTotZneg = igetter.get(folder_ + "TrackEffEtaTotZneg"); + MonitorElement* meTrackEffPhiTotZneg = igetter.get(folder_ + "TrackEffPhiTotZneg"); + MonitorElement* meTrackEffPtTotZneg = igetter.get(folder_ + "TrackEffPtTotZneg"); + MonitorElement* meTrackEffEtaMtdZneg = igetter.get(folder_ + "TrackEffEtaMtdZneg"); + MonitorElement* meTrackEffPhiMtdZneg = igetter.get(folder_ + "TrackEffPhiMtdZneg"); + MonitorElement* meTrackEffPtMtdZneg = igetter.get(folder_ + "TrackEffPtMtdZneg"); + MonitorElement* meTrackEffEtaTotZpos = igetter.get(folder_ + "TrackEffEtaTotZpos"); + MonitorElement* meTrackEffPhiTotZpos = igetter.get(folder_ + "TrackEffPhiTotZpos"); + MonitorElement* meTrackEffPtTotZpos = igetter.get(folder_ + "TrackEffPtTotZpos"); + MonitorElement* meTrackEffEtaMtdZpos = igetter.get(folder_ + "TrackEffEtaMtdZpos"); + MonitorElement* meTrackEffPhiMtdZpos = igetter.get(folder_ + "TrackEffPhiMtdZpos"); + MonitorElement* meTrackEffPtMtdZpos = igetter.get(folder_ + "TrackEffPtMtdZpos"); + + if (!meTrackEffEtaTotZneg || !meTrackEffPhiTotZneg || !meTrackEffPtTotZneg || !meTrackEffEtaMtdZneg || + !meTrackEffPhiMtdZneg || !meTrackEffPtMtdZneg || !meTrackEffEtaTotZpos || !meTrackEffPhiTotZpos || + !meTrackEffPtTotZpos || !meTrackEffEtaMtdZpos || !meTrackEffPhiMtdZpos || !meTrackEffPtMtdZpos) { + edm::LogError("EtlRecoHarvester") << "Monitoring histograms not found!" << std::endl; + return; + } + + // --- Book histograms + ibook.cd(folder_); + meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZneg", + " Track Efficiency VS Eta (-Z);#eta;Efficiency", + meTrackEffEtaTotZneg->getNbinsX(), + meTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(), + meTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax()); + meEtlPhiEff_[0] = ibook.book1D("EtlPhiEffZneg", + "Track Efficiency VS Phi (-Z);#phi [rad];Efficiency", + meTrackEffPhiTotZneg->getNbinsX(), + meTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmax()); + meEtlPtEff_[0] = ibook.book1D("EtlPtEffZneg", + "Track Efficiency VS Pt (-Z);Pt [GeV];Efficiency", + meTrackEffPtTotZneg->getNbinsX(), + meTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax()); + meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZpos", + " Track Efficiency VS Eta (+Z);#eta;Efficiency", + meTrackEffEtaTotZpos->getNbinsX(), + meTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(), + meTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax()); + meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZpos", + "Track Efficiency VS Phi (+Z);#phi [rad];Efficiency", + meTrackEffPhiTotZpos->getNbinsX(), + meTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax()); + meEtlPtEff_[1] = ibook.book1D("EtlPtEffZpos", + "Track Efficiency VS Pt (+Z);Pt [GeV];Efficiency", + meTrackEffPtTotZpos->getNbinsX(), + meTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmin(), + meTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmax()); + meEtlEtaEff_[0]->getTH1()->SetMinimum(0.); + meEtlPhiEff_[0]->getTH1()->SetMinimum(0.); + meEtlPtEff_[0]->getTH1()->SetMinimum(0.); + meEtlEtaEff_[1]->getTH1()->SetMinimum(0.); + meEtlPhiEff_[1]->getTH1()->SetMinimum(0.); + meEtlPtEff_[1]->getTH1()->SetMinimum(0.); + + // --- Calculate efficiency + for (int ibin = 1; ibin <= meTrackEffEtaTotZneg->getNbinsX(); ibin++) { + double eff = meTrackEffEtaMtdZneg->getBinContent(ibin) / meTrackEffEtaTotZneg->getBinContent(ibin); + double bin_err = sqrt((meTrackEffEtaMtdZneg->getBinContent(ibin) * + (meTrackEffEtaTotZneg->getBinContent(ibin) - meTrackEffEtaMtdZneg->getBinContent(ibin))) / + pow(meTrackEffEtaTotZneg->getBinContent(ibin), 3)); + if (meTrackEffEtaTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlEtaEff_[0]->setBinContent(ibin, eff); + meEtlEtaEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meTrackEffEtaTotZpos->getNbinsX(); ibin++) { + double eff = meTrackEffEtaMtdZpos->getBinContent(ibin) / meTrackEffEtaTotZpos->getBinContent(ibin); + double bin_err = sqrt((meTrackEffEtaMtdZpos->getBinContent(ibin) * + (meTrackEffEtaTotZpos->getBinContent(ibin) - meTrackEffEtaMtdZpos->getBinContent(ibin))) / + pow(meTrackEffEtaTotZpos->getBinContent(ibin), 3)); + if (meTrackEffEtaTotZpos->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlEtaEff_[1]->setBinContent(ibin, eff); + meEtlEtaEff_[1]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meTrackEffPhiTotZneg->getNbinsX(); ibin++) { + double eff = meTrackEffPhiMtdZneg->getBinContent(ibin) / meTrackEffPhiTotZneg->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPhiMtdZneg->getBinContent(ibin) * + (meTrackEffPhiTotZneg->getBinContent(ibin) - meTrackEffPhiMtdZneg->getBinContent(ibin))) / + pow(meTrackEffPhiTotZneg->getBinContent(ibin), 3)); + if (meTrackEffPhiTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPhiEff_[0]->setBinContent(ibin, eff); + meEtlPhiEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meTrackEffPhiTotZpos->getNbinsX(); ibin++) { + double eff = meTrackEffPhiMtdZpos->getBinContent(ibin) / meTrackEffPhiTotZpos->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPhiMtdZpos->getBinContent(ibin) * + (meTrackEffPhiTotZpos->getBinContent(ibin) - meTrackEffPhiMtdZpos->getBinContent(ibin))) / + pow(meTrackEffPhiTotZpos->getBinContent(ibin), 3)); + if (meTrackEffPhiTotZpos->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPhiEff_[1]->setBinContent(ibin, eff); + meEtlPhiEff_[1]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meTrackEffPtTotZneg->getNbinsX(); ibin++) { + double eff = meTrackEffPtMtdZneg->getBinContent(ibin) / meTrackEffPtTotZneg->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPtMtdZneg->getBinContent(ibin) * + (meTrackEffPtTotZneg->getBinContent(ibin) - meTrackEffPtMtdZneg->getBinContent(ibin))) / + pow(meTrackEffPtTotZneg->getBinContent(ibin), 3)); + if (meTrackEffPtTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPtEff_[0]->setBinContent(ibin, eff); + meEtlPtEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meTrackEffPtTotZpos->getNbinsX(); ibin++) { + double eff = meTrackEffPtMtdZpos->getBinContent(ibin) / meTrackEffPtTotZpos->getBinContent(ibin); + double bin_err = sqrt((meTrackEffPtMtdZpos->getBinContent(ibin) * + (meTrackEffPtTotZpos->getBinContent(ibin) - meTrackEffPtMtdZpos->getBinContent(ibin))) / + pow(meTrackEffPtTotZpos->getBinContent(ibin), 3)); + if (meTrackEffPtTotZpos->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPtEff_[1]->setBinContent(ibin, eff); + meEtlPtEff_[1]->setBinError(ibin, bin_err); + } +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ---------- +void EtlRecoHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/ETL/Reco/"); + + descriptions.add("etlRecoPostProcessor", desc); +} + +DEFINE_FWK_MODULE(EtlRecoHarvester); diff --git a/Validation/MtdValidation/plugins/EtlRecoValidation.cc b/Validation/MtdValidation/plugins/EtlRecoValidation.cc new file mode 100644 index 0000000000000..31d0086612be5 --- /dev/null +++ b/Validation/MtdValidation/plugins/EtlRecoValidation.cc @@ -0,0 +1,244 @@ +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/Common/interface/ValidHandle.h" +#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/ForwardDetId/interface/ETLDetId.h" +#include "DataFormats/FTLRecHit/interface/FTLRecHitCollections.h" +#include "DataFormats/FTLRecHit/interface/FTLClusterCollections.h" + +#include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/Common/interface/PtrVector.h" +#include "DataFormats/Common/interface/RefProd.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrack.h" +#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" +#include "DataFormats/TrackerRecHit2D/interface/MTDTrackingRecHit.h" + +#include "Geometry/Records/interface/MTDDigiGeometryRecord.h" +#include "Geometry/Records/interface/MTDTopologyRcd.h" +#include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" +#include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" +#include "Geometry/MTDGeometryBuilder/interface/ProxyMTDTopology.h" +#include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" + +class EtlRecoValidation : public DQMEDAnalyzer { +public: + explicit EtlRecoValidation(const edm::ParameterSet&); + ~EtlRecoValidation() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + + // ------------ member data ------------ + + const std::string folder_; + const float hitMinEnergy_; + const float trackMinEnergy_; + const float trackMinEta_; + const float trackMaxEta_; + + edm::EDGetTokenT etlRecCluToken_; + edm::EDGetTokenT etlRecTrackToken_; + + MonitorElement* meCluTime_[2]; + MonitorElement* meCluEnergy_[2]; + MonitorElement* meCluPhi_[2]; + MonitorElement* meCluEta_[2]; + MonitorElement* meCluHits_[2]; + MonitorElement* meCluZvsPhi_[2]; + MonitorElement* meTrackRPTime_[2]; + MonitorElement* meTrackEffEtaTot_[2]; + MonitorElement* meTrackEffPhiTot_[2]; + MonitorElement* meTrackEffPtTot_[2]; + MonitorElement* meTrackEffEtaMtd_[2]; + MonitorElement* meTrackEffPhiMtd_[2]; + MonitorElement* meTrackEffPtMtd_[2]; +}; + +// ------------ constructor and destructor -------------- +EtlRecoValidation::EtlRecoValidation(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")), + hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")), + trackMinEnergy_(iConfig.getParameter("trackMinimumEnergy")), + trackMinEta_(iConfig.getParameter("trackMinimumEta")), + trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { + etlRecCluToken_ = consumes(iConfig.getParameter("inputTagC")); + etlRecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); +} + +EtlRecoValidation::~EtlRecoValidation() {} + +// ------------ method called for each event ------------ +void EtlRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + using namespace geant_units::operators; + using namespace std; + + edm::ESHandle geometryHandle; + iSetup.get().get(geometryHandle); + const MTDGeometry* geom = geometryHandle.product(); + + edm::ESHandle topologyHandle; + iSetup.get().get(topologyHandle); + + auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_)); + auto etlRecTrackHandle = makeValid(iEvent.getHandle(etlRecTrackToken_)); + + // --- Loop over the ETL RECO tracks --- + for (const auto& track : *etlRecTrackHandle) { + if (track.pt() < trackMinEnergy_) + continue; + + // --- all ETL tracks (with and without hit in MTD) --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + meTrackEffEtaTot_[0]->Fill(track.eta()); + meTrackEffPhiTot_[0]->Fill(track.phi()); + meTrackEffPtTot_[0]->Fill(track.pt()); + } + + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + meTrackEffEtaTot_[1]->Fill(track.eta()); + meTrackEffPhiTot_[1]->Fill(track.phi()); + meTrackEffPtTot_[1]->Fill(track.pt()); + } + + bool MTDEtlZneg = false; + bool MTDEtlZpos = false; + for (const auto hit : track.recHits()) { + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2) && (Hit.zside() == -1)) + MTDEtlZneg = true; + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2) && (Hit.zside() == 1)) + MTDEtlZpos = true; + } + + // --- keeping only tracks with last hit in MTD --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + if (MTDEtlZneg == true) { + meTrackEffEtaMtd_[0]->Fill(track.eta()); + meTrackEffPhiMtd_[0]->Fill(track.phi()); + meTrackEffPtMtd_[0]->Fill(track.pt()); + meTrackRPTime_[0]->Fill(track.t0()); + } + } + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + if (MTDEtlZpos == true) { + meTrackEffEtaMtd_[1]->Fill(track.eta()); + meTrackEffPhiMtd_[1]->Fill(track.phi()); + meTrackEffPtMtd_[1]->Fill(track.pt()); + meTrackRPTime_[1]->Fill(track.t0()); + } + } + } + + // --- Loop over the ETL RECO clusters --- + for (const auto& DetSetClu : *etlRecCluHandle) { + for (const auto& cluster : DetSetClu) { + if (cluster.energy() < hitMinEnergy_) + continue; + ETLDetId cluId = cluster.id(); + DetId detIdObject(cluId); + const auto& genericDet = geom->idToDetUnit(detIdObject); + if (genericDet == nullptr) { + throw cms::Exception("EtlRecoValidation") + << "GeographicalID: " << std::hex << cluId << " is invalid!" << std::dec << std::endl; + } + + const ProxyMTDTopology& topoproxy = static_cast(genericDet->topology()); + const RectangularMTDTopology& topo = static_cast(topoproxy.specificTopology()); + + Local3DPoint local_point(topo.localX(cluster.x()), topo.localY(cluster.y()), 0.); + const auto& global_point = genericDet->toGlobal(local_point); + + int idet = (cluId.zside() + 1) / 2; + + meCluEnergy_[idet]->Fill(cluster.energy()); + meCluTime_[idet]->Fill(cluster.time()); + meCluPhi_[idet]->Fill(global_point.phi()); + meCluEta_[idet]->Fill(global_point.eta()); + meCluZvsPhi_[idet]->Fill(global_point.x(), global_point.y()); + meCluHits_[idet]->Fill(cluster.size()); + } + } +} + +// ------------ method for histogram booking ------------ +void EtlRecoValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { + ibook.setCurrentFolder(folder_); + + // histogram booking + meCluTime_[0] = ibook.book1D("EtlCluTimeZneg", "ETL cluster ToA (-Z);ToA [ns]", 250, 0, 25); + meCluTime_[1] = ibook.book1D("EtlCluTimeZpos", "ETL cluster ToA (+Z);ToA [ns]", 250, 0, 25); + meCluEnergy_[0] = ibook.book1D("EtlCluEnergyZneg", "ETL cluster energy (-Z);E_{RECO} [MeV]", 100, 0, 10); + meCluEnergy_[1] = ibook.book1D("EtlCluEnergyZpos", "ETL cluster energy (+Z);E_{RECO} [MeV]", 100, 0, 10); + meCluPhi_[0] = ibook.book1D("EtlCluPhiZneg", "ETL cluster #phi (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meCluPhi_[1] = ibook.book1D("EtlCluPhiZpos", "ETL cluster #phi (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meCluEta_[0] = ibook.book1D("EtlCluEtaZneg", "ETL cluster #eta (-Z);#eta_{RECO}", 100, -3.2, -1.4); + meCluEta_[1] = ibook.book1D("EtlCluEtaZpos", "ETL cluster #eta (+Z);#eta_{RECO}", 100, 1.4, 3.2); + meCluHits_[0] = ibook.book1D("EtlCluHitNumberZneg", "ETL hits per cluster (-Z)", 10, 0, 10); + meCluHits_[1] = ibook.book1D("EtlCluHitNumberZpos", "ETL hits per cluster (+Z)", 10, 0, 10); + meCluZvsPhi_[0] = ibook.book2D( + "EtlOccupancyZneg", "ETL cluster X vs Y (-Z);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., 150., 100, -150, 150); + meCluZvsPhi_[1] = ibook.book2D( + "EtlOccupancyZpos", "ETL cluster X vs Y (+Z);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., 150., 100, -150, 150); + meTrackEffEtaTot_[0] = + ibook.book1D("TrackEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); + meTrackEffEtaTot_[1] = + ibook.book1D("TrackEffEtaTotZpos", "Track efficiency vs eta (Tot) (+Z);#eta_{RECO}", 100, 1.4, 3.2); + meTrackEffPhiTot_[0] = + ibook.book1D("TrackEffPhiTotZneg", "Track efficiency vs phi (Tot) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPhiTot_[1] = + ibook.book1D("TrackEffPhiTotZpos", "Track efficiency vs phi (Tot) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPtTot_[0] = + ibook.book1D("TrackEffPtTotZneg", "Track efficiency vs pt (Tot) (-Z);pt_{RECO} [GeV]", 50, 0, 10); + meTrackEffPtTot_[1] = + ibook.book1D("TrackEffPtTotZpos", "Track efficiency vs pt (Tot) (+Z);pt_{RECO} [GeV]", 50, 0, 10); + meTrackEffEtaMtd_[0] = + ibook.book1D("TrackEffEtaMtdZneg", "Track efficiency vs eta (Mtd) (-Z);#eta_{RECO}", 100, -3.2, -1.4); + meTrackEffEtaMtd_[1] = + ibook.book1D("TrackEffEtaMtdZpos", "Track efficiency vs eta (Mtd) (+Z);#eta_{RECO}", 100, 1.4, 3.2); + meTrackEffPhiMtd_[0] = + ibook.book1D("TrackEffPhiMtdZneg", "Track efficiency vs phi (Mtd) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPhiMtd_[1] = + ibook.book1D("TrackEffPhiMtdZpos", "Track efficiency vs phi (Mtd) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meTrackEffPtMtd_[0] = + ibook.book1D("TrackEffPtMtdZneg", "Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10); + meTrackEffPtMtd_[1] = + ibook.book1D("TrackEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); + meTrackRPTime_[0] = ibook.book1D("TrackRPTimeZneg", "Track t0 with respect to R.P. (-Z);t0 [ns]", 100, -10, 10); + meTrackRPTime_[1] = ibook.book1D("TrackRPTimeZpos", "Track t0 with respect to R.P. (+Z);t0 [ns]", 100, -10, 10); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ + +void EtlRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/ETL/Reco"); + desc.add("inputTagC", edm::InputTag("mtdClusters", "FTLEndcap")); + desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); + desc.add("hitMinimumEnergy", 1.); // [MeV] + desc.add("trackMinimumEnergy", 0.5); // [GeV] + desc.add("trackMinimumEta", 1.4); + desc.add("trackMaximumEta", 3.2); + + descriptions.add("etlReco", desc); +} + +DEFINE_FWK_MODULE(EtlRecoValidation); From a9a764a9dd9128b54c66296a5f15f3ae8b5cab1e Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 14 Sep 2020 09:55:57 +0200 Subject: [PATCH 02/14] Force to avoid digitorawstep --- Configuration/StandardSequences/python/DigiToRaw_cff.py | 3 +++ SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py | 6 ------ SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Configuration/StandardSequences/python/DigiToRaw_cff.py b/Configuration/StandardSequences/python/DigiToRaw_cff.py index 81006f1ec2f16..8c897d6c1f221 100644 --- a/Configuration/StandardSequences/python/DigiToRaw_cff.py +++ b/Configuration/StandardSequences/python/DigiToRaw_cff.py @@ -53,5 +53,8 @@ from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon phase2_muon.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([rpcpacker])) +from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal +phase2_ecal.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([esDigiToRaw])) + from Configuration.Eras.Modifier_fastSim_cff import fastSim fastSim.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([siPixelRawData,SiStripDigiToRaw,castorRawData,ctppsRawData])) diff --git a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py index c6d368f3569b2..e22a393f66e68 100644 --- a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py +++ b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py @@ -19,15 +19,9 @@ from SimCalorimetry.EcalEBTrigPrimProducers.ecalEBTriggerPrimitiveDigis_cff import * -#DARIO COMMENTED: #_phase2_ecalDigiTask = ecalDigiTask.copy() #_phase2_ecalDigiTask.add(simEcalEBTriggerPrimitiveDigis) - -#DARIO ADDED: -#_phase2_ecalDigiTask = cms.Task(simEcalDigis) _phase2_ecalDigiTask = cms.Task() - from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask) - diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc index 7bb6f28db429a..7f858ed20244b 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc @@ -34,8 +34,8 @@ #include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" -#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" -#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" +//#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" +//#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" //*****************************************// //Ecal Digi Producer for PhaseII data format //Removed EE and ES From 25ce2c51a81cf805c74705905ea35dbfccacd263 Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 14 Sep 2020 09:56:44 +0200 Subject: [PATCH 03/14] Remove EcalGainRatioProducer --- SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc index 7f858ed20244b..b2cbed78f4fbc 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer_Ph2.cc @@ -34,8 +34,6 @@ #include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" -//#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" -//#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" //*****************************************// //Ecal Digi Producer for PhaseII data format //Removed EE and ES From 9172b42a5c2fa2d0fec300556b0ce8c73164b2dc Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 14 Sep 2020 10:00:42 +0200 Subject: [PATCH 04/14] Removed esCATIAGainProducer_cfi --- .../python/esCATIAGainProducer_cfi.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py diff --git a/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py b/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py deleted file mode 100644 index 83f9d520655fe..0000000000000 --- a/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py +++ /dev/null @@ -1,12 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -EcalCATIAGainRatiosRcd = cms.ESSource("EmptyESSource", - recordName = cms.string("EcalCATIAGainRatiosRcd"), - firstValid = cms.vuint32(1), - iovIsRunNotTime = cms.bool(True) - ) - -EcalCATIAGainRatios = cms.ESProducer("EcalCATIAGainRatiosESProducer", - ComponentName = cms.string('EcalCatiaGainProducer'), - CATIAGainRatio = cms.double(10.)) - From d0e35e95f14d1e384b7b4536aa45407674d0a756 Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 14 Sep 2020 11:56:47 +0200 Subject: [PATCH 05/14] Move ecalDigitizer_Ph2.doEB into definition of PSet --- SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py index 72bf5b4f60785..27cd2c54e1567 100644 --- a/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py +++ b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py @@ -17,12 +17,10 @@ ecal_notCont_sim, hitsProducer = cms.string('g4SimHits'), accumulatorType = cms.string("EcalDigiProducer_Ph2"), - makeDigiSimLinks = cms.untracked.bool(False) + makeDigiSimLinks = cms.untracked.bool(False), + doEB = cms.bool(True) ) from Configuration.Eras.Modifier_fastSim_cff import fastSim fastSim.toModify(ecalDigitizer_Ph2, hitsProducer = "fastSimProducer") - -ecalDigitizer_Ph2.doEB = cms.bool(True) - From ebb7343593109e4b319a8659b9a40cbb6ccce25d Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 15 Sep 2020 16:22:40 +0200 Subject: [PATCH 06/14] Remove useless code --- SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc b/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc index 0e65a14ef9366..ecf3cf7c4bce7 100644 --- a/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc +++ b/SimCalorimetry/EcalSimAlgos/src/EcalLiteDTUCoder.cc @@ -149,8 +149,6 @@ void EcalLiteDTUCoder::encode(const EcalSamples& ecalSamples, igain = 0; } df.setSample(j, EcalLiteDTUSample(adctrace[j][igain], igain)); - if (nSaturatedSamples != 0) { - } } } From a43270b369c37c0514a4ecd8b967b8bab6930616 Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 29 Sep 2020 12:11:13 +0200 Subject: [PATCH 07/14] Add new Era Ecal_Phase2_Devel --- .../Eras/python/Era_Phase2_Ecal_Devel_cff.py | 8 ++++++++ .../Eras/python/Modifier_phase2_ecal_devel_cff.py | 4 ++++ .../StandardSequences/python/DigiToRaw_cff.py | 4 ++-- .../Configuration/python/ecalDigiSequence_cff.py | 8 +++++--- SimGeneral/MixingModule/python/aliases_cfi.py | 4 ++-- .../MixingModule/python/ecalDigitizer_Ph2_cfi.py | 3 ++- SimGeneral/MixingModule/python/ecalDigitizer_cfi.py | 11 +++++++---- 7 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py create mode 100644 Configuration/Eras/python/Modifier_phase2_ecal_devel_cff.py diff --git a/Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py b/Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py new file mode 100644 index 0000000000000..c059480be1e67 --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py @@ -0,0 +1,8 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 +from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel + +Phase2_Ecal_Devel = cms.ModifierChain(Phase2C9, phase2_hfnose,phase2_ecal_devel) + diff --git a/Configuration/Eras/python/Modifier_phase2_ecal_devel_cff.py b/Configuration/Eras/python/Modifier_phase2_ecal_devel_cff.py new file mode 100644 index 0000000000000..6165152ea08f0 --- /dev/null +++ b/Configuration/Eras/python/Modifier_phase2_ecal_devel_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +phase2_ecal_devel = cms.Modifier() + diff --git a/Configuration/StandardSequences/python/DigiToRaw_cff.py b/Configuration/StandardSequences/python/DigiToRaw_cff.py index 8c897d6c1f221..20f4776ef5cb6 100644 --- a/Configuration/StandardSequences/python/DigiToRaw_cff.py +++ b/Configuration/StandardSequences/python/DigiToRaw_cff.py @@ -53,8 +53,8 @@ from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon phase2_muon.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([rpcpacker])) -from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal -phase2_ecal.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([esDigiToRaw])) +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel +phase2_ecal_devel.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([esDigiToRaw])) from Configuration.Eras.Modifier_fastSim_cff import fastSim fastSim.toReplaceWith(DigiToRawTask, DigiToRawTask.copyAndExclude([siPixelRawData,SiStripDigiToRaw,castorRawData,ctppsRawData])) diff --git a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py index e22a393f66e68..a25e0ea11a113 100644 --- a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py +++ b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py @@ -18,10 +18,12 @@ premix_stage1.toReplaceWith(ecalDigiTask, ecalDigiTask.copyAndExclude([simEcalPreshowerDigis])) from SimCalorimetry.EcalEBTrigPrimProducers.ecalEBTriggerPrimitiveDigis_cff import * +_phase2_ecalDigiTask = ecalDigiTask.copy() +_phase2_ecalDigiTask.add(simEcalEBTriggerPrimitiveDigis) -#_phase2_ecalDigiTask = ecalDigiTask.copy() -#_phase2_ecalDigiTask.add(simEcalEBTriggerPrimitiveDigis) -_phase2_ecalDigiTask = cms.Task() from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask) +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel +_phase2_ecalDigiTask_devel = cms.Task() +phase2_common.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask_devel) diff --git a/SimGeneral/MixingModule/python/aliases_cfi.py b/SimGeneral/MixingModule/python/aliases_cfi.py index 511af5789932b..36c3d28e3ff1e 100644 --- a/SimGeneral/MixingModule/python/aliases_cfi.py +++ b/SimGeneral/MixingModule/python/aliases_cfi.py @@ -12,9 +12,9 @@ ) ) -from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel -phase2_ecal.toModify(simEcalUnsuppressedDigis, +phase2_ecal_devel.toModify(simEcalUnsuppressedDigis, mix = cms.VPSet( cms.PSet(type = cms.string('EBDigiCollectionPh2')) ) diff --git a/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py index 27cd2c54e1567..38eddcbdade31 100644 --- a/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py +++ b/SimGeneral/MixingModule/python/ecalDigitizer_Ph2_cfi.py @@ -18,7 +18,8 @@ hitsProducer = cms.string('g4SimHits'), accumulatorType = cms.string("EcalDigiProducer_Ph2"), makeDigiSimLinks = cms.untracked.bool(False), - doEB = cms.bool(True) + doEB = cms.bool(True), + doES = cms.bool(False) ) from Configuration.Eras.Modifier_fastSim_cff import fastSim diff --git a/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py b/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py index e3936b2dc8703..4dc1b3b90a187 100644 --- a/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py +++ b/SimGeneral/MixingModule/python/ecalDigitizer_cfi.py @@ -29,13 +29,16 @@ ecalDigitizer.doEE = cms.bool(True) ecalDigitizer.doES = cms.bool(True) -from Configuration.Eras.Modifier_phase2_common_cff import phase2_common -phase2_common.toModify( ecalDigitizer, doES = cms.bool(False) ) + + from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal phase2_hgcal.toModify( ecalDigitizer, doEE = cms.bool(False) ) +from Configuration.Eras.Modifier_phase2_common_cff import phase2_common +phase2_common.toModify( ecalDigitizer, doES = cms.bool(False) ) #phase 2 digitization -from Configuration.Eras.Modifier_phase2_ecal_cff import phase2_ecal +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel from SimGeneral.MixingModule.ecalDigitizer_Ph2_cfi import ecalDigitizer_Ph2 as _ecalDigitizer_Ph2 -phase2_ecal.toReplaceWith(ecalDigitizer,_ecalDigitizer_Ph2) +phase2_ecal_devel.toReplaceWith(ecalDigitizer,_ecalDigitizer_Ph2) +phase2_ecal_devel.toModify(_ecalDigitizer_Ph2, doES = cms.bool(False) ) From 022e1abbb995f75e0e36fe0aad2e2a94a8fedc75 Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 30 Sep 2020 18:06:50 +0200 Subject: [PATCH 08/14] Fix typo --- SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py index a25e0ea11a113..3628194df62bb 100644 --- a/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py +++ b/SimCalorimetry/Configuration/python/ecalDigiSequence_cff.py @@ -26,4 +26,4 @@ from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel _phase2_ecalDigiTask_devel = cms.Task() -phase2_common.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask_devel) +phase2_ecal_devel.toReplaceWith(ecalDigiTask,_phase2_ecalDigiTask_devel) From f68b43456d8e41cd5029ef9fad482b8e0a3d0c7c Mon Sep 17 00:00:00 2001 From: Dario Date: Thu, 1 Oct 2020 10:35:53 +0200 Subject: [PATCH 09/14] Update the Eras list --- Configuration/StandardSequences/python/Eras.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 5f5524eb6176a..91e2ac402cf07 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -44,6 +44,7 @@ def __init__(self): 'Phase2C11_dd4hep', 'Phase2C12_dd4hep', 'Phase2C11M9', + 'Phase2_Ecal_Devel' ] internalUseMods = ['run2_common', 'run2_25ns_specific', @@ -58,7 +59,7 @@ def __init__(self): 'phase2_common', 'phase2_tracker', 'phase2_muon', 'phase2_GEM', 'phase2_GE0', 'phase2_hgcal', 'phase2_timing', 'phase2_hfnose', 'phase2_hgcalV10', 'phase2_hgcalV11', 'phase2_hgcalV12', - 'phase2_timing_layer', 'phase2_hcal', 'phase2_ecal', + 'phase2_timing_layer', 'phase2_hcal', 'phase2_ecal', 'phase2_ecal_devel', 'phase2_trigger', 'trackingLowPU', 'trackingPhase1', 'ctpps_2016', 'ctpps_2017', 'ctpps_2018', 'ctpps_2021', 'trackingPhase2PU140','highBetaStar_2018', 'tracker_apv_vfp30_2016', 'pf_badHcalMitigation', 'run2_miniAOD_80XLegacy','run2_miniAOD_94XFall17', 'run2_nanoAOD_92X', From 0a9a0c225d6f89ccbc88bade9bdb459cfdec844e Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 5 Oct 2020 11:24:20 +0200 Subject: [PATCH 10/14] ReAdd EcalCatiaGainRatiosESProducer --- .../data/simPulseShapePhaseII.db | Bin 0 -> 98304 bytes .../plugins/EcalCATIAGainRatiosESProducer.cc | 49 ++++++++++++++++++ .../python/esCATIAGainProducer_cfi.py | 12 +++++ 3 files changed, 61 insertions(+) create mode 100644 SimCalorimetry/EcalSimProducers/data/simPulseShapePhaseII.db create mode 100644 SimCalorimetry/EcalSimProducers/plugins/EcalCATIAGainRatiosESProducer.cc create mode 100644 SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py diff --git a/SimCalorimetry/EcalSimProducers/data/simPulseShapePhaseII.db b/SimCalorimetry/EcalSimProducers/data/simPulseShapePhaseII.db new file mode 100644 index 0000000000000000000000000000000000000000..cb5f462c0aa47f8a5869e3098a5a8b5f05e59ed6 GIT binary patch literal 98304 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 literal 0 HcmV?d00001 diff --git a/SimCalorimetry/EcalSimProducers/plugins/EcalCATIAGainRatiosESProducer.cc b/SimCalorimetry/EcalSimProducers/plugins/EcalCATIAGainRatiosESProducer.cc new file mode 100644 index 0000000000000..e66d3b2b5fe9d --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/plugins/EcalCATIAGainRatiosESProducer.cc @@ -0,0 +1,49 @@ +#include +#include +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ESProductHost.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CondFormats/DataRecord/interface/EcalCATIAGainRatiosRcd.h" +#include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" +#include "CondFormats/EcalObjects/src/classes.h" +// +// class declaration +// +const int kEBChannels = ecalPh2::kEBChannels; + +class EcalCATIAGainRatiosESProducer : public edm::ESProducer { +public: + EcalCATIAGainRatiosESProducer(const edm::ParameterSet& p); + + typedef std::unique_ptr ReturnType; + + ReturnType produce(const EcalCATIAGainRatiosRcd& iRecord); + +private: + double catiaGainRatio_; +}; + +using namespace edm; + +EcalCATIAGainRatiosESProducer::EcalCATIAGainRatiosESProducer(const edm::ParameterSet& p) { + std::string myname = p.getParameter("ComponentName"); + catiaGainRatio_ = p.getParameter("CATIAGainRatio"); + setWhatProduced(this); +} +//// +EcalCATIAGainRatiosESProducer::ReturnType EcalCATIAGainRatiosESProducer::produce(const EcalCATIAGainRatiosRcd& iRecord) { + auto prod = std::make_unique(); + for (int iChannel = 0; iChannel < kEBChannels; iChannel++) { + EBDetId myEBDetId = EBDetId::unhashIndex(iChannel); + double val = catiaGainRatio_; + prod->setValue(myEBDetId.rawId(), val); + } + + return prod; +} + +//Define this as a plug-in +DEFINE_FWK_EVENTSETUP_MODULE(EcalCATIAGainRatiosESProducer); diff --git a/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py b/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py new file mode 100644 index 0000000000000..83f9d520655fe --- /dev/null +++ b/SimCalorimetry/EcalSimProducers/python/esCATIAGainProducer_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +EcalCATIAGainRatiosRcd = cms.ESSource("EmptyESSource", + recordName = cms.string("EcalCATIAGainRatiosRcd"), + firstValid = cms.vuint32(1), + iovIsRunNotTime = cms.bool(True) + ) + +EcalCATIAGainRatios = cms.ESProducer("EcalCATIAGainRatiosESProducer", + ComponentName = cms.string('EcalCatiaGainProducer'), + CATIAGainRatio = cms.double(10.)) + From 2c927f78d3a3ff126ab9c6f2ca22c6beb61cbf6e Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 5 Oct 2020 11:25:09 +0200 Subject: [PATCH 11/14] Era_Phase2_Ecal_Devel --- ...e2_Ecal_Devel_cff.py => Era_Phase2C10_Ecal_Devel_cff.py} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename Configuration/Eras/python/{Era_Phase2_Ecal_Devel_cff.py => Era_Phase2C10_Ecal_Devel_cff.py} (57%) diff --git a/Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py b/Configuration/Eras/python/Era_Phase2C10_Ecal_Devel_cff.py similarity index 57% rename from Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py rename to Configuration/Eras/python/Era_Phase2C10_Ecal_Devel_cff.py index c059480be1e67..f3789e8f0aeaf 100644 --- a/Configuration/Eras/python/Era_Phase2_Ecal_Devel_cff.py +++ b/Configuration/Eras/python/Era_Phase2C10_Ecal_Devel_cff.py @@ -1,8 +1,8 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 -from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose +from Configuration.Eras.Era_Phase2C10_cff import Phase2C10 from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel +from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose -Phase2_Ecal_Devel = cms.ModifierChain(Phase2C9, phase2_hfnose,phase2_ecal_devel) +Phase2C10_Ecal_Devel = cms.ModifierChain(Phase2C10,phase2_hfnose,phase2_ecal_devel) From 1fbb4e89088701956b0042efb7f9fe48bd366ab2 Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 5 Oct 2020 14:52:55 +0200 Subject: [PATCH 12/14] Add Phase2 Ecal Modifier in Digi.cff --- .../StandardSequences/python/Digi_cff.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Configuration/StandardSequences/python/Digi_cff.py b/Configuration/StandardSequences/python/Digi_cff.py index 08700f8f65a20..2d9d7c732e53e 100644 --- a/Configuration/StandardSequences/python/Digi_cff.py +++ b/Configuration/StandardSequences/python/Digi_cff.py @@ -83,3 +83,23 @@ 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') + 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) + From aaf630d1acc838fd770611e232eb1f577deb78a2 Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 5 Oct 2020 17:36:56 +0200 Subject: [PATCH 13/14] Change name in Eras --- Configuration/StandardSequences/python/Eras.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 91e2ac402cf07..40c0827ab433c 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -44,7 +44,7 @@ def __init__(self): 'Phase2C11_dd4hep', 'Phase2C12_dd4hep', 'Phase2C11M9', - 'Phase2_Ecal_Devel' + 'Phase2C10_Ecal_Devel' ] internalUseMods = ['run2_common', 'run2_25ns_specific', From 56838fe6b38b58c53e9891ede07ec624122b27f6 Mon Sep 17 00:00:00 2001 From: Dario Date: Thu, 8 Oct 2020 09:35:09 +0200 Subject: [PATCH 14/14] Add code formats --- .../EcalSimProducers/src/EcalDigiProducer.cc | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc index 6ba2c8e9e87f2..ceb79769f5ebd 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc @@ -1,3 +1,5 @@ +#include + #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" #include "FWCore/Framework/interface/Event.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h" @@ -220,47 +222,47 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume } } - m_EBCorrNoise[0].reset(new CorrelatedNoisifier(ebMatrix[0])); - m_EECorrNoise[0].reset(new CorrelatedNoisifier(eeMatrix[0])); - m_EBCorrNoise[1].reset(new CorrelatedNoisifier(ebMatrix[1])); - m_EECorrNoise[1].reset(new CorrelatedNoisifier(eeMatrix[1])); - m_EBCorrNoise[2].reset(new CorrelatedNoisifier(ebMatrix[2])); - m_EECorrNoise[2].reset(new CorrelatedNoisifier(eeMatrix[2])); - - m_Coder.reset(new EcalCoder(addNoise, - m_PreMix1, - m_EBCorrNoise[0].get(), - m_EECorrNoise[0].get(), - m_EBCorrNoise[1].get(), - m_EECorrNoise[1].get(), - m_EBCorrNoise[2].get(), - m_EECorrNoise[2].get())); - - m_ElectronicsSim.reset( - new EcalElectronicsSim_Ph1(m_ParameterMap.get(), m_Coder.get(), applyConstantTerm, rmsConstantTerm)); + m_EBCorrNoise[0] = std::make_unique>(ebMatrix[0]); + m_EECorrNoise[0] = std::make_unique>(eeMatrix[0]); + m_EBCorrNoise[1] = std::make_unique>(ebMatrix[1]); + m_EECorrNoise[1] = std::make_unique>(eeMatrix[1]); + m_EBCorrNoise[2] = std::make_unique>(ebMatrix[2]); + m_EECorrNoise[2] = std::make_unique>(eeMatrix[2]); + + m_Coder = std::make_unique(addNoise, + m_PreMix1, + m_EBCorrNoise[0].get(), + m_EECorrNoise[0].get(), + m_EBCorrNoise[1].get(), + m_EECorrNoise[1].get(), + m_EBCorrNoise[2].get(), + m_EECorrNoise[2].get()); + + m_ElectronicsSim = + std::make_unique(m_ParameterMap.get(), m_Coder.get(), applyConstantTerm, rmsConstantTerm); if (m_apdSeparateDigi) { - m_APDCoder.reset(new EcalCoder(false, - m_PreMix1, - m_EBCorrNoise[0].get(), - m_EECorrNoise[0].get(), - m_EBCorrNoise[1].get(), - m_EECorrNoise[1].get(), - m_EBCorrNoise[2].get(), - m_EECorrNoise[2].get())); - - m_APDElectronicsSim.reset( - new EcalElectronicsSim_Ph1(m_ParameterMap.get(), m_APDCoder.get(), applyConstantTerm, rmsConstantTerm)); - - m_APDDigitizer.reset(new EBDigitizer(m_APDResponse.get(), m_APDElectronicsSim.get(), false)); + m_APDCoder = std::make_unique(false, + m_PreMix1, + m_EBCorrNoise[0].get(), + m_EECorrNoise[0].get(), + m_EBCorrNoise[1].get(), + m_EECorrNoise[1].get(), + m_EBCorrNoise[2].get(), + m_EECorrNoise[2].get()); + + m_APDElectronicsSim = std::make_unique( + m_ParameterMap.get(), m_APDCoder.get(), applyConstantTerm, rmsConstantTerm); + + m_APDDigitizer = std::make_unique(m_APDResponse.get(), m_APDElectronicsSim.get(), false); } if (m_doEB) { - m_BarrelDigitizer.reset(new EBDigitizer(m_EBResponse.get(), m_ElectronicsSim.get(), addNoise)); + m_BarrelDigitizer = std::make_unique(m_EBResponse.get(), m_ElectronicsSim.get(), addNoise); } if (m_doEE) { - m_EndcapDigitizer.reset(new EEDigitizer(m_EEResponse.get(), m_ElectronicsSim.get(), addNoise)); + m_EndcapDigitizer = std::make_unique(m_EEResponse.get(), m_ElectronicsSim.get(), addNoise); } }