Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
10 #include "ReadMeta.h"
11 
12 // the user data-class defintions
14 
15 #include "GaudiKernel/IIncidentSvc.h"
16 #include "GaudiKernel/FileIncident.h"
17 
18 #include "StoreGate/StoreGateSvc.h"
19 
20 using namespace AthPoolEx;
21 
22 //___________________________________________________________________________
23 ReadMeta::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 }
31 //___________________________________________________________________________
33  ATH_MSG_INFO("in initialize()");
34 
35  // locate the DetectorStore and initialize our local ptr
36  ATH_CHECK( m_pMetaDataStore.retrieve() );
37  ATH_CHECK( m_pInputStore.retrieve() );
38 
39  // Set to be listener for end of event
40  ServiceHandle<IIncidentSvc> incSvc("IncidentSvc", this->name());
41  ATH_CHECK( incSvc.retrieve() );
42  incSvc->addListener(this, "BeginInputFile", 60); // pri has to be < 100 to be after MetaDataSvc.
43  incSvc->addListener(this, "EndInputFile", 50); // pri has to be > 10 to be before MetaDataSvc.
44  return StatusCode::SUCCESS;
45 }
46 //__________________________________________________________________________
47 void ReadMeta::handle(const Incident& inc) {
48  ATH_MSG_DEBUG("handle() " << inc.type());
49  const FileIncident* fileInc = dynamic_cast<const FileIncident*>(&inc);
50  if (fileInc == 0) {
51  ATH_MSG_ERROR(" Unable to get FileName from BeginInputFile/EndInputFile incident");
52  return;
53  }
54  ATH_MSG_DEBUG("handle() " << inc.type() << " for " << fileInc->fileName());
55 }
56 //__________________________________________________________________________
58 {
59  ATH_MSG_DEBUG("saw BeginInputFile incident.");
60  if (m_pInputStore->contains<ExampleHitContainer>("PedestalWriteData")) {
61  std::list<SG::ObjectWithVersion<ExampleHitContainer> > allVersions;
62  if (m_pInputStore->retrieveAllVersions(allVersions, "PedestalWriteData").isFailure()) {
63  ATH_MSG_ERROR("Could not retrieve all versions for PedestalWriteData");
64  return StatusCode::FAILURE;
65  }
66  //const ExampleHitContainer* ep;
67  ExampleHitContainer* ep_out = 0;
68  for (SG::ObjectWithVersion<ExampleHitContainer>& obj : allVersions) {
69  const ExampleHitContainer* ep = obj.dataObject.cptr();
70  if (!m_pMetaDataStore->contains<ExampleHitContainer>("PedestalWriteData")) {
71  ep_out = new ExampleHitContainer();
72  const ExampleHit* entry = *ep->begin();
73  ExampleHit* entry_out = new ExampleHit();
74  entry_out->setX(entry->getX());
75  entry_out->setY(entry->getY());
76  entry_out->setZ(entry->getZ());
77  entry_out->setDetector(entry->getDetector());
78  ep_out->push_back(entry_out);
79  if (m_pMetaDataStore->record(ep_out, "PedestalWriteData").isFailure()) {
80  ATH_MSG_ERROR("Could not record DataObject: PedestalWriteData");
81  return StatusCode::FAILURE;
82  }
83  } else {
84  if (m_pMetaDataStore->retrieve(ep_out, "PedestalWriteData").isFailure()) {
85  ATH_MSG_ERROR("Could not find DataObject in output: PedestalWriteData");
86  return StatusCode::FAILURE;
87  }
88  const ExampleHit* entry = *ep->begin();
89  ExampleHit* entry_out = *ep_out->begin();
90  int weight = entry->getDetector().size() - 2;
91  int weight_out = entry_out->getDetector().size() - 2;
92  entry_out->setX((entry->getX() * weight + entry_out->getX() * weight_out) / (weight + weight_out));
93  entry_out->setY((entry->getY() * weight + entry_out->getY() * weight_out) / (weight + weight_out));
94  entry_out->setZ((entry->getZ() * weight + entry_out->getZ() * weight_out) / (weight + weight_out));
95  entry_out->setDetector(entry->getDetector().substr(0, entry->getDetector().size() - 1) + entry_out->getDetector().substr(1));
96  }
97  }
98  if (ep_out != 0) {
99  for (const ExampleHit* obj : *ep_out) {
100  ATH_MSG_INFO("Pedestal x = " << obj->getX() << " y = " << obj->getY() << " z = " << obj->getZ() << " string = " << obj->getDetector());
101  }
102  }
103  }
104 
105  return StatusCode::SUCCESS;
106 }
107 //__________________________________________________________________________
AthPoolEx::ReadMeta::initialize
virtual StatusCode initialize() override
Gaudi AlgTool Interface method implementations:
Definition: ReadMeta.cxx:32
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ExampleHit::setY
void setY(double y)
Set the Y coordinate.
Definition: ExampleHit.h:51
AthPoolEx::ReadMeta::handle
virtual void handle(const Incident &incident) override
Incident service handle listening for BeginInputFile and EndInputFile.
Definition: ReadMeta.cxx:47
AthPoolEx::ReadMeta::m_pMetaDataStore
ServiceHandle< StoreGateSvc > m_pMetaDataStore
Definition: ReadMeta.h:50
AthPoolEx::ReadMeta::beginInputFile
virtual StatusCode beginInputFile(const SG::SourceID &) override
Function called when a new input file is opened.
Definition: ReadMeta.cxx:57
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ExampleHit::getY
double getY() const
Definition: ExampleHit.h:37
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthPoolEx::ReadMeta::~ReadMeta
virtual ~ReadMeta()
Destructor.
Definition: ReadMeta.cxx:29
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ExampleHit::getX
double getX() const
Definition: ExampleHit.h:34
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthPoolEx::ReadMeta::ReadMeta
ReadMeta(const std::string &type, const std::string &name, const IInterface *parent)
Standard Service Constructor.
Definition: ReadMeta.cxx:23
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ExampleHit
This class provides a dummy hit data object for AthenaPool.
Definition: ExampleHit.h:24
ExampleHit::getZ
double getZ() const
Definition: ExampleHit.h:40
ReadMeta.h
This file contains the class definition for the ReadMeta class.
ExampleHit::setX
void setX(double x)
Set the X coordinate.
Definition: ExampleHit.h:47
ExampleHit::getDetector
const std::string & getDetector() const
Definition: ExampleHit.h:43
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
AthPoolEx::ReadMeta::m_pInputStore
ServiceHandle< StoreGateSvc > m_pInputStore
Definition: ReadMeta.h:51
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::SourceID
std::string SourceID
Definition: AthenaKernel/AthenaKernel/SourceID.h:25
AthPoolEx
Definition: PassNoneFilter.h:16
ExampleHitContainer.h
This file contains the class definition for the ExampleHitContainer class.
SG::ObjectWithVersion
associate a data object with its VersionedKey The object is held by a ReadHandle to delay its retriev...
Definition: SGVersionedKey.h:17
python.PyAthena.obj
obj
Definition: PyAthena.py:132
ExampleHitContainer
This class provides a data vector for ExampleHit objects in AthenaPool.
Definition: ExampleHitContainer.h:20
StoreGateSvc.h
ExampleHit::setZ
void setZ(double z)
Set the Z coordinate.
Definition: ExampleHit.h:55
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
ServiceHandle< IIncidentSvc >
ExampleHit::setDetector
void setDetector(const std::string &detector)
Set the detector string.
Definition: ExampleHit.h:59