ATLAS Offline Software
Loading...
Searching...
No Matches
MdtAsBuiltPar.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 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
12
19public:
20 // Default constructor
21 MdtAsBuiltPar() = default;
22 // destructor
23 virtual ~MdtAsBuiltPar() override = default;
24
28 enum class multilayer_t { ML1 = 0, ML2, NMLTYPES };
29
33 enum class tubeSide_t {
34 POS = 0, // s>0 side
35 NEG, // s<0 side
37 };
38
42 void setAlignmentParameters(multilayer_t iML, tubeSide_t iTubeSide, float y0, float z0, float alpha, float ypitch, float zpitch,
43 int stagg);
44
45
46 // Getters
47 double y0(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).y0; }
48 double z0(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).z0; }
49 double alpha(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).alpha; }
50 double ypitch(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).ypitch; }
51 double zpitch(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).zpitch; }
52 int stagg(multilayer_t iML, tubeSide_t iTubeSide) const { return meas(iML, iTubeSide).stagg; }
53
54
55 // Alignment parameters
58 float y0{0.f}; // y position of first wire w.r.t. reference point
59 float z0{0.f}; // z position of first wire w.r.t. reference point
60 float alpha{0.f}; // rotation around tube axis
61 float ypitch{0.f}; // y pitch
62 float zpitch{0.f}; // z pitch
63 int stagg{1}; // is tube staggering ATLAS-standard or reversed?
64 };
65private:
66 static constexpr unsigned int NMEAS = static_cast<unsigned int>(multilayer_t::NMLTYPES) *
67 static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES);
68 std::array<AlignmentParameters, NMEAS> m_meas{}; // in this order: ML1_HV, ML1_RO, ML2_HV, ML2_RO
69
71 const unsigned int idx = static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES) *
72 static_cast<unsigned int>(iML) + static_cast<unsigned>(iTubeSide);
73 return m_meas.at(idx);
74 }
75 const AlignmentParameters& meas(multilayer_t iML, tubeSide_t iTubeSide) const {
76 const unsigned int idx = static_cast<unsigned int>(tubeSide_t::NTUBESIDETYPES) *
77 static_cast<unsigned int>(iML) + static_cast<unsigned>(iTubeSide);
78 return m_meas.at(idx);
79 }
80};
81
82std::ostream& operator<<(std::ostream& ostr, const MdtAsBuiltPar& par);
83#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