ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigTools
TrigOnlineSpacePointTool
src
TrigSpacePointConversionTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
InDetIdentifier/SCT_ID.h
"
6
#include "
InDetIdentifier/PixelID.h
"
7
8
#include "
TrkSpacePoint/SpacePoint.h
"
9
#include "
TrkSpacePoint/SpacePointCollection.h
"
10
#include "
TrkSpacePoint/SpacePointContainer.h
"
11
#include "
TrigInDetEvent/TrigSiSpacePointBase.h
"
12
#include "
AtlasDetDescr/AtlasDetectorID.h
"
13
#include "
TrigInDetToolInterfaces/ITrigL2LayerNumberTool.h
"
14
15
#include "
SpacePointConversionUtils.h
"
16
17
#include "
IRegionSelector/IRegSelTool.h
"
18
19
#include "
TrigSpacePointConversionTool.h
"
20
21
22
23
TrigSpacePointConversionTool::TrigSpacePointConversionTool
(
const
std::string& t,
24
const
std::string& n,
25
const
IInterface* p ) :
26
AthAlgTool
(t,n,p)
27
{
28
declareInterface< ITrigSpacePointConversionTool >(
this
);
29
30
declareProperty
(
"DoPhiFiltering"
,
m_filter_phi
=
true
);
31
declareProperty
(
"UseBeamTilt"
,
m_useBeamTilt
=
true
);
32
declareProperty
(
"UseNewLayerScheme"
,
m_useNewScheme
=
false
);
33
declareProperty
(
"PixelSP_ContainerName"
,
m_pixelSpacePointsContainerKey
= std::string(
"PixelTrigSpacePoints"
));
34
declareProperty
(
"SCT_SP_ContainerName"
,
m_sctSpacePointsContainerKey
=
"SCT_TrigSpacePoints"
);
35
declareProperty
(
"UsePixelSpacePoints"
,
m_usePixelSpacePoints
=
true
);
36
declareProperty
(
"UseSctSpacePoints"
,
m_useSctSpacePoints
=
true
);
37
}
38
39
StatusCode
TrigSpacePointConversionTool::initialize
() {
40
41
StatusCode
sc
= AthAlgTool::initialize();
42
43
ATH_MSG_INFO
(
"In initialize..."
);
44
45
// sc = serviceLocator()->service( m_regionSelectorName, m_regionSelector);
46
// if ( sc.isFailure() ) {
47
// ATH_MSG_FATAL("Unable to retrieve RegionSelector Service " << m_regionSelectorName);
48
// return sc;
49
// }
50
51
ATH_CHECK
(
m_regsel_pix
.retrieve());
52
ATH_CHECK
(
m_regsel_sct
.retrieve());
53
54
sc
=
m_layerNumberTool
.retrieve();
55
if
(
sc
.isFailure()) {
56
ATH_MSG_ERROR
(
"Could not retrieve "
<<
m_layerNumberTool
);
57
return
sc
;
58
}
59
60
sc
=
detStore
()->retrieve(
m_atlasId
,
"AtlasID"
);
61
if
(
sc
.isFailure()) {
62
ATH_MSG_FATAL
(
"Could not get ATLAS ID helper"
);
63
return
sc
;
64
}
65
66
sc
=
detStore
()->retrieve(
m_pixelId
,
"PixelID"
);
67
if
(
sc
.isFailure()) {
68
ATH_MSG_FATAL
(
"Could not get Pixel ID helper"
);
69
return
sc
;
70
}
71
72
sc
=
detStore
()->retrieve(
m_sctId
,
"SCT_ID"
);
73
if
(
sc
.isFailure()) {
74
ATH_MSG_FATAL
(
"Could not get SCT ID helper"
);
75
return
sc
;
76
}
77
78
ATH_CHECK
(
m_beamSpotKey
.initialize());
79
80
if
(!
m_usePixelSpacePoints
&& !
m_useSctSpacePoints
) {
81
ATH_MSG_FATAL
(
"Both usePixelSpacePoints and useSctSpacePoints set to False. At least one needs to be True"
);
82
return
StatusCode::FAILURE;
83
}
84
if
(!
m_useSctSpacePoints
)
ATH_MSG_INFO
(
"Only converting Pixel spacepoints => PPP seeds only"
);
85
if
(!
m_usePixelSpacePoints
)
ATH_MSG_INFO
(
"Only converting SCT spacepoints => SSS seeds only"
);
86
if
(
m_usePixelSpacePoints
&&
m_useSctSpacePoints
)
ATH_MSG_INFO
(
"Converting SCT and Pixel spacepoints"
);
87
ATH_CHECK
(
m_pixelSpacePointsContainerKey
.initialize(
m_usePixelSpacePoints
));
88
ATH_CHECK
(
m_sctSpacePointsContainerKey
.initialize(
m_useSctSpacePoints
));
89
90
ATH_MSG_INFO
(
"TrigSpacePointConversionTool initialized "
);
91
92
return
sc
;
93
}
94
95
StatusCode
TrigSpacePointConversionTool::finalize
() {
96
97
StatusCode
sc
= AthAlgTool::finalize();
98
return
sc
;
99
}
100
101
102
StatusCode
TrigSpacePointConversionTool::getSpacePoints
(
const
IRoiDescriptor
& internalRoI,
103
std::vector<TrigSiSpacePointBase>& output,
int
& nPix,
int
& nSct,
const
EventContext& ctx, std::map<
Identifier
, std::vector<long int> > *clustermap)
const
{
104
105
output.clear();
106
107
const
SpacePointContainer
* pixelSpacePointsContainer =
nullptr
;
108
if
(
m_usePixelSpacePoints
) {
109
SG::ReadHandle<SpacePointContainer>
pixHandle(
m_pixelSpacePointsContainerKey
, ctx);
110
ATH_CHECK
(pixHandle.
isValid
());
111
pixelSpacePointsContainer = pixHandle.
ptr
();
112
}
113
const
SpacePointContainer
* sctSpacePointsContainer =
nullptr
;
114
if
(
m_useSctSpacePoints
) {
115
SG::ReadHandle<SpacePointContainer>
sctHandle(
m_sctSpacePointsContainerKey
, ctx);
116
ATH_CHECK
(sctHandle.
isValid
());
117
sctSpacePointsContainer = sctHandle.
ptr
();
118
}
119
120
std::vector<IdentifierHash> listOfPixIds;
121
std::vector<IdentifierHash> listOfSctIds;
122
123
m_regsel_pix
->lookup(ctx)->HashIDList( internalRoI, listOfPixIds );
124
m_regsel_sct
->lookup(ctx)->HashIDList( internalRoI, listOfSctIds );
125
126
127
int
offsets[3];
128
129
offsets[0] =
m_layerNumberTool
->offsetEndcapPixels();
130
offsets[1] =
m_layerNumberTool
->offsetBarrelSCT();
131
offsets[2] =
m_layerNumberTool
->offsetEndcapSCT();
132
133
FTF::LayerCalculator
lc(
m_atlasId
,
m_pixelId
,
m_sctId
, offsets);
134
135
//filter spacepoints to reject those beyound internalRoI boundaries
136
137
nPix = 0;
138
nSct = 0;
139
if
( clustermap!=
nullptr
) {
140
141
ATH_MSG_DEBUG
(
"LRT Mode: clustermap supplied and being used to remove spacepoints from clusters already on tracks"
);
142
// In LRT mode a cluster map is supplied to enable removal of clusters on tracks.
143
FTF::RoI_Filter
filter(output, lc, &internalRoI,
m_filter_phi
, clustermap);
144
FTF::SpacePointSelector<FTF::RoI_Filter>
selector(filter);
145
146
if
(
m_useNewScheme
) {
147
if
(
m_usePixelSpacePoints
) nPix=selector.select(*pixelSpacePointsContainer,listOfPixIds,
m_layerNumberTool
->pixelLayers());
148
if
(
m_useSctSpacePoints
) nSct=selector.select(*sctSpacePointsContainer,listOfSctIds,
m_layerNumberTool
->sctLayers());
149
}
150
else
{
151
if
(
m_usePixelSpacePoints
) nPix=selector.select(*pixelSpacePointsContainer,listOfPixIds);
152
if
(
m_useSctSpacePoints
) nSct=selector.select(*sctSpacePointsContainer,listOfSctIds);
153
}
154
155
156
}
else
{
157
FTF::RoI_Filter
filter(output, lc, &internalRoI,
m_filter_phi
);
158
FTF::SpacePointSelector<FTF::RoI_Filter>
selector(filter);
159
160
if
(
m_useNewScheme
) {
161
if
(
m_usePixelSpacePoints
) nPix=selector.select(*pixelSpacePointsContainer,listOfPixIds,
m_layerNumberTool
->pixelLayers());
162
if
(
m_useSctSpacePoints
) nSct=selector.select(*sctSpacePointsContainer,listOfSctIds,
m_layerNumberTool
->sctLayers());
163
}
164
else
{
165
if
(
m_usePixelSpacePoints
) nPix=selector.select(*pixelSpacePointsContainer,listOfPixIds);
166
if
(
m_useSctSpacePoints
) nSct=selector.select(*sctSpacePointsContainer,listOfSctIds);
167
}
168
}
169
if
(!
m_useBeamTilt
)
shiftSpacePoints
(output, ctx);
170
else
transformSpacePoints
(output, ctx);
171
172
ATH_MSG_DEBUG
(
"Returning "
<<nPix<<
" Pixel Spacepoints and "
<<nSct<<
" SCT SpacePoints"
);
173
return
StatusCode::SUCCESS;
174
}
175
176
177
void
TrigSpacePointConversionTool::shiftSpacePoints
(std::vector<TrigSiSpacePointBase>& output,
const
EventContext& ctx)
const
{
178
179
SG::ReadCondHandle<InDet::BeamSpotData>
beamSpotHandle {
m_beamSpotKey
, ctx };
180
const
Amg::Vector3D
&vertex = beamSpotHandle->beamPos();
181
double
shift_x = vertex.x() - beamSpotHandle->beamTilt(0)*vertex.z();
182
double
shift_y = vertex.y() - beamSpotHandle->beamTilt(1)*vertex.z();
183
184
std::for_each(output.begin(), output.end(),
FTF::SpacePointShifter
(shift_x, shift_y));
185
186
}
187
188
189
void
TrigSpacePointConversionTool::transformSpacePoints
(std::vector<TrigSiSpacePointBase>& output,
const
EventContext& ctx)
const
{
190
191
SG::ReadCondHandle<InDet::BeamSpotData>
beamSpotHandle {
m_beamSpotKey
, ctx };
192
const
Amg::Vector3D
&origin = beamSpotHandle->beamPos();
193
double
tx = tan(beamSpotHandle->beamTilt(0));
194
double
ty = tan(beamSpotHandle->beamTilt(1));
195
196
double
phi
= atan2(ty,tx);
197
double
theta
= acos(1.0/sqrt(1.0+tx*tx+ty*ty));
198
double
sint = sin(
theta
);
199
double
cost
= cos(
theta
);
200
double
sinp = sin(
phi
);
201
double
cosp = cos(
phi
);
202
203
std::array<float, 4> xtrf{}, ytrf{}, ztrf{};
204
205
xtrf[0] = float(origin.x());
206
xtrf[1] = float(
cost
*cosp*cosp+sinp*sinp);
207
xtrf[2] = float(
cost
*sinp*cosp-sinp*cosp);
208
xtrf[3] =-float(sint*cosp);
209
210
ytrf[0] = float(origin.y());
211
ytrf[1] = float(
cost
*cosp*sinp-sinp*cosp);
212
ytrf[2] = float(
cost
*sinp*sinp+cosp*cosp);
213
ytrf[3] =-float(sint*sinp);
214
215
ztrf[0] = float(origin.z());
216
ztrf[1] = float(sint*cosp);
217
ztrf[2] = float(sint*sinp);
218
ztrf[3] = float(
cost
);
219
220
std::for_each(output.begin(), output.end(),
FTF::SpacePointTransform
(xtrf, ytrf, ztrf));
221
222
}
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
theta
Scalar theta() const
theta method
Definition
AmgMatrixBasePlugin.h:75
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
IRegSelTool.h
ITrigL2LayerNumberTool.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
PixelID.h
This is an Identifier helper class for the Pixel subdetector.
SCT_ID.h
This is an Identifier helper class for the SCT subdetector.
SpacePointCollection.h
SpacePointConversionUtils.h
SpacePointContainer.h
SpacePoint.h
TrigSiSpacePointBase.h
TrigSpacePointConversionTool.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
FTF::LayerCalculator
Definition
SpacePointConversionUtils.h:29
FTF::RoI_Filter
Definition
SpacePointConversionUtils.h:125
FTF::SpacePointSelector
Definition
SpacePointConversionUtils.h:161
FTF::SpacePointShifter
Definition
SpacePointConversionUtils.h:200
FTF::SpacePointTransform
Definition
SpacePointConversionUtils.h:217
IRoiDescriptor
Describes the API of the Region of Ineterest geometry.
Definition
IRoiDescriptor.h:23
SG::ReadCondHandle
Definition
ReadCondHandle.h:40
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::ptr
const_pointer_type ptr()
Dereference the pointer.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SpacePointContainer
Definition
Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePointContainer.h:29
TrigSpacePointConversionTool::m_sctSpacePointsContainerKey
SG::ReadHandleKey< SpacePointContainer > m_sctSpacePointsContainerKey
Definition
TrigSpacePointConversionTool.h:54
TrigSpacePointConversionTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition
TrigSpacePointConversionTool.h:51
TrigSpacePointConversionTool::initialize
StatusCode initialize() override
Definition
TrigSpacePointConversionTool.cxx:39
TrigSpacePointConversionTool::m_sctId
const SCT_ID * m_sctId
Definition
TrigSpacePointConversionTool.h:48
TrigSpacePointConversionTool::m_useBeamTilt
bool m_useBeamTilt
Definition
TrigSpacePointConversionTool.h:58
TrigSpacePointConversionTool::m_usePixelSpacePoints
bool m_usePixelSpacePoints
Definition
TrigSpacePointConversionTool.h:60
TrigSpacePointConversionTool::m_pixelId
const PixelID * m_pixelId
Definition
TrigSpacePointConversionTool.h:49
TrigSpacePointConversionTool::m_useNewScheme
bool m_useNewScheme
Definition
TrigSpacePointConversionTool.h:59
TrigSpacePointConversionTool::m_regsel_sct
ToolHandle< IRegSelTool > m_regsel_sct
Definition
TrigSpacePointConversionTool.h:68
TrigSpacePointConversionTool::m_layerNumberTool
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool
Definition
TrigSpacePointConversionTool.h:45
TrigSpacePointConversionTool::shiftSpacePoints
void shiftSpacePoints(std::vector< TrigSiSpacePointBase > &, const EventContext &) const
Definition
TrigSpacePointConversionTool.cxx:177
TrigSpacePointConversionTool::transformSpacePoints
void transformSpacePoints(std::vector< TrigSiSpacePointBase > &, const EventContext &) const
Definition
TrigSpacePointConversionTool.cxx:189
TrigSpacePointConversionTool::m_useSctSpacePoints
bool m_useSctSpacePoints
Definition
TrigSpacePointConversionTool.h:61
TrigSpacePointConversionTool::m_regsel_pix
ToolHandle< IRegSelTool > m_regsel_pix
new region selector tools
Definition
TrigSpacePointConversionTool.h:67
TrigSpacePointConversionTool::TrigSpacePointConversionTool
TrigSpacePointConversionTool(const std::string &, const std::string &, const IInterface *)
Definition
TrigSpacePointConversionTool.cxx:23
TrigSpacePointConversionTool::m_atlasId
const AtlasDetectorID * m_atlasId
Definition
TrigSpacePointConversionTool.h:47
TrigSpacePointConversionTool::finalize
StatusCode finalize() override
Definition
TrigSpacePointConversionTool.cxx:95
TrigSpacePointConversionTool::m_filter_phi
bool m_filter_phi
Definition
TrigSpacePointConversionTool.h:57
TrigSpacePointConversionTool::getSpacePoints
virtual StatusCode getSpacePoints(const IRoiDescriptor &, std::vector< TrigSiSpacePointBase > &, int &, int &, const EventContext &ctx, std::map< Identifier, std::vector< long int > > *clustermap=nullptr) const override final
Definition
TrigSpacePointConversionTool.cxx:102
TrigSpacePointConversionTool::m_pixelSpacePointsContainerKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpacePointsContainerKey
Definition
TrigSpacePointConversionTool.h:55
cost
int cost(std::vector< std::string > &files, node &n, const std::string &directory="", bool deleteref=false, bool relocate=false)
Definition
hcg.cxx:926
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0