From 81e935a9b2fe359259e2bd208bd41acb39134d9a Mon Sep 17 00:00:00 2001 From: Patrick Scholer <patrick.scholer@cern.ch> Date: Fri, 11 Oct 2019 09:45:57 +0200 Subject: [PATCH] manual merge of the neighbor logic switch --- .../MM_ElectronicsResponseSimulation.h | 19 ++++++----- .../src/MM_ElectronicsResponseSimulation.cxx | 33 ++++++++++--------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_ElectronicsResponseSimulation.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_ElectronicsResponseSimulation.h index 7d7624c1e68..7eda715664c 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_ElectronicsResponseSimulation.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_ElectronicsResponseSimulation.h @@ -24,6 +24,7 @@ */ +#include "GaudiKernel/AlgFactory.h" #include "GaudiKernel/IToolSvc.h" #include "GaudiKernel/Service.h" #include "AthenaKernel/MsgStreamMember.h" @@ -79,8 +80,8 @@ public : void initialize(); void clearValues (); - void vmmPeakResponseFunction(const vector <int> & numberofStrip, const vector<vector <float>> & qStrip, const vector<vector <float>> & tStrip); - void vmmThresholdResponseFunction(const vector <int> & numberofStrip, const vector<vector <float>> & qStrip, const vector<vector <float>> & tStrip); + void vmmPeakResponseFunction(const std::vector <int> & numberofStrip, const std::vector<std::vector <float>> & qStrip, const std::vector<std::vector <float>> & tStrip); + void vmmThresholdResponseFunction(const std::vector <int> & numberofStrip, const std::vector<std::vector <float>> & qStrip, const std::vector<std::vector <float>> & tStrip); MM_DigitToolOutput getPeakResponseFrom(const MM_ElectronicsToolInput & digiInput); MM_DigitToolOutput getThresholdResponseFrom(const MM_ElectronicsToolInput & digiInput); @@ -102,6 +103,7 @@ public : inline void setStripResponseQThreshold (float val) { m_stripResponseQThreshold = val; }; inline void setStripResponseDriftVelocity (float val) { m_stripResponseDriftVelocity = val; }; inline void setStripResponseDriftGapWidth (float val) { m_stripResponseDriftGapWidth = val; }; + inline void setNeighborLogic (bool val) { m_useNeighborLogic = val; }; float getPeakTime() const { return m_peakTime;}; @@ -113,9 +115,9 @@ public : float getARTdeadtime() const { return m_artDeadTime;}; - vector <float> getTStripElectronicsAbThr () const { return m_tStripElectronicsAbThr;}; - vector <float> getQStripElectronics () const { return m_qStripElectronics;}; - vector <int> getNStripElectronics () const { return m_nStripElectronics;}; + std::vector <float> getTStripElectronicsAbThr () const { return m_tStripElectronicsAbThr;}; + std::vector <float> getQStripElectronics () const { return m_qStripElectronics;}; + std::vector <int> getNStripElectronics () const { return m_nStripElectronics;}; private: @@ -130,12 +132,13 @@ private: float m_stripResponseQThreshold; float m_stripResponseDriftGapWidth; float m_stripResponseDriftVelocity; + bool m_useNeighborLogic; int m_decoupleShaperFunctionParamaters; - vector <float> m_tStripElectronicsAbThr; - vector <float> m_qStripElectronics; - vector <int> m_nStripElectronics; + std::vector <float> m_tStripElectronicsAbThr; + std::vector <float> m_qStripElectronics; + std::vector <int> m_nStripElectronics; TF1 *m_h_intFn; diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx index 869b11dd17e..ec01ae082f2 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx @@ -39,6 +39,7 @@ MM_ElectronicsResponseSimulation::MM_ElectronicsResponseSimulation(): m_stripResponseQThreshold(0), m_stripResponseDriftGapWidth(0), m_stripResponseDriftVelocity(0), + m_useNeighborLogic(true), m_decoupleShaperFunctionParamaters(false) { } @@ -100,8 +101,7 @@ MM_DigitToolOutput MM_ElectronicsResponseSimulation::getThresholdResponseFrom(co return tmp; } /*******************************************************************************/ -void MM_ElectronicsResponseSimulation::vmmPeakResponseFunction(const vector <int> & numberofStrip, const vector<vector <float>> & qStrip, const vector<vector <float>> & tStrip){ - +void MM_ElectronicsResponseSimulation::vmmPeakResponseFunction(const std::vector <int> & numberofStrip, const std::vector<std::vector <float>> & qStrip, const std::vector<std::vector <float>> & tStrip){ for (unsigned int ii = 0; ii < numberofStrip.size(); ii++) { //find min and max times for each strip: @@ -110,26 +110,29 @@ void MM_ElectronicsResponseSimulation::vmmPeakResponseFunction(const vector <int double maxChargeRightNeighbor = 0; // find the maximum charge: - if ( ii > 0 ) { - shaperInputTime = tStrip.at(ii-1); - shaperInputCharge = qStrip.at(ii-1); - maxChargeLeftNeighbor = m_h_intFn->GetMaximum(m_timeWindowLowerOffset,m_timeWindowUpperOffset); - } + if(m_useNeighborLogic){// only check neighbor strips if VMM neighbor logic is enabled + if ( ii > 0 ) { + shaperInputTime = tStrip.at(ii-1); + shaperInputCharge = qStrip.at(ii-1); + maxChargeLeftNeighbor = m_h_intFn->GetMaximum(m_timeWindowLowerOffset,m_timeWindowUpperOffset); + } - if ( ii+1 < numberofStrip.size() ) { - shaperInputTime = tStrip.at(ii+1); - shaperInputCharge = qStrip.at(ii+1); - maxChargeRightNeighbor = m_h_intFn->GetMaximum(m_timeWindowLowerOffset,m_timeWindowUpperOffset); + if ( ii+1 < numberofStrip.size() ) { + shaperInputTime = tStrip.at(ii+1); + shaperInputCharge = qStrip.at(ii+1); + maxChargeRightNeighbor = m_h_intFn->GetMaximum(m_timeWindowLowerOffset,m_timeWindowUpperOffset); + } } - shaperInputTime = tStrip.at(ii); shaperInputCharge = qStrip.at(ii); maxChargeThisStrip = m_h_intFn->GetMaximum(m_timeWindowLowerOffset,m_timeWindowUpperOffset); + //check if neighbor strip was above threshold + bool neighborFired = maxChargeLeftNeighbor > m_electronicsThreshold || maxChargeRightNeighbor > m_electronicsThreshold; - // Look at strip if it or its neighbor was above threshold: - if ( maxChargeLeftNeighbor > m_electronicsThreshold || maxChargeRightNeighbor > m_electronicsThreshold || maxChargeThisStrip > m_electronicsThreshold ) { + // Look at strip if it or its neighbor was above threshold and if neighbor logic of the VMM is enabled: + if (maxChargeThisStrip > m_electronicsThreshold || (m_useNeighborLogic && neighborFired) ) { shaperInputTime = tStrip.at(ii); shaperInputCharge = qStrip.at(ii); // float localPeak = 0; @@ -165,7 +168,7 @@ void MM_ElectronicsResponseSimulation::vmmPeakResponseFunction(const vector <int -void MM_ElectronicsResponseSimulation::vmmThresholdResponseFunction(const vector <int> & numberofStrip, const vector<vector <float>> & qStrip, const vector<vector <float>> & tStrip){ +void MM_ElectronicsResponseSimulation::vmmThresholdResponseFunction(const std::vector <int> & numberofStrip, const std::vector<std::vector <float>> & qStrip, const std::vector<std::vector <float>> & tStrip){ for (unsigned int ii = 0; ii < numberofStrip.size(); ii++) { -- GitLab