ATLAS Offline Software
Loading...
Searching...
No Matches
ReadMeta.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
9
10#include "ReadMeta.h"
11
12// the user data-class definitions
14
15#include "GaudiKernel/IIncidentSvc.h"
16#include "GaudiKernel/FileIncident.h"
17
19
20using namespace AthPoolEx;
21
22//___________________________________________________________________________
23ReadMeta::ReadMeta(const std::string& type, const std::string& name, const IInterface* parent) :
24 base_class(type, name, parent),
25 m_pMetaDataStore ("StoreGateSvc/MetaDataStore", name),
26 m_pInputStore ("StoreGateSvc/InputMetaDataStore", name) {
27}
28//___________________________________________________________________________
30 ATH_MSG_INFO("in initialize()");
31
32 // locate the DetectorStore and initialize our local ptr
33 ATH_CHECK( m_pMetaDataStore.retrieve() );
34 ATH_CHECK( m_pInputStore.retrieve() );
35
36 // Set to be listener for end of event
37 ServiceHandle<IIncidentSvc> incSvc("IncidentSvc", this->name());
38 ATH_CHECK( incSvc.retrieve() );
39 incSvc->addListener(this, "BeginInputFile", 60); // pri has to be < 100 to be after MetaDataSvc.
40 incSvc->addListener(this, "EndInputFile", 50); // pri has to be > 10 to be before MetaDataSvc.
41 return StatusCode::SUCCESS;
42}
43//__________________________________________________________________________
44void ReadMeta::handle(const Incident& inc) {
45 ATH_MSG_DEBUG("handle() " << inc.type());
46 const FileIncident* fileInc = dynamic_cast<const FileIncident*>(&inc);
47 if (fileInc == nullptr) {
48 ATH_MSG_ERROR(" Unable to get FileName from BeginInputFile/EndInputFile incident");
49 return;
50 }
51 ATH_MSG_DEBUG("handle() " << inc.type() << " for " << fileInc->fileName());
52}
53//__________________________________________________________________________
55{
56 ATH_MSG_DEBUG("saw BeginInputFile incident.");
57 if (m_pInputStore->contains<ExampleHitContainer>("PedestalWriteData")) {
58 const ExampleHitContainer* ep = nullptr;
59 ExampleHitContainer* ep_out = nullptr;
60 ATH_CHECK( m_pInputStore->retrieve(ep, "PedestalWriteData") );
61 if (!m_pMetaDataStore->contains<ExampleHitContainer>("PedestalWriteData")) {
62 auto ep_out_unique = std::make_unique<ExampleHitContainer>();
63 const ExampleHit* entry = *ep->begin();
64 auto entry_out = std::make_unique<ExampleHit>();
65 entry_out->setX(entry->getX());
66 entry_out->setY(entry->getY());
67 entry_out->setZ(entry->getZ());
68 entry_out->setDetector(entry->getDetector());
69 ep_out_unique->push_back(std::move(entry_out));
70 ep_out = ep_out_unique.get();
71 ATH_CHECK( m_pMetaDataStore->record(std::move(ep_out_unique), "PedestalWriteData") );
72 } else {
73 ATH_CHECK( m_pMetaDataStore->retrieve(ep_out, "PedestalWriteData") );
74 const ExampleHit* entry = *ep->begin();
75 ExampleHit* entry_out = *ep_out->begin();
76 int weight = entry->getDetector().size() - 2;
77 int weight_out = entry_out->getDetector().size() - 2;
78 entry_out->setX((entry->getX() * weight + entry_out->getX() * weight_out) / (weight + weight_out));
79 entry_out->setY((entry->getY() * weight + entry_out->getY() * weight_out) / (weight + weight_out));
80 entry_out->setZ((entry->getZ() * weight + entry_out->getZ() * weight_out) / (weight + weight_out));
81 entry_out->setDetector(entry->getDetector().substr(0, entry->getDetector().size() - 1) + entry_out->getDetector().substr(1));
82 }
83 if (ep_out != nullptr) {
84 for (const ExampleHit* obj : *ep_out) {
85 ATH_MSG_INFO("Pedestal x = " << obj->getX() << " y = " << obj->getY() << " z = " << obj->getZ() << " string = " << obj->getDetector());
86 }
87 }
88 }
89
90 return StatusCode::SUCCESS;
91}
92//__________________________________________________________________________
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_INFO(x,...)
This file contains the class definition for the ExampleHitContainer class.
This file contains the class definition for the ReadMeta class.
virtual StatusCode beginInputFile(const SG::SourceID &) override final
Function called when a new input file is opened.
Definition ReadMeta.cxx:54
ServiceHandle< StoreGateSvc > m_pMetaDataStore
Definition ReadMeta.h:48
ReadMeta(const std::string &type, const std::string &name, const IInterface *parent)
Definition ReadMeta.cxx:23
virtual void handle(const Incident &incident) override final
Incident service handle listening for BeginInputFile and EndInputFile.
Definition ReadMeta.cxx:44
ServiceHandle< StoreGateSvc > m_pInputStore
Definition ReadMeta.h:49
virtual StatusCode initialize() override final
Gaudi AlgTool Interface method implementations:
Definition ReadMeta.cxx:29
const T * get(size_type n) const
Access an element, as an rvalue.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
This class provides a data vector for ExampleHit objects in AthenaPool.
This class provides a dummy hit data object for AthenaPool.
Definition ExampleHit.h:24
void setZ(double z)
Set the Z coordinate.
Definition ExampleHit.h:55
void setX(double x)
Set the X coordinate.
Definition ExampleHit.h:47
double getZ() const
Definition ExampleHit.h:40
void setDetector(const std::string &detector)
Set the detector string.
Definition ExampleHit.h:59
double getX() const
Definition ExampleHit.h:34
void setY(double y)
Set the Y coordinate.
Definition ExampleHit.h:51
double getY() const
Definition ExampleHit.h:37
const std::string & getDetector() const
Definition ExampleHit.h:43