DD4hep  1.30.0
Detector Description Toolkit for High Energy Physics
CartesianStripX.cpp
Go to the documentation of this file.
1 //==========================================================================
2 // AIDA Detector description implementation
3 //--------------------------------------------------------------------------
4 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
5 // All rights reserved.
6 //
7 // For the licensing terms see $DD4hepINSTALL/LICENSE.
8 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
9 //
10 // Created: Jun 28, 2013
11 // Author: Christian Grefe, CERN
12 // David Blyth, ANL
13 //
14 //==========================================================================
15 
18 
19 namespace dd4hep {
20 namespace DDSegmentation {
22 CartesianStripX::CartesianStripX(const std::string& cellEncoding) : CartesianStrip(cellEncoding) {
23  // define type and description
24  _type = "CartesianStripX";
25  _description = "Cartesian segmentation on the local X axis";
26 
27  // register all necessary parameters
28  registerParameter("strip_size_x", "Cell size in X", _stripSizeX, 1., SegmentationParameter::LengthUnit);
29  registerParameter("offset_x", "Cell offset in X", _offsetX, 0., SegmentationParameter::LengthUnit, true);
30  registerIdentifier("identifier_x", "Cell ID identifier for X", _xId, "strip");
31 }
32 
35  // define type and description
36  _type = "CartesianStripX";
37  _description = "Cartesian segmentation on the local X axis";
38 
39  // register all necessary parameters
40  registerParameter("strip_size_x", "Cell size in X", _stripSizeX, 1., SegmentationParameter::LengthUnit);
41  registerParameter("offset_x", "Cell offset in X", _offsetX, 0., SegmentationParameter::LengthUnit, true);
42  registerIdentifier("identifier_x", "Cell ID identifier for X", _xId, "strip");
43 }
44 
47 
50  Vector3D cellPosition;
51  cellPosition.X = binToPosition(_decoder->get(cID, _xId), _stripSizeX, _offsetX);
52  return cellPosition;
53 }
54 
56 CellID CartesianStripX::cellID(const Vector3D& localPosition, const Vector3D& /* globalPosition */,
57  const VolumeID& vID) const {
58  CellID cID = vID;
59  _decoder->set(cID, _xId, positionToBin(localPosition.X, _stripSizeX, _offsetX));
60  return cID;
61 }
62 
63 std::vector<double> CartesianStripX::cellDimensions(const CellID&) const {
64 #if __cplusplus >= 201103L
65  return {_stripSizeX};
66 #else
67  std::vector<double> cellDims(1, 0.0);
68  cellDims[0] = _stripSizeX;
69  return cellDims;
70 #endif
71 }
72 
73 } // namespace DDSegmentation
74 } /* namespace dd4hep */
dd4hep::DDSegmentation::VolumeID
uint64_t VolumeID
Definition: BitFieldCoder.h:27
dd4hep::DDSegmentation::Segmentation::_decoder
const BitFieldCoder * _decoder
The cell ID encoder and decoder.
Definition: Segmentation.h:168
dd4hep::DDSegmentation::Vector3D
Simple container for a physics vector.
Definition: Segmentation.h:48
dd4hep::DDSegmentation::SegmentationParameter::LengthUnit
@ LengthUnit
Definition: SegmentationParameter.h:111
dd4hep::DDSegmentation::BitFieldCoder
Helper class for decoding and encoding a bit field of 64bits for convenient declaration.
Definition: BitFieldCoder.h:114
dd4hep::DDSegmentation::CartesianStripX::~CartesianStripX
virtual ~CartesianStripX()
destructor
Definition: CartesianStripX.cpp:46
dd4hep::DDSegmentation::BitFieldCoder::get
FieldID get(CellID bitfield, size_t idx) const
Definition: BitFieldCoder.h:165
dd4hep::DDSegmentation::CartesianStripX::cellDimensions
virtual std::vector< double > cellDimensions(const CellID &cellID) const
Returns a vector<double> of the cellDimensions of the given cell ID in natural order of dimensions,...
Definition: CartesianStripX.cpp:63
dd4hep::DDSegmentation::CartesianStripX::_xId
std::string _xId
the field name used for X
Definition: CartesianStripX.h:71
dd4hep::DDSegmentation::CartesianStripX::_stripSizeX
double _stripSizeX
the strip size in X
Definition: CartesianStripX.h:67
dd4hep::DDSegmentation::Segmentation::registerParameter
void registerParameter(const std::string &nam, const std::string &desc, TYPE &param, const TYPE &defaultVal, UnitType unitTyp=SegmentationParameter::NoUnit, bool isOpt=false)
Add a parameter to this segmentation. Used by derived classes to define their parameters.
Definition: Segmentation.h:138
CartesianStripX.h
dd4hep::DDSegmentation::BitFieldCoder::set
void set(CellID &bitfield, size_t idx, FieldID value) const
Definition: BitFieldCoder.h:177
dd4hep::DDSegmentation::CellID
uint64_t CellID
Definition: BitFieldCoder.h:26
dd4hep::DDSegmentation::Segmentation::registerIdentifier
void registerIdentifier(const std::string &nam, const std::string &desc, std::string &ident, const std::string &defaultVal)
Add a cell identifier to this segmentation. Used by derived classes to define their required identifi...
Definition: Segmentation.cpp:135
dd4hep::DDSegmentation::Segmentation::_description
std::string _description
The description of the segmentation.
Definition: Segmentation.h:162
dd4hep::DDSegmentation::Segmentation::positionToBin
static int positionToBin(double position, double cellSize, double offset=0.)
Helper method to convert a 1D position to a cell ID.
Definition: Segmentation.cpp:150
dd4hep::DDSegmentation::Vector3D::X
double X
Definition: Segmentation.h:71
dd4hep::DDSegmentation::Segmentation::binToPosition
static double binToPosition(FieldID bin, double cellSize, double offset=0.)
Helper method to convert a bin number to a 1D position.
Definition: Segmentation.cpp:145
dd4hep
Namespace for the AIDA detector description toolkit.
Definition: AlignmentsCalib.h:28
dd4hep::DDSegmentation::CartesianStrip
Segmentation base class describing cartesian strip segmentation.
Definition: CartesianStrip.h:28
dd4hep::DDSegmentation::Segmentation::_type
std::string _type
The segmentation type.
Definition: Segmentation.h:160
dd4hep::DDSegmentation::CartesianStripX::position
virtual Vector3D position(const CellID &cellID) const
determine the position based on the cell ID
Definition: CartesianStripX.cpp:49
dd4hep::DDSegmentation::CartesianStripX::cellID
virtual CellID cellID(const Vector3D &localPosition, const Vector3D &globalPosition, const VolumeID &volumeID) const
determine the cell ID based on the position
Definition: CartesianStripX.cpp:56
dd4hep::DDSegmentation::CartesianStripX::_offsetX
double _offsetX
the coordinate offset in X
Definition: CartesianStripX.h:69
dd4hep::DDSegmentation::CartesianStripX::CartesianStripX
CartesianStripX(const std::string &cellEncoding="")
Default constructor passing the encoding string.
Definition: CartesianStripX.cpp:22