Belle II Software development
CDCCKFEclSeedCreator Class Referenceabstract

Findlet for. More...

#include <CDCCKFEclSeedCreator.h>

Inheritance diagram for CDCCKFEclSeedCreator:
Findlet< CDCCKFPath > CompositeProcessingSignalListener ProcessingSignalListener

Public Types

using IOTypes
 Types that should be served to apply on invocation.
 
using IOTypes
 Types that should be served to apply on invocation.
 
using IOVectors
 Vector types that should be served to apply on invocation.
 
using IOVectors
 Vector types that should be served to apply on invocation.
 

Public Member Functions

 CDCCKFEclSeedCreator ()
 Add the subfindlets.
 
void exposeParameters (ModuleParamList *moduleParamList, const std::string &prefix) override
 Expose the parameters of the sub findlets.
 
void initialize () override
 Create the store arrays.
 
void apply (std::vector< CDCCKFPath > &seeds) override
 Load in the reco tracks and the hits.
 
virtual std::string getDescription ()
 Brief description of the purpose of the concrete findlet.
 
virtual std::string getDescription ()
 Brief description of the purpose of the concrete findlet.
 
virtual void apply (ToVector< AIOTypes > &... ioVectors)=0
 Main function executing the algorithm.
 
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.
 
void endRun () override
 Receive and dispatch signal for the end of the run.
 
void terminate () override
 Receive and dispatch Signal for termination of the event processing.
 

Protected Types

using ToVector
 Short hand for ToRangeImpl.
 
using ToVector
 Short hand for ToRangeImpl.
 

Protected Member Functions

void addProcessingSignalListener (ProcessingSignalListener *psl)
 Register a processing signal listener to be notified.
 
int getNProcessingSignalListener ()
 Get the number of currently registered listeners.
 

Private Types

using Super = TrackFindingCDC::Findlet<CDCCKFPath>
 Parent class.
 

Private Attributes

std::string m_param_inputEclShowerStoreArrayName = "ECLShowers"
 StoreArray name of the input Ecl Shower Store Array.
 
std::string m_param_eclSeedRecoTrackStoreArrayName = "EclSeedRecoTracks"
 StoreArray name of the output Track Store Array.
 
double m_param_minimalEnRequirement = 0.3
 Minimal pt requirement.
 
bool m_param_restrictToForwardSeeds = true
 Don't do Ecl seeding in central region to save computing time.
 
double m_param_showerDepth = 12.
 Correction if the shower is assumed to start in a certain depth.
 
double m_param_tanLambdaForwardNeg = -0.8
 Up to which (neg) tanLambda value should the seeding be performed.
 
double m_param_tanLambdaForwardPos = 1.8
 Up to which (pos) tanLambda value should the seeding be performed.
 
StoreArray< ECLShowerm_inputECLshowers
 Input ECL Showers Store Array.
 
StoreArray< RecoTrackm_eclSeedRecoTracks
 Output Reco Tracks Store Array.
 
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
 References to subordinary signal processing listener contained in this findlet.
 
bool m_initialized
 Flag to keep track whether initialization happened before.
 
bool m_terminated
 Flag to keep track whether termination happened before.
 
std::string m_initializedAs
 Name of the type during initialisation.
 

Detailed Description

Findlet for.

Definition at line 31 of file CDCCKFEclSeedCreator.h.

Member Typedef Documentation

◆ IOTypes [1/2]

using IOTypes
inherited

Types that should be served to apply on invocation.

Definition at line 30 of file Findlet.h.

◆ IOTypes [2/2]

using IOTypes
inherited

Types that should be served to apply on invocation.

Definition at line 30 of file Findlet.h.

◆ IOVectors [1/2]

using IOVectors
inherited

Vector types that should be served to apply on invocation.

Definition at line 53 of file Findlet.h.

◆ IOVectors [2/2]

using IOVectors
inherited

Vector types that should be served to apply on invocation.

Definition at line 53 of file Findlet.h.

◆ Super

Parent class.

Definition at line 33 of file CDCCKFEclSeedCreator.h.

◆ ToVector [1/2]

using ToVector
protectedinherited

Short hand for ToRangeImpl.

Definition at line 49 of file Findlet.h.

◆ ToVector [2/2]

using ToVector
protectedinherited

Short hand for ToRangeImpl.

Definition at line 49 of file Findlet.h.

Constructor & Destructor Documentation

◆ CDCCKFEclSeedCreator()

Add the subfindlets.

Definition at line 24 of file CDCCKFEclSeedCreator.cc.

24 : Super()
25{
26
27}
TrackFindingCDC::Findlet< CDCCKFPath > Super
Parent class.

Member Function Documentation

◆ addProcessingSignalListener()

void addProcessingSignalListener ( ProcessingSignalListener * psl)
protectedinherited

Register a processing signal listener to be notified.

Definition at line 53 of file CompositeProcessingSignalListener.cc.

56{
58}
Interface for a minimal algorithm part that wants to expose some parameters to a module.
Definition Findlet.h:26

◆ apply()

void apply ( std::vector< CDCCKFPath > & seeds)
override

Load in the reco tracks and the hits.

Definition at line 77 of file CDCCKFEclSeedCreator.cc.

78{
79 // loop over all showers and create seed objects
80 for (auto& shower : m_inputECLshowers) {
81 if (shower.getHypothesisId() != ECLShower::c_nPhotons) {
82 continue;
83 }
84
85 const double Eclus = shower.getEnergy();
86 if (Eclus < m_param_minimalEnRequirement) {
87 continue;
88 }
89
90 // Get shower position, momentum
91 const double thetaClus = shower.getTheta();
92 const double phiClus = shower.getPhi();
93 const double rClus = shower.getR();
94
95 const double sinTheta = sin(thetaClus);
96 const double cosTheta = cos(thetaClus);
97 const double sinPhi = sin(phiClus);
98 const double cosPhi = cos(phiClus);
99
100 ROOT::Math::XYZVector pos(rClus * sinTheta * cosPhi, rClus * sinTheta * sinPhi, rClus * cosTheta);
101 const double tanLambda = pos.Z() / pos.Rho();
102
103 // restrict to forward seeds
105 if (tanLambda > m_param_tanLambdaForwardNeg && tanLambda < m_param_tanLambdaForwardPos) {
106 continue;
107 }
108 }
109
110 // Correction if shower is assumed to start in a certain depth
111 pos = pos - m_param_showerDepth / pos.R() * pos;
112
113 ROOT::Math::XYZVector mom = Eclus / pos.R() * pos;
114
115 // Calculate helix trajectory for negative and positive charge seeds
116 // Find center of circular trajectory
117 // factor 1. for charge // speed of light in [cm per ns] // const magnetic field
118 double rad = std::abs(mom.Rho() / (Const::speedOfLight * 1e-4 * 1. * 1.5));
119
120 // Particle would not be able to reach ECL (underestimation of shower energy)
121 if (2. * rad < pos.Rho()) {
122 rad = pos.Rho() / 2.0 + 1.0;
123 }
124
125 // Use pq formula (center of circle has to be on perpendicular line through center of line between (0,0) and seed position)
126 double q = pos.Rho();
127 double y3 = pos.Y() / 2.0;
128 double x3 = pos.X() / 2.0;
129
130 double basex = sqrt(rad * rad - q * q / 4.0) * (-pos.Y()) / q;
131 double basey = sqrt(rad * rad - q * q / 4.0) * pos.X() / q;
132
133 double centerx1 = x3 + basex;
134 double centery1 = y3 + basey;
135 double centerx2 = x3 - basex;
136 double centery2 = y3 - basey;
137
138 // vectors for tangent at seed position (perpendicular to radius at seed position)
139 double momx1 = pos.Y() - centery1;
140 double momy1 = - (pos.X() - centerx1);
141 double momx2 = pos.Y() - centery2;
142 double momy2 = - (pos.X() - centerx2);
143
144 // two solutions (pointing toward and away from center)
145 // make sure that particle moves inwards
146 if (momx1 * pos.X() + momy1 * pos.Y() < 0) {
147 momx1 = -momx1;
148 momy1 = -momy1;
149 }
150 if (momx2 * pos.X() + momy2 * pos.Y() < 0) {
151 momx2 = -momx2;
152 momy2 = -momy2;
153 }
154
155 // scale to unit length
156 double mom1abs = sqrt(momx1 * momx1 + momy1 * momy1);
157 double mom2abs = sqrt(momx2 * momx2 + momy2 * momy2);
158 momx1 = momx1 / mom1abs;
159 momy1 = momy1 / mom1abs;
160 momx2 = momx2 / mom2abs;
161 momy2 = momy2 / mom2abs;
162
163 ROOT::Math::XYZVector mom1(momx1 * mom.Rho(), momy1 * mom.Rho(), mom.Z());
164 ROOT::Math::XYZVector mom2(momx2 * mom.Rho(), momy2 * mom.Rho(), mom.Z());
165
166 // Pick the right momentum for positive/negative charge
167 // Use cross product if momentum vector is (counter)clockwise wrt position vector
168 bool clockwise1 = true;
169 bool clockwise2 = true;
170 if (pos.Y() * mom1.X() - pos.X() * mom1.Y() > 0) {
171 clockwise1 = false;
172 }
173 if (pos.Y() * mom2.X() - pos.X() * mom2.Y() > 0) {
174 clockwise2 = false;
175 }
176
177 if (clockwise1 == clockwise2) {
178 B2WARNING("Something went wrong during helix extrapolation. Skipping track.");
179 continue;
180 }
181
182 ROOT::Math::XYZVector mompos;
183 ROOT::Math::XYZVector momneg;
184 if (clockwise1) {
185 mompos = mom2;
186 momneg = mom1;
187 } else {
188 mompos = mom1;
189 momneg = mom2;
190 }
191
192 // electron and positron hypothesis
193 RecoTrack* eclSeedNeg = m_eclSeedRecoTracks.appendNew(pos, momneg, -1);
194 eclSeedNeg->addRelationTo(&shower);
195 RecoTrack* eclSeedPos = m_eclSeedRecoTracks.appendNew(pos, mompos, +1);
196 eclSeedPos->addRelationTo(&shower);
197
198 // define MeasuredStateOnPlane (use pion hypothesis)
199 genfit::AbsTrackRep* repNeg = RecoTrackGenfitAccess::createOrReturnRKTrackRep(*eclSeedNeg, -Const::pion.getPDGCode());
200 genfit::MeasuredStateOnPlane msopNeg(repNeg);
201 genfit::AbsTrackRep* repPos = RecoTrackGenfitAccess::createOrReturnRKTrackRep(*eclSeedPos, Const::pion.getPDGCode());
202 genfit::MeasuredStateOnPlane msopPos(repPos);
203
204 // set position, momentum, cov, sharedPlanePtr
205 TMatrixDSym cov(6);
206 double covArray[6];
207 shower.getCovarianceMatrixAsArray(covArray);
208
209 // Calculate uncertainties on position from ECLShower
210 double dx2 = rClus * cosTheta * cosPhi * rClus * cosTheta * cosPhi * covArray[5]
211 + rClus * sinTheta * sinPhi * rClus * sinTheta * sinPhi * covArray[2];
212 double dy2 = rClus * cosTheta * sinPhi * rClus * cosTheta * sinPhi * covArray[5]
213 + rClus * sinTheta * cosPhi * rClus * sinTheta * cosPhi * covArray[2];
214 double dz2 = rClus * sinTheta * rClus * sinTheta * covArray[5];
215
216 double dpx2 = std::abs(mom1.X() - mom2.X()) / 4.0 * std::abs(mom1.X() - mom2.X()) / 4.0;
217 double dpy2 = std::abs(mom1.Y() - mom2.Y()) / 4.0 * std::abs(mom1.Y() - mom2.Y()) / 4.0;
218 double dpz2 = 0.25 * 0.25 * mom.Z() * mom.Z();
219
220 cov(0, 0) = dx2;
221 cov(1, 1) = dy2;
222 cov(2, 2) = dz2;
223 cov(3, 3) = dpx2;
224 cov(4, 4) = dpy2;
225 cov(5, 5) = dpz2;
226
227 // set properties of genfit objects
228 genfit::SharedPlanePtr planeNeg(new genfit::DetPlane(XYZToTVector(pos), XYZToTVector(pos)));
229 genfit::SharedPlanePtr planePos(new genfit::DetPlane(XYZToTVector(pos), XYZToTVector(pos)));
230 msopNeg.setPosMomCov(XYZToTVector(pos), XYZToTVector(momneg), cov);
231 msopNeg.setPlane(planeNeg);
232 msopPos.setPosMomCov(XYZToTVector(pos), XYZToTVector(mompos), cov);
233 msopPos.setPlane(planePos);
234
235 // create CDCCKF states
236 CDCCKFState seedStateNeg(eclSeedNeg, msopNeg);
237 seeds.push_back({seedStateNeg});
238 CDCCKFState seedStatePos(eclSeedPos, msopPos);
239 seeds.push_back({seedStatePos});
240 }
241}
StoreArray< ECLShower > m_inputECLshowers
Input ECL Showers Store Array.
bool m_param_restrictToForwardSeeds
Don't do Ecl seeding in central region to save computing time.
double m_param_minimalEnRequirement
Minimal pt requirement.
StoreArray< RecoTrack > m_eclSeedRecoTracks
Output Reco Tracks Store Array.
double m_param_tanLambdaForwardNeg
Up to which (neg) tanLambda value should the seeding be performed.
double m_param_tanLambdaForwardPos
Up to which (pos) tanLambda value should the seeding be performed.
double m_param_showerDepth
Correction if the shower is assumed to start in a certain depth.
static const ChargedStable pion
charged pion particle
Definition Const.h:661
static const double speedOfLight
[cm/ns]
Definition Const.h:695
@ c_nPhotons
CR is split into n photons (N1)
Definition ECLShower.h:42
static genfit::AbsTrackRep * createOrReturnRKTrackRep(RecoTrack &recoTrack, int PDGcode)
Checks if a TrackRap for the PDG id of the RecoTrack (and its charge conjugate) does already exit and...
Definition RecoTrack.cc:409
void addRelationTo(const RelationsInterface< BASE > *object, float weight=1.0, const std::string &namedRelation="") const
Add a relation from this object to another object (with caching).
static constexpr auto XYZToTVector
Helper function to convert XYZVector to TVector3.
Definition VectorUtil.h:24
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28

◆ beginEvent()

void beginEvent ( )
overrideinherited

Receive and dispatch signal for the start of a new event.

Definition at line 36 of file CompositeProcessingSignalListener.cc.

32{
35 psl->beginEvent();
36 }
37}
void beginEvent() override
Receive and dispatch signal for the start of a new event.
virtual void beginEvent()
Receive signal for the start of a new event.

◆ beginRun()

void beginRun ( )
overrideinherited

Receive and dispatch signal for the beginning of a new run.

Definition at line 33 of file CompositeProcessingSignalListener.cc.

24{
27 psl->beginRun();
28 }
29}
void beginRun() override
Receive and dispatch signal for the beginning of a new run.
virtual void beginRun()
Receive signal for the beginning of a new run.

◆ endRun()

void endRun ( )
overrideinherited

Receive and dispatch signal for the end of the run.

Definition at line 39 of file CompositeProcessingSignalListener.cc.

40{
42 psl->endRun();
43 }
45}
void endRun() override
Receive and dispatch signal for the end of the run.
virtual void endRun()
Receive signal for the end of the run.

◆ exposeParameters()

void exposeParameters ( ModuleParamList * moduleParamList,
const std::string & prefix )
overridevirtual

Expose the parameters of the sub findlets.

Reimplemented from CompositeProcessingSignalListener.

Definition at line 29 of file CDCCKFEclSeedCreator.cc.

30{
31 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "inputECLshowersStoreArrayName"),
33 "StoreArray name of the input Shower Store Array.");
34
35 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "eclSeedRecoTrackStoreArrayName"),
37 "StoreArray name of the output Track Store Array.");
38
39 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "minimalEnRequirementCluster"),
41 "Minimal energy requirement for the input clusters",
43
44 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "restrictToForwardSeeds"),
46 "Don't do Ecl seeding in central region to save computing time",
48
49 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "tanLambdaForwardNeg"),
51 "Up to which (neg) tanLambda value should the seeding be performed",
53
54 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "tanLambdaForwardPos"),
56 "Up to which (pos) tanLambda value should the seeding be performed",
58
59 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "showerDepth"),
61 "Don't do Ecl seeding in central region to save computing time",
63}
std::string m_param_inputEclShowerStoreArrayName
StoreArray name of the input Ecl Shower Store Array.
std::string m_param_eclSeedRecoTrackStoreArrayName
StoreArray name of the output Track Store Array.
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.

◆ getDescription() [1/2]

virtual std::string getDescription ( )
inlinevirtualinherited

Brief description of the purpose of the concrete findlet.

Definition at line 60 of file Findlet.h.

61 {
62 return "(no description)";
63 }

◆ getDescription() [2/2]

virtual std::string getDescription ( )
inlinevirtualinherited

Brief description of the purpose of the concrete findlet.

Definition at line 60 of file Findlet.h.

61 {
62 return "(no description)";
63 }

◆ getNProcessingSignalListener()

int getNProcessingSignalListener ( )
protectedinherited

Get the number of currently registered listeners.

Definition at line 56 of file CompositeProcessingSignalListener.cc.

61{
63}

◆ initialize()

void initialize ( )
overridevirtual

Create the store arrays.

Reimplemented from ProcessingSignalListener.

Definition at line 65 of file CDCCKFEclSeedCreator.cc.

66{
68
70
73
74 m_eclSeedRecoTracks.registerRelationTo(m_inputECLshowers);
75}
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.
Definition RecoTrack.cc:53

◆ terminate()

void terminate ( )
overrideinherited

Receive and dispatch Signal for termination of the event processing.

Definition at line 42 of file CompositeProcessingSignalListener.cc.

48{
50 psl->terminate();
51 }
53}
void terminate() override
Receive and dispatch Signal for termination of the event processing.
virtual void terminate()
Receive Signal for termination of the event processing.

Member Data Documentation

◆ m_eclSeedRecoTracks

StoreArray<RecoTrack> m_eclSeedRecoTracks
private

Output Reco Tracks Store Array.

Definition at line 71 of file CDCCKFEclSeedCreator.h.

◆ m_initialized

bool m_initialized
privateinherited

Flag to keep track whether initialization happened before.

Definition at line 52 of file ProcessingSignalListener.h.

◆ m_initializedAs

std::string m_initializedAs
privateinherited

Name of the type during initialisation.

Definition at line 58 of file ProcessingSignalListener.h.

◆ m_inputECLshowers

StoreArray<ECLShower> m_inputECLshowers
private

Input ECL Showers Store Array.

Definition at line 69 of file CDCCKFEclSeedCreator.h.

◆ m_param_eclSeedRecoTrackStoreArrayName

std::string m_param_eclSeedRecoTrackStoreArrayName = "EclSeedRecoTracks"
private

StoreArray name of the output Track Store Array.

Definition at line 55 of file CDCCKFEclSeedCreator.h.

◆ m_param_inputEclShowerStoreArrayName

std::string m_param_inputEclShowerStoreArrayName = "ECLShowers"
private

StoreArray name of the input Ecl Shower Store Array.

Definition at line 53 of file CDCCKFEclSeedCreator.h.

◆ m_param_minimalEnRequirement

double m_param_minimalEnRequirement = 0.3
private

Minimal pt requirement.

Definition at line 57 of file CDCCKFEclSeedCreator.h.

◆ m_param_restrictToForwardSeeds

bool m_param_restrictToForwardSeeds = true
private

Don't do Ecl seeding in central region to save computing time.

Definition at line 59 of file CDCCKFEclSeedCreator.h.

◆ m_param_showerDepth

double m_param_showerDepth = 12.
private

Correction if the shower is assumed to start in a certain depth.

Definition at line 61 of file CDCCKFEclSeedCreator.h.

◆ m_param_tanLambdaForwardNeg

double m_param_tanLambdaForwardNeg = -0.8
private

Up to which (neg) tanLambda value should the seeding be performed.

Definition at line 63 of file CDCCKFEclSeedCreator.h.

◆ m_param_tanLambdaForwardPos

double m_param_tanLambdaForwardPos = 1.8
private

Up to which (pos) tanLambda value should the seeding be performed.

Definition at line 65 of file CDCCKFEclSeedCreator.h.

◆ m_subordinaryProcessingSignalListeners

std::vector<ProcessingSignalListener*> m_subordinaryProcessingSignalListeners
privateinherited

References to subordinary signal processing listener contained in this findlet.

Definition at line 60 of file CompositeProcessingSignalListener.h.

◆ m_terminated

bool m_terminated
privateinherited

Flag to keep track whether termination happened before.

Definition at line 55 of file ProcessingSignalListener.h.


The documentation for this class was generated from the following files: