8 #include <tracking/vxdHoughTracking/findlets/RecoTrackStorer.h>
9 #include <framework/core/ModuleParamList.h>
10 #include <framework/core/ModuleParamList.templateDetails.h>
11 #include <framework/geometry/BFieldManager.h>
12 #include <tracking/dataobjects/RecoTrack.h>
13 #include <svd/dataobjects/SVDCluster.h>
14 #include <tracking/spacePointCreation/SpacePoint.h>
15 #include <tracking/spacePointCreation/SpacePointTrackCand.h>
16 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorCircleFit.h>
17 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorMC.h>
18 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRiemannHelixFit.h>
19 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorTripletFit.h>
20 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
21 #include <tracking/trackFindingCDC/utilities/Algorithms.h>
22 #include <tracking/trackFindingCDC/utilities/WeightedRelation.h>
25 using namespace TrackFindingCDC;
26 using namespace vxdHoughTracking;
28 RecoTrackStorer::~RecoTrackStorer() =
default;
30 RecoTrackStorer::RecoTrackStorer() :
Super()
45 "Identifier which estimation method to use. Valid identifiers are: [mcInfo, circleFit, tripletFit, helixFit].",
48 moduleParamList->
addParameter(TrackFindingCDC::prefixed(prefix,
"ResultStorerMCRecoTracksStoreArrayName"),
50 "Only required for MCInfo method. Name of StoreArray containing MCRecoTracks.",
53 moduleParamList->
addParameter(TrackFindingCDC::prefixed(prefix,
"ResultStorerMCStrictQualityEstimator"),
55 "Only required for MCInfo method. If false combining several MCTracks is allowed.",
70 m_estimator = std::make_unique<QualityEstimatorTripletFit>();
72 m_estimator = std::make_unique<QualityEstimatorCircleFit>();
74 m_estimator = std::make_unique<QualityEstimatorRiemannHelixFit>();
91 std::string pxdClustersName =
"";
94 svdClustersName = mcRecoTracks[0]->getStoreArrayNameOfSVDHits();
95 pxdClustersName = mcRecoTracks[0]->getStoreArrayNameOfPXDHits();
97 B2WARNING(
"No Entries in mcRecoTracksStoreArray: using empty cluster name for svd and pxd");
114 const std::vector<const SpacePoint*>& spacePoints)
116 for (
auto& thisSPTC : finishedResults) {
122 auto sortedHits = thisSPTC.getSortedHits();
123 const auto& estimatorResult =
m_estimator->estimateQualityAndProperties(sortedHits);
126 const TVector3& trackPosition = TVector3(sortedHits.front()->X(), sortedHits.front()->Y(), sortedHits.front()->Z());
127 const TVector3& trackMomentum = *estimatorResult.p;
128 const short& trackChargeSeed = estimatorResult.curvatureSign ? -1 * (*(estimatorResult.curvatureSign)) : 0;
129 const double qi = estimatorResult.qualityIndicator;
136 TMatrixDSym covSeed(6);
137 covSeed(0, 0) = 0.01 ; covSeed(1, 1) = 0.01 ; covSeed(2, 2) = 0.04 ;
138 covSeed(3, 3) = 0.01 ; covSeed(4, 4) = 0.01 ; covSeed(5, 5) = 0.04 ;
148 unsigned int sortingParameter = 0;
149 for (
const SpacePoint* spacePoint : sortedHits) {
153 for (
const SVDCluster& relatedCluster : relatedClusters) {
155 newRecoTrack->
addSVDHit(&relatedCluster, sortingParameter);
161 for (
const SpacePoint* spacePoint : spacePoints) {
163 spacePoint->setAssignmentState(
true);
168 for (
const SVDCluster& relatedCluster : relatedClusters) {
170 spacePoint->setAssignmentState(
true);
The Module parameter list class.
Class implementing the algorithm used for the MC based quality estimation.
void setClustersNames(const std::string &svdClustersName, const std::string &pxdClustersName)
Setter for StoreArray names of SVD and PXD clusters.
This is the Reconstruction Event-Data Model Track.
void setSeedCovariance(const TMatrixDSym &seedCovariance)
Set the covariance of the seed. ATTENTION: This is not the fitted covariance.
void setQualityIndicator(const float qualityIndicator)
Set the quality index attached to this RecoTrack. 0 means likely fake.
static void registerRequiredRelations(StoreArray< RecoTrack > &recoTracks, std::string const &pxdHitsStoreArrayName="", std::string const &svdHitsStoreArrayName="", std::string const &cdcHitsStoreArrayName="", std::string const &bklmHitsStoreArrayName="", std::string const &eklmHitsStoreArrayName="", std::string const &recoHitInformationStoreArrayName="")
Convenience method which registers all relations required to fully use a RecoTrack.
bool addSVDHit(const UsedSVDHit *svdHit, const unsigned int sortingParameter, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds a svd hit with the given information to the reco track.
Class for type safe access to objects that are referred to in relations.
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
@ c_isActive
bit 11: SPTC is active (i.e.
SpacePoint typically is build from 1 PXDCluster or 1-2 SVDClusters.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
void initialize() override
Receive and dispatch signal before the start of the event processing.
void beginRun() override
Receive and dispatch signal for the beginning of a new run.
void beginEvent() override
Receive and dispatch signal for the start of a new event.
virtual void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
Forward prefixed parameters of this findlet to the module parameter list.
Interface for an algorithm part that needs to receive the module processing signals.
static const double T
[tesla]
std::string m_param_EstimationMethod
Identifier which estimation method to use.
void initialize() override
Create the store arrays.
bool m_param_MCStrictQualityEstimator
Only required for MCInfo method.
std::set< const SVDCluster * > m_usedClusters
Store the used clusters in the results.
void beginRun() override
Begin run.
std::string m_param_RecoTracksStoreArrayName
StoreArray name of the output Track StoreArray.
std::string m_param_MCRecoTracksStoreArrayName
sets the name of the expected StoreArray containing MCRecoTracks. Only required for MCInfo method
void beginEvent() override
Reset internal vectors.
std::unique_ptr< QualityEstimatorBase > m_estimator
pointer to the selected QualityEstimator
void apply(const std::vector< SpacePointTrackCand > &finishedResults, const std::vector< const SpacePoint * > &spacePoints) override
Store the finishey SpacePointTrackCands into RecoTracks and tag the SpacePoints.
StoreArray< RecoTrack > m_storeRecoTracks
Output RecoTracks Store Array.
std::set< const SpacePoint * > m_usedSpacePoints
Store the used space points in the results.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters of the sub findlets.
std::string m_param_SVDClustersStoreArrayName
StoreArray name of the SVDCluster StoreArray.
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Abstract base class for different kinds of events.