#include "hrungekutta.h"

HRungeKutta


class description - source file - inheritance tree (.pdf)

class HRungeKutta

Inheritance Chart:
HRungeKutta
    private:
void cosines(Float_t, Float_t, Double_t*) Bool_t decompose(TMatrixD& lu, Double_t& sign, Double_t tol, Int_t& nrZeros) void derive(Double_t*, Int_t) Float_t distance(Double_t*, Double_t*) Bool_t findIntersectionPoint(Double_t*, Double_t*, Double_t*, Double_t*, Double_t*) void findMdcIntersectionPoint(Double_t*, Double_t*, Int_t, Double_t*) Bool_t fitMdc() void gentrkNew(Float_t, Double_t*, Double_t*, Double_t*, Int_t) void initMom() Bool_t linSys() void parSetNew0(Float_t, Float_t, Int_t) void parSetNewVar(Float_t, Float_t) void rkeqfw(Double_t*, Float_t, Double_t*, Float_t*) Float_t rkgtrk(Float_t, Float_t, Double_t*, Double_t*, Int_t kind = 0) public:
HRungeKutta() HRungeKutta(const HRungeKutta&) virtual ~HRungeKutta() static TClass* Class() void clear() Bool_t fit3Hits(Double_t*, Double_t*, Double_t*, Double_t*, Float_t*, Int_t, Double_t pGuess = 999999999.) Bool_t fit4Hits(Double_t*, Double_t*, Double_t*, Double_t*, Float_t*, Int_t, Double_t pGuess = 999999999.) Float_t getChi2() Float_t getDXtrackFirstMDCFitPos() Float_t getDXtrackLastMDCFitPos() Float_t getDYtrackFirstMDCFitPos() Float_t getDYtrackLastMDCFitPos() Float_t getDZtrackFirstMDCFitPos() Float_t getDZtrackLastMDCFitPos() Double_t getMTol() Int_t getNMaxMod() Float_t getPfit() Float_t getPhiSeg1() Float_t getPhiSeg2() Float_t getRSeg1() Float_t getRSeg2() Float_t getThetaSeg1() Float_t getThetaSeg2() Float_t getTrackLength() Float_t getXfit(Int_t iMdc) Float_t getXfithit(Int_t iMdc) Float_t getXhit(Int_t iMdc) Float_t getXtrackFirstMDCFitPos() Float_t getXtrackLastMDCFitPos() Float_t getXtrackOnMETA() Float_t getYfit(Int_t iMdc) Float_t getYfithit(Int_t iMdc) Float_t getYhit(Int_t iMdc) Float_t getYtrackFirstMDCFitPos() Float_t getYtrackLastMDCFitPos() Float_t getYtrackOnMETA() Float_t getZfit(Int_t iMdc) Float_t getZSeg1() Float_t getZSeg2() Float_t getZtrackFirstMDCFitPos() Float_t getZtrackLastMDCFitPos() Float_t getZtrackOnMETA() virtual TClass* IsA() const HRungeKutta& operator=(const HRungeKutta&) void setField(HMdcTrackGField*, Float_t) void setFieldFactor(Float_t fpol) void setMdcPosition(Int_t, Int_t, HGeomTransform&) void setMTol(Double_t tol) virtual void ShowMembers(TMemberInspector& insp, char* parent) virtual void Streamer(TBuffer& b) void StreamerNVirtual(TBuffer& b) void traceToMETA(HGeomVector&, HGeomVector&, HGeomVector*, HGeomVector*) void traceToVertex(HMdcSizesCells*)

Data Members

    private:
HMdcTrackGField* fieldMap pointer to field map Double_t fieldScalFact factor of the magnetic field strength Bool_t mdcInstalled[4][6] remembers which MDCs have known geometry Double_t mdcPos[4][6][3] real position of mdc's in sector coordinate system Double_t normVecMdc[4][6][3] normal vector on each Mdc module in sector coordinate system Double_t pointForVertexRec[6][3] point on virtual plane in front of MDC1 used for vertex reconstruction Double_t dzfacMdc[2][6] factor to calculate dz from dy in the first two MDC planes Double_t p0Guess initial momentum Float_t initialStepSize initial RK step size Float_t stepSizeInc factor to increase stepsize Float_t stepSizeDec factor to decrease stepsize Float_t maxStepSize maximum stepsize Float_t minStepSize minimum stepsize Float_t minPrecision minimum required precision for a single step Float_t maxPrecision maximum required precision for a single step Int_t maxNumSteps maximum number of steps Double_t maxDist maximum distance for straight line approximation Float_t pfit momentum after RK-fit Float_t chi2 normalized chi^2 after RK-fit Float_t trackLength track length Float_t dpar[5] variations (momentum, xdir, ydir, xpos, ypos) Float_t resolution[8] resolution Float_t sig[8] sigmas for hit points Double_t hit[4][3] Double_t fit[4][3] hits and fitted points at mdc's Double_t fitdp[4][3] Double_t fitdh[4][3] Double_t fitdv[4][3] Double_t fit1h[4][3] Double_t fit1v[4][3] fitted positions for derivatives Int_t mdcModules[4] module number in hit/fit Int_t mdcLookup[4] index in mdcModules for all 4 modules Double_t dydpar[5][8] derivatives Double_t ydata[8] difference between fitted and measured hit positions Double_t fitpar[5] fit parameters Int_t ndf number of degrees of freedom Int_t nMaxMod maximum hit module number (3 or 4) Int_t sector sector index Double_t dirAtFirstMDC[3] fitted direction at first MDC Double_t posNearLastMDC[3] fitted direction at last MDC Double_t dirAtLastMDC[3] fitted direction at last MDC Float_t stepSizeAtLastMDC RK step size at last MDC Double_t trackPosOnMETA[3] fitted trajectory point on META Int_t jstep step number Double_t zSeg1 Double_t rSeg1 Double_t thetaSeg1 Double_t phiSeg1 fitted data for inner segment Double_t zSeg2 Double_t rSeg2 Double_t thetaSeg2 Double_t phiSeg2 fitted data for outer segment Float_t polbending polarity of bending (field scaling factor * pfit) Double_t mTol ! tolerance for invertion of matrix (default : DBL_EPSILON)

Class Description


HRungeKutta()

void clear()
 clears magnetic field definition and vertex position and direction

void setField(HMdcTrackGField* pField, Float_t fpol)
 sets the field map and the scaling factor

void setMdcPosition(Int_t s, Int_t m, HGeomTransform& gtrMod2Sec)
 sets the MDC module position in the sector coordinate system
 calculates the normal vector on the planes

Bool_t fit4Hits(Double_t* u1pos, Double_t* u1dir, Double_t* u2pos, Double_t* u2dir, Float_t* sigMult, Int_t sec, Double_t pGuess)
 Input:  position and direction of the two segments u1 and u2,
         array with multiplication factors for errors
         sector number, initial guess for momentum
 From the segments the hit positions are calculated.
 Calls fitMdc for Runge-Kutta track propagation and fitting

Bool_t fit3Hits(Double_t* u1pos, Double_t* u1dir, Double_t* u2pos, Double_t* u2dir, Float_t* sigMult, Int_t sec, Double_t pGuess)
 Input:  position and direction of the two segments u1 and u2
         array with multiplication factors for errors
         sector number, initial guess for momentum
 From the segments the hit positions are calculated.
 If the multiplication factors for errors of a hit -1, the hit is discarded.
 Calls fitMdc for Runge-Kutta track propagation and fitting

Bool_t fitMdc()

void findMdcIntersectionPoint(Double_t* upos,Double_t* udir,Int_t mdcN,Double_t* xyz)
 calculates the hit points in the MDC module (index mdcN 0..3)
 input:  posline == pos from track piece
 input:  dirline == pos from segment
         mdcN    == module number 0..3
 output: xyz     == hit position in module

void initMom()
 Here we set initial approximation momentum value

Float_t distance(Double_t* p1,Double_t* p2)
 calculates the distance between two points

void parSetNew0(Float_t uh,Float_t uv,Int_t iter)
 RK propagation with initial or last fit parameters
 uv - vertical direction in MDC1
 uh - horizontal direction

void parSetNewVar(Float_t uh,Float_t uv)
 calculates the derivatives (RK propagation with parameter variations)
 uv - vertical direction
 uh - horizontal direction in MDC1

void cosines(Float_t uh, Float_t uv, Double_t* dir)
 calculates the direction

void derive(Double_t* hitpar, Int_t kind)
 calculates the derivative (hit-fit)/variation

Bool_t linSys()
 solves the system of linear equations and sets the new fitting parameters

void gentrkNew(Float_t p, Double_t* upos, Double_t* udir, Double_t* hitxyz, Int_t kind )
 propages the track through the MDC system
 p      == momentum
 upos   == initial position
 udir   == initial direction
 hitxyz == hits in chambers
 kind   == type of variation

Float_t rkgtrk(Float_t totStep, Float_t p, Double_t* upos, Double_t* udir, Int_t kind)
 one step of track tracing from the position upos in the direction of udir

void rkeqfw(Double_t b[3], Float_t p, Double_t* udir, Float_t* duds)
 calculates 2nd derivative

void traceToVertex(HMdcSizesCells* pMSizesCells)
 propogates the track backwards from first MDC till Z=zVertex plane
 should be called only after RK-minimisation is done

void traceToMETA(HGeomVector& metaHit,HGeomVector& metaNormVec, HGeomVector* pathCorrPos,HGeomVector* pathCorrNorm)
 propagates the track from the last fitted MDC position till track intersection
 with META plane (is defined by META-hit and normal vector to rod's plane
 should be called only after RK-minimisation is done

Bool_t findIntersectionPoint(Double_t* upos, Double_t* udir, Double_t* planeR0, Double_t* planeNorm, Double_t* pointIntersect)
 upos, udir - "moving point" current position and movement direction vector
 planeR0[3] some point on the plane to which intersection is supposed to happen
 planeNorm[3] perpendicular vector to the plane
 pointIntersect[3] - output - the intersection point of "moving point" with plane

Bool_t decompose(TMatrixD &lu,Double_t &sign,Double_t tol,Int_t &nrZeros)
 THis part is copid from ROOT TDecompLU::Decompose() to get
 rid of error message!
 Crout/Doolittle algorithm of LU decomposing a square matrix, with implicit partial
 pivoting.  The decomposition is stored in fLU: U is explicit in the upper triag
 and L is in multiplier form in the subdiagionals .
 Row permutations are mapped out in fIndex. fSign, used for calculating the
 determinant, is +/- 1 for even/odd row permutations. .



Inline Functions


                void ~HRungeKutta()
                void setFieldFactor(Float_t fpol)
             Float_t getPfit()
             Float_t getChi2()
               Int_t getNMaxMod()
             Float_t getXfit(Int_t iMdc)
             Float_t getYfit(Int_t iMdc)
             Float_t getZfit(Int_t iMdc)
             Float_t getXhit(Int_t iMdc)
             Float_t getYhit(Int_t iMdc)
             Float_t getXfithit(Int_t iMdc)
             Float_t getYfithit(Int_t iMdc)
             Float_t getXtrackFirstMDCFitPos()
             Float_t getYtrackFirstMDCFitPos()
             Float_t getZtrackFirstMDCFitPos()
             Float_t getDXtrackFirstMDCFitPos()
             Float_t getDYtrackFirstMDCFitPos()
             Float_t getDZtrackFirstMDCFitPos()
             Float_t getXtrackLastMDCFitPos()
             Float_t getYtrackLastMDCFitPos()
             Float_t getZtrackLastMDCFitPos()
             Float_t getDXtrackLastMDCFitPos()
             Float_t getDYtrackLastMDCFitPos()
             Float_t getDZtrackLastMDCFitPos()
             Float_t getXtrackOnMETA()
             Float_t getYtrackOnMETA()
             Float_t getZtrackOnMETA()
             Float_t getTrackLength()
             Float_t getZSeg1()
             Float_t getRSeg1()
             Float_t getThetaSeg1()
             Float_t getPhiSeg1()
             Float_t getZSeg2()
             Float_t getRSeg2()
             Float_t getThetaSeg2()
             Float_t getPhiSeg2()
                void setMTol(Double_t tol)
            Double_t getMTol()
             TClass* Class()
             TClass* IsA() const
                void ShowMembers(TMemberInspector& insp, char* parent)
                void Streamer(TBuffer& b)
                void StreamerNVirtual(TBuffer& b)
         HRungeKutta HRungeKutta(const HRungeKutta&)
        HRungeKutta& operator=(const HRungeKutta&)


Last update: Fri Jan 26 12:32:00 2007


ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.