LCOV - code coverage report
Current view: top level - ITS/ITSbase - AliITSgeomMatrix.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 7 25 28.0 %
Date: 2016-06-14 17:26:59 Functions: 8 25 32.0 %

          Line data    Source code
       1             : #ifndef ALIITSGEOMMATRIX_H
       2             : #define ALIITSGEOMMATRIX_H
       3             : /* Copyright(c) 2000, ALICE Experiment at CERN, All rights reserved. *
       4             :  * see cxx source for full Copyright notice.                         */
       5             : 
       6             : //////////////////////////////////////////////////////////////////////////
       7             : //  ITS geometry manipulation routines on the module level. This class is
       8             : //  to replace the structure ITS_geom in the class AliITSgeom.
       9             : //  Created May 30 2000.
      10             : //   version 0.0.0
      11             : // By Bjorn S. Nilsen
      12             : ////////////////////////////////////////////////////////////////////////////
      13             : #include <TObject.h>
      14             : #include <TString.h>
      15             : class TPolyLine3D;
      16             : class TNode;
      17             : class TShape;
      18             : 
      19             : using std::ostream;
      20             : using std::istream;
      21             : 
      22             : class AliITSgeomMatrix : public TObject {
      23             :  public:
      24             :     AliITSgeomMatrix(); // Default constructor
      25             :     // Standard constructor #1
      26             :     AliITSgeomMatrix(Int_t idt,const Int_t id[3],
      27             :                      const Double_t rot[3],const Double_t tran[3]);
      28             :     // Standard constructor #2
      29             :     AliITSgeomMatrix(Int_t idt,const Int_t id[3],
      30             :                      Double_t matrix[3][3],const Double_t tran[3]);
      31             :     // Standard constructor #3
      32             :     AliITSgeomMatrix(const Double_t rotd[6]/*degrees GEANT angles*/,
      33             :                      Int_t idt,const Int_t id[3],
      34             :                      const Double_t tran[3]);
      35             :     // Copy constructor
      36             :     AliITSgeomMatrix(const AliITSgeomMatrix &source);
      37             :     // Assignment operator
      38             :     AliITSgeomMatrix& operator=(const AliITSgeomMatrix &source); 
      39       92316 :     virtual ~AliITSgeomMatrix(){}; // default constructor.
      40             :     // Prints a line describing the output format of the function Print.
      41             :     void PrintComment(ostream *os) const;
      42             :     // Prints out the content of this class in ASCII format.
      43             :     void Print(ostream *os)const;
      44             :     // Prints out the content of this class in ASCII format but includes
      45             :     // formating and strings that make it more humanly readable.
      46             :     void PrintTitles(ostream *os) const;
      47             :     // Reads in the content of this class in the format of Print
      48             :     void Read(istream *is);
      49             :     virtual void Print(Option_t* const option="") const {
      50           0 :         TObject::Print(option);}
      51           0 :     virtual Int_t Read(const char *name) {return TObject::Read(name);}
      52             :     
      53             :     // Returns the geometry path corresponding to this transformation
      54           0 :     TString& GetPath(){return fPath;}
      55             :     // Sets the geometry path
      56           0 :     void SetPath(const Char_t *p){fPath = p;}
      57       30772 :     void SetPath(const TString &p){fPath = p;}
      58             :     // Given the rotation angles [radians] it fills frot and computes
      59             :     // the rotation matrix fm.
      60             :     void SetAngles(const Double_t rot[3]){// [radians]
      61           0 :         for(Int_t i=0;i<3;i++)frot[i] = rot[i];this->MatrixFromAngle();}
      62             :     // Sets the translation vector and computes fCylR and fCylPhi.
      63             :     void SetTranslation(const Double_t tran[3]);
      64             :     // sets the rotation matrix and computes the rotation angles [radians]
      65      138474 :     void SetMatrix(const Double_t matrix[3][3]){ for(Int_t i=0;i<3;i++)
      66      384650 :         for(Int_t j=0;j<3;j++) fm[i][j]=matrix[i][j];this->AngleFromMatrix();}
      67             :     // Sets the detector index value
      68           0 :     void SetDetectorIndex(Int_t idt) {fDetectorIndex = idt;}
      69             :     // Sets the detector layer, ladder, detector (id) values.
      70             :     void SetIndex(const Int_t id[3]){
      71           0 :         for(Int_t i=0;i<3;i++) fid[i] = id[i];}
      72             :     // Returns the rotation angles [radians]
      73             :     void GetAngles(Double_t rot[3]) const {// [radians]
      74           0 :         for(Int_t i=0;i<3;i++)  rot[i] = frot[i];}
      75             :     // Returns the translation vector [cm]
      76             :     void GetTranslation(Double_t tran[3]) const {
      77           0 :         for(Int_t i=0;i<3;i++) tran[i] = ftran[i];}
      78             :     // Returns the translation vector in cylindrical
      79             :     // coordinates [cm,radians]
      80             :     void GetTranslationCylinderical (Double_t tran[3]) const {
      81           0 :         tran[0] = fCylR;
      82           0 :         tran[1] = fCylPhi;
      83           0 :         tran[2] = ftran[2];}
      84             :     // Returns the values of the rotation matrix
      85           0 :     void GetMatrix(Double_t matrix[3][3]) const {for(Int_t i=0;i<3;i++)
      86           0 :         for(Int_t j=0;j<3;j++) matrix[i][j] = fm[i][j];}
      87             :     // Returns the detector index value.
      88       52752 :     Int_t GetDetectorIndex() const {return fDetectorIndex;}
      89             :     // returns the modules index layer, ladder, detector
      90       70480 :     void  GetIndex(Int_t id[3]) const {for(Int_t i=0;i<3;i++) id[i] = fid[i];}
      91             :     // return the x,y,z components (global) of the normalized normal
      92             :     // vector which helps to define the plane the detector is a part of
      93             :     void GetGlobalNormal(Double_t &nx,Double_t &ny,Double_t &nz)const{
      94           0 :         Double_t ln[3]={0.0,1.0,0.0},gn[3];LtoGMomentum(ln,gn);
      95           0 :         nx = gn[0];ny=gn[1];nz=gn[2];return;}
      96             :     // Sets the rotation matrix based on the 6 GEANT rotation
      97             :     // angles [radian]
      98             :     void  MatrixFromSixAngles(const Double_t *ang);
      99             :     // Returns the 6 GEANT rotation angles [radians] from the
     100             :     // existing rotation matrix.
     101             :     void  SixAnglesFromMatrix(Double_t *ang)const;
     102             :     // Set rotation using the Euler's Chi-convention
     103             :     void SetEulerAnglesChi(const Double_t ang[3]);
     104             : 
     105             :     // Given a position in Cartesian ALICE global coordinates [cm]
     106             :     // returns the position in Cartesian detector/module local
     107             :     //coordinates [cm]
     108             :     void GtoLPosition(const Double_t g[3],Double_t l[3]) const;
     109             :     // Given a position in Cartesian detector/module local coordinates [cm]
     110             :     // returns the position in Cartesian ALICE global
     111             :     //coordinates [cm]
     112             :     void LtoGPosition(const Double_t l[3],Double_t g[3]) const;
     113             :     // Given a momentum in Cartesian ALICE global coordinates
     114             :     // returns the momentum in Cartesian detector/module local
     115             :     //coordinates
     116             :     void GtoLMomentum(const Double_t g[3],Double_t l[3]) const;
     117             :     // Given a momentum in Cartesian detector/module local coordinates 
     118             :     // returns the momentum in Cartesian ALICE global coordinates
     119             :     void LtoGMomentum(const Double_t l[3],Double_t g[3]) const;
     120             :     // given a position error matrix in ALICE Cartesian global
     121             :     // coordinates [cm] returns a position error matrix in detector/
     122             :     // module local Cartesian local coordinates [cm]
     123             :     void GtoLPositionError(const Double_t g[3][3],Double_t l[3][3]) const;
     124             :     // given a position error matrix in detector/module Cartesian local
     125             :     // coordinates [cm] returns a position error matrix in ALICE
     126             :     // Cartesian global coordinates [cm]
     127             :     void LtoGPositionError(const Double_t l[3][3],Double_t g[3][3]) const;
     128             :     // Tracking Related Routines
     129             :     void GtoLPositionTracking(const Double_t g[3],Double_t l[3]) const;
     130             :     // Given a position in Cartesian Tracking global coordinates [cm]
     131             :     // returns the position in Cartesian detector/module local
     132             :     // coordinates [cm]
     133             :     void LtoGPositionTracking(const Double_t l[3],Double_t g[3]) const;
     134             :     // Given a position in Cartesian detector/module local coordinates [cm]
     135             :     // returns the position in Cartesian Tracking global
     136             :     //coordinates [cm]
     137             :     void GtoLMomentumTracking(const Double_t g[3],Double_t l[3]) const;
     138             :     // Given a momentum in Cartesian detector/module local coordinates 
     139             :     // returns the momentum in Cartesian Tracking global coordinates
     140             :     void LtoGMomentumTracking(const Double_t l[3],Double_t g[3]) const;
     141             :     // given a position error matrix in Tracking Cartesian global
     142             :     // coordinates [cm] returns a position error matrix in detector/
     143             :     // module local Cartesian local coordinates [cm]
     144             :     void GtoLPositionErrorTracking(const Double_t g[3][3],
     145             :                                    Double_t l[3][3]) const;
     146             :     // given a position error matrix in detector/module Cartesian local
     147             :     // coordinates [cm] returns a position error matrix in Tracking
     148             :     // Cartesian global coordinates [cm]
     149             :     void LtoGPositionErrorTracking(const Double_t l[3][3],
     150             :                                    Double_t g[3][3]) const;
     151             :     // Computes the distance squared [cm^2] between a point t[3] and
     152             :     // this module/detector
     153             :     Double_t Distance2(const Double_t t[3]) const {Double_t d=0.0,q;
     154           0 :     for(Int_t i=0;i<3;i++){q = t[i]-ftran[i]; d += q*q;}
     155           0 :     return d;}
     156             :      //
     157             :      // Documentation related Class
     158             :      TPolyLine3D* CreateLocalAxis() const;
     159             :      TPolyLine3D* CreateLocalAxisTracking() const;
     160             :      TNode* CreateNode(const Char_t *nodeName,const Char_t *nodeTitle,
     161             :                        TNode *mother,TShape *shape,Bool_t axis=kTRUE) const;
     162             :      void MakeFigures() const;
     163             :      //
     164             :  private: // private functions
     165             :      // Given the rotation matrix fm it fills the rotation angles frot
     166             :      void MatrixFromAngle();
     167             :      // Given the rotation angles frot it fills the rotation matrix fm
     168             :      void AngleFromMatrix();
     169             :  private: // Data members.
     170             :      Int_t    fDetectorIndex; // Detector type index (like fShapeIndex was)
     171             :      Int_t    fid[3];         // layer, ladder, detector numbers.
     172             :      Double_t frot[3];        //! vector of rotations about x,y,z [radians].
     173             :      Double_t ftran[3];       // Translation vector of module x,y,z.
     174             :      Double_t fCylR,fCylPhi;  //! Translation vector in Cylindrical coord.
     175             :      Double_t fm[3][3];       // Rotation matrix based on frot.
     176             :      TString  fPath;          // Path within Geometry to this volume
     177             :      
     178             :      // Note, fCylR and fCylPhi are added as data members because it costs
     179             :      // about a factor of 10 to compute them over looking them up. Since
     180             :      // they are used in some tracking algorithms this can be a large cost
     181             :      // in computing time. They are not written out but computed.
     182             :      
     183         118 :      ClassDef(AliITSgeomMatrix,2) // Matrix class used by AliITSgeom.
     184             : };
     185             : // Input and output function for standard C++ input/output.
     186             : ostream &operator<<(ostream &os,AliITSgeomMatrix &source);
     187             : istream &operator>>(istream &os,AliITSgeomMatrix &source);
     188             : 
     189             : #endif

Generated by: LCOV version 1.11