--- DarthVader/OrbitalInfo/src/OrbitalInfo.cpp 2007/11/26 08:01:13 1.10 +++ DarthVader/OrbitalInfo/src/OrbitalInfo.cpp 2015/03/03 10:58:10 1.18 @@ -1,56 +1,121 @@ #include -OrbitalInfo::OrbitalInfo(){ - absTime = 0; - OBT = 0; - pkt_num = 0; +using namespace std; - lon = 0.; - lat = 0.; - alt = 0.; - - Bnorth = 0.; - Beast = 0.; - Bdown = 0.; - Babs = 0.; - BB0 = 0.; - L = 0.; - - londip = -1000.; - latdip = -1000.; - altdip = -1000.; - - loncgm = -1000.; - latcgm = -1000.; - altcgm = -1000.; - - loncbm = -1000.; - latcbm = -1000.; - altcbm = -1000.; +ClassImp(OrbitalInfoTrkVar); +ClassImp(OrbitalInfo); - std::fill_n(cutoff, 20, 0.); +OrbitalInfoTrkVar::OrbitalInfoTrkVar(){ + this->Clear(); + // Eij = new TMatrixD(3,3); + // Sij = new TMatrixD(3,3); +} - // Quaternions - q0 = -1000.; - q1 = -1000.; - q2 = -1000.; - q3 = -1000.; +void OrbitalInfoTrkVar::Clear(Option_t *t){ + trkseqno = 0; + pitch = -1000.; + sunangle = -1000; + sunmagangle = -1000; + cutoff = -1000.; + Eij.Zero(); + Sij.Zero(); +} - // Euler angles (nadir reference frame) - theta = -1000.; - phi = -1000.; - etha = -1000.; +void OrbitalInfoTrkVar::Delete(Option_t *t){ + // if ( Eij ) Eij->Delete(); + // if ( Sij ) Sij->Delete(); +} -// // Euler angles (local field reference frame) -// thetamag = -1000.; -// phimag = -1000.; -// ethamag = -1000.; - mode = 0; -// std::fill_n(goodAttitude, 5, 0); +OrbitalInfo::OrbitalInfo(){ + OrbitalInfoTrk = 0; //ELENA + this->Clear(); +} + +OrbitalInfoTrkVar::OrbitalInfoTrkVar(const OrbitalInfoTrkVar &t){ + // + trkseqno = t.trkseqno; + // + pitch = t.pitch; + cutoff = t.cutoff; + sunangle=t.sunangle; + sunmagangle=t.sunmagangle; + // + Eij.ResizeTo(t.Eij); + Eij = t.Eij; + Sij.ResizeTo(t.Sij); + Sij = t.Sij; + // +}; + +void OrbitalInfo::Delete(Option_t *t){ //ELENA + // + // if ( Iij ) Iij->Delete(); + if(OrbitalInfoTrk){ + OrbitalInfoTrk->Delete(); //ELENA + delete OrbitalInfoTrk; //ELENA + } + // +}; //ELENA + +void OrbitalInfo::Set(){//ELENA + if ( !OrbitalInfoTrk ) OrbitalInfoTrk = new TClonesArray("OrbitalInfoTrkVar",2); //ELENA} + // if ( !Iij ) Iij = new TMatrixD(3,3); +}//ELENA +//-------------------------------------- +// +// +//-------------------------------------- +void OrbitalInfo::SetTrackArray(TClonesArray *track){//ELENA +// if(track && strcmp(track->GetClass()->GetName(),"OrbitalInfoTrkVar")==0){ + if(OrbitalInfoTrk)OrbitalInfoTrk->Clear("C"); + OrbitalInfoTrk = track; +// } +} + +OrbitalInfoTrkVar *OrbitalInfo::GetOrbitalInfoTrkVar(Int_t itrk){ + // + if(itrk >= ntrk()){ + printf(" OrbitalInfo ERROR: track related variables set %i does not exists! \n",itrk); + printf(" stored track related variables = %i \n",ntrk()); + return(NULL); + } + // + if(!OrbitalInfoTrk)return 0; //ELENA + TClonesArray &t = *(OrbitalInfoTrk); + OrbitalInfoTrkVar *orbtrack = (OrbitalInfoTrkVar*)t[itrk]; + return orbtrack; } +/** + * Retrieves the tof track matching the seqno-th tracker stored track. + * + */ +OrbitalInfoTrkVar *OrbitalInfo::GetOrbitalInfoStoredTrack(int seqno){ + if( ntrk()==0 ){ + printf("OrbitalInfo::GetOrbitalInfoStoredTrack(int) : requested tracker SeqNo %i but no OrbitalInforimeter tracks are stored\n",seqno); + return NULL; + }; + + OrbitalInfoTrkVar *c = 0; + Int_t it_tof=0; + + do { + c = GetOrbitalInfoTrkVar(it_tof); + it_tof++; + } while( c && seqno != c->trkseqno && it_tof < ntrk()); + + if(!c || seqno != c->trkseqno){ + c = 0; + if(seqno!=-1 ) printf("OrbitalInfo::GetOrbitalInfoStoredTrack(int) : requested tracker SeqNo %i does not match OrbitalInfo stored tracks\n",seqno); + }; + return c; + +} void OrbitalInfo::Clear(Option_t *t){ + // + if ( OrbitalInfoTrk ) OrbitalInfoTrk->Delete(); + // absTime = 0; OBT = 0; pkt_num = 0; @@ -58,27 +123,22 @@ lon = -1000.; lat = -1000.; alt = -1000.; + V.SetXYZ(-1000.,-1000.,-1000.); Bnorth = -1000.; Beast = -1000.; Bdown = -1000.; Babs = -1000.; + M = -1000; BB0 = -1000.; L = -1000.; - londip = -1000.; - latdip = -1000.; - altdip = -1000.; - - loncgm = -1000.; - latcgm = -1000.; - altcgm = -1000.; - - loncbm = -1000.; - latcbm = -1000.; - altcbm = -1000.; + londip = -1000.; + latdip = -1000.; - std::fill_n(cutoff, 20, 0.); + // std::fill_n(cutoff, 20, 0.); + // std::fill_n(cutoff, 2, 0.); + cutoffsvl = 0.; // Quaternions q0 = -1000.; @@ -91,12 +151,13 @@ phi = -1000.; etha = -1000.; - // Euler angles (local field reference frame) - // thetamag = -1000.; - // phimag = -1000.; - // ethamag = -1000.; + Iij.Zero(); mode = 0; + qkind = -1000; + errq = -1000; + azim = -1000; + rtqual =-1000; // std::fill_n(goodAttitude, 5, 0); } @@ -111,27 +172,21 @@ l2->lon = lon; l2->lat = lat; l2->alt = alt; + l2->V = V; l2->Bnorth = Bnorth; l2->Beast = Beast; l2->Bdown = Bdown; l2->Babs = Babs; + l2->M = M; l2->BB0 = BB0; l2->L = L; - l2->londip = londip; - l2->latdip = latdip; - l2->altdip = altdip; - - l2->loncgm = loncgm; - l2->latcgm = latcgm; - l2->altcgm = altcgm; - - l2->loncbm = loncbm; - l2->latcbm = latcbm; - l2->altcbm = altcbm; + l2->londip = londip; + l2->latdip = latdip; - memcpy(l2->cutoff, cutoff, sizeof(cutoff)); + l2->cutoffsvl = cutoffsvl; +// memcpy(l2->cutoffsvl, cutoffsvl, sizeof(cutoffsvl)); // Quaternions l2->q0 = q0; @@ -145,10 +200,10 @@ l2->etha = etha; l2->mode = mode; - // Euler angles (local field reference frame) -// l2->thetamag = thetamag; -// l2->phimag = phimag; -// l2->ethamag = ethamag; + l2->qkind = qkind; + l2->errq = errq; + l2->azim = azim; + l2->rtqual=rtqual; // memcpy(l2->goodAttitude, goodAttitude, sizeof(goodAttitude)); } @@ -161,27 +216,21 @@ lon = l2->lon; lat = l2->lat; alt = l2->alt; + V = l2->V; l2->Bnorth = Bnorth; l2->Beast = Beast; l2->Bdown = Bdown; l2->Babs = Babs; + M = l2->M; BB0 = l2->BB0; L = l2->L; - londip = l2->londip; - latdip = l2->latdip; - altdip = l2->altdip; - - loncgm = l2->loncgm; - latcgm = l2->latcgm; - altcgm = l2->altcgm; - - loncbm = l2->loncbm; - latcbm = l2->latcbm; - altcbm = l2->altcbm; + londip = l2->londip; + latdip = l2->latdip; - memcpy(cutoff, l2->cutoff, sizeof(l2->cutoff)); +// memcpy(cutoff, l2->cutoff, sizeof(l2->cutoff)); + l2->cutoffsvl = cutoffsvl; // Quaternions q0 = l2->q0; @@ -195,12 +244,11 @@ etha = l2->etha; mode = l2->mode; - // Euler angles (local field reference frame) -// thetamag = l2->thetamag; -// phimag = l2->phimag; -// ethamag = l2->ethamag; + qkind = l2->qkind; + errq = l2->errq; + azim = l2->azim; + rtqual=l2->rtqual; // memcpy(goodAttitude, l2->goodAttitude, sizeof(l2->goodAttitude)); } -ClassImp(OrbitalInfo)