ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
DetectorDescription
RegSelLUT
src
RegSelSubDetector.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
/**************************************************************************
6
**
7
** File: RegSelSubDetector.cxx
8
**
9
** Description:
10
**
11
**
12
**
13
** Author: M.Sutton
14
**
15
** Created: Wed Apr 4 16:20:07 BST 2007
16
** Modified:
17
**
18
**
19
**
20
**************************************************************************/
21
22
23
#include "
RegSelLUT/RegSelSubDetector.h
"
24
25
#include <iostream>
26
#include <set>
27
28
29
30
31
void
RegSelSubDetector::getModules
(
const
RegSelRoI
& roi, std::vector<const RegSelModule*>& modules)
const
{
32
for
(
unsigned
i=
m_layer
.size() ; i-- ; ) {
33
if
(
m_layer
[i].
inRoI
(roi) )
m_layer
[i].getModules(roi, modules);
34
}
35
}
36
37
38
39
void
RegSelSubDetector::getModules
(
const
RegSelRoI
& roi,
unsigned
layer, std::vector<const RegSelModule*>& modules)
const
{
40
41
// if mapping between logical and physical layers is needed...
42
if
(
m_mapped
) {
43
std::map<unsigned, unsigned>::const_iterator litr =
m_layermap
.find(layer);
44
if
( litr==
m_layermap
.end() )
return
;
45
else
layer = litr->second;
46
}
47
48
if
( layer<
m_layer
.size() ) {
49
if
(
m_layer
[layer].
inRoI
(roi) )
m_layer
[layer].getModules(roi, modules);
50
}
51
52
}
53
54
55
56
57
void
RegSelSubDetector::getModules
(
unsigned
layer, std::vector<const RegSelModule*>& modules)
const
{
58
59
// if mapping between logical and physical layers is needed...
60
if
(
m_mapped
) {
61
std::map<unsigned, unsigned>::const_iterator litr =
m_layermap
.find(layer);
62
if
( litr==
m_layermap
.end() )
return
;
63
else
layer = litr->second;
64
}
65
66
if
( layer<
m_layer
.size() ) {
67
m_layer
[layer].getModules(modules);
68
}
69
70
}
71
72
73
74
// setup the disabled modules list for this subdetector
75
76
void
RegSelSubDetector::setupDisabledModules
() {
77
std::vector<RegSelLayer>::iterator litr(
m_layer
.begin());
78
std::vector<RegSelLayer>::iterator lend(
m_layer
.end());
79
while
( litr!=lend ) {
80
(*litr++).setupDisabledModuleList();
81
}
82
}
83
84
85
void
RegSelSubDetector::reset
() {
86
for
(
unsigned
i=0 ; i<
m_Nlayers
; i++ )
m_layer
[i].
reset
();
87
}
88
89
90
void
RegSelSubDetector::addModules
(std::vector<RegSelModule>& modules)
91
{
92
// barrel
93
// make the layer vector have the correct number of layers
94
95
// calculate the number of layers, and get the map of logical
96
// layer number to physical layer number
97
98
std::set<unsigned> layerset;
99
100
std::vector<RegSelModule>::iterator mptr(modules.begin());
101
102
for
( ; mptr!=modules.end() ; ++mptr ) {
103
int
layer = mptr->layer();
104
int
detector = mptr->detector();
105
106
if
( !mptr->enabled() )
continue
;
107
108
if
( detector ==
ID
() ) layerset.insert(layer);
109
}
110
111
// if no modules, don't need to do anything...
112
113
m_Nlayers
= layerset.size();
114
115
if
(
m_Nlayers
==0 )
return
;
116
117
// set up the layer map, the variable m_mapped will be used
118
// to know whether to use logical, or physical layer numbers
119
// in subsequent lookups
120
121
std::set<unsigned>::iterator litr = layerset.begin();
122
std::set<unsigned>::iterator lend = layerset.end();
123
124
m_mapped
=
false
;
125
for
(
unsigned
i=0 ; litr!=lend ; ++litr, i++ ) {
126
// std::cout << "\t\tRegSelSubDetector::addModules() layer " << *litr << " -> " << i << std::endl;
127
if
( *litr!=i )
m_mapped
=
true
;
128
m_layermap
.insert( std::map<unsigned, unsigned>::value_type( *litr, i ) );
129
}
130
131
// now actually create and set up the layers for this subdetector
132
133
// std::cout << "\t\tRegSelSubDetector::addModules() created with " << m_Nlayers << " layers\tmapped " << m_mapped << std::endl;
134
135
m_layer
.resize(
m_Nlayers
);
136
137
for
( mptr=modules.begin() ; mptr!=modules.end() ; ++mptr ) {
138
139
int
detector = mptr->detector();
140
141
if
( detector ==
ID
() ) {
142
143
if
( !mptr->enabled() )
continue
;
144
145
if
( !
m_mapped
)
m_layer
[mptr->layer()].addModule(*mptr);
146
else
{
147
std::map<unsigned, unsigned>::iterator litr =
m_layermap
.find(mptr->layer());
148
// if ( litr!=m_layermap.end() )
149
m_layer
[litr->second].addModule(*mptr);
150
// else std::cerr << "module - layer mismatch " << *mptr << std::endl;
151
}
152
153
}
154
}
155
156
// std::cout << "RegSelSubDetector::addModules() detector extent" << std::endl;
157
158
for
(
unsigned
i=0 ; i<
m_Nlayers
; i++ ) {
159
m_layer
[i].ID(i);
160
161
if
( i==0 ) {
162
rMin
(
m_layer
[i].
rMin
());
163
rMax
(
m_layer
[i].
rMax
());
164
165
zMin
(
m_layer
[i].
zMin
());
166
zMax
(
m_layer
[i].
zMax
());
167
}
168
else
{
169
if
(
m_layer
[i].
rMin
()<
rMin
() )
rMin
(
m_layer
[i].
rMin
());
170
if
(
m_layer
[i].
rMax
()>
rMax
() )
rMax
(
m_layer
[i].
rMax
());
171
172
if
(
m_layer
[i].
zMin
()<
zMin
() )
zMin
(
m_layer
[i].
zMin
());
173
if
(
m_layer
[i].
zMax
()>
zMax
() )
zMax
(
m_layer
[i].
zMax
());
174
}
175
176
// std::cout << m_layer[i] << std::endl;
177
m_layer
[i].createMaps();
178
179
}
180
181
// std::cout << "Detector " << getName()
182
// << "\tr=" << rMin() << " - " << rMax()
183
// << ",\tz=" << zMin() << " - " << zMax()
184
// << std::endl;
185
186
}
187
188
189
190
// disabling and enabling an entire layer
191
192
void
RegSelSubDetector::disableLayer
(
unsigned
layer) {
193
if
( !
m_mapped
) {
194
if
( layer<
m_Nlayers
)
m_layer
[layer].disable();
195
}
196
else
{
197
std::map<unsigned, unsigned>::iterator litr =
m_layermap
.find(layer);
198
if
( litr!=
m_layermap
.end() )
m_layer
[litr->second].disable();
199
}
200
}
201
202
void
RegSelSubDetector::enableLayer
(
unsigned
layer) {
203
if
( !
m_mapped
) {
204
if
( layer<
m_Nlayers
)
m_layer
[layer].enable();
205
}
206
else
{
207
std::map<unsigned, unsigned>::iterator litr =
m_layermap
.find(layer);
208
if
( litr!=
m_layermap
.end() )
m_layer
[litr->second].enable();
209
}
210
}
211
RegSelSubDetector.h
RegSelRoI
Definition
RegSelRoI.h:32
RegSelSubDetector::enableLayer
void enableLayer(unsigned layer)
Definition
RegSelSubDetector.cxx:202
RegSelSubDetector::disableLayer
void disableLayer(unsigned layer)
Definition
RegSelSubDetector.cxx:192
RegSelSubDetector::m_layermap
std::map< unsigned, unsigned > m_layermap
Definition
RegSelSubDetector.h:108
RegSelSubDetector::getModules
void getModules(const RegSelRoI &roi, std::vector< const RegSelModule * > &modules) const
Definition
RegSelSubDetector.cxx:31
RegSelSubDetector::ID
int ID() const
Definition
RegSelSubDetector.h:88
RegSelSubDetector::m_Nlayers
unsigned m_Nlayers
Definition
RegSelSubDetector.h:105
RegSelSubDetector::m_mapped
bool m_mapped
Definition
RegSelSubDetector.h:109
RegSelSubDetector::reset
void reset()
Definition
RegSelSubDetector.cxx:85
RegSelSubDetector::m_layer
std::vector< RegSelLayer > m_layer
Definition
RegSelSubDetector.h:106
RegSelSubDetector::setupDisabledModules
void setupDisabledModules()
Definition
RegSelSubDetector.cxx:76
RegSelSubDetector::addModules
void addModules(std::vector< RegSelModule > &modules)
Definition
RegSelSubDetector.cxx:90
ZRObject::rMax
double rMax() const
Definition
ZRObject.h:81
ZRObject::rMin
double rMin() const
Definition
ZRObject.h:80
ZRObject::zMin
double zMin() const
Definition
ZRObject.h:83
ZRObject::zMax
double zMax() const
Definition
ZRObject.h:84
ZRObject::inRoI
virtual bool inRoI(const RegSelRoI &roi) const
Definition
ZRObject.h:71
Generated on
for ATLAS Offline Software by
1.17.0