ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ClusterContainerCnv_p0.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "MsgUtil.h"
8
9// Athena
14
15// Gaudi
16#include "GaudiKernel/Bootstrap.h"
17#include "GaudiKernel/ISvcLocator.h"
18#include "GaudiKernel/MsgStream.h"
19#include "GaudiKernel/Service.h"
20#include "GaudiKernel/StatusCode.h"
21
22#include <iostream>
23#include <sstream>
24#include <string>
25
26//================================================================
27
28
30 m_sctId{nullptr},
31 m_SCTDetEleCollKey{"SCT_DetectorElementCollection"}
32{
33}
34
35StatusCode SCT_ClusterContainerCnv_p0::initialize(MsgStream& log ) {
36
37 log << MSG::INFO << "SCT_ClusterContainerCnv::initialize()" << endmsg;
38
39 SmartIF<StoreGateSvc> detStore{Gaudi::svcLocator()->service("DetectorStore")};
40 CHECK( detStore.isValid() );
41
42 CHECK( detStore->retrieve(m_sctId, "SCT_ID") );
43 CHECK( m_SCTDetEleCollKey.initialize() );
44 MSG_DEBUG(log,"Converter initialized.");
45
46 return StatusCode::SUCCESS;
47}
48
49InDet::SCT_ClusterContainer* SCT_ClusterContainerCnv_p0::createTransient(SCT_ClusterContainer_p0* persObj, MsgStream& log) {
50
51 std::unique_ptr<InDet::SCT_ClusterContainer> trans(std::make_unique<InDet::SCT_ClusterContainer>(m_sctId->wafer_hash_max()) );
52 // MSG_DEBUG(log,"Read PRD vector, size " << persObj->size());
53
55 const InDetDD::SiDetectorElementCollection* elements(*sctDetEleHandle);
56 if (not sctDetEleHandle.isValid() or elements==nullptr) {
57 log << MSG::FATAL << m_SCTDetEleCollKey.fullKey() << " is not available." << endmsg;
58 return trans.release();
59 }
60
61 for (InDet::SCT_ClusterCollection* dcColl : *persObj) {
62 // Add detElem to each drift circle
63 IdentifierHash collHash = dcColl->identifyHash();
64 const InDetDD::SiDetectorElement * de = elements->getDetectorElement(collHash);
65 // MSG_DEBUG(log,"Set SCT_Cluster detector element to "<< de);
66
67 InDet::SCT_ClusterCollection::iterator itColl = dcColl->begin();
68 InDet::SCT_ClusterCollection::iterator lastColl = dcColl->end();
69 for (; itColl != lastColl; ++itColl) {
70 (*itColl)->m_detEl = de;
71 }
72
73 StatusCode sc= trans ? trans->addCollection(dcColl, collHash): StatusCode::FAILURE;
74 if (sc.isSuccess()){
75 // MSG_VERBOSE("SCT_ClusterContainer successfully added to Container !");
76 } else {
77 log << MSG::ERROR << "Failed to add SCT_ClusterContainer to container" << endmsg;
78 return nullptr;
79 }
80 }
81 return trans.release();
82}
#define endmsg
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
static Double_t sc
#define MSG_DEBUG(log, x)
Definition MsgUtil.h:15
DataVector< Trk::PrepRawDataCollection< InDet::SCT_Cluster > > SCT_ClusterContainer_p0
This is an Identifier helper class for the SCT subdetector.
This is a "hash" representation of an Identifier.
Class to hold the SiDetectorElement objects to be put in the detector store.
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Class to hold geometrical description of a silicon detector element.
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
virtual InDet::SCT_ClusterContainer * createTransient(const SCT_ClusterContainer_p0 *, MsgStream &) override
StatusCode initialize(MsgStream &log)