diff --git a/Configuration/Eras/python/Era_Run3_2024_approxSiStripClusters_cff.py b/Configuration/Eras/python/Era_Run3_2024_approxSiStripClusters_cff.py new file mode 100644 index 0000000000000..bc713d924a51d --- /dev/null +++ b/Configuration/Eras/python/Era_Run3_2024_approxSiStripClusters_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_2024_cff import Run3_2024 +from Configuration.ProcessModifiers.approxSiStripClusters_cff import approxSiStripClusters + +Run3_2024_approxSiStripClusters = cms.ModifierChain(Run3_2024, approxSiStripClusters) diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 32d766e0ab9bc..be248609c8510 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -44,6 +44,7 @@ def __init__(self): 'Run3_pp_on_PbPb_approxSiStripClusters_2023', 'Run3_pp_on_PbPb_2024', 'Run3_pp_on_PbPb_approxSiStripClusters_2024', + 'Run3_2024_approxSiStripClusters', 'Run3_dd4hep', 'Run3_DDD', 'Run3_FastSim', diff --git a/DataFormats/SiStripCluster/interface/SiStripApproximateCluster.h b/DataFormats/SiStripCluster/interface/SiStripApproximateCluster.h index 15c932e1fcd44..e4b34b11c85c2 100644 --- a/DataFormats/SiStripCluster/interface/SiStripApproximateCluster.h +++ b/DataFormats/SiStripCluster/interface/SiStripApproximateCluster.h @@ -2,19 +2,20 @@ #define DataFormats_SiStripCluster_SiStripApproximateCluster_h #include "FWCore/Utilities/interface/typedefs.h" +#include "assert.h" class SiStripCluster; class SiStripApproximateCluster { public: SiStripApproximateCluster() {} - explicit SiStripApproximateCluster(cms_uint16_t barycenter, + explicit SiStripApproximateCluster(cms_uint16_t compBarycenter, cms_uint8_t width, cms_uint8_t avgCharge, bool filter, bool isSaturated, bool peakFilter = false) - : barycenter_(barycenter), + : compBarycenter_(compBarycenter), width_(width), avgCharge_(avgCharge), filter_(filter), @@ -26,7 +27,11 @@ class SiStripApproximateCluster { float hitPredPos, bool peakFilter); - cms_uint16_t barycenter() const { return barycenter_; } + float barycenter() const { + float _barycenter = compBarycenter_ * maxBarycenter_ / maxRange_; + assert(_barycenter <= maxBarycenter_ && "Returning barycenter > maxBarycenter"); + return _barycenter; + } cms_uint8_t width() const { return width_; } cms_uint8_t avgCharge() const { return avgCharge_; } bool filter() const { return filter_; } @@ -34,12 +39,14 @@ class SiStripApproximateCluster { bool peakFilter() const { return peakFilter_; } private: - cms_uint16_t barycenter_ = 0; + cms_uint16_t compBarycenter_ = 0; cms_uint8_t width_ = 0; cms_uint8_t avgCharge_ = 0; bool filter_ = false; bool isSaturated_ = false; bool peakFilter_ = false; + static constexpr double maxRange_ = 65535.; //16 bit + static constexpr double maxBarycenter_ = 770.; static constexpr double trimMaxADC_ = 30.; static constexpr double trimMaxFracTotal_ = .15; static constexpr double trimMaxFracNeigh_ = .25; diff --git a/DataFormats/SiStripCluster/src/SiStripApproximateCluster.cc b/DataFormats/SiStripCluster/src/SiStripApproximateCluster.cc index 01b30963a083a..cc483151e91f2 100644 --- a/DataFormats/SiStripCluster/src/SiStripApproximateCluster.cc +++ b/DataFormats/SiStripCluster/src/SiStripApproximateCluster.cc @@ -1,15 +1,18 @@ #include "DataFormats/SiStripCluster/interface/SiStripApproximateCluster.h" #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" #include +#include #include SiStripApproximateCluster::SiStripApproximateCluster(const SiStripCluster& cluster, unsigned int maxNSat, float hitPredPos, bool peakFilter) { - barycenter_ = std::round(cluster.barycenter() * 10); + compBarycenter_ = std::round(cluster.barycenter() * maxRange_ / maxBarycenter_); + assert(cluster.barycenter() <= maxBarycenter_ && "Got a barycenter > maxBarycenter"); + assert(compBarycenter_ <= maxRange_ && "Filling compBarycenter > maxRange"); width_ = cluster.size(); - avgCharge_ = cluster.charge() / cluster.size(); + avgCharge_ = (cluster.charge() + cluster.size() / 2) / cluster.size(); filter_ = false; isSaturated_ = false; peakFilter_ = peakFilter; diff --git a/DataFormats/SiStripCluster/src/SiStripCluster.cc b/DataFormats/SiStripCluster/src/SiStripCluster.cc index 9deb73b4c4a22..09ad870307874 100644 --- a/DataFormats/SiStripCluster/src/SiStripCluster.cc +++ b/DataFormats/SiStripCluster/src/SiStripCluster.cc @@ -23,7 +23,7 @@ SiStripCluster::SiStripCluster(const SiStripDigiRange& range) : firstStrip_(rang } SiStripCluster::SiStripCluster(const SiStripApproximateCluster cluster, const uint16_t maxStrips) : error_x(-99999.9) { - barycenter_ = cluster.barycenter() / 10.0; + barycenter_ = cluster.barycenter(); charge_ = cluster.width() * cluster.avgCharge(); amplitudes_.resize(cluster.width(), cluster.avgCharge()); filter_ = cluster.filter(); diff --git a/DataFormats/SiStripCluster/src/classes_def.xml b/DataFormats/SiStripCluster/src/classes_def.xml old mode 100755 new mode 100644 index fa475a9e1ae50..3e88aa2ca7870 --- a/DataFormats/SiStripCluster/src/classes_def.xml +++ b/DataFormats/SiStripCluster/src/classes_def.xml @@ -25,7 +25,8 @@ - + + diff --git a/DataFormats/SiStripCluster/test/TestReadSiStripApproximateClusterCollection.cc b/DataFormats/SiStripCluster/test/TestReadSiStripApproximateClusterCollection.cc index b85bf4c96b2ec..2d401eeabd649 100644 --- a/DataFormats/SiStripCluster/test/TestReadSiStripApproximateClusterCollection.cc +++ b/DataFormats/SiStripCluster/test/TestReadSiStripApproximateClusterCollection.cc @@ -77,7 +77,7 @@ namespace edmtest { unsigned int j = 0; for (const auto& cluster : detClusters) { unsigned int iOffset = j + iEvent.id().event(); - if (cluster.barycenter() != expectedIntegralValues_[1] + iOffset) { + if (std::round(cluster.barycenter() * 65535.0 / 770.0) != expectedIntegralValues_[1] + iOffset) { throwWithMessage("barycenter does not have expected value"); } if (cluster.width() != expectedIntegralValues_[2] + iOffset) {