X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSgeomMatrix.cxx;h=f1264fefeb8bcffb3e2bc78888cf6493c09f872a;hb=535d15f506e88160f5c6e27623583932dd8a44ef;hp=0f633204a5dfb7c0bfc61ac197a7365153ca33aa;hpb=012f0f4c0b9d68089c6b78ac5253be4e074de515;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSgeomMatrix.cxx b/ITS/AliITSgeomMatrix.cxx index 0f633204a5d..f1264fefeb8 100644 --- a/ITS/AliITSgeomMatrix.cxx +++ b/ITS/AliITSgeomMatrix.cxx @@ -42,8 +42,13 @@ $Id$ #include #include +#include "AliLog.h" #include "AliITSgeomMatrix.h" +using std::endl; +using std::cout; +using std::ios; +using std::setprecision; ClassImp(AliITSgeomMatrix) //---------------------------------------------------------------------- AliITSgeomMatrix::AliITSgeomMatrix(): @@ -189,7 +194,7 @@ fPath(){ // Path in geometry to this moduel }// end for i fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); this->MatrixFromAngle(); } //---------------------------------------------------------------------- @@ -238,7 +243,7 @@ fPath(){ // Path in geometry to this module }// end for i fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); this->AngleFromMatrix(); } //---------------------------------------------------------------------- @@ -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; @@ -367,7 +374,7 @@ fPath(){ // Path in geometry to this module }// end for i fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); this->MatrixFromSixAngles(rotd); } //---------------------------------------------------------------------- @@ -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,13 +929,17 @@ 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> fPath[i];} } // end if AngleFromMatrix(); // compute angles frot[]. fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); return; } //______________________________________________________________________ @@ -946,7 +957,7 @@ void AliITSgeomMatrix::Streamer(TBuffer &R__b){ fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); this->AngleFromMatrix(); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); } else { AliITSgeomMatrix::Class()->WriteBuffer(R__b, this); } // end if @@ -963,7 +974,7 @@ void AliITSgeomMatrix::SetTranslation(const Double_t tran[3]){ for(Int_t i=0;i<3;i++) ftran[i] = tran[i]; fCylR = TMath::Sqrt(ftran[0]*ftran[0]+ftran[1]*ftran[1]); fCylPhi = TMath::ATan2(ftran[1],ftran[0]); - if(fCylPhi<0.0) fCylPhi += TMath::Pi(); + if(fCylPhi<0.0) fCylPhi += 2.*TMath::Pi(); } //---------------------------------------------------------------------- TPolyLine3D* AliITSgeomMatrix::CreateLocalAxis() const {