1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
#ifndef Alignment_MuonAlignment_AlignableMuon_H
#define Alignment_MuonAlignment_AlignableMuon_H
/** \class AlignableMuon
* The alignable muon.
*
* $Date: 2008/04/25 21:23:15 $
* $Revision: 1.21 $
* \author Andre Sznajder - UERJ(Brazil)
*/
#include "Geometry/DTGeometry/interface/DTGeometry.h"
#include <DataFormats/GeometryVector/interface/GlobalPoint.h>
#include <Geometry/CSCGeometry/interface/CSCLayer.h>
#include "Alignment/CommonAlignment/interface/AlignableComposite.h"
#include "Alignment/CommonAlignment/interface/AlignableObjectId.h"
class CSCGeometry;
class GEMGeometry;
// Classes that will be used to construct the muon
class AlignableDTBarrel;
class AlignableDTWheel;
class AlignableDTStation;
class AlignableDTChamber;
class AlignableCSCEndcap;
class AlignableCSCStation;
class AlignableCSCRing;
class AlignableCSCChamber;
class AlignableGEMEndcap;
class AlignableGEMStation;
class AlignableGEMRing;
class AlignableGEMSuperChamber;
/// Constructor of the full muon geometry.
class AlignableMuon : public AlignableComposite {
public:
/// Constructor from geometries
AlignableMuon(const DTGeometry*, const CSCGeometry*, const GEMGeometry*);
/// Destructor
~AlignableMuon() override;
/// Updater using DTGeometry and CSCGeometry.
/// The given geometries have to match the current ones.
void update(const DTGeometry*, const CSCGeometry*, const GEMGeometry*);
/// Return all components
const align::Alignables& components() const final { return theMuonComponents; }
/// Alignable tracker has no mother
virtual Alignable* mother() { return nullptr; }
/// Methods to return specific of components
align::Alignables DTLayers();
align::Alignables DTSuperLayers();
align::Alignables DTChambers();
align::Alignables DTStations();
align::Alignables DTWheels();
align::Alignables DTBarrel();
align::Alignables CSCLayers();
align::Alignables CSCChambers();
align::Alignables CSCStations();
align::Alignables CSCRings();
align::Alignables CSCEndcaps();
align::Alignables GEMEtaPartitions();
align::Alignables GEMChambers();
align::Alignables GEMSuperChambers();
align::Alignables GEMStations();
align::Alignables GEMRings();
align::Alignables GEMEndcaps();
/// Get DT alignments sorted by DetId
Alignments* dtAlignments();
/// Get DT alignment errors sorted by DetId
AlignmentErrorsExtended* dtAlignmentErrorsExtended();
/// Get CSC alignments sorted by DetId
Alignments* cscAlignments();
Alignments* gemAlignments();
/// Get CSC alignment errors sorted by DetId
AlignmentErrorsExtended* cscAlignmentErrorsExtended();
AlignmentErrorsExtended* gemAlignmentErrorsExtended();
/// Return muon alignable object ID provider derived from the muon system geometry
const AlignableObjectId& objectIdProvider() const { return alignableObjectId_; }
const bool doGEM() { return doGEM_; }
private:
/// Get the position (centered at 0 by default)
PositionType computePosition();
/// Get the global orientation (no rotation by default)
RotationType computeOrientation();
/// Get the Surface
AlignableSurface computeSurface();
/// Get alignments sorted by DetId
Alignments* alignments() const override;
/// Get alignment errors sorted by DetId
AlignmentErrorsExtended* alignmentErrors() const override;
// Sub-structure builders
/// Build muon barrel
void buildDTBarrel(const DTGeometry*, bool update = false);
/// Build muon end caps
void buildCSCEndcap(const CSCGeometry*, bool update = false);
void buildGEMEndcap(const GEMGeometry*, bool update = false);
/// Set mothers recursively
void recursiveSetMothers(Alignable* alignable);
/// alignable object ID provider
const AlignableObjectId alignableObjectId_;
bool doGEM_;
/// Containers of separate components
std::vector<AlignableDTChamber*> theDTChambers;
std::vector<AlignableDTStation*> theDTStations;
std::vector<AlignableDTWheel*> theDTWheels;
std::vector<AlignableDTBarrel*> theDTBarrel;
std::vector<AlignableCSCChamber*> theCSCChambers;
std::vector<AlignableCSCStation*> theCSCStations;
std::vector<AlignableCSCRing*> theCSCRings;
std::vector<AlignableCSCEndcap*> theCSCEndcaps;
std::vector<AlignableGEMSuperChamber*> theGEMSuperChambers;
std::vector<AlignableGEMStation*> theGEMStations;
std::vector<AlignableGEMRing*> theGEMRings;
std::vector<AlignableGEMEndcap*> theGEMEndcaps;
align::Alignables theMuonComponents;
};
#endif //AlignableMuon_H
|