Belle II Software development
CDCWireHit.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <tracking/trackFindingCDC/topology/EStereoKind.h>
11#include <tracking/trackFindingCDC/topology/ISuperLayer.h>
12#include <tracking/trackFindingCDC/topology/ILayer.h>
13
14#include <tracking/trackFindingCDC/ca/AutomatonCell.h>
15
16#include <tracking/trackFindingCDC/numerics/ERightLeft.h>
17#include <tracking/trackFindingCDC/numerics/Index.h>
18
19#include <tracking/trackFindingCDC/utilities/FunctorTag.h>
20
21#include <cdc/dataobjects/WireID.h>
22
23#include <utility>
24#include <iosfwd>
25#include <cassert>
26
27namespace Belle2 {
32 class CDCHit;
33 namespace CDC {
36 }
37 namespace TrackFindingCDC {
38 class CDCTrajectory2D;
40 class CDCWire; // IWYU pragma: keep
41 class Circle2D;
42 class Vector3D;
43 class Vector2D;
44
55 class CDCWireHit {
56 public:
59
62
64 static constexpr const double c_simpleDriftLengthVariance = 0.000169;
65
67 CDCWireHit() = default;
68
80 CDCWireHit(const CDCHit* ptrHit,
81 double driftLength,
82 double driftLengthVariance = c_simpleDriftLengthVariance,
83 double chargeDeposit = 0,
84 double driftTime = 0);
85
96 explicit CDCWireHit(const CDCHit* ptrHit,
97 CDC::TDCCountTranslatorBase* ptrTDCCountTranslator = nullptr,
98 CDC::ADCCountTranslatorBase* ptrADCCountTranslator = nullptr);
99
101 CDCWireHit(const WireID& wireID,
102 double driftLength,
103 double driftLengthVariance = c_simpleDriftLengthVariance,
104 double chargeDeposit = 0);
105
107 bool operator==(const CDCWireHit& rhs) const
108 {
109 return getWireID() == rhs.getWireID() and getRefDriftLength() == rhs.getRefDriftLength();
110 }
111
113 bool operator<(const CDCWireHit& rhs) const
114 {
115 return
116 std::make_pair(getWireID().getEWire(), getRefDriftLength()) <
117 std::make_pair(rhs.getWireID().getEWire(), rhs.getRefDriftLength());
118 }
119
121 friend bool operator<(const CDCWireHit& wireHit, const CDCWire& wire)
122 {
123 return &wireHit.getWire() < &wire;
124 }
125
127 // Same as above but the other way round.
128 friend bool operator<(const CDCWire& wire, const CDCWireHit& wireHit)
129 {
130 return &wire < &wireHit.getWire();
131 }
132
134 // Same as above but with CDCWireHit as a pointer.
135 friend bool operator<(const CDCWireHit* wireHit, const CDCWire& wire)
136 {
137 assert(wireHit);
138 return *wireHit < wire;
139 }
140
142 // Same as above but the other way round and with CDCWireHit as a pointer.
143 friend bool operator<(const CDCWire& wire, const CDCWireHit* wireHit)
144 {
145 assert(wireHit);
146 return wire < *wireHit;
147 }
148
150 bool operator<(const CDCHit& hit);
151
152 friend bool operator<(const CDCWireHit& wireHit, const CDCHit& hit);
153
155 // Same as above but the other way round.
156 friend bool operator<(const CDCHit& hit, const CDCWireHit& wireHit);
157
159 const CDCHit* getHit() const
160 {
161 return m_hit;
162 }
163
165 Index getStoreIHit() const;
166
168 const CDCWire& getWire() const
169 {
170 // if (not m_wire) return attachWire();
171 if (not m_wire) return attachWire();
172 return *m_wire;
173 }
174
182 const CDCWire& attachWire() const;
183
185 const WireID& getWireID() const
186 {
187 return m_wireID;
188 }
189
191 EStereoKind getStereoKind() const
192 {
194 }
195
197 bool isAxial() const
198 {
200 }
201
203 ISuperLayer getISuperLayer() const
204 {
205 return getWireID().getISuperLayer();
206 }
207
209 ILayer getILayer() const
210 {
211 return getWireID().getILayer();
212 }
213
215 const Vector2D& getRefPos2D() const;
216
218 const Vector3D& getRefPos3D() const;
219
221 double getRefCylindricalR() const;
222
224 double getRefDriftLength() const
225 {
226 return m_refDriftLength;
227 }
228
231 {
233 }
234
236 double getRefChargeDeposit() const
237 {
238 return m_refChargeDeposit;
239 }
240
242 bool isOnWire(const CDCWire& wire) const
243 {
244 return &getWire() == &wire;
245 }
246
256 Vector2D reconstruct2D(const CDCTrajectory2D& trajectory2D) const;
257
271 Vector3D reconstruct3D(const CDCTrajectory2D& trajectory2D, ERightLeft rlInfo, double z = 0) const;
272
283 Circle2D conformalTransformed(const Vector2D& relativeTo) const;
284
287 {
288 return m_automatonCell;
289 }
290
293 {
294 return &m_automatonCell;
295 }
296
299 {
300 return m_iSuperCluster;
301 }
302
304 void setISuperCluster(int iSuperCluster)
305 {
306 m_iSuperCluster = iSuperCluster;
307 }
308
310 double getDriftTime() const
311 {
312 return m_refDriftTime;
313 }
314
315 private:
318
320 mutable CDCWire const* m_wire = nullptr;
321
323 const CDCHit* m_hit = nullptr;
324
327
330
333
335 double m_refChargeDeposit = 0.0;
336
338 double m_refDriftTime = 0.0f;
339
342 };
343
345 struct GetWireHit {
347 operator FunctorTag();
348
350 template<class T, class SFINAE = decltype(&T::getWireHit)>
351 const CDCWireHit & operator()(const T& t) const
352 {
353 return t.getWireHit();
354 }
355
357 const CDCWireHit& operator()(const CDCWireHit& wireHit) const
358 {
359 return wireHit;
360 }
361 };
362
364 std::ostream& operator<<(std::ostream& output, const CDCWireHit& wirehit);
365
367 bool operator<(const CDCWireHit& wireHit, const CDCHit& hit);
368
370 bool operator<(const CDCHit& hit, const CDCWireHit& wireHit);;
371
373 bool operator<(const CDCWireHit& wireHit, const CDCWireSuperLayer& wireSuperLayer);
374
376 // Same as above but the other way round.
377 bool operator<(const CDCWireSuperLayer& wireSuperLayer, const CDCWireHit& wireHit);
378 }
380}
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Definition CDCHit.h:40
CDCWireHit()=default
Default constructor for ROOT compatibility.
Abstract Base class for the ADC count translator.
Base class for translation of Drift Time into Drift Length.
Cell used by the cellular automata.
Particle trajectory as it is seen in xy projection represented as a circle.
Class representing a hit wire in the central drift chamber.
Definition CDCWireHit.h:55
double getRefCylindricalR() const
The distance from the beam line at reference position of the underlying wire.
const CDCHit * getHit() const
Getter for the CDCHit pointer into the StoreArray.
Definition CDCWireHit.h:159
static CDC::TDCCountTranslatorBase & getTDCCountTranslator()
Return an instance of the used TDC count translator.
Definition CDCWireHit.cc:39
friend bool operator<(const CDCWire &wire, const CDCWireHit *wireHit)
Defines CDCWires and CDCWireHits to be coaligned on the wire on which they are based.
Definition CDCWireHit.h:143
ISuperLayer getISuperLayer() const
Getter for the super layer id.
Definition CDCWireHit.h:203
double getRefDriftLengthVariance() const
Getter for the variance of the drift length at the reference position of the wire.
Definition CDCWireHit.h:230
double getRefDriftLength() const
Getter for the drift length at the reference position of the wire.
Definition CDCWireHit.h:224
const WireID & getWireID() const
Getter for the WireID of the wire the hit is located on.
Definition CDCWireHit.h:185
bool isAxial() const
Indicator if the underlying wire is axial.
Definition CDCWireHit.h:197
friend bool operator<(const CDCWireHit &wireHit, const CDCHit &hit)
Defines CDCWireHits and raw CDCHit to be coaligned.
friend bool operator<(const CDCHit &hit, const CDCWireHit &wireHit)
Defines wire hits and raw CDCHit to be coaligned.
double getRefChargeDeposit() const
Getter for the charge due to energy deposit in the drift cell.
Definition CDCWireHit.h:236
friend bool operator<(const CDCWireHit &wireHit, const CDCWire &wire)
Defines CDCWires and CDCWireHits to be coaligned on the wire on which they are based.
Definition CDCWireHit.h:121
int m_iSuperCluster
Memory for the super cluster id.
Definition CDCWireHit.h:341
AutomatonCell * operator->() const
Indirection to the automaton cell for easier access to the flags.
Definition CDCWireHit.h:292
CDCWireHit()=default
Default constructor for ROOT compatibility.
const CDCWire & getWire() const
Getter for the CDCWire the hit is located on.
Definition CDCWireHit.h:168
void setISuperCluster(int iSuperCluster)
Setter for the super cluster id.
Definition CDCWireHit.h:304
AutomatonCell & getAutomatonCell() const
Mutable getter for the automaton cell.
Definition CDCWireHit.h:286
friend bool operator<(const CDCWireHit *wireHit, const CDCWire &wire)
Defines CDCWires and CDCWireHits to be coaligned on the wire on which they are based.
Definition CDCWireHit.h:135
const CDCHit * m_hit
Memory for the CDCHit pointer.
Definition CDCWireHit.h:323
static CDC::ADCCountTranslatorBase & getADCCountTranslator()
Return an instance of the used ADC count translator.
Definition CDCWireHit.cc:45
bool operator==(const CDCWireHit &rhs) const
Equality comparison based on the wire and the hit id.
Definition CDCWireHit.h:107
static constexpr const double c_simpleDriftLengthVariance
A default value for the drift length variance if no variance from the drift length translation is ava...
Definition CDCWireHit.h:64
bool operator<(const CDCWireHit &rhs) const
Total ordering relation based on the wire and the hit id.
Definition CDCWireHit.h:113
const Vector3D & getRefPos3D() const
The three dimensional reference position of the underlying wire.
Vector2D reconstruct2D(const CDCTrajectory2D &trajectory2D) const
Reconstructs a position of primary ionisation on the drift circle.
const CDCWire & attachWire() const
Reestablishes the pointer of the hit to the wire and returns it Since the DataStore only transport th...
ILayer getILayer() const
Getter for the layer id.
Definition CDCWireHit.h:209
WireID m_wireID
Memory for the WireID.
Definition CDCWireHit.h:317
bool isOnWire(const CDCWire &wire) const
Checks if the wire hit is based on the given wire.
Definition CDCWireHit.h:242
double m_refDriftLength
Memory for the drift length at the wire reference point.
Definition CDCWireHit.h:329
Index getStoreIHit() const
Getter for the index of the hit in the StoreArray holding this hit.
const Vector2D & getRefPos2D() const
The two dimensional reference position (z=0) of the underlying wire.
CDCWire const * m_wire
Memory for the CDCWire pointer - Trailing comment indicates to not stream this member.
Definition CDCWireHit.h:320
Circle2D conformalTransformed(const Vector2D &relativeTo) const
Applies the conformal transformation to the drift circle this hit represents.
friend bool operator<(const CDCWire &wire, const CDCWireHit &wireHit)
Defines CDCWires and CDCWireHits to be coaligned on the wire on which they are based.
Definition CDCWireHit.h:128
double m_refDriftLengthVariance
Memory for the variance of the drift length at the wire reference point.
Definition CDCWireHit.h:332
AutomatonCell m_automatonCell
Memory for the automaton cell.
Definition CDCWireHit.h:326
Vector3D reconstruct3D(const CDCTrajectory2D &trajectory2D, ERightLeft rlInfo, double z=0) const
Attempts to reconstruct a three dimensional position (especially of stereo hits).
EStereoKind getStereoKind() const
Getter for the stereo type of the underlying wire.
Definition CDCWireHit.h:191
int getISuperCluster() const
Getter for the super cluster id.
Definition CDCWireHit.h:298
double getDriftTime() const
Return the drift time measured by the CDC for this hit.
Definition CDCWireHit.h:310
double m_refChargeDeposit
Memory for the charge induced by the energy deposit in the drift cell.
Definition CDCWireHit.h:335
double m_refDriftTime
Measured drift time of the CDC hit.
Definition CDCWireHit.h:338
Class representing a sense wire superlayer in the central drift chamber.
Class representing a sense wire in the central drift chamber.
Definition CDCWire.h:58
A two dimensional circle in its natural representation using center and radius as parameters.
Definition Circle2D.h:26
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
Definition Vector2D.h:32
A three dimensional vector.
Definition Vector3D.h:33
Class to identify a wire inside the CDC.
Definition WireID.h:34
unsigned short getEWire() const
Getter for encoded wire number.
Definition WireID.h:154
unsigned short getISuperLayer() const
Getter for Super-Layer.
Definition WireID.h:130
unsigned short getILayer() const
Getter for layer within the Super-Layer.
Definition WireID.h:136
std::ostream & operator<<(std::ostream &output, const IntervalOfValidity &iov)
bool operator<(ExpRun a, ExpRun b)
less than for ExpRun
Definition Splitter.h:74
Abstract base class for different kinds of events.
Tag class to facilitate marking of class as a functor in the sense of this code.
Definition FunctorTag.h:20
Generic functor to get the wire hit from an object.
Definition CDCWireHit.h:345
const CDCWireHit & operator()(const CDCWireHit &wireHit) const
If given a wire hit return it unchanged.
Definition CDCWireHit.h:357
const CDCWireHit & operator()(const T &t) const
Returns the wire hit of an object.
Definition CDCWireHit.h:351
static bool isAxial(ISuperLayer iSuperLayer)
Returns if the super layer with the given id is axial.
static EStereoKind getStereoKind(ISuperLayer iSuperLayer)
Returns the stereo kind of the super layer.