diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_IonizationCluster.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_IonizationCluster.h index ca9614c28fd7d6505fd40c288f006c2d471adf00..24c45488efd3388249156aa1e7e03dc2c6a229ff 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_IonizationCluster.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_IonizationCluster.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef MM_DIGITIZATION_MM_IONIZATIONCLUSTER_H @@ -63,17 +63,16 @@ class MM_IonizationCluster { MM_IonizationCluster (); MM_IonizationCluster (float HitX, float IonizationX, float IonizationY); - MM_IonizationCluster (const MM_IonizationCluster& MM_IonizationCluster); void createElectrons(TRandom3* rndm); void propagateElectrons(float lorentzAngle, float driftVel); - std::vector<MM_Electron*> getElectrons() const; + std::vector<std::unique_ptr<MM_Electron>>& getElectrons(); float getHitX() const { return m_HitX; } TVector2 getIonizationStart() const { return m_IonizationStart; } private: // Members supplied by user - std::vector<MM_Electron*> m_Electrons; + std::vector<std::unique_ptr<MM_Electron>> m_Electrons; float m_HitX; TVector2 m_IonizationStart; diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripResponse.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripResponse.h index 672888aad21546cfbd3e6157b0319affb566b7fc..58352dda9bebd56cdc2d07aa8a54cf37d17803b8 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripResponse.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripResponse.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef MM_DIGITIZATION_MM_STRIPRESPONSE_H @@ -22,7 +22,7 @@ class MM_StripResponse { public: MM_StripResponse(); - MM_StripResponse(std::vector<MM_IonizationCluster> IonizationClusters, float timeResolution, float stripPitch, int stripID, int minstripID, int maxstripID); + MM_StripResponse(std::vector<std::unique_ptr<MM_IonizationCluster>>& IonizationClusters, float timeResolution, float stripPitch, int stripID, int minstripID, int maxstripID); void timeOrderElectrons(); void calculateTimeSeries(float thetaD, int gasgap); // void calculateTimeSeries(); @@ -41,7 +41,7 @@ class MM_StripResponse { int getNElectrons(); float getTotalCharge(); - std::vector<MM_Electron*> getElectrons(); + std::vector<std::unique_ptr<MM_Electron>>& getElectrons(); private: @@ -51,7 +51,7 @@ class MM_StripResponse { int m_minstripID; int m_maxstripID; - std::vector<MM_Electron*> m_Electrons; + std::vector<std::unique_ptr<MM_Electron>> m_Electrons; // First argument is time bin, second argument is strip ID std::map< int, std::map<int,float> > m_stripCharges; diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripsResponseSimulation.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripsResponseSimulation.h index 4907d9584be1475a27b87cb1d732682730ebb242..c4d56bfca5b0b1e0bd9dd2174e87337ca2f870d8 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripsResponseSimulation.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_StripsResponseSimulation.h @@ -166,7 +166,7 @@ private: MM_StripsResponseSimulation & operator=(const MM_StripsResponseSimulation &right); MM_StripsResponseSimulation(const MM_StripsResponseSimulation&); - std::vector<MM_IonizationCluster> m_IonizationClusters; + std::vector<std::unique_ptr<MM_IonizationCluster>> m_IonizationClusters; std::map<TString, TH1F* > m_mapOfHistograms; std::map<TString, TH2F* > m_mapOf2DHistograms; diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_IonizationCluster.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_IonizationCluster.cxx index a71276303a9bcbf8bd61215667316adae7e19080..5c01bfd8248b0665c33696ba528bdb218893c1d5 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_IonizationCluster.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_IonizationCluster.cxx @@ -10,13 +10,6 @@ MM_IonizationCluster::MM_IonizationCluster () {} MM_IonizationCluster::MM_IonizationCluster (float HitX, float IonizationX, float IonizationY) : m_HitX(HitX), m_IonizationStart(IonizationX, IonizationY) {} -MM_IonizationCluster::MM_IonizationCluster (const MM_IonizationCluster& MM_IonizationCluster) { - - m_HitX = MM_IonizationCluster.getHitX(); - m_IonizationStart = MM_IonizationCluster.getIonizationStart(); - m_Electrons = MM_IonizationCluster.getElectrons(); - -} void MM_IonizationCluster::createElectrons(TRandom3* rndm) { @@ -24,7 +17,7 @@ void MM_IonizationCluster::createElectrons(TRandom3* rndm) { int Nelectron = MM_IonizationCluster::s_NelectronProb.FindBin(MM_IonizationCluster::s_NelectronProb.GetRandom()); m_Electrons.reserve(Nelectron); for (int iElectron = 0; iElectron<Nelectron; iElectron++) - m_Electrons.push_back(new MM_Electron(m_IonizationStart.X()+m_HitX, m_IonizationStart.Y())); + m_Electrons.push_back(std::make_unique<MM_Electron>(m_IonizationStart.X()+m_HitX, m_IonizationStart.Y())); } void MM_IonizationCluster::propagateElectrons(float lorentzAngle, float driftVel) { @@ -35,4 +28,4 @@ void MM_IonizationCluster::propagateElectrons(float lorentzAngle, float driftVel } // accessors -std::vector<MM_Electron*> MM_IonizationCluster::getElectrons() const { return m_Electrons; } +std::vector<std::unique_ptr<MM_Electron>>& MM_IonizationCluster::getElectrons() { return m_Electrons; } diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripResponse.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripResponse.cxx index 663d14296df1f387d1f25e142f3a714ccbc70066..a45395b4c04581a3f1c94210135239b64fd1dad7 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripResponse.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripResponse.cxx @@ -6,11 +6,11 @@ MM_StripResponse::MM_StripResponse() {} -MM_StripResponse::MM_StripResponse(std::vector<MM_IonizationCluster> IonizationClusters, float timeResolution, float stripPitch, int stripID, int minstripID, int maxstripID) : m_timeResolution(timeResolution), m_stripPitch(stripPitch), m_stripID(stripID), m_minstripID(minstripID), m_maxstripID(maxstripID) { +MM_StripResponse::MM_StripResponse(std::vector<std::unique_ptr<MM_IonizationCluster>>& IonizationClusters, float timeResolution, float stripPitch, int stripID, int minstripID, int maxstripID) : m_timeResolution(timeResolution), m_stripPitch(stripPitch), m_stripID(stripID), m_minstripID(minstripID), m_maxstripID(maxstripID) { for (auto& IonizationCluster : IonizationClusters) - for (auto& Electron : IonizationCluster.getElectrons()) - m_Electrons.push_back(Electron); + for (auto& Electron : IonizationCluster->getElectrons()) + m_Electrons.push_back(std::move(Electron)); } @@ -20,19 +20,19 @@ int MM_StripResponse::getNElectrons(){ float MM_StripResponse::getTotalCharge(){ float qtot = 0; - for(const MM_Electron* electron : m_Electrons) { + for(const std::unique_ptr<MM_Electron>& electron : m_Electrons) { qtot += electron->getCharge(); } return qtot; } -std::vector<MM_Electron*> MM_StripResponse::getElectrons(){ +std::vector<std::unique_ptr<MM_Electron>>& MM_StripResponse::getElectrons(){ return m_Electrons; } void MM_StripResponse::timeOrderElectrons() { - std::sort(m_Electrons.begin(), m_Electrons.end(), [](const MM_Electron* a, const MM_Electron* b) -> bool { return a->getTime() < b->getTime(); }); + std::sort(m_Electrons.begin(), m_Electrons.end(), [](const std::unique_ptr<MM_Electron>& a, const std::unique_ptr<MM_Electron>& b) -> bool { return a->getTime() < b->getTime(); }); } diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripsResponseSimulation.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripsResponseSimulation.cxx index 189f71939161e70689b9470407a3a70ceb61a837..c287ef08e37cff56a556b28b7540085973fb9b41 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripsResponseSimulation.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_StripsResponseSimulation.cxx @@ -220,10 +220,10 @@ void MM_StripsResponseSimulation::whichStrips( const float & hitx, while (pathLengthTraveled < pathLength){ // N.B. Needs correction from alpha angle still... - MM_IonizationCluster IonizationCluster(hitx, pathLengthTraveled*sin(theta), pathLengthTraveled*cos(theta)); - IonizationCluster.createElectrons(m_random); + std::unique_ptr<MM_IonizationCluster> IonizationCluster = std::make_unique<MM_IonizationCluster>(hitx, pathLengthTraveled*sin(theta), pathLengthTraveled*cos(theta)); + IonizationCluster -> createElectrons(m_random); - TVector2 initialPosition = IonizationCluster.getIonizationStart(); + TVector2 initialPosition = IonizationCluster->getIonizationStart(); ATH_MSG_DEBUG("New interaction starting at x,y, pathLengthTraveled: " << initialPosition.X() @@ -233,16 +233,16 @@ void MM_StripsResponseSimulation::whichStrips( const float & hitx, << pathLengthTraveled ); - for (auto& Electron : IonizationCluster.getElectrons()) { + for (auto& Electron : IonizationCluster->getElectrons()) { Electron->setOffsetPosition(getTransverseDiffusion(initialPosition.Y()) , getLongitudinalDiffusion(initialPosition.Y()) ); } - IonizationCluster.propagateElectrons( lorentzAngle , m_driftVelocity ); + IonizationCluster->propagateElectrons( lorentzAngle , m_driftVelocity ); int tmpEffectiveNElectrons = 0; - for (auto& Electron : IonizationCluster.getElectrons()){ + for (auto& Electron : IonizationCluster->getElectrons()){ //float effectiveCharge = m_polyaFunction->GetRandom(); float effectiveCharge = getEffectiveCharge(); @@ -264,7 +264,7 @@ void MM_StripsResponseSimulation::whichStrips( const float & hitx, if(m_writeOutputFile) m_mapOfHistograms["effectiveNElectrons"]->Fill( tmpEffectiveNElectrons / m_avalancheGain); //--- - m_IonizationClusters.push_back(IonizationCluster); + m_IonizationClusters.push_back(std::move(IonizationCluster)); pathLengthTraveled += getPathLengthTraveled(); @@ -310,15 +310,16 @@ void MM_StripsResponseSimulation::whichStrips( const float & hitx, if(m_outputFile) m_outputFile->cd(); TGraph grIonizationXZ( m_IonizationClusters.size() ); for (int iIonization=0; iIonization < (int) m_IonizationClusters.size(); iIonization++) { - TVector2 ionizationPosition( m_IonizationClusters.at(iIonization).getIonizationStart() ); + TVector2 ionizationPosition( m_IonizationClusters.at(iIonization)->getIonizationStart() ); grIonizationXZ.SetPoint( iIonization, ionizationPosition.X(), ionizationPosition.Y() ); } grIonizationXZ.Write("ionizationXZ"); TGraph grElectronsXZ( stripResponseObject.getNElectrons() ); - std::vector<MM_Electron*> tmpElectrons = stripResponseObject.getElectrons(); - for (int iElectron=0; iElectron < (int) tmpElectrons.size(); iElectron++){ - grElectronsXZ.SetPoint( iElectron, tmpElectrons.at(iElectron)->getX(), tmpElectrons.at(iElectron)->getY() ); + int iElectron = 0; + for (const auto & electron: stripResponseObject.getElectrons()){ + grElectronsXZ.SetPoint( iElectron, electron->getX(), electron->getY() ); + iElectron++; } grElectronsXZ.Write("electronsXZ"); }