ATLAS Offline Software
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 
6 #include "LArRawEvent/LArDigit.h"
9 
12 
13 #include "CaloDetDescr/CaloDetDescrElement.h"
14 #include "LArCafJobs/ShapeInfo.h"
15 #include "LArCafJobs/CellInfo.h"
16 
17 #include <vector>
18 #include <iostream>
19 using std::endl;
20 
21 using namespace LArSamples;
22 
23 
25  , const std::string& name
26  , const IInterface* parent)
28 {
29  declareInterface<ILArShapeDumperTool>(this);
30  declareProperty("DoShape", m_doShape = true);
31  declareProperty("DoAllShapes", m_doAllShapes = false);
32  declareProperty("ShapeKey",m_shapeKey="LArShape17phases");
33 }
34 
35 
37 {
38 }
39 
40 
42 
43  const CaloCell_ID* idHelper = nullptr;
44  ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_ID") );
45  m_emId = idHelper->em_idHelper();
46  m_hecId = idHelper->hec_idHelper();
47  m_fcalId = idHelper->fcal_idHelper();
48 
49  ATH_CHECK(detStore()->retrieve(m_onlineHelper, "LArOnlineID"));
50 
51  return StatusCode::SUCCESS;
52 }
53 
54 
56 {
57  return StatusCode::SUCCESS;
58 }
59 
60 
61 CellInfo* LArShapeDumperTool::makeCellInfo(const HWIdentifier& channelID, const Identifier& id,
62  const CaloDetDescrElement* caloDetElement) const
63 {
64  CaloId calo = UNKNOWN_CALO;
65  short iEta = -1, iPhi = -1, layer = -1;
66  if (m_emId->is_lar_em(id)) {
67  calo = (CaloId)m_emId->barrel_ec(id);
68  iEta = m_emId->eta(id) + (m_emId->region(id) << 10);
69  iPhi = m_emId->phi(id);
70  layer = m_emId->sampling(id);
71 // cout << "NJPB: " << hash << " " << m_emId->barrel_ec(channelID) << " " << m_emId->eta(id) << " " << m_emId->phi(id) << " "
72 // << m_emId->sampling(id) << " " << m_emId->region(id) << endl;
73  }
74  else if (m_hecId->is_lar_hec(id)) {
75  calo = (CaloId)(abs(int(HEC_A))*(m_onlineHelper->pos_neg(channelID) ? 1 : -1));
76  iEta = m_hecId->eta(id) + (m_hecId->region(id) << 10);
77  iPhi = m_hecId->phi(id);
78  layer = m_hecId->sampling(id);
79  }
80  else if (m_fcalId->is_lar_fcal(id)) {
81  calo = (CaloId)(abs(int(FCAL_A))*(m_onlineHelper->pos_neg(channelID) ? 1 : -1));
82  iEta = m_fcalId->eta(id);
83  iPhi = m_fcalId->phi(id);
84  layer = m_fcalId->module(id);
85  }
86  else {
87  msg(MSG::WARNING) << "LArDigit Id "<< MSG::hex << id.get_identifier32().get_compact() << MSG::dec
88  << " (FT: " << m_onlineHelper->feedthrough(channelID) << " FEBSlot: "
89  << m_onlineHelper->slot(channelID) << " Chan: " << m_onlineHelper->channel(channelID)
90  << ") appears to be neither EM nor HEC nor FCAL." << endmsg;
91  return nullptr;
92  }
93 
94  ShapeInfo* shapeL = nullptr;
95  ShapeInfo* shapeM = nullptr;
96  ShapeInfo* shapeH = nullptr;
97 
98  if (m_doAllShapes) {
99  shapeL = retrieveShape(channelID, CaloGain::LARLOWGAIN);
100  shapeM = retrieveShape(channelID, CaloGain::LARMEDIUMGAIN);
101  shapeH = retrieveShape(channelID, CaloGain::LARHIGHGAIN);
102  }
103 
104  TVector3 position(0,0,1);
105  ULong64_t onlid = (ULong64_t)channelID.get_identifier32().get_compact();
106  if (caloDetElement) position = TVector3(caloDetElement->x(), caloDetElement->y(), caloDetElement->z());
107 
108  return new CellInfo(calo, layer, iEta, iPhi,
109  m_onlineHelper->feedthrough(channelID),
110  m_onlineHelper->slot(channelID), m_onlineHelper->channel(channelID),
111  shapeL, shapeM, shapeH, position, onlid);
112 }
113 
114 
116 {
117  ILArShape* ishape=nullptr;
118  if (detStore()->retrieve(ishape,m_shapeKey)!=StatusCode::SUCCESS) {
119  return nullptr;
120  }
121 
122  const LArShapeComplete* shapeObj = dynamic_cast<const LArShapeComplete*>(ishape);
123  if (!shapeObj) {
124  msg(MSG::INFO) << "Shape object is not of type LArShapeComplete!" << endmsg;
125  return nullptr;
126  }
127  //const std::vector< std::vector<float> >& fullShape = shapeObj->get(channelID, gain).m_vShape;
128  //ILArShape::ShapeRef_t shapeder=shapeObj->Shape(chid,igain,iphase);
129 
130  ShapeInfo* shape = nullptr;
131  const size_t nPhases=shapeObj->nTimeBins(channelID,gain);
132  if (nPhases == 0) {
133  msg(MSG::WARNING) << "Shape object for channel " << channelID << " and gain " << gain
134  << " has 0 phases !" << endmsg;
135  return nullptr;
136  }
137 
138  for (unsigned int iPhase = 0; iPhase < nPhases; iPhase++) {
139  ILArShape::ShapeRef_t shape_i=shapeObj->Shape(channelID,gain,iPhase);
140  //const std::vector<float>& shape_i = fullShape[iPhase];
141  if (!(shape_i.valid() && shape_i.size()>0)) {
142  msg(MSG::WARNING) << "Shape object for channel " << channelID << " and gain " << gain
143  << " has no data in phase " << iPhase << " !" << endmsg;
144  delete shape;
145  return nullptr;
146  }
147  for (unsigned int iSample = 0; iSample < shape_i.size(); iSample++) {
148  if (iSample == 0 && iPhase == 0)
149  shape = new ShapeInfo(shape_i.size(), 3, nPhases, 0); // 0 was 12.5
150  shape->set(iSample, iPhase, shape_i[iSample]);
151  }
152  }
153  return shape;
154 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArEM_Base_ID::phi
int phi(const Identifier id) const
return phi according to :
LArVectorProxy::valid
bool valid() const
Test to see if the proxy has been initialized.
LArHEC_Base_ID::eta
int eta(const Identifier id) const
return eta [0,9] outer part [0,3] inner part
LArShapeDumperTool::m_onlineHelper
const LArOnlineID * m_onlineHelper
Definition: LArShapeDumperTool.h:42
CaloDetDescrElement::y
float y() const
cell y
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:365
AtlasDetectorID::is_lar_fcal
bool is_lar_fcal(Identifier id) const
Definition: AtlasDetectorID.h:839
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
LArShapeDumperTool::makeCellInfo
virtual LArSamples::CellInfo * makeCellInfo(const HWIdentifier &channelID, const Identifier &id, const CaloDetDescrElement *caloDetElement=0) const override
Definition: LArShapeDumperTool.cxx:61
LArShapeDumperTool.h
LArPhysWave.h
LArShapeComplete
This class implements the ILArShape interface.
Definition: LArShapeComplete.h:26
LArOnlineID_Base::slot
int slot(const HWIdentifier id) const
Return the slot number of a hardware cell identifier: slot = [1,15] Slot-ID in top part of the crat...
Definition: LArOnlineID_Base.cxx:1961
LArFCAL_Base_ID::module
int module(const Identifier id) const
module [1,3]
LArEM_Base_ID::region
int region(const Identifier id) const
return region according to :
LArEM_Base_ID::sampling
int sampling(const Identifier id) const
return sampling according to :
LArSamples
Definition: AbsShape.h:24
LArShapeDumperTool::m_fcalId
const LArFCAL_ID * m_fcalId
Definition: LArShapeDumperTool.h:45
LArShapeComplete.h
LArShapeDumperTool::~LArShapeDumperTool
virtual ~LArShapeDumperTool()
Definition: LArShapeDumperTool.cxx:36
LArShapeDumperTool::initialize
StatusCode initialize() override
Definition: LArShapeDumperTool.cxx:41
LArSamples::HEC_A
@ HEC_A
Definition: CaloId.h:24
LArShapeDumperTool::m_emId
const LArEM_ID * m_emId
Definition: LArShapeDumperTool.h:43
LArSamples::ShapeInfo::set
void set(unsigned char iSample, unsigned char iPhase, float value)
Definition: ShapeInfo.cxx:72
LArShapeDumperTool::m_doAllShapes
bool m_doAllShapes
Definition: LArShapeDumperTool.h:39
LArSamples::FCAL_A
@ FCAL_A
Definition: CaloId.h:24
LArShapeDumperTool::retrieveShape
virtual LArSamples::ShapeInfo * retrieveShape(const HWIdentifier &channelID, CaloGain::CaloGain gain) const override
Definition: LArShapeDumperTool.cxx:115
LArSamples::ShapeInfo
Definition: ShapeInfo.h:24
LArEM_Base_ID::eta
int eta(const Identifier id) const
return eta according to :
LArFCAL_Base_ID::eta
int eta(const Identifier id) const
eta [0,63] module 1 ; [0,31] module 2 ; [0,15] module 3
ShapeInfo.h
CaloCell_ID.h
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
LArShapeDumperTool::m_hecId
const LArHEC_ID * m_hecId
Definition: LArShapeDumperTool.h:44
LArFCAL_Base_ID::phi
int phi(const Identifier id) const
phi [0,15]
LArOnlineID_Base::channel
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
Definition: LArOnlineID_Base.cxx:1967
LArDigit.h
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
LArShapeDumperTool::m_shapeKey
std::string m_shapeKey
Definition: LArShapeDumperTool.h:40
test_pyathena.parent
parent
Definition: test_pyathena.py:15
LArOnlineID_Base::pos_neg
int pos_neg(const HWIdentifier id) const
Return the side of a hardware cell identifier pos_neg = [0,1] positive-side or negative-side Barrel...
Definition: LArOnlineID_Base.cxx:1954
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AtlasDetectorID::is_lar_hec
bool is_lar_hec(Identifier id) const
Definition: AtlasDetectorID.h:829
LArShapeComplete::nTimeBins
virtual unsigned nTimeBins(const HWIdentifier &CellID, int gain) const
Definition: LArShapeComplete.cxx:72
LArSamples::UNKNOWN_CALO
@ UNKNOWN_CALO
Definition: CaloId.h:23
ILArShape.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
LArEM_Base_ID::barrel_ec
int barrel_ec(const Identifier id) const
return barrel_ec according to :
LArShapeDumperTool::LArShapeDumperTool
LArShapeDumperTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: LArShapeDumperTool.cxx:24
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
LArSamples::CellInfo
Definition: CellInfo.h:31
LArSamples::CaloId
CaloId
Definition: CaloId.h:21
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
CaloDetDescrElement::x
float x() const
cell x
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:363
Trk::iPhi
@ iPhi
Definition: ParamDefs.h:53
CaloGain::LARMEDIUMGAIN
@ LARMEDIUMGAIN
Definition: CaloGain.h:18
LArOnlineID_Base::feedthrough
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
Definition: LArOnlineID_Base.cxx:1948
CaloDetDescrElement::z
float z() const
cell z
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:367
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
LArHEC_Base_ID::sampling
int sampling(const Identifier id) const
return sampling [0,3] (only 0 for supercells)
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LArShapeDumperTool::m_doShape
bool m_doShape
Definition: LArShapeDumperTool.h:39
AthAlgTool
Definition: AthAlgTool.h:26
CaloGain::LARLOWGAIN
@ LARLOWGAIN
Definition: CaloGain.h:18
LArShapeComplete::Shape
virtual ShapeRef_t Shape(const HWIdentifier &CellID, int gain, int tbin=0, int mode=0) const override
Definition: LArShapeComplete.cxx:29
ILArShape
Definition: ILArShape.h:13
xAOD::iEta
setScale setgFexType iEta
Definition: gFexJetRoI_v1.cxx:74
LArHEC_Base_ID::region
int region(const Identifier id) const
return region [0,1]
CellInfo.h
AtlasDetectorID::is_lar_em
bool is_lar_em(Identifier id) const
Definition: AtlasDetectorID.h:818
LArShapeDumperTool::finalize
StatusCode finalize() override
Definition: LArShapeDumperTool.cxx:55
LArVectorProxy
Proxy for accessing a range of float values like a vector.
Definition: LArVectorProxy.h:38
LArHEC_Base_ID::phi
int phi(const Identifier id) const
return phi[0,63] outer part [0,31] inner part