ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArCafJobs
src
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
5
#include "
LArCafJobs/LArShapeDumperTool.h
"
6
#include "
LArRawEvent/LArDigit.h
"
7
#include "
CaloIdentifier/CaloCell_ID.h
"
8
#include "
LArElecCalib/ILArShape.h
"
9
#include "
LArIdentifier/LArOnline_SuperCellID.h
"
10
11
#include "
LArRawConditions/LArPhysWave.h
"
12
#include "
LArRawConditions/LArShapeComplete.h
"
13
14
#include "CaloDetDescr/CaloDetDescrElement.h"
15
#include "
LArCafJobs/ShapeInfo.h
"
16
#include "
LArCafJobs/CellInfo.h
"
17
18
#include <vector>
19
#include <iostream>
20
using
std::endl;
21
22
using namespace
LArSamples
;
23
24
25
LArShapeDumperTool::LArShapeDumperTool
(
const
std::string&
type
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
38
LArShapeDumperTool::~LArShapeDumperTool
()
39
{
40
}
41
42
43
StatusCode
LArShapeDumperTool::initialize
() {
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
68
StatusCode
LArShapeDumperTool::finalize
()
69
{
70
return
StatusCode::SUCCESS;
71
}
72
73
74
CellInfo
*
LArShapeDumperTool::makeCellInfo
(
const
HWIdentifier
& channelID,
const
Identifier
&
id
,
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
128
ShapeInfo
*
LArShapeDumperTool::retrieveShape
(
const
HWIdentifier
& channelID,
CaloGain::CaloGain
gain)
const
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
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
CaloCell_ID.h
CellInfo.h
ILArShape.h
LArDigit.h
LArOnline_SuperCellID.h
LArPhysWave.h
LArShapeComplete.h
LArShapeDumperTool.h
ShapeInfo.h
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition
AthCommonMsg.h:24
CaloCell_Base_ID
Helper base class for offline cell identifiers.
Definition
CaloCell_Base_ID.h:40
CaloCell_Base_ID::fcal_idHelper
const LArFCAL_Base_ID * fcal_idHelper() const
access to FCAL idHelper
Definition
CaloCell_Base_ID.h:343
CaloCell_Base_ID::hec_idHelper
const LArHEC_Base_ID * hec_idHelper() const
access to HEC idHelper
Definition
CaloCell_Base_ID.h:337
CaloCell_Base_ID::em_idHelper
const LArEM_Base_ID * em_idHelper() const
access to EM idHelper
Definition
CaloCell_Base_ID.h:332
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell.
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloDetDescrElement::y
float y() const
cell y
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:365
CaloDetDescrElement::x
float x() const
cell x
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:363
CaloDetDescrElement::z
float z() const
cell z
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:367
HWIdentifier
Definition
HWIdentifier.h:13
ILArShape
Definition
ILArShape.h:13
ILArShape::ShapeRef_t
LArVectorProxy ShapeRef_t
This class defines the interface for accessing Shape (Nsample variable, Dt = 25 ns fixed) @stereotype...
Definition
ILArShape.h:26
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition
Identifier32.h:47
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArOnlineID
Definition
LArOnlineID.h:21
LArOnline_SuperCellID
Definition
LArOnline_SuperCellID.h:21
LArSamples::CellInfo
Definition
CellInfo.h:31
LArSamples::ShapeInfo
Definition
ShapeInfo.h:24
LArSamples::ShapeInfo::set
void set(unsigned char iSample, unsigned char iPhase, float value)
Definition
ShapeInfo.cxx:72
LArShapeComplete
This class implements the ILArShape interface.
Definition
LArShapeComplete.h:26
LArShapeComplete::nTimeBins
virtual unsigned nTimeBins(const HWIdentifier &CellID, int gain) const
Definition
LArShapeComplete.cxx:72
LArShapeComplete::Shape
virtual ShapeRef_t Shape(const HWIdentifier &CellID, int gain, int tbin=0, int mode=0) const override
Definition
LArShapeComplete.cxx:29
LArShapeDumperTool::m_isSC
bool m_isSC
Definition
LArShapeDumperTool.h:39
LArShapeDumperTool::m_doAllShapes
bool m_doAllShapes
Definition
LArShapeDumperTool.h:39
LArShapeDumperTool::m_hecId
const LArHEC_Base_ID * m_hecId
Definition
LArShapeDumperTool.h:44
LArShapeDumperTool::m_shapeKey
std::string m_shapeKey
Definition
LArShapeDumperTool.h:40
LArShapeDumperTool::~LArShapeDumperTool
virtual ~LArShapeDumperTool()
Definition
LArShapeDumperTool.cxx:38
LArShapeDumperTool::LArShapeDumperTool
LArShapeDumperTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition
LArShapeDumperTool.cxx:25
LArShapeDumperTool::makeCellInfo
virtual LArSamples::CellInfo * makeCellInfo(const HWIdentifier &channelID, const Identifier &id, const CaloDetDescrElement *caloDetElement=0) const override
Definition
LArShapeDumperTool.cxx:74
LArShapeDumperTool::retrieveShape
virtual LArSamples::ShapeInfo * retrieveShape(const HWIdentifier &channelID, CaloGain::CaloGain gain) const override
Definition
LArShapeDumperTool.cxx:128
LArShapeDumperTool::finalize
StatusCode finalize() override
Definition
LArShapeDumperTool.cxx:68
LArShapeDumperTool::m_onlineHelper
const LArOnlineID_Base * m_onlineHelper
Definition
LArShapeDumperTool.h:42
LArShapeDumperTool::m_fcalId
const LArFCAL_Base_ID * m_fcalId
Definition
LArShapeDumperTool.h:45
LArShapeDumperTool::m_emId
const LArEM_Base_ID * m_emId
Definition
LArShapeDumperTool.h:43
LArShapeDumperTool::m_doShape
bool m_doShape
Definition
LArShapeDumperTool.h:39
LArShapeDumperTool::initialize
StatusCode initialize() override
Definition
LArShapeDumperTool.cxx:43
LArVectorProxy::valid
bool valid() const
Test to see if the proxy has been initialized.
CaloGain::CaloGain
CaloGain
Definition
CaloGain.h:11
CaloGain::LARMEDIUMGAIN
@ LARMEDIUMGAIN
Definition
CaloGain.h:18
CaloGain::LARLOWGAIN
@ LARLOWGAIN
Definition
CaloGain.h:18
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition
CaloGain.h:18
Identifier
Definition
IdentifierFieldParser.cxx:14
LArSamples
Definition
AbsShape.h:24
LArSamples::CaloId
CaloId
Definition
CaloId.h:21
LArSamples::FCAL_A
@ FCAL_A
Definition
CaloId.h:24
LArSamples::HEC_A
@ HEC_A
Definition
CaloId.h:24
LArSamples::UNKNOWN_CALO
@ UNKNOWN_CALO
Definition
CaloId.h:23
type
Generated on
for ATLAS Offline Software by
1.17.0