ATLAS Offline Software
Loading...
Searching...
No Matches
LArShapeDumperTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
10
13
14#include "CaloDetDescr/CaloDetDescrElement.h"
16#include "LArCafJobs/CellInfo.h"
17
18#include <vector>
19#include <iostream>
20using std::endl;
21
22using namespace LArSamples;
23
24
26 , const std::string& name
27 , const IInterface* parent)
28 : AthAlgTool(type, name, parent)
29{
30 declareInterface<ILArShapeDumperTool>(this);
31 declareProperty("DoShape", m_doShape = true);
32 declareProperty("DoAllShapes", m_doAllShapes = false);
33 declareProperty("ShapeKey",m_shapeKey="LArShape17phases");
34 declareProperty("IsSC", m_isSC = false);
35}
36
37
41
42
44
45 const CaloCell_Base_ID* idHelper = nullptr;
46 if(m_isSC)
47 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_SuperCell_ID") );
48 else
49 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_ID") );
50 m_emId = idHelper->em_idHelper();
51 m_hecId = idHelper->hec_idHelper();
52 m_fcalId = idHelper->fcal_idHelper();
53
54 if(m_isSC) {
55 const LArOnline_SuperCellID *onlHSC;
56 ATH_CHECK(detStore()->retrieve(onlHSC, "LArOnline_SuperCellID"));
57 m_onlineHelper=onlHSC;
58 } else {
59 const LArOnlineID *onlH;
60 ATH_CHECK(detStore()->retrieve(onlH, "LArOnlineID"));
61 m_onlineHelper=onlH;
62 }
63
64 return StatusCode::SUCCESS;
65}
66
67
69{
70 return StatusCode::SUCCESS;
71}
72
73
75 const CaloDetDescrElement* caloDetElement) const
76{
77 CaloId calo = UNKNOWN_CALO;
78 short iEta = -1, iPhi = -1, layer = -1;
79 if (m_emId->is_lar_em(id)) {
80 calo = (CaloId)m_emId->barrel_ec(id);
81 iEta = m_emId->eta(id) + (m_emId->region(id) << 10);
82 iPhi = m_emId->phi(id);
83 layer = m_emId->sampling(id);
84// cout << "NJPB: " << hash << " " << m_emId->barrel_ec(channelID) << " " << m_emId->eta(id) << " " << m_emId->phi(id) << " "
85// << m_emId->sampling(id) << " " << m_emId->region(id) << endl;
86 }
87 else if (m_hecId->is_lar_hec(id)) {
88 calo = (CaloId)(abs(int(HEC_A))*(m_onlineHelper->pos_neg(channelID) ? 1 : -1));
89 iEta = m_hecId->eta(id) + (m_hecId->region(id) << 10);
90 iPhi = m_hecId->phi(id);
91 layer = m_hecId->sampling(id);
92 }
93 else if (m_fcalId->is_lar_fcal(id)) {
94 calo = (CaloId)(abs(int(FCAL_A))*(m_onlineHelper->pos_neg(channelID) ? 1 : -1));
95 iEta = m_fcalId->eta(id);
96 iPhi = m_fcalId->phi(id);
97 layer = m_fcalId->module(id);
98 }
99 else {
100 msg(MSG::WARNING) << "LArDigit Id "<< MSG::hex << id.get_identifier32().get_compact() << MSG::dec
101 << " (FT: " << m_onlineHelper->feedthrough(channelID) << " FEBSlot: "
102 << m_onlineHelper->slot(channelID) << " Chan: " << m_onlineHelper->channel(channelID)
103 << ") appears to be neither EM nor HEC nor FCAL." << endmsg;
104 return nullptr;
105 }
106
107 ShapeInfo* shapeL = nullptr;
108 ShapeInfo* shapeM = nullptr;
109 ShapeInfo* shapeH = nullptr;
110
111 if (m_doAllShapes) {
112 shapeL = retrieveShape(channelID, CaloGain::LARLOWGAIN);
113 shapeM = retrieveShape(channelID, CaloGain::LARMEDIUMGAIN);
114 shapeH = retrieveShape(channelID, CaloGain::LARHIGHGAIN);
115 }
116
117 TVector3 position(0,0,1);
118 ULong64_t onlid = (ULong64_t)channelID.get_identifier32().get_compact();
119 if (caloDetElement) position = TVector3(caloDetElement->x(), caloDetElement->y(), caloDetElement->z());
120
121 return new CellInfo(calo, layer, iEta, iPhi,
122 m_onlineHelper->feedthrough(channelID),
123 m_onlineHelper->slot(channelID), m_onlineHelper->channel(channelID),
124 shapeL, shapeM, shapeH, position, onlid);
125}
126
127
129{
130 ILArShape* ishape=nullptr;
131 if (detStore()->retrieve(ishape,m_shapeKey)!=StatusCode::SUCCESS) {
132 return nullptr;
133 }
134
135 const LArShapeComplete* shapeObj = dynamic_cast<const LArShapeComplete*>(ishape);
136 if (!shapeObj) {
137 msg(MSG::INFO) << "Shape object is not of type LArShapeComplete!" << endmsg;
138 return nullptr;
139 }
140 //const std::vector< std::vector<float> >& fullShape = shapeObj->get(channelID, gain).m_vShape;
141 //ILArShape::ShapeRef_t shapeder=shapeObj->Shape(chid,igain,iphase);
142
143 ShapeInfo* shape = nullptr;
144 const size_t nPhases=shapeObj->nTimeBins(channelID,gain);
145 if (nPhases == 0) {
146 msg(MSG::WARNING) << "Shape object for channel " << channelID << " and gain " << gain
147 << " has 0 phases !" << endmsg;
148 return nullptr;
149 }
150
151 for (unsigned int iPhase = 0; iPhase < nPhases; iPhase++) {
152 ILArShape::ShapeRef_t shape_i=shapeObj->Shape(channelID,gain,iPhase);
153 //const std::vector<float>& shape_i = fullShape[iPhase];
154 if (!(shape_i.valid() && shape_i.size()>0)) {
155 msg(MSG::WARNING) << "Shape object for channel " << channelID << " and gain " << gain
156 << " has no data in phase " << iPhase << " !" << endmsg;
157 delete shape;
158 return nullptr;
159 }
160 for (unsigned int iSample = 0; iSample < shape_i.size(); iSample++) {
161 if (iSample == 0 && iPhase == 0)
162 shape = new ShapeInfo(shape_i.size(), 3, nPhases, 0); // 0 was 12.5
163 shape->set(iSample, iPhase, shape_i[iSample]);
164 }
165 }
166 return shape;
167}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
MsgStream & msg() const
Helper base class for offline cell identifiers.
const LArFCAL_Base_ID * fcal_idHelper() const
access to FCAL idHelper
const LArHEC_Base_ID * hec_idHelper() const
access to HEC idHelper
const LArEM_Base_ID * em_idHelper() const
access to EM idHelper
This class groups all DetDescr information related to a CaloCell.
LArVectorProxy ShapeRef_t
This class defines the interface for accessing Shape (Nsample variable, Dt = 25 ns fixed) @stereotype...
Definition ILArShape.h:26
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
void set(unsigned char iSample, unsigned char iPhase, float value)
Definition ShapeInfo.cxx:72
This class implements the ILArShape interface.
virtual unsigned nTimeBins(const HWIdentifier &CellID, int gain) const
virtual ShapeRef_t Shape(const HWIdentifier &CellID, int gain, int tbin=0, int mode=0) const override
const LArHEC_Base_ID * m_hecId
LArShapeDumperTool(const std::string &type, const std::string &name, const IInterface *parent)
virtual LArSamples::CellInfo * makeCellInfo(const HWIdentifier &channelID, const Identifier &id, const CaloDetDescrElement *caloDetElement=0) const override
virtual LArSamples::ShapeInfo * retrieveShape(const HWIdentifier &channelID, CaloGain::CaloGain gain) const override
StatusCode finalize() override
const LArOnlineID_Base * m_onlineHelper
const LArFCAL_Base_ID * m_fcalId
const LArEM_Base_ID * m_emId
StatusCode initialize() override
bool valid() const
Test to see if the proxy has been initialized.
@ LARMEDIUMGAIN
Definition CaloGain.h:18
@ LARLOWGAIN
Definition CaloGain.h:18
@ LARHIGHGAIN
Definition CaloGain.h:18
@ UNKNOWN_CALO
Definition CaloId.h:23