Coding rule violations corrected.
[u/mrichter/AliRoot.git] / ITS / AliITSgeomMatrix.h
CommitLineData
df5240ea 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/* $Id: */
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
85f1e34a 14#include <TObject.h>
15
8253cd9a 16class AliITSgeomMatrix : public TObject {
df5240ea 17 public:
18 AliITSgeomMatrix(); // Default constructor
85f1e34a 19 // Standard constructor #1
6ba216a4 20 AliITSgeomMatrix(Int_t idt,const Int_t id[3],
df5240ea 21 const Double_t rot[3],const Double_t tran[3]);
85f1e34a 22 // Standard constructor #2
6ba216a4 23 AliITSgeomMatrix(Int_t idt,const Int_t id[3],
d962cab4 24 Double_t matrix[3][3],const Double_t tran[3]);
85f1e34a 25 // Standard constructor #3
26 AliITSgeomMatrix(const Double_t rotd[6]/*degrees GEANT angles*/,
6ba216a4 27 Int_t idt,const Int_t id[3],
df5240ea 28 const Double_t tran[3]);
85f1e34a 29 // Copy operator
df5240ea 30 AliITSgeomMatrix(const AliITSgeomMatrix &source);
85f1e34a 31 // Alignment operator
df5240ea 32 void operator=(const AliITSgeomMatrix &sourse); // copy
85f1e34a 33 virtual ~AliITSgeomMatrix(){}; // default constructor.
34 // Prints a line describing the output format of the function Print.
024a4246 35 void PrintComment(ostream *os) const;
85f1e34a 36 // Prints out the content of this class in ASCII format.
8253cd9a 37 void Print(ostream *os);
85f1e34a 38 // Prints out the content of this class in ASCII format but includes
39 // formating and strings that make it more humanly readable.
024a4246 40 void PrintTitles(ostream *os) const;
85f1e34a 41 // Reads in the content of this class in the format of Print
8253cd9a 42 void Read(istream *is);
df5240ea 43
85f1e34a 44 // Given the rotation angles [radians] it fills frot and computes
45 // the rotation matrix fm.
df5240ea 46 void SetAngles(const Double_t rot[3]){// [radians]
47 for(Int_t i=0;i<3;i++)frot[i] = rot[i];this->MatrixFromAngle();}
85f1e34a 48 // Sets the translation vector and computes fCylR and fCylPhi.
024a4246 49 void SetTranslation(const Double_t tran[3]);
85f1e34a 50 // sets the rotation matrix and computes the rotation angles [radians]
d962cab4 51 void SetMatrix(Double_t matrix[3][3]){ for(Int_t i=0;i<3;i++)
df5240ea 52 for(Int_t j=0;j<3;j++) fm[i][j]=matrix[i][j];this->AngleFromMatrix();}
85f1e34a 53 // Sets the detector index value
6ba216a4 54 void SetDetectorIndex(Int_t idt) {fDetectorIndex = idt;}
85f1e34a 55 // Sets the detector layer, ladder, detector (id) values.
df5240ea 56 void SetIndex(const Int_t id[3]){
57 for(Int_t i=0;i<3;i++) fid[i] = id[i];}
85f1e34a 58 // Returns the rotation angles [radians]
024a4246 59 void GetAngles(Double_t rot[3]) const {// [radians]
df5240ea 60 for(Int_t i=0;i<3;i++) rot[i] = frot[i];}
85f1e34a 61 // Returns the translation vector [cm]
024a4246 62 void GetTranslation(Double_t tran[3]) const {
df5240ea 63 for(Int_t i=0;i<3;i++) tran[i] = ftran[i];}
85f1e34a 64 // Returns the translation vector in cylindrical
65 // coordinates [cm,radians]
024a4246 66 void GetTranslationCylinderical (Double_t tran[3]) const {
d8cc8493 67 tran[0] = fCylR;
68 tran[1] = fCylPhi;
69 tran[2] = ftran[2];}
85f1e34a 70 // Returns the values of the rotation matrix
024a4246 71 void GetMatrix(Double_t matrix[3][3]) const {for(Int_t i=0;i<3;i++)
df5240ea 72 for(Int_t j=0;j<3;j++) matrix[i][j] = fm[i][j];}
85f1e34a 73 // Returns the detector index value.
74 Int_t GetDetectorIndex() const {return fDetectorIndex;}
75 // returns the modules index layer, ladder, detector
024a4246 76 void GetIndex(Int_t id[3]) const {for(Int_t i=0;i<3;i++) id[i] = fid[i];}
85f1e34a 77 // Sets the rotation matrix based on the 6 GEANT rotation
78 // angles [radian]
df5240ea 79 void MatrixFromSixAngles(const Double_t *ang);
85f1e34a 80 // Returns the 6 GEANT rotation angles [radians] from the
81 // existing rotation matrix.
df5240ea 82 void SixAnglesFromMatrix(Double_t *ang);
83
85f1e34a 84 // Given a position in Cartesian ALICE global coordinates [cm]
85 // returns the position in Cartesian detector/module local
86 //coordinates [cm]
024a4246 87 void GtoLPosition(const Double_t g[3],Double_t l[3]) const;
85f1e34a 88 // Given a position in Cartesian detector/module local coordinates [cm]
89 // returns the position in Cartesian ALICE global
90 //coordinates [cm]
024a4246 91 void LtoGPosition(const Double_t l[3],Double_t g[3]) const;
85f1e34a 92 // Given a momentum in Cartesian ALICE global coordinates
93 // returns the momentum in Cartesian detector/module local
94 //coordinates
024a4246 95 void GtoLMomentum(const Double_t g[3],Double_t l[3]) const;
85f1e34a 96 // Given a momentum in Cartesian detector/module local coordinates
97 // returns the momentum in Cartesian ALICE global coordinates
024a4246 98 void LtoGMomentum(const Double_t l[3],Double_t g[3]) const;
85f1e34a 99 // given a position error matrix in ALICE Cartesian global
100 // coordinates [cm] returns a position error matrix in detector/
101 // module local Cartesian local coordinates [cm]
024a4246 102 void GtoLPositionError(Double_t g[3][3],Double_t l[3][3]) const;
85f1e34a 103 // given a position error matrix in detector/module Cartesian local
104 // coordinates [cm] returns a position error matrix in ALICE
105 // Cartesian global coordinates [cm]
024a4246 106 void LtoGPositionError(Double_t l[3][3],Double_t g[3][3]) const;
df5240ea 107 // Tracking Related Routines
024a4246 108 void GtoLPositionTracking(const Double_t g[3],Double_t l[3]) const;
85f1e34a 109 // Given a position in Cartesian Tracking global coordinates [cm]
110 // returns the position in Cartesian detector/module local
111 // coordinates [cm]
024a4246 112 void LtoGPositionTracking(const Double_t l[3],Double_t g[3]) const;
85f1e34a 113 // Given a position in Cartesian detector/module local coordinates [cm]
114 // returns the position in Cartesian Tracking global
115 //coordinates [cm]
024a4246 116 void GtoLMomentumTracking(const Double_t g[3],Double_t l[3]) const;
85f1e34a 117 // Given a momentum in Cartesian detector/module local coordinates
118 // returns the momentum in Cartesian Tracking global coordinates
024a4246 119 void LtoGMomentumTracking(const Double_t l[3],Double_t g[3]) const;
85f1e34a 120 // given a position error matrix in Tracking Cartesian global
121 // coordinates [cm] returns a position error matrix in detector/
122 // module local Cartesian local coordinates [cm]
8d5bd3f9 123 void GtoLPositionErrorTracking(Double_t g[3][3],
024a4246 124 Double_t l[3][3]) const;
85f1e34a 125 // given a position error matrix in detector/module Cartesian local
126 // coordinates [cm] returns a position error matrix in Tracking
127 // Cartesian global coordinates [cm]
8d5bd3f9 128 void LtoGPositionErrorTracking(Double_t l[3][3],
024a4246 129 Double_t g[3][3]) const;
85f1e34a 130 // Computes the distance squared [cm^2] between a point t[3] and
131 // this module/detector
024a4246 132 Double_t Distance2(const Double_t t[3]) const {Double_t d=0.0,q;
df5240ea 133 for(Int_t i=0;i<3;i++){q = t[i]-ftran[i]; d += q*q;}
134 return d;}
135 private: // private functions
85f1e34a 136 // Given the rotation matrix fm it fills the rotation angles frot
df5240ea 137 void MatrixFromAngle();
85f1e34a 138 // Given the rotation angles frot it fills the rotation matrix fm
df5240ea 139 void AngleFromMatrix();
140 private: // Data members.
141 Int_t fDetectorIndex; // Detector type index (like fShapeIndex was)
142 Int_t fid[3]; // layer, ladder, detector numbers.
8253cd9a 143 Double_t frot[3]; //! vector of rotations about x,y,z [radians].
df5240ea 144 Double_t ftran[3]; // Translation vector of module x,y,z.
85f1e34a 145 Double_t fCylR,fCylPhi; //! Translation vector in Cylindrical coord.
df5240ea 146 Double_t fm[3][3]; // Rotation matrix based on frot.
147
d8cc8493 148 // Note, fCylR and fCylPhi are added as data members because it costs
149 // about a factor of 10 to compute them over looking them up. Since
150 // they are used in some tracking algorithms this can be a large cost
151 // in computing time. They are not written out but computed.
152
df5240ea 153 ClassDef(AliITSgeomMatrix,1) // Matrix class used by AliITSgeom.
154};
155// Input and output function for standard C++ input/output.
156ostream &operator<<(ostream &os,AliITSgeomMatrix &source);
157istream &operator>>(istream &os,AliITSgeomMatrix &source);
158
159#endif