X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRelAlignerKalman.h;h=ec1f91fdc77c44c7a3a953e460bf682fee999976;hb=dbfbf54e7f0d74793dac9d8dfbc3446649a6ce88;hp=95c5a5d2ba1025935eeb08b06bd3c584bccc0e94;hpb=a80268df30c11eb9ac6a5f0513ae9b3b83b37644;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRelAlignerKalman.h b/STEER/AliRelAlignerKalman.h index 95c5a5d2ba1..ec1f91fdc77 100644 --- a/STEER/AliRelAlignerKalman.h +++ b/STEER/AliRelAlignerKalman.h @@ -14,13 +14,15 @@ ////////////////////////////////////////////////////////////////////////////// #include -#include #include #include +class TObject; class AliExternalTrackParam; class AliESDEvent; class AliESDtrack; +class TArrayI; +class TObjArray; class AliRelAlignerKalman : public TObject { @@ -69,6 +71,7 @@ public: void GetSeed( TVectorD& seed, TMatrixDSym& seedCov ) const { seed = *fPX; seedCov = *fPXcov; } void SetSeed( const TVectorD& seed, const TMatrixDSym& seedCov ) {*fPX = seed; *fPXcov = seedCov; } Bool_t Merge( const AliRelAlignerKalman* al ); + Long64_t Merge( TCollection* list ); //Expert methods: Bool_t AddESDevent( const AliESDEvent* pEvent ); @@ -76,8 +79,8 @@ public: void SetMagField( const Double_t f ) { fMagField=f; } Double_t GetMagField() const { return fMagField; } Bool_t FindCosmicTrackletNumbersInEvent( TArrayI& outITStracksTArr, TArrayI& outTPCtracksTArr, const AliESDEvent* pEvent ); + Int_t FindMatchingTracks(TObjArray& arrITS, TObjArray& arrTPC, AliESDEvent* pESD); Bool_t Update(); - void SetRefSurface( const Double_t x, const Double_t alpha ); void PrintCorrelationMatrix(); //void PrintCovarianceCorrection(); void PrintSystemMatrix(); @@ -89,11 +92,14 @@ public: Double_t* GetMeasurementArr() const { return fPMeasurement->GetMatrixArray(); } Double_t* GetMeasurementCovArr() const { return fPMeasurementCov->GetMatrixArray(); } TMatrixD* GetH() const { return fPH; } + TVectorD* GetMeasurementPrediction() const {return fPMeasurementPrediction;} const Double_t* GetDeltaArr() const {return fDelta;} void SetNumericalParanoia( const Bool_t mode=kFALSE ) { fNumericalParanoia=mode; } void SetCorrectionMode( const Bool_t mode=kTRUE ) { fCorrectionMode=mode; } void SetOutRejSigma( const Double_t a=2. ) { fOutRejSigmas = a; } void SetRejectOutliers( const Bool_t r=kTRUE ) {fRejectOutliers = r;} + void SetRejectOutliersSigma2Median( const Bool_t b=kTRUE ); + void SetOutRejSigma2Median( const Double_t s ) {fOutRejSigma2Median = s;} Bool_t SetTrackParams( const AliExternalTrackParam* exparam1, const AliExternalTrackParam* exparam2 ); const AliExternalTrackParam* GetTrackParams1() const {return fPTrackParamArr1;} const AliExternalTrackParam* GetTrackParams2() const {return fPTrackParamArr2;} @@ -114,6 +120,17 @@ public: Bool_t IsPositiveDefinite( const TMatrixD& mat ) const; void SetTimeStamp( const UInt_t ts ) { fTimeStamp = ts; } UInt_t GetTimeStamp() const {return fTimeStamp;} + void SetRunNumber( const Int_t rn ) { fRunNumber = rn; } + Int_t GetRunNumber() const {return fRunNumber;} + Int_t Compare(const TObject *obj) const; + Bool_t IsSortable() const { return kTRUE; } + Int_t GetNTracks() const {return fNTracks;} + Int_t GetNUpdates() const {return fNUpdates;} + Int_t GetNOutliers() const {return fNOutliers;} + Int_t GetNOutliersSigma2Median() const {return fNOutliersSigma2Median;} + Int_t GetNMerges() const {return fNMerges;} + Int_t GetNMergesFailed() const {return fNMergesFailed;} + void SetPoint2Track( Bool_t o ); protected: Bool_t UpdateEstimateKalman(); @@ -122,20 +139,20 @@ protected: Bool_t PreparePrediction(); Bool_t PredictMeasurement( TVectorD& z, const TVectorD& x ); Bool_t IsOutlier( const TVectorD& update, const TMatrixDSym& covmatrix ); + Bool_t IsOutlierSigma2Median( const AliExternalTrackParam* pITS, const AliExternalTrackParam* pTPC ); private: static const Int_t fgkNTracksPerMeasurement=1; //how many tracks for one update - static const Int_t fgkNMeasurementParams=4; //how many measurables static const Int_t fgkNSystemParams=9; //how many fit parameters + static const Int_t fgkNtracksSigma2Median=500; //how many sets for median and rms //Track parameters - Double_t fAlpha; //!rotation angle between the local and global coordinate system like in AliExternalTrackParam - Double_t fLocalX; //!local x coordinate of reference plane = r(global) AliExternalTrackParam* fPTrackParamArr1; //!local track parameters AliExternalTrackParam* fPTrackParamArr2; //!local track parameters - Double_t fMagField; //!magnetic field + Double_t fMagField; //magnetic field //Kalman filter related stuff + Int_t fNMeasurementParams; //how many measurables TVectorD* fPX; //System (fit) parameters (phi, theta, psi, x, y, z, driftcorr, driftoffset ) TMatrixDSym* fPXcov; //covariance matrix of system parameters TMatrixD* fPH; //!System measurement matrix @@ -144,38 +161,47 @@ private: TMatrixDSym* fPMeasurementCov; //!measurement vec cvariance TVectorD* fPMeasurementPrediction; //!prediction of the measurement Double_t fOutRejSigmas; //number of sigmas for outlier rejection - Double_t* fDelta; //array with differentials for calculating derivatives for every parameter(see PrepareSystemMatrix()) + Double_t fOutRejSigma2Median; //nsigmas to median of input residual distribution + Double_t fDelta[fgkNSystemParams]; //array with differentials for calculating derivatives for every parameter(see PrepareSystemMatrix()) + Double_t* fResArrSigma2Median[4]; //!holds residuals for median based outlier removal //Control - Bool_t fNumericalParanoia; //!whether to perform additional checks for numerical stability - Bool_t fRejectOutliers; //!whether to do outlier rejection in the Kalman filter - Bool_t fRequireMatchInTPC; //!when looking for a cosmic in event, require that TPC has 2 matching segments - Bool_t fCuts; //!track cuts? - Int_t fMinPointsVol1; //!mininum number of points in volume 1 - Int_t fMinPointsVol2; //!mininum number of points in volume 2 - Double_t fMinMom; //!min momentum of track for track cuts - Double_t fMaxMom; //!max momentum of track for track cuts - Double_t fMaxMatchingAngle; //!cuts - Double_t fMaxMatchingDistance; //!cuts + Bool_t fYZOnly; //whether to consider only yz without directions. + Bool_t fNumericalParanoia; //whether to perform additional checks for numerical stability + Bool_t fRejectOutliers; //whether to do outlier rejection in the Kalman filter + Bool_t fRejectOutliersSigma2Median; //whether to reject input based on distance to median + Bool_t fRequireMatchInTPC; //when looking for a cosmic in event, require that TPC has 2 matching segments + Bool_t fCuts; //track cuts? + Int_t fMinPointsVol1; //mininum number of points in volume 1 + Int_t fMinPointsVol2; //mininum number of points in volume 2 + Double_t fMinPt; //min momentum of track for track cuts + Double_t fMaxPt; //max momentum of track for track cuts + Double_t fMaxMatchingAngle; //cuts + Double_t fMaxMatchingDistance; //cuts Bool_t fCorrectionMode; //calculate corrective transform for TPC (or monitor actual TPC misal params) //Counters Int_t fNTracks; //number of processed tracks Int_t fNUpdates; //number of successful Kalman updates Int_t fNOutliers; //number of outliers + Int_t fNOutliersSigma2Median; //number of rejected inputs Int_t fNMatchedCosmics; //number of cosmic events with matching tracklets (good cosmics) Int_t fNMatchedTPCtracklets;//number of cosmic events with 2 matching TPC tracklets Int_t fNProcessedEvents; //number of processed events Int_t fTrackInBuffer; //!number of tracks in buffer - UInt_t fTimeStamp; + UInt_t fTimeStamp; //time stamp + Int_t fRunNumber; //run number + Int_t fNMerges; //how many succesful merges + Int_t fNMergesFailed; //how many merges failed //TPC stuff Double_t fTPCvd; //TPC drift velocity Double_t fTPCZLengthA; //TPC length side A Double_t fTPCZLengthC; //TPC length side C - ClassDef(AliRelAlignerKalman,1) //AliRelAlignerKalman class + ClassDef(AliRelAlignerKalman,4) //AliRelAlignerKalman class }; #endif +