8#include <tracking/trackFindingCDC/findlets/minimal/AxialTrackCreatorMCTruth.h>
10#include <tracking/trackFindingCDC/mclookup/CDCMCManager.h>
11#include <tracking/trackFindingCDC/mclookup/CDCMCTrackStore.h>
12#include <tracking/trackFindingCDC/mclookup/CDCSimHitLookUp.h>
13#include <tracking/trackFindingCDC/mclookup/CDCMCTrackLookUp.h>
15#include <tracking/trackFindingCDC/processing/AxialTrackUtil.h>
16#include <tracking/trackFindingCDC/fitting/CDCKarimakiFitter.h>
18#include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
19#include <tracking/trackFindingCDC/eventdata/hits/CDCRecoHit3D.h>
20#include <tracking/trackFindingCDC/eventdata/hits/CDCRecoHit2D.h>
21#include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
22#include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
23#include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
25#include <tracking/trackFindingCDC/eventdata/utils/FlightTimeEstimator.h>
27#include <tracking/trackFindingCDC/topology/CDCWire.h>
29#include <tracking/trackFindingCDC/utilities/StringManipulation.h>
31#include <cdc/translators/RealisticTDCCountTranslator.h>
32#include <cdc/dataobjects/CDCHit.h>
34#include <framework/core/ModuleParamList.templateDetails.h>
39using namespace TrackFindingCDC;
43 moduleParamList->
addParameter(prefixed(prefix,
"reconstructedDriftLength"),
45 "Switch to assign the reconstructed drift length to each hit, "
46 "as it can be estimated from two dimensional information only.",
49 moduleParamList->
addParameter(prefixed(prefix,
"reconstructedPositions"),
51 "Switch to reconstruct the positions in the tracks "
52 "imitating the Legendre finder.",
57 "Fit the track instead of forwarding the mc truth fit information",
60 moduleParamList->
addParameter(prefixed(prefix,
"useOnlyBeforeTOP"),
62 "Cut tracks after the last layer of the CDC has been reached, "
63 "assuming the tracks left the CDC.",
69 return "Constructs tracks from wire hits using the MC truth information.";
87 std::vector<CDCTrack>& outputAxialTracks)
94 const std::map<ITrackType, CDCHitVector>& mcTracksByMCParticleIdx =
97 std::size_t nAxialTracks = mcTracksByMCParticleIdx.size();
98 outputAxialTracks.reserve(outputAxialTracks.size() + nAxialTracks);
100 for (
const std::pair<ITrackType, CDCHitVector> mcTracksAndMCParticleIdx : mcTracksByMCParticleIdx) {
102 const CDCHitVector& mcTrack = mcTracksAndMCParticleIdx.second;
104 outputAxialTracks.push_back(
CDCTrack());
105 CDCTrack& axialTrack = outputAxialTracks.back();
106 bool reachedOuterMostLayer =
false;
107 for (
const CDCHit* ptrHit : mcTrack) {
113 if (ptrHit->getISuperLayer() == 8 and ptrHit->getILayer() == 5) {
114 reachedOuterMostLayer =
true;
116 if (reachedOuterMostLayer and ptrHit->getILayer() != 5) {
122 if (not wireHit)
continue;
125 if (not recoHit2D.
isAxial())
continue;
128 axialTrack.push_back(recoHit3D);
132 if (axialTrack.size() < 5) outputAxialTracks.pop_back();
136 for (
CDCTrack& track : outputAxialTracks) {
138 Vector2D recoPos2D = recoHit3D.getRecoPos2D();
139 Vector2D flightDirection = recoHit3D.getFlightDirection2D();
140 double alpha = recoPos2D.
angleWith(flightDirection);
142 const CDCWire& wire = recoHit3D.getWire();
143 const bool rl = recoHit3D.getRLInfo() == ERightLeft::c_Right;
145 double driftLength = std::fabs(recoHit3D.getSignedRecoDriftLength());
149 const double beta = 1;
168 driftLength = recoHit3D.getWireHit().getRefDriftLength();
178 driftLength += gRandom->Gaus(0, std::sqrt(driftLengthVariance));
180 bool snapRecoPos =
true;
181 recoHit3D.setRecoDriftLength(driftLength, snapRecoPos);
187 for (
CDCTrack& track : outputAxialTracks) {
194 for (
CDCTrack& track : outputAxialTracks) {
202 for (
CDCTrack& track : outputAxialTracks) {
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Translator mirroring the realistic Digitization.
double getDriftLengthResolution(double driftLength, const WireID &wireID=WireID(), bool leftRight=false, double z=0, double alpha=0, double=static_cast< double >(TMath::Pi()/2.)) override
Get position resolution^2 corresponding to the drift length from getDriftLength of this class.
The Module parameter list class.
void initialize() final
Initialize the Module before event processing.
bool m_param_reconstructedDriftLength
Parameter : Setup the drift length as it can be estimated from two dimensional information.
void beginEvent() final
Start processing the current event.
std::string getDescription() final
Short description of the findlet.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
bool m_param_reconstructedPositions
Parameter : Switch to reconstruct the positions in the tracks imitating the Legendre finder.
bool m_param_fit
Parameter : Fit the track instead of forwarding the MC truth information.
void apply(const std::vector< CDCWireHit > &inputWireHits, std::vector< CDCTrack > &outputAxialTracks) final
Main function of the track finding by the cellular automaton.
bool m_param_useOnlyBeforeTOP
Parameter : Cut tracks after the last layer of the CDC has been reached, assuming the tracks left the...
Class implementing the fitter using Karimakis method.
CDCTrajectory3D getTrajectory3D(const ACDCHitCollection *ptrHits) const
Returns the trajectory of the collection of hits.
void requireTruthInformation()
Require the MC information store arrays.
void fill()
Fill Monte Carlo look up maps from the DataStore.
static CDCMCManager & getInstance()
Getter for the singleton instance.
Specialisation of the lookup for the truth values of reconstructed tracks.
static const CDCMCTrackLookUp & getInstance()
Getter for the singletone instance.
Class to organize and present the monte carlo hit information.
static const CDCMCTrackStore & getInstance()
Getter for the singletone instance.
std::vector< const CDCHit * > CDCHitVector
Type for an ordered sequence of pointers to the CDCHit.
const std::map< ITrackType, Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > & getMCTracksByMCParticleIdx() const
Getter for the stored Monte Carlo tracks ordered by their Monte Carlo Id.
Class representing a two dimensional reconstructed hit in the central drift chamber.
const CDCRLWireHit & getRLWireHit() const
Getter for the oriented wire hit associated with the reconstructed hit.
bool isAxial() const
Indicator if the underlying wire is axial.
Class representing a three dimensional reconstructed hit.
Singletone class to gather local information about the hits.
static const CDCSimHitLookUp & getInstance()
Getter for the singletone instance.
const CDCWireHit * getWireHit(const CDCHit *ptrHit, const std::vector< CDCWireHit > &wireHits) const
Retrieve the wire hit the given CDCHit form the given wire hits.
CDCRecoHit2D getClosestPrimaryRecoHit2D(const CDCHit *ptrHit, const std::vector< CDCWireHit > &wireHits) const
Construct an CDCRecoHit2D from the closest primary CDCSimHit information related to the CDCHit.
Class representing a sequence of three dimensional reconstructed hits.
Particle trajectory as it is seen in xy projection represented as a circle.
double setLocalOrigin(const Vector2D &localOrigin)
Setter for the origin of the local coordinate system.
Particle full three dimensional trajectory.
CDCTrajectory2D getTrajectory2D() const
Getter for the two dimensional trajectory.
static CDCTrajectorySZ basicAssumption()
Constructs a basic assumption, what the z0 start position and the sz slope are, including some broad ...
Class representing a hit wire in the central drift chamber.
Class representing a sense wire in the central drift chamber.
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.
void initialize() override
Receive and dispatch signal before the start of the event processing.
void beginEvent() override
Receive and dispatch signal for the start of a new event.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
virtual double getFlightTime2D(const Vector2D &, double, double=1) const
Default estimator for the flight time.
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
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.
static void normalizeTrack(CDCTrack &track)
Refit and resort the track. Unmask all hits.