ATLAS Offline Software
Loading...
Searching...
No Matches
MdtAsBuiltPar.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef MUONALIGNMENTDATA_MDTASBUILTPAR_H
6#define MUONALIGNMENTDATA_MDTASBUILTPAR_H
7
8#include <string>
9#include <array>
10#include <iosfwd>
11
13
20public:
21 // Default constructor
22 MdtAsBuiltPar() = default;
23 // destructor
24 virtual ~MdtAsBuiltPar() override = default;
25
29 enum class multilayer_t { ML1 = 0, ML2, NMLTYPES };
30
34 enum class tubeSide_t {
35 POS = 0, // s>0 side
36 NEG, // s<0 side
38 };
39
43 void setAlignmentParameters(multilayer_t iML, tubeSide_t iTubeSide, float y0, float z0, float alpha, float ypitch, float zpitch,
44 int stagg);
45
46
47 // Getters
48 double y0(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).y0; }
49 double z0(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).z0; }
50 double alpha(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).alpha; }
51 double ypitch(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).ypitch; }
52 double zpitch(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).zpitch; }
53 int stagg(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).stagg; }
54
55
56 // Alignment parameters
59 float y0{0.f}; // y position of first wire w.r.t. reference point
60 float z0{0.f}; // z position of first wire w.r.t. reference point
61 float alpha{0.f}; // rotation around tube axis
62 float ypitch{0.f}; // y pitch
63 float zpitch{0.f}; // z pitch
64 int stagg{1}; // is tube staggering ATLAS-standard or reversed?
65 };
66private:
67 static constexpr unsigned int NMEAS = static_cast<unsigned int>(multilayer_t::NMLTYPES) *
68 static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES);
69 std::array<AlignmentParameters, NMEAS> m_meas{}; // in this order: ML1_HV, ML1_RO, ML2_HV, ML2_RO
70
72 const unsigned int idx = static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES) *
73 static_cast<unsigned int>(iML) + static_cast<unsigned>(iTubeSide);
74 return m_meas.at(idx);
75 }
76 const AlignmentParameters& meas(multilayer_t iML, tubeSide_t iTubeSide) const {
77 const unsigned int idx = static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES) *
78 static_cast<unsigned int>(iML) + static_cast<unsigned>(iTubeSide);
79 return m_meas.at(idx);
80 }
81};
82
83std::ostream& operator<<(std::ostream& ostr, const MdtAsBuiltPar& par);
84#endif // MUONALIGNMENTDATA_MDTASBUILTPAR_H
std::ostream & operator<<(std::ostream &ostr, const MdtAsBuiltPar &par)
Container classifier the MDT as-built parameters See parameter description in http://atlas-muon-align...
int stagg(multilayer_t iML, tubeSide_t iTubeSide) const
const AlignmentParameters & meas(multilayer_t iML, tubeSide_t iTubeSide) const
double zpitch(multilayer_t iML, tubeSide_t iTubeSide) const
MdtAsBuiltPar()=default
double ypitch(multilayer_t iML, tubeSide_t iTubeSide) const
double alpha(multilayer_t iML, tubeSide_t iTubeSide) const
std::array< AlignmentParameters, NMEAS > m_meas
virtual ~MdtAsBuiltPar() override=default
multilayer_t
MDT multi-layer index.
void setAlignmentParameters(multilayer_t iML, tubeSide_t iTubeSide, float y0, float z0, float alpha, float ypitch, float zpitch, int stagg)
Set the alignment parameters for a ML and a tube side.
static constexpr unsigned int NMEAS
AlignmentParameters & meas(multilayer_t iML, tubeSide_t iTubeSide)
tubeSide_t
MDT tube side.
double z0(multilayer_t iML, tubeSide_t iTubeSide) const
double y0(multilayer_t iML, tubeSide_t iTubeSide) const
MuonAlignmentPar()=default