You can subscribe to this list here.
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(8) |
Aug
|
Sep
(2) |
Oct
(1) |
Nov
(1) |
Dec
(2) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Johannes R. <j....@tu...> - 2016-03-03 10:12:13
|
Dear GenFit users, we moved the genfit repository to github, to provide easier maintenance in the future. You can find the new repository at https://github.com/GenFit/GenFit We will leave the repository at sourceforge as it is, and only maintain the github repository, so I recommend to use the github repository. Kind regards, Johannes |
|
From: Thomas R. <Tho...@ce...> - 2015-07-23 09:19:23
|
Dear All,
I am observing a large memory leak when reading back events with genfit::Track objects saved in a TClonesArray. The branch is made with
fGenFitArray = ROOT.TClonesArray("genfit::Track")
fGenFitArray.BypassStreamer(ROOT.kFALSE)
fitTracks = sTree.Branch("FitTracks", fGenFitArray,32000,-1)
...
fGenFitArray[nTrack] = theTrack
Just running: for i in range(sTree.GetEntries()): rc = sTree.GetEvent(i)
where sTree is a ROOT TTree object containing all events gives a continuous increase of memory consumption. This leak disappears when switching of the branch with fitted tracks:
sTree.GetBranch("FitTracks"): sTree.SetBranchStatus("FitTracks",0)
Any ideas what I am missing?
Thanks for your help, Thomas
|
|
From: Johannes R. <j....@tu...> - 2013-11-13 02:53:16
|
Dear Genfit users, the new version of genfit (genfit2), which has been under development for several months now, has been moved to the trunk. I also made a new tag (v02-00-00). The old trunk version (genfit1) has been moved to tags/v01-01-00. You can use the "svn switch" command to switch to the new repository positions. Kind regards, Johannes -- Dipl.-Phys. Univ. Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-12-18 13:36:34
|
There was a tiny error in the list (GFTrack::addHit takes signed ints).
And there has been a small bug fix in the RKTrackRep, which is now in
the trunk (v897).
Dear Genfit users,
as promised some days ago, there is a new Genfit revision available.
This new revision is now in the trunk (v897).
As the interface has changed, the old trunk revision (trunk v879) has
been made genfit v1 (available in tags/v01-00-00/).
We have many plans on our list, and their implementation might require
additional interface changes.
So we decided not to make a tag from the new trunk. Once we have
implemented all new features and feel that the interface has
"converged", that will become genfit v2.
The rest of this mail gives an overview of what has changed in the
current trunk version compared to the v1 version.
There are some changes where your compiler won't warn you if you don't
make the right changes to your code. They are marked with *ATTENTION.*
Major design changes
* *changed all state vectors from TMatrixT<double> to TVectorD.*
* *changed all covariance matrices from TMatrixT<double> to
TMatrixDSym.*
* replaced the RecoHitIfc<HitPolicy> with an *inheritance structure
for the different hit types.
*
* The GFDaf is now able to* resolve the left/right ambiguity of wire
hits.*
* Introduced* *a new *GFTrackCandHit*. You can make a class
inheriting from GFTrackCandHit, where you can *store additional
information*, if needed (e.g. left/right ambiguity of wire hits
determined by the pattern recognition).
* Introduced a *material interface* in RKTrackRep/ (might still be
subject to changes).
* Changed the GFBookkeeping from std::string to enum based.
* Both GFKalman and GFDaf now inherit from GFAbsFitter.
Code review and performance improvements
* General code review, cleanup, removal of deprecated functions,
performance improvements.
* Tested GFDaf with all kinds of hit types, smoothing enabled, but
without material effects, and compared to current trunk version
and calculated speedup factors (execution time of development
version / execution time of trunk version):
o GFDaf::processTrack: 0.21
o GFDaf::calcWeights: 0.085
o GFKalman::processTrack: 0.53
* *That means track fitting is now up to 5 time faster with the DAF,
and up to 2 times faster with the Kalman!*
Changes in the interface
Changes in core/
Uncommented changes are related to the change to TVectorD and TMatrixDSym.
Class
old Function
new Function
Comment
GFAbsTrackRep virtual double extrapolate(const GFDetPlane& plane,
TMatrixT<double>& statePred); virtual double extrapolate(const
GFDetPlane& plane, TVectorD& statePred);
virtual void extrapolateToPoint(const TVector3& point,
TVector3& poca,
TVector3& normVec);
virtual double extrapolateToPoint(const TVector3& point,
TVector3& poca,
TVector3& normVec);
returning extrapolated length
virtual void extrapolateToLine(const TVector3& point1,
const TVector3& point2,
TVector3& poca,
TVector3& normVec,
TVector3& poca_onwire);
virtual double extrapolateToLine(const TVector3& point1,
const TVector3& point2,
TVector3& poca,
TVector3& normVec,
TVector3& poca_onwire);
returning extrapolated length
virtual double extrapolate(const GFDetPlane& plane,
TMatrixT<double>& statePred,
TMatrixT<double>& covPred)=0;
virtual double extrapolate(const GFDetPlane& plane,
TVectorD& statePred,
TMatrixDSym& covPred)=0;
inline TMatrixT<double> getState() const
inline const TVectorD& getState() const
inline TMatrixT<double> getCov() const
inline const TMatrixDSym& getCov() const
virtual void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3&
mom,TMatrixT<double>& cov);
virtual void getPosMomCov(const GFDetPlane& pl, TVector3& pos,
TVector3& mom, TMatrixDSym& cov);
void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& c)
void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& c)
inline TMatrixT<double> getFirstState() const
inline const TVectorD& getFirstState() const
inline TMatrixT<double> getFirstCov()
inline const TMatrixDSym& getFirstCov()
inline TMatrixT<double> getLastState()
inline const TVectorD& getLastState()
inline TMatrixT<double> getLastCov() const
inline const TMatrixDSym& getLastCov() const
virtual void setData(const TMatrixT<double>& st, const GFDetPlane& pl,
const TMatrixT<double>* cov=NULL, const TMatrixT<double>* aux=NULL)
virtual void setData(const TVectorD& st, const GFDetPlane& pl, const
TMatrixDSym* cov=NULL, const TMatrixD* aux=NULL)
inline void setCov(const TMatrixT<double>& aCov)
inline void setCov(const TMatrixDSym& aCov)
inline void setFirstState(const TMatrixT<double>& aState)
inline void setFirstState(const TVectorD& aState)
inline void setFirstCov(const TMatrixT<double>& aCov)
inline void setFirstCov(const TMatrixDSym& aCov)
inline void setLastState(const TMatrixT<double>& aState)
inline void setLastState(const TVectorD& aState)
inline void setLastCov(const TMatrixT<double>& aCov)
inline void setLastCov(const TMatrixDSym& aCov)
virtual void setPosMomCov(const TVector3& pos, const TVector3& mom,
const TMatrixT<double>& cov)
virtual void setPosMomCov(const TVector3& pos, const TVector3& mom,
const TMatrixDSym& cov)
bool setInverted(bool f=true)
removed
virtual const TMatrixT<double>* getAuxInfo(const GFDetPlane&)
virtual const TMatrixD* getAuxInfo(const GFDetPlane&)
GFAbsFitter
new class
GFBookkeeping
void bookVectors(const GFBKKey& key)
new, GFBKKey is an enum
void bookMatrices(std::string key)
void bookMatrices(const GFBKKey& key)
void bookSymMatrices(const GFBKKey& key)
new
void bookGFDetPlanes(std::string key) void bookGFDetPlanes(const
GFBKKey& key)
void bookNumbers(std::string key,double val=0.)
void bookNumbers(const GFBKKey& key,double val=0.)
void setVector(const GFBKKey& key,unsigned int index,const TVectorD& mat)
new
void setMatrix(std::string key,unsigned int index,const
TMatrixT<double>& mat)
void setMatrix(const GFBKKey& key,unsigned int index,const TMatrixD& mat)
void setSymMatrix(const GFBKKey& key,unsigned int index,const
TMatrixDSym& mat)
new
void setDetPlane(std::string key,unsigned int index,const GFDetPlane& pl)
void setDetPlane(const GFBKKey& key,unsigned int index,const
GFDetPlane& pl)
void setNumber(std::string key,unsigned int index, const double& num)
void setNumber(const GFBKKey& key,unsigned int index, const double& num)
const TVectorD& getVector(const GFBKKey& key, unsigned int index) const
new
bool getMatrix(std::string key, unsigned int index, TMatrixT<double>&
mat) const const TMatrixD& getMatrix(const GFBKKey& key, unsigned
int index) const return reference
instead of returning
by reference
const TMatrixDSym& getSymMatrix(const GFBKKey& key, unsigned int index)
const
new
bool getDetPlane(std::string key, unsigned int index, GFDetPlane& pl)
const
const GFDetPlane& getDetPlane(const GFBKKey& key, unsigned int
index) const
return reference
instead of returning
by reference
bool getNumber(std::string key, unsigned int index, double& num) const
double getNumber(const GFBKKey& key, unsigned int
index) const
return double
instead of returning
by reference
std::vector<GFBKKey> getVectorKeys() const
new
std::vector< std::string > getMatrixKeys() const std::vector<GFBKKey>
getMatrixKeys() const
std::vector<GFBKKey> getSymMatrixKeys() const
new
std::vector< std::string > getGFDetPlaneKeys() const
std::vector<GFBKKey> getGFDetPlaneKeys() const
std::vector< std::string > getNumberKeys() const
std::vector<GFBKKey> getNumberKeys() const
GFConstField
GFConstField(const TVector3& field)
new ctor taking TVector3
GFDetPlane
TVector3 getO() const
const TVector3& getO() const
return reference
instead of object
TVector3 getU() const
const TVector3& getU() const
return reference
instead of object
TVector3 getV() const
const TVector3& getV() const
return reference
instead of object
void setNormal(TVector3 n)
void setNormal(const TVector3& n)
take reference
instead of object
double distance(TVector3) const
double distance(const TVector3& point) const
take reference
instead of object
void reset()
new
bool isFinite() const
new
GFException void setMatrices(std::string, const std::vector<
TMatrixT<double> >&) void setMatrices(std::string, const
std::vector<TMatrixD>&)
GFTools
TMatrixT<double> getSmoothedPos(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TVectorD getSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned
int ihit)
TMatrixT<double> getSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TMatrixDSym getSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane, TMatrixD& auxInfo)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane, TMatrixD& auxInfo)
TMatrixT<double> getBiasedSmoothedPos(const GFTrack* trk, unsigned int
irep, unsigned int ihit)
TVectorD getBiasedSmoothedPos(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TVector3 getBiasedSmoothedPosXYZ(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
new
TVector3 getBiasedSmoothedMomXYZ(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
new
TMatrixT<double> getBiasedSmoothedCov(const GFTrack* trk, unsigned int
irep, unsigned int ihit)
TMatrixDSym getBiasedSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
void invertMatrix(const TMatrixT<double>& mat, TMatrixT<double>& inv)
void invertMatrix(const TMatrixDSym& mat, TMatrixDSym& inv, double*
determinant = NULL)
optional calculattion of determinant
GFTrack
std::vector<GFAbsRecoHit*> getHits() const
const std::vector<GFAbsRecoHit*>& getHits() const
return reference
instead of object
std::map<GFAbsRecoHit*, unsigned int> getHitMap() const
void getHitMap(std::map<GFAbsRecoHit*, unsigned int>&) const
return by reference
intead of object
void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& cov)
void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& cov)
void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3&
mom,TMatrixT<double>& cov)
void getPosMomCov(const GFDetPlane& pl, TVector3& pos, TVector3& mom,
TMatrixDSym& cov)
void addHit(GFAbsRecoHit* theHit,
unsigned int detId,
unsigned int hitId,
double rho=0.,
unsigned int planeId=0)
void addHit(GFAbsRecoHit* theHit,
int detId,
int hitId,
int planeId = -1,
double rho = 0.)
*ATTENTION*:
order of arguments
has changed
void setSmoothing(bool smooth = true, bool fast = false)
void setSmoothing(bool smooth = true)
fast smoothing is now enabled if smoothing is enabled
bool getSmoothingFast() const
removed
GFTrackCand
friend bool operator== (const GFTrackCand& lhs, const GFTrackCand&
rhs) new
friend bool operator!= (const GFTrackCand& lhs, const GFTrackCand&
rhs) new
static bool compareTrackCandHits(const GFTrackCandHit* lhs, const
GFTrackCandHit* rhs)
new
GFTrackCandHit* getHit(unsigned int i) const
new
void getHit(unsigned int i,
unsigned int& detId,
unsigned int& hitId) const
void getHit(unsigned int i,
int& detId,
int& hitId) const
ids are now signed (and have default values -1)
void getHit(unsigned int i,
unsigned int& detId,
unsigned int& hitId,
double& rho) const
void getHit(unsigned int i,
int& detId,
int& hitId,
double& rho) const
ids are now signed (and have default values -1)
void getHitWithPlane(unsigned int i,
unsigned int& detId,
unsigned int& hitId,
unsigned int& planeId) const
void getHitWithPlane(unsigned int i,
int& detId,
int& hitId,
int& planeId) const
ids are now signed (and have default values -1)
double getCurv() const
removed
double getDip() const
std::vector<unsigned int> GetHitIDs(int detId = -1) const
removed, use
std::vector<int> getHitIDs(int detId = -1) const
std::vector<unsigned int> getHitIDs(int detId = -1) const
std::vector<int> getHitIDs(int detId = -2) const
ids are now signed (and have default values -1)
std::vector<unsigned int> GetDetIDs() const
removed, use
std::vector<int> getDetIDs() const
std::vector<unsigned int> getDetIDs() const
std::vector<int> getDetIDs() const
ids are now signed (and have default values -1)
std::vector<double> GetRhos() const
removed, use
std::vector<double> getRhos() const
std::set<unsigned int> getUniqueDetIDs() const
std::set<int> getUniqueDetIDs() const
ids are now signed (and have default values -1)
TVector3 getDirSeed() const
removed, but can get momentum vector with
TVector3 getMomSeed() const
double getQoverPseed() const
removed
TMatrixD getStateSeed() const
TVectorD getStateSeed() const
TMatrixD getCovSeed() const
TMatrixDSym getCovSeed() const
void addHit(unsigned int detId, unsigned int hitId, double rho = 0.,
unsigned int planeId = 0)
void addHit(int detId,
int hitId,
int planeId = -1,
double rho = 0)
*ATTENTION*:
order of arguments
has changed and ids are now signed
void setDip(double d)
removed
void addHit(GFTrackCandHit* hit)
new
void setComplTrackSeed(const TVector3& pos, const TVector3& mom, const
int pdgCode, TVector3 posError = TVector3(1.0, 1.0, 1.0), TVector3
dirError = TVector3(1.0, 1.0, 1.0))
removed
void sortHits(std::vector<unsigned int> indices)
void sortHits(const std::vector<unsigned int>& indices)
take reference
instead of object
void set6DSeed(const TMatrixD& state6D, const double charge, TMatrixD
cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6)))
void set6DSeed(const TVectorD& state6D, const double charge, const
TMatrixDSym& cov6D)
void set6DSeed(const TVectorD& state6D, const double charge)
new
void set6DSeedAndPdgCode(const TMatrixD& state6D, const int pdgCode,
TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6)))
void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode,
const TMatrixDSym& cov6D)
void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode
new
void setPosMomSeed(const TVector3& pos, const TVector3& mom, const
double charge, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit,
TMatrixD(6, 6)))
void setPosMomSeed(const TVector3& pos, const TVector3& mom, const
double charge)
void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom,
const int pdgCode, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit,
TMatrixD(6, 6)))
void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom,
const int pdgCode, const TMatrixDSym& cov6D)
GFTrackCandHit
new class
Changes concerning RecoHits
All of your concrete RecoHits that are not directly inheriting from
GFAbsRecoHit, but from the GFRecoHitIfc have to be changed.
E.g. replace
#include "GFRecoHitIfc.h"
#include "GFPlanarHitPolicy.h"
YourRecoHit : public GFRecoHitIfc<GFPlanarHitPolicy> {
with
#include "RecoHits/GFAbsPlanarHit.h"
YourRecoHit : public GFAbsPlanarHit {
You can now call all functions of the GFAbsPlanarHit. With the previous
policy based design, you had to implement a function in YourRecoHit
which calls the corresponding function of the policy, since the policy
was a private member of the GFAbsRecoHit.
Furthermore, all RecoHits now optionally take a dimensionality as an
argument to their constructor. Therefore you can implement RecoHits
which have additional dimension, e.g. energy loss measurement.
For all RecoHits, example implementations can be found in RecoHitExamples/.
The following has changed in the GFAbsRecoHit, which is now located in
core/RecoHits
Class
Old Function
New Function
Comment
GFAbsRecoHit
virtual ~GFAbsRecoHit()
virtual ~GFAbsRecoHit() = 0
pure virtual
virtual TMatrixT<double> getHMatrix(const GFAbsTrackRep* stateVector)=0
virtual const TMatrixD& getHMatrix(const GFAbsTrackRep* stateVector) = 0
return reference
instead of object
virtual void getMeasurement(const GFAbsTrackRep* rep,const GFDetPlane&
pl,const TMatrixT<double>& statePred,const TMatrixT<double>&
covPred,TMatrixT<double>& m, TMatrixT<double>& V) = 0
virtual void getMeasurement(const GFAbsTrackRep* rep,
const GFDetPlane& pl,
const TVectorD& statePred,
const TMatrixDSym& covPred,
TVectorD& m,
TMatrixDSym& V) = 0
TMatrixT<double> getRawHitCov() const
const TMatrixDSym& getRawHitCov() const
return reference
instead of object
TMatrixT<double> getRawHitCoord() const
const TVectorD& getRawHitCoord() const
return reference
instead of object
virtual const std::string& getPolicyName()
removed
Which hit policy has become which class? All RecoHits are located in
core/RecoHits.
Policy Name
Hit Class Name
GFPlanarHitPolicy
GFAbsPlanarHit
GFPseudoSpacepointWireHitPolicy
GFAbsProlateSpacepointHit
GFSpacepointHitPolicy
GFAbsSpacepointHit
GFWireHitPolicy
GFAbsWireHit
GFWirepointHitPolicy
GFAbsWirepointHit
Which functions have changed wrt the hit policies?
Class
Old Function
New Function
Comment
GFPseudoSpacepointWireHitPolicy
GFAbsProlateSpacepointHit
TVector3 getWireDirection()
const TVector3& getLargestErrorDirection()
renamed
void setWireDirection(TVector3 & dir)
void setLargestErrorDirection(TVector3& dir)
renamed
double getMaxDistance()
removed
void setMaxDistance(double d)
removed
GFWireHitPolicy
GFAbsWireHit
void setLeftRightResolution(int lr)
new
int getLeftRightResolution() const
new
Changes in RKTrackRep/
Class
Old Function
New Function
Comment
GFAbsMaterialInterface
new class
GFMaterialEffects
void init(GFAbsMaterialInterface* matIfc)
new.
*ATTENTION*:
GFMaterialEffects has to be initialized.
At the moment, only GFTGeoMaterialInterface
is available.
double effects(const std::vector<GFPointPath>& points,
const double& mom,
const int& pdg,
double& xx0,
const bool& doNoise = false,
double* noise7x7 = NULL,
const double* jacobian7x7 = NULL,
const TVector3* directionBefore = NULL,
const TVector3* directionAfter = NULL)
double effects(const std::vector<GFPointPath>& points,
const double& mom,
const int& pdg,
double& xx0,
double* noise7x7 = NULL,
const double* jacobian7x7 = NULL,
const TVector3* directionBefore = NULL,
const TVector3* directionAfter = NULL)
small interface change
double stepper(const double& maxStep, // maximum step. unsigned!
const double& maxAngleStep, // maximum step due to
curvature. unsigned!
const double& posx,
const double& posy,
const double& posz,
const double& dirx,
const double& diry,
const double& dirz,
const double& mom, // momentum
double& relMomLoss, // relative momloss for the step
will be added
const int& pdg)
double stepper(const double& maxStep, // maximum step. unsigned!
const double& maxAngleStep, // maximum step due to
curvature. unsigned!
const TVector3& pos,
const TVector3& dir,
const double& mom, // momentum
double& relMomLoss, // relative momloss for the step
will be added
const int& pdg)
small interface change
GFTGeoMaterialInterface
new class
RKTrackRep
see GFAbsTrackRep
RKTrackRep(const TVector3& pos,
const TVector3& mom,
const TMatrixDSym cov,
const int& PDGCode)
new constructor
Changes in GFRave/
Class
Old Function
New Function
Comment
GFRaveConverters
TMatrixT<double> Covariance3DToTMatrixT(const rave::Covariance3D &)
TMatrixDSym Covariance3DToTMatrixDSym(const rave::Covariance3D &)
renamed
TMatrixT<double> Vector6DToTMatrixT(const rave::Vector6D &)
TVectorD Vector6DToTVectorD(const rave::Vector6D &)
renamed
TMatrixT<double> Covariance6DToTMatrixT(const rave::Covariance6D &)
TMatrixDSym Covariance6DToTMatrixDSym(const rave::Covariance6D &)
renamed
rave::Covariance3D TMatrixTToCovariance3D(const TMatrixT<double> &)
rave::Covariance3D TMatrixDSymToCovariance3D(const TMatrixDSym &)
renamed
GFRaveTrackParameters
GFRaveTrackParameters(GFTrack* track, GFAbsTrackRep* rep, double
weight, const TMatrixT<double>& state6, const TMatrixT<double>& cov6x6,
bool isSmoothed)
GFRaveTrackParameters(GFTrack* track, GFAbsTrackRep* rep, double
weight, const TVectorD & state6, const TMatrixDSym & cov6x6, bool
isSmoothed)
TMatrixT<double> getState() const
TVectorD getState() const
const TMatrixT<double> & getCov() const
const TMatrixDSym & getCov() const
GFRaveVertex
GFRaveVertex(const TVector3 & pos, const TMatrixT<double> & cov,
const std::vector < GFRaveTrackParameters* > &
smoothedTracks,
double ndf, double chi2, int id = -1);
GFRaveVertex(const TVector3 & pos, const TMatrixDSym & cov,
const std::vector < GFRaveTrackParameters* > &
smoothedTracks,
double ndf, double chi2, int id = -1)
TMatrixT<double> getCov() const
TMatrixDSym getCov() const
GFRaveVertexFactory
void setBeamspot(const TVector3 & pos, const TMatrixT<double> & cov)
void setBeamspot(const TVector3 & pos, const TMatrixDSym & cov)
--
Dipl.-Phys. Univ. Johannes Rauch
Technische Universität München
Physik Department E18
James-Franck-Strasse
85748 Garching
phone +49 89 289 12592
fax +49 89 289 12570
mail j....@tu...
www.e18.physik.tu-muenchen.de
|
|
From: Johannes R. <j....@tu...> - 2012-12-18 10:55:28
|
Dear Genfit users,
as promised some days ago, there is a new Genfit revision available.
This new revision is now in the trunk (v894).
As the interface has changed, the old trunk revision (trunk v879) has
been made genfit v1 (available in tags/v01-00-00/).
We have many plans on our list, and their implementation might require
additional interface changes.
So we decided not to make a tag from the new trunk. Once we have
implemented all new features and feel that the interface has
"converged", that will become genfit v2.
The rest of this mail gives an overview of what has changed in the
current trunk version compared to the v1 version.
There are some changes where your compiler won't warn you if you don't
make the right changes to your code. They are marked with *ATTENTION.*
Major design changes
* *changed all state vectors from TMatrixT<double> to TVectorD.*
* *changed all covariance matrices from TMatrixT<double> to
TMatrixDSym.*
* replaced the RecoHitIfc<HitPolicy> with an *inheritance structure
for the different hit types.
*
* The GFDaf is now able to* resolve the left/right ambiguity of wire
hits.*
* Introduced* *a new *GFTrackCandHit*. You can make a class
inheriting from GFTrackCandHit, where you can *store additional
information*, if needed (e.g. left/right ambiguity of wire hits
determined by the pattern recognition).
* Introduced a *material interface* in RKTrackRep/ (might still be
subject to changes).
* Changed the GFBookkeeping from std::string to enum based.
* Both GFKalman and GFDaf now inherit from GFAbsFitter.
Code review and performance improvements
* General code review, cleanup, removal of deprecated functions,
performance improvements.
* Tested GFDaf with all kinds of hit types, smoothing enabled, but
without material effects, and compared to current trunk version
and calculated speedup factors (execution time of development
version / execution time of trunk version):
o GFDaf::processTrack: 0.21
o GFDaf::calcWeights: 0.085
o GFKalman::processTrack: 0.53
* *That means track fitting is now up to 5 time faster with the DAF,
and up to 2 times faster with the Kalman!*
Changes in the interface
Changes in core/
Uncommented changes are related to the change to TVectorD and TMatrixDSym.
Class
old Function
new Function
Comment
GFAbsTrackRep virtual double extrapolate(const GFDetPlane& plane,
TMatrixT<double>& statePred); virtual double extrapolate(const
GFDetPlane& plane, TVectorD& statePred);
virtual void extrapolateToPoint(const TVector3& point,
TVector3& poca,
TVector3& normVec);
virtual double extrapolateToPoint(const TVector3& point,
TVector3& poca,
TVector3& normVec);
returning extrapolated length
virtual void extrapolateToLine(const TVector3& point1,
const TVector3& point2,
TVector3& poca,
TVector3& normVec,
TVector3& poca_onwire);
virtual double extrapolateToLine(const TVector3& point1,
const TVector3& point2,
TVector3& poca,
TVector3& normVec,
TVector3& poca_onwire);
returning extrapolated length
virtual double extrapolate(const GFDetPlane& plane,
TMatrixT<double>& statePred,
TMatrixT<double>& covPred)=0;
virtual double extrapolate(const GFDetPlane& plane,
TVectorD& statePred,
TMatrixDSym& covPred)=0;
inline TMatrixT<double> getState() const
inline const TVectorD& getState() const
inline TMatrixT<double> getCov() const
inline const TMatrixDSym& getCov() const
virtual void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3&
mom,TMatrixT<double>& cov);
virtual void getPosMomCov(const GFDetPlane& pl, TVector3& pos,
TVector3& mom, TMatrixDSym& cov);
void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& c)
void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& c)
inline TMatrixT<double> getFirstState() const
inline const TVectorD& getFirstState() const
inline TMatrixT<double> getFirstCov()
inline const TMatrixDSym& getFirstCov()
inline TMatrixT<double> getLastState()
inline const TVectorD& getLastState()
inline TMatrixT<double> getLastCov() const
inline const TMatrixDSym& getLastCov() const
virtual void setData(const TMatrixT<double>& st, const GFDetPlane& pl,
const TMatrixT<double>* cov=NULL, const TMatrixT<double>* aux=NULL)
virtual void setData(const TVectorD& st, const GFDetPlane& pl, const
TMatrixDSym* cov=NULL, const TMatrixD* aux=NULL)
inline void setCov(const TMatrixT<double>& aCov)
inline void setCov(const TMatrixDSym& aCov)
inline void setFirstState(const TMatrixT<double>& aState)
inline void setFirstState(const TVectorD& aState)
inline void setFirstCov(const TMatrixT<double>& aCov)
inline void setFirstCov(const TMatrixDSym& aCov)
inline void setLastState(const TMatrixT<double>& aState)
inline void setLastState(const TVectorD& aState)
inline void setLastCov(const TMatrixT<double>& aCov)
inline void setLastCov(const TMatrixDSym& aCov)
virtual void setPosMomCov(const TVector3& pos, const TVector3& mom,
const TMatrixT<double>& cov)
virtual void setPosMomCov(const TVector3& pos, const TVector3& mom,
const TMatrixDSym& cov)
bool setInverted(bool f=true)
removed
virtual const TMatrixT<double>* getAuxInfo(const GFDetPlane&)
virtual const TMatrixD* getAuxInfo(const GFDetPlane&)
GFAbsFitter
new class
GFBookkeeping
void bookVectors(const GFBKKey& key)
new, GFBKKey is an enum
void bookMatrices(std::string key)
void bookMatrices(const GFBKKey& key)
void bookSymMatrices(const GFBKKey& key)
new
void bookGFDetPlanes(std::string key) void bookGFDetPlanes(const
GFBKKey& key)
void bookNumbers(std::string key,double val=0.)
void bookNumbers(const GFBKKey& key,double val=0.)
void setVector(const GFBKKey& key,unsigned int index,const TVectorD& mat)
new
void setMatrix(std::string key,unsigned int index,const
TMatrixT<double>& mat)
void setMatrix(const GFBKKey& key,unsigned int index,const TMatrixD& mat)
void setSymMatrix(const GFBKKey& key,unsigned int index,const
TMatrixDSym& mat)
new
void setDetPlane(std::string key,unsigned int index,const GFDetPlane& pl)
void setDetPlane(const GFBKKey& key,unsigned int index,const
GFDetPlane& pl)
void setNumber(std::string key,unsigned int index, const double& num)
void setNumber(const GFBKKey& key,unsigned int index, const double& num)
const TVectorD& getVector(const GFBKKey& key, unsigned int index) const
new
bool getMatrix(std::string key, unsigned int index, TMatrixT<double>&
mat) const const TMatrixD& getMatrix(const GFBKKey& key, unsigned
int index) const return reference
instead of returning
by reference
const TMatrixDSym& getSymMatrix(const GFBKKey& key, unsigned int index)
const
new
bool getDetPlane(std::string key, unsigned int index, GFDetPlane& pl)
const
const GFDetPlane& getDetPlane(const GFBKKey& key, unsigned int
index) const
return reference
instead of returning
by reference
bool getNumber(std::string key, unsigned int index, double& num) const
double getNumber(const GFBKKey& key, unsigned int
index) const
return double
instead of returning
by reference
std::vector<GFBKKey> getVectorKeys() const
new
std::vector< std::string > getMatrixKeys() const std::vector<GFBKKey>
getMatrixKeys() const
std::vector<GFBKKey> getSymMatrixKeys() const
new
std::vector< std::string > getGFDetPlaneKeys() const
std::vector<GFBKKey> getGFDetPlaneKeys() const
std::vector< std::string > getNumberKeys() const
std::vector<GFBKKey> getNumberKeys() const
GFConstField
GFConstField(const TVector3& field)
new ctor taking TVector3
GFDetPlane
TVector3 getO() const
const TVector3& getO() const
return reference
instead of object
TVector3 getU() const
const TVector3& getU() const
return reference
instead of object
TVector3 getV() const
const TVector3& getV() const
return reference
instead of object
void setNormal(TVector3 n)
void setNormal(const TVector3& n)
take reference
instead of object
double distance(TVector3) const
double distance(const TVector3& point) const
take reference
instead of object
void reset()
new
bool isFinite() const
new
GFException void setMatrices(std::string, const std::vector<
TMatrixT<double> >&) void setMatrices(std::string, const
std::vector<TMatrixD>&)
GFTools
TMatrixT<double> getSmoothedPos(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TVectorD getSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned
int ihit)
TMatrixT<double> getSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TMatrixDSym getSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo)
bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned
int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane, TMatrixD& auxInfo)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>&
smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo)
bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep,
unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov,
GFDetPlane& smoothing_plane, TMatrixD& auxInfo)
TMatrixT<double> getBiasedSmoothedPos(const GFTrack* trk, unsigned int
irep, unsigned int ihit)
TVectorD getBiasedSmoothedPos(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
TVector3 getBiasedSmoothedPosXYZ(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
new
TVector3 getBiasedSmoothedMomXYZ(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
new
TMatrixT<double> getBiasedSmoothedCov(const GFTrack* trk, unsigned int
irep, unsigned int ihit)
TMatrixDSym getBiasedSmoothedCov(const GFTrack* trk, unsigned int irep,
unsigned int ihit)
void invertMatrix(const TMatrixT<double>& mat, TMatrixT<double>& inv)
void invertMatrix(const TMatrixDSym& mat, TMatrixDSym& inv, double*
determinant = NULL)
optional calculattion of determinant
GFTrack
std::vector<GFAbsRecoHit*> getHits() const
const std::vector<GFAbsRecoHit*>& getHits() const
return reference
instead of object
std::map<GFAbsRecoHit*, unsigned int> getHitMap() const
void getHitMap(std::map<GFAbsRecoHit*, unsigned int>&) const
return by reference
intead of object
void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& cov)
void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& cov)
void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3&
mom,TMatrixT<double>& cov)
void getPosMomCov(const GFDetPlane& pl, TVector3& pos, TVector3& mom,
TMatrixDSym& cov)
void addHit(GFAbsRecoHit* theHit,
unsigned int detId,
unsigned int hitId,
double rho=0.,
unsigned int planeId=0)
void addHit(GFAbsRecoHit* theHit,
unsigned int detId,
unsigned int hitId,
int planeId = -1,
double rho = 0.)
*ATTENTION*:
order of arguments
has changed
void setSmoothing(bool smooth = true, bool fast = false)
void setSmoothing(bool smooth = true)
fast smoothing is now enabled if smoothing is enabled
bool getSmoothingFast() const
removed
GFTrackCand
friend bool operator== (const GFTrackCand& lhs, const GFTrackCand&
rhs) new
friend bool operator!= (const GFTrackCand& lhs, const GFTrackCand&
rhs) new
static bool compareTrackCandHits(const GFTrackCandHit* lhs, const
GFTrackCandHit* rhs)
new
GFTrackCandHit* getHit(unsigned int i) const
new
void getHit(unsigned int i,
unsigned int& detId,
unsigned int& hitId) const
void getHit(unsigned int i,
int& detId,
int& hitId) const
ids are now signed (and have default values -1)
void getHit(unsigned int i,
unsigned int& detId,
unsigned int& hitId,
double& rho) const
void getHit(unsigned int i,
int& detId,
int& hitId,
double& rho) const
ids are now signed (and have default values -1)
void getHitWithPlane(unsigned int i,
unsigned int& detId,
unsigned int& hitId,
unsigned int& planeId) const
void getHitWithPlane(unsigned int i,
int& detId,
int& hitId,
int& planeId) const
ids are now signed (and have default values -1)
double getCurv() const
removed
double getDip() const
std::vector<unsigned int> GetHitIDs(int detId = -1) const
removed, use
std::vector<int> getHitIDs(int detId = -1) const
std::vector<unsigned int> getHitIDs(int detId = -1) const
std::vector<int> getHitIDs(int detId = -2) const
ids are now signed (and have default values -1)
std::vector<unsigned int> GetDetIDs() const
removed, use
std::vector<int> getDetIDs() const
std::vector<unsigned int> getDetIDs() const
std::vector<int> getDetIDs() const
ids are now signed (and have default values -1)
std::vector<double> GetRhos() const
removed, use
std::vector<double> getRhos() const
std::set<unsigned int> getUniqueDetIDs() const
std::set<int> getUniqueDetIDs() const
ids are now signed (and have default values -1)
TVector3 getDirSeed() const
removed, but can get momentum vector with
TVector3 getMomSeed() const
double getQoverPseed() const
removed
TMatrixD getStateSeed() const
TVectorD getStateSeed() const
TMatrixD getCovSeed() const
TMatrixDSym getCovSeed() const
void addHit(unsigned int detId, unsigned int hitId, double rho = 0.,
unsigned int planeId = 0)
void addHit(int detId,
int hitId,
int planeId = -1,
double rho = 0)
*ATTENTION*:
order of arguments
has changed and ids are now signed
void setDip(double d)
removed
void addHit(GFTrackCandHit* hit)
new
void setComplTrackSeed(const TVector3& pos, const TVector3& mom, const
int pdgCode, TVector3 posError = TVector3(1.0, 1.0, 1.0), TVector3
dirError = TVector3(1.0, 1.0, 1.0))
removed
void sortHits(std::vector<unsigned int> indices)
void sortHits(const std::vector<unsigned int>& indices)
take reference
instead of object
void set6DSeed(const TMatrixD& state6D, const double charge, TMatrixD
cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6)))
void set6DSeed(const TVectorD& state6D, const double charge, const
TMatrixDSym& cov6D)
void set6DSeed(const TVectorD& state6D, const double charge)
new
void set6DSeedAndPdgCode(const TMatrixD& state6D, const int pdgCode,
TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6)))
void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode,
const TMatrixDSym& cov6D)
void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode
new
void setPosMomSeed(const TVector3& pos, const TVector3& mom, const
double charge, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit,
TMatrixD(6, 6)))
void setPosMomSeed(const TVector3& pos, const TVector3& mom, const
double charge)
void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom,
const int pdgCode, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit,
TMatrixD(6, 6)))
void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom,
const int pdgCode, const TMatrixDSym& cov6D)
GFTrackCandHit
new class
Changes concerning RecoHits
All of your concrete RecoHits that are not directly inheriting from
GFAbsRecoHit, but from the GFRecoHitIfc have to be changed.
E.g. replace
#include "GFRecoHitIfc.h"
#include "GFPlanarHitPolicy.h"
YourRecoHit : public GFRecoHitIfc<GFPlanarHitPolicy> {
with
#include "RecoHits/GFAbsPlanarHit.h"
YourRecoHit : public GFAbsPlanarHit {
You can now call all functions of the GFAbsPlanarHit. With the previous
policy based design, you had to implement a function in YourRecoHit
which calls the corresponding function of the policy, since the policy
was a private member of the GFAbsRecoHit.
Furthermore, all RecoHits now optionally take a dimensionality as an
argument to their constructor. Therefore you can implement RecoHits
which have additional dimension, e.g. energy loss measurement.
For all RecoHits, example implementations can be found in RecoHitExamples/.
The following has changed in the GFAbsRecoHit, which is now located in
core/RecoHits
Class
Old Function
New Function
Comment
GFAbsRecoHit
virtual ~GFAbsRecoHit()
virtual ~GFAbsRecoHit() = 0
pure virtual
virtual TMatrixT<double> getHMatrix(const GFAbsTrackRep* stateVector)=0
virtual const TMatrixD& getHMatrix(const GFAbsTrackRep* stateVector) = 0
return reference
instead of object
virtual void getMeasurement(const GFAbsTrackRep* rep,const GFDetPlane&
pl,const TMatrixT<double>& statePred,const TMatrixT<double>&
covPred,TMatrixT<double>& m, TMatrixT<double>& V) = 0
virtual void getMeasurement(const GFAbsTrackRep* rep,
const GFDetPlane& pl,
const TVectorD& statePred,
const TMatrixDSym& covPred,
TVectorD& m,
TMatrixDSym& V) = 0
TMatrixT<double> getRawHitCov() const
const TMatrixDSym& getRawHitCov() const
return reference
instead of object
TMatrixT<double> getRawHitCoord() const
const TVectorD& getRawHitCoord() const
return reference
instead of object
virtual const std::string& getPolicyName()
removed
Which hit policy has become which class? All RecoHits are located in
core/RecoHits.
Policy Name
Hit Class Name
GFPlanarHitPolicy
GFAbsPlanarHit
GFPseudoSpacepointWireHitPolicy
GFAbsProlateSpacepointHit
GFSpacepointHitPolicy
GFAbsSpacepointHit
GFWireHitPolicy
GFAbsWireHit
GFWirepointHitPolicy
GFAbsWirepointHit
Which functions have changed wrt the hit policies?
Class
Old Function
New Function
Comment
GFPseudoSpacepointWireHitPolicy
GFAbsProlateSpacepointHit
TVector3 getWireDirection()
const TVector3& getLargestErrorDirection()
renamed
void setWireDirection(TVector3 & dir)
void setLargestErrorDirection(TVector3& dir)
renamed
double getMaxDistance()
removed
void setMaxDistance(double d)
removed
GFWireHitPolicy
GFAbsWireHit
void setLeftRightResolution(int lr)
new
int getLeftRightResolution() const
new
Changes in RKTrackRep/
Class
Old Function
New Function
Comment
GFAbsMaterialInterface
new class
GFMaterialEffects
void init(GFAbsMaterialInterface* matIfc)
new.
*ATTENTION*:
GFMaterialEffects has to be initialized.
At the moment, only GFTGeoMaterialInterface
is available.
double effects(const std::vector<GFPointPath>& points,
const double& mom,
const int& pdg,
double& xx0,
const bool& doNoise = false,
double* noise7x7 = NULL,
const double* jacobian7x7 = NULL,
const TVector3* directionBefore = NULL,
const TVector3* directionAfter = NULL)
double effects(const std::vector<GFPointPath>& points,
const double& mom,
const int& pdg,
double& xx0,
double* noise7x7 = NULL,
const double* jacobian7x7 = NULL,
const TVector3* directionBefore = NULL,
const TVector3* directionAfter = NULL)
small interface change
double stepper(const double& maxStep, // maximum step. unsigned!
const double& maxAngleStep, // maximum step due to
curvature. unsigned!
const double& posx,
const double& posy,
const double& posz,
const double& dirx,
const double& diry,
const double& dirz,
const double& mom, // momentum
double& relMomLoss, // relative momloss for the step
will be added
const int& pdg)
double stepper(const double& maxStep, // maximum step. unsigned!
const double& maxAngleStep, // maximum step due to
curvature. unsigned!
const TVector3& pos,
const TVector3& dir,
const double& mom, // momentum
double& relMomLoss, // relative momloss for the step
will be added
const int& pdg)
small interface change
GFTGeoMaterialInterface
new class
RKTrackRep
see GFAbsTrackRep
RKTrackRep(const TVector3& pos,
const TVector3& mom,
const TMatrixDSym cov,
const int& PDGCode)
new constructor
Changes in GFRave/
Class
Old Function
New Function
Comment
GFRaveConverters
TMatrixT<double> Covariance3DToTMatrixT(const rave::Covariance3D &)
TMatrixDSym Covariance3DToTMatrixDSym(const rave::Covariance3D &)
renamed
TMatrixT<double> Vector6DToTMatrixT(const rave::Vector6D &)
TVectorD Vector6DToTVectorD(const rave::Vector6D &)
renamed
TMatrixT<double> Covariance6DToTMatrixT(const rave::Covariance6D &)
TMatrixDSym Covariance6DToTMatrixDSym(const rave::Covariance6D &)
renamed
rave::Covariance3D TMatrixTToCovariance3D(const TMatrixT<double> &)
rave::Covariance3D TMatrixDSymToCovariance3D(const TMatrixDSym &)
renamed
GFRaveTrackParameters
GFRaveTrackParameters(GFTrack* track, GFAbsTrackRep* rep, double
weight, const TMatrixT<double>& state6, const TMatrixT<double>& cov6x6,
bool isSmoothed)
GFRaveTrackParameters(GFTrack* track, GFAbsTrackRep* rep, double
weight, const TVectorD & state6, const TMatrixDSym & cov6x6, bool
isSmoothed)
TMatrixT<double> getState() const
TVectorD getState() const
const TMatrixT<double> & getCov() const
const TMatrixDSym & getCov() const
GFRaveVertex
GFRaveVertex(const TVector3 & pos, const TMatrixT<double> & cov,
const std::vector < GFRaveTrackParameters* > &
smoothedTracks,
double ndf, double chi2, int id = -1);
GFRaveVertex(const TVector3 & pos, const TMatrixDSym & cov,
const std::vector < GFRaveTrackParameters* > &
smoothedTracks,
double ndf, double chi2, int id = -1)
TMatrixT<double> getCov() const
TMatrixDSym getCov() const
GFRaveVertexFactory
void setBeamspot(const TVector3 & pos, const TMatrixT<double> & cov)
void setBeamspot(const TVector3 & pos, const TMatrixDSym & cov)
--
Dipl.-Phys. Univ. Johannes Rauch
Technische Universität München
Physik Department E18
James-Franck-Strasse
85748 Garching
phone +49 89 289 12592
fax +49 89 289 12570
mail j....@tu...
www.e18.physik.tu-muenchen.de
|
|
From: Johannes R. <j....@tu...> - 2012-11-23 18:52:26
|
Dear Genfit users, there is a major update of GENFIT on the way. We are currently in the testing stage and will release it as soon as all tests are passed. If you want to test it as well, you can get the version from /https://genfit.svn.sourceforge.net/svnroot/genfit/branches/RecoHits/. The following document should give you an overview of the new features and help adapting your code to the new revision. There are some changes where your compiler won't warn you if you don't make the right changes to your code. They are marked with *ATTENTION.* Major design changes * *changed all state vectors from TMatrixT<double> to TVectorD.* * *changed all covariance matrices from TMatrixT<double> to TMatrixDSym.* * replaced the RecoHitIfc<HitPolicy> with a *inheritance structure for the different hit types. * * The GFDaf is now able to* resolve the left/right ambiguity of wire hits.* * Introduced* *a new *GFTrackCandHit*. You can make a class inheriting from GFTrackCandHit, where you can *store additional information*, if needed (e.g. left/right ambiguity of wire hits determined by the pattern recognition). * Introduced a *material interface* in RKTrackRep/ (might still be subject to changes). * Changed the GFBookkeeping from std::string to enum based. * Both GFKalman and GFDaf now inherit from GFAbsFitter. Code review and performance improvements * General code review, cleanup, removal of deprecated functions, performance improvements. * Tested GFDaf with all kinds of hit types, smoothing enabled, but without material effects, and compared to current trunk version and calculated speedup factors (execution time of development version / execution time of trunk version): o GFDaf::processTrack: 0.21 o GFDaf::calcWeights: 0.085 o GFKalman::processTrack: 0.53 * *That means track fitting is now up to 5 time faster with the DAF, and up to 2 times faster with the Kalman!* Changes in the interface Changes in core/ Uncommented changes are related to the change to TVectorD and TMatrixDSym. Class old Function new Function Comment GFAbsTrackRep virtual double extrapolate(const GFDetPlane& plane, TMatrixT<double>& statePred); virtual double extrapolate(const GFDetPlane& plane, TVectorD& statePred); virtual void extrapolateToPoint(const TVector3& point, TVector3& poca, TVector3& normVec); virtual double extrapolateToPoint(const TVector3& point, TVector3& poca, TVector3& normVec); returning extrapolated length virtual void extrapolateToLine(const TVector3& point1, const TVector3& point2, TVector3& poca, TVector3& normVec, TVector3& poca_onwire); virtual double extrapolateToLine(const TVector3& point1, const TVector3& point2, TVector3& poca, TVector3& normVec, TVector3& poca_onwire); returning extrapolated length virtual double extrapolate(const GFDetPlane& plane, TMatrixT<double>& statePred, TMatrixT<double>& covPred)=0; virtual double extrapolate(const GFDetPlane& plane, TVectorD& statePred, TMatrixDSym& covPred)=0; inline TMatrixT<double> getState() const inline const TVectorD& getState() const inline TMatrixT<double> getCov() const inline const TMatrixDSym& getCov() const virtual void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3& mom,TMatrixT<double>& cov); virtual void getPosMomCov(const GFDetPlane& pl, TVector3& pos, TVector3& mom, TMatrixDSym& cov); void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& c) void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& c) inline TMatrixT<double> getFirstState() const inline const TVectorD& getFirstState() const inline TMatrixT<double> getFirstCov() inline const TMatrixDSym& getFirstCov() inline TMatrixT<double> getLastState() inline const TVectorD& getLastState() inline TMatrixT<double> getLastCov() const inline const TMatrixDSym& getLastCov() const virtual void setData(const TMatrixT<double>& st, const GFDetPlane& pl, const TMatrixT<double>* cov=NULL, const TMatrixT<double>* aux=NULL) virtual void setData(const TVectorD& st, const GFDetPlane& pl, const TMatrixDSym* cov=NULL, const TMatrixD* aux=NULL) inline void setCov(const TMatrixT<double>& aCov) inline void setCov(const TMatrixDSym& aCov) inline void setFirstState(const TMatrixT<double>& aState) inline void setFirstState(const TVectorD& aState) inline void setFirstCov(const TMatrixT<double>& aCov) inline void setFirstCov(const TMatrixDSym& aCov) inline void setLastState(const TMatrixT<double>& aState) inline void setLastState(const TVectorD& aState) inline void setLastCov(const TMatrixT<double>& aCov) inline void setLastCov(const TMatrixDSym& aCov) virtual void setPosMomCov(const TVector3& pos, const TVector3& mom, const TMatrixT<double>& cov) virtual void setPosMomCov(const TVector3& pos, const TVector3& mom, const TMatrixDSym& cov) bool setInverted(bool f=true) removed virtual const TMatrixT<double>* getAuxInfo(const GFDetPlane&) virtual const TMatrixD* getAuxInfo(const GFDetPlane&) GFAbsFitter new class GFBookkeeping void bookVectors(const GFBKKey& key) new, GFBKKey is an enum void bookMatrices(std::string key) void bookMatrices(const GFBKKey& key) void bookSymMatrices(const GFBKKey& key) new void bookGFDetPlanes(std::string key) void bookGFDetPlanes(const GFBKKey& key) void bookNumbers(std::string key,double val=0.) void bookNumbers(const GFBKKey& key,double val=0.) void setVector(const GFBKKey& key,unsigned int index,const TVectorD& mat) new void setMatrix(std::string key,unsigned int index,const TMatrixT<double>& mat) void setMatrix(const GFBKKey& key,unsigned int index,const TMatrixD& mat) void setSymMatrix(const GFBKKey& key,unsigned int index,const TMatrixDSym& mat) new void setDetPlane(std::string key,unsigned int index,const GFDetPlane& pl) void setDetPlane(const GFBKKey& key,unsigned int index,const GFDetPlane& pl) void setNumber(std::string key,unsigned int index, const double& num) void setNumber(const GFBKKey& key,unsigned int index, const double& num) const TVectorD& getVector(const GFBKKey& key, unsigned int index) const new bool getMatrix(std::string key, unsigned int index, TMatrixT<double>& mat) const const TMatrixD& getMatrix(const GFBKKey& key, unsigned int index) const return reference instead of returning by reference const TMatrixDSym& getSymMatrix(const GFBKKey& key, unsigned int index) const new bool getDetPlane(std::string key, unsigned int index, GFDetPlane& pl) const const GFDetPlane& getDetPlane(const GFBKKey& key, unsigned int index) const return reference instead of returning by reference bool getNumber(std::string key, unsigned int index, double& num) const double getNumber(const GFBKKey& key, unsigned int index) const return double instead of returning by reference std::vector<GFBKKey> getVectorKeys() const new std::vector< std::string > getMatrixKeys() const std::vector<GFBKKey> getMatrixKeys() const std::vector<GFBKKey> getSymMatrixKeys() const new std::vector< std::string > getGFDetPlaneKeys() const std::vector<GFBKKey> getGFDetPlaneKeys() const std::vector< std::string > getNumberKeys() const std::vector<GFBKKey> getNumberKeys() const GFConstField GFConstField(const TVector3& field) new ctor taking TVector3 GFDetPlane TVector3 getO() const const TVector3& getO() const return reference instead of object TVector3 getU() const const TVector3& getU() const return reference instead of object TVector3 getV() const const TVector3& getV() const return reference instead of object void setNormal(TVector3 n) void setNormal(const TVector3& n) take reference instead of object double distance(TVector3) const double distance(const TVector3& point) const take reference instead of object void reset() new GFException void setMatrices(std::string, const std::vector< TMatrixT<double> >&) void setMatrices(std::string, const std::vector<TMatrixD>&) GFTools TMatrixT<double> getSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned int ihit) TVectorD getSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned int ihit) TMatrixT<double> getSmoothedCov(const GFTrack* trk, unsigned int irep, unsigned int ihit) TMatrixDSym getSmoothedCov(const GFTrack* trk, unsigned int irep, unsigned int ihit) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov, GFDetPlane& smoothing_plane) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov, GFDetPlane& smoothing_plane) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo) bool getSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov, GFDetPlane& smoothing_plane, TMatrixD& auxInfo) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov, GFDetPlane& smoothing_plane) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov, GFDetPlane& smoothing_plane) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TMatrixT<double>& smoothed_state, TMatrixT<double>& smoothed_cov, GFDetPlane& smoothing_plane, TMatrixT<double>& auxInfo) bool getBiasedSmoothedData(const GFTrack* trk, unsigned int irep, unsigned int ihit, TVectorD& smoothed_state, TMatrixDSym& smoothed_cov, GFDetPlane& smoothing_plane, TMatrixD& auxInfo) TMatrixT<double> getBiasedSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned int ihit) TVectorD getBiasedSmoothedPos(const GFTrack* trk, unsigned int irep, unsigned int ihit) TVector3 getBiasedSmoothedPosXYZ(const GFTrack* trk, unsigned int irep, unsigned int ihit) new TVector3 getBiasedSmoothedMomXYZ(const GFTrack* trk, unsigned int irep, unsigned int ihit) new TMatrixT<double> getBiasedSmoothedCov(const GFTrack* trk, unsigned int irep, unsigned int ihit) TMatrixDSym getBiasedSmoothedCov(const GFTrack* trk, unsigned int irep, unsigned int ihit) void invertMatrix(const TMatrixT<double>& mat, TMatrixT<double>& inv) void invertMatrix(const TMatrixDSym& mat, TMatrixDSym& inv, double* determinant = NULL) optional calculattion of determinant GFTrack std::vector<GFAbsRecoHit*> getHits() const const std::vector<GFAbsRecoHit*>& getHits() const return reference instead of object std::map<GFAbsRecoHit*, unsigned int> getHitMap() const void getHitMap(std::map<GFAbsRecoHit*, unsigned int>&) const return by reference intead of object void getPosMomCov(TVector3& pos,TVector3& mom,TMatrixT<double>& cov) void getPosMomCov(TVector3& pos, TVector3& mom, TMatrixDSym& cov) void getPosMomCov(const GFDetPlane& pl,TVector3& pos,TVector3& mom,TMatrixT<double>& cov) void getPosMomCov(const GFDetPlane& pl, TVector3& pos, TVector3& mom, TMatrixDSym& cov) void addHit(GFAbsRecoHit* theHit, unsigned int detId, unsigned int hitId, double rho=0., unsigned int planeId=0) void addHit(GFAbsRecoHit* theHit, unsigned int detId, unsigned int hitId, int planeId = -1, double rho = 0.) *ATTENTION*: order of arguments has changed void setSmoothing(bool smooth = true, bool fast = false) void setSmoothing(bool smooth = true) fast smoothing is now enabled if smoothing is enabled bool getSmoothingFast() const removed GFTrackCand friend bool operator!= (const GFTrackCand& lhs, const GFTrackCand& rhs) new GFTrackCandHit* getHit(unsigned int i) const new double getCurv() const removed double getDip() const std::vector<unsigned int> GetHitIDs(int detId = -1) const removed, use std::vector<unsigned int> getHitIDs(int detId = -1) const std::vector<unsigned int> GetDetIDs() const removed, use std::vector<unsigned int> getDetIDs() const std::vector<double> GetRhos() const removed, use std::vector<double> getRhos() const TVector3 getDirSeed() const removed, but can get momentum vector with TVector3 getMomSeed() const double getQoverPseed() const removed TMatrixD getStateSeed() const TVectorD getStateSeed() const TMatrixD getCovSeed() const TMatrixDSym getCovSeed() const void addHit(unsigned int detId, unsigned int hitId, double rho = 0., unsigned int planeId = 0) void addHit(unsigned int detId, unsigned int hitId, int planeId = -1, double rho = 0) *ATTENTION*: order of arguments has changed void setDip(double d) removed void addHit(GFTrackCandHit* hit) new void setComplTrackSeed(const TVector3& pos, const TVector3& mom, const int pdgCode, TVector3 posError = TVector3(1.0, 1.0, 1.0), TVector3 dirError = TVector3(1.0, 1.0, 1.0)) removed void sortHits(std::vector<unsigned int> indices) void sortHits(const std::vector<unsigned int>& indices) take reference instead of object void set6DSeed(const TMatrixD& state6D, const double charge, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6))) void set6DSeed(const TVectorD& state6D, const double charge, const TMatrixDSym& cov6D) void set6DSeed(const TVectorD& state6D, const double charge) new void set6DSeedAndPdgCode(const TMatrixD& state6D, const int pdgCode, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6))) void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode, const TMatrixDSym& cov6D) void set6DSeedAndPdgCode(const TVectorD& state6D, const int pdgCode new void setPosMomSeed(const TVector3& pos, const TVector3& mom, const double charge, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6))) void setPosMomSeed(const TVector3& pos, const TVector3& mom, const double charge) void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom, const int pdgCode, TMatrixD cov6D = -1.0 * TMatrixD(TMatrixD::kUnit, TMatrixD(6, 6))) void setPosMomSeedAndPdgCode(const TVector3& pos, const TVector3& mom, const int pdgCode, const TMatrixDSym& cov6D) GFTrackCandHit new class Changes concerning RecoHits All of your concrete RecoHits that are not directly inheriting from GFAbsRecoHit, but from the GFRecoHitIfc have to be changed. E.g. replace #include "GFRecoHitIfc.h" #include "GFPlanarHitPolicy.h" YourRecoHit : public GFRecoHitIfc<GFPlanarHitPolicy> { with #include "RecoHits/GFAbsPlanarHit.h" YourRecoHit : public GFAbsPlanarHit { You can now call all functions of the GFAbsPlanarHit. With the previous policy based design, you had to implement a function in YourRecoHit which calls the corresponding function of the policy, since the policy was a private member of the GFAbsRecoHit. Furthermore, all RecoHits now optionally take a dimensionality as an argument to their constructor. Therefore you can implement RecoHits which have additional dimension, e.g. energy loss measurement. For all RecoHits, example implementations can be found in RecoHitExamples/. The following has changed in the GFAbsRecoHit, which is now located in core/RecoHits Class Old Function New Function Comment GFAbsRecoHit virtual ~GFAbsRecoHit() virtual ~GFAbsRecoHit() = 0 pure virtual virtual TMatrixT<double> getHMatrix(const GFAbsTrackRep* stateVector)=0 virtual const TMatrixD& getHMatrix(const GFAbsTrackRep* stateVector) = 0 return reference instead of object virtual void getMeasurement(const GFAbsTrackRep* rep,const GFDetPlane& pl,const TMatrixT<double>& statePred,const TMatrixT<double>& covPred,TMatrixT<double>& m, TMatrixT<double>& V) = 0 virtual void getMeasurement(const GFAbsTrackRep* rep, const GFDetPlane& pl, const TVectorD& statePred, const TMatrixDSym& covPred, TVectorD& m, TMatrixDSym& V) = 0 TMatrixT<double> getRawHitCov() const const TMatrixDSym& getRawHitCov() const return reference instead of object TMatrixT<double> getRawHitCoord() const const TVectorD& getRawHitCoord() const return reference instead of object virtual const std::string& getPolicyName() removed Which hit policy has become which class? All RecoHits are located in core/RecoHits. Policy Name Hit Class Name GFPlanarHitPolicy GFAbsPlanarHit GFPseudoSpacepointWireHitPolicy GFAbsProlateSpacepointHit GFSpacepointHitPolicy GFAbsSpacepointHit GFWireHitPolicy GFAbsWireHit GFWirepointHitPolicy GFAbsWirepointHit Which functions have changed wrt the hit policies? Class Old Function New Function Comment GFPseudoSpacepointWireHitPolicy GFAbsProlateSpacepointHit TVector3 getWireDirection() const TVector3& getLargestErrorDirection() renamed void setWireDirection(TVector3 & dir) void setLargestErrorDirection(TVector3& dir) renamed double getMaxDistance() removed void setMaxDistance(double d) removed GFWireHitPolicy GFAbsWireHit void setLeftRightResolution(int lr) new int getLeftRightResolution() const new Changes in RKTrackRep/ Class Old Function New Function Comment GFAbsMaterialInterface new class GFMaterialEffects void init(GFAbsMaterialInterface* matIfc) new. *ATTENTION*: GFMaterialEffects has to be initialized. At the moment, only GFTGeoMaterialInterface is available. GFTGeoMaterialInterface new class double stepper(const double& maxStep, // maximum step. unsigned! const double& maxAngleStep, // maximum step due to curvature. unsigned! const double& posx, const double& posy, const double& posz, const double& dirx, const double& diry, const double& dirz, const double& mom, // momentum double& relMomLoss, // relative momloss for the step will be added const int& pdg); double stepper(const double& maxStep, // maximum step. unsigned! const double& maxAngleStep, // maximum step due to curvature. unsigned! const TVector3& pos, const TVector3& dir, const double& mom, // momentum double& relMomLoss, // relative momloss for the step will be added const int& pdg); RKTrackRep see GFAbsTrackRep -- Dipl.-Phys. Univ. Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-10-11 14:37:17
|
Dear genfit users, last week I slightly modified and improved the hit policies included in genfit. As you probably know, several hit policies, such as for pixel/strip planar hits, wire- and spacepoint hits are available. The hit policies are also responsible for constructing (virtual) detector planes. Up to now, the left right ambiguity for wire hits has been resolved in the first forward fitting pass, the side with the smaller residual has been chosen. This plane was then cached, and therefore the decision between left and right was fixed. Now, I swithced off this caching. This means, that the left right decision can yield a different result when the fitter passes by the hit in a later stage. Moreover, it can now be manually specified on a per hit basis, which side has to be chosen. Therefore I made an example (test/HitPolicyTest) where this is shown. I also updated the tools folder, where you can now find up-to-date example implementations of RecoHits for all hit policies. kind regards, Johannes -- Dipl.-Phys. Univ. Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-09-06 09:39:36
|
Dear Genfit users, some smaller changes and fixes have been done in the recent genfit revisions: 665: small changes in Doxygen of RKTRackRep to match the actual code 666: removed unneccessary empty dtor in GFPointPath 667: fixing an issue in the RKTrackRep CMakeLists_panda.txt 668: in RKTrackRep in setData and getAuxInfo: throw GFExceptions instead of plain throw statement if planes do not match. 669: Fixed a memory leak in GFTools 670: It is now possible to run GFRave without smoothing. The GFRaveTrackParameters will be the unsmoothed track parameters in this case. It is also set if the track parameters are smoothed or not. 671: RKTrackRep: Improved extrapolateToPoint and -Line functions: improved resolution & much less non-convergence. kind regards, Johannes -- Dipl.-Phys. Univ. Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-09-03 08:55:43
|
Dear Genfit users, the bug in v652 (before the rollback) has been found. Together with some minor changes that have been applied to the trunk after the rollback, this version is now checked in in the trunk (v662). This version has been tested and gives virtually the same fit results as the rolled back v655. Of course, all changes and features that have been implemented between v602 and v654 are now in the v662 again. Additionaly, the RKTrackRep's extrapolateToPoint and extrapolateToLine have been slightly optimized and improved. In revisions 663 and 664 some compiler warning have been fixed. happy fitting! Johannes -- Dipl.-Phys. Univ. Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-07-30 14:00:49
|
Dear Genfit users, in revision 656, core and RKTrackRep have been rolled back to revision 602 with a bugfix in the RKTrackRep. This version has been tested in the Belle2 framework. However, this is only a temporary solution. As soon as the remaining problems in v652 are fixed, I will make this the head revision again. regards, Johannes |
|
From: Johannes R. <j....@tu...> - 2012-07-19 21:11:23
|
Dear Genfit users, in v652, an issue in the RKTRackRep has been fixed where the extrapolation failed (maximum number of iterations exceeded) when extrapolating to a plane very close to the current position. Moreover, in v645 a small inconsistency in GFTrackCand::setComplTrackSeed has been fixed (fDirSeed now is set with magnitude of 1 instead of the absolute momentum). regards, Johannes |
|
From: Johannes R. <j....@tu...> - 2012-07-19 21:01:48
|
Dear Genfit users, in v652, an issue in the RKTRackRep has been fixed where the extrapolation failed (maximum number of iterations exceeded) when extrapolating to a plane very close to the current position. Moreover, in v645 a small inconsistency in GFTrackCand::setComplTrackSeed has been fixed (fDirSeed now is set with magnitude of 1 instead of the absolute momentum). regards, Johannes |
|
From: Johannes R. <j....@tu...> - 2012-07-17 11:15:03
|
Dear Genfit users, of course I meant v643. Sorry. On 07/17/2012 01:12 PM, Johannes Rauch wrote: > Dear Genfit users, > > in v642, a small inconsistency in GFMaterialEffects has been fixed, > which lead to an underestimation of the material effects. > > regards, > > Johannes > > > On 07/16/2012 08:59 PM, Johannes Rauch wrote: > >> Dear Genfit users, >> >> welcome to the Genfit-users mailing list. >> As promised, I announce Genfit version v642. This concerns mainly the >> RKTrackRep. >> >> In v641, a bug in the linear extrapolation step of RKutta has been fixed >> (it was introduced in v575). >> In v641, I also changed the Material stepping: To reduce the amount of >> geometry accesses, I tried to do all of them in the stepper (which is >> done before the actual extrapolation and, amongst other things, limits >> the stepsize so that a maximum relative momentum loss will not be >> exceeded in the upcoming step), and save the materials that have been >> passed there. After the extrapolation, that list of materials should be >> used to calculate the material effects. >> However, this approach brings a lot of problems: Since in the stepper we >> only know the direction of the particle and make linear steps when >> accessing the geometry, making a step that ends more or less exactly at >> a material boundary is not easy. One could even miss e.g. thin Si >> layers. I did some protection against that by artificially making >> smaller steps when a material boundary is ahead. But it didn't work very >> well for all cases. >> Therefore I decided to do it like it has been done before: >> Before extrapolation, the stepper goes through the material with a >> straight line approximation and limits the stepsize so that a maximum >> momentum loss will not be exceeded. Then the extrapolation is done. The >> Material Effects are now calculated between the position before and >> after the extrapolation. Therefore, no thin layer can be missed. Its >> also easier to understand and less error-prone. >> >> regards, >> >> Johannes >> >> >> ------------------------------------------------------------------------------ >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. Discussions >> will include endpoint security, mobile security and the latest in malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Genfit-users mailing list >> Gen...@li... >> https://lists.sourceforge.net/lists/listinfo/genfit-users >> >> > -- Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-07-17 11:12:45
|
Dear Genfit users, in v642, a small inconsistency in GFMaterialEffects has been fixed, which lead to an underestimation of the material effects. regards, Johannes On 07/16/2012 08:59 PM, Johannes Rauch wrote: > Dear Genfit users, > > welcome to the Genfit-users mailing list. > As promised, I announce Genfit version v642. This concerns mainly the > RKTrackRep. > > In v641, a bug in the linear extrapolation step of RKutta has been fixed > (it was introduced in v575). > In v641, I also changed the Material stepping: To reduce the amount of > geometry accesses, I tried to do all of them in the stepper (which is > done before the actual extrapolation and, amongst other things, limits > the stepsize so that a maximum relative momentum loss will not be > exceeded in the upcoming step), and save the materials that have been > passed there. After the extrapolation, that list of materials should be > used to calculate the material effects. > However, this approach brings a lot of problems: Since in the stepper we > only know the direction of the particle and make linear steps when > accessing the geometry, making a step that ends more or less exactly at > a material boundary is not easy. One could even miss e.g. thin Si > layers. I did some protection against that by artificially making > smaller steps when a material boundary is ahead. But it didn't work very > well for all cases. > Therefore I decided to do it like it has been done before: > Before extrapolation, the stepper goes through the material with a > straight line approximation and limits the stepsize so that a maximum > momentum loss will not be exceeded. Then the extrapolation is done. The > Material Effects are now calculated between the position before and > after the extrapolation. Therefore, no thin layer can be missed. Its > also easier to understand and less error-prone. > > regards, > > Johannes > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Genfit-users mailing list > Gen...@li... > https://lists.sourceforge.net/lists/listinfo/genfit-users > -- Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |
|
From: Johannes R. <j....@tu...> - 2012-07-16 18:59:19
|
Dear Genfit users, welcome to the Genfit-users mailing list. As promised, I announce Genfit version v642. This concerns mainly the RKTrackRep. In v641, a bug in the linear extrapolation step of RKutta has been fixed (it was introduced in v575). In v641, I also changed the Material stepping: To reduce the amount of geometry accesses, I tried to do all of them in the stepper (which is done before the actual extrapolation and, amongst other things, limits the stepsize so that a maximum relative momentum loss will not be exceeded in the upcoming step), and save the materials that have been passed there. After the extrapolation, that list of materials should be used to calculate the material effects. However, this approach brings a lot of problems: Since in the stepper we only know the direction of the particle and make linear steps when accessing the geometry, making a step that ends more or less exactly at a material boundary is not easy. One could even miss e.g. thin Si layers. I did some protection against that by artificially making smaller steps when a material boundary is ahead. But it didn't work very well for all cases. Therefore I decided to do it like it has been done before: Before extrapolation, the stepper goes through the material with a straight line approximation and limits the stepsize so that a maximum momentum loss will not be exceeded. Then the extrapolation is done. The Material Effects are now calculated between the position before and after the extrapolation. Therefore, no thin layer can be missed. Its also easier to understand and less error-prone. regards, Johannes |
|
From: Johannes R. <j....@tu...> - 2012-07-16 11:04:44
|
Dear software developers and GENFIT users, I created a new mailing list called "GENFIT-users". From now on, I will announce changes in GENFIT, new revisions etc. over that list. All other GENFIT developers should do so as well when checking in important fixes/changes. Please subscribe using the following link: https://lists.sourceforge.net/lists/listinfo/genfit-users kind regards, Johannes |
|
From: Johannes R. <j....@tu...> - 2012-07-16 10:58:56
|
test -- Johannes Rauch Technische Universität München Physik Department E18 James-Franck-Strasse 85748 Garching phone +49 89 289 12592 fax +49 89 289 12570 mail j....@tu... www.e18.physik.tu-muenchen.de |