ATLAS Offline Software
Loading...
Searching...
No Matches
AlignableTransform.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef DETDESCRCOND_ALIGNTRANS_H
6#define DETDESCRCOND_ALIGNTRANS_H
7// AlignableTransform.h - simple class to hold Identifier and transform for
8// alignment information
9// Richard Hawkings, started 23/9/03
10//
11// AlignableTransform consists of a vector of AlignTransMember objects,
12// each of which is contains an Identifier and a HepGeom::Transform3D
13// It is designed to reside in the detector store and be kept in the
14// conditionsDB. The AlignTransTool AlgTool (in DetDescrTools) provides
15// a user interface to manage these objects
16
17#include <vector>
18#include <algorithm>
19#include "Identifier/Identifier.h"
20#include "CLHEP/Geometry/Transform3D.h"
22#include <ranges>
23
25 public:
27 AlignableTransform(const std::string& tag);
28 virtual ~AlignableTransform();
29
30 // embedded class AlignTransMember holds the information for one module
31 // i.e. module identifier and associated transform
33 public:
35 AlignTransMember(const Identifier& ident, const HepGeom::Transform3D& trans);
36 const Identifier& identify() const;
37 const HepGeom::Transform3D& transform() const;
38 void setTransform(const HepGeom::Transform3D& trans);
39
40 private:
42 HepGeom::Transform3D m_trans;
43 };
44
45 // const and non-const iterator definitions
46 typedef std::vector<AlignTransMember>::const_iterator AlignTransMem_citr;
47 typedef std::ranges::subrange<AlignTransMem_citr> AlignTransMem_crange;
49 AlignTransMem_citr end() const;
51 typedef std::vector<AlignTransMember>::iterator AlignTransMem_itr;
52 typedef std::ranges::subrange<AlignTransMem_itr> AlignTransMem_range;
56 // return pointer to particular module
57 AlignTransMem_citr findIdent(const Identifier& ident) const;
59 // return tag name for AlignableTransform
60 const std::string& tag() const;
61 size_t size() const;
62
63 // add a new member to the AlignableTransform
64 void add(const Identifier& ident,const HepGeom::Transform3D& trans);
65 // reset the specified transform
66 bool update(const Identifier& ident,const HepGeom::Transform3D& trans);
67 // tweak, i.e. combine new transform with that already existing
68 bool tweak(const Identifier& ident,const HepGeom::Transform3D& trans);
69 void print() const;
70 void print2() const;
71 // sort transform vector, to be called after adding new transforms
72 void sortv();
73
74 private:
76 std::string m_tag;
77 std::vector<AlignTransMember> m_vec;
78};
79
81
82inline const Identifier&
85
86inline const HepGeom::Transform3D&
89
91 const HepGeom::Transform3D& trans) { m_trans=trans;}
92
95 return (lhs.identify() < rhs.identify());
96}
97
99 : m_tag ("null")
100{}
102
104 AlignableTransform::begin() const { return m_vec.begin();}
106 AlignableTransform::end() const { return m_vec.end();}
109
116
119 AlignableTransform::AlignTransMember obj(ident,HepGeom::Transform3D());
120 AlignableTransform::AlignTransMem_citr rc=std::lower_bound(m_vec.begin(),m_vec.end(),obj);
121 if (rc!=m_vec.end() && rc->identify()!=ident) rc=m_vec.end();
122 return rc;
123}
124
125// same as previous but non-const
128 AlignableTransform::AlignTransMember obj(ident,HepGeom::Transform3D());
129 AlignableTransform::AlignTransMem_itr rc=std::lower_bound(m_vec.begin(),m_vec.end(),obj);
130 if (rc!=m_vec.end() && rc->identify()!=ident) rc=m_vec.end();
131 return rc;
132}
133
134inline const std::string& AlignableTransform::tag() const {return m_tag;}
135
136inline size_t AlignableTransform::size() const {return m_vec.size();}
137
139 sort(m_vec.begin(),m_vec.end()); }
140
141#endif // DETDESCRCOND_ALIGNTRANS_H
bool operator<(const AlignableTransform::AlignTransMember &lhs, const AlignableTransform::AlignTransMember &rhs)
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
static Double_t rc
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
const Identifier & identify() const
const HepGeom::Transform3D & transform() const
void setTransform(const HepGeom::Transform3D &trans)
std::vector< AlignTransMember >::const_iterator AlignTransMem_citr
AlignTransMem_itr mend()
friend class AlignableTransformCnv_p1
std::ranges::subrange< AlignTransMem_citr > AlignTransMem_crange
void add(const Identifier &ident, const HepGeom::Transform3D &trans)
AlignTransMem_crange range() const
AlignTransMem_citr end() const
bool tweak(const Identifier &ident, const HepGeom::Transform3D &trans)
bool update(const Identifier &ident, const HepGeom::Transform3D &trans)
std::vector< AlignTransMember > m_vec
AlignTransMem_citr begin() const
std::vector< AlignTransMember >::iterator AlignTransMem_itr
std::ranges::subrange< AlignTransMem_itr > AlignTransMem_range
const std::string & tag() const
AlignTransMem_range mrange()
AlignTransMem_citr findIdent(const Identifier &ident) const
AlignTransMem_itr mbegin()