]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSgeomMatrix.cxx
o add Reset function to CalPad and CalROC o Add functionality to AliTPCdataQA - Reset...
[u/mrichter/AliRoot.git] / ITS / AliITSgeomMatrix.cxx
index 4b23c326459b2259d7d3cac2e09284c0c02dc077..d4fbdef124ce8edbaddedc1c042684ae09058df8 100644 (file)
@@ -42,8 +42,13 @@ $Id$
 #include <TBRIK.h>
 #include <TXTRU.h>
 
+#include "AliLog.h"
 #include "AliITSgeomMatrix.h"
 
+using std::endl;
+using std::cout;
+using std::ios;
+using std::setprecision;
 ClassImp(AliITSgeomMatrix)
 //----------------------------------------------------------------------
 AliITSgeomMatrix::AliITSgeomMatrix():
@@ -252,19 +257,20 @@ void AliITSgeomMatrix::SixAnglesFromMatrix(Double_t *ang)const{
     // Return:
     //   noting
     Double_t si,c=180./TMath::Pi();
+    const Double_t epsil=1.e-15;
 
     ang[1] = TMath::ATan2(fm[0][1],fm[0][0]);
-    if(TMath::Cos(ang[1])!=0.0) si = fm[0][0]/TMath::Cos(ang[1]);
+    if( !(TMath::AreEqualAbs(TMath::Cos(ang[1]),0.,epsil))) si = fm[0][0]/TMath::Cos(ang[1]);
     else si = fm[0][1]/TMath::Sin(ang[1]);
     ang[0] = TMath::ATan2(si,fm[0][2]);
 
     ang[3] = TMath::ATan2(fm[1][1],fm[1][0]);
-    if(TMath::Cos(ang[3])!=0.0) si = fm[1][0]/TMath::Cos(ang[3]);
+    if(!(TMath::AreEqualAbs(TMath::Cos(ang[3]),0.,epsil))) si = fm[1][0]/TMath::Cos(ang[3]);
     else si = fm[1][1]/TMath::Sin(ang[3]);
     ang[2] = TMath::ATan2(si,fm[1][2]);
 
     ang[5] = TMath::ATan2(fm[2][1],fm[2][0]);
-    if(TMath::Cos(ang[5])!=0.0) si = fm[2][0]/TMath::Cos(ang[5]);
+    if(!(TMath::AreEqualAbs(TMath::Cos(ang[5]),0.,epsil))) si = fm[2][0]/TMath::Cos(ang[5]);
     else si = fm[2][1]/TMath::Sin(ang[5]);
     ang[4] = TMath::ATan2(si,fm[2][2]);
 
@@ -284,39 +290,40 @@ void AliITSgeomMatrix::MatrixFromSixAngles(const Double_t *ang){
     //   noting
     Int_t    i,j;
     Double_t si,lr[9],c=TMath::Pi()/180.;
+    const Double_t epsil = 1.e-15;
 
     si    = TMath::Sin(c*ang[0]);
-    if(ang[0]== 90.0)                 si = +1.0;
-    if(ang[0]==270.0)                 si = -1.0;
-    if(ang[0]==  0.0||ang[0]==180.) si =  0.0;
+    if(TMath::AreEqualAbs(ang[0],90.,epsil)) si = +1.0;
+    if(TMath::AreEqualAbs(ang[0],270.,epsil)) si = -1.0;
+    if(TMath::AreEqualAbs(ang[0],0.,epsil) ||TMath::AreEqualAbs(ang[0],180.,epsil)) si =  0.0;
     lr[0] = si * TMath::Cos(c*ang[1]);
     lr[1] = si * TMath::Sin(c*ang[1]);
     lr[2] = TMath::Cos(c*ang[0]);
-    if(ang[0]== 90.0||ang[0]==270.) lr[2] =  0.0;
-    if(ang[0]== 0.0)                  lr[2] = +1.0;
-    if(ang[0]==180.0)                 lr[2] = -1.0;
+    if(TMath::AreEqualAbs(ang[0],90.,epsil)||TMath::AreEqualAbs(ang[0],270.,epsil)) lr[2] =  0.0;
+    if(TMath::AreEqualAbs(ang[0],0.,epsil))                  lr[2] = +1.0;
+    if(TMath::AreEqualAbs(ang[0],180.,epsil))                 lr[2] = -1.0;
 //
     si    =  TMath::Sin(c*ang[2]);
-    if(ang[2]== 90.0)                 si = +1.0; 
-    if(ang[2]==270.0)                 si = -1.0;
-    if(ang[2]==  0.0||ang[2]==180.) si =  0.0;
+    if(TMath::AreEqualAbs(ang[2],90.,epsil))                 si = +1.0; 
+    if(TMath::AreEqualAbs(ang[2],270.,epsil))                 si = -1.0;
+    if(TMath::AreEqualAbs(ang[2],0.,epsil) || TMath::AreEqualAbs(ang[2],180.,epsil)) si =  0.0;
     lr[3] = si * TMath::Cos(c*ang[3]);
     lr[4] = si * TMath::Sin(c*ang[3]);
     lr[5] = TMath::Cos(c*ang[2]);
-    if(ang[2]== 90.0||ang[2]==270.) lr[5] =  0.0;
-    if(ang[2]==  0.0)                 lr[5] = +1.0;
-    if(ang[2]==180.0)                 lr[5] = -1.0;
+    if(TMath::AreEqualAbs(ang[2],90.,epsil) || TMath::AreEqualAbs(ang[2],270.,epsil)) lr[5] =  0.0;
+    if(TMath::AreEqualAbs(ang[2],0.,epsil))                 lr[5] = +1.0;
+    if(TMath::AreEqualAbs(ang[2],180.,epsil))                 lr[5] = -1.0;
 //
     si    = TMath::Sin(c*ang[4]);
-    if(ang[4]== 90.0)                 si = +1.0;
-    if(ang[4]==270.0)                 si = -1.0;
-    if(ang[4]==  0.0||ang[4]==180.) si =  0.0;
+    if(TMath::AreEqualAbs(ang[4],90.,epsil))                 si = +1.0;
+    if(TMath::AreEqualAbs(ang[4],270.0,epsil))                 si = -1.0;
+    if(TMath::AreEqualAbs(ang[4],0.,epsil)|| TMath::AreEqualAbs(ang[4],180.,epsil)) si =  0.0;
     lr[6] = si * TMath::Cos(c*ang[5]);
     lr[7] = si * TMath::Sin(c*ang[5]);
     lr[8] = TMath::Cos(c*ang[4]);
-    if(ang[4]== 90.0||ang[4]==270.0) lr[8] =  0.0;
-    if(ang[4]==  0.0)                  lr[8] = +1.0;
-    if(ang[4]==180.0)                  lr[8] = -1.0;
+    if(TMath::AreEqualAbs(ang[4],90.0,epsil) ||TMath::AreEqualAbs(ang[4],270.,epsil)) lr[8] =  0.0;
+    if(TMath::AreEqualAbs(ang[4],0.,epsil))                  lr[8] = +1.0;
+    if(TMath::AreEqualAbs(ang[4],180.0,epsil))                  lr[8] = -1.0;
     // Normalize these elements and fill matrix fm.
     for(i=0;i<3;i++){// reuse si.
        si = 0.0;
@@ -913,7 +920,7 @@ void AliITSgeomMatrix::Read(istream *is){
     // Return:
     //    none.
     Int_t i,j;
-
+    const Int_t kMxVal=10000;
     *is >> fDetectorIndex;
     for(i=0;i<3;i++) *is >> fid[i];
 //    for(i=0;i<3;i++) *is >> frot[i]; // Redundant with fm[][].
@@ -922,6 +929,10 @@ void AliITSgeomMatrix::Read(istream *is){
     while(is->peek()==' ')is->get(); // skip white spaces
     if(isprint(is->peek())){ // old format did not have path.
        *is >> j; // string length
+       if(j>kMxVal || j<0){
+         AliError(Form("j> %d",kMxVal));
+         return;
+       }
        fPath.Resize(j);
        for(i=0;i<j;i++) {*is >> fPath[i];}
     } // end if
@@ -1051,19 +1062,19 @@ TNode* AliITSgeomMatrix::CreateNode(const Char_t *nodeName,
         Int_t i,j;
         const Float_t kScale=0.5,kLw=0.2;
         Float_t xchar[13][2]={
-            {0.5*kLw,1.},{0.,0.5*kLw},{0.5-0.5*kLw,0.5},
-            {0.,0.5*kLw},{0.5*kLw,0.},{0.5,0.5-0.5*kLw},
-            {1-0.5*kLw,0.},{1.,0.5*kLw},{0.5+0.5*kLw,0.5},
-            {1.,1.-0.5*kLw},{1.-0.5*kLw,1.},{0.5,0.5+0.5*kLw},
-            {0.5*kLw,1.}};
+         {static_cast<Float_t>(0.5*kLw),1.},{0.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5-0.5*kLw),0.5},
+         {0.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),0.},{0.5,static_cast<Float_t>(0.5-0.5*kLw)},
+         {static_cast<Float_t>(1-0.5*kLw),0.},{1.,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5+0.5*kLw),0.5},
+         {1.,static_cast<Float_t>(1.-0.5*kLw)},{static_cast<Float_t>(1.-0.5*kLw),1.},{0.5,static_cast<Float_t>(0.5+0.5*kLw)},
+         {static_cast<Float_t>(0.5*kLw),1.}};
         Float_t ychar[10][2]={
-            {.5-0.5*kLw,0.},{.5+0.5*kLw,0.},{.5+0.5*kLw,0.5-0.5*kLw},
-            {1.,1.-0.5*kLw},{1.-0.5*kLw,1.},{0.5+0.5*kLw,0.5},
-            {0.5*kLw,1.}   ,{0.,1-0.5*kLw} ,{0.5-0.5*kLw,0.5},
-            {.5-0.5*kLw,0.}};
+         {static_cast<Float_t>(.5-0.5*kLw),0.},{static_cast<Float_t>(.5+0.5*kLw),0.},{static_cast<Float_t>(.5+0.5*kLw),static_cast<Float_t>(0.5-0.5*kLw)},
+         {1.,static_cast<Float_t>(1.-0.5*kLw)},{static_cast<Float_t>(1.-0.5*kLw),1.},{static_cast<Float_t>(0.5+0.5*kLw),0.5},
+         {static_cast<Float_t>(0.5*kLw),1.}   ,{0.,static_cast<Float_t>(1-0.5*kLw)} ,{static_cast<Float_t>(0.5-0.5*kLw),0.5},
+         {static_cast<Float_t>(.5-0.5*kLw),0.}};
         Float_t zchar[11][2]={
-            {0.,1.},{0,1.-kLw},{1.-kLw,1.-kLw},{0.,kLw}   ,{0.,0.},
-            {1.,0.},{1.,kLw}  ,{kLw,kLw}      ,{1.,1.-kLw},{1.,1.},
+         {0.,1.},{0,static_cast<Float_t>(1.-kLw)},{static_cast<Float_t>(1.-kLw),static_cast<Float_t>(1.-kLw)},{0.,kLw}   ,{0.,0.},
+         {1.,0.},{1.,kLw}  ,{kLw,kLw}      ,{1.,static_cast<Float_t>(1.-kLw)},{1.,1.},
             {0.,1.}};
         for(i=0;i<13;i++)for(j=0;j<2;j++){
             if(i<13) xchar[i][j] = kScale*xchar[i][j];
@@ -1080,17 +1091,17 @@ TNode* AliITSgeomMatrix::CreateNode(const Char_t *nodeName,
         for(i=0;i<10;i++) axiszl->DefineVertex(i,zchar[i][0],zchar[i][1]);
         axiszl->DefineSection(0,-0.5*kLw);axiszl->DefineSection(1,0.5*kLw);
         Float_t lxy[13][2]={
-            {-0.5*kLw,-0.5*kLw},{0.8,-0.5*kLw},{0.8,-0.1},{1.0,0.0},
-            {0.8,0.1},{0.8,0.5*kLw},{0.5*kLw,0.5*kLw},{0.5*kLw,0.8},
-            {0.1,0.8},{0.0,1.0},{-0.1,0.8},{-0.5*kLw,0.8},
-            {-0.5*kLw,-0.5*kLw}};
+         {static_cast<Float_t>(-0.5*kLw),static_cast<Float_t>(-0.5*kLw)},{0.8,static_cast<Float_t>(-0.5*kLw)},{0.8,-0.1},{1.0,0.0},
+         {0.8,0.1},{0.8,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),0.8},
+         {0.1,0.8},{0.0,1.0},{-0.1,0.8},{static_cast<Float_t>(-0.5*kLw),0.8},
+         {static_cast<Float_t>(-0.5*kLw),static_cast<Float_t>(-0.5*kLw)}};
         TXTRU *axisxy = new TXTRU("axisxy","axisxy","text",13,2);
         for(i=0;i<13;i++) axisxy->DefineVertex(i,lxy[i][0],lxy[i][1]);
         axisxy->DefineSection(0,-0.5*kLw);axisxy->DefineSection(1,0.5*kLw);
         Float_t lz[8][2]={
-            {0.5*kLw,-0.5*kLw},{0.8,-0.5*kLw},{0.8,-0.1},{1.0,0.0},
-            {0.8,0.1},{0.8,0.5*kLw},{0.5*kLw,0.5*kLw},
-            {0.5*kLw,-0.5*kLw}};
+         {static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(-0.5*kLw)},{0.8,static_cast<Float_t>(-0.5*kLw)},{0.8,-0.1},{1.0,0.0},
+         {0.8,0.1},{0.8,static_cast<Float_t>(0.5*kLw)},{static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(0.5*kLw)},
+         {static_cast<Float_t>(0.5*kLw),static_cast<Float_t>(-0.5*kLw)}};
         TXTRU *axisz = new TXTRU("axisz","axisz","text",8,2);
         for(i=0;i<8;i++) axisz->DefineVertex(i,lz[i][0],lz[i][1]);
         axisz->DefineSection(0,-0.5*kLw);axisz->DefineSection(1,0.5*kLw);