8#include <tracking/trackFindingCDC/eventdata/utils/DriftLengthEstimator.h>
10#include <tracking/trackFindingCDC/eventdata/utils/FlightTimeEstimator.h>
12#include <tracking/trackingUtilities/eventdata/tracks/CDCTrack.h>
14#include <tracking/trackingUtilities/eventdata/segments/CDCSegment3D.h>
15#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
17#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit3D.h>
18#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit2D.h>
19#include <tracking/trackingUtilities/eventdata/hits/CDCFacet.h>
20#include <tracking/trackingUtilities/eventdata/hits/CDCRLWireHit.h>
21#include <tracking/trackingUtilities/eventdata/hits/CDCWireHit.h>
23#include <cdc/topology/CDCWire.h>
25#include <tracking/trackingUtilities/geometry/UncertainParameterLine2D.h>
26#include <tracking/trackingUtilities/geometry/ParameterLine2D.h>
28#include <tracking/trackingUtilities/numerics/ERightLeft.h>
29#include <tracking/trackingUtilities/numerics/Quadratic.h>
31#include <tracking/trackingUtilities/utilities/StringManipulation.h>
33#include <cdc/translators/RealisticTDCCountTranslator.h>
34#include <cdc/dataobjects/CDCHit.h>
36#include <framework/core/ModuleParamList.templateDetails.h>
37#include <framework/geometry/VectorUtil.h>
39#include <Math/Vector3D.h>
40#include <Math/Vector2D.h>
41#include <Math/VectorUtil.h>
45using namespace TrackFindingCDC;
46using namespace TrackingUtilities;
51 moduleParamList->
addParameter(prefixed(prefix,
"useAlphaInDriftLength"),
53 "Switch to serve the alpha angle to the drift length translator",
56 moduleParamList->
addParameter(prefixed(prefix,
"tofMassScale"),
58 "Mass to estimate the velocity in the flight time to the hit",
67 ROOT::Math::XYVector recoPos2D = recoHit2D.
getRecoPos2D();
68 double alpha = ROOT::Math::VectorUtil::DeltaPhi(recoPos2D, flightDirection);
69 const double beta = 1;
74 const bool rl = recoHit2D.
getRLInfo() == ERightLeft::c_Right;
86 if (driftLength > -2 and driftLength < 16) {
87 bool snapRecoPos =
true;
98 ROOT::Math::XYVector flightDirection = line->tangential();
100 double alpha = ROOT::Math::VectorUtil::DeltaPhi(centralPos2D, flightDirection);
105 auto doUpdate = [&](
CDCRLWireHit & rlWireHit, ROOT::Math::XYVector recoPos2D) {
108 const bool rl = rlWireHit.
getRLInfo() == ERightLeft::c_Right;
109 const double beta = 1;
148 const ROOT::Math::XYZVector& recoPos3D = recoHit3D.
getRecoPos3D();
149 const ROOT::Math::XYVector& recoPos2D = VectorUtil::getXYVector(recoPos3D);
150 double alpha = ROOT::Math::VectorUtil::DeltaPhi(recoPos2D, flightDirection);
151 const double beta = 1;
154 if (std::isnan(tanLambda)) {
155 tanLambda = recoPos3D.z() / recoPos3D.Rho();
157 const double theta = M_PI / 2 - std::atan(tanLambda);
158 flightTimeEstimate *= hypot2(1, tanLambda);
162 const bool rl = recoHit3D.
getRLInfo() == ERightLeft::c_Right;
172 if (driftLength > -2 and driftLength < 16) {
173 bool snapRecoPos =
true;
181 const double tanLambda)
189 const double tanLambda)
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
short getTDCCount() const
Getter for TDC count.
unsigned short getADCCount() const
Getter for integrated charge.
Class representing a sense wire in the central drift chamber.
const ROOT::Math::XYVector & getRefPos2D() const
Getter for the wire reference position for 2D tracking Gives the wire's reference position projected ...
const WireID & getWireID() const
Getter for the wire id.
double getRefZ() const
Getter for the wire reference z coordinate Gives the wire's reference z coordinate.
Translator mirroring the realistic Digitization.
double getDriftLength(unsigned short tdcCount, const WireID &wireID=WireID(), double timeOfFlightEstimator=0, bool leftRight=false, double z=0, double alpha=0, double theta=static_cast< double >(TMath::Pi()/2.), unsigned short adcCount=0) override
Get Drift length.
The Module parameter list class.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
virtual double getFlightTime2D(const ROOT::Math::XYVector &, double, double=1) const
Default estimator for the flight time.
Class representing a triple of neighboring oriented wire with additional trajectory information.
ROOT::Math::XYVector getMiddleRecoPos2D() const
Getter for the reconstructed position at the second hit on the fit line.
ROOT::Math::XYVector getEndRecoPos2D() const
Getter for the reconstructed position at the third hit on the fit line.
const UncertainParameterLine2D & getFitLine() const
Getter for the contained line fit information.
ROOT::Math::XYVector getStartRecoPos2D() const
Getter for the reconstructed position at the first hit on the fit line.
const CDC::CDCWire & getMiddleWire() const
Getter for the wire the second oriented wire hit is based on.
CDCRLWireHit & getStartRLWireHit()
Getter for the first oriented wire hit.
CDCRLWireHit & getEndRLWireHit()
Getter for the third oriented wire hit.
CDCRLWireHit & getMiddleRLWireHit()
Getter for the second oriented wire hit.
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
const CDCWireHit & getWireHit() const
Getter for the wire hit associated with the oriented hit.
void setRefDriftLength(double driftLength)
Setter for the drift length at the reference position of the wire.
const CDC::CDCWire & getWire() const
Getter for the wire the oriented hit associated to.
ERightLeft getRLInfo() const
Getter for the right left passage information.
Class representing a two dimensional reconstructed hit in the central drift chamber.
const CDCWireHit & getWireHit() const
Getter for the wire hit associated with the reconstructed hit.
void setRefDriftLength(double driftLength, bool snapRecoPos)
Setter for the drift length at the wire reference position.
ROOT::Math::XYVector getFlightDirection2D() const
Getter for the direction of flight.
ROOT::Math::XYVector getRecoPos2D() const
Getter for the position in the reference plane.
const CDC::CDCWire & getWire() const
Getter for the wire the reconstructed hit associated to.
ERightLeft getRLInfo() const
Getter for the right left passage information.
Class representing a three dimensional reconstructed hit.
const CDCWireHit & getWireHit() const
Getter for the wire hit.
const ROOT::Math::XYZVector & getRecoPos3D() const
Getter for the 3d position of the hit.
ROOT::Math::XYVector getFlightDirection2D() const
Getter for the direction of flight.
const CDC::CDCWire & getWire() const
Getter for the wire.
void setRecoDriftLength(double driftLength, bool snapRecoPos)
Setter to update the drift length of the hit.
ERightLeft getRLInfo() const
Getter for the right left passage information.
A reconstructed sequence of two dimensional hits in one super layer.
A segment consisting of three dimensional reconstructed hits.
Class representing a sequence of three dimensional reconstructed hits.
const CDCHit * getHit() const
Getter for the CDCHit pointer into the StoreArray.
A parameter line including including an line covariance matrix which is interpreted as located in the...
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.
double m_param_tofMassScale
Parameter : Mass to estimate the velocity in the flight time to the hit.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
Add the parameters of the estimator to the module.
double updateDriftLength(TrackingUtilities::CDCRecoHit2D &recoHit2D)
Update the drift length of the reconstructed hit in place.
bool m_param_useAlphaInDriftLength
Parameter : Switch to serve the alpha angle to the drift length translator.