ROOT logo
#ifndef ALISTRLINE_H
#define ALISTRLINE_H
/* Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

///////////////////////////////////////////////////////////////////
//                                                               //
// A straight line is coded as a point (3 Double_t) and           //
// 3 direction cosines                                           //
//                                                               //
///////////////////////////////////////////////////////////////////

#include "AliLog.h"

class AliStrLine : public TObject {

public:
    AliStrLine();        // default constructor
    AliStrLine(const Double_t *const point, const Double_t *const cd, Bool_t twopoints=kFALSE, UShort_t id1=65535, UShort_t id2=65535);  // standard constructor
    AliStrLine(const Double_t *const point, const Double_t *const sig2point, const Double_t *const cd, Bool_t twopoints=kFALSE, UShort_t id1=65535, UShort_t id2=65535);
    AliStrLine(const Double_t *const point, const Double_t *const sig2point, const Double_t *const wmat, const Double_t *const cd, Bool_t twopoints=kFALSE, UShort_t id1=65535, UShort_t id2=65535);

    AliStrLine(const AliStrLine& source);
    AliStrLine& operator=(const AliStrLine& source);
    virtual ~AliStrLine(); // destructor
    virtual void Clear(Option_t*){if(fWMatrix)delete[] fWMatrix; fWMatrix = 0;}
    void PrintStatus() const;
    void SetP0(const Double_t *point) {for(Int_t i=0;i<3;i++)fP0[i]=point[i];}
    void SetSigma2P0(const Double_t *sigsq) {for(Int_t i=0;i<3;i++)fSigma2P0[i]=sigsq[i];}
    void SetWMatrix(const Double_t *wmat);
    void SetCd(const Double_t *cd) {for(Int_t i=0;i<3;i++)fCd[i]=cd[i];}
    void SetIdPoints(UShort_t id1, UShort_t id2){
      fIdPoint[0]=id1;
      fIdPoint[1]=id2;
    } 

    void GetP0(Double_t *point) const {for(Int_t i=0;i<3;i++)point[i]=fP0[i];}
    void GetSigma2P0(Double_t *sigsq) const {for(Int_t i=0;i<3;i++)sigsq[i]=fSigma2P0[i];}
    void GetWMatrix(Double_t *wmat) const;
    void GetCd(Double_t *cd) const {for(Int_t i=0;i<3;i++)cd[i]=fCd[i];}
    void GetCurrentPoint(Double_t *point) const;
    UShort_t GetIdPoint(Int_t i) const {
      if(i<2) return fIdPoint[i];
      AliError("Wrong element: only 2 points are stored in AliStrLine");
      return 65535;
    }
    Int_t IsParallelTo(const AliStrLine *line) const;
    Int_t Crossrphi(const AliStrLine *line);
    Int_t CrossPoints(AliStrLine *line, Double_t *point1, Double_t *point2);
    Int_t Cross(AliStrLine *line, Double_t *point);
    Double_t GetDCA(const AliStrLine *line) const;
    Double_t GetDistFromPoint(const Double_t *point) const;
    Bool_t GetParamAtRadius(Double_t r,Double_t &t1,Double_t &t2) const;
    void ComputePointAtT(Double_t t,Double_t *p) const {
      for(Int_t i=0;i<3;i++)p[i]=fP0[i]+fCd[i]*t; }
 protected:
    void InitDirection(const Double_t *const point, const Double_t *const cd);
    void InitTwoPoints(const Double_t *const pA, const Double_t *const pB);
    Double_t fP0[3];           // given point
    Double_t fSigma2P0[3];           // errors on coordinates of given point
    Double_t *fWMatrix;           //[6] weighting matrix
    /* fWMatrix is a symmetric matrix internally stored as
       0 --> row = 0, col = 0
       1 --> 0,1
       2 --> 0,2
       3 --> 1,1
       4 --> 1,2
       5 --> 2,2
       The external interface (constructor, getter and setter) is:
       0 --> row = 0, col = 0
       1 --> 0,1
       2 --> 0,2
       3 --> 1,0
       4 --> 1,1
       5 --> 1,2
       6 --> 2,0
       7 --> 2,1
       8 --> 2,2                                                 */
    Double_t fCd[3];         // direction cosines
    Double_t fTpar;          //! parameter 
    UShort_t fIdPoint[2];    // Identifiers of RecPoints defining the line
    
 private:
    void SetPar(const Double_t par){fTpar = par;}

  ClassDef(AliStrLine,5);
};

#endif
 AliStrLine.h:1
 AliStrLine.h:2
 AliStrLine.h:3
 AliStrLine.h:4
 AliStrLine.h:5
 AliStrLine.h:6
 AliStrLine.h:7
 AliStrLine.h:8
 AliStrLine.h:9
 AliStrLine.h:10
 AliStrLine.h:11
 AliStrLine.h:12
 AliStrLine.h:13
 AliStrLine.h:14
 AliStrLine.h:15
 AliStrLine.h:16
 AliStrLine.h:17
 AliStrLine.h:18
 AliStrLine.h:19
 AliStrLine.h:20
 AliStrLine.h:21
 AliStrLine.h:22
 AliStrLine.h:23
 AliStrLine.h:24
 AliStrLine.h:25
 AliStrLine.h:26
 AliStrLine.h:27
 AliStrLine.h:28
 AliStrLine.h:29
 AliStrLine.h:30
 AliStrLine.h:31
 AliStrLine.h:32
 AliStrLine.h:33
 AliStrLine.h:34
 AliStrLine.h:35
 AliStrLine.h:36
 AliStrLine.h:37
 AliStrLine.h:38
 AliStrLine.h:39
 AliStrLine.h:40
 AliStrLine.h:41
 AliStrLine.h:42
 AliStrLine.h:43
 AliStrLine.h:44
 AliStrLine.h:45
 AliStrLine.h:46
 AliStrLine.h:47
 AliStrLine.h:48
 AliStrLine.h:49
 AliStrLine.h:50
 AliStrLine.h:51
 AliStrLine.h:52
 AliStrLine.h:53
 AliStrLine.h:54
 AliStrLine.h:55
 AliStrLine.h:56
 AliStrLine.h:57
 AliStrLine.h:58
 AliStrLine.h:59
 AliStrLine.h:60
 AliStrLine.h:61
 AliStrLine.h:62
 AliStrLine.h:63
 AliStrLine.h:64
 AliStrLine.h:65
 AliStrLine.h:66
 AliStrLine.h:67
 AliStrLine.h:68
 AliStrLine.h:69
 AliStrLine.h:70
 AliStrLine.h:71
 AliStrLine.h:72
 AliStrLine.h:73
 AliStrLine.h:74
 AliStrLine.h:75
 AliStrLine.h:76
 AliStrLine.h:77
 AliStrLine.h:78
 AliStrLine.h:79
 AliStrLine.h:80
 AliStrLine.h:81
 AliStrLine.h:82
 AliStrLine.h:83
 AliStrLine.h:84
 AliStrLine.h:85
 AliStrLine.h:86
 AliStrLine.h:87
 AliStrLine.h:88
 AliStrLine.h:89