ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ReadoutTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "SCT_ReadoutTool.h"
6
9
10#include <algorithm>
11
12// Constructor
13SCT_ReadoutTool::SCT_ReadoutTool(const std::string& type, const std::string& name, const IInterface* parent):
14 base_class(type, name, parent),
15 m_sctId{nullptr}
16{
17}
18
19// Initialize
21 ATH_MSG_DEBUG("Initialize SCT_ReadoutTool");
22 // Retrieve cabling
23 if (not m_cablingTool.empty()) {
24 ATH_CHECK(m_cablingTool.retrieve());
25 }
26 // Retrieve SCT helper
27 ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
28
29 return StatusCode::SUCCESS;
30}
31
32// Finalize
34 ATH_MSG_DEBUG("Finalize SCT_ReadoutTool");
35 return StatusCode::SUCCESS;
36}
37
38StatusCode SCT_ReadoutTool::determineReadout(const int truncatedSerialNumber, std::vector<SCT_Chip>& chips, bool link0ok, bool link1ok) const {
39 // Determine which chips are in the module readout from truncated serial number
40
41 // Get moduleId
42 const IdentifierHash& hash{m_cablingTool->getHashFromSerialNumber(truncatedSerialNumber)};
43 if (not hash.is_valid()) return StatusCode::SUCCESS;
44 Identifier moduleId{m_sctId->module_id(m_sctId->wafer_id(hash))};
45
46 // Call identifier version
47 return determineReadout(moduleId, chips, link0ok, link1ok);
48}
49
50StatusCode SCT_ReadoutTool::determineReadout(const Identifier& moduleId, std::vector<SCT_Chip>& chips, bool link0ok, bool link1ok) const {
51 // This determineReadout(const Identifier is the main method of this class.
52 // Methods of SCT_ReadoutData are called in the following order in this method:
53 // setChips
54 // setLinkStatus
55 // setModuleType
56 // setChipMap
57 // clearChipReadout
58 // checkLink
59 // \_ followReadoutUpstream
60 // \_ setChipIn
61 // \_ setChipOut
62 // \_ hasConnectedInput
63 // \_ inputChip
64 // maskChipsNotInReadout
65 // \_ isChipReadOut
66 // printStatus
67 // \_ isLinkStandard
68 //
69 // The following two methods are not used.
70 // isEndBeingTalkedTo
71 // \_ outputChip
72
73 // Determine which chips are in the module readout from Identifier
74 ATH_MSG_DEBUG("Determining Readout for module ID = " << moduleId);
75
76 // Make sure there are 12 chips
77 if (chips.size()!=12) {
78 ATH_MSG_DEBUG("Readout must contain exactly 12 chips");
79 return StatusCode::SUCCESS;
80 }
81
82 SCT_ReadoutData data(msgSvc());
83
84 // Set the chips and sort in order of ID
85 data.setChips(chips);
86
87 // Set link status
88 data.setLinkStatus(link0ok, link1ok);
89
90 // Determine module type (as per ModuleType enum) and set mapping
91 data.setModuleType(moduleId, m_sctId->barrel_ec(moduleId));
92 data.setChipMap();
93
94 // Set all chips out of readout and clear both links to start
95 data.clearChipReadout();
96
97 // Check the links
98 data.checkLink(0);
99 data.checkLink(1);
100
101 // Mask chips not in readout
102 data.maskChipsNotInReadout();
103
104 data.printStatus(moduleId);
105
106 return StatusCode::SUCCESS;
107}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
This is an Identifier helper class for the SCT subdetector.
Header file for the SCT_ReadoutData class.
Header file for the SCT_ReadoutTool class.
This is a "hash" representation of an Identifier.
virtual StatusCode determineReadout(const Identifier &moduleId, std::vector< SCT_Chip > &chips, bool link0ok, bool link1ok) const override
Determine which chips are in the readout for a module of a particular type by Identifier.
StatusCode finalize() override
SCT_ReadoutTool(const std::string &type, const std::string &name, const IInterface *parent)
Usual framework methods for an AlgTool.
ToolHandle< ISCT_CablingTool > m_cablingTool
const SCT_ID * m_sctId
Private data.
StatusCode initialize() override