ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCalib::MdtRelativeTubeT0 Class Reference

#include <MdtRelativeTubeT0.h>

Collaboration diagram for MuonCalib::MdtRelativeTubeT0:

Public Types

enum  TubeGroup {
  CHAMBER , MULTILAYER , LAYER , MEZZ_CARD ,
  UNKNOWN
}

Public Member Functions

 MdtRelativeTubeT0 ()=default
 ~MdtRelativeTubeT0 ()=default
void AddHit (const MdtCalibHitBase &hit)
double GetRelativeOffset (const MuonFixedId &id, TubeGroup grp)

Private Member Functions

void calculate_relative_t0s (const TubeGroup &grp)

Private Attributes

std::map< MuonFixedId, double > m_tube_t0
std::map< TubeGroup, std::map< MuonFixedId, double > > m_relative_offset

Detailed Description

Definition at line 15 of file MdtRelativeTubeT0.h.

Member Enumeration Documentation

◆ TubeGroup

Constructor & Destructor Documentation

◆ MdtRelativeTubeT0()

MuonCalib::MdtRelativeTubeT0::MdtRelativeTubeT0 ( )
default

◆ ~MdtRelativeTubeT0()

MuonCalib::MdtRelativeTubeT0::~MdtRelativeTubeT0 ( )
default

Member Function Documentation

◆ AddHit()

void MuonCalib::MdtRelativeTubeT0::AddHit ( const MdtCalibHitBase & hit)

Definition at line 17 of file MdtRelativeTubeT0.cxx.

17 {
18 const MuonFixedId &id = hit.identify();
19 if (m_tube_t0.find(id) == m_tube_t0.end()) {
20 if (m_relative_offset.size()) m_relative_offset.clear();
21 m_tube_t0[id] = hit.tubeT0();
22 }
23 }
std::map< TubeGroup, std::map< MuonFixedId, double > > m_relative_offset
std::map< MuonFixedId, double > m_tube_t0

◆ calculate_relative_t0s()

void MuonCalib::MdtRelativeTubeT0::calculate_relative_t0s ( const TubeGroup & grp)
inlineprivate

Definition at line 37 of file MdtRelativeTubeT0.cxx.

37 {
38 // calculate mean t0 per group
39 std::map<unsigned int, std::pair<double, int> > mean_t0;
40 for (std::map<MuonFixedId, double>::const_iterator it = m_tube_t0.begin(); it != m_tube_t0.end(); ++it) {
41 unsigned int grp_id(get_group_id(it->first, grp));
42 std::map<unsigned int, std::pair<double, int> >::iterator it2 = mean_t0.find(grp_id);
43 if (it2 == mean_t0.end()) {
44 mean_t0[grp_id] = std::pair<double, int>(it->second, 1.);
45 } else {
46 it2->second.first += it->second;
47 it2->second.second++;
48 }
49 }
50 for (auto & it : mean_t0) {
51 it.second.first /= it.second.second;
52 }
53
54 // calculate tube offsets
55 std::map<MuonFixedId, double> &offsets(m_relative_offset[grp]);
56 offsets.clear();
57 for (std::map<MuonFixedId, double>::const_iterator it = m_tube_t0.begin(); it != m_tube_t0.end(); ++it) {
58 unsigned int grp_id(get_group_id(it->first, grp));
59 offsets[it->first] = it->second - mean_t0[grp_id].first;
60 }
61 }
unsigned int get_group_id(const MuonFixedId &id, const MdtRelativeTubeT0::TubeGroup &grp)

◆ GetRelativeOffset()

double MuonCalib::MdtRelativeTubeT0::GetRelativeOffset ( const MuonFixedId & id,
TubeGroup grp )

Definition at line 25 of file MdtRelativeTubeT0.cxx.

25 {
26 if (grp == UNKNOWN) return 0;
27 std::map<TubeGroup, std::map<MuonFixedId, double> >::const_iterator it = m_relative_offset.find(grp);
28 if (it == m_relative_offset.end()) {
30 return GetRelativeOffset(id, grp);
31 }
32 std::map<MuonFixedId, double>::const_iterator it2 = it->second.find(id);
33 if (it2 == it->second.end()) { return 0; }
34 return it2->second;
35 }
double GetRelativeOffset(const MuonFixedId &id, TubeGroup grp)
void calculate_relative_t0s(const TubeGroup &grp)

Member Data Documentation

◆ m_relative_offset

std::map<TubeGroup, std::map<MuonFixedId, double> > MuonCalib::MdtRelativeTubeT0::m_relative_offset
private

Definition at line 29 of file MdtRelativeTubeT0.h.

◆ m_tube_t0

std::map<MuonFixedId, double> MuonCalib::MdtRelativeTubeT0::m_tube_t0
private

Definition at line 27 of file MdtRelativeTubeT0.h.


The documentation for this class was generated from the following files: