12#ifndef REC_MUC_TRACK_H
13#define REC_MUC_TRACK_H
15#include "GaudiKernel/ContainedObject.h"
16#include "GaudiKernel/SmartRef.h"
17#include "GaudiKernel/ObjectVector.h"
18#include "EventModel/EventModel.h"
19#include "Identifier/Identifier.h"
20#include "ExtEvent/RecExtTrack.h"
21#include "DstEvent/DstMucTrack.h"
23#include "MucRecEvent/MucRecHit.h"
44 virtual const CLID&
clID()
const
136 Hep3Vector& mucStartPos, Hep3Vector& mucStartMomentum);
148 void Project(
const int& part,
const int& gap,
149 float& x,
float&
y,
float& z,
228 void LineFit(
int fittingMethod);
273 int GetHitInGap(
const int part,
const int gap)
const;
276 int GetHitInSeg(
const int part,
const int seg)
const;
291 bool HasHit(
const int part,
const int seg,
const int gap,
const int strip)
const;
294 bool HasHitInGap(
const int part,
const int gap)
const;
303 vector<MucRecHit*>
GetHits()
const;
341 void setDistHits(vector<float>& disthits){ m_distHits = disthits;}
354 Hep3Vector m_MdcMomentum;
356 Hep3Vector m_ExtMucPos;
357 Hep3Vector m_ExtMucMomentum;
360 Hep3Vector m_MucMomentum;
361 Hep3Vector m_MucPosSigma;
363 Hep3Vector m_CurrentPos;
364 Hep3Vector m_CurrentDir;
365 Hep3Vector m_CurrentInsct;
366 Hep3Vector m_Dist_muc_ext;
367 Hep3Vector m_StripPhi;
378 Hep3Vector m_IntersectionInner[9];
379 Hep3Vector m_IntersectionOuter[9];
382 vector<int> m_vecHits;
383 vector<int> m_expHits;
384 vector<float> m_distHits;
385 vector<float> m_distHits_quad;
386 vector<float> m_distHits_ext;
387 vector<MucRecHit*> m_pHits;
388 vector<MucRecHit*> m_pExpectedHits;
389 vector<Hep3Vector> m_Intersections;
390 vector<Hep3Vector> m_Directions;
ObjectVector< RecMucTrack > RecMucTrackCol
const CLID & CLID_RecMucTrack
const CLID & CLID_RecMucTrack
int GetTotalHits() const
How many hits in all does this track contain?
void LineFit(int fittingMethod)
Line fit with hits on a seg with max hits.
void CorrectPos()
Correct current position of this trajectory.
void PrintHitsInfo() const
Print Hits Infomation.
void CorrectDir()
Correct direction of this trajectory.
void ComputeTrackInfo(int fittingmethod)
Get corresponding monte carlo track pointer.
void pushExtDistHits(float dist)
int GetNGapsWithHits() const
How many gaps provide hits attached to this track?
vector< float > getExtDistHits() const
void setDistHits(vector< float > &disthits)
void SetMdcMomentum(const float px, const float py, const float pz)
set start moment of the track in Mdc.
void setExpHits(vector< MucRecHit * > &pHits)
void SetMucPosSigma(const float sigmax, const float sigmay, const float sigmaz)
MucRecHit * GetHit(const int part, const int gap) const
Get a pointer to the first hit attached in a particular gap.
Hep3Vector getMucPos() const
start position of this track in Muc.
bool IsInsideSuperConductor(Hep3Vector pos)
int GetHitInSeg(const int part, const int seg) const
How many hits does a segment contains.
Hep3Vector getMucPosSigma() const
~RecMucTrack()
Destructor.
void AttachInsct(Hep3Vector insct)
Attach the intersection to this trajectory.
int brFirstLayer() const
Which gap on Barrel is the first one with hits attached to this track?
void SetExtMucPos(const float x, const float y, const float z)
set start position of ext track in Muc. (compute from MdcPos MdcMomentum or get from ExtTrack)
Hep3Vector getExtMucMomentum() const
Start momentum of the Ext track in Muc.
int GetNSharedHits(const RecMucTrack *track) const
How many hits do two tracks share?
void ComputeNGapsWithHits()
ComputeNGapsWithHits;.
void SetExtTrackID(int id)
set Ext track id. for compute from mdc myself
void SetMdcPos(const float x, const float y, const float z)
set start position of the track in Mdc.
void SetCurrentDir(const float x, const float y, const float z)
set current direction of the trajectory.
void ComputeDepth()
chi2 of line fit
virtual const CLID & clID() const
float GetHitDistance(const MucRecHit *hit)
Calculate the distance of the hit to the intersection in read direction.
void SetExtTrack(RecExtTrack *extTrack)
set Ext track point.
void setTrackId(const int trackId)
set the index for this track.
vector< int > getExpHits() const
bool HasHit(const int part, const int seg, const int gap, const int strip) const
How many hits were attached in the gap with the most attached hits?
Hep3Vector GetExtMucDistance() const
Distance match of the ext track with muc track in first layer.
void GetMdcExtTrack(Hep3Vector mdcStartPos, Hep3Vector mdcStartMomentum, int charge, Hep3Vector &mucStartPos, Hep3Vector &mucStartMomentum)
compute ext track myself from mdc.
Hep3Vector GetMucStripPos() const
void ComputeMaxHitsInGap()
ComputeMaxHitsInGap;.
static const CLID & classID()
Hep3Vector GetCurrentDir() const
Current direction.
int GetHitInGap(const int part, const int gap) const
How many hits per gap does this track contain?
int FindSegWithMaxHits(int &part, int &seg)
Find the segment which contains most hits, return max hits number.
Hep3Vector getMdcMomentum() const
momentum of this track in Mdc
Hep3Vector CalculateInsct(const int part, const int seg, const int gap)
Calculate intersection from all hits attached on this gap.
void Project(const int &part, const int &gap, float &x, float &y, float &z, int &seg)
Where does the trajectory of this track intersect a specific gap?
vector< float > getQuadDistHits() const
void SetMucMomentum(const float px, const float py, const float pz)
set start moment of the track in Muc.
void setVecHits(vector< MucRecHit * > &pHits)
reload setVecHits
Hep3Vector GetCurrentInsct() const
Current intersection.
vector< long > GetHitIndices() const
Get indices of all hits in the track.
int GetHitInSegOrient(const int part, const int seg, const int orient) const
How many hits does a segment contains in one orient.
void SetExtMucMomentum(const float px, const float py, const float pz)
set start moment of ext track in Muc.
int getExtTrackID() const
Where does the trajectory of this track intersect the reference plane?
void setVecHits(vector< int > &vechits)
RecMucTrack & operator=(const RecMucTrack &orig)
Assignment constructor.
vector< MucRecHit * > GetHits() const
Get all hits on this track.
void AttachHit(MucRecHit *hit)
set corresponding monte carlo track pointer.
Hep3Vector GetCurrentPos() const
Current position.
void SetCurrentInsct(const float x, const float y, const float z)
set current intersection of the trajectory with strip plane.
void ComputeDistanceMatch()
Compute distance match //2006.11.08.
void setExpHits(vector< int > &exphits)
void OutputUnitChange()
change unit
void setExtDistHits(vector< float > &disthits)
Hep3Vector getMucMomentum() const
Start momentum of this track in Muc.
void SetCurrentPos(const float x, const float y, const float z)
set current position of the trajectory.
vector< MucRecHit * > GetExpectedHits() const
int ecFirstLayer() const
Which gap on EndCap is the first one with hits attached to this track?
void SetRecMode(int recmode)
Hep3Vector getExtMucPos() const
start position of the Ext track in Muc.
vector< int > getVecHits() const
float GetDepth3() const
Length of the track penetrating in iron absorber.
void SetMucPos(const float x, const float y, const float z)
set start position of the track in Muc. (after line fit and correction)
float GetHitDistance2(const MucRecHit *hit)
no abs value
vector< float > getDistHits() const
void Extend()
Extend mucpos and extmucpos to first layer of muc.
bool HasHitInGap(const int part, const int gap) const
Does this track contain any hits in the given gap?
void ComputeLastGap()
Comute last gap in barrel and endcap.
RecMucTrack()
Constructor.
void setQuadDistHits(vector< float > &disthits)
void AttachDirection(Hep3Vector dir)
Attach the direction to this trajectory.