diff --git a/JugDigi/src/components/CrystalEndcapsDigi.cpp b/JugDigi/src/components/CrystalEndcapsDigi.cpp index 0d60bc8c73053f8071ae20cf7b38f185fcd43fe9..5b3816d052bd3ed5cc5589cba9a931a926584e1a 100644 --- a/JugDigi/src/components/CrystalEndcapsDigi.cpp +++ b/JugDigi/src/components/CrystalEndcapsDigi.cpp @@ -32,9 +32,10 @@ namespace Jug { // ill-formed: using GaudiAlgorithm::GaudiAlgorithm; CrystalEndcapsDigi(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) { - declareProperty("inputHitCollection", m_inputHitCollection,""); - declareProperty("outputHitCollection", m_outputHitCollection, ""); - } + declareProperty("inputHitCollection", m_inputHitCollection,""); + declareProperty("outputHitCollection", m_outputHitCollection, ""); + } + StatusCode initialize() override { if (GaudiAlgorithm::initialize().isFailure()) return StatusCode::FAILURE; @@ -45,6 +46,7 @@ namespace Jug { } return StatusCode::SUCCESS; } + StatusCode execute() override { // input collections const dd4pod::CalorimeterHitCollection* simhits = m_inputHitCollection.get(); @@ -52,9 +54,10 @@ namespace Jug { auto rawhits = m_outputHitCollection.createAndPut(); eic::RawCalorimeterHitCollection* rawHitCollection = new eic::RawCalorimeterHitCollection(); for (const auto& ahit : *simhits) { + double res = m_gaussDist()/sqrt(ahit.energyDeposit()/Gaudi::Units::GeV); eic::RawCalorimeterHit rawhit( (long long) ahit.cellID(), - (long long) (ahit.energyDeposit() + m_gaussDist*sqrt(ahit.energyDeposit()))/Gaudi::Units::MeV * 100.0, + (long long) ahit.energyDeposit() * (1. + res)/Gaudi::Units::MeV * 100.0, (double) ahit.truth().time/Gaudi::Units::ns); rawhits->push_back(rawhit); } diff --git a/JugReco/src/components/ClusterRecoCoG.cpp b/JugReco/src/components/ClusterRecoCoG.cpp index f704bd98bc4be1c13ccc903dd9bb61e574940822..d253c964113663ecd4c42562048a2653c5e75278 100644 --- a/JugReco/src/components/ClusterRecoCoG.cpp +++ b/JugReco/src/components/ClusterRecoCoG.cpp @@ -32,12 +32,12 @@ class ClusterRecoCoG : public GaudiAlgorithm { public: Gaudi::Property<double> m_logWeightBase{this, "logWeightBase", 3.6}; - Gaudi::Property<std::string> m_moduleDimZName{this, "moduleDimZName", "CrystalBox_z_length"}; + Gaudi::Property<double> m_depthCorrection{this, "depthCorrection", 0.0}; + Gaudi::Property<std::string> m_moduleDimZName{this, "moduleDimZName", ""}; DataHandle<eic::ClusterCollection> m_clusterCollection{"clusterCollection", Gaudi::DataHandle::Reader, this}; // Pointer to the geometry service SmartIF<IGeoSvc> m_geoSvc; - double m_depthCorr; // ill-formed: using GaudiAlgorithm::GaudiAlgorithm; ClusterRecoCoG(const std::string& name, ISvcLocator* svcLoc) @@ -57,8 +57,10 @@ public: << "Make sure you have GeoSvc and SimSvc in the right order in the configuration." << endmsg; return StatusCode::FAILURE; } - // depth: z length of the crystal block - m_depthCorr = m_geoSvc->detector()->constantAsDouble(m_moduleDimZName); + // update depth correction if a name is provided + if (!m_moduleDimZName.value().empty()) { + m_depthCorrection = m_geoSvc->detector()->constantAsDouble(m_moduleDimZName); + } //info() << "z_length " << depth << endmsg; return StatusCode::SUCCESS; } @@ -112,7 +114,7 @@ private: // convert local position to global position, use the cell with max edep as a reference auto volman = m_geoSvc->detector()->volumeManager(); auto alignment = volman.lookupDetector(centerID).nominal(); - auto gpos = alignment.localToWorld(dd4hep::Position(x/tw, y/tw, z/tw + m_depthCorr)); + auto gpos = alignment.localToWorld(dd4hep::Position(x/tw, y/tw, z/tw + m_depthCorrection)); cl.position({gpos.x(), gpos.y(), gpos.z()}); }