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 std::list<SG::ObjectWithVersion<ExampleHitContainer> > allVersions;
59 ATH_CHECK( m_pInputStore->retrieveAllVersions(allVersions, "PedestalWriteData") );
60 //const ExampleHitContainer* ep;
61 ExampleHitContainer* ep_out = nullptr;
62 for (SG::ObjectWithVersion<ExampleHitContainer>& obj : allVersions) {
63 const ExampleHitContainer* ep = obj.dataObject.cptr();
64 if (!m_pMetaDataStore->contains<ExampleHitContainer>("PedestalWriteData")) {
65 auto ep_out_unique = std::make_unique<ExampleHitContainer>();
66 const ExampleHit* entry = *ep->begin();
67 auto entry_out = std::make_unique<ExampleHit>();
68 entry_out->setX(entry->getX());
69 entry_out->setY(entry->getY());
70 entry_out->setZ(entry->getZ());
71 entry_out->setDetector(entry->getDetector());
72 ep_out_unique->push_back(std::move(entry_out));
73 ep_out = ep_out_unique.get();
74 ATH_CHECK( m_pMetaDataStore->record(std::move(ep_out_unique), "PedestalWriteData") );
75 } else {
76 ATH_CHECK( m_pMetaDataStore->retrieve(ep_out, "PedestalWriteData") );
77 const ExampleHit* entry = *ep->begin();
78 ExampleHit* entry_out = *ep_out->begin();
79 int weight = entry->getDetector().size() - 2;
80 int weight_out = entry_out->getDetector().size() - 2;
81 entry_out->setX((entry->getX() * weight + entry_out->getX() * weight_out) / (weight + weight_out));
82 entry_out->setY((entry->getY() * weight + entry_out->getY() * weight_out) / (weight + weight_out));
83 entry_out->setZ((entry->getZ() * weight + entry_out->getZ() * weight_out) / (weight + weight_out));
84 entry_out->setDetector(entry->getDetector().substr(0, entry->getDetector().size() - 1) + entry_out->getDetector().substr(1));
85 }
86 }
87 if (ep_out != nullptr) {
88 for (const ExampleHit* obj : *ep_out) {
89 ATH_MSG_INFO("Pedestal x = " << obj->getX() << " y = " << obj->getY() << " z = " << obj->getZ() << " string = " << obj->getDetector());
90 }
91 }
92 }
93
94 return StatusCode::SUCCESS;
95}
96//__________________________________________________________________________
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(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
associate a data object with its VersionedKey The object is held by a ReadHandle to delay its retriev...