 |
Belle II Software
release-05-01-25
|
10 #include <tracking/trackFindingCDC/findlets/minimal/SegmentCreatorMCTruth.h>
12 #include <tracking/trackFindingCDC/mclookup/CDCMCManager.h>
13 #include <tracking/trackFindingCDC/mclookup/CDCMCTrackStore.h>
14 #include <tracking/trackFindingCDC/mclookup/CDCSimHitLookUp.h>
16 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
17 #include <tracking/trackFindingCDC/eventdata/segments/CDCRLWireHitSegment.h>
18 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
20 #include <tracking/trackFindingCDC/eventdata/utils/FlightTimeEstimator.h>
22 #include <tracking/trackFindingCDC/topology/CDCWire.h>
24 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
25 #include <framework/core/ModuleParamList.templateDetails.h>
27 #include <cdc/translators/RealisticTDCCountTranslator.h>
28 #include <cdc/dataobjects/CDCHit.h>
33 using namespace TrackFindingCDC;
37 moduleParamList->
addParameter(prefixed(prefix,
"reconstructedDriftLength"),
39 "Switch to assign the reconstructed drift length to each hit, "
40 "as it can be estimated from two dimensional information only.",
43 moduleParamList->
addParameter(prefixed(prefix,
"reconstructedPositions"),
45 "Switch to reconstruct the positions in the segments "
46 "immitating the facet ca picking up all correct hits.",
52 return "Constructs segments from wire hits using the mc truth information.";
70 std::vector<CDCSegment2D>& outputSegments)
77 const std::map<ITrackType, std::vector<CDCHitVector>>& mcSegmentsByMCParticleIdx =
80 std::size_t nSegments = 0;
81 for (
const std::pair<ITrackType, std::vector<CDCHitVector>>& mcSegmentsAndMCParticleIdx : mcSegmentsByMCParticleIdx) {
82 const std::vector<CDCHitVector>& mcSegments = mcSegmentsAndMCParticleIdx.second;
83 nSegments += mcSegments.size();
86 outputSegments.reserve(outputSegments.size() + nSegments);
87 for (
const std::pair<ITrackType, std::vector<CDCHitVector>>& mcSegmentsAndMCParticleIdx : mcSegmentsByMCParticleIdx) {
89 const std::vector<CDCHitVector>& mcSegments = mcSegmentsAndMCParticleIdx.second;
90 for (
const CDCHitVector& mcSegment : mcSegments) {
93 for (
const CDCHit* ptrHit : mcSegment) {
95 if (not wireHit)
continue;
98 segment2D.push_back(recoHit2D);
100 if (segment2D.size() < 3) outputSegments.pop_back();
108 Vector2D flightDirection = recoHit2D.getFlightDirection2D();
109 Vector2D recoPos2D = recoHit2D.getRecoPos2D();
110 double alpha = recoPos2D.
angleWith(flightDirection);
112 const CDCWire& wire = recoHit2D.getWire();
113 const CDCHit* hit = recoHit2D.getWireHit().getHit();
114 const bool rl = recoHit2D.getRLInfo() == ERightLeft::c_Right;
116 double driftLength = recoHit2D.getRefDriftLength();
120 const double beta = 1;
121 double flightTimeEstimate = 0;
139 driftLength += gRandom->Gaus(0, std::sqrt(driftLengthVariance));
141 bool snapRecoPos =
true;
142 recoHit2D.setRefDriftLength(driftLength, snapRecoPos);
148 if (segment.size() > 1) {
156 segment.receiveISuperCluster();
158 std::sort(outputSegments.begin(), outputSegments.end());
std::vector< const CDCHit * > CDCHitVector
Type for an ordered sequence of pointers to the CDCHit.
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.
static const CDCSimHitLookUp & getInstance()
Getter for the singletone instance.
const std::map< ITrackType, std::vector< Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > > & getMCSegmentsByMCParticleIdx() const
Getter for the stored Monte Carlo segments ordered by their Monte Carlo Id.
void initialize() final
Initialize the Module before event processing.
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
virtual double getFlightTime2D(const Vector2D &, double, double=1) const
Default estimator for the flight time.
Translator mirroring the realistic Digitization.
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
double getRefZ() const
Getter for the wire reference z coordinate Gives the wire's reference z coordinate.
void beginEvent() final
Start processing the current event.
Class to organize and present the monte carlo hit information.
Helper struct to provide consistent flight time estimation throughout the CDC track finding.
bool m_param_reconstructedPositions
Parameter : Switch to reconstruct the positions in the segments immitating the facet ca picking up al...
void apply(const std::vector< CDCWireHit > &inputWireHits, std::vector< CDCSegment2D > &outputSegments) final
Main function of the segment finding by the cellular automaton.
void initialize() override
Receive and dispatch signal before the start of the event processing.
void requireTruthInformation()
Require the mc information store arrays.
static CDCSegment2D reconstructUsingFacets(const CDCRLWireHitSegment &rlWireHitSegment)
Reconstruct from wire hits with attached right left passage hypotheses by constructing facets between...
void fill()
Fill Monte Carlo look up maps from the DataStore.
CDCRecoHit2D getClosestPrimaryRecoHit2D(const CDCHit *ptrHit, const std::vector< CDCWireHit > &wireHits) const
Construct an CDCRecoHit2D from the closest primary CDCSimHit information related to the CDCHit.
bool m_param_reconstructedDriftLength
Parameter : Setup the drift length as it can be estimated from two dimensional information.
A segment consisting of two dimensional reconsturcted hits.
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Class representing a two dimensional reconstructed hit in the central drift chamber.
Abstract base class for different kinds of events.
static const CDCMCTrackStore & getInstance()
Getter for the singletone instance.
static CDCMCManager & getInstance()
Getter for the singletone instance.
Singletone class to gather local information about the hits.
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.
std::string getDescription() final
Short description of the findlet.
void beginEvent() override
Receive and dispatch signal for the start of a new event.
const WireID & getWireID() const
Getter for the wire id.
static const FlightTimeEstimator & instance(std::unique_ptr< FlightTimeEstimator > replacement=nullptr)
Getter for the instance.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
Class representing a sense wire in the central drift chamber.
A reconstructed sequence of two dimensional hits in one super layer.
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
const CDCWireHit * getWireHit(const CDCHit *ptrHit, const std::vector< CDCWireHit > &wireHits) const
Retrieve the wire hit the given CDCHit form the given wire hits.
Class representing a hit wire in the central drift chamber.
The Module parameter list class.