From 8f87ef4afdb35add4e8e56d108c780ab74daa889 Mon Sep 17 00:00:00 2001
From: Thomas Madlener <thomas.madlener@desy.de>
Date: Fri, 10 Feb 2023 18:16:50 +0100
Subject: [PATCH] Propagate double parameters to outputs and extract event
 weight

---
 DDG4/edm4hep/Geant4Output2EDM4hep.cpp | 13 ++++++++++---
 DDG4/lcio/Geant4Output2LCIO.cpp       |  6 ++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/DDG4/edm4hep/Geant4Output2EDM4hep.cpp b/DDG4/edm4hep/Geant4Output2EDM4hep.cpp
index e4df3b32c..f22d2beca 100644
--- a/DDG4/edm4hep/Geant4Output2EDM4hep.cpp
+++ b/DDG4/edm4hep/Geant4Output2EDM4hep.cpp
@@ -96,15 +96,19 @@ namespace dd4hep {
     
     template <> void EventParameters::extractParameters(podio::Frame& frame)   {
       for(auto const& p: this->intParameters()) {
-	std::cout << "Saving event parameter: " << p.first << std::endl;
+        printout(DEBUG, "Geant4OutputEDM4hep", "Saving event parameter: %s", p.first);
         frame.putParameter(p.first, p.second);
       }
       for(auto const& p: this->fltParameters()) {
-	std::cout << "Saving event parameter: " << p.first << std::endl;
+        printout(DEBUG, "Geant4OutputEDM4hep", "Saving event parameter: %s", p.first);
         frame.putParameter(p.first, p.second);
       }
       for(auto const& p: this->strParameters()) {
-	std::cout << "Saving event parameter: " << p.first << std::endl;
+        printout(DEBUG, "Geant4OutputEDM4hep", "Saving event parameter: %s", p.first);
+        frame.putParameter(p.first, p.second);
+      }
+      for (auto const& p: this->dblParameters()) {
+        printout(DEBUG, "Geant4OutputEDM4hep", "Saving event parameter: %s", p.first);
         frame.putParameter(p.first, p.second);
       }
     }
@@ -368,11 +372,13 @@ void Geant4Output2EDM4hep::saveEvent(OutputContext<G4Event>& ctxt)  {
   int runNumber(0), eventNumber(0);
   const int eventNumberOffset(m_eventNumberOffset > 0 ? m_eventNumberOffset : 0);
   const int runNumberOffset(m_runNumberOffset > 0 ? m_runNumberOffset : 0);
+  double eventWeight{0};
   // Get event number, run number and parameters from extension ...
   if ( parameters ) {
     runNumber = parameters->runNumber() + runNumberOffset;
     eventNumber = parameters->eventNumber() + eventNumberOffset;
     parameters->extractParameters(m_frame);
+    eventWeight = m_frame.getParameter<double>("EventWeights");
   } else { // ... or from DD4hep framework
     runNumber = m_runNo + runNumberOffset;
     eventNumber = ctxt.context->GetEventID() + eventNumberOffset;
@@ -384,6 +390,7 @@ void Geant4Output2EDM4hep::saveEvent(OutputContext<G4Event>& ctxt)  {
   auto header = header_collection.create();
   header.setRunNumber(runNumber);
   header.setEventNumber(eventNumber);
+  header.setWeight(eventWeight);
   //not implemented in EDM4hep ?  header.setDetectorName(context()->detectorDescription().header().name());
   header.setTimeStamp( std::time(nullptr) ) ;
   m_frame.put( std::move(header_collection), "EventHeader");
diff --git a/DDG4/lcio/Geant4Output2LCIO.cpp b/DDG4/lcio/Geant4Output2LCIO.cpp
index 3cbc6ec51..edc691700 100644
--- a/DDG4/lcio/Geant4Output2LCIO.cpp
+++ b/DDG4/lcio/Geant4Output2LCIO.cpp
@@ -55,6 +55,9 @@ namespace dd4hep {
       for(auto const& ival: this->strParameters()) {
         lcparameters.setValues(ival.first, ival.second);
       }
+      for(auto const& ival: this->dblParameters()) {
+        lcparameters.setValues(ival.first, ival.second);
+      }
     }
 
 
@@ -371,11 +374,13 @@ void Geant4Output2LCIO::saveEvent(OutputContext<G4Event>& ctxt)  {
   int runNumber(0), eventNumber(0);
   const int eventNumberOffset(m_eventNumberOffset > 0 ? m_eventNumberOffset : 0);
   const int runNumberOffset(m_runNumberOffset > 0 ? m_runNumberOffset : 0);
+  double eventWeight{0};
   // Get event number, run number and parameters from extension ...
   if (parameters) {
     runNumber = parameters->runNumber() + runNumberOffset;
     eventNumber = parameters->eventNumber() + eventNumberOffset;
     parameters->extractParameters(*e);
+    eventWeight = e->getParameters().getDoubleVal("EventWeights");
   } else {  // ... or from DD4hep framework
     runNumber = m_runNo + runNumberOffset;
     eventNumber = ctxt.context->GetEventID() + eventNumberOffset;
@@ -383,6 +388,7 @@ void Geant4Output2LCIO::saveEvent(OutputContext<G4Event>& ctxt)  {
   print("+++ Saving LCIO event %d run %d ....", eventNumber, runNumber);
   e->setRunNumber(runNumber);
   e->setEventNumber(eventNumber);
+  e->setWeight(eventWeight);
   e->setDetectorName(context()->detectorDescription().header().name());
   saveEventParameters<int>(e, m_eventParametersInt);
   saveEventParameters<float>(e, m_eventParametersFloat);
-- 
GitLab