#include #include #include #include #include #include ClassImp(OrientationInfo) using namespace std; OrientationInfo::OrientationInfo() : TObject(){ a = 360/(2*TMath::Pi()); Re = 6000000; } OrientationInfo::~OrientationInfo(){ } TMatrixD OrientationInfo::QuatoECI(Float_t q0, Float_t q1, Float_t q2, Float_t q3){ TMatrixD Pij(3,3); Pij(0,0) = pow(q0,2)+pow(q1,2)-pow(q2,2)-pow(q3,2); Pij(0,1) = /*2*(q1*q2+q0*q3);/*/ 2*(q1*q2-q0*q3); Pij(0,2) = /*2*(q1*q3-q0*q2);/*/ 2*(q1*q3+q0*q2); Pij(1,0) = /*2*(q1*q2-q0*q3);/*/ 2*(q1*q2+q0*q3); Pij(1,1) = pow(q0,2)-pow(q1,2)+pow(q2,2)-pow(q3,2); Pij(1,2) = /*2*(q2*q3+q0*q1);/*/ 2*(q2*q3-q0*q1); Pij(2,0) = /*2*(q1*q3+q0*q2);/*/ 2*(q1*q3-q0*q2); Pij(2,1) = /*2*(q2*q3-q0*q1);/*/ 2*(q2*q3+q0*q1); Pij(2,2) = pow(q0,2)-pow(q1,2)-pow(q2,2)+pow(q3,2); return Pij; } TMatrixD OrientationInfo::ECItoGreenwich(TMatrixD Aij, UInt_t t){ //t=1154304000+86400*365; TMatrixD Gij(3,3); Double_t omg = (7.292115e-5)*a; // Earth rotation velosity (Around polar axis); //Double_t t1 = 0; //if(t<=1158883200) t1 = 1127347200+229.2732; //absTime at 22/09/2005 + diference between Solar midnight and Greenwich sidereal midnight //if(t>1158883200&&t<=1190419200) t1 = 1158883200+172.3415;//absTime at 22/09/2006 + diference between Solar midnight and Greenwich sidereal midnight //if(t>=1190419200&&t<1222041600) t1 = 1190419200+115.39; //absTime at 22/09/2007 + diference between Solar midnight and Greenwich sidereal midnight //if(t>=1222041600) t1 = 1222041600 + 294.9361; //absTime at 22/09/2008 + diference between Solar midnight and Greenwich sidereal midnight //UInt_t Nd = (t-t1)/86400; //Int_t DifSuSt = Nd*236.55; Double_t d = (t-10957*86400-43200); //Number of day, passing from 01/01/2000 12:00:00 to t; d = d/86400; //d = t-da*86400+DifSuSt //cout<<"t = "<-0.1)){ //cout<<"lon = "<0&&x0<0) Sa=-Sa+90; //if (y0<0&&x0<0) Sa=Sa-90; //if (y0>0&&x0==0) Sa=90; //if (y0<0&&x0==0) Sa=-90; Gij(0,0) = cos(lon); Gij(0,1) = -sin(lon); Gij(0,2) = 0; Gij(1,0) = sin(lon); Gij(1,1) = cos(lon); Gij(1,2) = 0; Gij(2,0) = 0; Gij(2,1) = 0; Gij(2,2) = 1; //cout<<"First rotation"<-0.1)){ /* Hij=Gij*Aij; //TEST cout<<"First rotation"<>ret;*/ // } return Fij*(Gij*Aij); } TMatrixD OrientationInfo::PamelatoGEO(TMatrixD Aij, Double_t B1, Double_t B2, Double_t B3){ //TMatrixD Gij(3,3); TMatrixD Hij(3,1); TMatrixD Bij(3,1); Bij(0,0) = B1; Bij(1,0) = B2; Bij(2,0) = B3; //Double_t alfa = TMath::ASin(sqrt(1/((Aij(1,2))/Aij(0,2)+1))) * TMath::RadToDeg(); //Gij(0,0) = cos(alfa/a); //Gij(0,1) = -sin(alfa/a); //Gij(0,2) = 0; //Gij(1,0) = 0; //Gij(1,1) = 1; //Gij(1,2) = 0; //Gij(2,0) = sin(alfa/a); //Gij(2,1) = cos(alfa/a); //Gij(2,2) = 0; Hij=Aij*Bij; return Hij; //cout<<0.25-Aij(2,2)/(Aij(2,1)*Aij(2,0))<