ATLAS Offline Software
StripCalculator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONNSWASBUILT_STRIPCALCULATOR_H
6 #define MUONNSWASBUILT_STRIPCALCULATOR_H
7 
8 #include <vector>
9 #include <string>
10 #include <unordered_map>
11 #include <functional>
12 #include <memory>
13 
15 #include "MuonNSWAsBuilt/Element.h"
18 
19 namespace NswAsBuilt {
20 
21  /* The main interface of the NswAsBuilt package: determines strip positions
22  * in the frame of the quadruplet.
23  *
24  * Once instanciated, the as-built geometry must be read in from a stream of
25  * JSON formatted data, using the method parseJSON.
26  *
27  * Strip positions may then be queried, using the method getStrip. (The method
28  * getStrip is thread-safe.) */
29 
31  public:
33 
34  /* VALID: strip is found, INVALID: strip is not found */
35  enum class IsValid {
36  INVALID=0,
37  VALID=1
38  };
39 
40  /* The return object for querying strip positions: three points along the
41  * strip are provided, in the coordinate system of the quadruplet.*/
42  struct strip_t {
47  };
48 
49  /* Computes 3 reference points along a strip identified by strip_id, in
50  * coordinate system of quadruplet.
51  * Use iclass=ParameterClass::NOMINAL or ParameterClass::CORRECTION to
52  * get the nominal or as-built values, respectively. */
53  strip_t getStrip(ParameterClass iclass, stripIdentifier_t strip_id) const;
54 
55  /* The return object for querying strip positions with the method
56  * getPositionAlongStrip: a single point on strip is returned, in the
57  * coordinate system of the quadruplet */
58  struct position_t {
61  };
62 
63  /* Returns a the position of a point within a band of 1 pitch around the strip (sx in [-0.5,0.5]),
64  parameterized by sy, in the coordinate system of the quadruplet.
65  * sy is in [-1,1]: -1 returns the left-most point along the strip, 0
66  * returns the center point and +1 return the right-most point */
67  position_t getPositionAlongStrip(ParameterClass iclass, stripIdentifier_t strip_id, double sx, double sy) const;
68 
69  /* Parses a std::istream with JSON-formatted configuration of the as-built parameters */
70  void parseJSON(const std::string& in);
71 
72  private:
73 
74  std::vector<std::unique_ptr<Element>> m_rootElements;
75  std::unordered_map<pcbIdentifier_t, PcbElement> m_pcbMap;
76 
77  /* Follow JSON parsing helper methods */
78  struct json_t; // wraps a nlhohman::json in a pimpl struct to hide dependency
79  /* Parse the JSON ROOT element */
80  void parseRootElement(json_t j);
81  /* Build a NswAsBuilt::Element, following description in JSON */
82  std::unique_ptr<Element> buildElement(json_t j) const;
83  /* Parse a quadruplet identifier in JSON */
85  /* Parse a PCB identidier in JSON */
87  /* Parse the strip information attached to an element */
88  void collectStrip(quadrupletIdentifier_t quad_id, Element& element, json_t j);
89  /* Parse the strip configuration parameters in JSON */
91 
92  };
93 }
94 
95 #endif
96 
NswAsBuilt::StripCalculator::position_t
Definition: StripCalculator.h:58
fitman.sy
sy
Definition: fitman.py:524
NswAsBuilt::StripCalculator::IsValid::INVALID
@ INVALID
NswAsBuilt::StripCalculator::IsValid::VALID
@ VALID
NswAsBuilt::StripCalculator::parseRootElement
void parseRootElement(json_t j)
Definition: StripCalculator.cxx:169
NswAsBuilt::StripCalculator::getQuadrupletIdentifier
quadrupletIdentifier_t getQuadrupletIdentifier(json_t j) const
Definition: StripCalculator.cxx:111
NswAsBuilt::StripCalculator::strip_t::right
Amg::Vector3D right
Definition: StripCalculator.h:46
python.compressB64.sx
string sx
Definition: compressB64.py:96
NswAsBuilt::StripCalculator::ParameterClass
Element::ParameterClass ParameterClass
Definition: StripCalculator.h:32
NswAsBuilt::StripCalculator::m_rootElements
std::vector< std::unique_ptr< Element > > m_rootElements
Definition: StripCalculator.h:74
NswAsBuilt::StripCalculator::m_pcbMap
std::unordered_map< pcbIdentifier_t, PcbElement > m_pcbMap
Definition: StripCalculator.h:75
NswAsBuilt::StripCalculator::getStrip
strip_t getStrip(ParameterClass iclass, stripIdentifier_t strip_id) const
Definition: StripCalculator.cxx:24
NswAsBuilt::StripCalculator::json_t
Definition: StripCalculator.cxx:18
NswAsBuilt::StripCalculator::collectStrip
void collectStrip(quadrupletIdentifier_t quad_id, Element &element, json_t j)
Definition: StripCalculator.cxx:159
NswAsBuilt::StripCalculator::strip_t::isvalid
IsValid isvalid
Definition: StripCalculator.h:43
NswAsBuilt::pcbIdentifier_t
The indices of a MM PCB.
Definition: MuonSpectrometer/MuonDetDescr/MuonNSWAsBuilt/MuonNSWAsBuilt/Identifier.h:59
NswAsBuilt::StripCalculator::getPositionAlongStrip
position_t getPositionAlongStrip(ParameterClass iclass, stripIdentifier_t strip_id, double sx, double sy) const
Definition: StripCalculator.cxx:42
Element.h
GeoPrimitives.h
NswAsBuilt::StripCalculator::position_t::isvalid
IsValid isvalid
Definition: StripCalculator.h:59
NswAsBuilt::StripCalculator::getStripConfiguration
PcbElement::stripConfiguration_t getStripConfiguration(json_t j) const
Definition: StripCalculator.cxx:140
NswAsBuilt::stripIdentifier_t
Athena indices of a MM strip.
Definition: MuonSpectrometer/MuonDetDescr/MuonNSWAsBuilt/MuonNSWAsBuilt/Identifier.h:81
NswAsBuilt::quadrupletIdentifier_t
Athena indices for a MM quadruplet:
Definition: MuonSpectrometer/MuonDetDescr/MuonNSWAsBuilt/MuonNSWAsBuilt/Identifier.h:25
NswAsBuilt::StripCalculator::strip_t
Definition: StripCalculator.h:42
NswAsBuilt::StripCalculator::position_t::pos
Amg::Vector3D pos
Definition: StripCalculator.h:60
Identifier.h
PcbElement.h
NswAsBuilt::StripCalculator::getPcbIdentifier
pcbIdentifier_t getPcbIdentifier(quadrupletIdentifier_t quad_id, json_t j) const
Definition: StripCalculator.cxx:130
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
NswAsBuilt::StripCalculator::parseJSON
void parseJSON(const std::string &in)
Definition: StripCalculator.cxx:59
NswAsBuilt::StripCalculator::IsValid
IsValid
Definition: StripCalculator.h:35
NswAsBuilt::Element::ParameterClass
ParameterClass
Definition: Element.h:63
Run1::Geog::position_t
cool::Int32 position_t
Definition: openCoraCool.cxx:75
NswAsBuilt::StripCalculator::buildElement
std::unique_ptr< Element > buildElement(json_t j) const
Definition: StripCalculator.cxx:75
NswAsBuilt::StripCalculator::strip_t::center
Amg::Vector3D center
Definition: StripCalculator.h:44
NswAsBuilt
Definition: CathodeBoardElement.h:12
NswAsBuilt::Element
Element: a node in a hierarchy of alignment frames.
Definition: Element.h:52
NswAsBuilt::StripCalculator
Definition: StripCalculator.h:30
NswAsBuilt::PcbElement::stripConfiguration_t
Definition: PcbElement.h:38
NswAsBuilt::StripCalculator::strip_t::left
Amg::Vector3D left
Definition: StripCalculator.h:45
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32