diff --git a/.github/workflows/deploy-discos.yml b/.github/workflows/deploy-discos.yml new file mode 100644 index 0000000000000000000000000000000000000000..86de67074a56d176f7a6e0a2d40e8dc87938f674 --- /dev/null +++ b/.github/workflows/deploy-discos.yml @@ -0,0 +1,85 @@ +name: DISCOS deployment and build + +on: + push: + pull_request: + +jobs: + wait-for-download: + name: Wait for any pending download + runs-on: ubuntu-latest + concurrency: + group: download + cancel-in-progress: false + steps: + - name: Go on with deployment + run: true + deploy-discos: + name: Deploy DISCOS + runs-on: ubuntu-latest + needs: wait-for-download + env: + REPOSITORY_TOKEN: "${{ secrets.DEPENDENCIES_TOKEN }}" + GH_TOKEN: "${{ secrets.GH_WORKFLOWS_TOKEN }}" + GOOGLE_DRIVE_TOKEN: "${{ secrets.GOOGLE_DRIVE_TOKEN }}" + PROVISIONED_VM_GDRIVE_ID: "${{ secrets.PROVISIONED_VM_GDRIVE_ID }}" + PROVISIONED_ARCHIVE_GDRIVE_ID: "${{ secrets.PROVISIONED_ARCHIVE_GDRIVE_ID }}" + strategy: + fail-fast: false + matrix: + station: ['SRT', 'Medicina', 'Noto'] + steps: + - name: Free up space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + - name: Install Vagrant and VirtualBox + run: | + wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list + sudo apt update && sudo apt install vagrant + sudo apt install virtualbox + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3' + check-latest: true + - name: Clone the deployment repository + uses: actions/checkout@v4 + with: + repository: 'discos/deployment' + - name: Install deployment package and dependencies + run: | + python -m pip install -r requirements.txt + pip install . + - name: Retrieve the VM from cache + uses: actions/cache/restore@v4 + with: + key: discos-manager-vm + path: | + /home/runner/discos_manager.ova + /home/runner/vagrant.tar.gz + - name: Install the virtual machine + run: | + vboxmanage import discos_manager.ova --vsys 0 --options keepallmacs + rm discos_manager.ova + tar -xzvf vagrant.tar.gz + working-directory: /home/runner + - name: Add the virtual machine to Vagrant + run: | + sed -i "s/$(cat id)/$(vboxmanage list vms | grep 'discos_manager' | grep -oP '(?<=\{)[0-9a-fA-F-]+(?=\})')/" action_provision + sed -i "s/$(cat id)/$(vboxmanage list vms | grep 'discos_manager' | grep -oP '(?<=\{)[0-9a-fA-F-]+(?=\})')/" id + working-directory: /home/runner/.deployment/.vagrant/machines/manager/virtualbox/ + - name: Set the branch name + run: | + if [ "${{ github.event_name }}" == "push" ]; then + echo "BRANCH_NAME=${{ github.ref_name }}" >> $GITHUB_ENV + elif [ "${{ github.event_name }}" == "pull_request" ]; then + echo "BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + fi + - name: Deploy DISCOS + run: | + discos-deploy manager:development --deploy-only -s ${{ matrix.station }} -b ${{ env.BRANCH_NAME }} + - name: Shutdown the virtual machine + run: | + discos-vms stop diff --git a/.gitignore b/.gitignore index 12abadff624dd837c7fdcec920cf522739ad50f8..d7349f20ef3afa3086806ef0adbd10a71a4bba1e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,11 +6,13 @@ object/ *~ *.swp *.pyc +.project* # Ignore the SliLibrary directory Common/Libraries/SlaLibrary # Files generated by the building process +Common/Interfaces/build.log Common/Clients/CaltoolClient/src/calibrationtool_ui.py Common/Clients/CaltoolClient/src/calibrationtool_ui.pye Common/Errors/AntennaErrors/idl/AntennaErrors.idl @@ -26,12 +28,16 @@ Common/Errors/ParserErrors/idl/ParserErrors.idl Common/Errors/ReceiversErrors/idl/DerotatorErrors.idl Common/Errors/ReceiversErrors/idl/ReceiversErrors.idl Common/Errors/XBackendErrors/idl/XBackendsErrors.idl +Common/Errors/ActiveSurfaceErrors/idl/ASErrors.idl +Common/Interfaces/ActiveSurfaceInterface/idl/ActiveSurfaceCommon.idl +Common/Interfaces/AntennaInterface/idl/SolarSystemBody.idl Common/Interfaces/AntennaInterface/idl/AntennaBoss.idl Common/Interfaces/AntennaInterface/idl/Moon.idl Common/Interfaces/AntennaInterface/idl/Mount.idl Common/Interfaces/AntennaInterface/idl/OTF.idl Common/Interfaces/AntennaInterface/idl/Observatory.idl Common/Interfaces/AntennaInterface/idl/SkySource.idl +Common/Interfaces/AntennaInterface/idl/SolarSystemBody.idl Common/Interfaces/ActiveSurfaceInterface/idl/ActiveSurfaceCommon.idl Common/Interfaces/CommonInterface/idl/AntennaDefinitions.idl Common/Interfaces/CommonInterface/idl/BackendsDefinitions.idl @@ -50,4 +56,7 @@ SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceGUI.h SRT/Clients/SRTActiveSurfaceGUIClient/src/moc_SRTActiveSurfaceCore.cpp SRT/Clients/SRTActiveSurfaceGUIClient/src/moc_SRTActiveSurfaceGUIui.cpp SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceBoss.idl +Common/Libraries/build.log +SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceCommon.idl +.DS_Store .vscode/settings.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd35d937c3d12206edd01ad230813e17e835572..78a63fce32e7e5d540be382f7c45162be4bdd10d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -104,9 +104,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/ issue #619 - Active surface components are now capable of changing look-up tables on the fly via the `asSetLUT` command issue #806 Added support for the C-band receiver at the SRT project #2 - Completed integration of new SRT Minor Servos + issue #2 - Completed integration of solar system planets, sun and moon tracking. Other bodies will be added in the future. ## Fixed ## Changed issue #689 - The dataset provided by weather station has been enlarged by the wind direction. The correctponding RAL 'wx' command will noe provided wind direction readout, as well issue #621 - The maximum number of chars of the schedule file name is now 37 (extension included). This is done for fits file and archive issue with the lenght of the schedule name. issue #853 - The setSection command can now accept a wildcard (*) as section identifier. This will allow to configure all backend sections with a single command + issue #895 - FitZilla version 1.23 released, the rest frequency is also added in the header of the Section table \ No newline at end of file diff --git a/Common/Clients/AntennaBossTextClient/include/UpdateGenerator.i b/Common/Clients/AntennaBossTextClient/include/UpdateGenerator.i index 395214319075a07cf1c799ef306da0de3e16bbae..c4007114f66db1d960ac90b712bd3b6750760a1f 100644 --- a/Common/Clients/AntennaBossTextClient/include/UpdateGenerator.i +++ b/Common/Clients/AntennaBossTextClient/include/UpdateGenerator.i @@ -162,6 +162,49 @@ void updateGenerator(maci::SimpleClient& client,Antenna::TGeneratorType& lastGen extraLabel6->Refresh(); break; } + case Antenna::ANT_SOLARSYSTEMBODY : { + IRA::CString str1,str2; + + Antenna::SolarSystemBodyAttributes_var att; + Antenna::SolarSystemBody_var ssbody; + try { + ssbody=Antenna::SolarSystemBody::_narrow(lastGenerator); + if (!CORBA::is_nil(ssbody)) { + ssbody->getAttributes(att); + } + } + catch (...) { + _EXCPT(ClientErrors::UnknownExImpl,impl,"::Main()"); + _IRA_LOGGUARD_LOG_EXCEPTION(guard,impl,LM_ERROR); + return; + } + tmpString=(const char*)att->sourceID; + outString="Source name : "+tmpString; + extraLabel1->setValue(outString); + extraLabel1->Refresh(); + IRA::CIRATools::radToHourAngle(att->rightAscension,str1); + IRA::CIRATools::radToSexagesimalAngle(att->declination,str2); + outString="Apparent Eq. : "+str1+"/"+str2+"/"; + str1.Format("%.5lf",att->julianEpoch); + outString+=str1; + extraLabel2->setValue(outString); + extraLabel2->Refresh(); + IRA::CIRATools::radToAngle(att->gLongitude,str1); + IRA::CIRATools::radToAngle(att->gLatitude,str2); + outString="Galactic : "+str1+"/"+str2; + extraLabel3->setValue(outString); + extraLabel4->Refresh(); + IRA::CIRATools::radToAngle(att->azimuth,str1); + IRA::CIRATools::radToAngle(att->elevation,str2); + outString="Horizontal : "+str1+"/"+str2; + extraLabel4->setValue(outString); + extraLabel4->Refresh(); + extraLabel5->setValue(""); + extraLabel5->Refresh(); + extraLabel6->setValue(""); + extraLabel6->Refresh(); + break; + } case Antenna::ANT_OTF: { Antenna::OTFAttributes_var att; Antenna::OTF_var otf; @@ -175,7 +218,7 @@ void updateGenerator(maci::SimpleClient& client,Antenna::TGeneratorType& lastGen catch (...) { _EXCPT(ClientErrors::UnknownExImpl,impl,"::Main()"); _IRA_LOGGUARD_LOG_EXCEPTION(guard,impl,LM_ERROR); - return; + return; } IRA::CIRATools::radToAngle(att->startLon,str1); IRA::CIRATools::radToAngle(att->startLat,str2); diff --git a/Common/Clients/AntennaBossTextClient/src/AntennaBossTextClient.cpp b/Common/Clients/AntennaBossTextClient/src/AntennaBossTextClient.cpp index 616ab7337e6af60f2a9142e3ba9f221d8d355b76..cd1820bbd02a88efc53e8c4eff16867384ca3a7e 100644 --- a/Common/Clients/AntennaBossTextClient/src/AntennaBossTextClient.cpp +++ b/Common/Clients/AntennaBossTextClient/src/AntennaBossTextClient.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -396,7 +397,7 @@ int main(int argc, char *argv[]) { generatorType_box->setStatusLook(Antenna::ANT_SIDEREAL); generatorType_box->setStatusLook(Antenna::ANT_MOON); generatorType_box->setStatusLook(Antenna::ANT_SUN); - generatorType_box->setStatusLook(Antenna::ANT_SOLARSYTEMBODY); + generatorType_box->setStatusLook(Antenna::ANT_SOLARSYSTEMBODY); generatorType_box->setStatusLook(Antenna::ANT_SATELLITE); generatorType_box->setStatusLook(Antenna::ANT_OTF); @@ -434,6 +435,8 @@ int main(int argc, char *argv[]) { _TW_SET_COMPONENT(output_label,0,WINDOW_HEIGHT-(OUTPUT_FIELD_HEIGHT+1),WINDOW_WIDTH-1,OUTPUT_FIELD_HEIGHT,OUTPUT_FIELD_COLOR_PAIR,OUTPUT_FIELD_STYLE,NULL); #endif + + // Monitors ACS_LOG(LM_FULL_INFO,MODULE_NAME"::Main()",(LM_INFO,MODULE_NAME"::MONITORS_INSTALLATION")); /** Add all required monitor installation here */ diff --git a/Common/Clients/AntennaBossTextClient/src/Makefile b/Common/Clients/AntennaBossTextClient/src/Makefile index 61ae884726d50d709126abf520cb9bd80309da97..ec223f7597ec8cc6e6d408598ed85019303f3adb 100644 --- a/Common/Clients/AntennaBossTextClient/src/Makefile +++ b/Common/Clients/AntennaBossTextClient/src/Makefile @@ -66,7 +66,7 @@ EXECUTABLES_L = _tui_AntennaBossTextClient_OBJECTS = AntennaBossTextClient _tui_AntennaBossTextClient_LIBS = AntennaBossStubs IRALibrary \ ManagmentDefinitionsStubs TextWindowLibrary ClientErrors ComponentErrors ManagementErrors \ - AntennaErrors AntennaDefinitionsStubs EphemGeneratorStubs SkySourceStubs OTFStubs MoonStubs acsnc + AntennaErrors AntennaDefinitionsStubs EphemGeneratorStubs SkySourceStubs OTFStubs MoonStubs SolarSystemBodyStubs acsnc SCRIPTS = antennaBossTui diff --git a/Common/Interfaces/AntennaInterface/idl/SolarSystemBody.midl b/Common/Interfaces/AntennaInterface/idl/SolarSystemBody.midl new file mode 100644 index 0000000000000000000000000000000000000000..d0d856e20eea71d485b1bca00bf4df5165c4f79f --- /dev/null +++ b/Common/Interfaces/AntennaInterface/idl/SolarSystemBody.midl @@ -0,0 +1,93 @@ +/* ************************************************************************************/ +/* INAF DISCOS +/* */ +/* $Id: SolarSystemBody.midl,v 1.3 2010-09-24 15:42:03 a.orlati Exp $ */ +/* */ +/* This code is under GNU General Public Licence (GPL) */ +/* */ +/* Who when What */ +/* S.Poppi, S.Righini 09/May/2017 created */ + +#ifndef _SSB_IDL +#define _SSB_IDL + +#include "baci.idl" +#include +#include + +#pragma prefix "alma" + +module Antenna { + /* + * Here we have defined a struct "SolarSystemBody structure" that contains all the properties of the component. + * Since EphemGenerator defines all the properties of the component and we have inherited the SolarSystemBody component from EphemGenerator. + * This Interface will be mapped into the ACS dynamic component so it can't expose properties in their classic definations. + * Component attributes are read via their accesor method (getAttributes()). * +*/ + DEFATTRIBUTES (SolarSystemBodyAttributes) + double angularSize; /** apparent angular diameter of the body degrees**/ + double distance; /**body distance AU **/ + double radialVelocity; /**body radial velocity km/s**/ + Antenna::TReferenceFrame vradFrame; /** reference frame of the radial velocity */ + Antenna::TVradDefinition vradDefinition; /** definition of the radial velocity */ + + ENDDEFATTRIBUTES; + + + interface SolarSystemBody: EphemGenerator { + /*This is the Interface of the component Moon and this is inherited from EphemGenerator + * all the properties metioned below are inherited by the interface SolarSystemBody + * # input Source ID:SolarSystemBody, the name of the source + * # double right Ascension of the body in radians + * # double decination of the body in radians + * # double azimuth in radians + * # double elevation in radians + * # Julian Epoch the current time as a julian epoch + * # double userAzimuthOffset in radians + * # double userElevationOffset in radians + * # double userRightAscensionOffset in radians + * # double userDeclinationOffset in radians + * # double parallacticAngle in radians + */ + void getAttributes(out SolarSystemBodyAttributes att); /*this method is the attribute accessor*/ + + /** + * This method is only for control software internal use. It used, given a timestamp, to retrive the apparent + * J2000 Equatorial coordiantes coordinates in one shot. + * @throw CORBA::SystemException + * @param timestamp this parameter is used to pass the exact time the caller wants to know the topocentric coordinates. + * @param ra that's the returned value in radians of the right ascension for the requested time. + * @param re that's the returned value in radians of the declination for the requested time. + */ + void getJ2000EquatorialCoordinate(in ACS::Time timestamp, out double ra,out double dec); + + + /** + @param bodyName of the target + + */ + + void setBodyName(in string bodyName) raises (AntennaErrors::AntennaErrorsEx); + + /** + * This method is only for control software internal use. It used, given a timestamp, to retrive the distance of the body + * @param timestamp this parameter is used to pass the exact time the caller wants to know the topocentric coordinates. + * @param distance body distance in AU. + + * J2000 Equatorial coordiantes coordinates in one shot. + + */ + void getDistance(in ACS::Time timestamp, out double distance); + + + }; + +}; + + + + + + +#endif + diff --git a/Common/Interfaces/AntennaInterface/src/Makefile b/Common/Interfaces/AntennaInterface/src/Makefile index e486056f0170f9b210b340833d6588823763d044..3115b17e54bdf26a01fc38204939c8769eab0c34 100644 --- a/Common/Interfaces/AntennaInterface/src/Makefile +++ b/Common/Interfaces/AntennaInterface/src/Makefile @@ -30,7 +30,7 @@ CDB_SCHEMAS = Mount Station PointingModel # IDL Files and flags # IDL_FILES = Observatory Mount PointingModel EphemGeneratorMACRO_include \ -EphemGenerator SkySource OTF Refraction AntennaBoss Moon +EphemGenerator SkySource OTF Refraction AntennaBoss Moon SolarSystemBody IDL_TAO_FLAGS = USER_IDL = ObservatoryStubs_LIBS = baciStubs maciStubs AntennaDefinitionsStubs ComponentErrorsStubs @@ -48,7 +48,7 @@ AntennaBossStubs_LIBS = baciStubs maciStubs ManagmentDefinitionsStubs Management EphemGeneratorStubs ComponentErrorsStubs AntennaErrorsStubs \ AntennaDefinitionsStubs MoonStubs_LIBS = baciStubs maciStubs EphemGeneratorStubs - +SolarSystemBodyStubs_LIBS = baciStubs maciStubs EphemGeneratorStubs # # list of all possible C-sources (used to create automatic dependencies) diff --git a/Common/Interfaces/CommonInterface/idl/AntennaDefinitions.midl b/Common/Interfaces/CommonInterface/idl/AntennaDefinitions.midl index c80421b74be3f112aa4779ab112547ee2a3ea312..972eaf5962c16df4986b0900f127d9505fb8f957 100644 --- a/Common/Interfaces/CommonInterface/idl/AntennaDefinitions.midl +++ b/Common/Interfaces/CommonInterface/idl/AntennaDefinitions.midl @@ -105,7 +105,7 @@ module Antenna { ANT_SUN, /*!< tracks the sun */ ANT_MOON, /*!< tracks the moon */ ANT_SATELLITE, /*!< tracks an artificial sattelite */ - ANT_SOLARSYTEMBODY, /*!< tracks a body of the solar system */ + ANT_SOLARSYSTEMBODY, /*!< tracks a body of the solar system */ ANT_OTF, /*!< perform a On the Fly Scan */ ANT_NONE /*!< no generator */ }; diff --git a/Common/Interfaces/CommonInterface/idl/ManagmentDefinitions.midl b/Common/Interfaces/CommonInterface/idl/ManagmentDefinitions.midl index 3eaf865d5894b0c50a35a556dd51038e379bb6c5..75a79d126430511c99f636d031f47349bc9dd525 100644 --- a/Common/Interfaces/CommonInterface/idl/ManagmentDefinitions.midl +++ b/Common/Interfaces/CommonInterface/idl/ManagmentDefinitions.midl @@ -62,11 +62,12 @@ module Management { MNG_SUN, /*!< tracks the sun */ MNG_MOON, /*!< tracks the moon */ MNG_SATELLITE, /*!< tracks an artificial sattelite */ + MNG_PLANET, /*!< tracks a planet */ MNG_SOLARSYTEMBODY, /*!< tracks a body of the solar system */ - MNG_OTF, /*!< perform a On the Fly Scan */ + MNG_OTF, /*!< perform a On the Fly Scan */ MNG_OTFC, /*!< this is a wrapper of the otf, it allows the system to compute the center of the on-the-fly */ - MNG_PEAKER, /*!< perform a peaker measurement, involving the subreflector or minor servo systems */ - MNG_SKYDIP, /*!< perform a skydip scan */ + MNG_PEAKER, /*!< perform a peaker measurement, involving the subreflector or minor servo systems */ + MNG_SKYDIP, /*!< perform a skydip scan */ MNG_NONE /*!< no action */ }; diff --git a/Common/Interfaces/CommonInterface/include/ManagementModule.h b/Common/Interfaces/CommonInterface/include/ManagementModule.h index bb2bd2801e3dae0bfffee312497c6e819e07f04e..6725d43acba975915114c21a7f25d3e587d2159e 100644 --- a/Common/Interfaces/CommonInterface/include/ManagementModule.h +++ b/Common/Interfaces/CommonInterface/include/ManagementModule.h @@ -40,6 +40,10 @@ public: mode=Management::MNG_SOLARSYTEMBODY; return true; } + else if (strcasecmp(strScan,"PLANET")==0) { + mode=Management::MNG_PLANET; + return true; + } else if (strcasecmp(strScan,"OTF")==0) { mode=Management::MNG_OTF; return true; diff --git a/Common/Interfaces/ManagmentInterface/idl/Scheduler.idl b/Common/Interfaces/ManagmentInterface/idl/Scheduler.idl index 4b7b30dbc770e3144cb92e8b8e7a1bf4a9cca903..080fc150acb653b186527e18bc9f391f44d369c6 100644 --- a/Common/Interfaces/ManagmentInterface/idl/Scheduler.idl +++ b/Common/Interfaces/ManagmentInterface/idl/Scheduler.idl @@ -293,6 +293,25 @@ module Management { */ void moon() raises (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx); + /** + * It allows to immediately start a tracking of the Sun. + * @throw CORBA::SystemExcpetion + * @throw ComponentErrors::ComponentErrorsEx + * @throw ManagementErrors::ManagementErrorsEx + */ + void sun() raises (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx); + + /** + * It allows to immediately start a tracking of the Sun. + * @throw CORBA::SystemExcpetion + * @throw ComponentErrors::ComponentErrorsEx + * @throw ManagementErrors::ManagementErrorsEx + */ + + + void planet(in string name) raises (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx); + + /** * It allows to immediately go to a fixed horizontal position (beampark). * @param az azimuth in radians. It could be -1, in that case the current position is taken diff --git a/Common/Libraries/IRALibrary/include/IRATools.h b/Common/Libraries/IRALibrary/include/IRATools.h index 33a03b6870363c129ac8f9b5c2083cff736b27e9..3525548d7ed8f08ad0703acf0d87dbd80c511c75 100644 --- a/Common/Libraries/IRALibrary/include/IRATools.h +++ b/Common/Libraries/IRALibrary/include/IRATools.h @@ -354,10 +354,23 @@ public: * @param start position inside the string from which to start the next token, if a new token has been found * it points to the character immediately after the localized token * @param delimiter this is the character that separates the token - * @param it returns the next token in the string + * @param ret it returns the next token in the string + * @param stopAtFirst immediately returns (true) if the first character found is one of the delimiters, otherwise it goes further inside str * @return true if a token has been found */ - static bool getNextToken(const IRA::CString& str,int &start,char delimiter,IRA::CString &ret); + static bool getNextToken(const IRA::CString& str,int &start,const char& delimiter,IRA::CString &ret, const bool& stopAtFirst=true); + + /** + * Use this function to divide a string into separated tokens. Multiple token delimiters can be specified. + * @param str string to be divided into tokens + * @param start position inside the string from which to start the next token, if a new token has been found + * it points to the character immediately after the localized token + * @param delimiters vector that contains characters that separate the token + * @param ret it returns the next token in the string + * @param stopAtFirst immediately returns (true) if the first character found is one of the delimiters, otherwise it goes further inside str + * @return true if a token has been found + */ + static bool getNextToken(const IRA::CString& str,int &start,const std::vector& delimiters,IRA::CString &ret, const bool& stopAtFirst=true); /** * Computes the normalized (+/-PI) difference between two angles expressed in radians(a-b). For example 359°-1°=-2°,1°-359°=2°, 179°-360°=179° and so on. diff --git a/Common/Libraries/IRALibrary/src/IRATools.cpp b/Common/Libraries/IRALibrary/src/IRATools.cpp index ab893ab5157988309410c616d0dfd6f2c70d73f3..ede299471e4977e0de4cf6126a96e68a4a5f8f33 100644 --- a/Common/Libraries/IRALibrary/src/IRATools.cpp +++ b/Common/Libraries/IRALibrary/src/IRATools.cpp @@ -40,13 +40,13 @@ void CIRATools::Wait(long long micro) DDWORD CIRATools::timeMicroSeconds(TIMEDIFFERENCE& time) { DDWORD tmp; - tmp=((((time.day()*24+time.hour())*60LL+time.minute())*60+time.second())*1000000+time.microSecond()); + tmp=((((time.day()*24+time.hour())*60LL+time.minute())*60+time.second())*1000000+time.microSecond()); return tmp; } void CIRATools::getTime(TIMEVALUE& Now) { - Now.value(TimeUtil::ace2epoch(ACE_OS::gettimeofday())); + Now.value(TimeUtil::ace2epoch(ACE_OS::gettimeofday())); } ACS::Time CIRATools::getACSTime() @@ -89,7 +89,7 @@ DDWORD CIRATools::timeDifference(TIMEVALUE& First,TIMEVALUE& Last) diff=Last.difference(First.value()); } DurationHelper diffHelper(diff); - return timeMicroSeconds(diffHelper); + return timeMicroSeconds(diffHelper); } long long CIRATools::timeSubtract(const TIMEVALUE& First,const TIMEVALUE& Second) @@ -114,7 +114,7 @@ bool CIRATools::getDBValue(maci::ContainerServices *Services,CString fieldName,d try { CDB::DAL_var Dal_p=Services->getCDB(); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - Val=Dao_p->get_double((const char *)fieldName); + Val=Dao_p->get_double((const char *)fieldName); } catch (...) { return false; @@ -130,7 +130,7 @@ bool CIRATools::getDBValue(maci::SimpleClient *client,CString fieldName,double & CORBA::Object_var obj=client->getComponent("CDB",0,false); CDB::DAL_var Dal_p=CDB::DAL::_narrow(obj); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - Val=Dao_p->get_double((const char *)fieldName); + Val=Dao_p->get_double((const char *)fieldName); } catch (...) { return false; @@ -146,7 +146,7 @@ bool CIRATools::getDBValue(maci::ContainerServices *Services,CString fieldName,l try { CDB::DAL_var Dal_p=Services->getCDB(); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - Val=Dao_p->get_long((const char *)fieldName); + Val=Dao_p->get_long((const char *)fieldName); } catch (...) { return false; @@ -162,7 +162,7 @@ bool CIRATools::getDBValue(maci::SimpleClient *client,CString fieldName,long &Va CORBA::Object_var obj=client->getComponent("CDB",0,false); CDB::DAL_var Dal_p=CDB::DAL::_narrow(obj); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - Val=Dao_p->get_long((const char *)fieldName); + Val=Dao_p->get_long((const char *)fieldName); } catch (...) { return false; @@ -179,13 +179,13 @@ bool CIRATools::getDBValue(maci::ContainerServices *Services,CString fieldName,D try { CDB::DAL_var Dal_p=Services->getCDB(); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - app=Dao_p->get_long((const char *)fieldName); + app=Dao_p->get_long((const char *)fieldName); } catch (...) { return false; } Val=(DWORD)app; - return true; + return true; } bool CIRATools::getDBValue(maci::SimpleClient *client,CString fieldName,DWORD &Val,CString Domain,CString name) @@ -197,13 +197,13 @@ bool CIRATools::getDBValue(maci::SimpleClient *client,CString fieldName,DWORD &V CORBA::Object_var obj=client->getComponent("CDB",0,false); CDB::DAL_var Dal_p=CDB::DAL::_narrow(obj); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); - app=Dao_p->get_long((const char *)fieldName); + app=Dao_p->get_long((const char *)fieldName); } catch (...) { return false; } Val=(DWORD)app; - return true; + return true; } bool CIRATools::getDBValue(maci::ContainerServices *Services,CString fieldName,CString &Val,CString Domain,CString name) @@ -227,7 +227,7 @@ bool CIRATools::getDBValue(maci::SimpleClient *client,CString fieldName,CString { CString fullName; fullName=Domain+name; - try { + try { CORBA::Object_var obj=client->getComponent("CDB",0,false); CDB::DAL_var Dal_p=CDB::DAL::_narrow(obj); CDB::DAO_var Dao_p=Dal_p->get_DAO_Servant((const char *)fullName); @@ -249,7 +249,7 @@ bool CIRATools::setDBValue(maci::ContainerServices* Services,CString fieldName,c CDB::DAL_var Dal_p=Services->getCDB(); CDB::WDAL_var wDal_p=CDB::WDAL::_narrow(Dal_p); CDB::WDAO_var wDao_p=wDal_p->get_WDAO_Servant((const char *)fullName); - wDao_p->set_double((const char *)fieldName,Val); + wDao_p->set_double((const char *)fieldName,Val); } catch (...) { return false; @@ -266,7 +266,7 @@ bool CIRATools::setDBValue(maci::ContainerServices* Services,CString fieldName,c CDB::DAL_var Dal_p=Services->getCDB(); CDB::WDAL_var wDal_p=CDB::WDAL::_narrow(Dal_p); CDB::WDAO_var wDao_p=wDal_p->get_WDAO_Servant((const char *)fullName); - wDao_p->set_long((const char *)fieldName,Val); + wDao_p->set_long((const char *)fieldName,Val); } catch (...) { return false; @@ -283,12 +283,12 @@ bool CIRATools::setDBValue(maci::ContainerServices* Services,CString fieldName,c CDB::DAL_var Dal_p=Services->getCDB(); CDB::WDAL_var wDal_p=CDB::WDAL::_narrow(Dal_p); CDB::WDAO_var wDao_p=wDal_p->get_WDAO_Servant((const char *)fullName); - wDao_p->set_long((const char *)fieldName,Val); + wDao_p->set_long((const char *)fieldName,Val); } catch (...) { return false; } - return true; + return true; } bool CIRATools::setDBValue(maci::ContainerServices* Services,CString fieldName,const CString &Val,CString Domain,CString name) @@ -300,7 +300,7 @@ bool CIRATools::setDBValue(maci::ContainerServices* Services,CString fieldName,c CDB::DAL_var Dal_p=Services->getCDB(); CDB::WDAL_var wDal_p=CDB::WDAL::_narrow(Dal_p); CDB::WDAO_var wDao_p=wDal_p->get_WDAO_Servant((const char *)fullName); - wDao_p->set_string((const char *)fieldName,(const char*)Val); + wDao_p->set_string((const char *)fieldName,(const char*)Val); } catch (...) { return false; @@ -340,11 +340,11 @@ double CIRATools::getHWAzimuth(const double& current,const double& dest,const do } if (d1<=d2) { newOne=tmpCurrent+d1; - if ((newOne>tmpMaxAz) || (newOnetmpMaxAz) || (newOnetmpMaxAz) || (newOnetmpMaxAz) || (newOne0) { //CW (typically 180...450 @@ -369,7 +369,7 @@ double CIRATools::getHWAzimuth(const double& current,const double& dest,const do } else { // not reachable in this sector (typically 180..270 newOne=tmpDest; - } + } } return newOne; } @@ -397,7 +397,12 @@ bool CIRATools::skyFrequency(const double& bf,const double& bbw,const double& rf }*/ } -bool CIRATools::getNextToken(const IRA::CString& str,int &start,char delimiter,IRA::CString &ret) +bool CIRATools::getNextToken(const IRA::CString& str,int &start,const char& delimiter,IRA::CString &ret, const bool& stopAtFirst) +{ + return getNextToken(str, start, std::vector{ delimiter }, ret, stopAtFirst); +} + +bool CIRATools::getNextToken(const IRA::CString& str,int &start,const std::vector& delimiters,IRA::CString &ret, const bool& stopAtFirst) { int i; bool ok=false; @@ -406,22 +411,24 @@ bool CIRATools::getNextToken(const IRA::CString& str,int &start,char delimiter,I token=new char[i+1]; i=0; while (str[start]!=0) { + char c = str[start]; ok=true; - if ((str[start]==delimiter)) { - start++; + start++; + if (std::any_of(delimiters.begin(), delimiters.end(), [c](char d){ return c == d; })) { + // We still have not found any meaningful character, stop if stopAtFirst or continue skipping a delimiter + if(!stopAtFirst && i==0) + continue; break; } else { - token[i]=str[start]; - start++; + token[i]=c; i++; } } token[i]=0; ret=IRA::CString(token); delete []token; - if (!ok) return false; - else return true; + return ok; } double CIRATools::differenceBetweenAnglesRad(const double& a,const double& b) @@ -504,7 +511,7 @@ bool CIRATools::strToInterval(const IRA::CString& durationString,ACS::TimeInterv else { hour=0; minute=0; - second=timeToken[0].ToDouble(); + second=timeToken[0].ToDouble(); } } else if (dCounter==2) { @@ -522,7 +529,7 @@ bool CIRATools::strToInterval(const IRA::CString& durationString,ACS::TimeInterv else if (dCounter==3) { hour=timeToken[0].ToLong(); minute=timeToken[1].ToLong(); - second=timeToken[2].ToDouble(); + second=timeToken[2].ToDouble(); } if ((hour<0) || (hour>23)) return false; if ((minute<0) || (minute>59)) return false; @@ -541,7 +548,7 @@ bool CIRATools::strToInterval(const IRA::CString& durationString,ACS::TimeInterv usec=(long)(second*1000000.0); period.hour(hour); period.minute(minute); period.second(sec); period.microSecond(usec); interval=period.value().value; - return true; + return true; } bool CIRATools::intervalToStr(const ACS::TimeInterval& interval,IRA::CString& outString,char dateDelimiter,char timeDelimiter) @@ -565,7 +572,7 @@ bool CIRATools::strToTime(const IRA::CString& timeString,ACS::Time& time,bool co IRA::CIRATools::getTime(now); int p,i=0,dCounter=0; IRA::CDateTime dt; - + while (((p=timeString.Find(dateDelimiter,i))>0) && (dCounter<2)) { dateToken[dCounter]=timeString.Mid(i,p-i); dCounter++; @@ -582,25 +589,25 @@ bool CIRATools::strToTime(const IRA::CString& timeString,ACS::Time& time,bool co } else { year=dateToken[0].ToLong(); - doy=dateToken[1].ToLong(); + doy=dateToken[1].ToLong(); } if (getNextToken(timeString,i,timeDelimiter,token)) { //now read all three fields of the time representation hour=token.ToLong(); if (getNextToken(timeString,i,timeDelimiter,token)) { minute=token.ToLong(); - if (getNextToken(timeString,i,timeDelimiter,token)) { + if (getNextToken(timeString,i,timeDelimiter,token)) { second=token.ToDouble(); } else { if (complete) return false; second=0.0; - } + } } else { if (complete) return false; minute=0; second=0.0; - } + } } else { return false; @@ -631,7 +638,7 @@ bool CIRATools::timeToStr(const ACS::Time& time,IRA::CString& outString,char dat TIMEVALUE timeE(time); outString.Format("%04lu%c%03ld%c%02ld%c%02ld%c%02ld.%03ld",(unsigned long)timeE.year(),dateDelimiter,(long)timeE.dayOfYear(),dateDelimiter,(long)timeE.hour(), timeDelimiter,(long)timeE.minute(),timeDelimiter,(long)timeE.second(),(long)timeE.microSecond()/1000); - return true; + return true; } bool CIRATools::timeToStrExtended(const ACS::Time& time,IRA::CString& outString,char dateDelimiter,char timeDelimiter) @@ -676,7 +683,7 @@ bool CIRATools::longSeqToStr(const ACS::longSeq& val,IRA::CString& outString,cha bool CIRATools::hourAngleToRad(const IRA::CString& angle,double& rad,bool complete,char delimiter) { - int p,i=0,dCounter=0; + int p,i=0,dCounter=0; long hour=0,minute=0; double second=0.0; bool sign; @@ -704,7 +711,7 @@ bool CIRATools::hourAngleToRad(const IRA::CString& angle,double& rad,bool comple else if (dCounter==3) { hour=token[0].ToLong(); minute=token[1].ToLong(); - second=token[2].ToDouble(); + second=token[2].ToDouble(); } if (token[0][0]=='-') { sign=true; @@ -720,8 +727,8 @@ bool CIRATools::hourAngleToRad(const IRA::CString& angle,double& rad,bool comple rad=slaDranrm(rad); if (sign) { rad*=-1; - } - return true; + } + return true; } bool CIRATools::radToHourAngle(const double& rad,IRA::CString& outString,char delimiter) @@ -741,7 +748,7 @@ bool CIRATools::radToHourAngle(const double& rad,IRA::CString& outString,char de bool CIRATools::sexagesimalAngleToRad(const IRA::CString& angle,double& rad,bool complete,char delimiter) { - int p,i=0,dCounter=0; + int p,i=0,dCounter=0; long deg=0,arcminute=0; double arcsecond=0.0; bool sign; @@ -769,14 +776,14 @@ bool CIRATools::sexagesimalAngleToRad(const IRA::CString& angle,double& rad,bool else if (dCounter==3) { deg=token[0].ToLong(); arcminute=token[1].ToLong(); - arcsecond=token[2].ToDouble(); + arcsecond=token[2].ToDouble(); } //degrees could also be negative...... if (token[0][0]=='-') { sign=true; deg*=-1; } - else { + else { sign=false; } if ((arcminute<0) || (arcminute>59)) return false; @@ -786,16 +793,16 @@ bool CIRATools::sexagesimalAngleToRad(const IRA::CString& angle,double& rad,bool if (sign) { rad*=-1; } - return true; + return true; } bool CIRATools::radToSexagesimalAngle(const double& rad,IRA::CString& outString,char delimiter) { char sign; - int dmsf[4]; + int dmsf[4]; double ranged=dmod(rad,D2PI); // put the angle in the range -2PI..2PI // convert it into hour minute second anf fraction..keeping track of the sign - slaDr2af(3,ranged,&sign,dmsf); + slaDr2af(3,ranged,&sign,dmsf); if (sign=='+') { outString.Format("%02d%c%02d%c%02d.%03d",dmsf[0],delimiter,dmsf[1],delimiter,dmsf[2],dmsf[3]); } @@ -810,7 +817,7 @@ bool CIRATools::angleToRad(const IRA::CString& angle,double& rad) double deg=angle.ToDouble(); rad=deg*DD2R; rad=dmod(rad,D2PI); - return true; + return true; } bool CIRATools::radToAngle(const double& rad,IRA::CString& outString) @@ -866,7 +873,7 @@ bool CIRATools::latitudeToRad(const IRA::CString& lat,double& rad,bool complete, bool CIRATools::rightAscensionToRad(const IRA::CString& ra,double& rad,bool complete,char delimiter) { //long len=ra.GetLength(); - int len=ra.GetLength(); + int len=ra.GetLength(); bool res; if (len==0) return false; if (ra[len-1]=='d') { @@ -926,7 +933,7 @@ bool CIRATools::azimuthToRad(const IRA::CString& az,double& rad,bool complete) } else return res; } - + bool CIRATools::elevationToRad(const IRA::CString& el,double& rad,bool complete) { bool res=angleToRad(el,rad); @@ -1140,13 +1147,13 @@ bool CIRATools::makeDirectory(const IRA::CString& pathName) bool CIRATools::directoryExists(const IRA::CString& path) { DIR *dir; - bool exists=false; - dir=opendir((const char *)path); - if (dir!=NULL) { - exists=true; - closedir(dir); - } - return exists; + bool exists=false; + dir=opendir((const char *)path); + if (dir!=NULL) { + exists=true; + closedir(dir); + } + return exists; } bool CIRATools::fileExists(const IRA::CString& file) @@ -1178,27 +1185,27 @@ bool CIRATools::deleteFile(const IRA::CString& file) bool CIRATools::copyFile(const IRA::CString& src,const IRA::CString& dst) { - std::ifstream in ((const char *)src); - if (in.fail()) return false; - std::ofstream out ((const char *)dst); - if (out.fail()) return false; - out << in.rdbuf(); - out.close(); - in.close(); - return true; + std::ifstream in ((const char *)src); + if (in.fail()) return false; + std::ofstream out ((const char *)dst); + if (out.fail()) return false; + out << in.rdbuf(); + out.close(); + in.close(); + return true; } bool CIRATools::extractFileName(const IRA::CString& fullPath,IRA::CString& baseDir,IRA::CString& baseName, IRA::CString& extension) { - char *dirc, *basec; - dirc=strdup((const char *)fullPath); // the APIs called below might change the content of the input string - basec=strdup((const char *)fullPath); - baseDir=IRA::CString(dirname(dirc)); - baseName=IRA::CString(basename(basec)); - if ((baseDir.GetLength()==0) || (baseName.GetLength()==0)) { - return false; - } + char *dirc, *basec; + dirc=strdup((const char *)fullPath); // the APIs called below might change the content of the input string + basec=strdup((const char *)fullPath); + baseDir=IRA::CString(dirname(dirc)); + baseName=IRA::CString(basename(basec)); + if ((baseDir.GetLength()==0) || (baseName.GetLength()==0)) { + return false; + } int pos=baseName.Find('.'); if (pos<0) { // not found extension=""; @@ -1297,9 +1304,9 @@ bool CIRATools::matchRegExp(const IRA::CString& input,const IRA::CString& expr,s std::string out(what[i].first,what[i].second); res.push_back(out.c_str()); } - start=what[0].second; - //flags|=boost::match_prev_avail; - //flags|=boost::match_not_bob; + start=what[0].second; + //flags|=boost::match_prev_avail; + //flags|=boost::match_not_bob; } return true; } diff --git a/Common/Libraries/XEphemAstroLib/include/astro.h b/Common/Libraries/XEphemAstroLib/include/astro.h new file mode 100644 index 0000000000000000000000000000000000000000..614b3125ed66683ce498e2df08c0c8878e0e67a7 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/astro.h @@ -0,0 +1,825 @@ +#ifndef _ASTRO_H +#define _ASTRO_H + +#include + +#ifndef PI +#define PI 3.141592653589793 +#endif + +/* conversions among hours (of ra), degrees and radians. */ +#define degrad(x) ((x)*PI/180.) +#define raddeg(x) ((x)*180./PI) +#define hrdeg(x) ((x)*15.) +#define deghr(x) ((x)/15.) +#define hrrad(x) degrad(hrdeg(x)) +#define radhr(x) deghr(raddeg(x)) + +/* ratio of from synodic (solar) to sidereal (stellar) rate */ +#define SIDRATE .9972695677 + +/* manifest names for planets. + * N.B. must coincide with usage in pelement.c and plans.c. + * N.B. only the first 8 are valid for use with plans(). + */ + +#ifdef __cplusplus +extern "C" { +#endif + +// all of your legacy C code here + + + + +typedef enum { + MERCURY, + VENUS, + MARS, + JUPITER, + SATURN, + URANUS, + NEPTUNE, + PLUTO, + SUN, + MOON, + NOBJ /* total number of basic objects */ +} PLCode; + +/* moon constants for pl_moon */ +typedef enum { + X_PLANET = 0, /* use to mean planet itself */ + PHOBOS = NOBJ, DEIMOS, + IO, EUROPA, GANYMEDE, CALLISTO, + MIMAS, ENCELADUS, TETHYS, DIONE, RHEA, TITAN, HYPERION, IAPETUS, + ARIEL, UMBRIEL, TITANIA, OBERON, MIRANDA, + NBUILTIN +} MCode; + +/* starting point for MJD calculations + */ +#define MJD0 2415020.0 +#define J2000 (2451545.0 - MJD0) /* yes, 2000 January 1 at 12h */ + +/* the Now and Obj typedefs. + * also, a few miscellaneous constants and declarations. + */ + +#define SPD (24.0*3600.0) /* seconds per day */ +#define MAU (1.4959787e11) /* m / au */ +#define LTAU 499.005 /* seconds light takes to travel 1 AU */ +#define ERAD (6.37816e6) /* earth equitorial radius, m */ +#define MRAD (1.740e6) /* moon equitorial radius, m */ +#define SRAD (6.95e8) /* sun equitorial radius, m */ +#define FTPM 3.28084 /* ft per m */ +#define ESAT_MAG 2 /* default satellite magnitude */ +#define FAST_SAT_RPD 0.25 /* max earth sat rev/day considered "fast" */ + +#define EOD (-9786) /* special epoch flag: use epoch of date */ + +/* info about the local observing circumstances and misc preferences */ +typedef struct { + double n_mjd; /* modified Julian date, ie, days since + * Jan 0.5 1900 (== 12 noon, Dec 30, 1899), utc. + * enough precision to get well better than 1 second. + * N.B. if not first member, must move NOMJD inits. + */ + double n_lat; /* geographic (surface-normal) lt, >0 north, rads */ + double n_lng; /* longitude, >0 east, rads */ + double n_tz; /* time zone, hrs behind UTC */ + double n_temp; /* atmospheric temp, degrees C */ + double n_pressure; /* atmospheric pressure, mBar */ + double n_elev; /* elevation above sea level, earth radii */ + double n_dip; /* dip of sun below hzn at twilight, >0 below, rads */ + double n_epoch; /* desired precession display ep as an mjd, or EOD */ + char n_tznm[8]; /* time zone name; 7 chars or less, always 0 at end */ +} Now; + +/* handy shorthands for fields in a Now pointer, np */ +/* +#define mjd np->n_mjd +#define lat np->n_lat +#define lng np->n_lng +#define tz np->n_tz +#define temp np->n_temp +#define pressure np->n_pressure +#define elev np->n_elev +#define dip np->n_dip +#define epoch np->n_epoch +#define tznm np->n_tznm +#define mjed mm_mjed(np) +*/ +/* structures to describe objects of various types. + */ + +/* magnitude values in two different systems */ +typedef struct { + float m1, m2; /* either g/k or H/G, depending on... */ + int whichm; /* one of MAG_gk or MAG_HG */ +} Mag; + +/* whichm */ +#define MAG_HG 0 /* using 0 makes HG the initial default */ +#define MAG_gk 1 + +/* we actually store magnitudes times this scale factor in a short int */ +#define MAGSCALE 100.0 +#define set_smag(op,m) ((op)->s_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define set_fmag(op,m) ((op)->f_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define get_mag(op) ((op)->s_mag / MAGSCALE) +#define get_fmag(op) ((op)->f_mag / MAGSCALE) + +/* longest object name, including trailing '\0' */ +#define MAXNM 21 + +typedef unsigned char ObjType_t; +typedef unsigned char ObjAge_t; +typedef unsigned char byte; + +/* Obj is a massive union. + * many fields are in common so we use macros to make things a little easier. + */ + +/* fields common to *all* structs in the Obj union */ +#define OBJ_COMMON_FLDS \ + ObjType_t co_type; /* current object type; see flags, below */ \ + byte co_flags; /* FUSER*... used by others */ \ + ObjAge_t co_age; /* update aging code; see db.c */ \ + char co_name[MAXNM];/* name, including \0 */ \ + float co_ra; /* geo/topo app/mean ra, rads */ \ + float co_dec; /* geo/topo app/mean dec, rads */ \ + float co_gaera; /* geo apparent ra, rads */ \ + float co_gaedec; /* geo apparent dec, rads */ \ + float co_az; /* azimuth, >0 e of n, rads */ \ + float co_alt; /* altitude above topocentric horizon, rads */ \ + float co_elong; /* angular sep btwen obj and sun, >0 E, degs */ \ + float co_size; /* angular size, arc secs */ \ + short co_mag /* visual magnitude * MAGSCALE */ + +/* fields common to all solar system objects in the Obj union */ +#define OBJ_SOLSYS_FLDS \ + OBJ_COMMON_FLDS; /* all the fixed ones plus ... */ \ + float so_sdist; /* dist from object to sun, au */ \ + float so_edist; /* dist from object to earth, au */ \ + float so_hlong; /* heliocentric longitude, rads */ \ + float so_hlat; /* heliocentric latitude, rads */ \ + float so_phase /* phase, % */ + +/* fields common to all fixed objects in the Obj union */ +#define OBJ_FIXED_FLDS \ + char fo_spect[2]; /* spectral codes, if appropriate */ \ + float fo_epoch; /* eq of ra/dec and time when pm=0; mjd */ \ + float fo_ra; /* ra, rads, in epoch frame */ \ + float fo_dec; /* dec, rads, in epoch frame */ \ + float fo_pmra; /* ra proper motion, rads/day/cos(dec) */ \ + float fo_pmdec; /* dec proper motion, rads/day */ \ + char fo_class /* object class */ + +/* a generic object */ +typedef struct { + OBJ_COMMON_FLDS; +} ObjAny; + +/* a generic sol system object */ +typedef struct { + OBJ_SOLSYS_FLDS; +} ObjSS; + +/* basic Fixed object info. + */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + /* following are for galaxies */ + byte fo_ratio; /* minor/major diameter ratio. use s/get_ratio() */ + byte fo_pa; /* position angle, E of N, rads. use s/get_pa() */ +} ObjF; + +/* true-orbit parameters of binary-star object type */ +typedef struct { + float bo_T; /* epoch of periastron, years */ + float bo_e; /* eccentricity */ + float bo_o; /* argument of periastron, degress */ + float bo_O; /* longitude of node, degrees */ + float bo_i; /* inclination to plane of sky, degrees */ + float bo_a; /* semi major axis, arc secs */ + float bo_P; /* period, years */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bo_pa; /* position angle @ ep, rads E of N */ + float bo_sep; /* separation @ ep, arc secs */ + float bo_ra; /* geo/topo app/mean ra, rads */ + float bo_dec; /* geo/topo app/mean dec, rads */ +} BinOrbit; +typedef struct { + float bp_ep; /* epoch of pa/sep, year */ + float bp_pa; /* position angle @ ep, rads E of N */ + float bp_sep; /* separation @ ep, arc secs */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bp_ra; /* geo/topo app/mean ra, rads */ + float bp_dec; /* geo/topo app/mean dec, rads */ +} BinPos; +#define MAXBINPOS 2 /* max discrete epochs to store when no elements */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + byte b_2compute; /* whether to compute secondary positions */ + byte b_nbp; /* number of b_bp[] or 0 to use b_bo */ + short b_2mag; /* secondary's magnitude * MAGSCALE */ + char b_2spect[2]; /* secondary's spectrum */ + + /* either a real orbit or a set of discrete pa/sep */ + union { + BinOrbit b_bo; /* orbital elements */ + BinPos b_bp[MAXBINPOS]; /* table of discrete positions */ + } u; +} ObjB; + +#define fo_mag co_mag /* pseudonym for so_mag since it is not computed */ +#define fo_size co_size /* pseudonym for so_size since it is not computed */ + +/* macros to pack/unpack some fields */ +#define SRSCALE 255.0 /* galaxy size ratio scale */ +#define PASCALE (255.0/(2*PI)) /* pos angle scale factor */ +#define get_ratio(op) (((int)(op)->f_ratio)/SRSCALE) +#define set_ratio(op,maj,min) ((op)->f_ratio = (byte)(((maj) > 0) \ + ? ((min)*SRSCALE/(double)(maj)+0.5) \ + : 0)) +#define get_pa(op) ((double)(op)->f_pa/PASCALE) +#define set_pa(op,s) ((op)->f_pa = (byte)((s)*PASCALE + 0.5)) + +#define NCLASSES 128 /* n potential fo_classes -- allow for all ASCII */ + +/* basic planet object info */ +typedef struct { + OBJ_SOLSYS_FLDS; + PLCode plo_code; /* which planet */ + MCode plo_moon; /* which moon, or X_PLANET if planet */ + char plo_evis, plo_svis; /* if moon: whether visible from earth, sun */ + double plo_x, plo_y, plo_z; /* if moon: eq dist from center, planet radii */ + double plo_aux1, plo_aux2; /* various values, depending on type */ +} ObjPl; + +/* basic info about an object in elliptical heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + float eo_inc; /* inclination, degrees */ + float eo_Om; /* longitude of ascending node, degrees */ + float eo_om; /* argument of perihelion, degress */ + float eo_a; /* mean distance, aka,semi-maj axis,AU */ + float eo_M; /* mean anomaly, ie, degrees from perihelion at cepoch*/ + float eo_size; /* angular size, in arc seconds at 1 AU */ + float eo_startok; /* nominal first mjd this set is ok, else 0 */ + float eo_endok; /* nominal last mjd this set is ok, else 0 */ + double eo_e; /* eccentricity (double for when near 1 computing q) */ + double eo_cepoch; /* epoch date (M reference), as an mjd */ + double eo_epoch; /* equinox year (inc/Om/om reference), as an mjd. */ + Mag eo_mag; /* magnitude */ +} ObjE; + +/* basic info about an object in hyperbolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double ho_epoch; /* equinox year (inc/Om/om reference), as an mjd */ + double ho_ep; /* epoch of perihelion, as an mjd */ + float ho_startok; /* nominal first mjd this set is ok, else 0 */ + float ho_endok; /* nominal last mjd this set is ok, else 0 */ + float ho_inc; /* inclination, degs */ + float ho_Om; /* longitude of ascending node, degs */ + float ho_om; /* argument of perihelion, degs. */ + float ho_e; /* eccentricity */ + float ho_qp; /* perihelion distance, AU */ + float ho_g, ho_k; /* magnitude model coefficients */ + float ho_size; /* angular size, in arc seconds at 1 AU */ +} ObjH; + +/* basic info about an object in parabolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double po_epoch; /* reference epoch, as an mjd */ + double po_ep; /* epoch of perihelion, as an mjd */ + float po_startok; /* nominal first mjd this set is ok, else 0 */ + float po_endok; /* nominal last mjd this set is ok, else 0 */ + float po_inc; /* inclination, degs */ + float po_qp; /* perihelion distance, AU */ + float po_om; /* argument of perihelion, degs. */ + float po_Om; /* longitude of ascending node, degs */ + float po_g, po_k; /* magnitude model coefficients */ + float po_size; /* angular size, in arc seconds at 1 AU */ +} ObjP; + +/* basic earth satellite object info */ +typedef struct { + OBJ_COMMON_FLDS; + double eso_epoch; /* reference epoch, as an mjd */ + double eso_n; /* mean motion, rev/day + * N.B. we need double due to a sensitive differencing + * operation used to compute MeanAnomaly in + * esat_main()/satellite.c. + */ + float eso_startok; /* nominal first mjd this set is ok, else 0 */ + float eso_endok; /* nominal last mjd this set is ok, else 0 */ + float eso_inc; /* inclination, degs */ + float eso_raan; /* RA of ascending node, degs */ + float eso_e; /* eccentricity */ + float eso_ap; /* argument of perigee at epoch, degs */ + float eso_M; /* mean anomaly, ie, degrees from perigee at epoch */ + float eso_decay; /* orbit decay rate, rev/day^2 */ + float eso_drag; /* object drag coefficient, (earth radii)^-1 */ + int eso_orbit; /* integer orbit number of epoch */ + + /* computed "sky" results unique to earth satellites */ + float ess_elev; /* height of satellite above sea level, m */ + float ess_range; /* line-of-site distance from observer to satellite, m*/ + float ess_rangev; /* rate-of-change of range, m/s */ + float ess_sublat; /* latitude below satellite, >0 north, rads */ + float ess_sublng; /* longitude below satellite, >0 east, rads */ + int ess_eclipsed;/* 1 if satellite is in earth's shadow, else 0 */ +} ObjES; + +typedef union { + ObjAny any; /* these fields valid for all types */ + ObjSS anyss; /* these fields valid for all solar system types */ + ObjPl pl; /* planet */ + ObjF f; /* fixed object, plus proper motion */ + ObjB b; /* bona fide binary stars (doubles are stored in f) */ + ObjE e; /* object in heliocentric elliptical orbit */ + ObjH h; /* object in heliocentric hyperbolic trajectory */ + ObjP p; /* object in heliocentric parabolic trajectory */ + ObjES es; /* earth satellite */ +} Obj; + + +/* for o_flags -- everybody must agree */ +#define FUSER0 0x01 +#define FUSER1 0x02 +#define FUSER2 0x04 +#define FUSER3 0x08 +#define FUSER4 0x10 +#define FUSER5 0x20 +#define FUSER6 0x40 +#define FUSER7 0x80 + +/* mark an object as being a "field star" */ +#define FLDSTAR FUSER3 +/* mark an object as circum calculation failed */ +#define NOCIRCUM FUSER7 + +/* Obj shorthands: */ +#define o_type any.co_type +#define o_name any.co_name +#define o_flags any.co_flags +#define o_age any.co_age +#define s_ra any.co_ra +#define s_dec any.co_dec +#define s_gaera any.co_gaera +#define s_gaedec any.co_gaedec +#define s_az any.co_az +#define s_alt any.co_alt +#define s_elong any.co_elong +#define s_size any.co_size +#define s_mag any.co_mag + +#define s_sdist anyss.so_sdist +#define s_edist anyss.so_edist +#define s_hlong anyss.so_hlong +#define s_hlat anyss.so_hlat +#define s_phase anyss.so_phase + +#define s_elev es.ess_elev +#define s_range es.ess_range +#define s_rangev es.ess_rangev +#define s_sublat es.ess_sublat +#define s_sublng es.ess_sublng +#define s_eclipsed es.ess_eclipsed + +#define f_class f.fo_class +#define f_spect f.fo_spect +#define f_ratio f.fo_ratio +#define f_pa f.fo_pa +#define f_epoch f.fo_epoch +#define f_RA f.fo_ra +#define f_pmRA f.fo_pmra +#define f_dec f.fo_dec +#define f_pmdec f.fo_pmdec +#define f_mag f.fo_mag +#define f_size f.fo_size + +#define e_cepoch e.eo_cepoch +#define e_epoch e.eo_epoch +#define e_startok e.eo_startok +#define e_endok e.eo_endok +#define e_inc e.eo_inc +#define e_Om e.eo_Om +#define e_om e.eo_om +#define e_a e.eo_a +#define e_e e.eo_e +#define e_M e.eo_M +#define e_size e.eo_size +#define e_mag e.eo_mag + +#define h_epoch h.ho_epoch +#define h_startok h.ho_startok +#define h_endok h.ho_endok +#define h_ep h.ho_ep +#define h_inc h.ho_inc +#define h_Om h.ho_Om +#define h_om h.ho_om +#define h_e h.ho_e +#define h_qp h.ho_qp +#define h_g h.ho_g +#define h_k h.ho_k +#define h_size h.ho_size + +#define p_epoch p.po_epoch +#define p_startok p.po_startok +#define p_endok p.po_endok +#define p_ep p.po_ep +#define p_inc p.po_inc +#define p_qp p.po_qp +#define p_om p.po_om +#define p_Om p.po_Om +#define p_g p.po_g +#define p_k p.po_k +#define p_size p.po_size + +#define es_epoch es.eso_epoch +#define es_startok es.eso_startok +#define es_endok es.eso_endok +#define es_inc es.eso_inc +#define es_raan es.eso_raan +#define es_e es.eso_e +#define es_ap es.eso_ap +#define es_M es.eso_M +#define es_n es.eso_n +#define es_decay es.eso_decay +#define es_drag es.eso_drag +#define es_orbit es.eso_orbit + +#define pl_code pl.plo_code +#define pl_moon pl.plo_moon +#define pl_evis pl.plo_evis +#define pl_svis pl.plo_svis +#define pl_x pl.plo_x +#define pl_y pl.plo_y +#define pl_z pl.plo_z +#define pl_aux1 pl.plo_aux1 +#define pl_aux2 pl.plo_aux2 + +#define b_2compute b.b_2compute +#define b_2spect b.b_2spect +#define b_2mag b.b_2mag +#define b_bo b.u.b_bo +#define b_bp b.u.b_bp +#define b_nbp b.b_nbp + +/* insure we always refer to the fields and no monkey business */ +#undef OBJ_COMMON_FLDS +#undef OBJ_SOLSYS_FLDS + +/* o_type code. + * N.B. names are assigned in order in objmenu.c + * N.B. if add one add switch in obj_cir(). + * N.B. UNDEFOBJ must be zero so new objects are undefinied by being zeroed. + * N.B. maintain the bitmasks too. + */ +enum ObjType { + UNDEFOBJ=0, + FIXED, BINARYSTAR, ELLIPTICAL, HYPERBOLIC, PARABOLIC, EARTHSAT, PLANET, + NOBJTYPES +}; + +/* types as handy bitmasks too */ +#define OBJTYPE2MASK(t) (1<<(t)) +#define FIXEDM OBJTYPE2MASK(FIXED) +#define BINARYSTARM OBJTYPE2MASK(BINARYSTAR) +#define ELLIPTICALM OBJTYPE2MASK(ELLIPTICAL) +#define HYPERBOLICM OBJTYPE2MASK(HYPERBOLIC) +#define PARABOLICM OBJTYPE2MASK(PARABOLIC) +#define EARTHSATM OBJTYPE2MASK(EARTHSAT) +#define PLANETM OBJTYPE2MASK(PLANET) +#define ALLM (~0) + +/* rise, set and transit information. + */ +typedef struct { + int rs_flags; /* info about what has been computed and any + * special conditions; see flags, below. + */ + double rs_risetm; /* mjd time of rise today */ + double rs_riseaz; /* azimuth of rise, rads E of N */ + double rs_trantm; /* mjd time of transit today */ + double rs_tranalt; /* altitude of transit, rads up from horizon */ + double rs_tranaz; /* azimuth of transit, rads E of N */ + double rs_settm; /* mjd time of set today */ + double rs_setaz; /* azimuth of set, rads E of N */ +} RiseSet; + +/* RiseSet flags */ +#define RS_NORISE 0x0001 /* object does not rise as such today */ +#define RS_NOSET 0x0002 /* object does not set as such today */ +#define RS_NOTRANS 0x0004 /* object does not transit as such today */ +#define RS_CIRCUMPOLAR 0x0010 /* object stays up all day today */ +#define RS_NEVERUP 0x0020 /* object never up at all today */ +#define RS_ERROR 0x1000 /* can't figure out anything! */ +#define RS_RISERR (0x0100|RS_ERROR) /* error computing rise */ +#define RS_SETERR (0x0200|RS_ERROR) /* error computing set */ +#define RS_TRANSERR (0x0400|RS_ERROR) /* error computing transit */ + +#define is_type(op,m) (OBJTYPE2MASK((op)->o_type) & (m)) + +/* any planet or its moons */ +#define is_planet(op,p) (is_type(op,PLANETM) && op->pl_code == (p)) + +/* any solar system object */ +#define is_ssobj(op) is_type(op,PLANETM|HYPERBOLICM|PARABOLICM|ELLIPTICALM) + + +/* natural satellite support */ + +typedef struct { + char *full; /* full name */ + char *tag; /* Roman numeral tag */ + float x, y, z; /* sky loc in planet radii: +x:east +y:south +z:front */ + float ra, dec; /* sky location in ra/dec */ + float mag; /* magnitude */ + int evis; /* whether geometrically visible from earth */ + int svis; /* whether in sun light */ + int pshad; /* whether moon is casting shadow on planet */ + int trans; /* whether moon is transiting */ + float sx, sy; /* shadow sky loc in planet radii: +x:east +y:south */ +} MoonData; + +/* separate set for each planet -- use in pl_moon */ + + +enum _marsmoons { + M_MARS = 0, /* == X_PLANET */ + M_PHOBOS, M_DEIMOS, + M_NMOONS /* including planet at 0 */ +}; + +enum _jupmoons { + J_JUPITER = 0, /* == X_PLANET */ + J_IO, J_EUROPA, J_GANYMEDE, J_CALLISTO, + J_NMOONS /* including planet */ +}; + +enum _satmoons { + S_SATURN = 0, /* == X_PLANET */ + S_MIMAS, S_ENCELADUS, S_TETHYS, S_DIONE, + S_RHEA, S_TITAN, S_HYPERION, S_IAPETUS, + S_NMOONS /* including planet */ +}; + +enum _uramoons { + U_URANUS = 0, /* == X_PLANET */ + U_ARIEL, U_UMBRIEL, U_TITANIA, U_OBERON, U_MIRANDA, + U_NMOONS /* including planet */ +}; + +#define X_MAXNMOONS S_NMOONS /* N.B. chosen by hand */ + + +/* global function declarations */ + + +/* aa_hadec.c */ +extern void aa_hadec (double lt, double alt, double az, double *ha, + double *dec); +extern void hadec_aa (double lt, double ha, double dec, double *alt, + double *az); + +/* aberration.c */ +extern void ab_ecl (double m, double lsn, double *lam, double *bet); +extern void ab_eq (double m, double lsn, double *ra, double *dec); + +/* airmass.c */ +extern void airmass (double aa, double *Xp); + +/* anomaly.c */ +extern void anomaly (double ma, double s, double *nu, double *ea); + +/* ap_as.c */ +extern void ap_as ( Now *np, double Mjd, double *rap, double *decp); +extern void as_ap ( Now *np, double Mjd, double *rap, double *decp); + +/* atlas.c */ +extern char *um_atlas (double ra, double dec); +extern char *u2k_atlas (double ra, double dec); +extern char *msa_atlas (double ra, double dec); + +/* aux.c */ +extern double mm_mjed (Now *np); + +/* chap95.c */ +extern int chap95 (double m, int obj, double prec, double *ret); + +/* chap95_data.c */ + +/* circum.c */ +extern int obj_cir (Now *np, Obj *op); + +/* comet.c */ +extern void comet (double m, double ep, double inc, double ap, double qp, + double om, double *lpd, double *psi, double *rp, double *rho, double *lam, + double *bet); + +/* constel.c */ +#define NCNS 89 +extern int cns_pick (double r, double d, double e); +extern int cns_id (char *abbrev); +extern char *cns_name (int id); +extern int cns_edges (double e, double **ra0p, double **dec0p, double **ra1p, + double **dec1p); +extern int cns_list (double ra, double dec, double e, double rad, int ids[]); +extern int cns_figure (int id, double e, double ra[],double dec[],int dcodes[]); +extern int cns_loadfigs (FILE *fp, char msg[]); + +/* dbfmt.c */ +extern int db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm, + char whynot[]); +extern void db_write_line (Obj *op, char *lp); +extern int dbline_candidate (char line[]); +extern int get_fields (char *s, int delim, char *fields[]); +extern int db_tle (char *name, char *l1, char *l2, Obj *op); +extern int dateRangeOK (Now *np, Obj *op); + +/* deltat.c */ +extern double deltat (double m); + +/* earthsat.c */ +extern int obj_earthsat (Now *np, Obj *op); + +/* eq_ecl.c */ +extern void eq_ecl (double m, double ra, double dec, double *lt,double *lg); +extern void ecl_eq (double m, double lt, double lg, double *ra,double *dec); + +/* eq_gal.c */ +extern void eq_gal (double m, double ra, double dec, double *lt,double *lg); +extern void gal_eq (double m, double lt, double lg, double *ra,double *dec); + +/* formats.c */ +extern int fs_sexa (char *out, double a, int w, int fracbase); +extern int fs_date (char out[], int format, double jd); +extern int f_scansexa (const char *str, double *dp); +extern void f_sscandate (char *bp, int pref, int *m, double *d, int *y); + +/* helio.c */ +extern void heliocorr (double jd, double ra, double dec, double *hcp); + +/* jupmoon.c */ +extern void jupiter_data (double Mjd, char dir[], Obj *sop, Obj *jop, + double *jupsize, double *cmlI, double *cmlII, double *polera, + double *poledec, MoonData md[J_NMOONS]); + +/* libration.c */ +extern void llibration (double JD, double *llatp, double *llonp); + +/* magdecl.c */ +extern int magdecl (double l, double L, double e, double y, char *dir, + double *dp, char *err); + +/* marsmoon.c */ +extern void marsm_data (double Mjd, char dir[], Obj *sop, Obj *mop, + double *marssize, double *polera, double *poledec, MoonData md[M_NMOONS]); + +/* misc.c */ +extern void zero_mem (void *loc, unsigned len); +extern int tickmarks (double min, double max, int numdiv, double ticks[]); +extern int lc (int cx, int cy, int cw, int x1, int y1, int x2, int y2, + int *sx1, int *sy1, int *sx2, int *sy2); +extern void hg_mag (double h, double g, double rp, double rho, double rsn, + double *mp); +extern int magdiam (int fmag, int magstp, double scale, double mag, + double size); +extern void gk_mag (double g, double k, double rp, double rho, double *mp); +extern double atod (char *buf); +extern void solve_sphere (double A, double b, double cc, double sc, + double *cap, double *Bp); +extern double delra (double dra); +extern void now_lst (Now *np, double *lstp); +extern void radec2ha (Now *np, double ra, double dec, double *hap); +extern void gha (Now *np, Obj *op, double *ghap); +extern char *obj_description (Obj *op); +extern int is_deepsky (Obj *op); + +/* mjd.c */ +extern void cal_mjd (int mn, double dy, int yr, double *m); +extern void mjd_cal (double m, int *mn, double *dy, int *yr); +extern int mjd_dow (double m, int *dow); +extern int isleapyear (int year); +extern void mjd_dpm (double m, int *ndays); +extern void mjd_year (double m, double *yr); +extern void year_mjd (double y, double *m); +extern void rnd_second (double *t); +extern void mjd_dayno (double jd, int *yr, double *dy); +extern double mjd_day (double jd); +extern double mjd_hr (double jd); +extern void range (double *v, double r); +extern void radecrange (double *ra, double *dec); + +/* moon.c */ +extern void moon (double m, double *lam, double *bet, double *rho, + double *msp, double *mdp); + +/* mooncolong.c */ +extern void moon_colong (double jd, double lt, double lg, double *cp, + double *kp, double *ap, double *sp); + +/* moonnf.c */ +extern void moonnf (double mj, double *mjn, double *mjf); + +/* nutation.c */ +extern void nutation (double m, double *deps, double *dpsi); +extern void nut_eq (double m, double *ra, double *dec); + +/* obliq.c */ +extern void obliquity (double m, double *eps); + +/* parallax.c */ +extern void ta_par (double tha, double tdec, double phi, double ht, + double *rho, double *aha, double *adec); + +/* parallactic.c */ +extern double parallacticLDA (double lt, double dec, double alt); +extern double parallacticLHD (double lt, double ha, double dec); + +/* plans.c */ +extern void plans (double m, PLCode p, double *lpd0, double *psi0, + double *rp0, double *rho0, double *lam, double *bet, double *dia, + double *mag); + +/* plshadow.c */ +extern int plshadow (Obj *op, Obj *sop, double polera, + double poledec, double x, double y, double z, float *sxp, float *syp); + +/* plmoon_cir.c */ +extern int plmoon_cir (Now *np, Obj *moonop); +extern int getBuiltInObjs (Obj **opp); +extern void setMoonDir (char *dir); + +/* precess.c */ +extern void precess (double mjd1, double mjd2, double *ra, double *dec); + +/* reduce.c */ +extern void reduce_elements (double mjd0, double m, double inc0, + double ap0, double om0, double *inc, double *ap, double *om); + +/* refract.c */ +extern void unrefract (double pr, double tr, double aa, double *ta); +extern void refract (double pr, double tr, double ta, double *aa); + +/* rings.c */ +extern void satrings (double sb, double sl, double sr, double el, double er, + double JD, double *etiltp, double *stiltp); + +/* riset.c */ +extern void riset (double ra, double dec, double lt, double dis, + double *lstr, double *lsts, double *azr, double *azs, int *status); + +/* riset_cir.c */ +extern void riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +extern void twilight_cir (Now *np, double dis, double *dawn, double *dusk, + int *status); + +/* satmoon.c */ +extern void saturn_data (double Mjd, char dir[], Obj *eop, Obj *sop, + double *satsize, double *etilt, double *stlit, double *polera, + double *poledec, MoonData md[S_NMOONS]); + +/* sphcart.c */ +extern void sphcart (double l, double b, double r, double *x, double *y, + double *z); +extern void cartsph (double x, double y, double z, double *l, double *b, + double *r); + +/* sun.c */ +extern void sunpos (double m, double *lsn, double *rsn, double *bsn); + +/* twobody.c */ +extern int vrc (double *v, double *r, double tp, double e, double q); + +/* umoon.c */ +extern void uranus_data (double Mjd, char dir[], Obj *sop, Obj *uop, + double *usize, double *polera, double *poledec, MoonData md[U_NMOONS]); + +/* utc_gst.c */ +extern void utc_gst (double m, double utc, double *gst); +extern void gst_utc (double m, double gst, double *utc); + +/* vsop87.c */ +extern int vsop87 (double m, int obj, double prec, double *ret); + +#ifdef __cplusplus +} +#endif + +#endif /* _ASTRO_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: astro.h,v $ $Date: 2013/01/06 01:12:57 $ $Revision: 1.33 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/bdl.h b/Common/Libraries/XEphemAstroLib/include/bdl.h new file mode 100644 index 0000000000000000000000000000000000000000..3b4d0ea333cbffefc041d1030762d3ecebbacf7c --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/bdl.h @@ -0,0 +1,6 @@ +extern int read_bdl (FILE *fp, double jd, double *xp, double *yp, double *zp, + char ynot[]); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: bdl.h,v $ $Date: 2003/03/20 08:56:31 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/chap95.h b/Common/Libraries/XEphemAstroLib/include/chap95.h new file mode 100644 index 0000000000000000000000000000000000000000..fff8acdd748d8a2d4b07b34b12fedbe415f9aa93 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/chap95.h @@ -0,0 +1,68 @@ +/* Position of outer planets; straightforward from: +ftp://adc.gsfc.nasa.gov/pub/adc/archives/journal_tables/A+AS/109/181: + +J/A+AS/109/181 Planetary ephemerides (Chapront, 1995) +=============================================================================== +Representation of planetary ephemerides by frequency analysis. Application to +the five outer planets. + CHAPRONT J. + + =1995A&AS..109..181C (SIMBAD/NED Reference) +=============================================================================== + +Keywords: ephemerides - planets and satellites: general - methods: numerical + +Contents: + Heliocentric equatorial rectangular coordinates of the five outer planets + (X, Y and Z). The source is based on DE200 (tables 4 to 7) or a reconstruction + of DE200 by numerical integration (tables 9 to 13). The reference frame is + the mean equator and equinox J2000 of DE200. + + The general formulation of the series X is: + X = SUM[i=1,Records] T**n_i*(CX_i*cos(Nu_k*t)+SX_i*sin(Nu_k*t)) + The formulation is identical for Y and Z. + T is the time (TDB) in Julian centuries from J2000: + T = (JulianDate - 2451545.0)/36525 + t is the time (TDB) in Julian years from J2000: + t = (JulianDate - 2451545.0)/365.25 + Nu is the frequency. Frequencies are identical for all terms of rank k: + Nu_k = Nu_i when n_i = 0 + For purely secular terms k = 0 and Nu_0 = 0 + +=============================================================================== +(End) Patricia Bauer [CDS] 03-Oct-1994 +*/ + +#define CHAP_SCALE 1e10 + +/* JDs of validity period */ +#define CHAP_BEGIN (2338032.5 - MJD0) /* 1689/3/19 */ +#define CHAP_END (2542032.5 - MJD0) /* 2247/10/1 */ + +/* coding flags */ +/* calculating rates increases time by about 10% + * + * On an HP715/75, for pluto the times per step are 0.00049 s and 0.00057 s + * This method is quite fast. + */ +#define CHAP_GETRATE 1 + +typedef struct { + short n; /* order of time; "-1" marks end of list */ + double amp[6]; /* amplitudes of cosine and sine terms for x,y,z */ + /* in original order [CX,SX,CY,SY,CZ,SZ] */ + double Nu; /* Frequency Nu_k; given only at n=0 */ +} chap95_rec; + +extern chap95_rec chap95_jupiter[]; +extern chap95_rec chap95_saturn[]; +extern chap95_rec chap95_uranus[]; +extern chap95_rec chap95_neptune[]; +extern chap95_rec chap95_pluto[]; + +extern int chap95 (double m, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: chap95.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/deepconst.h b/Common/Libraries/XEphemAstroLib/include/deepconst.h new file mode 100644 index 0000000000000000000000000000000000000000..8c715676a69353af1d59bdffda74d1e04d039d06 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/deepconst.h @@ -0,0 +1,34 @@ +#ifndef _CONST_H +#define _CONST_H + +/* $Id: deepconst.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + + +#define GE (3.986005E14) + +#define PI (3.1415926535897932385) + +#define XKE (7.43669161E-2) +#define CK2 (5.413080E-4) +#define CK4 (6.2098875E-7) +#define E6A (10E6) +#define QOMS2T (1.88027916E-9) +#define S (1.01222928) +#define TOTHRD (2.0/3.0) /* 6.6666666666666666667E-1 */ +#define XJ3 (-2.53881E-6) +/* #define XKE KE */ +#define XKMPER (6378.135) +#define XMNPDA (1440.0) +#define AE (1.0) +#define DE2RA (1.7453292519943295769E-2) +#define PIO2 (1.57079632679489661925) /* PI/2 */ +#define TWOPI (6.2831853071795864770) +#define X3PIO2 (4.7123889803846898578) /* 3*PI/2 */ + +#define RHO (0.15696590235) + +#endif /* _CONST_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: deepconst.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/preferences.h b/Common/Libraries/XEphemAstroLib/include/preferences.h new file mode 100644 index 0000000000000000000000000000000000000000..c5786611f3dcc2d23c68e97c8cd393e63dcf196f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/preferences.h @@ -0,0 +1,41 @@ +/* global info for the preferences facility. + * N.B. many of these enums are used as indexes -- don't change without + * checking where they are used! + */ +#ifndef _PREFERENCES_H +#define _PREFERENCES_H + +#ifdef __cplusplus +extern "C" { +#endif + +// all of your legacy C code here + + +typedef enum { + PREF_EQUATORIAL, PREF_UNITS, PREF_DATE_FORMAT, PREF_ZONE, PREF_DPYPREC, + PREF_MSG_BELL, PREF_PRE_FILL, PREF_TIPS, PREF_CONFIRM, PREF_WEEKSTART, + NPREFS +} Preferences; + +typedef enum {PREF_GEO, PREF_TOPO} PrefEquatorial; +typedef enum {PREF_ENGLISH, PREF_METRIC} PrefUnits; +typedef enum {PREF_MDY, PREF_YMD, PREF_DMY} PrefDateFormat; +typedef enum {PREF_LOCALTZ, PREF_UTCTZ} PrefStampZone; +typedef enum {PREF_LOPREC, PREF_HIPREC} PrefDpyPrec; +typedef enum {PREF_NOMSGBELL, PREF_MSGBELL} PrefMsgBell; +typedef enum {PREF_PREFILL, PREF_NOPREFILL} PrefPreFill; +typedef enum {PREF_TIPSON, PREF_NOTIPS} PrefTips; +typedef enum {PREF_CONFIRMON, PREF_NOCONFIRM} PrefConfirm; +typedef enum {PREF_SAT, PREF_SUN, PREF_MON} PrefWeekStart; + +extern int pref_get (Preferences p); +extern int pref_set (Preferences p, int newp); +#ifdef __cplusplus +} +#endif +#endif /* _PREFERENCES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: preferences.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/satlib.h b/Common/Libraries/XEphemAstroLib/include/satlib.h new file mode 100644 index 0000000000000000000000000000000000000000..31c34675ccbf49c3d0b622fdb927c4d97a586381 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/satlib.h @@ -0,0 +1,206 @@ +#ifndef __SATLIB_H +#define __SATLIB_H + +/* $Id: satlib.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _SatElem { + float se_XMO; + float se_XNODEO; + float se_OMEGAO; + float se_EO; + float se_XINCL; + float se_XNDD60; + float se_BSTAR; + float pad1; + double se_XNO; + double se_XNDT20; + double se_EPOCH; + struct { + unsigned int catno : 21; + unsigned int classif : 5; + unsigned int elnum : 10; + unsigned int year : 14; + unsigned int launch : 10; + unsigned int piece : 15; + unsigned int ephtype : 4; + unsigned int orbit : 17; + } se_id; +} SatElem; + +#if 0 +struct sat_loc { + double sl_X; + double sl_XDOT; + double sl_Y; + double sl_YDOT; + double sl_Z; + double sl_ZDOT; +}; +#endif + +struct sgp4_data { + unsigned int sgp4_flags; + unsigned int pad; + double sgp4_AODP; + double sgp4_AYCOF; + double sgp4_C1; + double sgp4_C4; + double sgp4_C5; + double sgp4_COSIO; + double sgp4_D2; + double sgp4_D3; + double sgp4_D4; + double sgp4_DELMO; + double sgp4_ETA; + double sgp4_OMGCOF; + double sgp4_OMGDOT; + double sgp4_SINIO; + double sgp4_SINMO; + double sgp4_T2COF; + double sgp4_T3COF; + double sgp4_T4COF; + double sgp4_T5COF; + double sgp4_X1MTH2; + double sgp4_X3THM1; + double sgp4_X7THM1; + double sgp4_XLCOF; + double sgp4_XMCOF; + double sgp4_XMDOT; + double sgp4_XNODCF; + double sgp4_XNODOT; + double sgp4_XNODP; +}; + +struct deep_data { + struct { + unsigned int IRESFL : 1; + unsigned int ISYNFL : 1; + } deep_flags; + double deep_s_SINIQ; + double deep_s_COSIQ; + double deep_s_OMGDT; + double deep_ATIME; + double deep_D2201; + double deep_D2211; + double deep_D3210; + double deep_D3222; + double deep_D4410; + double deep_D4422; + double deep_D5220; + double deep_D5232; + double deep_D5421; + double deep_D5433; + double deep_DEL1; + double deep_DEL2; + double deep_DEL3; + double deep_E3; + double deep_EE2; + double deep_FASX2; + double deep_FASX4; + double deep_FASX6; + double deep_OMEGAQ; + double deep_PE; + double deep_PINC; + double deep_PL; + double deep_SAVTSN; + double deep_SE2; + double deep_SE3; + double deep_SGH2; + double deep_SGH3; + double deep_SGH4; + double deep_SGHL; + double deep_SGHS; + double deep_SH2; + double deep_SH3; + double deep_SHS; + double deep_SHL; + double deep_SI2; + double deep_SI3; + double deep_SL2; + double deep_SL3; + double deep_SL4; + double deep_SSE; + double deep_SSG; + double deep_SSH; + double deep_SSI; + double deep_SSL; + double deep_STEP2; + double deep_STEPN; + double deep_STEPP; + double deep_THGR; + double deep_XFACT; + double deep_XGH2; + double deep_XGH3; + double deep_XGH4; + double deep_XH2; + double deep_XH3; + double deep_XI2; + double deep_XI3; + double deep_XL2; + double deep_XL3; + double deep_XL4; + double deep_XLAMO; + double deep_XLI; + double deep_XNI; + double deep_XNQ; + double deep_XQNCL; + double deep_ZMOL; + double deep_ZMOS; +}; + +struct sdp4_data { + double sdp4_AODP; /* dpa */ + double sdp4_AYCOF; + double sdp4_BETAO; /* dpa */ + double sdp4_BETAO2; /* dpa */ + double sdp4_C1; + double sdp4_C4; + double sdp4_COSG; /* dpa */ + double sdp4_COSIO; /* dpa */ + double sdp4_EOSQ; /* dpa */ + double sdp4_OMGDOT; /* dpa */ + double sdp4_SING; /* dpa */ + double sdp4_SINIO; /* dpa */ + double sdp4_T2COF; + double sdp4_THETA2; /* dpa */ + double sdp4_X1MTH2; + double sdp4_X3THM1; + double sdp4_X7THM1; + double sdp4_XLCOF; + double sdp4_XMDOT; /* dpa */ + double sdp4_XNODCF; + double sdp4_XNODOT; /* dpa */ + double sdp4_XNODP; /* dpa */ + + double sdp4_XMDF_seco; + double sdp4_OMGADF_seco; + double sdp4_XNODE_seco; + double sdp4_EM_seco; + double sdp4_XINC_seco; + double sdp4_XN_seco; + + double sdp4_E_pero; + double sdp4_XINC_pero; + double sdp4_OMGADF_pero; + double sdp4_XNODE_pero; + double sdp4_XMAM_pero; +}; + +typedef struct _SatData { + struct _SatElem *elem; + union { + struct sgp4_data *sgp4; + struct sdp4_data *sdp4; + } prop; + struct deep_data *deep; +} SatData; + +void sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double t); + +void sdp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE); + +#endif /* __SATLIB_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satlib.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/satspec.h b/Common/Libraries/XEphemAstroLib/include/satspec.h new file mode 100644 index 0000000000000000000000000000000000000000..0986dd7890972fe85878b1eab7a8c5336d0655a4 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/satspec.h @@ -0,0 +1,43 @@ +#ifndef __SATSPEC_H +#define __SATSPEC_H + +/* $Id: satspec.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#include "sattypes.h" +#include "satlib.h" + +#define SGP4_SIMPLE 0x00000001 + +extern void init_deep(struct deep_data *deep); +void init_sdp4(struct sdp4_data *sdp); +char *tleerr(int); +int readtle(char *, char *, SatElem *); + +double current_jd(); + +double ut1_to_gha(double); + +void smallsleep(double t); + +double epoch_jd(double); + +double actan(double sinx, double cosx); + +double thetag(double EP, double *DS50); + +void dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ, + double RTEQSQ, double AO, double COSQ2, double SINOMO, + double COSOMO, double BSQ, double XLLDOT, double OMGDT, + double XNODOT, double XNODP); + +void dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES, + double *EM, double *XINC, double *XN, double T); + +void dpper(SatData *sat, double *EM, double *XINC, double *OMGASM, + double *XNODES, double *XLL, double T); + +#endif /* __SATSPEC_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satspec.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/sattypes.h b/Common/Libraries/XEphemAstroLib/include/sattypes.h new file mode 100644 index 0000000000000000000000000000000000000000..61891ff0369d3321dba92d740e508cde033dd8e3 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/sattypes.h @@ -0,0 +1,28 @@ +#ifndef __SATTYPES_H +#define __SATTYPES_H + +/* $Id: sattypes.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _Vec3 { + double x, y, z; +} Vec3; + + +typedef struct _LookAngle { + double az; + double el; + double r; +} LookAngle; + + +typedef struct _Geoloc { + double lt; + double ln; + double h; +} GeoLoc; + +#endif /* __SATTYPES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: sattypes.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/vector.h b/Common/Libraries/XEphemAstroLib/include/vector.h new file mode 100644 index 0000000000000000000000000000000000000000..be1ec56c2ef91136b486d5b8b2a1bdf73b390170 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/vector.h @@ -0,0 +1,19 @@ +#ifndef __SATVECTOR_H +#define __SATVECTOR_H + +/* $Id: vector.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#define dotp(A,B) ((A).x*(B).x+(A).y*(B).y+(A).z*(B).z) + +#define crossp(A,B,C) {(C).x=(A).y*(B).z-(A).z*(B).y;(C).y=(A).z*(B).x-(A).x*(B).z;(C).z=(A).x*(B).y-(A).y*(B).x;} + +#define vecabs(V) (sqrt((V).x*(V).x+(V).y*(V).y+(V).z*(V).z)) +#define vecsq(V) ((V).x*(V).x+(V).y*(V).y+(V).z*(V).z) +#define vecsub(A,B,C) {(C).x=(A).x-(B).x;(C).y=(A).y-(B).y;(C).z=(A).z-(B).z;} +#define vecscale(A,k) {(A).x*=(k);(A).y*=(k);(A).z*=(k);} + +#endif /* __SATVECTOR_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vector.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/include/vsop87.h b/Common/Libraries/XEphemAstroLib/include/vsop87.h new file mode 100644 index 0000000000000000000000000000000000000000..b5cb958f520f8a8f645a2218338a0a6e8e5bbefd --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/include/vsop87.h @@ -0,0 +1,93 @@ +/* Position of planets mercury to neptune; from: +ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/ +from README: + +========================== =========================== + BUREAU DES LONGITUDES + PLANETARY SOLUTION VSOP87 + 1996, January +========================== =========================== + +These files and programs are associated to : + +Planetary Theories in rectangular and spherical variables: VSOP87 solution. + Bretagnon P., Francou G. + Astron. Astrophys. 202, 309 (1988). + +Theorie du mouvement de l'ensemble des planetes (VSOP82). + Bretagnon P. + Astron. Astrophys. 114, 278 (1982). + +============================================================================== + +Description: + The Planetary solutions VSOP87 (Variations Seculaires des Orbites + Planetaires) are analytical solutions of the motion of the planets in + different versions. The main version VSOP87 consists of the series in + elliptic elements as in the case of VSOP82 solution and the other + versions VSOP87 (A-B-C-D-E) are built in rectangular and spherical + variables. + +Authors' Address: + P. Bretagnon, G. Francou + Bureau des Longitudes, CNRS URA 707 + 77, Avenue Denfert-Rochereau + 75014, Paris, France + Tel : (33) 1 40 51 22 69 (33) 1 40 51 22 60 + Fax : (33) 1 46 33 28 34 + E-mail : pierre@bdl.fr francou@bdl.fr + +Contents: + The main version of VSOP87 is similar to the previous theory VSOP82. + In the both cases the constants of integration have been determined by + fitting to the numerical integration DE200 of the Jet Propulsion + Laboratory. The various versions of VSOP87 are different from one to + another in the type of coordinates and the reference frame. + VSOP87 : heliocentric elliptic variables; equinox and ecliptic J2000. + VSOP87A : heliocentric rectangular variables; equinox and ecliptic J2000. + VSOP87B : heliocentric spherical variables; equinox and ecliptic J2000. + VSOP87C : heliocentric rectangular variables; equinox and ecliptic of date. + VSOP87D : heliocentric spherical variables; equinox and ecliptic of date. + VSOP87E : barycentric rectangular variables; equinox and ecliptic J2000. +... +============================================================================== +User feed-back is encouraged. Unless otherwise specified, send comments and bug +reports to: E-mail : comments@bdl.fr + Fax : (33) 1 46 33 28 34 + Postal mail: Bureau des longitudes + 77 avenue Denfert Rochereau + F-75014 PARIS +============================================================================== + implemented for C: stern +*/ + +#define VSOP_ASCALE 1e8 /* amplitude factor as stored */ + +/* coding flags */ +#define VSOP_SPHERICAL 1 /* version in data.c uses spherical coords */ +#define VSOP_GETRATE 0 /* calculate time derivatives of coordinates */ + +/* data tables */ +extern double vx_mercury[][3]; +extern int vn_mercury[][3]; +extern double vx_venus[][3]; +extern int vn_venus[][3]; +extern double vx_earth[][3]; +extern int vn_earth[][3]; +extern double vx_mars[][3]; +extern int vn_mars[][3]; +extern double vx_jupiter[][3]; +extern int vn_jupiter[][3]; +extern double vx_saturn[][3]; +extern int vn_saturn[][3]; +extern double vx_uranus[][3]; +extern int vn_uranus[][3]; +extern double vx_neptune[][3]; +extern int vn_neptune[][3]; + +extern int vsop87 (double mj, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vsop87.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/Makefile b/Common/Libraries/XEphemAstroLib/src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0e1eb839e269c305c431da6acd0b5c312ac0444d --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/Makefile @@ -0,0 +1,253 @@ + +#******************************************************************************* +# ALMA - Atacama Large Millimiter Array +# Copyright (c) UNSPECIFIED - FILL IN, 2021 +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# "@(#) $Id$" +# +# Makefile of ........ +# +# who when what +# -------- -------- ---------------------------------------------- +# SPOPPI 2021-06-29 created +# + +# ALMA - Atacama Large Millimeter Array +# Copyright (c) ESO - European Southern Observatory, 2014 +# (in the framework of the ALMA collaboration). +# All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#******************************************************************************* + +#******************************************************************************* +# This Makefile follows ALMA/ACS Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +# +# user definable C-compilation flags +USER_CFLAGS = -c -pedantic -Wall + +# +# additional include and library search paths +#USER_INC = +USER_LIB = -lm + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- +EXECUTABLES = +EXECUTABLES_L = + +# +# +astro_OBJECTS = aa_hadec aberration actan \ + airmass anomaly ap_as atlas auxil \ + bdl chap95 chap95_data circum comet constel \ + dbfmt deep deltat earthsat eq_ecl eq_gal \ + formats helio jupmoon libration magdecl marsmoon \ + misc mjd moon mooncolong moonnf nutation obliq \ + parallactic parallax plans plmoon plshadow precess \ + reduce refract rings riset riset_cir satmoon sdp4\ + sgp4 sphcart sun thetag twobody umoon utc_gst vsop87 vsop87_data + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +INCLUDES = astro.h chap95.h preferences.h satspec.h vector.h \ + bdl.h deepconst.h satlib.h sattypes.h vsop87.h + + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = astro +LIBRARIES_L = + +# +# +lllll_OBJECTS = + +# +# Scripts (public and local) +# ---------------------------- +SCRIPTS = +SCRIPTS_L = + +# +# TCL scripts (public and local) +# ------------------------------ +TCL_SCRIPTS = +TCL_SCRIPTS_L = + +# +# Python stuff (public and local) +# ---------------------------- +PY_SCRIPTS = +PY_SCRIPTS_L = + +PY_MODULES = +PY_MODULES_L = + +PY_PACKAGES = +PY_PACKAGES_L = +pppppp_MODULES = + +# +# +tttttt_OBJECTS = +tttttt_TCLSH = +tttttt_LIBS = + +# +# TCL libraries (public and local) +# ------------------------------ +TCL_LIBRARIES = +TCL_LIBRARIES_L = + +# +# +tttlll_OBJECTS = + +# +# Configuration Database Files +# ---------------------------- +CDB_SCHEMAS = + +# +# IDL Files and flags +# +IDL_FILES = +TAO_IDLFLAGS = +USER_IDL = +# +# Jarfiles and their directories +# +JARFILES= +jjj_DIRS= +jjj_EXTRAS= +# For expressing dependencies between jarfiles (parallel builds) +jjj_JLIBS= +# +# java sources in Jarfile on/off +DEBUG= +# +# ACS XmlIdl generation on/off +# +XML_IDL= +# +# Java Component Helper Classes generation on/off +# +COMPONENT_HELPERS= +# +# Java Entity Classes generation on/off +# +XSDBIND= +# +# Schema Config files for the above +# +XSDBIND_INCLUDE= +# man pages to be done +# -------------------- +MANSECTIONS = +MAN1 = +MAN3 = +MAN5 = +MAN7 = +MAN8 = + +# +# local man pages +# --------------- +MANl = + +# +# ASCII file to be converted into Framemaker-MIF +# -------------------- +ASCII_TO_MIF = + +# +# other files to be installed +#---------------------------- +INSTALL_FILES = + +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach rtos, $(RTAI_MODULES) , $($(rtos)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# INCLUDE STANDARDS +# ----------------- + +MAKEDIRTMP := $(shell searchFile include/acsMakefile) +ifneq ($(MAKEDIRTMP),\#error\#) + MAKEDIR := $(MAKEDIRTMP)/include + include $(MAKEDIR)/acsMakefile +endif + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + + +#___oOo___ diff --git a/Common/Libraries/XEphemAstroLib/src/a.out b/Common/Libraries/XEphemAstroLib/src/a.out new file mode 100644 index 0000000000000000000000000000000000000000..b53e559fff301498abe59a1e4864ec5d0bdf55de Binary files /dev/null and b/Common/Libraries/XEphemAstroLib/src/a.out differ diff --git a/Common/Libraries/XEphemAstroLib/src/aa_hadec.c b/Common/Libraries/XEphemAstroLib/src/aa_hadec.c new file mode 100644 index 0000000000000000000000000000000000000000..29a2b6e241c75bbed427aaca7f7ed3c5a95f6953 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/aa_hadec.c @@ -0,0 +1,77 @@ +/* function to convert between alt/az and ha/dec. + */ + +#include +#include + +#include "astro.h" + +static void aaha_aux (double lt, double x, double y, double *p, double *q); + +/* given geographical latitude (n+, radians), lt, altitude (up+, radians), + * alt, and azimuth (angle round to the east from north+, radians), + * return hour angle (radians), ha, and declination (radians), dec. + */ +void +aa_hadec ( +double lt, +double alt, double az, +double *ha, double *dec) +{ + aaha_aux (lt, az, alt, ha, dec); + if (*ha > PI) + *ha -= 2*PI; +} + +/* given geographical (n+, radians), lt, hour angle (radians), ha, and + * declination (radians), dec, return altitude (up+, radians), alt, and + * azimuth (angle round to the east from north+, radians), + */ +void +hadec_aa ( +double lt, +double ha, double dec, +double *alt, double *az) +{ + aaha_aux (lt, ha, dec, az, alt); +} + +#ifdef NEED_GEOC +/* given a geographic (surface-normal) latitude, phi, return the geocentric + * latitude, psi. + */ +double +geoc_lat ( +double phi) +{ +#define MAXLAT degrad(89.9999) /* avoid tan() greater than this */ + return (fabs(phi)>MAXLAT ? phi : atan(tan(phi)/1.00674)); +} +#endif + +/* the actual formula is the same for both transformation directions so + * do it here once for each way. + * N.B. all arguments are in radians. + */ +static void +aaha_aux ( +double lt, +double x, double y, +double *p, double *q) +{ + static double last_lt = -3434, slt, clt; + double cap, B; + + if (lt != last_lt) { + slt = sin(lt); + clt = cos(lt); + last_lt = lt; + } + + solve_sphere (-x, PI/2-y, slt, clt, &cap, &B); + *p = B; + *q = PI/2 - acos(cap); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: aa_hadec.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/aberration.c b/Common/Libraries/XEphemAstroLib/src/aberration.c new file mode 100644 index 0000000000000000000000000000000000000000..af55df3828b1db0fc7e8d0ac01d65d0c4d4f8187 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/aberration.c @@ -0,0 +1,161 @@ +/* aberration, Jean Meeus, "Astronomical Algorithms", Willman-Bell, 1995; + * based on secular unperturbed Kepler orbit + * + * the corrections should be applied to ra/dec and lam/beta at the + * epoch of date. + */ + +#include +#include +#include + +#include "astro.h" + +#define ABERR_CONST (20.49552/3600./180.*PI) /* aberr const in rad */ +#define AB_ECL_EOD 0 +#define AB_EQ_EOD 1 + +static void ab_aux (double mj, double *x, double *y, double lsn, int mode); + +/* apply aberration correction to ecliptical coordinates *lam and *bet + * (in radians) for a given time m and handily supplied longitude of sun, + * lsn (in radians) + */ +void +ab_ecl (double mj, double lsn, double *lam, double *bet) +{ + ab_aux(mj, lam, bet, lsn, AB_ECL_EOD); +} + +/* apply aberration correction to equatoreal coordinates *ra and *dec + * (in radians) for a given time m and handily supplied longitude of sun, + * lsn (in radians) + */ +void +ab_eq (double mj, double lsn, double *ra, double *dec) +{ +#if defined(USE_MEEUS_AB_EQ) + + /* this claims to account for earth orbit excentricity and is also + * smooth clear to dec=90 but it does not work well backwards with + * ap_as() + */ + ab_aux(mj, ra, dec, lsn, AB_EQ_EOD); + +#else /* use Montenbruck */ + + /* this agrees with Meeus to within 0.2 arcsec until dec gets larger + * than about 89.9, then grows to 1as at 89.97. but it works very + * smoothly with ap_as + */ + double x, y, z; /* equatorial rectangular coords */ + double vx, vy, vz; /* aberration velocity in rectangular coords */ + double L; /* helio long of earth */ + double cL; + double r; + + + sphcart (*ra, *dec, 1.0, &x, &y, &z); + + L = 2*PI*(0.27908 + 100.00214*(mj-J2000)/36525.0); + cL = cos(L); + vx = -0.994e-4*sin(L); + vy = 0.912e-4*cL; + vz = 0.395e-4*cL; + x += vx; + y += vy; + z += vz; + + cartsph (x, y, z, ra, dec, &r); + +#endif +} + +/* because the e-terms are secular, keep the real transformation for both + * coordinate systems in here with the secular variables cached. + * mode == AB_ECL_EOD: x = lam, y = bet (ecliptical) + * mode == AB_EQ_EOD: x = ra, y = dec (equatoreal) + */ +static void +ab_aux (double mj, double *x, double *y, double lsn, int mode) +{ + static double lastmj = -10000; + static double eexc; /* earth orbit excentricity */ + static double leperi; /* ... and longitude of perihelion */ + static char dirty = 1; /* flag for cached trig terms */ + + if (mj != lastmj) { + double T; /* centuries since J2000 */ + + T = (mj - J2000)/36525.; + eexc = 0.016708617 - (42.037e-6 + 0.1236e-6 * T) * T; + leperi = degrad(102.93735 + (0.71953 + 0.00046 * T) * T); + lastmj = mj; + dirty = 1; + } + + switch (mode) { + case AB_ECL_EOD: /* ecliptical coords */ + { + double *lam = x, *bet = y; + double dlsun, dlperi; + + dlsun = lsn - *lam; + dlperi = leperi - *lam; + + /* valid only for *bet != +-PI/2 */ + *lam -= ABERR_CONST/cos(*bet) * (cos(dlsun) - + eexc*cos(dlperi)); + *bet -= ABERR_CONST*sin(*bet) * (sin(dlsun) - + eexc*sin(dlperi)); + } + break; + + case AB_EQ_EOD: /* equatoreal coords */ + { + double *ra = x, *dec = y; + double sr, cr, sd, cd, sls, cls;/* trig values coords */ + static double cp, sp, ce, se; /* .. and perihel/eclipic */ + double dra, ddec; /* changes in ra and dec */ + + if (dirty) { + double eps; + + cp = cos(leperi); + sp = sin(leperi); + obliquity(mj, &eps); + se = sin(eps); + ce = cos(eps); + dirty = 0; + } + + sr = sin(*ra); + cr = cos(*ra); + sd = sin(*dec); + cd = cos(*dec); + sls = sin(lsn); + cls = cos(lsn); + + dra = ABERR_CONST/cd * ( -(cr * cls * ce + sr * sls) + + eexc * (cr * cp * ce + sr * sp)); + + ddec = se/ce * cd - sr * sd; /* tmp use */ + ddec = ABERR_CONST * ( -(cls * ce * ddec + cr * sd * sls) + + eexc * (cp * ce * ddec + cr * sd * sp) ); + + *ra += dra; + *dec += ddec; + radecrange (ra, dec); + } + break; + + default: + printf ("ab_aux: bad mode: %d\n", mode); + abort(); + break; + + } /* switch (mode) */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: aberration.c,v $ $Date: 2006/08/28 00:22:26 $ $Revision: 1.6 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/actan.c b/Common/Libraries/XEphemAstroLib/src/actan.c new file mode 100644 index 0000000000000000000000000000000000000000..a04725ba1d20a623c4272310cbdbc636e5c849bb --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/actan.c @@ -0,0 +1,67 @@ +#include + +/* @(#) $Id: actan.c,v 1.3 2001/01/10 16:32:21 ecdowney Exp $ */ + +/* commonly in math.h, but not in strict ANSI C */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#endif + +double +actan(double sinx, double cosx) +{ + double ret; + + ret = 0.0; + if(cosx < 0.0) { + ret = M_PI; + } else if(cosx == 0.0) { + if(sinx < 0.0) { + return 3.0 * M_PI_2; + } else if(sinx == 0.0) { + return ret; + } else /* sinx > 0.0 */ { + return M_PI_2; + } + } else /* cosx > 0.0 */ { + if(sinx < 0.0) { + ret = 2.0 * M_PI; + } else if(sinx == 0.0) { + return ret; + } + } + + return ret + atan(sinx / cosx); +} + + +#if 0 + +#define D(X) (180.0 * (X) / M_PI) + +void main() { + double a, b; + + a = 0.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 1.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 0.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = -1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 1.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 0.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -1.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = -1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 0.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -1.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); +} + +#endif /* 0 */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: actan.c,v $ $Date: 2001/01/10 16:32:21 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/airmass.c b/Common/Libraries/XEphemAstroLib/src/airmass.c new file mode 100644 index 0000000000000000000000000000000000000000..a5d046fe66a4f7abaf6a580fb31347e1a4c45736 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/airmass.c @@ -0,0 +1,26 @@ +#include + +#include "astro.h" + +/* given apparent altitude find airmass. + * R.H. Hardie, 1962, `Photoelectric Reductions', Chapter 8 of Astronomical + * Techniques, W.A. Hiltner (Ed), Stars and Stellar Systems, II (University + * of Chicago Press: Chicago), pp178-208. + */ +void +airmass ( +double aa, /* apparent altitude, rads */ +double *Xp) /* airmasses */ +{ + double sm1; /* secant zenith angle, minus 1 */ + + /* degenerate near or below horizon */ + if (aa < degrad(3.0)) + aa = degrad(3.0); + + sm1 = 1.0/sin(aa) - 1.0; + *Xp = 1.0 + sm1*(0.9981833 - sm1*(0.002875 + 0.0008083*sm1)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: airmass.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/anomaly.c b/Common/Libraries/XEphemAstroLib/src/anomaly.c new file mode 100644 index 0000000000000000000000000000000000000000..c6bc8ebe5417f4c70045453744604e2055a86d3c --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/anomaly.c @@ -0,0 +1,63 @@ +/* improved by rclark@lpl.arizona.edu (Richard Clark) */ + +#include +#include + +#include "astro.h" + + +#define TWOPI (2*PI) +#define STOPERR (1e-8) + +/* given the mean anomaly, ma, and the eccentricity, s, of elliptical motion, + * find the true anomaly, *nu, and the eccentric anomaly, *ea. + * all angles in radians. + */ +void +anomaly (double ma, double s, double *nu, double *ea) +{ + double m, fea, corr; + + if (s < 1.0) { + /* elliptical */ + double dla; + + m = ma-TWOPI*(long)(ma/TWOPI); + if (m > PI) m -= TWOPI; + if (m < -PI) m += TWOPI; + fea = m; + + for (;;) { + dla = fea-(s*sin(fea))-m; + if (fabs(dla).97 and M near 0*/ + corr = 1-(s*cos(fea)); + if (corr < .1) corr = .1; + dla /= corr; + fea -= dla; + } + *nu = 2*atan(sqrt((1+s)/(1-s))*tan(fea/2)); + } else { + /* hyperbolic */ + double fea1; + + m = fabs(ma); + fea = m / (s-1.); + fea1 = pow(6*m/(s*s),1./3.); + /* whichever is smaller is the better initial guess */ + if (fea1 < fea) fea = fea1; + + corr = 1; + while (fabs(corr) > STOPERR) { + corr = (m - s * sinh(fea) + fea) / (s*cosh(fea) - 1); + fea += corr; + } + if (ma < 0.) fea = -fea; + *nu = 2*atan(sqrt((s+1)/(s-1))*tanh(fea/2)); + } + *ea = fea; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: anomaly.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/ap_as.c b/Common/Libraries/XEphemAstroLib/src/ap_as.c new file mode 100644 index 0000000000000000000000000000000000000000..64619fec94c0c0fa2a98f9cf9ed0399fb7da960d --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/ap_as.c @@ -0,0 +1,68 @@ +#include +#include + +#include "astro.h" + +/* convert the given apparent RA/Dec to astrometric precessed to Mjd IN PLACE. + * we have no un-abberation etc so to find the correction: assume + * *rap and *decp are astrometric@EOD, convert to apparent and back out + * the difference; then precess to Mjd. + */ +void +ap_as (Now *np, double Mjd, double *rap, double *decp) +{ + double r0 = *rap, d0 = *decp; + Obj o; + Now n; + + /* as -> ap */ + zero_mem ((void *)&o, sizeof(o)); + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap -= o.s_ra - *rap; + *decp -= o.s_dec - *decp; + + /* then back to start for second order correction */ + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap -= o.s_ra - r0; + *decp -= o.s_dec - d0; + + radecrange (rap, decp); + precess (mjd, Mjd, rap, decp); + radecrange (rap, decp); +} + +/* convert the given astrometric RA/Dec which are precessed to Mjd into + * apparent @ EOD IN PLACE. + */ +void +as_ap (Now *np, double Mjd, double *rap, double *decp) +{ + Obj o; + Now n; + + zero_mem ((void *)&o, sizeof(o)); + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)Mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap = o.s_ra; + *decp = o.s_dec; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: ap_as.c,v $ $Date: 2006/08/28 00:20:58 $ $Revision: 1.8 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/astro.h b/Common/Libraries/XEphemAstroLib/src/astro.h new file mode 100644 index 0000000000000000000000000000000000000000..a060b683ef4e1dea94c20bfeb686f2de5cc1a8d0 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/astro.h @@ -0,0 +1,824 @@ +#ifndef _ASTRO_H +#define _ASTRO_H + +#include + +#ifndef PI +#define PI 3.141592653589793 +#endif + +/* conversions among hours (of ra), degrees and radians. */ +#define degrad(x) ((x)*PI/180.) +#define raddeg(x) ((x)*180./PI) +#define hrdeg(x) ((x)*15.) +#define deghr(x) ((x)/15.) +#define hrrad(x) degrad(hrdeg(x)) +#define radhr(x) deghr(raddeg(x)) + +/* ratio of from synodic (solar) to sidereal (stellar) rate */ +#define SIDRATE .9972695677 + +/* manifest names for planets. + * N.B. must coincide with usage in pelement.c and plans.c. + * N.B. only the first 8 are valid for use with plans(). + */ + +#ifdef __cplusplus +extern "C" { +#endif + +// all of your legacy C code here + + + + +typedef enum { + MERCURY, + VENUS, + MARS, + JUPITER, + SATURN, + URANUS, + NEPTUNE, + PLUTO, + SUN, + MOON, + NOBJ /* total number of basic objects */ +} PLCode; + +/* moon constants for pl_moon */ +typedef enum { + X_PLANET = 0, /* use to mean planet itself */ + PHOBOS = NOBJ, DEIMOS, + IO, EUROPA, GANYMEDE, CALLISTO, + MIMAS, ENCELADUS, TETHYS, DIONE, RHEA, TITAN, HYPERION, IAPETUS, + ARIEL, UMBRIEL, TITANIA, OBERON, MIRANDA, + NBUILTIN +} MCode; + +/* starting point for MJD calculations + */ +#define MJD0 2415020.0 +#define J2000 (2451545.0 - MJD0) /* yes, 2000 January 1 at 12h */ + +/* the Now and Obj typedefs. + * also, a few miscellaneous constants and declarations. + */ + +#define SPD (24.0*3600.0) /* seconds per day */ +#define MAU (1.4959787e11) /* m / au */ +#define LTAU 499.005 /* seconds light takes to travel 1 AU */ +#define ERAD (6.37816e6) /* earth equitorial radius, m */ +#define MRAD (1.740e6) /* moon equitorial radius, m */ +#define SRAD (6.95e8) /* sun equitorial radius, m */ +#define FTPM 3.28084 /* ft per m */ +#define ESAT_MAG 2 /* default satellite magnitude */ +#define FAST_SAT_RPD 0.25 /* max earth sat rev/day considered "fast" */ + +#define EOD (-9786) /* special epoch flag: use epoch of date */ + +/* info about the local observing circumstances and misc preferences */ +typedef struct { + double n_mjd; /* modified Julian date, ie, days since + * Jan 0.5 1900 (== 12 noon, Dec 30, 1899), utc. + * enough precision to get well better than 1 second. + * N.B. if not first member, must move NOMJD inits. + */ + double n_lat; /* geographic (surface-normal) lt, >0 north, rads */ + double n_lng; /* longitude, >0 east, rads */ + double n_tz; /* time zone, hrs behind UTC */ + double n_temp; /* atmospheric temp, degrees C */ + double n_pressure; /* atmospheric pressure, mBar */ + double n_elev; /* elevation above sea level, earth radii */ + double n_dip; /* dip of sun below hzn at twilight, >0 below, rads */ + double n_epoch; /* desired precession display ep as an mjd, or EOD */ + char n_tznm[8]; /* time zone name; 7 chars or less, always 0 at end */ +} Now; + +/* handy shorthands for fields in a Now pointer, np */ +#define mjd np->n_mjd +#define lat np->n_lat +#define lng np->n_lng +#define tz np->n_tz +#define temp np->n_temp +#define pressure np->n_pressure +#define elev np->n_elev +#define dip np->n_dip +#define epoch np->n_epoch +#define tznm np->n_tznm +#define mjed mm_mjed(np) + +/* structures to describe objects of various types. + */ + +/* magnitude values in two different systems */ +typedef struct { + float m1, m2; /* either g/k or H/G, depending on... */ + int whichm; /* one of MAG_gk or MAG_HG */ +} Mag; + +/* whichm */ +#define MAG_HG 0 /* using 0 makes HG the initial default */ +#define MAG_gk 1 + +/* we actually store magnitudes times this scale factor in a short int */ +#define MAGSCALE 100.0 +#define set_smag(op,m) ((op)->s_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define set_fmag(op,m) ((op)->f_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define get_mag(op) ((op)->s_mag / MAGSCALE) +#define get_fmag(op) ((op)->f_mag / MAGSCALE) + +/* longest object name, including trailing '\0' */ +#define MAXNM 21 + +typedef unsigned char ObjType_t; +typedef unsigned char ObjAge_t; +typedef unsigned char byte; + +/* Obj is a massive union. + * many fields are in common so we use macros to make things a little easier. + */ + +/* fields common to *all* structs in the Obj union */ +#define OBJ_COMMON_FLDS \ + ObjType_t co_type; /* current object type; see flags, below */ \ + byte co_flags; /* FUSER*... used by others */ \ + ObjAge_t co_age; /* update aging code; see db.c */ \ + char co_name[MAXNM];/* name, including \0 */ \ + float co_ra; /* geo/topo app/mean ra, rads */ \ + float co_dec; /* geo/topo app/mean dec, rads */ \ + float co_gaera; /* geo apparent ra, rads */ \ + float co_gaedec; /* geo apparent dec, rads */ \ + float co_az; /* azimuth, >0 e of n, rads */ \ + float co_alt; /* altitude above topocentric horizon, rads */ \ + float co_elong; /* angular sep btwen obj and sun, >0 E, degs */ \ + float co_size; /* angular size, arc secs */ \ + short co_mag /* visual magnitude * MAGSCALE */ + +/* fields common to all solar system objects in the Obj union */ +#define OBJ_SOLSYS_FLDS \ + OBJ_COMMON_FLDS; /* all the fixed ones plus ... */ \ + float so_sdist; /* dist from object to sun, au */ \ + float so_edist; /* dist from object to earth, au */ \ + float so_hlong; /* heliocentric longitude, rads */ \ + float so_hlat; /* heliocentric latitude, rads */ \ + float so_phase /* phase, % */ + +/* fields common to all fixed objects in the Obj union */ +#define OBJ_FIXED_FLDS \ + char fo_spect[2]; /* spectral codes, if appropriate */ \ + float fo_epoch; /* eq of ra/dec and time when pm=0; mjd */ \ + float fo_ra; /* ra, rads, in epoch frame */ \ + float fo_dec; /* dec, rads, in epoch frame */ \ + float fo_pmra; /* ra proper motion, rads/day/cos(dec) */ \ + float fo_pmdec; /* dec proper motion, rads/day */ \ + char fo_class /* object class */ + +/* a generic object */ +typedef struct { + OBJ_COMMON_FLDS; +} ObjAny; + +/* a generic sol system object */ +typedef struct { + OBJ_SOLSYS_FLDS; +} ObjSS; + +/* basic Fixed object info. + */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + /* following are for galaxies */ + byte fo_ratio; /* minor/major diameter ratio. use s/get_ratio() */ + byte fo_pa; /* position angle, E of N, rads. use s/get_pa() */ +} ObjF; + +/* true-orbit parameters of binary-star object type */ +typedef struct { + float bo_T; /* epoch of periastron, years */ + float bo_e; /* eccentricity */ + float bo_o; /* argument of periastron, degress */ + float bo_O; /* longitude of node, degrees */ + float bo_i; /* inclination to plane of sky, degrees */ + float bo_a; /* semi major axis, arc secs */ + float bo_P; /* period, years */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bo_pa; /* position angle @ ep, rads E of N */ + float bo_sep; /* separation @ ep, arc secs */ + float bo_ra; /* geo/topo app/mean ra, rads */ + float bo_dec; /* geo/topo app/mean dec, rads */ +} BinOrbit; +typedef struct { + float bp_ep; /* epoch of pa/sep, year */ + float bp_pa; /* position angle @ ep, rads E of N */ + float bp_sep; /* separation @ ep, arc secs */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bp_ra; /* geo/topo app/mean ra, rads */ + float bp_dec; /* geo/topo app/mean dec, rads */ +} BinPos; +#define MAXBINPOS 2 /* max discrete epochs to store when no elements */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + byte b_2compute; /* whether to compute secondary positions */ + byte b_nbp; /* number of b_bp[] or 0 to use b_bo */ + short b_2mag; /* secondary's magnitude * MAGSCALE */ + char b_2spect[2]; /* secondary's spectrum */ + + /* either a real orbit or a set of discrete pa/sep */ + union { + BinOrbit b_bo; /* orbital elements */ + BinPos b_bp[MAXBINPOS]; /* table of discrete positions */ + } u; +} ObjB; + +#define fo_mag co_mag /* pseudonym for so_mag since it is not computed */ +#define fo_size co_size /* pseudonym for so_size since it is not computed */ + +/* macros to pack/unpack some fields */ +#define SRSCALE 255.0 /* galaxy size ratio scale */ +#define PASCALE (255.0/(2*PI)) /* pos angle scale factor */ +#define get_ratio(op) (((int)(op)->f_ratio)/SRSCALE) +#define set_ratio(op,maj,min) ((op)->f_ratio = (byte)(((maj) > 0) \ + ? ((min)*SRSCALE/(double)(maj)+0.5) \ + : 0)) +#define get_pa(op) ((double)(op)->f_pa/PASCALE) +#define set_pa(op,s) ((op)->f_pa = (byte)((s)*PASCALE + 0.5)) + +#define NCLASSES 128 /* n potential fo_classes -- allow for all ASCII */ + +/* basic planet object info */ +typedef struct { + OBJ_SOLSYS_FLDS; + PLCode plo_code; /* which planet */ + MCode plo_moon; /* which moon, or X_PLANET if planet */ + char plo_evis, plo_svis; /* if moon: whether visible from earth, sun */ + double plo_x, plo_y, plo_z; /* if moon: eq dist from center, planet radii */ + double plo_aux1, plo_aux2; /* various values, depending on type */ +} ObjPl; + +/* basic info about an object in elliptical heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + float eo_inc; /* inclination, degrees */ + float eo_Om; /* longitude of ascending node, degrees */ + float eo_om; /* argument of perihelion, degress */ + float eo_a; /* mean distance, aka,semi-maj axis,AU */ + float eo_M; /* mean anomaly, ie, degrees from perihelion at cepoch*/ + float eo_size; /* angular size, in arc seconds at 1 AU */ + float eo_startok; /* nominal first mjd this set is ok, else 0 */ + float eo_endok; /* nominal last mjd this set is ok, else 0 */ + double eo_e; /* eccentricity (double for when near 1 computing q) */ + double eo_cepoch; /* epoch date (M reference), as an mjd */ + double eo_epoch; /* equinox year (inc/Om/om reference), as an mjd. */ + Mag eo_mag; /* magnitude */ +} ObjE; + +/* basic info about an object in hyperbolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double ho_epoch; /* equinox year (inc/Om/om reference), as an mjd */ + double ho_ep; /* epoch of perihelion, as an mjd */ + float ho_startok; /* nominal first mjd this set is ok, else 0 */ + float ho_endok; /* nominal last mjd this set is ok, else 0 */ + float ho_inc; /* inclination, degs */ + float ho_Om; /* longitude of ascending node, degs */ + float ho_om; /* argument of perihelion, degs. */ + float ho_e; /* eccentricity */ + float ho_qp; /* perihelion distance, AU */ + float ho_g, ho_k; /* magnitude model coefficients */ + float ho_size; /* angular size, in arc seconds at 1 AU */ +} ObjH; + +/* basic info about an object in parabolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double po_epoch; /* reference epoch, as an mjd */ + double po_ep; /* epoch of perihelion, as an mjd */ + float po_startok; /* nominal first mjd this set is ok, else 0 */ + float po_endok; /* nominal last mjd this set is ok, else 0 */ + float po_inc; /* inclination, degs */ + float po_qp; /* perihelion distance, AU */ + float po_om; /* argument of perihelion, degs. */ + float po_Om; /* longitude of ascending node, degs */ + float po_g, po_k; /* magnitude model coefficients */ + float po_size; /* angular size, in arc seconds at 1 AU */ +} ObjP; + +/* basic earth satellite object info */ +typedef struct { + OBJ_COMMON_FLDS; + double eso_epoch; /* reference epoch, as an mjd */ + double eso_n; /* mean motion, rev/day + * N.B. we need double due to a sensitive differencing + * operation used to compute MeanAnomaly in + * esat_main()/satellite.c. + */ + float eso_startok; /* nominal first mjd this set is ok, else 0 */ + float eso_endok; /* nominal last mjd this set is ok, else 0 */ + float eso_inc; /* inclination, degs */ + float eso_raan; /* RA of ascending node, degs */ + float eso_e; /* eccentricity */ + float eso_ap; /* argument of perigee at epoch, degs */ + float eso_M; /* mean anomaly, ie, degrees from perigee at epoch */ + float eso_decay; /* orbit decay rate, rev/day^2 */ + float eso_drag; /* object drag coefficient, (earth radii)^-1 */ + int eso_orbit; /* integer orbit number of epoch */ + + /* computed "sky" results unique to earth satellites */ + float ess_elev; /* height of satellite above sea level, m */ + float ess_range; /* line-of-site distance from observer to satellite, m*/ + float ess_rangev; /* rate-of-change of range, m/s */ + float ess_sublat; /* latitude below satellite, >0 north, rads */ + float ess_sublng; /* longitude below satellite, >0 east, rads */ + int ess_eclipsed;/* 1 if satellite is in earth's shadow, else 0 */ +} ObjES; + +typedef union { + ObjAny any; /* these fields valid for all types */ + ObjSS anyss; /* these fields valid for all solar system types */ + ObjPl pl; /* planet */ + ObjF f; /* fixed object, plus proper motion */ + ObjB b; /* bona fide binary stars (doubles are stored in f) */ + ObjE e; /* object in heliocentric elliptical orbit */ + ObjH h; /* object in heliocentric hyperbolic trajectory */ + ObjP p; /* object in heliocentric parabolic trajectory */ + ObjES es; /* earth satellite */ +} Obj; + + +/* for o_flags -- everybody must agree */ +#define FUSER0 0x01 +#define FUSER1 0x02 +#define FUSER2 0x04 +#define FUSER3 0x08 +#define FUSER4 0x10 +#define FUSER5 0x20 +#define FUSER6 0x40 +#define FUSER7 0x80 + +/* mark an object as being a "field star" */ +#define FLDSTAR FUSER3 +/* mark an object as circum calculation failed */ +#define NOCIRCUM FUSER7 + +/* Obj shorthands: */ +#define o_type any.co_type +#define o_name any.co_name +#define o_flags any.co_flags +#define o_age any.co_age +#define s_ra any.co_ra +#define s_dec any.co_dec +#define s_gaera any.co_gaera +#define s_gaedec any.co_gaedec +#define s_az any.co_az +#define s_alt any.co_alt +#define s_elong any.co_elong +#define s_size any.co_size +#define s_mag any.co_mag + +#define s_sdist anyss.so_sdist +#define s_edist anyss.so_edist +#define s_hlong anyss.so_hlong +#define s_hlat anyss.so_hlat +#define s_phase anyss.so_phase + +#define s_elev es.ess_elev +#define s_range es.ess_range +#define s_rangev es.ess_rangev +#define s_sublat es.ess_sublat +#define s_sublng es.ess_sublng +#define s_eclipsed es.ess_eclipsed + +#define f_class f.fo_class +#define f_spect f.fo_spect +#define f_ratio f.fo_ratio +#define f_pa f.fo_pa +#define f_epoch f.fo_epoch +#define f_RA f.fo_ra +#define f_pmRA f.fo_pmra +#define f_dec f.fo_dec +#define f_pmdec f.fo_pmdec +#define f_mag f.fo_mag +#define f_size f.fo_size + +#define e_cepoch e.eo_cepoch +#define e_epoch e.eo_epoch +#define e_startok e.eo_startok +#define e_endok e.eo_endok +#define e_inc e.eo_inc +#define e_Om e.eo_Om +#define e_om e.eo_om +#define e_a e.eo_a +#define e_e e.eo_e +#define e_M e.eo_M +#define e_size e.eo_size +#define e_mag e.eo_mag + +#define h_epoch h.ho_epoch +#define h_startok h.ho_startok +#define h_endok h.ho_endok +#define h_ep h.ho_ep +#define h_inc h.ho_inc +#define h_Om h.ho_Om +#define h_om h.ho_om +#define h_e h.ho_e +#define h_qp h.ho_qp +#define h_g h.ho_g +#define h_k h.ho_k +#define h_size h.ho_size + +#define p_epoch p.po_epoch +#define p_startok p.po_startok +#define p_endok p.po_endok +#define p_ep p.po_ep +#define p_inc p.po_inc +#define p_qp p.po_qp +#define p_om p.po_om +#define p_Om p.po_Om +#define p_g p.po_g +#define p_k p.po_k +#define p_size p.po_size + +#define es_epoch es.eso_epoch +#define es_startok es.eso_startok +#define es_endok es.eso_endok +#define es_inc es.eso_inc +#define es_raan es.eso_raan +#define es_e es.eso_e +#define es_ap es.eso_ap +#define es_M es.eso_M +#define es_n es.eso_n +#define es_decay es.eso_decay +#define es_drag es.eso_drag +#define es_orbit es.eso_orbit + +#define pl_code pl.plo_code +#define pl_moon pl.plo_moon +#define pl_evis pl.plo_evis +#define pl_svis pl.plo_svis +#define pl_x pl.plo_x +#define pl_y pl.plo_y +#define pl_z pl.plo_z +#define pl_aux1 pl.plo_aux1 +#define pl_aux2 pl.plo_aux2 + +#define b_2compute b.b_2compute +#define b_2spect b.b_2spect +#define b_2mag b.b_2mag +#define b_bo b.u.b_bo +#define b_bp b.u.b_bp +#define b_nbp b.b_nbp + +/* insure we always refer to the fields and no monkey business */ +#undef OBJ_COMMON_FLDS +#undef OBJ_SOLSYS_FLDS + +/* o_type code. + * N.B. names are assigned in order in objmenu.c + * N.B. if add one add switch in obj_cir(). + * N.B. UNDEFOBJ must be zero so new objects are undefinied by being zeroed. + * N.B. maintain the bitmasks too. + */ +enum ObjType { + UNDEFOBJ=0, + FIXED, BINARYSTAR, ELLIPTICAL, HYPERBOLIC, PARABOLIC, EARTHSAT, PLANET, + NOBJTYPES +}; + +/* types as handy bitmasks too */ +#define OBJTYPE2MASK(t) (1<<(t)) +#define FIXEDM OBJTYPE2MASK(FIXED) +#define BINARYSTARM OBJTYPE2MASK(BINARYSTAR) +#define ELLIPTICALM OBJTYPE2MASK(ELLIPTICAL) +#define HYPERBOLICM OBJTYPE2MASK(HYPERBOLIC) +#define PARABOLICM OBJTYPE2MASK(PARABOLIC) +#define EARTHSATM OBJTYPE2MASK(EARTHSAT) +#define PLANETM OBJTYPE2MASK(PLANET) +#define ALLM (~0) + +/* rise, set and transit information. + */ +typedef struct { + int rs_flags; /* info about what has been computed and any + * special conditions; see flags, below. + */ + double rs_risetm; /* mjd time of rise today */ + double rs_riseaz; /* azimuth of rise, rads E of N */ + double rs_trantm; /* mjd time of transit today */ + double rs_tranalt; /* altitude of transit, rads up from horizon */ + double rs_tranaz; /* azimuth of transit, rads E of N */ + double rs_settm; /* mjd time of set today */ + double rs_setaz; /* azimuth of set, rads E of N */ +} RiseSet; + +/* RiseSet flags */ +#define RS_NORISE 0x0001 /* object does not rise as such today */ +#define RS_NOSET 0x0002 /* object does not set as such today */ +#define RS_NOTRANS 0x0004 /* object does not transit as such today */ +#define RS_CIRCUMPOLAR 0x0010 /* object stays up all day today */ +#define RS_NEVERUP 0x0020 /* object never up at all today */ +#define RS_ERROR 0x1000 /* can't figure out anything! */ +#define RS_RISERR (0x0100|RS_ERROR) /* error computing rise */ +#define RS_SETERR (0x0200|RS_ERROR) /* error computing set */ +#define RS_TRANSERR (0x0400|RS_ERROR) /* error computing transit */ + +#define is_type(op,m) (OBJTYPE2MASK((op)->o_type) & (m)) + +/* any planet or its moons */ +#define is_planet(op,p) (is_type(op,PLANETM) && op->pl_code == (p)) + +/* any solar system object */ +#define is_ssobj(op) is_type(op,PLANETM|HYPERBOLICM|PARABOLICM|ELLIPTICALM) + + +/* natural satellite support */ + +typedef struct { + char *full; /* full name */ + char *tag; /* Roman numeral tag */ + float x, y, z; /* sky loc in planet radii: +x:east +y:south +z:front */ + float ra, dec; /* sky location in ra/dec */ + float mag; /* magnitude */ + int evis; /* whether geometrically visible from earth */ + int svis; /* whether in sun light */ + int pshad; /* whether moon is casting shadow on planet */ + int trans; /* whether moon is transiting */ + float sx, sy; /* shadow sky loc in planet radii: +x:east +y:south */ +} MoonData; + +/* separate set for each planet -- use in pl_moon */ + + +enum _marsmoons { + M_MARS = 0, /* == X_PLANET */ + M_PHOBOS, M_DEIMOS, + M_NMOONS /* including planet at 0 */ +}; + +enum _jupmoons { + J_JUPITER = 0, /* == X_PLANET */ + J_IO, J_EUROPA, J_GANYMEDE, J_CALLISTO, + J_NMOONS /* including planet */ +}; + +enum _satmoons { + S_SATURN = 0, /* == X_PLANET */ + S_MIMAS, S_ENCELADUS, S_TETHYS, S_DIONE, + S_RHEA, S_TITAN, S_HYPERION, S_IAPETUS, + S_NMOONS /* including planet */ +}; + +enum _uramoons { + U_URANUS = 0, /* == X_PLANET */ + U_ARIEL, U_UMBRIEL, U_TITANIA, U_OBERON, U_MIRANDA, + U_NMOONS /* including planet */ +}; + +#define X_MAXNMOONS S_NMOONS /* N.B. chosen by hand */ + + +/* global function declarations */ + + +/* aa_hadec.c */ +extern void aa_hadec (double lt, double alt, double az, double *ha, + double *dec); +extern void hadec_aa (double lt, double ha, double dec, double *alt, + double *az); + +/* aberration.c */ +extern void ab_ecl (double m, double lsn, double *lam, double *bet); +extern void ab_eq (double m, double lsn, double *ra, double *dec); + +/* airmass.c */ +extern void airmass (double aa, double *Xp); + +/* anomaly.c */ +extern void anomaly (double ma, double s, double *nu, double *ea); + +/* ap_as.c */ +extern void ap_as ( Now *np, double Mjd, double *rap, double *decp); +extern void as_ap ( Now *np, double Mjd, double *rap, double *decp); + +/* atlas.c */ +extern char *um_atlas (double ra, double dec); +extern char *u2k_atlas (double ra, double dec); +extern char *msa_atlas (double ra, double dec); + +/* aux.c */ +extern double mm_mjed (Now *np); + +/* chap95.c */ +extern int chap95 (double m, int obj, double prec, double *ret); + +/* chap95_data.c */ + +/* circum.c */ +extern int obj_cir (Now *np, Obj *op); + +/* comet.c */ +extern void comet (double m, double ep, double inc, double ap, double qp, + double om, double *lpd, double *psi, double *rp, double *rho, double *lam, + double *bet); + +/* constel.c */ +#define NCNS 89 +extern int cns_pick (double r, double d, double e); +extern int cns_id (char *abbrev); +extern char *cns_name (int id); +extern int cns_edges (double e, double **ra0p, double **dec0p, double **ra1p, + double **dec1p); +extern int cns_list (double ra, double dec, double e, double rad, int ids[]); +extern int cns_figure (int id, double e, double ra[],double dec[],int dcodes[]); +extern int cns_loadfigs (FILE *fp, char msg[]); + +/* dbfmt.c */ +extern int db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm, + char whynot[]); +extern void db_write_line (Obj *op, char *lp); +extern int dbline_candidate (char line[]); +extern int get_fields (char *s, int delim, char *fields[]); +extern int db_tle (char *name, char *l1, char *l2, Obj *op); +extern int dateRangeOK (Now *np, Obj *op); + +/* deltat.c */ +extern double deltat (double m); + +/* earthsat.c */ +extern int obj_earthsat (Now *np, Obj *op); + +/* eq_ecl.c */ +extern void eq_ecl (double m, double ra, double dec, double *lt,double *lg); +extern void ecl_eq (double m, double lt, double lg, double *ra,double *dec); + +/* eq_gal.c */ +extern void eq_gal (double m, double ra, double dec, double *lt,double *lg); +extern void gal_eq (double m, double lt, double lg, double *ra,double *dec); + +/* formats.c */ +extern int fs_sexa (char *out, double a, int w, int fracbase); +extern int fs_date (char out[], int format, double jd); +extern int f_scansexa (const char *str, double *dp); +extern void f_sscandate (char *bp, int pref, int *m, double *d, int *y); + +/* helio.c */ +extern void heliocorr (double jd, double ra, double dec, double *hcp); + +/* jupmoon.c */ +extern void jupiter_data (double Mjd, char dir[], Obj *sop, Obj *jop, + double *jupsize, double *cmlI, double *cmlII, double *polera, + double *poledec, MoonData md[J_NMOONS]); + +/* libration.c */ +extern void llibration (double JD, double *llatp, double *llonp); + +/* magdecl.c */ +extern int magdecl (double l, double L, double e, double y, char *dir, + double *dp, char *err); + +/* marsmoon.c */ +extern void marsm_data (double Mjd, char dir[], Obj *sop, Obj *mop, + double *marssize, double *polera, double *poledec, MoonData md[M_NMOONS]); + +/* misc.c */ +extern void zero_mem (void *loc, unsigned len); +extern int tickmarks (double min, double max, int numdiv, double ticks[]); +extern int lc (int cx, int cy, int cw, int x1, int y1, int x2, int y2, + int *sx1, int *sy1, int *sx2, int *sy2); +extern void hg_mag (double h, double g, double rp, double rho, double rsn, + double *mp); +extern int magdiam (int fmag, int magstp, double scale, double mag, + double size); +extern void gk_mag (double g, double k, double rp, double rho, double *mp); +extern double atod (char *buf); +extern void solve_sphere (double A, double b, double cc, double sc, + double *cap, double *Bp); +extern double delra (double dra); +extern void now_lst (Now *np, double *lstp); +extern void radec2ha (Now *np, double ra, double dec, double *hap); +extern void gha (Now *np, Obj *op, double *ghap); +extern char *obj_description (Obj *op); +extern int is_deepsky (Obj *op); + +/* mjd.c */ +extern void cal_mjd (int mn, double dy, int yr, double *m); +extern void mjd_cal (double m, int *mn, double *dy, int *yr); +extern int mjd_dow (double m, int *dow); +extern int isleapyear (int year); +extern void mjd_dpm (double m, int *ndays); +extern void mjd_year (double m, double *yr); +extern void year_mjd (double y, double *m); +extern void rnd_second (double *t); +extern void mjd_dayno (double jd, int *yr, double *dy); +extern double mjd_day (double jd); +extern double mjd_hr (double jd); +extern void range (double *v, double r); +extern void radecrange (double *ra, double *dec); + +/* moon.c */ +extern void moon (double m, double *lam, double *bet, double *rho, + double *msp, double *mdp); + +/* mooncolong.c */ +extern void moon_colong (double jd, double lt, double lg, double *cp, + double *kp, double *ap, double *sp); + +/* moonnf.c */ +extern void moonnf (double mj, double *mjn, double *mjf); + +/* nutation.c */ +extern void nutation (double m, double *deps, double *dpsi); +extern void nut_eq (double m, double *ra, double *dec); + +/* obliq.c */ +extern void obliquity (double m, double *eps); + +/* parallax.c */ +extern void ta_par (double tha, double tdec, double phi, double ht, + double *rho, double *aha, double *adec); + +/* parallactic.c */ +extern double parallacticLDA (double lt, double dec, double alt); +extern double parallacticLHD (double lt, double ha, double dec); + +/* plans.c */ +extern void plans (double m, PLCode p, double *lpd0, double *psi0, + double *rp0, double *rho0, double *lam, double *bet, double *dia, + double *mag); + +/* plshadow.c */ +extern int plshadow (Obj *op, Obj *sop, double polera, + double poledec, double x, double y, double z, float *sxp, float *syp); + +/* plmoon_cir.c */ +extern int plmoon_cir (Now *np, Obj *moonop); +extern int getBuiltInObjs (Obj **opp); +extern void setMoonDir (char *dir); + +/* precess.c */ +extern void precess (double mjd1, double mjd2, double *ra, double *dec); + +/* reduce.c */ +extern void reduce_elements (double mjd0, double m, double inc0, + double ap0, double om0, double *inc, double *ap, double *om); + +/* refract.c */ +extern void unrefract (double pr, double tr, double aa, double *ta); +extern void refract (double pr, double tr, double ta, double *aa); + +/* rings.c */ +extern void satrings (double sb, double sl, double sr, double el, double er, + double JD, double *etiltp, double *stiltp); + +/* riset.c */ +extern void riset (double ra, double dec, double lt, double dis, + double *lstr, double *lsts, double *azr, double *azs, int *status); + +/* riset_cir.c */ +extern void riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +extern void twilight_cir (Now *np, double dis, double *dawn, double *dusk, + int *status); + +/* satmoon.c */ +extern void saturn_data (double Mjd, char dir[], Obj *eop, Obj *sop, + double *satsize, double *etilt, double *stlit, double *polera, + double *poledec, MoonData md[S_NMOONS]); + +/* sphcart.c */ +extern void sphcart (double l, double b, double r, double *x, double *y, + double *z); +extern void cartsph (double x, double y, double z, double *l, double *b, + double *r); + +/* sun.c */ +extern void sunpos (double m, double *lsn, double *rsn, double *bsn); + +/* twobody.c */ +extern int vrc (double *v, double *r, double tp, double e, double q); + +/* umoon.c */ +extern void uranus_data (double Mjd, char dir[], Obj *sop, Obj *uop, + double *usize, double *polera, double *poledec, MoonData md[U_NMOONS]); + +/* utc_gst.c */ +extern void utc_gst (double m, double utc, double *gst); +extern void gst_utc (double m, double gst, double *utc); + +/* vsop87.c */ +extern int vsop87 (double m, int obj, double prec, double *ret); + +#ifdef __cplusplus +} +#endif + +#endif /* _ASTRO_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: astro.h,v $ $Date: 2013/01/06 01:12:57 $ $Revision: 1.33 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/atlas.c b/Common/Libraries/XEphemAstroLib/src/atlas.c new file mode 100644 index 0000000000000000000000000000000000000000..236153741ff372a43ce2f60981f132d77cdf37bf --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/atlas.c @@ -0,0 +1,196 @@ +/* look up which star atlas an ra/dec is in. + * Urano and Mill contributed by Atsuo Ohki + * U2K by Robert Lane + * + * N.B. skylist.c assumes a certain max length for any returned string. + */ + +#include +#include + +#include "astro.h" + +/* for Millennium Star Atlas */ +static int msa_charts[] = { + /* 90*/ 2, /* 84*/ 4, /* 78*/ 8, /* 72*/ 10, /* 66*/ 12, + /* 60*/ 14, /* 54*/ 16, /* 48*/ 20, /* 42*/ 20, /* 36*/ 22, + /* 30*/ 22, /* 24*/ 24, /* 18*/ 24, /* 12*/ 24, /* 6*/ 24, + /* 0*/ 24, + /* -6*/ 24, /*-12*/ 24, /*-18*/ 24, /*-24*/ 24, /*-30*/ 22, + /*-36*/ 22, /*-42*/ 20, /*-48*/ 20, /*-54*/ 16, /*-60*/ 14, + /*-66*/ 12, /*-72*/ 10, /*-78*/ 8, /*-84*/ 4, /*-90*/ 2 +}; + +/* + * find the chart number of Millennium Star Atlas and return pointer to static + * string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +msa_atlas(double ra, double dec) +{ + static char buf[512]; + int zone, band; + int i, p; + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) + return (buf); + zone = (int)(ra/8.0); + band = -((int)(dec+((dec>=0)?3:-3))/6 - 15); + for (p=0, i=0; i <= band; i++) + p += msa_charts[i]; + i = (int)((ra - 8.0*zone) / (8.0/msa_charts[band])); + sprintf(buf, "V%d - P%3d", zone+1, p-i+zone*516); + return (buf); +} + +/* for original Uranometria */ +static struct { + double l; + int n; +} um_zones[] = { + /* 84 - 90 */ { 84.5, 2}, + /* 72 - 85 */ { 72.5, 12}, + /* 60 - 73 */ { 61.0, 20}, + /* 49 - 62 */ { 50.0, 24}, + /* 38 - 51 */ { 39.0, 30}, + /* 27 - 40 */ { 28.0, 36}, + /* 16 - 29 */ { 17.0, 45}, + /* 5 - 18 */ { 5.5, 45}, + /* 0 - 6 */ { 0.0, 45}, + { 0.0, 0} +}; + +/* + * find the chart number of Uranometria first edition and return pointer to + * static string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +um_atlas(double ra, double dec) +{ + static char buf[512]; + int band, south; + int p; + double w; + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) + return (buf); + p = 0; + if (dec < 0.0) { + dec = -dec; + south = 1; + } else + south = 0; + p = 1; + for (band=0; um_zones[band].n; band++) { + if (um_zones[band].l <= dec) + break; + p += um_zones[band].n; + } + if (!um_zones[band].n) + return (buf); + w = 24.0 / um_zones[band].n; + if (band) { + ra += w/2.0; + if (ra >= 24.0) + ra -= 24.0; + } + if (south && um_zones[band+1].n) + p = 475 - p - um_zones[band].n; + if (south && band == 0) { + /* south pole part is mis-ordered! */ + ra = 24.0 - ra; + } + sprintf(buf, "V%d - P%3d", south+1, p+(int)(ra/w)); + return (buf); +} + +/* for Uranometria 2000.0 */ +static struct { + double lowDec; /* lower dec cutoff */ + int numZones; /* number of panels (aka zones) */ + +} u2k_zones[] = { /* array of book layout info */ + /* 84 - 90 */ { 84.5, 1}, /* lower dec cutoff, # of panels in band */ + /* 73 - 85 */ { 73.5, 6}, + /* 62 - 74 */ { 62.0, 10}, + /* 51 - 63 */ { 51.0, 12}, + /* 40 - 52 */ { 40.0, 15}, + /* 29 - 41 */ { 29.0, 18}, + /* 17 - 30 */ { 17.0, 18}, + /* 5 - 18 */ { 5.5, 20}, + /* 0 - 6 */ { 0.0, 20}, + { 0.0, 0} /*numZones value in this line is a stopper.*/ +}; + +/* find the chart number of Uranometria 2000.0 and return pointer to static + * string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +u2k_atlas(double ra, double dec) +{ + static char buf[512]; + static char err[] = "???"; + int band; /* index to array */ + int south; /* flag for volume 2*/ + int panel; /* panel number */ + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) { + strcpy (buf, err); + return (buf); /* range checking */ + } + + if (dec < 0.0) { + dec = -dec; + south = 1; /* South is mirror of North */ + } else + south = 0; + + panel = 1; + band = 0; + + /* scan u2k_zones for the correct band: */ + while (u2k_zones[band].numZones != 0 && dec <= u2k_zones[band].lowDec ){ + panel += u2k_zones[band].numZones; /*accumulate total panels */ + band++ ; + } + + if (!u2k_zones[band].numZones) { /* hit end of array with no match. */ + strcpy (buf, err); + return (buf); + } + + ra -= 12.0 / u2k_zones[band].numZones; /*offset by half-width of panel*/ + if (ra >= 24.0) /* reality check. shouldn't happen. */ + ra -= 24.0; + + if (ra < 0.0) /* offset could give negative ra */ + ra += 24.0; + + if (south && u2k_zones[band+1].numZones) + panel = 222 - panel - u2k_zones[band].numZones; + + /* resultant panel number is accumulated panels in prior bands plus + * ra's fraction of panels in dec's band. panel # goes up as ra goes + * down. + */ + sprintf(buf, "V%d - P%3d", south+1, + panel+(int)(u2k_zones[band].numZones*(24.0 - ra)/24.0)); + + return (buf); +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: atlas.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.8 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/auxil.c b/Common/Libraries/XEphemAstroLib/src/auxil.c new file mode 100644 index 0000000000000000000000000000000000000000..0fa712f36d015c6bfd3a23d9eee760ed2df66f89 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/auxil.c @@ -0,0 +1,42 @@ +/* aux functions so programs besides XEphem can use this library. + */ + +#include +#include + +#include "astro.h" +#include "preferences.h" + +/* default preferences */ +static int prefs[NPREFS] = { + PREF_TOPO, PREF_METRIC, PREF_MDY, PREF_UTCTZ, PREF_HIPREC, PREF_NOMSGBELL, + PREF_PREFILL, PREF_TIPSON, PREF_CONFIRMON, PREF_SUN +}; + +/* called anytime we want to know a preference. + */ +int +pref_get(Preferences pref) +{ + return (prefs[pref]); +} + +/* call to force a certain preference, return the old setting. + */ +int +pref_set (Preferences pref, int newp) +{ + int prior = pref_get(pref); + prefs[pref] = newp; + return (prior); +} + +/* given an mjd, return it modified for terrestial dynamical time */ +double +mm_mjed (Now *np) +{ + return (mjd + deltat(mjd)/86400.0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: auxil.c,v $ $Date: 2003/05/04 04:41:57 $ $Revision: 1.8 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/bdl.c b/Common/Libraries/XEphemAstroLib/src/bdl.c new file mode 100644 index 0000000000000000000000000000000000000000..048640518065c50fe29a5c9cc53985de3de2f023 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/bdl.c @@ -0,0 +1,238 @@ +/* crack natural satellite files from BDL */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +typedef enum {I, F, NL} ScanType; +#define SCANFLD(f,w,vp) if(readField(fp,f,w,(void *)vp,ynot)<0) return (-1) + +static int readField (FILE *fp, ScanType f, int w, void *ptr, char ynot[]); +static int readRec (FILE *fp, double *t0, double cmx[], double cfx[], + double cmy[], double cfy[], double cmz[], double cfz[], char ynot[]); + +/* given a sequencial text file in BDL natural satellite ephemeris format and a + * JD, find the x/y/z positions of each satellite. store in the given arrays, + * assumed to have one entry per moon. values are planetocentric, +x east, +y + * north, +z away from earth, all in au. corrected for light time. + * return the number of satellites or -1 and reason in ymot[]. + * files obtained from ftp://ftp.bdl.fr/pub/misc/satxyz. + */ +int +read_bdl (FILE *fp, double jd, double *xp, double *yp, double *zp, char ynot[]) +{ + int npla; + int nsat; + int idn[8]; + double freq[8]; + double delt[8]; + double djj; + double cmx[6], cfx[4], cmy[6], cfy[4], cmz[6], cfz[4]; + int ienrf; + int jan; + int reclen; + long os0; + double t0; + int i; + + /* read header line */ + SCANFLD (I, 2, &npla); + SCANFLD (I, 2, &nsat); + for (i = 0; i < nsat; i++) + SCANFLD (I, 5, &idn[i]); + for (i = 0; i < nsat; i++) + SCANFLD (F, 8, &freq[i]); + for (i = 0; i < nsat; i++) + SCANFLD (F, 5, &delt[i]); + SCANFLD (I, 5, &ienrf); + SCANFLD (F, 15, &djj); + SCANFLD (I, 5, &jan); + SCANFLD (NL, 0, NULL); + + /* record position of first record */ + os0 = ftell (fp); + + /* read first record to get length */ + reclen = readRec (fp, &t0, cmx, cfx, cmy, cfy, cmz, cfz, ynot); + if (reclen < 0) + return (-1); + + /* compute location of each satellite */ + for (i = 0; i < nsat; i++) { + int id = (int)floor((jd-djj)/delt[i]) + idn[i] - 2; + long os = os0 + id*reclen; + double t1, anu, tau, tau2, at; + double tbx, tby, tbz; + + if (fseek (fp, os, SEEK_SET) < 0) { + sprintf (ynot, "Seek error to %ld for rec %d", os, id); + return (-1); + } + + if (readRec (fp, &t0, cmx, cfx, cmy, cfy, cmz, cfz, ynot) < 0) + return (-1); + + t1 = floor(t0) + 0.5; + anu = freq[i]; + tau = jd - t1; + tau2 = tau * tau; + at = tau*anu; + + tbx = cmx[0]+cmx[1]*tau+cmx[2]*sin(at+cfx[0]) + +cmx[3]*tau*sin(at+cfx[1]) + +cmx[4]*tau2*sin(at+cfx[2]) + +cmx[5]*sin(2*at+cfx[3]); + tby = cmy[0]+cmy[1]*tau+cmy[2]*sin(at+cfy[0]) + +cmy[3]*tau*sin(at+cfy[1]) + +cmy[4]*tau2*sin(at+cfy[2]) + +cmy[5]*sin(2*at+cfy[3]); + tbz = cmz[0]+cmz[1]*tau+cmz[2]*sin(at+cfz[0]) + +cmz[3]*tau*sin(at+cfz[1]) + +cmz[4]*tau2*sin(at+cfz[2]) + +cmz[5]*sin(2*at+cfz[3]); + + xp[i] = tbx*1000./149597870.; + yp[i] = tby*1000./149597870.; + zp[i] = tbz*1000./149597870.; + } + + return (nsat); +} + +/* read one field. + * return 0 if ok else -1 + * N.B. this is enforce width, without skipping leading blanks. + */ +static int +readField (FILE *fp, ScanType f, int width, void *ptr, char ynot[]) +{ + char buf[128]; + char *bp; + + if (width > sizeof(buf)-1) { + sprintf (ynot, "BDL Field width %d > %d", width, (int)sizeof(buf)); + return (-1); + } + if (width != (int)fread (buf, 1, width, fp)) { + if (ferror(fp)) strcpy (ynot, "BDL IO error"); + else if (feof(fp)) strcpy (ynot, "BDL unexpected EOF"); + else strcpy (ynot, "BDL short file"); + return (-1); + } + + buf[width] = '\0'; + switch (f) { + case I: + *(int *)ptr = atoi (buf); + break; + case F: + bp = strchr (buf, 'D'); + if (bp) + *bp = 'e'; + *(double *)ptr = atof (buf); + break; + case NL: + fgets (buf, sizeof(buf), fp); + break; + default: + sprintf (ynot, "Bug! format = %d", f); + return (-1); + } + return (0); +} + +/* read one satellite record. + * return number of chars read else -1. + */ +static int +readRec (FILE *fp, double *t0, double cmx[], double cfx[], double cmy[], +double cfy[], double cmz[], double cfz[], char ynot[]) +{ + + long pos0, pos1; + int isat, idx; + int ldat1, ldat2; + int i; + + pos0 = ftell (fp); + + SCANFLD (I, 1, &isat); + SCANFLD (I, 5, &idx); + SCANFLD (I, 8, &ldat1); + SCANFLD (I, 8, &ldat2); + SCANFLD (F, 9, t0); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmx[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfx[i]); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmy[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfy[i]); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmz[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfz[i]); + SCANFLD (NL, 0, NULL); + + pos1 = ftell (fp); + + return (pos1 - pos0); +} + + +#ifdef TEST_IT +/* stand-alone test program. + * for example, compare + * a.out jupiter.9910 2451910.50000 + * with + * satxyz2 + * jup.dir.9910 + * 2001 1 1 0 0 0 + * 1 0 0 0 + * 1 + */ +int +main (int ac, char *av[]) +{ + double x[10], y[10], z[10]; + char ynot[1024]; + double jd; + char *fn; + FILE *fp; + int nm; + int i; + + if (ac != 3) { + fprintf (stderr, "Usage: %s \n", av[0]); + abort(); + } + fn = av[1]; + jd = atof (av[2]); + + fp = fopen (fn, "r"); + if (!fp) { + perror (fn); + abort(); + } + + nm = read_bdl (fp, jd, x, y, z, ynot); + if (nm < 0) { + fprintf (stderr, "%s\n", ynot); + abort(); + } + + for (i = 0; i < nm; i++) + printf (" X= %19.11E Y= %19.11E Z= %19.11E\n", x[i], y[i], z[i]); + + return (0); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: bdl.c,v $ $Date: 2008/04/20 08:11:35 $ $Revision: 1.6 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/bdl.h b/Common/Libraries/XEphemAstroLib/src/bdl.h new file mode 100644 index 0000000000000000000000000000000000000000..3b4d0ea333cbffefc041d1030762d3ecebbacf7c --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/bdl.h @@ -0,0 +1,6 @@ +extern int read_bdl (FILE *fp, double jd, double *xp, double *yp, double *zp, + char ynot[]); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: bdl.h,v $ $Date: 2003/03/20 08:56:31 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/chap95.c b/Common/Libraries/XEphemAstroLib/src/chap95.c new file mode 100644 index 0000000000000000000000000000000000000000..bde4384f944f614e95e663f9963520846d5d2441 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/chap95.c @@ -0,0 +1,174 @@ +/* heliocentric rectangular equatorial coordinates of Jupiter to Pluto; + * from Chapront's expansion of DE200/extension of DE200; mean equator J2000.0 + * + * calculation time (milliseconds) on an HP 715/75, Jupiter to Pluto: + * (each coordinate component counted as 1 term, + * secular terms included for JD 2448908.5 = 1992 Oct 13.0) + * + * prec terms rates no rates + * 0.0 2256 5.1 4.6 + * + * 1e-7 792 2.6 2.4 --> nominal precision rel. to DE200 + * 1e-6 535 2.1 2.0 + * 1e-5 350 1.8 1.6 + * 1e-4 199 1.5 1.4 + * 1e-3 96 1.2 1.1 + * + * no drop 2256 4.5 3.9 (code without test criterion) + */ + +#include + +#include "astro.h" +#include "chap95.h" + +#define CHAP_MAXTPOW 2 /* NB: valid for all 5 outer planets */ + +/* chap95() + * + * input: + * m modified JD; days from J1900.0 = 2415020.0 + * + * prec precision level, in radians. + * if (prec = 0.0), you get the full precision, namely + * a deviation of not more than 0.02 arc seconds (1e-7 rad) + * from the JPL DE200 integration, on which this expansion + * is based. + * + * obj object number as in astro.h (jupiter=3, saturn=4, ...) + * + * output: + * ret[6] cartesian components of position and velocity + * + * return: + * 0 Ok + * 1 time out of range [CHAP_BEGIN .. CHAP_END] + * 2 object out of range [JUPITER .. PLUTO] + * 3 precision out of range [0.0 .. 1e-3] + */ +int +chap95 (double m, int obj, double prec, double *ret) +{ + static double a0[] = { /* semimajor axes for precision ctrl */ + 0.39, 0.72, 1.5, 5.2, 9.6, 19.2, 30.1, 39.5, 1.0 + }; + double sum[CHAP_MAXTPOW+1][6]; /* [T^0, ..][X,Y,Z,X',Y',Z'] */ + double T, t; /* time in centuries and years */ + double ca, sa, Nu; /* aux vars for terms */ + double precT[CHAP_MAXTPOW+1]; /* T-augmented precision threshold */ + chap95_rec *rec; /* term coeffs */ + int cooidx; + + /* check parameters */ + if (m < CHAP_BEGIN || m > CHAP_END) + return (1); + + if (obj < JUPITER || obj > PLUTO) + return (2); + + if (prec < 0.0 || prec > 1e-3) + return (3); + + /* init the sums */ + zero_mem ((void *)sum, sizeof(sum)); + + T = (m - J2000)/36525.0; /* centuries since J2000.0 */ + + /* modify precision treshold for + * a) term storing scale + * b) convert radians to au + * c) account for skipped terms (more terms needed for better prec) + * threshold empirically established similar to VSOP; stern + * d) augment for secular terms + */ + precT[0] = prec * CHAP_SCALE /* a) */ + * a0[obj] /* b) */ + / (10. * (-log10(prec + 1e-35) - 2)); /* c) */ + t = 1./(fabs(T) + 1e-35); /* d) */ + precT[1] = precT[0]*t; + precT[2] = precT[1]*t; + + t = T * 100.0; /* YEARS since J2000.0 */ + + ca = sa = Nu = 0.; /* shut up compiler warning 'uninitialised' */ + + switch (obj) { /* set initial term record pointer */ + case JUPITER: rec = chap95_jupiter; break; + case SATURN: rec = chap95_saturn; break; + case URANUS: rec = chap95_uranus; break; + case NEPTUNE: rec = chap95_neptune; break; + case PLUTO: rec = chap95_pluto; break; + default: + return (2); /* wrong object: severe internal trouble */ + } + + /* do the term summation into sum[T^n] slots */ + for (; rec->n >= 0; ++rec) { + double *amp; + + /* NOTE: The formula + * X = SUM[i=1,Records] T**n_i*(CX_i*cos(Nu_k*t)+SX_i*sin(Nu_k*t)) + * could be rewritten as SUM( ... A sin (B + C*t) ) + * "saving" trigonometric calls. However, e.g. for Pluto, + * there are only 65 distinct angles NU_k (130 trig calls). + * With that manipulation, EVERY arg_i would be different for X, + * Y and Z, which is 3*96 terms. Hence, the formulation as + * given is good (optimal?). + */ + + for (cooidx = 0, amp = rec->amp; cooidx < 3; ++cooidx) { + double C, S, term, termdot; + short n; /* fast access */ + + C = *amp++; + S = *amp++; + n = rec->n; + + /* drop term if too small + * this is quite expensive: 17% of loop time + */ + if (fabs(C) + fabs(S) < precT[n]) + continue; + + if (n == 0 && cooidx == 0) { /* new Nu only here */ + double arg; + + Nu = rec->Nu; + arg = Nu * t; + arg -= floor(arg/(2.*PI))*(2.*PI); + ca = cos(arg); /* blast it - even for Nu = 0.0 */ + sa = sin(arg); + } + + term = C * ca + S * sa; + sum[n][cooidx] += term; +#if CHAP_GETRATE + termdot = (-C * sa + S * ca) * Nu; + sum[n][cooidx+3] += termdot; + if (n > 0) sum[n - 1][cooidx+3] += n/100.0 * term; +#endif + } /* cooidx */ + } /* records */ + + /* apply powers of time and sum up */ + for (cooidx = 0; cooidx < 6; ++cooidx) { + ret[cooidx] = (sum[0][cooidx] + + T * (sum[1][cooidx] + + T * (sum[2][cooidx] )) )/CHAP_SCALE; + } + + /* TEST: if the MAIN terms are dropped, get angular residue + ret[0] = sqrt(ret[0]*ret[0] + ret[1]*ret[1] + ret[2]*ret[2])/a0[obj]; + */ + +#if CHAP_GETRATE + for (cooidx = 3; cooidx < 6; ++cooidx) { + ret[cooidx] /= 365.25; /* yearly to daily rate */ + } +#endif + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: chap95.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/chap95.h b/Common/Libraries/XEphemAstroLib/src/chap95.h new file mode 100644 index 0000000000000000000000000000000000000000..fff8acdd748d8a2d4b07b34b12fedbe415f9aa93 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/chap95.h @@ -0,0 +1,68 @@ +/* Position of outer planets; straightforward from: +ftp://adc.gsfc.nasa.gov/pub/adc/archives/journal_tables/A+AS/109/181: + +J/A+AS/109/181 Planetary ephemerides (Chapront, 1995) +=============================================================================== +Representation of planetary ephemerides by frequency analysis. Application to +the five outer planets. + CHAPRONT J. + + =1995A&AS..109..181C (SIMBAD/NED Reference) +=============================================================================== + +Keywords: ephemerides - planets and satellites: general - methods: numerical + +Contents: + Heliocentric equatorial rectangular coordinates of the five outer planets + (X, Y and Z). The source is based on DE200 (tables 4 to 7) or a reconstruction + of DE200 by numerical integration (tables 9 to 13). The reference frame is + the mean equator and equinox J2000 of DE200. + + The general formulation of the series X is: + X = SUM[i=1,Records] T**n_i*(CX_i*cos(Nu_k*t)+SX_i*sin(Nu_k*t)) + The formulation is identical for Y and Z. + T is the time (TDB) in Julian centuries from J2000: + T = (JulianDate - 2451545.0)/36525 + t is the time (TDB) in Julian years from J2000: + t = (JulianDate - 2451545.0)/365.25 + Nu is the frequency. Frequencies are identical for all terms of rank k: + Nu_k = Nu_i when n_i = 0 + For purely secular terms k = 0 and Nu_0 = 0 + +=============================================================================== +(End) Patricia Bauer [CDS] 03-Oct-1994 +*/ + +#define CHAP_SCALE 1e10 + +/* JDs of validity period */ +#define CHAP_BEGIN (2338032.5 - MJD0) /* 1689/3/19 */ +#define CHAP_END (2542032.5 - MJD0) /* 2247/10/1 */ + +/* coding flags */ +/* calculating rates increases time by about 10% + * + * On an HP715/75, for pluto the times per step are 0.00049 s and 0.00057 s + * This method is quite fast. + */ +#define CHAP_GETRATE 1 + +typedef struct { + short n; /* order of time; "-1" marks end of list */ + double amp[6]; /* amplitudes of cosine and sine terms for x,y,z */ + /* in original order [CX,SX,CY,SY,CZ,SZ] */ + double Nu; /* Frequency Nu_k; given only at n=0 */ +} chap95_rec; + +extern chap95_rec chap95_jupiter[]; +extern chap95_rec chap95_saturn[]; +extern chap95_rec chap95_uranus[]; +extern chap95_rec chap95_neptune[]; +extern chap95_rec chap95_pluto[]; + +extern int chap95 (double m, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: chap95.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/chap95_data.c b/Common/Libraries/XEphemAstroLib/src/chap95_data.c new file mode 100644 index 0000000000000000000000000000000000000000..2c177355ba339034ff85d864da848d38af32ee47 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/chap95_data.c @@ -0,0 +1,783 @@ +/* data tables for Chapront95 expansion of DE200 for outer planets + * + * created by automatic conversion from original distribution files at + * ftp://adc.gsfc.nasa.gov/pub/adc/archives/journal_tables/A+AS/109/181 + */ + +#include "chap95.h" + +chap95_rec chap95_jupiter[] = { + { 0, { -3658015942., 0., -908357166., 0., -300271978., 0. }, 0. }, + { 1, { 3211736., 0., -12066362., 0., -5380492., 0. }, }, + { 0, { 4891337., 5430776., -9059458., 4045908., -3979137., 1598300. }, 0.0168745727060282 }, + { 1, { -1952368., 3224556., -3665363., -6161184., -1519962., -2703058. }, }, + { 0, { 589280., -62004., -1226982., 1326111., -536148., 568311. }, 0.0319163179770344 }, + { 0, { -132797., 113059., 332715., -538044., 144358., -232591. }, 0.0404897860926306 }, + { 0, { 19390., -8208., -31003., 153367., -13456., 65630. }, 0.0595473299932462 }, + { 0, { -2479., -51303., 154576., 368773., 65961., 157222. }, 0.0831987723231718 }, + { 1, { -170149., 190549., 249291., -236183., 108588., -106146. }, }, + { 0, { -14177274., -32784827., -28623327., 13932421., -12074567., 6670491. }, 0.1015656301267251 }, + { 1, { -3789129., 1413684., 2551178., 1957155., 1164465., 819456. }, }, + { 0, { 12762505., 226609., -4837955., 12330917., -2405339., 5249055. }, 0.1121334694975955 }, + { 1, { 547155., 1481967., -2013999., -2660987., -879208., -1179904. }, }, + { 0, { -62226., -41759., -601831., 240767., -255949., 106231. }, 0.1235484250413803 }, + { 0, { 38451., -38927., 103878., -40998., 43472., -16957. }, 0.1380033981088614 }, + { 0, { 6892., -67712., 62422., 39405., 26942., 18451. }, 0.1534434914458037 }, + { 0, { -75., 8062., -21151., -17198., -9222., -7580. }, 0.1694333239035300 }, + { 0, { 35355., 38181., 70566., -4376., 30386., -2939. }, 0.1895181584594278 }, + { 0, { -743715., -251198., -403257., 598432., -166123., 265466. }, 0.2002642151969322 }, + { 0, { 5834437., -10339387., 9606367., 9534188., 3806370., 4385708. }, 0.2140513638608579 }, + { 1, { 1033031., -590411., -1874404., 575478., -835406., 235620. }, }, + { 2, { 514744., -29792., -180518., -472533., -83894., -204253. }, }, + { 0, { 160903., -61277., -282564., -163689., -122933., -69902. }, 0.2282692683160305 }, + { 0, { -27903., 23114., 66255., 2167., 28792., 688. }, 0.2391180221674930 }, + { 0, { 4501., -5373., -15639., 12832., -6785., 5553. }, 0.2594200270243392 }, + { 0, { -7016., 15969., 7639., -40047., 3504., -17544. }, 0.2773387700991547 }, + { 0, { 12123., -71452., 49781., 137809., 20807., 61532. }, 0.2898870950096423 }, + { 0, { 9304., 220632., -262203., -258243., -112815., -119757. }, 0.2988785450891279 }, + { 0, { -326815., -368979., 836570., 374605., 369053., 187133. }, 0.3074463122377075 }, + { 0, { -285560., 1568528., -1374181., -462165., -548097., -222596. }, 0.3260929459480317 }, + { 1, { 61071., -241375., 291550., 243626., 110389., 123427. }, }, + { 2, { 227305., 162244., -116416., 352218., -65158., 140646. }, }, + { 0, { 132035., 23450., 116510., 219543., 39775., 92330. }, 0.3428930094327709 }, + { 0, { -45107., 4887., -87029., -68971., -33182., -29857. }, 0.3524288275557115 }, + { 0, { 11180., 1421., 46242., 3234., 18448., 1726. }, 0.3676619945918164 }, + { 0, { 55636., 74415., 46443., -53844., 16908., -25824. }, 0.3817149836030239 }, + { 0, { -38712., -7953., 29506., -14698., 13883., -4384. }, 0.4024967272931009 }, + { 0, { 737722., -3325874., -1725701., 1468892., -912453., 541637. }, 0.4182255664674069 }, + { 0, { 5843515., 17000877., -16425950., 5641739., -7208900., 1880856. }, 0.4281067291965077 }, + { 1, { -2114864., 879909., -1266263., -2982111., -450528., -1332322. }, }, + { 0, { -110808., 282843., -713054., 221824., -319044., 77631. }, 0.4373541005020147 }, + { 0, { 27829., -71864., 150036., -117804., 67370., -49093. }, 0.4560888031675395 }, + { 0, { 539822., 432225., -319385., 741980., -155058., 309230. }, 0.4797023746036813 }, + { 1, { 353284., -620503., 706907., 178082., 295983., 93413. }, }, + { 2, { -261070., -393195., 329623., -469610., 151911., -193312. }, }, + { 0, { -2161367., -547925., 176106., -2360409., 138737., -1001848. }, 0.5007107300722267 }, + { 0, { 27247697., -10878578., 11956310., 25892704., 4272604., 11389311. }, 0.5164419295757459 }, + { 0, { 42877248480., -29362030594., 27366424342., 39132999157., 10686125728., 17489248357. }, 0.5296606590588865 }, + { 1, { -15857296., -20344255., 19186229., -13052624., 8755482., -9908361. }, }, + { 2, { 6609281., 13149967., -10297853., 6131752., -4439009., 2280289. }, }, + { 0, { -18516226., 26000654., -21956172., -17721375., -8891106., -8274169. }, 0.5451799187785868 }, + { 0, { 924882., -10894893., 8857638., 2001907., 3741179., 1161552. }, 0.5595376466726170 }, + { 0, { 27311120., 29858821., -26928769., 14296744., -12217212., 5123580. }, 0.5795066100144535 }, + { 1, { 13030129., -18873913., 10742323., 12477743., 4123021., 5837654. }, }, + { 2, { -7424534., -11497916., 9860547., -3566473., 4394376., -1162013. }, }, + { 0, { -26277687., -24566747., 22551607., -14225886., 10328130., -5247184. }, 0.5911608643334181 }, + { 1, { 8339866., -11546546., 6481932., 8138775., 2473924., 3793057. }, }, + { 0, { -712821., 106326., 116149., -425425., 75173., -183273. }, 0.6154942605989902 }, + { 0, { 10367622., 10279698., -8594103., 9404066., -3937577., 3712537. }, 0.6326027345940838 }, + { 1, { 897045., 857895., -751707., 469816., -332572., 171768. }, }, + { 0, { 189069., -432469., 40216., 165708., -8464., 80857. }, 0.6444812066531010 }, + { 1, { 358961., 188063., -197366., 119155., -93776., 37030. }, }, + { 0, { 2801., -42321., 23044., 13212., 9231., 7153. }, 0.6631203366491857 }, + { 0, { 4336., 3618., -871., -1752., -434., -1180. }, 0.6824152589010221 }, + { 0, { -14481., -6624., 4573., -1496., 2554., -8. }, 0.7002707215510490 }, + { 0, { -223890., 106356., -2013., -41001., 13805., -21357. }, 0.7195602591163895 }, + { 1, { 28954., 129738., -23285., -9336., -9672., -11954. }, }, + { 0, { 500290., -303873., -27592., 125875., -40399., 71687. }, 0.7280600120460897 }, + { 0, { 729018., -876869., -461257., 537352., -184892., 325523. }, 0.7385877731868745 }, + { 1, { -549774., 403499., -445388., -787700., -178960., -329235. }, }, + { 0, { -154224., -136331., 129548., -90101., 64599., -32148. }, 0.7506622252123309 }, + { 0, { 36827., 21410., -22046., 16972., -12019., 7006. }, 0.7602186192346818 }, + { 0, { -9432., -929., 4761., -3712., 2630., -1835. }, 0.7714697369886172 }, + { 0, { 2272., -244., -1058., 1139., -553., 579. }, 0.7851226034217180 }, + { 0, { 236., 2440., 694., 90., 191., -135. }, 0.8150362349770407 }, + { 0, { 2171., -25731., -8199., 18101., -2071., 8952. }, 0.8291920856012017 }, + { 0, { -6488604., 1912961., -2051708., -5704251., -640826., -2468602. }, 0.8459901559232306 }, + { 1, { 133871., -10089., -90464., 3174., -43566., 7399. }, }, + { 2, { 3748., 19859., 25943., -57668., 8170., -24731. }, }, + { 0, { 41412., 22074., -6939., -4045., -5698., -1697. }, 0.8578592213260567 }, + { 0, { 574., 1501., -732., 4283., -255., 1685. }, 0.8738246080594192 }, + { 0, { 2322., -1798., 335., 937., 88., 501. }, 0.8963147077496537 }, + { 0, { -43604., -1899., 4040., -39896., 2661., -17151. }, 0.9105458422489332 }, + { 0, { 3596., -6271., 379., 5996., 286., 2760. }, 0.9259391061890530 }, + { 0, { -999582., 6287537., -5679601., -791405., -2413314., -507432. }, 0.9494173054851961 }, + { 1, { 111599., -339713., 235481., 52027., 98992., 33925. }, }, + { 2, { -33602., -140395., 93339., -35641., 41369., -10865. }, }, + { 0, { 149940., -187453., 95997., 203410., 38908., 91533. }, 0.9614421422806174 }, + { 0, { 46262., 123227., -97700., -14018., -43879., -8187. }, 0.9766842863215204 }, + { 0, { -150852., -63931., 82864., -16270., 39997., -7673. }, 0.9902969827486889 }, + { 0, { 580431., 130968., -306415., 215177., -145258., 96440. }, 1.0007147457558208 }, + { 0, { -315446., -113604., 191678., -91901., 90254., -41025. }, 1.0094608196461621 }, + { 1, { -3456., -446353., 229052., 185524., 103258., 88674. }, }, + { 0, { -189618., 113597., 8806., -140678., 6615., -64661. }, 1.0246980386783211 }, + { 0, { 4202483., 3000173., -2459447., 3363962., -1179328., 1385544. }, 1.0482030530764612 }, + { 1, { 1203874., -292900., 70065., 779465., 3811., 351179. }, }, + { 0, { 735702407., -1021641460., 944902088., 667150510., 387126729., 310854521. }, 1.0592824949737543 }, + { 1, { -225227., -2656169., 2070353., -678917., 860531., -321583. }, }, + { 0, { -906103., 1248865., -1249024., -614151., -510434., -296157. }, 1.0735437556293621 }, + { 0, { 133104., -244102., 224418., -12870., 91960., 2555. }, 1.0875704154537504 }, + { 0, { -98191., 334119., -93120., 114027., -39453., 36051. }, 1.1091289342301658 }, + { 1, { 131527., 1551., 58039., -54878., 19569., -21191. }, }, + { 2, { 65753., -188377., 68757., -76650., 28565., -25385. }, }, + { 0, { 61867., -343846., 16261., -113012., 8972., -35330. }, 1.1225031990563263 }, + { 0, { -7347., 137455., 17960., 22121., 5845., 4618. }, 1.1328877109810458 }, + { 0, { 11044., -88733., -25019., 37631., -8977., 18971. }, 1.1464066922869334 }, + { 0, { 11350781., -248125., 270190., 10489566., -145232., 4511204. }, 1.1622993228682923 }, + { 0, { -52127., 35850., -14691., -77957., -5084., -33671. }, 1.1728440239417584 }, + { 1, { -12008., 23292., -2942., -7282., -1291., -3563. }, }, + { 0, { 4294., 460., -3058., 3439., -1373., 1474. }, 1.1878668274609869 }, + { 0, { -1289., -734., 1786., -2248., 786., -941. }, 1.1998692758026896 }, + { 0, { 361., -793., 308., -1262., 122., -515. }, 1.2317935880659059 }, + { 0, { -195., 2534., -191., 3923., -67., 1609. }, 1.2448441509199817 }, + { 0, { -5385., -19904., 6349., -3489., 3158., -1221. }, 1.2560282933480911 }, + { 0, { 413790., -613072., 546872., 412919., 228594., 191066. }, 1.2653944427657104 }, + { 1, { -20115., 4841., -30066., -2156., -12194., -733. }, }, + { 0, { -56810., -2443., 14410., -37878., 7539., -15830. }, 1.2776927606634534 }, + { 1, { -883., -20034., 8211., 10587., 3489., 5153. }, }, + { 0, { -2444., 1465., 414., 793., 279., 259. }, 1.2924980461987274 }, + { 0, { 864., -632., -623., -218., -312., -55. }, 1.3014788911147197 }, + { 0, { 26233., -115536., 1588., -54448., 260., -17749. }, 1.3673745438817879 }, + { 0, { -366768., 241272., -241508., -348534., -93295., -154126. }, 1.3764442873088090 }, + { 1, { -4898., -22923., 39935., -25211., 16711., -10168. }, }, + { 0, { 7481., -4670., -7877., -4002., -3598., -1348. }, 1.3867469996002664 }, + { 0, { -2408., 1756., 2965., 1290., 1336., 416. }, 1.3958662188525488 }, + { 0, { 972., -751., -912., -28., -417., 39. }, 1.4068178503492994 }, + { 0, { -20343., 4804., -6579., -18594., -2298., -8037. }, 1.4396065958679622 }, + { 0, { 894., 1313., 1992., 632., 793., 162. }, 1.4496940872610145 }, + { 0, { -1983., -4631., -7582., 723., -2974., 660. }, 1.4625845924962999 }, + { 0, { 648492., 510288., -503142., 612739., -227097., 254982. }, 1.4790870471301645 }, + { 1, { -7847., 5399., -12816., -32834., -5768., -13533. }, }, + { 2, { -5935., 4107., 3696., -8454., 1585., -3763. }, }, + { 0, { 471., -326., 1178., -492., 455., -210. }, 1.5004111597792062 }, + { 0, { -1102., 5980., -5712., -389., -2409., -319. }, 1.5140608680143952 }, + { 0, { 235., -531., 427., -154., 168., -42. }, 1.5277453924778683 }, + { 0, { 1530., 1846., -2090., 2162., -918., 867. }, 1.5510420454912401 }, + { 0, { -8695., -5270., 3702., -11973., 1786., -4877. }, 1.5653775377343770 }, + { 0, { 108442., 13977., -7635., 130460., -5580., 54970. }, 1.5750243622459430 }, + { 0, { 12988439., -44123991., 40567288., 11522384., 17076170., 6015693. }, 1.5888946239094504 }, + { 1, { -297436., -96470., 75756., -224551., 37973., -97866. }, }, + { 2, { -140095., 49206., -15492., -114871., -4072., -51280. }, }, + { 0, { -213784., 360331., -204961., -174648., -85958., -85816. }, 1.5999174688094493 }, + { 0, { 34848., -82622., 33382., 30061., 14595., 15488. }, 1.6100691344943834 }, + { 1, { 43010., 10308., -12996., 14235., -6844., 6576. }, }, + { 0, { -1221., -3776., 845., 910., 489., 461. }, 1.6263710325060152 }, + { 0, { 554., 745., -310., -340., -171., -141. }, 1.6392210890659527 }, + { 0, { 20026., -16502., -3852., -9369., -2306., -3026. }, 1.6820002884969334 }, + { 0, { 813659., -336143., 300160., 724773., 109085., 319540. }, 1.6916922798012188 }, + { 1, { 1602., -17457., 27667., -10914., 11558., -4357. }, }, + { 0, { -5880., 742., -5245., -7508., -2092., -3141. }, 1.7051957386154943 }, + { 0, { 1260., 203., 1855., 1795., 753., 722. }, 1.7137017697983383 }, + { 0, { -181., 118., 893., -230., 356., -133. }, 1.7715707154892435 }, + { 0, { 715., -2305., -3568., 635., -1416., 471. }, 1.7804397794409668 }, + { 0, { 100206., -23631., 4854., 93727., 818., 43069. }, 1.7946296659726320 }, + { 1, { 4224., -2685., 2729., -6839., 1031., -2737. }, }, + { 2, { 84., 2460., 356., -441., 163., -287. }, }, + { 0, { -3928., 2396., -1944., -4367., -655., -1968. }, 1.8082885005321963 }, + { 1, { -1281., -1070., 1425., -1360., 663., -508. }, }, + { 0, { -434., -572., -639., 581., -222., 273. }, 1.8824124715680111 }, + { 0, { 5875., -12921., -96., 9965., 681., 4780. }, 1.8981641851181350 }, + { 1, { 3309., -927., -4565., 1029., -1995., 584. }, }, + { 0, { -14234., 16692., -15551., -9091., -6255., -4365. }, 1.9094415371356366 }, + { 1, { -5299., -4657., 1995., -4393., 1032., -1732. }, }, + { 0, { -215., 526., -123., -7., -42., -32. }, 1.9243893317056575 }, + { 0, { -1607., 1027., -1015., -1384., -397., -623. }, 1.9690057130935361 }, + { 0, { 907., -182., 55., -552., -12., -217. }, 1.9888685259410335 }, + { 0, { 80093., 1775., -15336., 49616., -8505., 21779. }, 2.0075896690458515 }, + { 1, { 3675., 886., 9437., 1003., 3841., 302. }, }, + { 2, { -2718., 2441., 1312., 2111., 647., 750. }, }, + { 0, { -749., 2213., 3067., 2387., 1321., 864. }, 2.0177406604319246 }, + { 0, { 82., 445., -97., 12., -47., -15. }, 2.0452450030168667 }, + { 0, { 939., 145., -364., 1452., -175., 622. }, 2.0918668035808388 }, + { 0, { 29763., -11270., 1340., 26747., 35., 12241. }, 2.1052596067061962 }, + { 1, { -752., -10176., 11464., -2886., 4981., -1015. }, }, + { 0, { -122433., -1948247., 1789021., -131787., 769924., -8458. }, 2.1185267640432053 }, + { 1, { -14746., -2745., 3642., -14273., 1472., -6101. }, }, + { 2, { -1381., -4337., 4157., -766., 1816., -296. }, }, + { 0, { 207., 2382., -2373., 455., -1016., 119. }, 2.1318821280894955 }, + { 0, { 317., -2045., -1566., 2287., -544., 1086. }, 2.2071860619320218 }, + { 0, { 45591., -42445., 35109., 42326., 14234., 19311. }, 2.2209783021218397 }, + { 1, { 100., -868., 334., -2387., 63., -853. }, }, + { 2, { -274., 556., 48., -449., -11., -223. }, }, + { 0, { 347., -11., -113., -232., -65., -97. }, 2.3082627901909945 }, + { 0, { 16054., -5418., 3307., 5345., 1043., 2606. }, 2.3219886353180517 }, + { 1, { -19., -205., 4127., -783., 1741., -387. }, }, + { 2, { -647., 309., -95., 84., -24., 13. }, }, + { 0, { 2409., -2117., -2607., -228., -1170., 136. }, 2.4200734218253461 }, + { 1, { 19., -536., 414., 216., 214., 119. }, }, + { 0, { 2201., 3681., -3051., 2808., -1347., 1419. }, 2.4294275957278497 }, + { 0, { -423., 745., -737., -631., -315., -318. }, 2.4385609820738123 }, + { 0, { 300., -1484., -1399., 755., -530., 425. }, 2.5260130486716892 }, + { 0, { 5490., -1919., 480., 4689., 156., 2132. }, 2.5361042359568997 }, + { 1, { 215., -174., 275., -263., 81., -64. }, }, + { 0, { 308., -156., 185., 292., 82., 121. }, 2.5459330159552604 }, + { 0, { 5463., 46., 202., 1602., -48., 766. }, 2.6374295145352566 }, + { 1, { 581., 381., 1106., 451., 460., 165. }, }, + { 0, { -36662., -85712., 78236., -34663., 34443., -12759. }, 2.6481663000165407 }, + { 0, { 1477., -1072., -1320., -336., -622., -3. }, 2.7397040327703399 }, + { 0, { 1659., -2071., 2391., 2294., 963., 1120. }, 2.7490048220101793 }, + { 1, { -1336., -455., -28., -609., -7., -260. }, }, + { 0, { 1366., -1582., -496., 1101., -173., 602. }, 2.8494750099923127 }, + { 1, { 141., -92., 188., -517., 50., -205. }, }, + { 2, { -23., 180., 65., -168., 19., -81. }, }, + { 0, { 1495., 362., 78., -117., -5., -23. }, 2.9530548702113095 }, + { 1, { 107., 70., 510., 245., 223., 92. }, }, + { 0, { 497., -250., -298., -554., -148., -215. }, 3.0510128159210788 }, + { 0, { 602., -271., -371., 232., -153., 154. }, 3.1654820818460752 }, + { 0, { -3037., -3424., 3284., -2814., 1483., -1134. }, 3.1775127563235914 }, + { 0, { 483., 216., 36., -224., 1., -77. }, 3.2694305438716178 }, + { 0, { 4935., 381., -381., 4408., -298., 2013. }, 3.3406022698986924 }, + { 0, { 235., -159., -104., -386., -58., -142. }, 3.3695779911862527 }, + { 0, { 339., -47., -126., -82., -67., -13. }, 3.4790904552288531 }, + { 0, { -5663., -29987., 27509., -5003., 11933., -2162. }, 6.2830762443769794 }, + { 0, { -59., -82., -23., 24., -12., 18. }, 8.4686530580615642 }, + { 0, { -17635., 511., -921., -16011., 697., -7231. }, 10.2131290491330340 }, + { 0, { -227., 115., -23., -264., 11., -116. }, 10.2220725794374050 }, + { /* end jupiter */ -1, }, +}; + +chap95_rec chap95_saturn[] = { + { 0, { 359537177., 0., -7206382337., 0., -2991243838., 0. }, 0. }, + { 1, { -20377631., 0., 15883341., 0., 8071624., 0. }, }, + { 0, { -64236683., -52860196., 142442224., -49744952., 58042432., -24365782. }, 0.0168745727060282 }, + { 0, { 30177751., 18129933., -67656128., 22849231., -27163043., 12315751. }, 0.0265670063186787 }, + { 1, { -8215259., 21212644., -23554648., -50768821., -12209063., -18901172. }, }, + { 0, { 1964057., 724735., -4686899., 1417179., -1646759., 941321. }, 0.0493811968866401 }, + { 1, { -134000., 3348965., -10011640., -8728398., -4234207., -2535628. }, }, + { 0, { 5686743., 3475773., -334368., 3091703., 72747., 926256. }, 0.0662237107929899 }, + { 0, { 554020., 1079938., -2966895., -1601162., -1509110., -278930. }, 0.0843726142307477 }, + { 0, { 4610964., 21987586., 31945199., -5263812., 13882828., -4598499. }, 0.1010129457774524 }, + { 0, { -66034588., -94070401., 111667599., -68387008., 47456033., -25071683. }, 0.1128014605528121 }, + { 1, { -4294328., -12886739., 37728596., -1754644., 11349347., 1748900. }, }, + { 0, { 6081642., 23561987., -38577166., -9734586., -12217167., -502775. }, 0.1245386660916166 }, + { 0, { -11635904., -19574871., 36907731., -11918213., 11119486., -6364841. }, 0.1376921108585382 }, + { 0, { 104499813., 75674727., -132241710., 152846005., -35848667., 59734045. }, 0.1532223867622918 }, + { 0, { -119336309., -65929841., 110429555., -174948245., 28176754., -66225503. }, 0.1635156403544941 }, + { 1, { 52564319., -48818442., 77555859., 94135021., 31177405., 26437148. }, }, + { 2, { 56660530., 23619473., -35687037., 84928050., -8020678., 31023884. }, }, + { 0, { 59047999., -9112158., 18208825., 74844916., 8173908., 26476289. }, 0.1849404508049137 }, + { 0, { -195085048., 130948239., -157301623., -207103141., -57416134., -80784650. }, 0.1994326216901347 }, + { 0, { 61319082350., -72972816459., 68513342186., 55646924765., 25657191842., 26113032275. }, 0.2133734516582497 }, + { 1, { 58897194., 107088220., -104901917., 68459614., -34345682., 47420026. }, }, + { 2, { -100212137., 21822222., -43604349., -89401596., -12674282., -32150723. }, }, + { 0, { 18845535., -49223999., 35615797., 26623302., 16402647., 15391365. }, 0.2335002178020494 }, + { 0, { -4180907., 4465884., 38621., -479609., 814285., -1219056. }, 0.2510310507212479 }, + { 1, { -18966213., 1413107., 11641634., -15116208., 6182492., -9256829. }, }, + { 0, { 3257184., 9509868., -11066286., -7321147., -6968557., -3079573. }, 0.2622227446243415 }, + { 0, { -1404116., -417364., 2858988., 1478988., 1856930., 162727. }, 0.2775489797512927 }, + { 0, { 1467706., 1107543., -4409004., 226468., -2199319., 678454. }, 0.2926511843672006 }, + { 0, { -63623237., -37507272., 39122548., -67696931., 18154709., -27796755. }, 0.3162439145857524 }, + { 1, { -3829645., 1269380., -9251051., -8961610., -4871745., -2487901. }, }, + { 2, { 1909651., 1468024., -7914338., 6203925., -2960534., 3971621. }, }, + { 0, { 6281876., -3642612., -4761114., 23447042., 286480., 12241212. }, 0.3340526064764550 }, + { 0, { -5802348., 5752123., -4991225., -30347977., -5911367., -14358380. }, 0.3467225133858732 }, + { 0, { 7539581., -27234846., 89254406., 72087653., 50683522., 25464083. }, 0.3654342931118227 }, + { 1, { -16970597., 906805., 25342361., -65544284., 5459306., -34110644. }, }, + { 2, { -5198192., 11224087., -33200716., -38195205., -20121188., -14873633. }, }, + { 0, { -2145161., 31156404., -111624554., -59422928., -60033284., -17237400. }, 0.3766625707476834 }, + { 0, { -2433702., -8759560., 35127703., 5461246., 17518688., -795950. }, 0.3868793178145906 }, + { 0, { 3948221., 3250926., -14710717., 6016597., -6668684., 4126312. }, 0.4021189702952532 }, + { 0, { -64852219., -1152783., 37078116., -78426047., 17075754., -36402504. }, 0.4173317886569649 }, + { 0, { 2598837096., -322512661., 333925850., 2403155625., 25718615., 1008149551. }, 0.4268085445169599 }, + { 1, { -8046615., 50513333., -65775281., -14855286., -30373245., -5862741. }, }, + { 0, { 14632122., -1627420., 391595., 27967394., 1503248., 13109492. }, 0.4393540871607130 }, + { 0, { -3977607., 2348335., -4492336., -11638695., -3044963., -5280793. }, 0.4516261147924168 }, + { 0, { 3891847., -6235742., 13257786., 12849113., 7381680., 5287411. }, 0.4647357720725654 }, + { 0, { -2681944., 5714068., -11275550., -8345687., -6000449., -3297402. }, 0.4765294470438712 }, + { 1, { -3310032., -1656488., 6283436., -7934719., 2454880., -4374462. }, }, + { 2, { 581001., -2310426., 4449727., 1912796., 2258154., 644572. }, }, + { 0, { -543181., 190668., 100357., -477814., 102237., -296580. }, 0.4992649823773071 }, + { 0, { 734019., 40318., 205332., 241668., 50065., 172083. }, 0.5130863461740709 }, + { 0, { 34991657., -27811324., 27384011., 28671165., 10659597., 13066000. }, 0.5295353231453532 }, + { 1, { -995667., 165111., 1788489., 16637., 818086., -43110. }, }, + { 2, { -317358., -198759., -6708., 263693., 27631., 133736. }, }, + { 0, { -31862., -65198., 73955., 29129., 36339., 15797. }, 0.5497097571860546 }, + { 0, { -4929., 225052., -215444., -8168., -89868., -12808. }, 0.5633695884286543 }, + { 0, { 24691., 22218., -9270., 18179., -4474., 5589. }, 0.5991350601911121 }, + { 0, { 289471., 202198., -100019., 60710., -58404., 1113. }, 0.6158926177569189 }, + { 1, { 99636., -158087., 49023., 12201., 5200., 13036. }, }, + { 0, { -1368816., -1646305., 699872., -1449808., 365729., -462486. }, 0.6277831102482128 }, + { 0, { 86066856., 61934875., -56200895., 80007767., -26961118., 30372088. }, 0.6401904307430363 }, + { 1, { -1903624., 1069032., -956603., -1766047., -334714., -771306. }, }, + { 2, { 388212., 231504., -217129., 594559., -86428., 243060. }, }, + { 0, { 806222., 541401., -454902., 1046875., -196326., 413041. }, 0.6510631728715514 }, + { 0, { -45865., -22253., 10036., -80738., 2915., -31853. }, 0.6610474418282967 }, + { 0, { 7873., 2358., 3189., 5877., 1281., 2008. }, 0.6837277548947647 }, + { 0, { -98664., 39992., -40413., -90837., -12525., -38879. }, 0.7043645359718698 }, + { 0, { -1946., 3664., 10236., -357., 4293., -1167. }, 0.7177278015736290 }, + { 0, { -284513., 3015890., 2554237., 521699., 1046024., 49179. }, 0.7348232721925007 }, + { 1, { 192624., 52403., 33461., -150025., -105., -61152. }, }, + { 0, { -574265., -320413., 457058., -572461., 214214., -240685. }, 0.7435248864377025 }, + { 1, { 1145., -36334., 41717., 108651., 15647., 49114. }, }, + { 0, { 4558., -12170., 12006., 2809., 4790., 1802. }, 0.7636282240814432 }, + { 0, { -13700., 9256., -10447., -12051., -3998., -5133. }, 0.7781708314331308 }, + { 0, { 2247., -693., 1592., 1083., 680., 202. }, 0.7950594399751412 }, + { 0, { -1275., 5493., -6655., 924., -2492., 1116. }, 0.8129117802019118 }, + { 0, { -1223., -19571., 23014., -16306., 6735., -10155. }, 0.8251778324059539 }, + { 0, { 303076., 327040., 524629., -601728., 145475., -284414. }, 0.8382097667143232 }, + { 1, { -68015., 68576., -104282., -95123., -56039., -18028. }, }, + { 0, { 804121., 5204866., -4807644., 856208., -2083791., 112505. }, 0.8530682323228537 }, + { 1, { 29622., -215766., 182882., 33800., 76379., -13007. }, }, + { 0, { -13943., 51584., -40954., -8800., -23024., -3606. }, 0.8654403493251860 }, + { 0, { 3328., -7556., 4381., 1661., 2910., -36. }, 0.8766682028622256 }, + { 0, { -1505., 1631., -856., 784., -507., 674. }, 0.8895787094971168 }, + { 0, { -7919., -1616., 1989., -5290., 1264., -2147. }, 0.9133756947048002 }, + { 0, { -719., -2923., 1034., -5631., 504., -2040. }, 0.9236279354499169 }, + { 0, { 235224., 39046., -67004., -248093., -51203., -88317. }, 0.9453092341234691 }, + { 1, { 23462., -3456., -13540., 1977., -2121., 4776. }, }, + { 2, { -14574., -833., 1399., 12342., 2166., 4371. }, }, + { 0, { -26186., -43172., 35585., -24094., 17801., -8640. }, 0.9587102428763801 }, + { 0, { 5306., 3426., -2598., 4654., -1521., 1836. }, 0.9687040706037242 }, + { 0, { -1404., -1568., 973., -1250., 478., -476. }, 0.9844044794489883 }, + { 0, { 710., 549., -640., -936., -297., -397. }, 1.0125530865194814 }, + { 0, { -4798., 528., 2241., 2772., 1073., 1027. }, 1.0243303434648821 }, + { 0, { 19204., -11735., -10052., -9127., -4600., -2887. }, 1.0350677988213037 }, + { 0, { -70967., 104737., 71732., 36807., 31189., 9485. }, 1.0444890430562743 }, + { 0, { -225798., 798684., 944928., 428637., 404105., 131989. }, 1.0535670598935039 }, + { 0, { 421437., -821624., 460671., 296203., 193979., 145015. }, 1.0624723083698995 }, + { 1, { 404141., 190563., -153412., 239290., -77801., 95534. }, }, + { 0, { -6822., -2424., -12141., -503., -4568., -254. }, 1.0799687683920178 }, + { 0, { 5231., 2124., 4765., -2411., 1681., -1002. }, 1.0944898935961935 }, + { 0, { -4360., -571., -2843., 2544., -920., 1015. }, 1.1034700208578079 }, + { 0, { 2352., -783., 1220., -2044., 355., -732. }, 1.1190075299813413 }, + { 0, { -5735., 3169., 186., 5121., 420., 1436. }, 1.1356439922218147 }, + { 0, { 26551., -30281., 5089., -56530., 4098., -12591. }, 1.1476494842799982 }, + { 0, { 182096., 230606., 190305., 20362., 32484., -34547. }, 1.1561539197957733 }, + { 1, { -46354., -35766., 25278., 21603., 6113., 24924. }, }, + { 2, { -6693., -10691., -762., -24972., 5267., -3607. }, }, + { 0, { 7509., -14080., 2266., 4828., -2812., 2396. }, 1.1724975800169239 }, + { 0, { -1097., 4594., -221., -711., 861., -846. }, 1.1827508062529084 }, + { 0, { 268., -1663., 197., 151., -139., 350. }, 1.1922546935063294 }, + { 0, { 3821., -6929., -9691., -9738., -1997., -3976. }, 1.2526642649376578 }, + { 1, { -3679., 2852., -872., 4458., -151., 647. }, }, + { 0, { 103288., 30887., 44394., -80994., 5313., -31354. }, 1.2615381418438327 }, + { 0, { 11722., -929., 20555., -32545., 6476., -10964. }, 1.2737411543354145 }, + { 0, { -17778., 2234., -8752., -2076., -2194., -1934. }, 1.2848042137871682 }, + { 1, { -807., -10464., -4345., -4583., -776., -1210. }, }, + { 0, { -2021., 243., -476., 1775., -175., 485. }, 1.2966706439177036 }, + { 0, { -414., 1251., 1334., 193., 402., 122. }, 1.3428511130177547 }, + { 0, { -6545., 29273., 20095., -2836., 7521., 1278. }, 1.3563973340863262 }, + { 1, { 13556., 3272., -1197., -10568., 545., -3663. }, }, + { 0, { -180708., 208447., 210704., 176234., 95276., 55650. }, 1.3681253803708262 }, + { 1, { 18503., 8458., -1041., -19835., 212., -7272. }, }, + { 2, { -2022., 9714., 3806., 25., 1699., 1106. }, }, + { 0, { 967., -692., -12., -1766., -76., -677. }, 1.3856345885533017 }, + { 0, { 704., -587., -2388., 1139., -927., 144. }, 1.4516885121122214 }, + { 0, { -2400., 3304., 8864., -6463., 3877., -1185. }, 1.4602508651959594 }, + { 0, { 69982., 97834., 73391., 17685., 16742., -10304. }, 1.4727239692395073 }, + { 1, { -11044., -13056., 19308., 14020., 3724., 10827. }, }, + { 2, { -6082., -426., 3637., -7457., 3010., -854. }, }, + { 0, { 2590., -1868., 1096., 1043., -731., -69. }, 1.4872423683478513 }, + { 0, { -938., 62., 121., -521., 280., -164. }, 1.4985129994148070 }, + { 0, { 1803., 2377., 1110., -3335., 260., -1477. }, 1.5652937634682971 }, + { 0, { 64498., -5114., 68142., -30202., 22032., -11748. }, 1.5815555196973523 }, + { 1, { -22825., 4620., 14325., -12393., 6615., -5873. }, }, + { 2, { -7166., 4559., -5012., 2048., -1874., 652. }, }, + { 0, { -2200., -10219., 11039., 3346., 4934., 1509. }, 1.5955514308541998 }, + { 0, { 1099., 1374., -2363., -260., -1043., -86. }, 1.6049203503395801 }, + { 0, { -1208., -104., 561., 969., 230., 560. }, 1.6737223157218182 }, + { 0, { -86480., 70728., 67924., 86008., 31534., 31153. }, 1.6843589552967209 }, + { 1, { 933., 1492., 4350., -2566., 1516., -847. }, }, + { 2, { -1244., -445., -70., 369., 72., 345. }, }, + { 0, { 1465., -2624., 397., -65., -76., -7. }, 1.6977622139834585 }, + { 0, { 14992., 53026., 36206., 5674., 12375., -4229. }, 1.7889276713056903 }, + { 1, { -1089., -6208., 2064., 7721., -744., 4049. }, }, + { 2, { -1281., -2343., -210., 276., 49., 532. }, }, + { 0, { 3295., -4264., -3112., 6622., -2534., 1159. }, 1.8013654629975304 }, + { 1, { 1876., 442., -2702., -870., -615., -793. }, }, + { 0, { 21586., 22255., 25169., -13704., 7397., -6814. }, 1.8952695349759525 }, + { 1, { 1293., 636., 1855., -2161., 651., -493. }, }, + { 2, { -1508., -959., -1185., 1162., -341., 540. }, }, + { 0, { -837., -468., -77., 639., 49., 332. }, 1.9082748451618770 }, + { 0, { -39181., 17943., 18554., 39996., 9033., 15315. }, 2.0006786235742782 }, + { 1, { 70., 479., 1963., -746., 664., -147. }, }, + { 2, { -729., 4., -323., -76., -29., 30. }, }, + { 0, { -726., 389., 1661., 467., 647., 367. }, 2.0949703642270960 }, + { 0, { -2813., 21512., 16741., 5023., 6930., 302. }, 2.1045989992211052 }, + { 0, { 6314., -196., -4305., 3407., -2614., -923. }, 2.1133294411524268 }, + { 0, { -1183., -1102., 1934., -946., 1020., -24. }, 2.1218152921149840 }, + { 0, { 7013., 13819., 14243., -3085., 4615., -2198. }, 2.2116085451863530 }, + { 1, { 548., 591., 1334., -724., 439., -127. }, }, + { 2, { -499., -647., -721., 383., -233., 184. }, }, + { 0, { -96., -348., -69., 163., -3., 83. }, 2.2246966026380783 }, + { 0, { -16878., 3417., 3609., 17709., 2011., 6948. }, 2.3169860146393306 }, + { 1, { -184., 273., 1066., -86., 376., 65. }, }, + { 2, { -421., -143., -106., -9., 9., 50. }, }, + { 0, { -1773., 10467., 5877., 4502., 2612., 236. }, 2.4212184393363345 }, + { 1, { 100., -1698., -212., 1585., -581., 698. }, }, + { 2, { -416., -532., 192., 38., 49., 218. }, }, + { 0, { 922., 6585., 6161., 638., 2178., -274. }, 2.5279051498015881 }, + { 1, { 305., 668., 969., -324., 338., -92. }, }, + { 0, { -7788., -691., -557., 7570., 62., 3142. }, 2.6333307376329276 }, + { 1, { -16., 174., 511., 158., 148., 85. }, }, + { 0, { -2797., 3622., 2705., 2693., 1341., 812. }, 2.7374368855151237 }, + { 0, { 1332., 523., -1008., -331., -394., -592. }, 2.7462646949156313 }, + { 0, { -528., 3192., 2851., 1151., 1069., 178. }, 2.8441606111313287 }, + { 1, { 54., 266., 527., 58., 138., 54. }, }, + { 0, { -3128., -1136., -1090., 3069., -358., 1285. }, 2.9496547906250985 }, + { 0, { -1332., 1366., 789., 1313., 449., 356. }, 3.0553439327040071 }, + { 1, { 46., -504., -405., 221., -232., 58. }, }, + { 0, { -722., 1469., 1417., 916., 574., 235. }, 3.1603882818225530 }, + { 1, { -8., 210., 314., 24., 105., 6. }, }, + { 0, { -1228., -704., -610., 1193., -210., 520. }, 3.2660150757959667 }, + { 0, { 4966., 349., -230., 4527., -271., 2058. }, 3.3406700896158381 }, + { 0, { -1003., 494., 345., 782., 229., 294. }, 3.3700954272546491 }, + { 0, { -642., 504., 417., 592., 188., 175. }, 3.4766263286125869 }, + { 0, { -5495., -30050., 27370., -5109., 11883., -2182. }, 6.2830758491321381 }, + { 1, { 12., 3., -21., -32., -16., -11. }, }, + { 0, { -127., 83., -47., -145., -13., -74. }, 8.4563910900857575 }, + { 0, { -17655., 888., -832., -16055., 726., -7281. }, 10.2133651230379790 }, + { 1, { -15., -178., 73., 27., 40., 18. }, }, + { 0, { 10., 56., 204., -33., 91., -14. }, 10.2233419556680150 }, + { /* end saturn */ -1, }, +}; + +chap95_rec chap95_uranus[] = { + { 0, { 13442911073., 0., -1930919457., 0., -1035250405., 0. }, 0. }, + { 1, { 54660667., 0., 47196247., 0., 21339801., 0. }, }, + { 0, { -6259970., -59715827., 56026092., -14879299., 23598892., -7731463. }, 0.0168745727060282 }, + { 0, { 5314993., 24095734., -17644181., 11961180., -6018215., 6587969. }, 0.0271621114651946 }, + { 0, { 816977., 27548111., -6448076., -468658., -4057252., -1448251. }, 0.0379771556339559 }, + { 0, { -1624242., 11338144., -20621799., 1496992., -5688694., 248222. }, 0.0558181533535525 }, + { 0, { 131350139561., 139711771423., -127221614269., 120945393838., -57589414088., 51010747052. }, 0.0747869939016385 }, + { 1, { 83579181., -50475439., 18032923., 50477352., 27217847., 30911037. }, }, + { 2, { 56177356., -62348507., 45006161., 56816875., 23394627., 20236290. }, }, + { 0, { -3192217., -67613872., 26532975., 31518890., 20804461., -5888651. }, 0.0851607526391989 }, + { 0, { 41246376., 168261887., -122401100., -97532527., -40313762., 5947933. }, 0.1076082382556661 }, + { 0, { -36235133., -140754409., 98201785., 64357246., 36255198., -9379330. }, 0.1131136321134916 }, + { 1, { 90255544., -46394994., -47508423., 75649120., 8064423., 19668708. }, }, + { 0, { -32042356., -21687295., 28029568., 15213468., 1662570., -3156568. }, 0.1256919464048962 }, + { 0, { 44969984., -2310664., -13084603., 20841905., 1428192., 12115421. }, 0.1384460864609660 }, + { 0, { -524718966., -4511367463., 4156633821., -484927968., 1817662129., -148236372. }, 0.1495664992280332 }, + { 0, { 61267776., 1565740., -24266489., 45519765., -3901964., 18298390. }, 0.1552897599647365 }, + { 0, { -7222268., 4911333., 3283374., -6377102., -254066., -1537379. }, 0.1694039594031046 }, + { 0, { 5873930., -4900474., -1827803., 7852582., -31798., 1819946. }, 0.1845250832150644 }, + { 0, { 1077339., 18380396., -901066., -10767827., -265560., 162663. }, 0.2002468734837309 }, + { 0, { -154311950., -219502970., 131091842., 178959446., 20655458., 5719299. }, 0.2141097583453364 }, + { 0, { -5528333., 212500368., -111109179., -139612191., -43337512., -21342579. }, 0.2193685795401007 }, + { 1, { -104517351., 177302072., 101064024., -75975513., -8816707., 3791842. }, }, + { 0, { 173653756., 151082404., -200861767., -135511564., -29950212., -17024507. }, 0.2293024101260499 }, + { 0, { -125918181., -44661266., 113832135., 56003631., 10092584., 6332126. }, 0.2359817391381943 }, + { 0, { 47624832., 2554277., -41914694., -13040594., -2759654., -2423818. }, 0.2431604796510437 }, + { 0, { -8805576., 2810717., 8600588., 666061., 636138., 663527. }, 0.2535948403663328 }, + { 0, { 1249271., -2422256., -2280787., 1243851., -81187., -241977. }, 0.2733943804314553 }, + { 0, { 90677., 14160054., 8529623., -8138579., 1686982., 1494393. }, 0.2885148535115661 }, + { 0, { 1004449., -20392040., -8104371., 18545176., -2778508., 705194. }, 0.2992461358046305 }, + { 1, { 5543727., 3362260., -1567031., -3163455., 585366., 471498. }, }, + { 2, { 2655788., 6883407., 3736665., -5070470., 1464904., 724248. }, }, + { 0, { 6192631., 6484479., 3731891., -6957619., 2642135., 445342. }, 0.3105692746147310 }, + { 0, { -1442546., -845134., -640944., 1375084., -614517., 35173. }, 0.3190867931520337 }, + { 0, { 683659., 282897., 363207., -694577., 243073., -261582. }, 0.3384589317094125 }, + { 0, { 210243., 95767., -88268., -40253., -126237., -71385. }, 0.3483018025771290 }, + { 0, { -122260., -61161., 139582., -75155., 89557., -59104. }, 0.3543646679104152 }, + { 0, { -341621., -166635., -6649., -236115., -4011., -98828. }, 0.3749354720310226 }, + { 0, { -34509., -47428., -33958., 69865., -15389., 28074. }, 0.3881544744399507 }, + { 0, { 127606., 82441., 63875., -131276., 30216., -55026. }, 0.4044642096018178 }, + { 0, { -55719., 35282., 53204., 42166., 20409., 8040. }, 0.4146735688956036 }, + { 0, { 745574., -86708., 85642., 660718., 2349., 278769. }, 0.4267276978319757 }, + { 0, { 46965., -63806., -140582., -2689., -51451., -6263. }, 0.4523712047583937 }, + { 1, { -44676., -29125., -21496., 62165., -11514., 20667. }, }, + { 0, { -47313., 131228., 153909., 13721., 54937., 13501. }, 0.4584750578982092 }, + { 0, { 64299., -217224., -204896., -47815., -89991., -26071. }, 0.4786471499447322 }, + { 0, { -216., 53443., -19130., -71538., -27839., -11228. }, 0.4920510287505367 }, + { 0, { -151224., -75735., -3305., 268854., -6542., 67361. }, 0.5051499531573665 }, + { 0, { 928196., 102377., -314167., -1414544., -33869., -402228. }, 0.5147029966036326 }, + { 0, { -1724399., 110969., 999802., 2605327., 184425., 789530. }, 0.5199630930448305 }, + { 0, { 40911206., -27399316., 26874089., 37399873., 10439229., 16767175. }, 0.5296669053399393 }, + { 1, { 583136., 1214598., 1755827., -1272416., 584159., -311166. }, }, + { 0, { 1173041., -1074191., -1886355., -1719260., -508991., -616258. }, 0.5369668320738028 }, + { 0, { -202800., 314145., 489969., 260218., 136957., 100165. }, 0.5445620632918582 }, + { 0, { 30834., -64556., -105954., -37083., -35677., -17746. }, 0.5559973222735549 }, + { 0, { 388., 18963., 34845., -2990., 13141., -175. }, 0.5645354635177183 }, + { 0, { -3029., -2222., -3901., 4299., -1477., 1512. }, 0.5864917785646289 }, + { 0, { 364., -3970., 4198., -17799., 1736., -7653. }, 0.6024030347783642 }, + { 0, { -64408., -16238., -14709., 52293., -7099., 22267. }, 0.6155618610057497 }, + { 0, { -8702., 7365., -847., 28860., 2496., 17960. }, 0.6266278765065182 }, + { 0, { 37681., 20807., -24633., 19631., -10642., 8265. }, 0.6366292306281224 }, + { 0, { 3191., 5638., -2365., 9854., -1386., 3658. }, 0.6449290790303238 }, + { 0, { -5177., -823., -2003., 5908., -949., 2341. }, 0.6763170666119763 }, + { 0, { -3638., 10059., 7207., 4377., 3151., 2651. }, 0.6862778987939261 }, + { 0, { 11748., -14352., -13920., -7897., -5625., -2944. }, 0.6979445752019332 }, + { 0, { -8438., 12018., 9236., 3586., 3477., 1505. }, 0.7048114577856822 }, + { 0, { 1834., -5463., -4042., -1281., -1755., -771. }, 0.7111948880743650 }, + { 0, { -4692., -8326., -4750., 8084., -2967., 3594. }, 0.7473196860221153 }, + { 0, { 4040., 13701., 10942., -11503., 6915., -5226. }, 0.7526899558709467 }, + { 0, { 22865., -59285., -48182., -15767., -20987., -6907. }, 0.7617757396112786 }, + { 1, { 3873., 1796., -260., -5778., -1031., -4126. }, }, + { 0, { 272., -668., 1897., 1033., 987., 184. }, 0.7769058037180200 }, + { 0, { -2176., 7071., 5492., 2930., 2571., 1313. }, 0.8199388514022748 }, + { 0, { -184998., 97937., 88915., 171155., 41794., 73600. }, 0.8350541004724259 }, + { 1, { -197., -3126., -715., 1748., -208., 825. }, }, + { 0, { -5824., 1942., -2170., -8871., -927., -3596. }, 0.8453935583217296 }, + { 0, { 252., 2148., -787., 1499., -241., 459. }, 0.8551127263577434 }, + { 0, { 3107., 6817., 10906., 19., 4504., -914. }, 0.8879713761393457 }, + { 0, { 6532., -6647., -8432., -9470., -3566., -3649. }, 0.8938517525956896 }, + { 1, { 2415., -4253., -3554., -6203., -2191., -2419. }, }, + { 0, { -3926., 523., -5326., 11396., -2537., 5007. }, 0.9076103122110721 }, + { 0, { 1486., 6143., -4417., -1583., -1883., -794. }, 0.9528977392964432 }, + { 0, { 1226., -908., 2507., -1706., 1029., -874. }, 0.9646777216958613 }, + { 0, { -11300., -22605., 26258., -9349., 12130., -5605. }, 0.9849512095278805 }, + { 1, { 1457., -2630., 860., 1293., 487., 641. }, }, + { 2, { -685., -2643., -646., -848., -225., -318. }, }, + { 0, { -2190., -3253., -891., -1611., -317., -665. }, 0.9964090016851210 }, + { 0, { -1179., -3116., -2763., 1595., -1346., 737. }, 1.0352639155374268 }, + { 0, { 7916., 3274., -3481., 4472., -1826., 2498. }, 1.0515675436820877 }, + { 0, { 697761., -973027., 901279., 634785., 369311., 295489. }, 1.0592810372818169 }, + { 1, { -1426., -5270., 2981., -566., 1562., -288. }, }, + { 0, { -1789., 2512., -1045., -777., -493., -461. }, 1.0720350844573199 }, + { 0, { 3343., -1231., -1017., -2862., -464., -1223. }, 1.1429483332496098 }, + { 0, { 11373., -2498., -1580., 8748., -883., 3741. }, 1.1609636069979286 }, + { 1, { -1522., -2635., 28., 1104., -15., 464. }, }, + { 0, { -1975., 3205., 2553., 2452., 995., 1112. }, 1.1691873087779718 }, + { 0, { -9107., -5910., -5019., 8600., -1999., 3899. }, 1.2152142837985198 }, + { 1, { -4., -1508., -1102., -242., -397., -127. }, }, + { 0, { -1971., 699., -3., 1482., -78., 551. }, 1.2226982614159414 }, + { 0, { -31., -206., 25., 63., 54., 23. }, 1.2355263592688024 }, + { 0, { 2581., 7563., 7150., -2433., 3120., -1128. }, 1.2857063346850945 }, + { 1, { 1638., -740., -410., -2267., -163., -1002. }, }, + { 0, { 6494., 16800., 14424., -5912., 6217., -2861. }, 1.2908372220692612 }, + { 0, { -2870., 4014., 4972., 2882., 2300., 1194. }, 1.3652019003010083 }, + { 1, { 121., -268., -412., 87., -162., 47. }, }, + { 2, { 204., -295., -187., 24., -76., 9. }, }, + { 0, { -3114., 953., -618., -2692., -475., -1304. }, 1.4390426416344881 }, + { 0, { 643., 554., -351., 588., -171., 247. }, 1.4790740463977397 }, + { 0, { 470., -497., -239., -9., -101., -35. }, 1.5778081754901920 }, + { 0, { 12015., -42122., 38323., 10981., 16121., 5766. }, 1.5889777636732787 }, + { 1, { -377., -28., -105., 615., -60., 248. }, }, + { 2, { -102., -86., -77., -32., -33., -28. }, }, + { 0, { -1329., 1696., 1422., 1073., 644., 441. }, 1.6698689170399983 }, + { 0, { 653., -443., 76., 737., 22., 321. }, 1.6917823552881666 }, + { 0, { 4010., -973., -776., -3727., -389., -1621. }, 1.7447101363840591 }, + { 0, { 796., 753., 911., -908., 375., -434. }, 1.8195524075201825 }, + { 0, { -67., 529., -320., 151., -164., 92. }, 1.8944084825549634 }, + { 0, { 10., -1636., 1676., -13., 718., 43. }, 2.1173586606692205 }, + { 0, { -176., -699., -800., 57., -346., 33. }, 2.1995558975407743 }, + { 0, { 4804., 493., -302., 4547., -271., 2069. }, 3.3406137564373255 }, + { 1, { -37., 63., -60., 6., -25., 5. }, }, + { 0, { -6127., -30327., 27236., -5550., 11893., -2472. }, 6.2830758108542479 }, + { 1, { 13., 96., 24., 144., -4., 74. }, }, + { 2, { 94., 86., 39., 73., 3., 45. }, }, + { 0, { -103., 11., 317., -154., 157., -57. }, 8.4710588767699999 }, + { 0, { -1072., -875., 799., -1217., 416., -503. }, 10.1988027176192690 }, + { 0, { -7126., 105., -353., -6736., 285., -3012. }, 10.2074359814049150 }, + { 1, { -735., 3920., -3778., -636., -1657., -531. }, }, + { 0, { -9779., 1441., -1464., -8409., -23., -3858. }, 10.2156685960931930 }, + { /* end uranus */ -1, }, +}; + +chap95_rec chap95_neptune[] = { + { 0, { -2753381808., 0., -2555187184., 0., -977694282., 0. }, 0. }, + { 1, { -53706852., 0., 9024894., 0., 5113590., 0. }, }, + { 0, { 5353414., 16329756., -10315608., -18211298., -4313685., -7909387. }, 0.0179617912970447 }, + { 0, { -19054385., -287482557., 282900211., 40600685., 114409567., 24195009. }, 0.0323644369574163 }, + { 0, { 171759338654., 246707191188., -226959547603., 161070501549., -97171931583., 59786666580. }, 0.0381185507042915 }, + { 0, { 269128284., 157897034., -86709918., 293605458., -39838078., 115245563. }, 0.0449423189622218 }, + { 0, { -93736103., -37825790., -26561507., -91732038., -9592733., -35920288. }, 0.0600427026897851 }, + { 0, { 178516553., 51475281., 124180124., 108331691., 49005129., 40587728. }, 0.0705779080356058 }, + { 0, { -1684231243., 681665499., -958998993., -1353650791., -355010040., -565296249. }, 0.0772675784146183 }, + { 0, { 1122264068., -578428299., 1063564939., 463713621., 414676760., 190864744. }, 0.0843726142307477 }, + { 0, { -781685034., 475952164., -808860716., -228929931., -316705638., -94548544. }, 0.0871507153151969 }, + { 0, { 56385979., -39979207., 64276567., 7694958., 25352958., 3214483. }, 0.1012471242645664 }, + { 1, { 63310243., 43285497., 22448880., 66731902., 8926250., 26309541. }, }, + { 0, { 2712359., -37080616., 26122509., -21572378., 10482381., -8529034. }, 0.1128959119291703 }, + { 0, { 1376659., 7176921., -1442553., 7206580., -479409., 2921144. }, 0.1246811309098641 }, + { 0, { -2552808., -3146754., -931704., -4559708., -491329., -1812338. }, 0.1349961443322037 }, + { 0, { 1162812., 462968., 719939., 2310847., 376498., 885784. }, 0.1402125408882514 }, + { 0, { -252283., -142326., -110247., -49287., -46731., -28945. }, 0.1616161402063230 }, + { 0, { 243162., -91598., 106479., 16854., 55597., 8501. }, 0.1776262925892778 }, + { 0, { -672251., 231673., -319786., 386301., -155882., 135214. }, 0.1904084544956719 }, + { 0, { 1867133., -1866896., 239943., -1803069., 228227., -732880. }, 0.2026926199831023 }, + { 0, { 32066276., -61274160., 6958960., -9094869., 4399306., -3854675. }, 0.2132050927412489 }, + { 1, { -11587231., -5526999., -7458452., 2330330., -3274130., 322813. }, }, + { 0, { -16700375., 45567407., 14051147., 28126677., 3238872., 12733553. }, 0.2160078733553654 }, + { 0, { 601249., -3740179., -1686685., -1590049., -510731., -804485. }, 0.2225065497464809 }, + { 0, { 71272., 256103., 179344., -10427., 65192., 15214. }, 0.2362432045351159 }, + { 0, { -58547., -82547., -51318., 58153., -20501., 15047. }, 0.2470536247773912 }, + { 0, { -6723., 19924., 26278., 12439., 9453., 3700. }, 0.2721326326759872 }, + { 0, { -3710., 4976., -7051., 254., -1464., 195. }, 0.2834391769690069 }, + { 0, { -12572., -6375., 5687., 15436., 615., 5233. }, 0.2938091870567225 }, + { 0, { -14716., 204103., 159833., 45074., 65416., 11053. }, 0.3117802888037338 }, + { 0, { -17577., 42568., 85327., -50768., 36610., -17999. }, 0.3148973170728874 }, + { 0, { -12308., -4224., -5418., 20456., -3011., 7048. }, 0.3237199721077774 }, + { 0, { -453., 863., 3006., -1602., 798., -820. }, 0.3434014414974197 }, + { 0, { -4296., 775., 4295., 2013., 1131., 245. }, 0.3679427772208049 }, + { 0, { 2844., 8238., -10394., 16799., -2798., 8324. }, 0.3785701069003719 }, + { 0, { -12477., -18952., 16324., -32949., 3954., -15266. }, 0.3833769854125967 }, + { 0, { -22365., 128., 5047., -4988., 1724., -1653. }, 0.3921552738853996 }, + { 0, { 4383., -6090., 178., -7672., -722., -3343. }, 0.4052046013289639 }, + { 0, { 714788., -68799., 122150., 736324., 10410., 310430. }, 0.4266933782608374 }, + { 1, { 12121., 14734., 49080., -28648., 20910., -8012. }, }, + { 0, { 46510., -21693., -58299., -84149., -12783., -39407. }, 0.4328778616668182 }, + { 0, { -18771., 8624., 16635., 18600., 2724., 10462. }, 0.4397536016965201 }, + { 0, { 3796., -9377., -6884., 415., -1798., -1014. }, 0.4503999814583104 }, + { 0, { -7089., 1370., -2220., 4940., -839., 2525. }, 0.4636405151525668 }, + { 0, { 5125., -1762., 2170., -4527., 631., -2166. }, 0.4745702135817129 }, + { 0, { 36688., -1584., -8174., -32426., -3946., -13037. }, 0.4886034832877044 }, + { 0, { -5607., 1955., 1641., 547., 484., -201. }, 0.5046352473687760 }, + { 0, { 45109., -21568., 12616., 26255., 6182., 12720. }, 0.5178003462986053 }, + { 0, { 40893658., -28000813., 26124943., 37354584., 10197353., 16693506. }, 0.5296623039564303 }, + { 1, { -21062., -35782., 31769., -20330., 15353., -11834. }, }, + { 2, { 10720., 5927., -12424., -538., -3613., -359. }, }, + { 0, { -28607., 23386., -38172., -43627., -12236., -20256. }, 0.5403804874893231 }, + { 0, { 66., 635., 4597., 3533., 1279., 1843. }, 0.5486365851140401 }, + { 0, { -1646., 2776., -3727., -1793., -1436., -354. }, 0.5631942288095021 }, + { 0, { -353., 460., 306., -526., 107., -133. }, 0.5739537566607668 }, + { 0, { -48., -518., 599., -406., 229., -183. }, 0.6031743297859348 }, + { 0, { -230., -43., -65., 493., -36., 204. }, 0.6175060453479511 }, + { 0, { 19445., 2550., -25130., 13108., -10967., 5418. }, 0.6333639350967218 }, + { 0, { 13473., 21421., -1023., 17345., -1204., 6355. }, 0.6373233385189475 }, + { 1, { 864., -8826., 6444., 11189., 2532., 4949. }, }, + { 0, { 1578., 3023., 2194., 1035., 836., 338. }, 0.6488504417528818 }, + { 0, { -3340., -7100., -6757., 2738., -2684., 1301. }, 0.6617542675140329 }, + { 0, { 1017., 744., 847., -982., 332., -425. }, 0.6999703675245400 }, + { 1, { 42., 10., 19., -41., 10., -16. }, }, + { 0, { 1891., 647., -479., 1705., -149., 715. }, 0.7361514522905745 }, + { 0, { -747., -1284., 1091., -507., 523., -190. }, 0.7442630004913908 }, + { 0, { -25., 104., -104., -129., -52., -37. }, 0.7785774183375729 }, + { 0, { -512., 349., 592., 506., 250., 205. }, 0.8337771392669406 }, + { 0, { -6683., 244., -856., -5864., -184., -2467. }, 0.8456021851592702 }, + { 1, { -1203., -318., -1016., 257., -373., 120. }, }, + { 0, { -24., 3933., -1820., 1132., -757., 301. }, 0.8511022350336571 }, + { 0, { 201., -293., -309., -190., -131., -68. }, 0.8740442975723336 }, + { 0, { 308., -601., -394., -483., -169., -197. }, 0.9077766553319553 }, + { 0, { -16598., 27372., 14431., 13730., 6210., 4914. }, 0.9458755575816939 }, + { 1, { -126., -1380., -1472., 3523., -609., 1504. }, }, + { 2, { 143., -540., 222., -105., 87., -32. }, }, + { 0, { 329., 51., -160., 190., -86., 81. }, 0.9622835434242619 }, + { 0, { 128., 272., 129., -159., 60., -76. }, 0.9782201450147658 }, + { 0, { 420., 770., -363., -155., -115., -92. }, 1.0124707282567436 }, + { 0, { -2248., -3936., 3766., -2218., 1312., -630. }, 1.0195444397190756 }, + { 0, { -857., -445., 435., -868., 168., -286. }, 1.0327159571739788 }, + { 0, { 3376., 287., -315., 3751., -219., 1451. }, 1.0465646752474935 }, + { 0, { 703800., -971644., 898780., 636713., 368186., 296800. }, 1.0592831516596322 }, + { 1, { -2151., -2956., 2235., -1431., 946., -697. }, }, + { 2, { -483., -834., 925., 208., 376., 16. }, }, + { 0, { -2186., 1237., -468., -857., -221., -500. }, 1.0699466056843263 }, + { 0, { 186., -107., -155., -33., -60., 1. }, 1.0856512764294945 }, + { 0, { -29., 176., 74., -52., 22., -24. }, 1.1079517768853906 }, + { 1, { 68., -82., -7., 40., -2., 17. }, }, + { 2, { 47., -125., -59., 70., -19., 30. }, }, + { 0, { -79., -181., -17., 75., 0., 31. }, 1.1242912886086618 }, + { 0, { 11970., 27., -219., 9608., -385., 4137. }, 1.1622448658047415 }, + { 1, { 148., -416., -127., 187., -55., 93. }, }, + { 0, { -1209., -240., 543., 444., 267., 180. }, 1.1657893477276102 }, + { 0, { 469., -600., 571., 404., 237., 192. }, 1.2652830224888050 }, + { 0, { -354., 198., -247., -335., -95., -149. }, 1.3749277491569207 }, + { 0, { 1875., 1364., 1214., -1793., 447., -768. }, 1.4364654070205274 }, + { 1, { 8., 17., -6., -31., -6., -14. }, }, + { 0, { -139., 116., 212., 18., 88., 1. }, 1.4674691182537039 }, + { 0, { 498., 950., -86., 629., -57., 244. }, 1.4773951127670801 }, + { 0, { -211., 132., -176., -151., -46., -37. }, 1.5126367782986652 }, + { 0, { 388., -45., -90., 143., -56., 57. }, 1.5755868837627032 }, + { 0, { -262., 394., 82., 179., 60., 76. }, 1.5824073222387700 }, + { 0, { 12274., -42141., 38563., 10654., 16215., 5586. }, 1.5888971797699629 }, + { 1, { 79., 26., 108., -116., 43., -61. }, }, + { 0, { 785., -282., 272., 723., 98., 317. }, 1.6918870360592064 }, + { 0, { 107., -210., -181., -174., -73., -72. }, 1.9281473841900221 }, + { 0, { -121., -1883., 1696., -129., 731., -7. }, 2.1185461864868773 }, + { 0, { 4845., 396., -313., 4430., -275., 2018. }, 3.3406127811310191 }, + { 1, { 1., 25., -4., 6., -1., 2. }, }, + { 0, { -5503., -29918., 27443., -5129., 11901., -2218. }, 6.2830758192539502 }, + { 0, { 149., -16., 70., 137., 24., 69. }, 6.6811483956904603 }, + { 0, { 14., 35., -47., -48., -19., -18. }, 8.4710967963441863 }, + { 1, { 1., -1., -17., -7., -7., -4. }, }, + { 0, { -17638., 555., -991., -16049., 673., -7250. }, 10.2132840866995910 }, + { 0, { -44., -259., 211., -59., 89., -24. }, 12.5662764645159580 }, + { /* end neptune */ -1, }, +}; + +chap95_rec chap95_pluto[] = { + { 0, { 101045891905., 0., 110312086224., 0., 6172492792., 0. }, 0. }, + { 1, { 2736962357., 0., 7289921703., 0., 8356828229., 0. }, }, + { 0, { -197631754827., 306850452168., -363706825084., -174047739469., -83742488844., -166197114948. }, 0.0255535185296511 }, + { 1, { -10339882709., 3627560682., -1704596538., 16082008148., -2615797675., 26582875457. }, }, + { 2, { 4555881844., 5354987944., 14163087849., 13295578846., 16544976961., 15318697408. }, }, + { 0, { 12877551757., 9141005248., 38823958976., 14074786713., 47081142550., 15934841957. }, 0.0383093966256461 }, + { 0, { -20363081906., 43534352230., -68888048997., -6054817551., -37922256273., -13665923314. }, 0.0512632279013590 }, + { 0, { 11372859069., -7331041505., 34135169446., -14164330338., 35562426110., -15256543947. }, 0.0629625800045217 }, + { 0, { -25223811753., 30334977886., -76993608077., 67207355885., -78022096909., 72709750549. }, 0.0739104871604531 }, + { 0, { 19031032676., -21606847641., 49490563510., -67837042251., 54793488046., -76660221358. }, 0.0843726142307477 }, + { 1, { 9888109415., 13390931761., 31569755508., 36949340015., 35801709881., 41063108577. }, }, + { 2, { -5391246864., 9125341237., -13760381761., 26757260022., -14709006932., 29981422406. }, }, + { 0, { 77016900., 8576436595., -758303524., 19868503441., 945693837., 21114141886. }, 0.1009656667626818 }, + { 0, { -425710709., -2201772586., -2981443460., -6781825029., -3324565933., -7783206250. }, 0.1181216342983851 }, + { 1, { 2255988361., -245384099., 5983679140., -939391729., 6514267045., -1323842110. }, }, + { 2, { 531179571., 1086625691., 2182247914., 3044397909., 2484824490., 3408389022. }, }, + { 0, { 670122662., 438458646., 1753307958., 718209879., 2047795531., 636335929. }, 0.1384952768343311 }, + { 0, { -179746215., -90394676., -766063009., -205567765., -854408253., -261725146. }, 0.1499201895782055 }, + { 1, { 110140865., -359336510., 28912500., -843378659., -67920831., -973289319. }, }, + { 0, { -118071179., 1819649., -265130729., 91955370., -298913452., 133716152. }, 0.1607487697162686 }, + { 0, { 38739517., 9002149., 12071193., -2098061., 15714901., -32081340. }, 0.1760768320056049 }, + { 0, { -2332129., 6073325., -5475022., 19141973., -5216109., 20872520. }, 0.1900452184842649 }, + { 0, { 8137788., -2826068., -3014741., -6719062., -5256740., -14189611. }, 0.2024941844674784 }, + { 0, { 18559203., -16541614., 25112499., 27558953., 14213163., 19938478. }, 0.2134752084935937 }, + { 0, { 1940133., -1267576., -1439934., -1986889., -2525015., -3851133. }, 0.2269557049635166 }, + { 1, { 1917476., -1704590., 4921317., -5434051., 4782139., -6305807. }, }, + { 0, { -822410., -563503., -2747944., -903463., -3210523., -702889. }, 0.2402479397150676 }, + { 0, { 962595., -74013., 1141117., 518365., 966375., 17190. }, 0.2531177145689346 }, + { 0, { -135658., -8463., -393590., 160618., -448155., 267162. }, 0.2643717493874742 }, + { 0, { 231442., -143885., 176186., -1443., 93050., -109960. }, 0.2777029906063622 }, + { 0, { -3000., -245., -27453., 92186., -35712., 133397. }, 0.2900297658482435 }, + { 0, { 55997., -115242., -44421., -45883., -43549., -47825. }, 0.3037412654012783 }, + { 0, { -14892., 15253., 52487., 23252., 43486., 48497. }, 0.3142803959054077 }, + { 0, { -2949., -95938., -94512., -17869., -51976., 3765. }, 0.3264027536592037 }, + { 0, { 8894., 9213., 33696., 2580., 28347., 6790. }, 0.3373713684595000 }, + { 0, { -16468., -43883., -57588., 8839., -17108., 18484. }, 0.3506196546089751 }, + { 0, { -4324., 14942., 537., 2320., 8817., -1258. }, 0.3768935755307548 }, + { 0, { -2257., -145., -272., -4909., 4559., -6184. }, 0.3901294315026133 }, + { 0, { -10889., 10437., -5474., 6213., 16279., -4595. }, 0.4045287784128869 }, + { 0, { 719443., -70760., 86542., 684112., 3209., 279550. }, 0.4267968486470127 }, + { 1, { 3728., 5875., 3969., 4141., 3826., 956. }, }, + { 2, { 9968., 1181., 2923., 6780., 6338., 2119. }, }, + { 0, { 6842., 1584., 10374., 4788., 8573., -4658. }, 0.4456721426794963 }, + { 0, { -10089., 9939., 3641., 7449., 544., 598. }, 0.4579662921251779 }, + { 0, { 1823., 688., 6471., -612., 1565., -5241. }, 0.4724826607880908 }, + { 0, { -3424., 9654., 4992., 7807., 583., 1356. }, 0.4869141744280314 }, + { 0, { -449., -1794., 3826., -7250., -2319., -7298. }, 0.5001714317315645 }, + { 0, { 15872., 9071., 15995., 31749., 10331., 14516. }, 0.5137491938947873 }, + { 0, { 40907450., -28046763., 26106307., 37325417., 10171143., 16690754. }, 0.5296557456960209 }, + { 1, { -42177., -28947., 38775., -19498., 29548., -4665. }, }, + { 2, { 3107., 30472., -6348., 11400., 8980., 1831. }, }, + { 0, { -7558., 61741., -13579., -15470., 9629., -26943. }, 0.5428748902518665 }, + { 0, { -5153., -16254., 1129., 1453., -5621., 9705. }, 0.5545763246422408 }, + { 1, { 4786., -5955., 927., 2343., -4914., 1978. }, }, + { 0, { -472., -1295., 65., -1013., 81., 865. }, 0.5737334589484931 }, + { 0, { 1071., -818., -1860., -1756., -2076., -217. }, 0.6240874769868805 }, + { 0, { 35210., 26306., -24283., 31193., -11240., 11870. }, 0.6381677442023816 }, + { 1, { -1433., -467., -610., 819., -193., 1466. }, }, + { 2, { -2302., -1111., 916., -1272., 326., -143. }, }, + { 0, { 713., -751., -578., -1512., 156., -696. }, 0.6775366989691358 }, + { 1, { 60., 611., -229., 120., -170., -479. }, }, + { 0, { 566., 1322., -824., 882., 271., -163. }, 0.7307010456855323 }, + { 1, { 315., -273., 931., -867., 656., -752. }, }, + { 0, { 2637., -5581., -3871., -2275., -3921., 187. }, 0.8349274544218315 }, + { 0, { -6012., 8879., 923., -5393., 1314., -3852. }, 0.8466308769723183 }, + { 1, { -2430., -2929., -1564., 2843., 65., 3053. }, }, + { 2, { -373., -2949., -1724., 190., -949., 999. }, }, + { 0, { 3787., 756., 723., -3294., -966., -1395. }, 0.8803279870880313 }, + { 0, { 5446., -1146., -595., -4608., -1861., -1044. }, 0.9048452745134871 }, + { 0, { 5058., -2711., -831., -3667., -1554., -139. }, 0.9284980837327494 }, + { 0, { 1760., -6922., -4114., -3639., -1717., 694. }, 0.9630502889662660 }, + { 1, { 963., 1525., 703., -3798., -966., -2055. }, }, + { 0, { -854., -5315., -3964., -3549., -797., 142. }, 0.9850575449612223 }, + { 1, { 453., 513., -533., -1316., -1407., -442. }, }, + { 0, { -1452., 2161., -2167., -2392., 843., -1017. }, 1.0358203937225836 }, + { 0, { 717822., -1016247., 926007., 647088., 383619., 291083. }, 1.0592833248900753 }, + { 1, { -29524., -7934., 4354., -18649., -4618., -10392. }, }, + { 2, { -5165., 7903., -5462., -3951., -3606., -275. }, }, + { 0, { -13391., 43036., -26981., -8012., -15174., 6191. }, 1.0698620958167548 }, + { 1, { -19633., -2810., 1597., -10192., -4219., -4352. }, }, + { 0, { 273., 2230., -349., -375., 851., 287. }, 1.0830212781676249 }, + { 0, { 10855., -624., 671., 9748., 207., 3846. }, 1.1622398168028405 }, + { 1, { -33., 92., -124., -554., -92., -612. }, }, + { 0, { 448., -1008., 1081., 183., 623., -187. }, 1.2654499680761597 }, + { 0, { -207., 526., 176., -733., 246., -400. }, 1.3757220045803040 }, + { 0, { 638., 340., -422., 36., 44., 18. }, 1.4777197679290477 }, + { 0, { 12128., -41950., 38517., 10211., 16357., 5050. }, 1.5888963534561586 }, + { 1, { -267., 195., -296., 12., -482., 121. }, }, + { 2, { -41., 86., -13., 298., -132., 311. }, }, + { 0, { 667., -280., 347., 903., -21., 475. }, 1.6918774676128379 }, + { 0, { 30., -1843., 2162., 314., 1153., 512. }, 2.1185453910327063 }, + { 0, { 4845., 477., -393., 4358., -362., 2072. }, 3.3406128168607023 }, + { 0, { -5939., -29727., 27855., -4133., 12163., -1725. }, 6.2830758108873654 }, + { 1, { 5., -58., 6., 45., 39., 54. }, }, + { 0, { -223., 149., 91., 102., 231., 420. }, 8.4710959288534031 }, + { 0, { -17640., -47., -831., -15721., 782., -7065. }, 10.2132856585962150 }, + { 1, { 165., 60., -38., 154., 112., 136. }, }, + { 2, { 20., 46., 112., -30., 119., 10. }, }, + { /* end pluto */ -1, }, +}; + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: chap95_data.c,v $ $Date: 1997/05/19 18:21:12 $ $Revision: 1.1 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/circum.c b/Common/Libraries/XEphemAstroLib/src/circum.c new file mode 100644 index 0000000000000000000000000000000000000000..31dbc4bbb6843f5185d438f122cf3668705efc73 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/circum.c @@ -0,0 +1,861 @@ +/* given a Now and an Obj with the object definition portion filled in, + * fill in the sky position (s_*) portions. + * calculation of positional coordinates reworked by + * Michael Sternberg + * 3/11/98: deflect was using op->s_hlong before being set in cir_pos(). + * 4/19/98: just edit a comment + */ + +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + + +static int obj_planet (Now *np, Obj *op); +static int obj_binary (Now *np, Obj *op); +static int obj_2binary (Now *np, Obj *op); +static int obj_fixed (Now *np, Obj *op); +static int obj_elliptical (Now *np, Obj *op); +static int obj_hyperbolic (Now *np, Obj *op); +static int obj_parabolic (Now *np, Obj *op); +static int sun_cir (Now *np, Obj *op); +static int moon_cir (Now *np, Obj *op); +static double solveKepler (double M, double e); +static void binaryStarOrbit (double t, double T, double e, double o, double O, + double i, double a, double P, double *thetap, double *rhop); +static void cir_sky (Now *np, double lpd, double psi, double rp, double *rho, + double lam, double bet, double lsn, double rsn, Obj *op); +static void cir_pos (Now *np, double bet, double lam, double *rho, Obj *op); +static void elongation (double lam, double bet, double lsn, double *el); +static void deflect (double mjd1, double lpd, double psi, double rsn, + double lsn, double rho, double *ra, double *dec); +static double h_albsize (double H); + +/* given a Now and an Obj, fill in the approprirate s_* fields within Obj. + * return 0 if all ok, else -1. + */ +int +obj_cir (Now *np, Obj *op) +{ + op->o_flags &= ~NOCIRCUM; + switch (op->o_type) { + case BINARYSTAR: return (obj_binary (np, op)); + case FIXED: return (obj_fixed (np, op)); + case ELLIPTICAL: return (obj_elliptical (np, op)); + case HYPERBOLIC: return (obj_hyperbolic (np, op)); + case PARABOLIC: return (obj_parabolic (np, op)); + case EARTHSAT: return (obj_earthsat (np, op)); + case PLANET: return (obj_planet (np, op)); + default: + printf ("obj_cir() called with type %d %s\n", op->o_type, op->o_name); + abort(); + return (-1); /* just for lint */ + } +} + +static int +obj_planet (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lpd, psi; /* heliocentric ecliptic long and lat */ + double rp; /* dist from sun */ + double rho; /* dist from earth */ + double lam, bet; /* geocentric ecliptic long and lat */ + double dia, mag; /* angular diameter at 1 AU and magnitude */ + PLCode p; + + /* validate code and check for a few special cases */ + p = op->pl_code; + if (p == SUN) + return (sun_cir (np, op)); + if (p == MOON) + return (moon_cir (np, op)); + if (op->pl_moon != X_PLANET) + return (plmoon_cir (np, op)); + if (p < 0 || p > MOON) { + printf ("unknown planet code: %d\n", p); + abort(); + } + + /* planet itself */ + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + /* find helio long/lat; sun/planet and earth/planet dist; ecliptic + * long/lat; diameter and mag. + */ + plans(mjed, p, &lpd, &psi, &rp, &rho, &lam, &bet, &dia, &mag); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* set magnitude and angular size */ + set_smag (op, mag); + op->s_size = (float)(dia/rho); + + return (0); +} + +static int +obj_binary (Now *np, Obj *op) +{ + /* always compute circumstances of primary */ + if (obj_fixed (np, op) < 0) + return (0); + + /* compute secondary only if requested, and always reset request flag */ + if (!op->b_2compute) + return (0); + op->b_2compute = 0; + return (obj_2binary (np, op)); +} + +/* compute position of secondary component of a BINARYSTAR */ +static int +obj_2binary (Now *np, Obj *op) +{ + if (op->b_nbp > 0) { + /* we just have discrete pa/sep, project each from primary */ + int i; + for (i = 0; i < op->b_nbp; i++) { + BinPos *bp = &op->b_bp[i]; + bp->bp_dec = op->s_dec + bp->bp_sep*cos(bp->bp_pa); + bp->bp_ra = op->s_ra + bp->bp_sep*sin(bp->bp_pa)/cos(op->s_dec); + } + } else { + BinOrbit *bp = &op->b_bo; + double t, theta, rho; + + mjd_year (mjd, &t); + binaryStarOrbit (t, bp->bo_T, bp->bo_e, bp->bo_o, bp->bo_O, + bp->bo_i, bp->bo_a, bp->bo_P, &theta, &rho); + bp->bo_pa = (float)theta; + bp->bo_sep = (float)rho; + rho = degrad(rho/3600.); /* arc secs to rads */ + bp->bo_dec = op->s_dec + rho*cos(theta); + bp->bo_ra = op->s_ra + rho*sin(theta)/cos(op->s_dec); + } + + return (0); +} + +/* from W. M. Smart */ +static void +binaryStarOrbit ( +double t, /* desired ephemeris epoch, year */ +double T, /* epoch of periastron, year */ +double e, /* eccentricity */ +double o, /* argument of periastron, degrees */ +double O, /* ascending node, degrees */ +double i, /* inclination, degrees */ +double a, /* semi major axis, arcsecs */ +double P, /* period, years */ +double *thetap, /* position angle, rads E of N */ +double *rhop) /* separation, arcsecs */ +{ + double M, E, cosE, nu, cosnu, r, rho, theta; + + /* find mean anomaly, insure 0..2*PI */ + M = 2*PI/P*(t-T); + range (&M, 2*PI); + + /* solve for eccentric anomaly */ + E = solveKepler (M, e); + cosE = cos(E); + + /* find true anomaly and separation */ + cosnu = (cosE - e)/(1.0 - e*cosE); + r = a*(1.0 - e*e)/(1.0 + e*cosnu); + nu = acos(cosnu); + if (E > PI) + nu = -nu; + + /* project onto sky */ + theta = atan(tan(nu+degrad(o))*cos(degrad(i))) + degrad(O); + rho = r*cos(nu+degrad(o))/cos(theta-degrad(O)); + if (rho < 0) { + theta += PI; + rho = -rho; + } + range (&theta, 2*PI); + + *thetap = theta; + *rhop = rho; +} + +/* solve kepler equation using Newton-Raphson search. + * Charles and Tatum have shown it always converges starting with PI. + */ +static double +solveKepler (double M, double e) +{ + double E, Eprime = PI; + + do { + double cosE = cos(Eprime); + E = Eprime; + Eprime = (M - e*(E*cosE - sin(E)))/(1.0 - e*cosE); + } while (fabs(E-Eprime) > 1e-7); + + return (Eprime); +} + +static int +obj_fixed (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun, dist from sn to earth*/ + double lam, bet; /* geocentric ecliptic long and lat */ + double ha; /* local hour angle */ + double el; /* elongation */ + double alt, az; /* current alt, az */ + double ra, dec; /* ra and dec at equinox of date */ + double rpm, dpm; /* astrometric ra and dec with PM to now */ + double lst; + + /* on the assumption that the user will stick with their chosen display + * epoch for a while, we move the defining values to match and avoid + * precession for every call until it is changed again. + * N.B. only compare and store jd's to lowest precission (f_epoch). + * N.B. maintaining J2k ref (which is arbitrary) helps avoid accum err + */ + if (epoch != EOD && (float)epoch != (float)op->f_epoch) { + double pr = op->f_RA, pd = op->f_dec, fe = (float)epoch; + /* first bring back to 2k */ + precess (op->f_epoch, J2000, &pr, &pd); + pr += op->f_pmRA*(J2000-op->f_epoch); + pd += op->f_pmdec*(J2000-op->f_epoch); + /* then to epoch */ + pr += op->f_pmRA*(fe-J2000); + pd += op->f_pmdec*(fe-J2000); + precess (J2000, fe, &pr, &pd); + op->f_RA = (float)pr; + op->f_dec = (float)pd; + op->f_epoch = (float)fe; + } + + /* apply proper motion .. assume pm epoch reference equals equinox */ + rpm = op->f_RA + op->f_pmRA*(mjd-op->f_epoch); + dpm = op->f_dec + op->f_pmdec*(mjd-op->f_epoch); + + /* set ra/dec to astrometric @ equinox of date */ + ra = rpm; + dec = dpm; + precess (op->f_epoch, mjed, &ra, &dec); + + /* convert equatoreal ra/dec to mean geocentric ecliptic lat/long */ + eq_ecl (mjed, ra, dec, &bet, &lam); + + /* find solar ecliptical long.(mean equinox) and distance from earth */ + sunpos (mjed, &lsn, &rsn, NULL); + + /* allow for relativistic light bending near the sun */ + deflect (mjed, lam, bet, lsn, rsn, 1e10, &ra, &dec); + + /* TODO: correction for annual parallax would go here */ + + /* correct EOD equatoreal for nutation/aberation to form apparent + * geocentric + */ + nut_eq(mjed, &ra, &dec); + ab_eq(mjed, lsn, &ra, &dec); + op->s_gaera = (float)ra; + op->s_gaedec = (float)dec; + + /* set s_ra/dec -- apparent if EOD else astrometric */ + if (epoch == EOD) { + op->s_ra = (float)ra; + op->s_dec = (float)dec; + } else { + /* annual parallax at time mjd is to be added here, too, but + * technically in the frame of equinox (usually different from mjd) + */ + op->s_ra = rpm; + op->s_dec = dpm; + } + + /* compute elongation from ecliptic long/lat and sun geocentric long */ + elongation (lam, bet, lsn, &el); + el = raddeg(el); + op->s_elong = (float)el; + + /* these are really the same fields ... + op->s_mag = op->f_mag; + op->s_size = op->f_size; + */ + + /* alt, az: correct for refraction; use eod ra/dec. */ + now_lst (np, &lst); + ha = hrrad(lst) - ra; + hadec_aa (lat, ha, dec, &alt, &az); + refract (pressure, temp, alt, &alt); + op->s_alt = alt; + op->s_az = az; + + return (0); +} + +/* compute sky circumstances of an object in heliocentric elliptic orbit at *np. + */ +static int +obj_elliptical (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double dt; /* light travel time to object */ + double lg; /* helio long of earth */ + double nu; /* true anomaly */ + double rp=0; /* distance from the sun */ + double lo, slo, clo; /* angle from ascending node */ + double inc; /* inclination */ + double psi=0; /* heliocentric latitude */ + double spsi=0, cpsi=0; /* trig of heliocentric latitude */ + double lpd; /* heliocentric longitude */ + double rho=0; /* distance from the Earth */ + double om; /* arg of perihelion */ + double Om; /* long of ascending node. */ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double ll=0, sll, cll; /* helio angle between object and earth */ + double mag; /* magnitude */ + double e_n; /* mean daily motion */ + double tp; /* time from perihelion (days) */ + double rpd=0; + double y; + int pass; + + /* find location of earth from sun now */ + sunpos (mjed, &lsn, &rsn, 0); + lg = lsn + PI; + + /* mean daily motion is derived fro mean distance */ + e_n = 0.9856076686/pow((double)op->e_a, 1.5); + + /* correct for light time by computing position at time mjd, then + * again at mjd-dt, where + * dt = time it takes light to travel earth-object distance. + */ + dt = 0; + for (pass = 0; pass < 2; pass++) { + + reduce_elements (op->e_epoch, mjd-dt, degrad(op->e_inc), + degrad (op->e_om), degrad (op->e_Om), + &inc, &om, &Om); + + tp = mjed - dt - (op->e_cepoch - op->e_M/e_n); + if (vrc (&nu, &rp, tp, op->e_e, op->e_a*(1-op->e_e)) < 0) + op->o_flags |= NOCIRCUM; + nu = degrad(nu); + lo = nu + om; + slo = sin(lo); + clo = cos(lo); + spsi = slo*sin(inc); + y = slo*cos(inc); + psi = asin(spsi); + lpd = atan(y/clo)+Om; + if (clo<0) lpd += PI; + range (&lpd, 2*PI); + cpsi = cos(psi); + rpd = rp*cpsi; + ll = lpd-lg; + rho = sqrt(rsn*rsn+rp*rp-2*rsn*rp*cpsi*cos(ll)); + + dt = rho*LTAU/3600.0/24.0; /* light travel time, in days / AU */ + } + + /* compute sin and cos of ll */ + sll = sin(ll); + cll = cos(ll); + + /* find geocentric ecliptic longitude and latitude */ + if (rpd < rsn) + lam = atan(-1*rpd*sll/(rsn-rpd*cll))+lg+PI; + else + lam = atan(rsn*sll/(rpd-rsn*cll))+lpd; + range (&lam, 2*PI); + bet = atan(rpd*spsi*sin(lam-lpd)/(cpsi*rsn*sll)); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + if (op->e_mag.whichm == MAG_HG) { + /* the H and G parameters from the Astro. Almanac. + */ + hg_mag (op->e_mag.m1, op->e_mag.m2, rp, rho, rsn, &mag); + if (op->e_size) + op->s_size = (float)(op->e_size / rho); + else + op->s_size = (float)(h_albsize (op->e_mag.m1)/rho); + } else { + /* the g/k model of comets */ + gk_mag (op->e_mag.m1, op->e_mag.m2, rp, rho, &mag); + op->s_size = (float)(op->e_size / rho); + } + set_smag (op, mag); + + return (0); +} + +/* compute sky circumstances of an object in heliocentric hyperbolic orbit. + */ +static int +obj_hyperbolic (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double dt; /* light travel time to object */ + double lg; /* helio long of earth */ + double nu; /* true anomaly and eccentric anomaly */ + double rp=0; /* distance from the sun */ + double lo, slo, clo; /* angle from ascending node */ + double inc; /* inclination */ + double psi=0; /* heliocentric latitude */ + double spsi=0, cpsi=0; /* trig of heliocentric latitude */ + double lpd; /* heliocentric longitude */ + double rho=0; /* distance from the Earth */ + double om; /* arg of perihelion */ + double Om; /* long of ascending node. */ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double e; /* fast eccentricity */ + double ll=0, sll, cll; /* helio angle between object and earth */ + double mag; /* magnitude */ + double a; /* mean distance */ + double tp; /* time from perihelion (days) */ + double rpd=0; + double y; + int pass; + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + lg = lsn + PI; + e = op->h_e; + a = op->h_qp/(e - 1.0); + + /* correct for light time by computing position at time mjd, then + * again at mjd-dt, where + * dt = time it takes light to travel earth-object distance. + */ + dt = 0; + for (pass = 0; pass < 2; pass++) { + + reduce_elements (op->h_epoch, mjd-dt, degrad(op->h_inc), + degrad (op->h_om), degrad (op->h_Om), + &inc, &om, &Om); + + tp = mjed - dt - op->h_ep; + if (vrc (&nu, &rp, tp, op->h_e, op->h_qp) < 0) + op->o_flags |= NOCIRCUM; + nu = degrad(nu); + lo = nu + om; + slo = sin(lo); + clo = cos(lo); + spsi = slo*sin(inc); + y = slo*cos(inc); + psi = asin(spsi); + lpd = atan(y/clo)+Om; + if (clo<0) lpd += PI; + range (&lpd, 2*PI); + cpsi = cos(psi); + rpd = rp*cpsi; + ll = lpd-lg; + rho = sqrt(rsn*rsn+rp*rp-2*rsn*rp*cpsi*cos(ll)); + + dt = rho*5.775518e-3; /* light travel time, in days */ + } + + /* compute sin and cos of ll */ + sll = sin(ll); + cll = cos(ll); + + /* find geocentric ecliptic longitude and latitude */ + if (rpd < rsn) + lam = atan(-1*rpd*sll/(rsn-rpd*cll))+lg+PI; + else + lam = atan(rsn*sll/(rpd-rsn*cll))+lpd; + range (&lam, 2*PI); + bet = atan(rpd*spsi*sin(lam-lpd)/(cpsi*rsn*sll)); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + gk_mag (op->h_g, op->h_k, rp, rho, &mag); + set_smag (op, mag); + op->s_size = (float)(op->h_size / rho); + + return (0); +} + +/* compute sky circumstances of an object in heliocentric hyperbolic orbit. + */ +static int +obj_parabolic (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double mag; /* magnitude */ + double inc, om, Om; + double lpd, psi, rp, rho; + double dt; + int pass; + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + /* two passes to correct lam and bet for light travel time. */ + dt = 0.0; + for (pass = 0; pass < 2; pass++) { + reduce_elements (op->p_epoch, mjd-dt, degrad(op->p_inc), + degrad(op->p_om), degrad(op->p_Om), &inc, &om, &Om); + comet (mjed-dt, op->p_ep, inc, om, op->p_qp, Om, + &lpd, &psi, &rp, &rho, &lam, &bet); + dt = rho*LTAU/3600.0/24.0; /* light travel time, in days / AU */ + } + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + gk_mag (op->p_g, op->p_k, rp, rho, &mag); + set_smag (op, mag); + op->s_size = (float)(op->p_size / rho); + + return (0); +} + +/* find sun's circumstances now. + */ +static int +sun_cir (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double bsn; /* true latitude beta of sun */ + double dhlong; + + sunpos (mjed, &lsn, &rsn, &bsn);/* sun's true coordinates; mean ecl. */ + + op->s_sdist = 0.0; + op->s_elong = 0.0; + op->s_phase = 100.0; + set_smag (op, -26.8); /* TODO */ + dhlong = lsn-PI; /* geo- to helio- centric */ + range (&dhlong, 2*PI); + op->s_hlong = (float)dhlong; + op->s_hlat = (float)(-bsn); + + /* fill sun's ra/dec, alt/az in op */ + cir_pos (np, bsn, lsn, &rsn, op); + op->s_edist = (float)rsn; + op->s_size = (float)(raddeg(4.65242e-3/rsn)*3600*2); + + return (0); +} + +/* find moon's circumstances now. + */ +static int +moon_cir (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double edistau; /* earth-moon dist, in au */ + double el; /* elongation, rads east */ + double ms; /* sun's mean anomaly */ + double md; /* moon's mean anomaly */ + double i; + + moon (mjed, &lam, &bet, &edistau, &ms, &md); /* mean ecliptic & EOD*/ + sunpos (mjed, &lsn, &rsn, NULL); /* mean ecliptic & EOD*/ + + op->s_hlong = (float)lam; /* save geo in helio fields */ + op->s_hlat = (float)bet; + + /* find angular separation from sun */ + elongation (lam, bet, lsn, &el); + op->s_elong = (float)raddeg(el); /* want degrees */ + + /* solve triangle of earth, sun, and elongation for moon-sun dist */ + op->s_sdist = (float) sqrt (edistau*edistau + rsn*rsn + - 2.0*edistau*rsn*cos(el)); + + /* TODO: improve mag; this is based on a flat moon model. */ + i = -12.7 + 2.5*(log10(PI) - log10(PI/2*(1+1.e-6-cos(el)))) + + 5*log10(edistau/.0025) /* dist */; + set_smag (op, i); + + /* find phase -- allow for projection effects */ + i = 0.1468*sin(el)*(1 - 0.0549*sin(md))/(1 - 0.0167*sin(ms)); + op->s_phase = (float)((1+cos(PI-el-degrad(i)))/2*100); + + /* fill moon's ra/dec, alt/az in op and update for topo dist */ + cir_pos (np, bet, lam, &edistau, op); + + op->s_edist = (float)edistau; + op->s_size = (float)(3600*2.0*raddeg(asin(MRAD/MAU/edistau))); + /* moon angular dia, seconds */ + + return (0); +} + +/* fill in all of op->s_* stuff except s_size and s_mag. + * this is used for sol system objects (except sun and moon); never FIXED. + */ +static void +cir_sky ( +Now *np, +double lpd, /* heliocentric ecliptic longitude */ +double psi, /* heliocentric ecliptic lat */ +double rp, /* dist from sun */ +double *rho, /* dist from earth: in as geo, back as geo or topo */ +double lam, /* true geocentric ecliptic long */ +double bet, /* true geocentric ecliptic lat */ +double lsn, /* true geoc lng of sun */ +double rsn, /* dist from sn to earth*/ +Obj *op) +{ + double el; /* elongation */ + double f; /* fractional phase from earth */ + + /* compute elongation and phase */ + elongation (lam, bet, lsn, &el); + el = raddeg(el); + op->s_elong = (float)el; + f = 0.25 * ((rp+ *rho)*(rp+ *rho) - rsn*rsn)/(rp* *rho); + op->s_phase = (float)(f*100.0); /* percent */ + + /* set heliocentric long/lat; mean ecliptic and EOD */ + op->s_hlong = (float)lpd; + op->s_hlat = (float)psi; + + /* fill solar sys body's ra/dec, alt/az in op */ + cir_pos (np, bet, lam, rho, op); /* updates rho */ + + /* set earth/planet and sun/planet distance */ + op->s_edist = (float)(*rho); + op->s_sdist = (float)rp; +} + +/* fill equatoreal and horizontal op-> fields; stern + * + * input: lam/bet/rho geocentric mean ecliptic and equinox of day + * + * algorithm at EOD: + * ecl_eq --> ra/dec geocentric mean equatoreal EOD (via mean obliq) + * deflect --> ra/dec relativistic deflection + * nut_eq --> ra/dec geocentric true equatoreal EOD + * ab_eq --> ra/dec geocentric apparent equatoreal EOD + * if (PREF_GEO) --> output + * ta_par --> ra/dec topocentric apparent equatoreal EOD + * if (!PREF_GEO) --> output + * hadec_aa --> alt/az topocentric horizontal + * refract --> alt/az observed --> output + * + * algorithm at fixed equinox: + * ecl_eq --> ra/dec geocentric mean equatoreal EOD (via mean obliq) + * deflect --> ra/dec relativistic deflection [for alt/az only] + * nut_eq --> ra/dec geocentric true equatoreal EOD [for aa only] + * ab_eq --> ra/dec geocentric apparent equatoreal EOD [for aa only] + * ta_par --> ra/dec topocentric apparent equatoreal EOD + * precess --> ra/dec topocentric equatoreal fixed equinox [eq only] + * --> output + * hadec_aa --> alt/az topocentric horizontal + * refract --> alt/az observed --> output + */ +static void +cir_pos ( +Now *np, +double bet, /* geo lat (mean ecliptic of date) */ +double lam, /* geo long (mean ecliptic of date) */ +double *rho, /* in: geocentric dist in AU; out: geo- or topocentic dist */ +Obj *op) /* object to set s_ra/dec as per equinox */ +{ + double ra, dec; /* apparent ra/dec, corrected for nut/ab */ + double tra, tdec; /* astrometric ra/dec, no nut/ab */ + double lsn, rsn; /* solar geocentric (mean ecliptic of date) */ + double ha_in, ha_out; /* local hour angle before/after parallax */ + double dec_out; /* declination after parallax */ + double dra, ddec; /* parallax correction */ + double alt, az; /* current alt, az */ + double lst; /* local sidereal time */ + double rho_topo; /* topocentric distance in earth radii */ + + /* convert to equatoreal [mean equator, with mean obliquity] */ + ecl_eq (mjed, bet, lam, &ra, &dec); + tra = ra; /* keep mean coordinates */ + tdec = dec; + + /* get sun position */ + sunpos(mjed, &lsn, &rsn, NULL); + + /* allow for relativistic light bending near the sun. + * (avoid calling deflect() for the sun itself). + */ + if (!is_planet(op,SUN) && !is_planet(op,MOON)) + deflect (mjed, op->s_hlong, op->s_hlat, lsn, rsn, *rho, &ra, &dec); + + /* correct ra/dec to form geocentric apparent */ + nut_eq (mjed, &ra, &dec); + if (!is_planet(op,MOON)) + ab_eq (mjed, lsn, &ra, &dec); + op->s_gaera = (float)ra; + op->s_gaedec = (float)dec; + + /* find parallax correction for equatoreal coords */ + now_lst (np, &lst); + ha_in = hrrad(lst) - ra; + rho_topo = *rho * MAU/ERAD; /* convert to earth radii */ + ta_par (ha_in, dec, lat, elev, &rho_topo, &ha_out, &dec_out); + + /* transform into alt/az and apply refraction */ + hadec_aa (lat, ha_out, dec_out, &alt, &az); + refract (pressure, temp, alt, &alt); + op->s_alt = alt; + op->s_az = az; + + /* Get parallax differences and apply to apparent or astrometric place + * as needed. For the astrometric place, rotating the CORRECTIONS + * back from the nutated equator to the mean equator will be + * neglected. This is an effect of about 0.1" at moon distance. + * We currently don't have an inverse nutation rotation. + */ + if (pref_get(PREF_EQUATORIAL) == PREF_GEO) { + /* no topo corrections to eq. coords */ + dra = ddec = 0.0; + } else { + dra = ha_in - ha_out; /* ra sign is opposite of ha */ + ddec = dec_out - dec; + *rho = rho_topo * ERAD/MAU; /* return topocentric distance in AU */ + } + + /* fill in ra/dec fields */ + if (epoch == EOD) { /* apparent geo/topocentric */ + ra = ra + dra; + dec = dec + ddec; + } else { /* astrometric geo/topocent */ + ra = tra + dra; + dec = tdec + ddec; + precess (mjed, epoch, &ra, &dec); + } + range(&ra, 2*PI); + op->s_ra = (float)ra; + op->s_dec = (float)dec; +} + +/* given geocentric ecliptic longitude and latitude, lam and bet, of some object + * and the longitude of the sun, lsn, find the elongation, el. this is the + * actual angular separation of the object from the sun, not just the difference + * in the longitude. the sign, however, IS set simply as a test on longitude + * such that el will be >0 for an evening object <0 for a morning object. + * to understand the test for el sign, draw a graph with lam going from 0-2*PI + * down the vertical axis, lsn going from 0-2*PI across the hor axis. then + * define the diagonal regions bounded by the lines lam=lsn+PI, lam=lsn and + * lam=lsn-PI. the "morning" regions are any values to the lower left of the + * first line and bounded within the second pair of lines. + * all angles in radians. + */ +static void +elongation (double lam, double bet, double lsn, double *el) +{ + *el = acos(cos(bet)*cos(lam-lsn)); + if (lam>lsn+PI || (lam>lsn-PI && lamdegrad(179.75) || rho + +#include "astro.h" + +/* given a modified Julian date, mj, and a set of heliocentric parabolic + * orbital elements referred to the epoch of date (mj): + * ep: epoch of perihelion, + * inc: inclination, + * ap: argument of perihelion (equals the longitude of perihelion minus the + * longitude of ascending node) + * qp: perihelion distance, + * om: longitude of ascending node; + * find: + * lpd: heliocentric longitude, + * psi: heliocentric latitude, + * rp: distance from the sun to the planet, + * rho: distance from the Earth to the planet, + * lam: geocentric ecliptic longitude, + * bet: geocentric ecliptic latitude, + * none are corrected for light time, ie, they are the true values for + * the given instant. + * + * all angles are in radians, all distances in AU. + * mutual perturbation corrections with other solar system objects are not + * applied. corrections for nutation and abberation must be made by the caller. + * The RA and DEC calculated from the fully-corrected ecliptic coordinates are + * then the apparent geocentric coordinates. Further corrections can be made, + * if required, for atmospheric refraction and geocentric parallax. + */ +void +comet (double mj, double ep, double inc, double ap, double qp, double om, +double *lpd, double *psi, double *rp, double *rho, double *lam, double *bet) +{ + double w, s, s2; + double l, sl, cl, y; + double spsi, cpsi; + double rd, lsn, rsn; + double lg, re, ll; + double cll, sll; + double nu; + +#define ERRLMT 0.0001 + w = ((mj-ep)*3.649116e-02)/(qp*sqrt(qp)); + s = w/3; + for (;;) { + double d; + s2 = s*s; + d = (s2+3)*s-w; + if (fabs(d) <= ERRLMT) + break; + s = ((2*s*s2)+w)/(3*(s2+1)); + } + + nu = 2*atan(s); + *rp = qp*(1+s2); + l = nu+ap; + sl = sin(l); + cl = cos(l); + spsi = sl*sin(inc); + *psi = asin(spsi); + y = sl*cos(inc); + *lpd = atan(y/cl)+om; + cpsi = cos(*psi); + if (cl<0) *lpd += PI; + range (lpd, 2*PI); + rd = *rp * cpsi; + sunpos (mj, &lsn, &rsn, 0); + lg = lsn+PI; + re = rsn; + ll = *lpd - lg; + cll = cos(ll); + sll = sin(ll); + *rho = sqrt((re * re)+(*rp * *rp)-(2*re*rd*cll)); + if (rd +#include +#include +#include +#include + +#include "astro.h" + +/* +====================================================================== +Ernie Wright 2 Mar 94 + +Find the constellation for a given position. + +First C version by Craig Counterman and Elwood Downey. Based on a +FORTRAN program by Nancy G. Roman (Roman, N.G. 1987, Publ. Astron. +Soc. Pacific 99, 695). IAU constellation boundaries transcribed into +machine-readable form by Barry N. Rappaport, New Mexico State Univ. +====================================================================== +*/ + +#define NBOUNDS 357 + +/* constellation ids */ +#define And 0 +#define Ant 1 +#define Aps 2 +#define Aql 3 +#define Aqr 4 +#define Ara 5 +#define Ari 6 +#define Aur 7 +#define Boo 8 +#define CMa 9 +#define CMi 10 +#define CVn 11 +#define Cae 12 +#define Cam 13 +#define Cap 14 +#define Car 15 +#define Cas 16 +#define Cen 17 +#define Cep 18 +#define Cet 19 +#define Cha 20 +#define Cir 21 +#define Cnc 22 +#define Col 23 +#define Com 24 +#define CrA 25 +#define CrB 26 +#define Crt 27 +#define Cru 28 +#define Crv 29 +#define Cyg 30 +#define Del 31 +#define Dor 32 +#define Dra 33 +#define Equ 34 +#define Eri 35 +#define For 36 +#define Gem 37 +#define Gru 38 +#define Her 39 +#define Hor 40 +#define Hya 41 +#define Hyi 42 +#define Ind 43 +#define LMi 44 +#define Lac 45 +#define Leo 46 +#define Lep 47 +#define Lib 48 +#define Lup 49 +#define Lyn 50 +#define Lyr 51 +#define Men 52 +#define Mic 53 +#define Mon 54 +#define Mus 55 +#define Nor 56 +#define Oct 57 +#define Oph 58 +#define Ori 59 +#define Pav 60 +#define Peg 61 +#define Per 62 +#define Phe 63 +#define Pic 64 +#define PsA 65 +#define Psc 66 +#define Pup 67 +#define Pyx 68 +#define Ret 69 +#define Scl 70 +#define Sco 71 +#define Sct 72 +#define Se1 73 +#define Sex 74 +#define Sge 75 +#define Sgr 76 +#define Tau 77 +#define Tel 78 +#define TrA 79 +#define Tri 80 +#define Tuc 81 +#define UMa 82 +#define UMi 83 +#define Vel 84 +#define Vir 85 +#define Vol 86 +#define Vul 87 +#define Se2 88 + +static char *cns_namemap[ NCNS ] = { + /* 0 */ "And: Andromeda", + /* 1 */ "Ant: Antlia", + /* 2 */ "Aps: Apus", + /* 3 */ "Aql: Aquila", + /* 4 */ "Aqr: Aquarius", + /* 5 */ "Ara: Ara", + /* 6 */ "Ari: Aries", + /* 7 */ "Aur: Auriga", + /* 8 */ "Boo: Bootes", + /* 9 */ "CMa: Canis Major", + /* 10 */ "CMi: Canis Minor", + /* 11 */ "CVn: Canes Venatici", + /* 12 */ "Cae: Caelum", + /* 13 */ "Cam: Camelopardalis", + /* 14 */ "Cap: Capricornus", + /* 15 */ "Car: Carina", + /* 16 */ "Cas: Cassiopeia", + /* 17 */ "Cen: Centaurus", + /* 18 */ "Cep: Cepheus", + /* 19 */ "Cet: Cetus", + /* 20 */ "Cha: Chamaeleon", + /* 21 */ "Cir: Circinus", + /* 22 */ "Cnc: Cancer", + /* 23 */ "Col: Columba", + /* 24 */ "Com: Coma Berenices", + /* 25 */ "CrA: Corona Australis", + /* 26 */ "CrB: Corona Borealis", + /* 27 */ "Crt: Crater", + /* 28 */ "Cru: Crux", + /* 29 */ "Crv: Corvus", + /* 30 */ "Cyg: Cygnus", + /* 31 */ "Del: Delphinus", + /* 32 */ "Dor: Dorado", + /* 33 */ "Dra: Draco", + /* 34 */ "Equ: Equuleus", + /* 35 */ "Eri: Eridanus", + /* 36 */ "For: Fornax", + /* 37 */ "Gem: Gemini", + /* 38 */ "Gru: Grus", + /* 39 */ "Her: Hercules", + /* 40 */ "Hor: Horologium", + /* 41 */ "Hya: Hydra", + /* 42 */ "Hyi: Hydrus", + /* 43 */ "Ind: Indus", + /* 44 */ "LMi: Leo Minor", + /* 45 */ "Lac: Lacerta", + /* 46 */ "Leo: Leo", + /* 47 */ "Lep: Lepus", + /* 48 */ "Lib: Libra", + /* 49 */ "Lup: Lupus", + /* 50 */ "Lyn: Lynx", + /* 51 */ "Lyr: Lyra", + /* 52 */ "Men: Mensa", + /* 53 */ "Mic: Microscopium", + /* 54 */ "Mon: Monoceros", + /* 55 */ "Mus: Musca", + /* 56 */ "Nor: Norma", + /* 57 */ "Oct: Octans", + /* 58 */ "Oph: Ophiuchus", + /* 59 */ "Ori: Orion", + /* 60 */ "Pav: Pavo", + /* 61 */ "Peg: Pegasus", + /* 62 */ "Per: Perseus", + /* 63 */ "Phe: Phoenix", + /* 64 */ "Pic: Pictor", + /* 65 */ "PsA: Piscis Austrinus", + /* 66 */ "Psc: Pisces", + /* 67 */ "Pup: Puppis", + /* 68 */ "Pyx: Pyxis", + /* 69 */ "Ret: Reticulum", + /* 70 */ "Scl: Sculptor", + /* 71 */ "Sco: Scorpius", + /* 72 */ "Sct: Scutum", + /* 73 */ "Se1: Serpens Caput", + /* 74 */ "Sex: Sextans", + /* 75 */ "Sge: Sagitta", + /* 76 */ "Sgr: Sagittarius", + /* 77 */ "Tau: Taurus", + /* 78 */ "Tel: Telescopium", + /* 79 */ "TrA: Triangulum Australe", + /* 80 */ "Tri: Triangulum", + /* 81 */ "Tuc: Tucana", + /* 82 */ "UMa: Ursa Major", + /* 83 */ "UMi: Ursa Minor", + /* 84 */ "Vel: Vela", + /* 85 */ "Vir: Virgo", + /* 86 */ "Vol: Volans", + /* 87 */ "Vul: Vulpecula", + /* 88 */ "Se2: Serpens Cauda", +}; + +static struct { + unsigned short lower_ra; /* hours * 1800 */ + unsigned short upper_ra; /* hours * 1800 */ + short lower_dec; /* degrees * 60 */ + short index; +} cbound[ NBOUNDS ] = { + { 0, 43200, 5280, UMi }, + { 14400, 26100, 5190, UMi }, + { 37800, 41400, 5170, UMi }, + { 32400, 37800, 5160, UMi }, + { 0, 14400, 5100, Cep }, + { 16500, 19200, 4920, Cam }, + { 0, 9000, 4800, Cep }, + { 19200, 26100, 4800, Cam }, + { 31500, 32400, 4800, UMi }, + { 36300, 37800, 4800, Dra }, + { 0, 6315, 4620, Cep }, + { 20700, 24450, 4620, Cam }, + { 29760, 31500, 4500, UMi }, + { 36300, 37200, 4500, Cep }, + { 14340, 16500, 4410, Cam }, + { 16500, 20400, 4410, Dra }, + { 23400, 29760, 4200, UMi }, + { 5580, 6150, 4080, Cas }, + { 36750, 37200, 4020, Dra }, + { 20400, 21600, 3990, Dra }, + { 0, 600, 3960, Cep }, + { 25200, 28200, 3960, UMi }, + { 42450, 43200, 3960, Cep }, + { 21600, 24300, 3840, Dra }, + { 24300, 25950, 3780, Dra }, + { 41700, 42450, 3780, Cep }, + { 10980, 12600, 3720, Cam }, + { 36000, 36750, 3690, Dra }, + { 36966, 37080, 3655, Cep }, + { 12600, 14340, 3600, Cam }, + { 14340, 15150, 3600, UMa }, + { 35580, 36000, 3570, Dra }, + { 36000, 36966, 3570, Cep }, + { 41160, 41700, 3545, Cep }, + { 0, 4380, 3510, Cas }, + { 34950, 35580, 3480, Dra }, + { 3060, 3435, 3450, Cas }, + { 4380, 5580, 3420, Cas }, + { 5580, 5700, 3420, Cam }, + { 40170, 41160, 3375, Cep }, + { 9000, 10980, 3360, Cam }, + { 25260, 25950, 3330, UMa }, + { 25950, 34950, 3330, Dra }, + { 5700, 6000, 3300, Cam }, + { 39840, 40170, 3300, Cep }, + { 37080, 39540, 3290, Cep }, + { 0, 3060, 3240, Cas }, + { 10980, 11700, 3240, Lyn }, + { 21750, 24300, 3180, UMa }, + { 27450, 28350, 3180, Dra }, + { 39540, 39840, 3165, Cep }, + { 6000, 9000, 3150, Cam }, + { 41160, 42000, 3150, Cas }, + { 28350, 30600, 3090, Dra }, + { 3675, 4530, 3030, Per }, + { 30600, 32820, 3030, Dra }, + { 0, 2460, 3000, Cas }, + { 2460, 3000, 3000, Per }, + { 11700, 12240, 3000, Lyn }, + { 42000, 43200, 3000, Cas }, + { 24300, 25260, 2910, UMa }, + { 0, 2010, 2880, Cas }, + { 42450, 43200, 2880, Cas }, + { 32715, 32820, 2850, Her }, + { 32820, 34350, 2850, Dra }, + { 34350, 34500, 2850, Cyg }, + { 3000, 3675, 2820, Per }, + { 15150, 16500, 2820, UMa }, + { 300, 1560, 2760, Cas }, + { 21600, 21750, 2700, UMa }, + { 12240, 13260, 2670, Lyn }, + { 39435, 39540, 2640, Cyg }, + { 39375, 39435, 2625, Cyg }, + { 34500, 34920, 2610, Cyg }, + { 16500, 18300, 2520, UMa }, + { 18300, 19410, 2400, UMa }, + { 27780, 28350, 2400, Boo }, + { 28350, 29400, 2400, Her }, + { 16650, 17250, 2385, Lyn }, + { 0, 4530, 2205, And }, + { 4530, 4620, 2205, Per }, + { 34845, 34920, 2190, Lyr }, + { 8100, 8445, 2160, Per }, + { 39120, 39375, 2160, Cyg }, + { 39375, 39600, 2160, Lac }, + { 11760, 13260, 2130, Aur }, + { 13260, 13950, 2130, Lyn }, + { 0, 3600, 2100, And }, + { 39600, 41070, 2100, Lac }, + { 41070, 41160, 2070, Lac }, + { 41160, 42300, 2070, And }, + { 4620, 4890, 2040, Per }, + { 19410, 19800, 2040, UMa }, + { 21600, 22200, 2040, CVn }, + { 13950, 16650, 2010, Lyn }, + { 16650, 17790, 2010, LMi }, + { 1290, 2535, 1980, And }, + { 27330, 27780, 1980, Boo }, + { 42300, 42750, 1925, And }, + { 22200, 23850, 1920, CVn }, + { 42750, 43200, 1880, And }, + { 25125, 25260, 1845, CVn }, + { 4350, 4890, 1840, Tri }, + { 4890, 8100, 1840, Per }, + { 8100, 8550, 1800, Aur }, + { 32715, 34845, 1800, Lyr }, + { 19800, 21600, 1740, UMa }, + { 35400, 37650, 1740, Cyg }, + { 8550, 10590, 1710, Aur }, + { 17790, 18900, 1710, LMi }, + { 23850, 25125, 1710, CVn }, + { 0, 120, 1680, And }, + { 2535, 3000, 1680, Tri }, + { 10590, 11760, 1680, Aur }, + { 14190, 14400, 1680, Gem }, + { 37650, 39120, 1680, Cyg }, + { 34665, 35400, 1650, Cyg }, + { 3450, 4350, 1635, Tri }, + { 29100, 29400, 1620, CrB }, + { 27150, 27330, 1560, Boo }, + { 27330, 29100, 1560, CrB }, + { 33060, 33960, 1560, Lyr }, + { 19350, 19800, 1530, LMi }, + { 33960, 34665, 1530, Lyr }, + { 3000, 3450, 1500, Tri }, + { 1290, 1530, 1425, Psc }, + { 18900, 19350, 1410, LMi }, + { 38250, 38550, 1410, Vul }, + { 10260, 10590, 1370, Tau }, + { 120, 255, 1320, And }, + { 28650, 28860, 1320, Se1 }, + { 10590, 11190, 1290, Gem }, + { 35700, 36450, 1275, Vul }, + { 33960, 34650, 1265, Vul }, + { 255, 1530, 1260, And }, + { 36450, 37020, 1230, Vul }, + { 14055, 14190, 1200, Gem }, + { 37020, 38250, 1170, Vul }, + { 34650, 35700, 1150, Vul }, + { 5910, 6060, 1140, Ari }, + { 33960, 34200, 1110, Sge }, + { 10260, 10380, 1080, Ori }, + { 11190, 11355, 1050, Gem }, + { 34200, 35700, 970, Sge }, + { 8940, 9600, 960, Tau }, + { 28650, 28950, 960, Her }, + { 35700, 36450, 945, Sge }, + { 8310, 8940, 930, Tau }, + { 9600, 10080, 930, Tau }, + { 23100, 24300, 900, Com }, + { 31050, 32850, 860, Her }, + { 21360, 23100, 840, Com }, + { 13500, 14055, 810, Gem }, + { 30150, 31050, 770, Her }, + { 0, 255, 750, Peg }, + { 10080, 10380, 750, Tau }, + { 12600, 13500, 750, Gem }, + { 38010, 38400, 750, Peg }, + { 11355, 12480, 720, Gem }, + { 32850, 33960, 720, Her }, + { 37575, 37890, 710, Del }, + { 37890, 38010, 710, Peg }, + { 20730, 21360, 660, Leo }, + { 11235, 11355, 600, Ori }, + { 12480, 12600, 600, Gem }, + { 14055, 14265, 600, Cnc }, + { 42900, 43200, 600, Peg }, + { 3000, 5910, 595, Ari }, + { 36255, 36540, 510, Del }, + { 24300, 27150, 480, Boo }, + { 40950, 42900, 450, Peg }, + { 14265, 16650, 420, Cnc }, + { 16650, 19350, 420, Leo }, + { 32850, 33592, 375, Oph }, + { 33592, 33960, 375, Aql }, + { 37500, 37575, 360, Del }, + { 12600, 12630, 330, CMi }, + { 32850, 33165, 270, Se2 }, + { 28950, 30150, 240, Her }, + { 32850, 33165, 180, Oph }, + { 38640, 39000, 165, Peg }, + { 0, 3600, 120, Psc }, + { 33450, 33960, 120, Se2 }, + { 36540, 37500, 120, Del }, + { 37500, 38400, 120, Equ }, + { 38400, 38640, 120, Peg }, + { 39600, 40950, 120, Peg }, + { 39000, 39600, 105, Peg }, + { 12630, 12960, 90, CMi }, + { 6450, 8310, 0, Tau }, + { 8310, 8400, 0, Ori }, + { 12960, 14550, 0, CMi }, + { 26400, 27150, 0, Vir }, + { 32100, 32850, 0, Oph }, + { 4770, 5910, -105, Cet }, + { 5910, 6450, -105, Tau }, + { 27150, 29280, -195, Se1 }, + { 8400, 9150, -240, Ori }, + { 10500, 11235, -240, Ori }, + { 32100, 32340, -240, Se2 }, + { 32850, 33450, -240, Se2 }, + { 33450, 33960, -240, Aql }, + { 40950, 42900, -240, Psc }, + { 19350, 20730, -360, Leo }, + { 20730, 21300, -360, Vir }, + { 0, 600, -420, Psc }, + { 42900, 43200, -420, Psc }, + { 25650, 26400, -480, Vir }, + { 28650, 29280, -480, Oph }, + { 36000, 36960, -540, Aql }, + { 38400, 39360, -540, Aqr }, + { 30900, 32340, -600, Oph }, + { 10500, 14550, -660, Mon }, + { 8850, 9150, -660, Eri }, + { 9150, 10500, -660, Ori }, + { 14550, 15060, -660, Hya }, + { 17250, 19350, -660, Sex }, + { 21300, 23100, -660, Vir }, + { 31650, 31800, -700, Oph }, + { 33960, 36000, -722, Aql }, + { 8700, 8850, -870, Eri }, + { 36960, 38400, -900, Aqr }, + { 30900, 32850, -960, Se2 }, + { 32850, 33960, -960, Sct }, + { 15060, 15450, -1020, Hya }, + { 29280, 29475, -1095, Oph }, + { 15450, 16350, -1140, Hya }, + { 19350, 19500, -1140, Crt }, + { 29280, 29475, -1155, Sco }, + { 28200, 28650, -1200, Lib }, + { 22650, 23100, -1320, Crv }, + { 23100, 25650, -1320, Vir }, + { 16350, 17550, -1440, Hya }, + { 3000, 4770, -1463, Cet }, + { 4770, 6750, -1463, Eri }, + { 19500, 21300, -1470, Crt }, + { 21300, 22650, -1470, Crv }, + { 25650, 26850, -1470, Lib }, + { 29280, 30150, -1475, Oph }, + { 0, 3000, -1530, Cet }, + { 38400, 39360, -1530, Cap }, + { 39360, 42900, -1530, Aqr }, + { 42900, 43200, -1530, Cet }, + { 17550, 18450, -1590, Hya }, + { 8460, 8700, -1635, Eri }, + { 8700, 11010, -1635, Lep }, + { 36000, 38400, -1680, Cap }, + { 18450, 19050, -1750, Hya }, + { 22650, 26850, -1770, Hya }, + { 26850, 28200, -1770, Lib }, + { 28200, 28800, -1770, Sco }, + { 8250, 8460, -1800, Eri }, + { 30150, 31680, -1800, Oph }, + { 31680, 32100, -1800, Sgr }, + { 19050, 19500, -1870, Hya }, + { 11010, 13260, -1980, CMa }, + { 22050, 22650, -1980, Hya }, + { 19500, 22050, -2100, Hya }, + { 6300, 6750, -2160, For }, + { 15060, 16860, -2205, Pyx }, + { 7680, 8250, -2220, Eri }, + { 32100, 34500, -2220, Sgr }, + { 38400, 41400, -2220, PsA }, + { 41400, 42000, -2220, Scl }, + { 5400, 6300, -2375, For }, + { 16860, 19800, -2385, Ant }, + { 0, 3000, -2400, Scl }, + { 3000, 5400, -2400, For }, + { 6960, 7680, -2400, Eri }, + { 42000, 43200, -2400, Scl }, + { 25500, 26850, -2520, Cen }, + { 28200, 28800, -2520, Lup }, + { 28800, 29557, -2520, Sco }, + { 8700, 9000, -2580, Cae }, + { 9000, 11850, -2580, Col }, + { 14400, 15060, -2580, Pup }, + { 6150, 6960, -2640, Eri }, + { 29557, 32100, -2730, Sco }, + { 32100, 34500, -2730, CrA }, + { 34500, 36600, -2730, Sgr }, + { 36600, 38400, -2730, Mic }, + { 5400, 6150, -2760, Eri }, + { 8100, 8700, -2790, Cae }, + { 27600, 28200, -2880, Lup }, + { 0, 4200, -2890, Phe }, + { 4800, 5400, -2940, Eri }, + { 7350, 7680, -2940, Hor }, + { 7680, 8100, -2940, Cae }, + { 38400, 39600, -3000, Gru }, + { 10800, 14400, -3045, Pup }, + { 14400, 14700, -3045, Vel }, + { 4350, 4800, -3060, Eri }, + { 6900, 7350, -3060, Hor }, + { 0, 3300, -3090, Phe }, + { 10800, 11100, -3150, Car }, + { 14700, 15210, -3180, Vel }, + { 6300, 6900, -3190, Hor }, + { 6900, 7200, -3190, Dor }, + { 0, 2850, -3210, Phe }, + { 3900, 4350, -3240, Eri }, + { 8100, 9000, -3240, Pic }, + { 27090, 27600, -3240, Lup }, + { 15210, 15900, -3270, Vel }, + { 11100, 11700, -3300, Car }, + { 21300, 23100, -3300, Cen }, + { 25500, 27090, -3300, Lup }, + { 27090, 27600, -3300, Nor }, + { 7200, 7800, -3390, Dor }, + { 15900, 19800, -3390, Vel }, + { 19800, 20250, -3390, Cen }, + { 31500, 32400, -3420, Ara }, + { 32400, 36600, -3420, Tel }, + { 39600, 42000, -3420, Gru }, + { 5760, 6300, -3450, Hor }, + { 9000, 9900, -3450, Pic }, + { 11700, 12300, -3480, Car }, + { 0, 2400, -3510, Phe }, + { 2400, 3900, -3510, Eri }, + { 42000, 43200, -3510, Phe }, + { 7800, 8250, -3540, Dor }, + { 27600, 29557, -3600, Nor }, + { 36600, 38400, -3600, Ind }, + { 9900, 10800, -3660, Pic }, + { 27300, 27600, -3660, Cir }, + { 29557, 29850, -3660, Ara }, + { 26850, 27300, -3815, Cir }, + { 29850, 30150, -3815, Ara }, + { 10800, 12300, -3840, Pic }, + { 12300, 16260, -3840, Car }, + { 20250, 21300, -3840, Cen }, + { 21300, 23100, -3840, Cru }, + { 23100, 26160, -3840, Cen }, + { 24300, 24600, -3900, Cir }, + { 30150, 30300, -3900, Ara }, + { 3900, 5760, -4050, Hor }, + { 5760, 8250, -4050, Ret }, + { 26550, 26850, -4050, Cir }, + { 30300, 31500, -4050, Ara }, + { 31500, 32400, -4050, Pav }, + { 39600, 42000, -4050, Tuc }, + { 8250, 11850, -4200, Dor }, + { 24600, 26550, -4200, Cir }, + { 26550, 30600, -4200, TrA }, + { 0, 2400, -4500, Tuc }, + { 6300, 8250, -4500, Hyi }, + { 11850, 16260, -4500, Vol }, + { 16260, 20250, -4500, Car }, + { 20250, 24600, -4500, Mus }, + { 32400, 38400, -4500, Pav }, + { 38400, 42000, -4500, Ind }, + { 42000, 43200, -4500, Tuc }, + { 1350, 2400, -4560, Tuc }, + { 0, 6300, -4950, Hyi }, + { 13800, 24600, -4950, Cha }, + { 24600, 32400, -4950, Aps }, + { 6300, 13800, -5100, Men }, + { 0, 43200, -5400, Oct } +}; + +static short start[] = { + 355, 352, 343, 340, 332, 320, + 303, 288, 277, 266, 257, 251, + 239, 229, 221, 211, 203, 189, + 177, 163, 149, 136, 124, 104, + 87, 75, 69, 54, 43, 29, + 23, 16, 12, 6, 4, 0, 0 +}; + + +/* +====================================================================== +constellation_pick() + +Do a constellation pick from RA and Dec. + +INPUTS + r right ascension, radians + d declination, radians + e epoch to which r and d precessed, as an mjd + +RESULTS + Returns an index for the constellation region that the coordinates + belong to, or -1 if no constellation pick can be found. + +The constellation is identified by linear search. We look for a +member of cbound[] whose lower_dec is less than the declination of the +pick point and whose lower_ra and upper_ra bracket the pick point's +right ascension. The data for that cbound[] member describes a sub- +region belonging to the picked constellation. + +In geometric terms, the search amounts to starting at the north pole +and traveling south on a line of constant right ascension through the +pick point. At every declination where a cbound[] member lives, we +wake up, and if (1) the pick point is now behind us, and (2) the +cbound[] segment is crossing our path, we know we've hit the edge of +a constellation subregion that the pick point belongs to. + +The cbound[] right ascension and declination values are scaled into +integers; this conserves storage and makes comparisons faster. The +start[] array, which gives starting points in cbound[] for different +declinations in 5-degree increments, further speeds the search by +skipping early parts of the list for which we know the search can't +succeed--geometrically, we start no more than 5 degrees north of the +pick point, rather than at the north pole. + +The data in cbound[] are for epoch 1875. +====================================================================== +*/ + +int +cns_pick(double r, double d, double e) +{ + double Mjd; + unsigned short ra; + short de, i; + + cal_mjd( 1, 1.0, 1875, &Mjd ); + precess( e, Mjd, &r, &d ); + ra = ( unsigned short )( radhr( r ) * 1800 ); + de = ( short )( raddeg( d ) * 60 ); + if (d < 0.0) --de; + + i = ( de + 5400 ) / 300; + if ( i < 0 || i > 36 ) return -1; + i = start[ i ]; + + for ( ; i < NBOUNDS; i++ ) + if ( cbound[ i ].lower_dec <= de && + cbound[ i ].upper_ra > ra && + cbound[ i ].lower_ra <= ra ) break; + + return ( i == NBOUNDS ) ? -1 : ( int ) cbound[ i ].index; +} + +/* given a constellation id (as from cns_pick()), return pointer to static + * storage containg its name in the form "AAA: Name". + * return "???: ???" if id is invalid. + */ +char * +cns_name (int id) +{ + if (id < 0 || id >= NCNS) + return ("???: ???"); + return (cns_namemap[id]); +} + +/* return cns_namemap index matching first three chars in abbrev[], else -1. + */ +int +cns_id (char *abbrev) +{ + int i; + + for (i = 0; i < NCNS; i++) + if (strncmp (abbrev, cns_namemap[i], 3) == 0) + return (i); + return (-1); +} + +/* edges of constant ra */ +static struct { + unsigned short ra; /* hours * 1800 */ + short dec0, dec1; /* degrees * 60 */ +} ra_edges[] = { + { 0, -4950, -4500 }, + { 0, 600, 750 }, + { 0, 1680, 1879 }, + { 120, 1320, 1680 }, + { 255, 750, 1260 }, + { 255, 1260, 1320 }, + { 300, 2760, 2880 }, + { 599, -420, 0 }, + { 599, 0, 120 }, + { 599, 3960, 4620 }, + { 1290, 1425, 1980 }, + { 1350, -4500, -4560 }, + { 1530, 1260, 1425 }, + { 1560, 2760, 2880 }, + { 2010, 2880, 3000 }, + { 2399, -4560, -3510 }, + { 2399, -3510, -3210 }, + { 2460, 3000, 3240 }, + { 2534, 1680, 1980 }, + { 2534, 1980, 2100 }, + { 2849, -3210, -3090 }, + { 3000, -2400, -1530 }, + { 3000, -1530, -1462 }, + { 3000, 595, 1500 }, + { 3000, 1500, 1680 }, + { 3000, 2820, 3000 }, + { 3060, 3240, 3450 }, + { 3299, -3090, -2890 }, + { 3434, 3450, 3510 }, + { 3450, 1500, 1635 }, + { 3600, 120, 595 }, + { 3600, 2100, 2205 }, + { 3675, 2820, 3030 }, + { 3900, -4050, -3510 }, + { 3900, -3510, -3240 }, + { 4199, -2890, -2400 }, + { 4350, -3240, -3060 }, + { 4350, 1635, 1840 }, + { 4379, 3420, 3510 }, + { 4530, 2205, 3030 }, + { 4620, 2040, 2205 }, + { 4770, -1462, -105 }, + { 4800, -3060, -2940 }, + { 4890, 1840, 2040 }, + { 5400, -2940, -2760 }, + { 5400, -2400, -2374 }, + { 5580, 3420, 4080 }, + { 5700, 3300, 3420 }, + { 5760, -3450, -4050 }, + { 5909, -105, 0 }, + { 5909, 0, 595 }, + { 5909, 595, 1140 }, + { 5999, 3150, 3300 }, + { 6060, 1140, 1840 }, + { 6150, -2760, -2640 }, + { 6150, 4080, 4620 }, + { 6300, -5100, -4950 }, + { 6300, -4950, -4500 }, + { 6300, -3190, -3450 }, + { 6300, -2374, -2160 }, + { 6314, 4620, 4800 }, + { 6449, -105, 0 }, + { 6750, -2160, -1462 }, + { 6899, -3060, -3190 }, + { 6960, -2640, -2400 }, + { 7200, -3390, -3190 }, + { 7349, -2940, -3060 }, + { 7680, -2400, -2940 }, + { 7680, -2220, -2400 }, + { 7799, -3540, -3390 }, + { 8100, -3240, -2940 }, + { 8100, -2940, -2790 }, + { 8100, 1800, 1840 }, + { 8100, 1840, 2160 }, + { 8249, -4500, -4200 }, + { 8249, -4050, -4200 }, + { 8249, -4050, -3540 }, + { 8249, -1800, -2220 }, + { 8310, 0, 930 }, + { 8400, -240, 0 }, + { 8445, 2160, 3150 }, + { 8460, -1635, -1800 }, + { 8550, 1710, 1800 }, + { 8699, -2790, -2580 }, + { 8699, -870, -1635 }, + { 8850, -660, -870 }, + { 8940, 930, 960 }, + { 9000, -3450, -3240 }, + { 9000, -2580, -1635 }, + { 9000, 3150, 3360 }, + { 9000, 4800, 5100 }, + { 9149, -660, -240 }, + { 9599, 930, 960 }, + { 9900, -3660, -3450 }, + { 10080, 750, 930 }, + { 10260, 1080, 1369 }, + { 10380, 750, 1080 }, + { 10499, -660, -240 }, + { 10589, 1290, 1369 }, + { 10589, 1369, 1680 }, + { 10589, 1680, 1710 }, + { 10800, -3840, -3660 }, + { 10800, -3150, -3045 }, + { 10800, -3045, -2580 }, + { 10980, 3240, 3360 }, + { 10980, 3360, 3720 }, + { 11010, -1980, -1635 }, + { 11010, -1635, -660 }, + { 11100, -3300, -3150 }, + { 11190, 1050, 1290 }, + { 11235, -240, 0 }, + { 11235, 0, 600 }, + { 11354, 600, 720 }, + { 11354, 720, 1050 }, + { 11700, -3480, -3300 }, + { 11700, 3000, 3240 }, + { 11759, 1680, 2130 }, + { 11849, -4200, -4500 }, + { 11849, -4200, -3840 }, + { 11849, -1980, -2580 }, + { 12240, 2670, 3000 }, + { 12299, -3840, -3480 }, + { 12479, 600, 720 }, + { 12600, 330, 600 }, + { 12600, 600, 750 }, + { 12600, 3600, 3720 }, + { 12630, 90, 330 }, + { 12960, 0, 90 }, + { 13260, -660, -1980 }, + { 13260, 2130, 2670 }, + { 13500, 750, 810 }, + { 13800, -5100, -4950 }, + { 13800, -4500, -4950 }, + { 13950, 2010, 2130 }, + { 14054, 600, 810 }, + { 14054, 810, 1200 }, + { 14189, 1200, 1680 }, + { 14265, 420, 600 }, + { 14340, 3600, 4410 }, + { 14400, -3045, -2580 }, + { 14400, 1680, 2010 }, + { 14400, 5100, 5190 }, + { 14400, 5280, 5190 }, + { 14549, -660, 0 }, + { 14549, 0, 420 }, + { 14700, -3180, -3045 }, + { 15060, -2580, -2205 }, + { 15060, -2205, -1020 }, + { 15060, -1020, -660 }, + { 15150, 2820, 3600 }, + { 15209, -3270, -3180 }, + { 15449, -1140, -1020 }, + { 15899, -3390, -3270 }, + { 16259, -4500, -3840 }, + { 16349, -1440, -1140 }, + { 16500, 2520, 2820 }, + { 16500, 4410, 4920 }, + { 16650, 420, 2010 }, + { 16650, 2010, 2385 }, + { 16860, -2385, -2205 }, + { 16860, -1440, -2205 }, + { 17249, -660, 0 }, + { 17249, 0, 420 }, + { 17249, 2385, 2520 }, + { 17550, -1590, -1440 }, + { 17789, 1710, 2010 }, + { 18300, 2400, 2520 }, + { 18450, -1750, -1590 }, + { 18900, 1410, 1710 }, + { 19049, -1870, -1750 }, + { 19200, 4800, 4920 }, + { 19350, -660, -1140 }, + { 19350, -360, -660 }, + { 19350, -360, 0 }, + { 19350, 0, 420 }, + { 19350, 1410, 1530 }, + { 19409, 2040, 2400 }, + { 19499, -2100, -1870 }, + { 19499, -1140, -1470 }, + { 19800, -3390, -2385 }, + { 19800, -2385, -2100 }, + { 19800, 1530, 1740 }, + { 19800, 1740, 2040 }, + { 20250, -4500, -3840 }, + { 20250, -3840, -3390 }, + { 20399, 3990, 4410 }, + { 20700, 4620, 4800 }, + { 20730, -360, 0 }, + { 20730, 0, 660 }, + { 21299, -3840, -3300 }, + { 21299, -1470, -660 }, + { 21299, -660, -360 }, + { 21360, 660, 840 }, + { 21360, 840, 1740 }, + { 21600, 1740, 2040 }, + { 21600, 2040, 2700 }, + { 21600, 3840, 3990 }, + { 21749, 2700, 3180 }, + { 22050, -1980, -2100 }, + { 22199, 1920, 2040 }, + { 22649, -1770, -1980 }, + { 22649, -1470, -1320 }, + { 23099, -3840, -3300 }, + { 23099, -1320, -660 }, + { 23099, 840, 900 }, + { 23400, 4620, 4200 }, + { 23850, 1710, 1920 }, + { 24300, -3900, -3840 }, + { 24300, 480, 900 }, + { 24300, 900, 1710 }, + { 24300, 2910, 3180 }, + { 24300, 3780, 3840 }, + { 24449, 4800, 4620 }, + { 24600, -4950, -4500 }, + { 24600, -4500, -4200 }, + { 24600, -4200, -3900 }, + { 25124, 1710, 1845 }, + { 25200, 4200, 3960 }, + { 25259, 1845, 2910 }, + { 25259, 2910, 3330 }, + { 25500, -3300, -2520 }, + { 25650, -1320, -1470 }, + { 25650, -480, -1320 }, + { 25950, 3330, 3780 }, + { 26100, 5190, 4800 }, + { 26159, -3840, -3300 }, + { 26400, 0, -480 }, + { 26550, -4200, -4050 }, + { 26850, -4050, -3814 }, + { 26850, -2520, -1770 }, + { 26850, -1470, -1770 }, + { 27090, -3300, -3240 }, + { 27149, -195, 0 }, + { 27149, 0, 480 }, + { 27149, 480, 1560 }, + { 27300, -3814, -3660 }, + { 27329, 1560, 1980 }, + { 27450, 3180, 3330 }, + { 27599, -3660, -3600 }, + { 27599, -3600, -3300 }, + { 27599, -3240, -2880 }, + { 27779, 1980, 2400 }, + { 28200, -2880, -2520 }, + { 28200, -1770, -1200 }, + { 28200, 3960, 4200 }, + { 28350, 2400, 3090 }, + { 28350, 3090, 3180 }, + { 28650, -1200, -480 }, + { 28650, -480, -195 }, + { 28650, 960, 1320 }, + { 28800, -2520, -1770 }, + { 28859, 1320, 1560 }, + { 28949, 240, 960 }, + { 29100, 1560, 1620 }, + { 29280, -1474, -1155 }, + { 29280, -1095, -480 }, + { 29280, -195, 0 }, + { 29280, 0, 240 }, + { 29399, 1620, 2400 }, + { 29475, -1155, -1095 }, + { 29557, -3660, -3600 }, + { 29557, -3600, -2730 }, + { 29557, -2730, -2520 }, + { 29759, 4200, 4500 }, + { 29849, -3814, -3660 }, + { 30150, -3900, -3814 }, + { 30150, -1800, -1474 }, + { 30150, 240, 769 }, + { 30299, -4050, -3900 }, + { 30600, -4050, -4200 }, + { 30600, 3030, 3090 }, + { 30900, -960, -600 }, + { 31050, 769, 859 }, + { 31500, -3420, -4050 }, + { 31500, 4500, 4800 }, + { 31649, -700, -600 }, + { 31680, -960, -1800 }, + { 31800, -700, -600 }, + { 32099, -2730, -2220 }, + { 32099, -1800, -2220 }, + { 32099, -240, 0 }, + { 32340, -600, -240 }, + { 32400, -4950, -4500 }, + { 32400, -4500, -4050 }, + { 32400, -2730, -3420 }, + { 32400, 4800, 5160 }, + { 32715, 1800, 2850 }, + { 32819, 2850, 3030 }, + { 32850, -240, -960 }, + { 32850, 0, 180 }, + { 32850, 270, 375 }, + { 32850, 720, 859 }, + { 33060, 1560, 1800 }, + { 33165, 180, 270 }, + { 33449, -240, 0 }, + { 33449, 0, 120 }, + { 33591, 375, 720 }, + { 33960, -960, -721 }, + { 33960, -721, -240 }, + { 33960, 120, 375 }, + { 33960, 720, 1110 }, + { 33960, 1110, 1264 }, + { 33960, 1264, 1530 }, + { 33960, 1530, 1560 }, + { 34200, 970, 1110 }, + { 34349, 2850, 3330 }, + { 34500, -2220, -2730 }, + { 34500, 2610, 2850 }, + { 34650, 1150, 1264 }, + { 34664, 1530, 1650 }, + { 34664, 1650, 1800 }, + { 34844, 1800, 2190 }, + { 34920, 2190, 2610 }, + { 34950, 3330, 3480 }, + { 35400, 1650, 1740 }, + { 35580, 3480, 3570 }, + { 35699, 945, 970 }, + { 35699, 1150, 1275 }, + { 36000, -1680, -721 }, + { 36000, -540, -721 }, + { 36000, 3570, 3690 }, + { 36255, 510, 945 }, + { 36300, 4500, 4800 }, + { 36450, 945, 1230 }, + { 36450, 1230, 1275 }, + { 36540, 120, 510 }, + { 36599, -3600, -3420 }, + { 36599, -3420, -2730 }, + { 36599, -2730, -1680 }, + { 36750, 3690, 4020 }, + { 36959, -900, -540 }, + { 36959, -540, 0 }, + { 36959, 0, 120 }, + { 36966, 3570, 3655 }, + { 37020, 1170, 1230 }, + { 37080, 3289, 3655 }, + { 37200, 4020, 4500 }, + { 37499, 120, 360 }, + { 37575, 360, 709 }, + { 37650, 1680, 1740 }, + { 37800, 4800, 5160 }, + { 37800, 5160, 5169 }, + { 37890, 709, 1170 }, + { 38010, 709, 750 }, + { 38250, 1170, 1410 }, + { 38399, -4500, -3600 }, + { 38399, -3000, -2730 }, + { 38399, -2220, -2730 }, + { 38399, -1680, -2220 }, + { 38399, -1680, -1530 }, + { 38399, -540, -900 }, + { 38399, 120, 750 }, + { 38550, 1410, 1680 }, + { 38640, 120, 165 }, + { 39000, 105, 165 }, + { 39119, 1680, 2160 }, + { 39360, -1530, -540 }, + { 39375, 2160, 2625 }, + { 39434, 2625, 2640 }, + { 39540, 2640, 3165 }, + { 39540, 3165, 3289 }, + { 39600, -4050, -3420 }, + { 39600, -3420, -3000 }, + { 39600, 105, 120 }, + { 39600, 2100, 2160 }, + { 39839, 3165, 3300 }, + { 40170, 3300, 3375 }, + { 40950, -240, 0 }, + { 40950, 0, 120 }, + { 40950, 120, 450 }, + { 41070, 2070, 2100 }, + { 41160, 2070, 3150 }, + { 41160, 3150, 3375 }, + { 41160, 3375, 3544 }, + { 41400, -2220, -1530 }, + { 41400, 5169, 5280 }, + { 41700, 3544, 3780 }, + { 41999, -4500, -4050 }, + { 41999, -3510, -3420 }, + { 41999, -3420, -2400 }, + { 41999, -2400, -2220 }, + { 41999, 3000, 3150 }, + { 42300, 1924, 2070 }, + { 42449, 2880, 3000 }, + { 42449, 3780, 3960 }, + { 42750, 1879, 1924 }, + { 42899, -1530, -420 }, + { 42899, -420, -240 }, + { 42899, 450, 600 }, +}; + +#define NRA ((int)(sizeof(ra_edges)/sizeof(ra_edges[0]))) + +/* edges of constant dec */ +static struct { + short dec; /* degrees * 60 */ + unsigned short ra0, ra1; /* hours * 1800 */ +} dec_edges[] = { + { -5100, 6300, 13800 }, + { -4950, 0, 6300 }, + { -4950, 13800, 24600 }, + { -4950, 24600, 32400 }, + { -4560, 1350, 2399 }, + { -4500, 0, 1350 }, + { -4500, 6300, 8249 }, + { -4500, 11849, 13800 }, + { -4500, 13800, 16259 }, + { -4500, 16259, 20250 }, + { -4500, 20250, 24600 }, + { -4500, 32400, 38399 }, + { -4500, 38399, 41999 }, + { -4500, 41999, 0 }, + { -4200, 8249, 11849 }, + { -4200, 24600, 26550 }, + { -4200, 30600, 26550 }, + { -4050, 3900, 5760 }, + { -4050, 5760, 8249 }, + { -4050, 26550, 26850 }, + { -4050, 30299, 30600 }, + { -4050, 31500, 30600 }, + { -4050, 31500, 32400 }, + { -4050, 39600, 41999 }, + { -3900, 24300, 24600 }, + { -3900, 30150, 30299 }, + { -3840, 10800, 11849 }, + { -3840, 11849, 12299 }, + { -3840, 12299, 16259 }, + { -3840, 20250, 21299 }, + { -3840, 21299, 23099 }, + { -3840, 23099, 24300 }, + { -3840, 24300, 26159 }, + { -3814, 26850, 27300 }, + { -3814, 29849, 30150 }, + { -3660, 9900, 10800 }, + { -3660, 27300, 27599 }, + { -3660, 29557, 29849 }, + { -3600, 27599, 29557 }, + { -3600, 36599, 38399 }, + { -3540, 7799, 8249 }, + { -3510, 2399, 3900 }, + { -3510, 2399, 41999 }, + { -3510, 3900, 2399 }, + { -3510, 41999, 2399 }, + { -3480, 11700, 12299 }, + { -3450, 6300, 5760 }, + { -3450, 9000, 9900 }, + { -3420, 32400, 31500 }, + { -3420, 32400, 36599 }, + { -3420, 39600, 41999 }, + { -3390, 7200, 7799 }, + { -3390, 15899, 19800 }, + { -3390, 19800, 20250 }, + { -3300, 11100, 11700 }, + { -3300, 21299, 23099 }, + { -3300, 25500, 26159 }, + { -3300, 26159, 27090 }, + { -3300, 27090, 27599 }, + { -3270, 15209, 15899 }, + { -3240, 3900, 4350 }, + { -3240, 8100, 9000 }, + { -3240, 27090, 27599 }, + { -3210, 2399, 2849 }, + { -3190, 6899, 6300 }, + { -3190, 6899, 7200 }, + { -3180, 14700, 15209 }, + { -3150, 10800, 11100 }, + { -3090, 2849, 3299 }, + { -3060, 4350, 4800 }, + { -3060, 7349, 6899 }, + { -3045, 10800, 14400 }, + { -3045, 14400, 14700 }, + { -3000, 38399, 39600 }, + { -2940, 4800, 5400 }, + { -2940, 7680, 7349 }, + { -2940, 7680, 8100 }, + { -2890, 3299, 4199 }, + { -2880, 27599, 28200 }, + { -2790, 8100, 8699 }, + { -2760, 5400, 6150 }, + { -2730, 29557, 32099 }, + { -2730, 32099, 32400 }, + { -2730, 34500, 32400 }, + { -2730, 34500, 36599 }, + { -2730, 38399, 36599 }, + { -2640, 6150, 6960 }, + { -2580, 8699, 9000 }, + { -2580, 10800, 9000 }, + { -2580, 11849, 10800 }, + { -2580, 14400, 15060 }, + { -2520, 25500, 26850 }, + { -2520, 28200, 28800 }, + { -2520, 29557, 28800 }, + { -2400, 3000, 41999 }, + { -2400, 4199, 3000 }, + { -2400, 4199, 5400 }, + { -2400, 6960, 7680 }, + { -2385, 16860, 19800 }, + { -2374, 5400, 6300 }, + { -2220, 8249, 7680 }, + { -2220, 32099, 34500 }, + { -2220, 38399, 41400 }, + { -2220, 41999, 41400 }, + { -2205, 16860, 15060 }, + { -2160, 6300, 6750 }, + { -2100, 19800, 19499 }, + { -2100, 22050, 19800 }, + { -1980, 11010, 11849 }, + { -1980, 13260, 11849 }, + { -1980, 22649, 22050 }, + { -1870, 19499, 19049 }, + { -1800, 8460, 8249 }, + { -1800, 30150, 31680 }, + { -1800, 31680, 32099 }, + { -1770, 26850, 22649 }, + { -1770, 26850, 28200 }, + { -1770, 28800, 28200 }, + { -1750, 19049, 18450 }, + { -1680, 36000, 36599 }, + { -1680, 36599, 38399 }, + { -1635, 8699, 8460 }, + { -1635, 8699, 9000 }, + { -1635, 9000, 11010 }, + { -1590, 18450, 17550 }, + { -1530, 3000, 42899 }, + { -1530, 38399, 39360 }, + { -1530, 41400, 39360 }, + { -1530, 41400, 42899 }, + { -1530, 42899, 3000 }, + { -1530, 42899, 41400 }, + { -1474, 29280, 30150 }, + { -1470, 19499, 21299 }, + { -1470, 21299, 22649 }, + { -1470, 25650, 26850 }, + { -1462, 3000, 4770 }, + { -1462, 4770, 6750 }, + { -1440, 16349, 16860 }, + { -1440, 17550, 16860 }, + { -1320, 22649, 23099 }, + { -1320, 23099, 25650 }, + { -1200, 28200, 28650 }, + { -1155, 29280, 29475 }, + { -1140, 15449, 16349 }, + { -1140, 19350, 19499 }, + { -1095, 29280, 29475 }, + { -1020, 15060, 15449 }, + { -960, 30900, 31680 }, + { -960, 32850, 31680 }, + { -960, 32850, 33960 }, + { -900, 38399, 36959 }, + { -870, 8850, 8699 }, + { -721, 36000, 33960 }, + { -700, 31649, 31800 }, + { -660, 9149, 8850 }, + { -660, 10499, 9149 }, + { -660, 11010, 10499 }, + { -660, 11010, 13260 }, + { -660, 14549, 13260 }, + { -660, 15060, 14549 }, + { -660, 17249, 19350 }, + { -660, 23099, 21299 }, + { -600, 30900, 31649 }, + { -600, 31800, 32340 }, + { -540, 36959, 36000 }, + { -540, 39360, 38399 }, + { -480, 26400, 25650 }, + { -480, 28650, 29280 }, + { -420, 599, 42899 }, + { -360, 20730, 19350 }, + { -360, 21299, 20730 }, + { -240, 8400, 9149 }, + { -240, 10499, 11235 }, + { -240, 32099, 32340 }, + { -240, 33449, 32850 }, + { -240, 33960, 33449 }, + { -240, 40950, 42899 }, + { -195, 28650, 27149 }, + { -195, 28650, 29280 }, + { -105, 4770, 5909 }, + { -105, 5909, 6449 }, + { 0, 6449, 8310 }, + { 0, 8310, 8400 }, + { 0, 12960, 14549 }, + { 0, 27149, 26400 }, + { 0, 32099, 32850 }, + { 90, 12630, 12960 }, + { 105, 39000, 39600 }, + { 120, 599, 3600 }, + { 120, 33449, 33960 }, + { 120, 36540, 36959 }, + { 120, 36959, 37499 }, + { 120, 37499, 38399 }, + { 120, 38399, 38640 }, + { 120, 39600, 40950 }, + { 165, 38640, 39000 }, + { 180, 32850, 33165 }, + { 240, 28949, 29280 }, + { 240, 29280, 30150 }, + { 270, 33165, 32850 }, + { 330, 12600, 12630 }, + { 360, 37499, 37575 }, + { 375, 32850, 33591 }, + { 375, 33591, 33960 }, + { 420, 14265, 14549 }, + { 420, 14549, 16650 }, + { 420, 16650, 17249 }, + { 420, 17249, 19350 }, + { 450, 40950, 42899 }, + { 480, 24300, 27149 }, + { 510, 36255, 36540 }, + { 595, 3000, 3600 }, + { 595, 3600, 5909 }, + { 600, 0, 42899 }, + { 600, 11235, 11354 }, + { 600, 12479, 12600 }, + { 600, 14054, 14265 }, + { 600, 42899, 0 }, + { 660, 20730, 21360 }, + { 709, 37575, 37890 }, + { 709, 37890, 38010 }, + { 720, 11354, 12479 }, + { 720, 32850, 33591 }, + { 720, 33591, 33960 }, + { 750, 0, 255 }, + { 750, 10080, 10380 }, + { 750, 12600, 13500 }, + { 750, 38010, 38399 }, + { 769, 30150, 31050 }, + { 810, 13500, 14054 }, + { 840, 21360, 23099 }, + { 859, 31050, 32850 }, + { 900, 23099, 24300 }, + { 930, 8310, 8940 }, + { 930, 9599, 10080 }, + { 945, 35699, 36255 }, + { 945, 36255, 36450 }, + { 960, 8940, 9599 }, + { 960, 28650, 28949 }, + { 970, 34200, 35699 }, + { 1050, 11190, 11354 }, + { 1080, 10260, 10380 }, + { 1110, 33960, 34200 }, + { 1140, 5909, 6060 }, + { 1150, 34650, 35699 }, + { 1170, 37020, 37890 }, + { 1170, 37890, 38250 }, + { 1200, 14054, 14189 }, + { 1230, 36450, 37020 }, + { 1260, 255, 1530 }, + { 1264, 33960, 34650 }, + { 1275, 35699, 36450 }, + { 1290, 10589, 11190 }, + { 1320, 120, 255 }, + { 1320, 28650, 28859 }, + { 1369, 10260, 10589 }, + { 1410, 18900, 19350 }, + { 1410, 38250, 38550 }, + { 1425, 1290, 1530 }, + { 1500, 3000, 3450 }, + { 1530, 19350, 19800 }, + { 1530, 33960, 34664 }, + { 1560, 27149, 27329 }, + { 1560, 27329, 28859 }, + { 1560, 28859, 29100 }, + { 1560, 33060, 33960 }, + { 1620, 29100, 29399 }, + { 1635, 3450, 4350 }, + { 1650, 34664, 35400 }, + { 1680, 0, 120 }, + { 1680, 2534, 3000 }, + { 1680, 10589, 11759 }, + { 1680, 14189, 14400 }, + { 1680, 37650, 38550 }, + { 1680, 38550, 39119 }, + { 1710, 8550, 10589 }, + { 1710, 17789, 18900 }, + { 1710, 23850, 24300 }, + { 1710, 24300, 25124 }, + { 1740, 19800, 21360 }, + { 1740, 21360, 21600 }, + { 1740, 35400, 37650 }, + { 1800, 8100, 8550 }, + { 1800, 32715, 33060 }, + { 1800, 34664, 34844 }, + { 1840, 4350, 4890 }, + { 1840, 4890, 6060 }, + { 1840, 6060, 8100 }, + { 1845, 25124, 25259 }, + { 1879, 0, 42750 }, + { 1920, 22199, 23850 }, + { 1924, 42300, 42750 }, + { 1980, 1290, 2534 }, + { 1980, 27329, 27779 }, + { 2010, 13950, 14400 }, + { 2010, 14400, 16650 }, + { 2010, 16650, 17789 }, + { 2040, 4620, 4890 }, + { 2040, 19409, 19800 }, + { 2040, 21600, 22199 }, + { 2070, 41070, 41160 }, + { 2070, 41160, 42300 }, + { 2100, 2534, 3600 }, + { 2100, 39600, 41070 }, + { 2130, 11759, 13260 }, + { 2130, 13260, 13950 }, + { 2160, 8100, 8445 }, + { 2160, 39119, 39375 }, + { 2160, 39375, 39600 }, + { 2190, 34844, 34920 }, + { 2205, 3600, 4530 }, + { 2205, 4530, 4620 }, + { 2385, 16650, 17249 }, + { 2400, 18300, 19409 }, + { 2400, 27779, 28350 }, + { 2400, 28350, 29399 }, + { 2520, 16500, 17249 }, + { 2520, 17249, 18300 }, + { 2610, 34500, 34920 }, + { 2625, 39375, 39434 }, + { 2640, 39434, 39540 }, + { 2670, 12240, 13260 }, + { 2700, 21600, 21749 }, + { 2760, 300, 1560 }, + { 2820, 3000, 3675 }, + { 2820, 15150, 16500 }, + { 2850, 32715, 32819 }, + { 2850, 32819, 34349 }, + { 2850, 34349, 34500 }, + { 2880, 300, 42449 }, + { 2880, 1560, 2010 }, + { 2880, 42449, 300 }, + { 2910, 24300, 25259 }, + { 3000, 2010, 2460 }, + { 3000, 2460, 3000 }, + { 3000, 11700, 12240 }, + { 3000, 41999, 42449 }, + { 3030, 3675, 4530 }, + { 3030, 30600, 32819 }, + { 3090, 28350, 30600 }, + { 3150, 5999, 8445 }, + { 3150, 8445, 9000 }, + { 3150, 41160, 41999 }, + { 3165, 39540, 39839 }, + { 3180, 21749, 24300 }, + { 3180, 27450, 28350 }, + { 3240, 2460, 3060 }, + { 3240, 10980, 11700 }, + { 3289, 37080, 39540 }, + { 3300, 5700, 5999 }, + { 3300, 39839, 40170 }, + { 3330, 25259, 25950 }, + { 3330, 25950, 27450 }, + { 3330, 34349, 34950 }, + { 3360, 9000, 10980 }, + { 3375, 40170, 41160 }, + { 3420, 4379, 5580 }, + { 3420, 5580, 5700 }, + { 3450, 3060, 3434 }, + { 3480, 34950, 35580 }, + { 3510, 3434, 4379 }, + { 3544, 41160, 41700 }, + { 3570, 35580, 36000 }, + { 3570, 36000, 36966 }, + { 3600, 12600, 14340 }, + { 3600, 14340, 15150 }, + { 3655, 36966, 37080 }, + { 3690, 36000, 36750 }, + { 3720, 10980, 12600 }, + { 3780, 24300, 25950 }, + { 3780, 41700, 42449 }, + { 3840, 21600, 24300 }, + { 3960, 599, 42449 }, + { 3960, 25200, 28200 }, + { 3960, 42449, 599 }, + { 3990, 20399, 21600 }, + { 4020, 36750, 37200 }, + { 4080, 5580, 6150 }, + { 4200, 23400, 25200 }, + { 4200, 28200, 29759 }, + { 4410, 14340, 16500 }, + { 4410, 16500, 20399 }, + { 4500, 29759, 31500 }, + { 4500, 36300, 37200 }, + { 4620, 599, 6150 }, + { 4620, 6150, 6314 }, + { 4620, 20700, 23400 }, + { 4620, 24449, 23400 }, + { 4800, 6314, 9000 }, + { 4800, 19200, 20700 }, + { 4800, 26100, 24449 }, + { 4800, 31500, 32400 }, + { 4800, 36300, 37800 }, + { 4920, 16500, 19200 }, + { 5100, 9000, 14400 }, + { 5160, 32400, 37800 }, + { 5169, 37800, 41400 }, + { 5190, 14400, 26100 }, + { 5280, 6300, 14400 }, + { 5280, 41400, 6300 }, +}; + +#define NDEC ((int)(sizeof(dec_edges)/sizeof(dec_edges[0]))) + +/* given an epoch, give caller a list of all constellation edges. + * return count if ok, else -1. + * N.B. caller should *not* free what we return because we cache it here. + */ +int +cns_edges (double e, double **ra0p, double **dec0p, double **ra1p, +double **dec1p) +{ +#define NEDGES (NRA+NDEC) + static double *ra0, *dec0, *ra1, *dec1; + static double laste = -12345.6; /* any bogus value */ + double mjd0; + int i, n; + + /* if same epoch just return the same list */ + if (e == laste) { + *ra0p = ra0; + *dec0p = dec0; + *ra1p = ra1; + *dec1p = dec1; + return (NEDGES); + } + + /* get space for arrays, first time only */ + if (!ra0) { + ra0 = (double *)malloc (NEDGES * sizeof(double)); + if (!ra0) + return (-1); + dec0 = (double *)malloc (NEDGES * sizeof(double)); + if (!dec0) { + free ((void *)ra0); + return (-1); + } + ra1 = (double *)malloc (NEDGES * sizeof(double)); + if (!ra1) { + free ((void *)ra0); + free ((void *)dec0); + return (-1); + } + dec1 = (double *)malloc (NEDGES * sizeof(double)); + if (!dec1) { + free ((void *)ra0); + free ((void *)dec0); + free ((void *)ra1); + return (-1); + } + } + + /* prepare for precession from 1875 */ + cal_mjd (1, 1.0, 1875, &mjd0); + + /* build the constant-ra edge lists */ + n = 0; + for (i = 0; i < NRA; i++) { + ra0[n] = ra1[n] = hrrad((double)ra_edges[i].ra/1800.0); + dec0[n] = degrad((double)ra_edges[i].dec0/60.0); + dec1[n] = degrad((double)ra_edges[i].dec1/60.0); + precess (mjd0, e, &ra0[n], &dec0[n]); + precess (mjd0, e, &ra1[n], &dec1[n]); + n++; + } + + /* add the constant-dec edge lists */ + for (i = 0; i < NDEC; i++) { + ra0[n] = hrrad((double)dec_edges[i].ra0/1800.0); + ra1[n] = hrrad((double)dec_edges[i].ra1/1800.0); + dec0[n] = dec1[n] = degrad((double)dec_edges[i].dec/60.0); + precess (mjd0, e, &ra0[n], &dec0[n]); + precess (mjd0, e, &ra1[n], &dec1[n]); + n++; + } + + /* sanity check the count */ + if (n != NEDGES) { + printf ("cns_edges(): n=%d NEDGES=%ld\n", n, (long)NEDGES); + abort(); + } + + /* ok */ + *ra0p = ra0; + *dec0p = dec0; + *ra1p = ra1; + *dec1p = dec1; + laste = e; + return (NEDGES); +} + +/* given an ra, dec and epoch return the list of constellation ids which + * *may* fall within the given radius of said location. + * return the number of ids. + * ids[] need be no larger than 89. + */ +/* ARGSUSED */ +int +cns_list (double ra, double dec, double e, double rad, int ids[]) +{ + int i; + + /* TODO: this! */ + for (i = 0; i < NCNS; i++) + ids[i] = i; + return (NCNS); +} + +/* epoch 2000 RA/Dec of constellation figure end-points. + * drawcodes: 0=move to; 1=draw to; 2=draw to dashed; -1=end + */ +typedef struct { + int drawcode; /* draw code */ + float ra; /* rads */ + float dec; /* rads */ +} ConFig; + +/* array of malloced lists of ConFigs, same order as cns_namemap[] + */ +static ConFig *figmap[NCNS]; + +/* add one entry to the drawing code lists */ +static void +addFigList (ConFig **new, int *nused, int c, int drawcode, double ra, double dec) +{ + ConFig *cp; + + new[c]= (ConFig*) realloc (new[c], (nused[c]+1)*sizeof(ConFig)); + cp = &new[c][nused[c]++]; + cp->drawcode = drawcode; + cp->ra = (float)hrrad(ra); + cp->dec = (float)degrad(dec); +} + +/* load the given constellation definition file. + * return 0 if ok else reason why not in msg[] and -1. + */ +int +cns_loadfigs (FILE *fp, char *msg) +{ + char line[1024]; /* one line from the file */ + char cname[1024]; /* constellation name */ + ConFig **new; /* array of ConFig[] for each cnstn */ + int *nused; /* number of ConFig[] for each cnstn */ + int c = -1; /* index, same as cns_namemap[] */ + int s = 0; /* status */ + + /* init the temp lists */ + new = (ConFig **) calloc (NCNS, sizeof(ConFig*)); + nused = (int *) calloc (NCNS, sizeof(int)); + + /* read the file */ + while (fgets (line, sizeof(line), fp)) { + char rastr[64], decstr[64]; + char *lp; + int code; + + /* skip leading/trailing whitespace, blank lines and # lines */ + for (lp = line+strlen(line)-1; lp>=line && isspace(*lp); --lp) + *lp = '\0'; + for (lp = line; isspace(*lp); lp++) + continue; + if (*lp == '#' || *lp == '\0') + continue; + + /* ok, line looks interesting, look more carefully */ + if (sscanf (lp, "%d %s %s", &code, rastr, decstr) == 3) { + /* looks like a drawing line */ + double ra, dec; + + /* must be working on a current constellation */ + if (c < 0) { + sprintf (msg,"Found coord line before first constellation"); + s = -1; + break; + } + + /* check draw code */ + if (code < 0 || code > 2) { + sprintf (msg, "Bad draw code in %s: %d", cname, code); + s = -1; + break; + } + + /* crack ra dec */ + if (f_scansexa (rastr, &ra) < 0 || ra < 0 || ra >= 24) { + sprintf (msg, "Bad RA format in %s: %s", cname, rastr); + s = -1; + break; + } + if (f_scansexa (decstr, &dec) < 0 || dec < -90 || dec > 90) { + sprintf (msg, "Bad Dec format in %s: %s", cname, decstr); + s = -1; + break; + } + + /* add to list */ + addFigList (new, nused, c, code, ra, dec); + + } else { + /* finish previous list, if any */ + if (c >= 0) + addFigList (new, nused, c, -1, 0.0, 0.0); + + /* see if it's a recognized constellation name */ + for (c = 0; c < NCNS; c++) + if (strcmp (lp, cns_namemap[c]+5) == 0) + break; + if (c == NCNS) { + sprintf (msg, "Unknown constellation: %s", lp); + s = -1; + break; + } + if (new[c]) { + sprintf (msg, "Duplicate definition for %s", lp); + s = -1; + break; + } + + /* init its list */ + strcpy (cname, lp); + new[c] = (ConFig *) malloc (1); /* realloc seed */ + } + } + + /* even if ok check we found all definitions */ + if (s == 0) { + int l = 0; + + /* finish last list */ + addFigList (new, nused, c, -1, 0.0, 0.0); + + for (c = 0; c < NCNS; c++) + if (!new[c]) + l += sprintf (msg+l, "%s ", cns_namemap[c]+5); + if (l > 0) { + strcat (msg, ": no definition found"); + s = -1; + } + } + + /* handle ok or error */ + if (s < 0) { + /* trouble: free temp lists */ + for (c = 0; c < NCNS; c++) + if (new[c]) + free (new[c]); + } else { + /* make temp lists persistent */ + for (c = 0; c < NCNS; c++) { + if (figmap[c]) + free (figmap[c]); + figmap[c] = new[c]; + } + } + + /* done with lists themselves regardless */ + free (new); + free (nused); + + /* done */ + return (s); +} + +/* given a constellation id and epoch, return arrays of ra[] and dec[] + * end-points precessed to the desired epoch that, if connected, will form the + * given constellation figure. + * dcodes is 0 if the coord is a "move-to", 1 if a "draw-to" or 2 if a "draw-to + * as dotted-line". + * return the total number of tripples or -1 if id is bogus. + * the arrays need be no larger than 35 entries. + */ +int +cns_figure (int id, double e, double ra[], double dec[], int dcodes[]) +{ + ConFig *cfp; + + if (id < 0 || id >= NCNS) + return (-1); + + for (cfp = figmap[id]; cfp->drawcode >= 0; cfp++) { + *ra = (double)cfp->ra; + *dec = (double)cfp->dec; + precess (J2000, e, ra, dec); + ra++; + dec++; + *dcodes++ = cfp->drawcode; + } + + return (cfp - figmap[id]); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: constel.c,v $ $Date: 2005/03/05 06:55:22 $ $Revision: 1.13 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/dbfmt.c b/Common/Libraries/XEphemAstroLib/src/dbfmt.c new file mode 100644 index 0000000000000000000000000000000000000000..a562493fb6b3661b72528792240ff7ba9fb13ca9 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/dbfmt.c @@ -0,0 +1,1029 @@ +/* code to convert between .edb format and an Obj */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + + +int get_fields (char *s, int delim, char *fields[]); + +#define MAXDBLINE 512 /* longest allowed db line */ + +#define FLDSEP ',' /* major field separator */ +#define SUBFLD '|' /* subfield separator */ +#define MAXFLDS 20 /* must be more than on any expected line */ +#define MAXESGOOD 100 /* max earth satellite good, days */ + +static char *enm (char *flds[MAXFLDS]); +static int crack_f (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_e (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_h (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_p (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_E (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_P (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_B (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_name (Obj *op, char *flds[MAXFLDS], int nf, + char nm[][MAXNM], int nnm); +static void crack_year (char *bp, double *p); +static void crack_okdates (char *fld, float *startok, float *endok); +static int get_okdates (char *lp, float *sp, float *ep); +static int tle_sum (char *l); +static double tle_fld (char *l, int from, int thru); +static double tle_expfld (char *l, int start); +static void write_f (Obj *op, char lp[]); +static void write_e (Obj *op, char lp[]); +static void write_h (Obj *op, char lp[]); +static void write_p (Obj *op, char lp[]); +static void write_E (Obj *op, char lp[]); +static void write_P (Obj *op, char lp[]); +static void write_B (Obj *op, char lp[]); + +/* crack the given .edb database line into op. + * if ok + * return number of names in nm[], or 1 if nm == NULL + * else + * if whynot + * if not even a candidate + * set whynot[0] = '\0' + * else + * fill whynot with reason message. + * return -1 + * only the first name is stored in op, all names (up to nnm) are in nm[], or + * ignored if nm == NULL. + */ +int +db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm, char whynot[]) +{ + char copy[MAXDBLINE]; /* work copy; leave s untouched */ + char *flds[MAXFLDS]; /* point to each field for easy reference */ + int nf; + int i; + + /* init no response */ + if (whynot) + whynot[0] = '\0'; + + /* basic initial check */ + if (dbline_candidate (s) < 0) + return (-1); + + /* do all the parsing on a copy */ + (void) strncpy (copy, s, MAXDBLINE-1); + copy[MAXDBLINE-1] = '\0'; + i = strlen(copy); + if (copy[i-1] == '\n') + copy[i-1] = '\0'; + + /* parse into main fields */ + nf = get_fields (copy, FLDSEP, flds); + + /* need at least 2: name and type */ + if (nf < 2) { + if (whynot) + sprintf (whynot, "Bogus: %s", s); + return (-1); + } + + /* switch out on type of object - the second field */ + switch (flds[1][0]) { + + case 'f': + if (crack_f (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'e': + if (crack_e (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'h': + if (crack_h (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'p': + if (crack_p (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'B': + if (crack_B (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'E': + if (crack_E (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'P': + if (crack_P (op, flds, nf, whynot) < 0) + return (-1); + break; + + default: + if (whynot) + sprintf (whynot, "%s: Unknown type %c for %s", enm(flds), + flds[1][0], flds[0]); + return (-1); + } + + return (crack_name (op, flds, nf, nm, nnm)); +} + +/* write the given Obj in .edb format to lp[]. + * we do _not_ include a trailing '\n'. + */ +void +db_write_line (Obj *op, char lp[]) +{ + switch (op->o_type) { + case FIXED: + write_f (op, lp); + break; + + case BINARYSTAR: + write_B (op, lp); + break; + + case ELLIPTICAL: + write_e (op, lp); + break; + + case HYPERBOLIC: + write_h (op, lp); + break; + + case PARABOLIC: + write_p (op, lp); + break; + + case EARTHSAT: + write_E (op, lp); + break; + + case PLANET: + write_P (op, lp); + break; + + default: + printf ("Unknown type for %s: %d\n", op->o_name, op->o_type); + abort(); + } +} + +/* given 3 lines, first of which is name and next 2 are TLE, fill op. + * we skip leading whitespace on all lines. + * we do /not/ assume the 2 TLE lines are 0 terminated, but we do reach out into + * each as far as 69 chars. + * we detect nonconformance as efficiently as possible. + * name ends at first '\0', '\r' or '\n'. + * set startok/endok. + * if ok return 0 else return -1 + */ +int +db_tle (char *name, char *l1, char *l2, Obj *op) +{ + double ep; + int i; + + /* check for correct line numbers, macthing satellite numbers and + * correct checksums. + */ + while (isspace(*l1)) + l1++; + if (*l1 != '1') + return (-1); + while (isspace(*l2)) + l2++; + if (*l2 != '2') + return (-1); + if (strncmp (l1+2, l2+2, 5)) + return (-1); + if (tle_sum (l1) < 0) + return (-1); + if (tle_sum (l2) < 0) + return (-1); + + /* assume it's ok from here out */ + + /* fresh */ + zero_mem ((void *)op, sizeof(ObjES)); + op->o_type = EARTHSAT; + + /* name, sans leading and trailing whitespace */ + while (isspace(*name)) + name++; + i = strcspn (name, "\r\n"); + while (i > 0 && name[i-1] == ' ') + --i; + if (i == 0) + return (-1); + if (i > MAXNM-1) + i = MAXNM-1; + sprintf (op->o_name, "%.*s", i, name); + + /* goodies from "line 1" */ + op->es_drag = (float) tle_expfld (l1, 54); + op->es_decay = (float) tle_fld (l1, 34, 43); + i = (int) tle_fld (l1, 19, 20); + if (i < 57) + i += 100; + cal_mjd (1, tle_fld(l1, 21, 32), i+1900, &ep); + op->es_epoch = ep; + + /* goodies from "line 2" */ + op->es_n = tle_fld (l2, 53, 63); + op->es_inc = (float)tle_fld (l2, 9, 16); + op->es_raan = (float)tle_fld (l2, 18, 25); + op->es_e = (float)(tle_fld (l2, 27, 33) * 1e-7); + op->es_ap = (float)tle_fld (l2, 35, 42); + op->es_M = (float)tle_fld (l2, 44, 51); + op->es_orbit = (int)tle_fld (l2, 64, 68); + + /* limit date range to decay period that changes period by 1% but + * never more than MAXESGOOD. + * es_n is rev/day, es_decay is (rev/day)/day + */ + if (fabs(op->es_decay) > 0) { + double dt = 0.01*op->es_n/fabs(op->es_decay); + if (dt > MAXESGOOD) + dt = MAXESGOOD; + op->es_startok = op->es_epoch - dt; + op->es_endok = op->es_epoch + dt; + } + + /* yes! */ + return (0); +} + +/* return 0 if op has no date range information or what it does have brackets + * now, else -1 + */ +int +dateRangeOK (Now *np, Obj *op) +{ + float *sp, *ep; + + switch (op->o_type) { + case ELLIPTICAL: + sp = &op->e_startok; + ep = &op->e_endok; + break; + case HYPERBOLIC: + sp = &op->h_startok; + ep = &op->h_endok; + break; + case PARABOLIC: + sp = &op->p_startok; + ep = &op->p_endok; + break; + case EARTHSAT: + sp = &op->es_startok; + ep = &op->es_endok; + break; + default: + return (0); + } + + if (*sp <= mjd && (!*ep || mjd <= *ep)) + return (0); + return (-1); +} + +/* given a null-terminated string, fill in fields[] with the starting addresses + * of each field delimited by delim or '\0'. + * N.B. each character matching delim is REPLACED BY '\0' IN PLACE. + * N.B. 0-length fields count, so even if *s=='\0' we return 1. + * return the number of fields. + */ +int +get_fields (char *s, int delim, char *fields[]) +{ + int n; + char c; + + *fields = s; + n = 0; + do { + c = *s++; + if (c == delim || c == '\0') { + s[-1] = '\0'; + *++fields = s; + n++; + } + } while (c); + + return (n); +} + +/* return 0 if buf qualifies as a database line worthy of a cracking + * attempt, else -1. + */ +int +dbline_candidate (char *buf) +{ + char c = buf[0]; + + return (c == '#' || c == '!' || isspace(c) ? -1 : 0); +} + +/* return 0 if TLE checksum is ok, else -1 */ +static int +tle_sum (char *l) +{ + char *lastl = l + 68; + int sum; + + for (sum = 0; l < lastl; ) { + char c = *l++; + if (c == '\0') + return (-1); + if (isdigit(c)) + sum += c - '0'; + else if (c == '-') + sum++; + } + + return (*l - '0' == (sum%10) ? 0 : -1); +} + +/* extract the given columns and return value. + * N.B. from and to are 1-based within l + */ +static double +tle_fld (char *l, int from, int thru) +{ + char buf[32]; + + sprintf (buf, "%.*s", thru-from+1, l+from-1); + return (atod (buf)); +} + +/* extract the exponential value starting at the given column. + * N.B. start is 1-based within l + */ +static double +tle_expfld (char *l, int start) +{ + char buf[32]; + double v; + + sprintf (buf, ".%.*s", 5, l+start); + v = atod (buf) * pow (10.0, tle_fld(l, start+6, start+7)); + if (l[start-1] == '-') + v = -v; + return (v); +} + +static int +crack_f (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + char *sflds[MAXFLDS]; + double tmp; + int nsf; + + if (nf < 5 || nf > 7) { + if (whynot) + sprintf (whynot, "%s: type f needs 5-7 fields, not %d", + enm(flds),nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjF)); + op->o_type = FIXED; + + nsf = get_fields(flds[1], SUBFLD, sflds); + if (nsf > 1) { + switch (sflds[1][0]) { + case 'A': case 'B': case 'C': case 'D': case 'F': case 'G': + case 'H': case 'K': case 'J': case 'L': case 'M': case 'N': + case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'Y': + op->f_class = sflds[1][0]; + if (op->f_class == 'B') + op->f_class = 'D'; /* merge B and D since BINARYSTAR */ + break; + default: + if (whynot) + sprintf (whynot, "%s: Bad f class: %c", enm(flds), + sflds[1][0]); + return (-1); + } + } else + op->f_class = 'T'; /* default to star-like */ + if (nsf > 2) { + /* fill f_spect all the way */ + char buf[sizeof(op->f_spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->f_spect), sflds[2]); + memcpy (op->f_spect, buf, (int)sizeof(op->f_spect)); + } + + nsf = get_fields(flds[2], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_RA = (float) hrrad(tmp); + if (nsf > 1) + op->f_pmRA = (float) 1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + + nsf = get_fields(flds[3], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_dec = (float) degrad(tmp); + if (nsf > 1) + op->f_pmdec = (float)1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + if (fabs(op->f_dec) < PI/2) + op->f_pmRA /= cos (op->f_dec); + + set_fmag (op, atod(flds[4])); + + if (nf > 5 && flds[5][0]) { + tmp = op->f_epoch; + crack_year (flds[5], &tmp); + op->f_epoch = (float) tmp; + } else + op->f_epoch = J2000; /* default */ + + if (nf > 6) { + op->f_size = (float) atod(flds[6]); + + /* optional minor axis and position angle subfields */ + nsf = get_fields(flds[6], SUBFLD, sflds); + if (nsf == 3) { + set_ratio(op, op->s_size, atod(sflds[1])); + set_pa(op,degrad(atod(sflds[2]))); + } else { + set_ratio(op,1,1); /* round */ + set_pa(op,0.0); + } + } + + return (0); +} + +static int +crack_e (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 13 && nf != 14) { + if (whynot) + sprintf (whynot, "%s: type e needs 13 or 14 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjE)); + op->o_type = ELLIPTICAL; + + op->e_inc = (float) atod (flds[2]); + op->e_Om = (float) atod (flds[3]); + op->e_om = (float) atod (flds[4]); + op->e_a = (float) atod (flds[5]); + /* retired op->e_n = (float) atod (flds[6]); */ + op->e_e = atod (flds[7]); + op->e_M = (float) atod (flds[8]); + crack_year (flds[9], &op->e_cepoch); + crack_okdates (flds[9], &op->e_startok, &op->e_endok); + crack_year (flds[10], &op->e_epoch); + + /* magnitude model gk or HG(default). allow prefixes in either field */ + op->e_mag.whichm = flds[11][0] == 'g' ? MAG_gk : MAG_HG; + if (isdigit(flds[11][0])) + op->e_mag.m1 = (float) atod(&flds[11][0]); + else + op->e_mag.m1 = (float) atod(&flds[11][1]); + if (isdigit(flds[12][0])) + op->e_mag.m2 = (float) atod(&flds[12][0]); + else + op->e_mag.m2 = (float) atod(&flds[12][1]); + + if (nf == 14) + op->e_size = (float) atod (flds[13]); + + return (0); +} + +static int +crack_h (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 11 && nf != 12) { + if (whynot) + sprintf (whynot, "%s: type h needs 11 or 12 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjH)); + op->o_type = HYPERBOLIC; + + crack_year (flds[2], &op->h_ep); + crack_okdates (flds[2], &op->h_startok, &op->h_endok); + op->h_inc = (float) atod (flds[3]); + op->h_Om = (float) atod (flds[4]); + op->h_om = (float) atod (flds[5]); + op->h_e = (float) atod (flds[6]); + op->h_qp = (float) atod (flds[7]); + crack_year (flds[8], &op->h_epoch); + op->h_g = (float) atod (flds[9]); + op->h_k = (float) atod (flds[10]); + + if (nf == 12) + op->h_size = (float) atod (flds[11]); + + return (0); +} + +static int +crack_p (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 10 && nf != 11) { + if (whynot) + sprintf (whynot, "%s: type p needs 10 or 11 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjP)); + op->o_type = PARABOLIC; + + crack_year (flds[2], &op->p_ep); + crack_okdates (flds[2], &op->p_startok, &op->p_endok); + op->p_inc = (float) atod (flds[3]); + op->p_om = (float) atod (flds[4]); + op->p_qp = (float) atod (flds[5]); + op->p_Om = (float) atod (flds[6]); + crack_year (flds[7], &op->p_epoch); + op->p_g = (float) atod (flds[8]); + op->p_k = (float) atod (flds[9]); + + if (nf == 11) + op->p_size = (float) atod (flds[10]); + + return (0); +} + +static int +crack_E (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 11 && nf != 12) { + if (whynot) + sprintf (whynot, "%s: type E needs 11 or 12 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjES)); + op->o_type = EARTHSAT; + crack_year (flds[2], &op->es_epoch); + crack_okdates (flds[2], &op->es_startok, &op->es_endok); + op->es_inc = (float) atod (flds[3]); + op->es_raan = (float) atod (flds[4]); + op->es_e = (float) atod (flds[5]); + op->es_ap = (float) atod (flds[6]); + op->es_M = (float) atod (flds[7]); + op->es_n = atod (flds[8]); + op->es_decay = (float) atod (flds[9]); + op->es_orbit = atoi (flds[10]); + if (nf == 12) + op->es_drag = (float) atod (flds[11]); + + /* if not already specified, limit date range to decay period that + * changes period by 1% but never longer than MAXESGOOD. + * es_n is rev/day, es_decay is (rev/day)/day + */ + if (op->es_startok == 0 && op->es_endok == 0 && fabs(op->es_decay) > 0){ + double dt = 0.01*op->es_n/fabs(op->es_decay); + if (dt > MAXESGOOD) + dt = MAXESGOOD; + op->es_startok = op->es_epoch - dt; + op->es_endok = op->es_epoch + dt; + } + + return (0); +} + +static int +crack_P (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + Obj *bi; + int nbi; + int i; + + nbi = getBuiltInObjs (&bi); + + for (i = 0; i < nbi; i++) { + Obj *bop = bi + i; + if (is_type(bop,PLANETM) && !strcmp (flds[0], bop->o_name)) { + memcpy ((void *)op, bop, sizeof(ObjPl)); + return (0); + } + } + + if (whynot) + sprintf (whynot, "%s: Unknown planet or moon", enm(flds)); + return (-1); +} + +static int +crack_B (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + char *sflds[MAXFLDS]; + double tmp; + int nsf; + + if (nf != 7) { + if (whynot) + sprintf (whynot, "%s: B need 7 fields, not %d", enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjB)); + op->o_type = BINARYSTAR; + + nsf = get_fields(flds[1], SUBFLD, sflds); + if (nsf > 1) { + switch (sflds[1][0]) { + case 'a': case 'c': case 'e': case 'x': case 'y': case 'o': + case 's': case 't': case 'u': case 'v': case 'b': case 'd': + case 'q': case 'r': case 'p': case 'U': case 'V': case 'Y': + op->f_class = sflds[1][0]; + break; + default: + if (whynot) + sprintf (whynot, "%s: Bad B class: %c", enm(flds), + sflds[1][0]); + return (-1); + } + } + if (nsf > 2) { + /* fill f_spect all the way */ + char buf[sizeof(op->f_spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->f_spect), sflds[2]); + memcpy (op->f_spect, buf, (int)sizeof(op->f_spect)); + } + if (nsf > 3) { + /* fill b_2spect all the way */ + char buf[sizeof(op->b_2spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->b_2spect), sflds[3]); + memcpy (op->b_2spect, buf, (int)sizeof(op->b_2spect)); + } + + nsf = get_fields(flds[2], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_RA = (float) hrrad(tmp); + if (nsf > 1) + op->f_pmRA = (float) 1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + + nsf = get_fields(flds[3], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_dec = (float) degrad(tmp); + if (nsf > 1) + op->f_pmdec = (float)1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + if (fabs(op->f_dec) < PI/2) + op->f_pmRA /= cos (op->f_dec); + + nsf = get_fields(flds[4], SUBFLD, sflds); + if (nsf > 0) + set_fmag (op, atod(sflds[0])); + if (nsf > 1) + op->b_2mag = (short)floor((atod(sflds[1]))*MAGSCALE + 0.5); + + if (flds[5][0]) { + tmp = op->f_epoch; + crack_year (flds[5], &tmp); + op->f_epoch = (float) tmp; + } else + op->f_epoch = J2000; /* default */ + + nsf = get_fields(flds[6], SUBFLD, sflds); + if (nsf == 7) { + int l; + char c; + + op->b_bo.bo_a = atod(sflds[0]); + op->b_bo.bo_i = atod(sflds[1]); + op->b_bo.bo_O = atod(sflds[2]); + op->b_bo.bo_e = atod(sflds[3]); + op->b_bo.bo_T = atod(sflds[4]); + op->b_bo.bo_o = atod(sflds[5]); + op->b_bo.bo_P = atod(sflds[6]); + + /* reject some weird entries actually seen in real lists */ + if (op->b_bo.bo_a <= 0) { + if (whynot) + sprintf (whynot, "%s: Bogus B semi major axis: %g", + enm(flds), op->b_bo.bo_a); + return (-1); + } + if (op->b_bo.bo_P <= 0) { + if (whynot) + sprintf (whynot, "%s: Bogus B period: %g", enm(flds), + op->b_bo.bo_P); + return (-1); + } + + /* scale period */ + l = strlen (sflds[6]); + c = sflds[6][l-1]; + switch (c) { + case 'y': case 'Y': + break; + case 'h': case 'H': + op->b_bo.bo_P /= (24.0*365.25); + break; + case 'd': case 'D': + op->b_bo.bo_P /= 365.25; + break; + default: + if (c != ' ' && !isdigit(c)) { + if (whynot) + sprintf (whynot,"%s: B period suffix not Y, D or H: %c", + enm(flds), c); + return (-1); + } + } + + } else if (nsf==3 || nsf==6 || nsf==9) { + double yr; + int i; + + op->b_nbp = nsf/3; + for (i = 0; i < nsf; i += 3) { + tmp = 0; + crack_year (sflds[i+0], &tmp); + mjd_year (tmp, &yr); + op->b_bp[i/3].bp_ep = (float)yr; + op->b_bp[i/3].bp_sep = atod(sflds[i+1]); + op->b_bp[i/3].bp_pa = degrad(atod(sflds[i+2])); + } + } else { + if (whynot) + sprintf (whynot, + "%s: type B needs 3,6 or 7 subfields in field 7, not %d", + enm(flds), nsf); + return (-1); + } + + return (0); +} + +/* put all names in nm but load only the first into o_name */ +static int +crack_name (Obj *op, char *flds[MAXFLDS], int nf, char nm[][MAXNM], int nnm) +{ + char *sflds[MAXFLDS]; + int nsf; + int i; + + nsf = get_fields (flds[0], SUBFLD, sflds); + for (i = 0; nm && i < nsf && i < nnm; i++) { + strncpy (nm[i], sflds[i], MAXNM); + nm[i][MAXNM-1] = '\0'; + } + strncpy (op->o_name, sflds[0], MAXNM-1); + return (nsf); +} + +/* simple name cracker just for error messages */ +static char * +enm (char *flds[MAXFLDS]) +{ + char *sflds[MAXFLDS]; + int nsf = get_fields (flds[0], SUBFLD, sflds); + return (nsf > 0 ? sflds[0] : "Unknown"); +} + +/* given either a decimal year (xxxx[.xxx]) or a calendar (x/x/x) date + * convert it to an mjd and store it at *p. + */ +static void +crack_year (char *bp, double *p) +{ + int m, y; + double d; + + mjd_cal (*p, &m, &d, &y); /* init with current */ + f_sscandate (bp, PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, p); +} + +/* crack the startok and endok date fields found in several Obj types. + * set to 0 if blank or any problems. + */ +static void +crack_okdates (char *fld, float *startok, float *endok) +{ + char *sflds[MAXFLDS]; + double tmp; + int m, y; + double d; + int nsf; + + *startok = *endok = 0; + nsf = get_fields(fld, SUBFLD, sflds); + if (nsf > 1) { + d = m = y = 0; + f_sscandate (sflds[1], PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, &tmp); + *startok = (float)tmp; + if (nsf > 2) { + d = m = y = 0; + f_sscandate (sflds[2], PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, &tmp); + *endok = (float)tmp; + } + } +} + +/* add startok and endok to string at lp if non-zero. + * return number of characters added. + */ +static int +get_okdates (char *lp, float *sp, float *ep) +{ + char *lp0 = lp; + + if (*sp || *ep) { + *lp++ = '|'; + if (*sp) + lp += fs_date (lp, PREF_MDY, *sp); + if (*ep) { + *lp++ = '|'; + lp += fs_date (lp, PREF_MDY, *ep); + } + } + + return (lp - lp0); +} + +static void +write_f (Obj *op, char lp[]) +{ + double tmp; + + lp += sprintf (lp, "%s,f", op->o_name); + if (op->f_class) + lp += sprintf (lp, "|%c", op->f_class); + if (op->f_spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->f_spect), op->f_spect); + *lp++ = ','; + lp += fs_sexa (lp, radhr(op->f_RA), 2, 36000); + if (op->f_pmRA) + lp += sprintf (lp, "|%.6g",cos(op->f_dec)*op->f_pmRA/1.327e-11); + *lp++ = ','; + lp += fs_sexa (lp, raddeg(op->f_dec), 3, 3600); + if (op->f_pmdec) + lp += sprintf (lp, "|%.6g", op->f_pmdec/1.327e-11); + lp += sprintf (lp, ",%.2f", get_mag(op)); + mjd_year (op->f_epoch, &tmp); + lp += sprintf (lp, ",%.6g", tmp); /* %.7g gives 2000.001 */ + lp += sprintf (lp, ",%.7g", op->f_size); + if (op->f_size && (op->f_ratio || op->f_pa)) + lp += sprintf (lp,"|%g|%g", op->f_size*get_ratio(op), + raddeg(get_pa(op))); +} + +static void +write_e (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,e", op->o_name); + lp += sprintf (lp, ",%.7g", op->e_inc); + lp += sprintf (lp, ",%.7g", op->e_Om); + lp += sprintf (lp, ",%.7g", op->e_om); + lp += sprintf (lp, ",%.7g", op->e_a); + lp += sprintf (lp, ",%.7g", 0.0); /* retired op->e_n */ + lp += sprintf (lp, ",%.7g", op->e_e); + lp += sprintf (lp, ",%.7g", op->e_M); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->e_cepoch); + lp += get_okdates (lp, &op->e_startok, &op->e_endok); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->e_epoch); + if (op->e_mag.whichm == MAG_gk) + lp += sprintf (lp, ",g%.7g", op->e_mag.m1); + else if (op->e_mag.whichm == MAG_HG) + lp += sprintf (lp, ",H%.7g", op->e_mag.m1); + else + lp += sprintf (lp, ",%.7g", op->e_mag.m1); + lp += sprintf (lp, ",%.7g", op->e_mag.m2); + lp += sprintf (lp, ",%.7g", op->e_size); +} + +static void +write_h (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,h", op->o_name); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->h_ep); + lp += get_okdates (lp, &op->h_startok, &op->h_endok); + lp += sprintf (lp, ",%.7g", op->h_inc); + lp += sprintf (lp, ",%.7g", op->h_Om); + lp += sprintf (lp, ",%.7g", op->h_om); + lp += sprintf (lp, ",%.7g", op->h_e); + lp += sprintf (lp, ",%.7g", op->h_qp); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->h_epoch); + lp += sprintf (lp, ",%.7g", op->h_g); + lp += sprintf (lp, ",%.7g", op->h_k); + lp += sprintf (lp, ",%.7g", op->h_size); +} + +static void +write_p (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,p", op->o_name); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->p_ep); + lp += get_okdates (lp, &op->p_startok, &op->p_endok); + lp += sprintf (lp, ",%.7g", op->p_inc); + lp += sprintf (lp, ",%.7g", op->p_om); + lp += sprintf (lp, ",%.7g", op->p_qp); + lp += sprintf (lp, ",%.7g", op->p_Om); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->p_epoch); + lp += sprintf (lp, ",%.7g", op->p_g); + lp += sprintf (lp, ",%.7g", op->p_k); + lp += sprintf (lp, ",%.7g", op->p_size); +} + +static void +write_E (Obj *op, char lp[]) +{ + double d; + int m, y; + + lp += sprintf (lp, "%s,E", op->o_name); + *lp++ = ','; + mjd_cal (op->es_epoch, &m, &d, &y); /* need more day prec than fs_date*/ + lp += sprintf (lp, "%d/%.12g/%d", m, d, y); + lp += get_okdates (lp, &op->es_startok, &op->es_endok); + lp += sprintf (lp, ",%.8g", op->es_inc); + lp += sprintf (lp, ",%.8g", op->es_raan); + lp += sprintf (lp, ",%.8g", op->es_e); + lp += sprintf (lp, ",%.8g", op->es_ap); + lp += sprintf (lp, ",%.8g", op->es_M); + lp += sprintf (lp, ",%.12g", op->es_n); /* double */ + lp += sprintf (lp, ",%.8g", op->es_decay); + lp += sprintf (lp, ",%d", op->es_orbit); + lp += sprintf (lp, ",%.8g", op->es_drag); +} + +static void +write_B (Obj *op, char lp[]) +{ + double tmp; + + lp += sprintf (lp, "%s,B", op->o_name); + if (op->f_class) + lp += sprintf (lp, "|%c", op->f_class); + if (op->f_spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->f_spect), op->f_spect); + if (op->b_2spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->b_2spect),op->b_2spect); + *lp++ = ','; + lp += fs_sexa (lp, radhr(op->f_RA), 2, 36000); + if (op->f_pmRA) + lp += sprintf (lp, "|%.6g",cos(op->f_dec)*op->f_pmRA/1.327e-11); + *lp++ = ','; + lp += fs_sexa (lp, raddeg(op->f_dec), 3, 3600); + if (op->f_pmdec) + lp += sprintf (lp, "|%.6g", op->f_pmdec/1.327e-11); + lp += sprintf (lp, ",%.2f", get_mag(op)); + lp += sprintf (lp, "|%.2f", op->b_2mag/MAGSCALE); + mjd_year (op->f_epoch, &tmp); + lp += sprintf (lp, ",%.6g", tmp); /* %.7g gives 2000.001 */ + if (op->b_nbp == 0) { + lp += sprintf (lp, ",%.6g", op->b_bo.bo_a); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_i); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_O); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_e); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_T); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_o); + lp += sprintf (lp, "|%.6gy", op->b_bo.bo_P); + } else { + int i; + + for (i = 0; i < op->b_nbp; i++) { + BinPos *bp = &op->b_bp[i]; + lp += sprintf (lp, "%c%.6g", i==0?',':'|', bp->bp_ep); + lp += sprintf (lp, "|%.6g", bp->bp_sep); + lp += sprintf (lp, "|%.6g", raddeg(bp->bp_pa)); + } + } +} + +static void +write_P (Obj *op, char lp[]) +{ + + lp += sprintf (lp, "%s,P", op->o_name); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: dbfmt.c,v $ $Date: 2009/10/09 21:28:11 $ $Revision: 1.45 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/deep.c b/Common/Libraries/XEphemAstroLib/src/deep.c new file mode 100644 index 0000000000000000000000000000000000000000..fcb13f5a41f313727223c7bf90c2332735827960 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/deep.c @@ -0,0 +1,790 @@ +#include +#include + +#include "deepconst.h" +#include "satspec.h" + +/* * DEEP SPACE 31 OCT 80 */ +/* SUBROUTINE DEEP */ +/* COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O, */ +/* 1 XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 */ +/* COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD, */ +/* 1 XJ3,XKE,XKMPER,XMNPDA,AE */ +/* COMMON/C2/DE2RA,PI,PIO2,TWOPI,X3PIO2 */ +/* DOUBLE PRECISION EPOCH, DS50 */ +/* DOUBLE PRECISION */ +/* * DAY,PREEP,XNODCE,ATIME,DELT,SAVTSN,STEP2,STEPN,STEPP */ +/* DATA ZNS, C1SS, ZES/ */ +/* A 1.19459E-5, 2.9864797E-6, .01675/ */ +/* DATA ZNL, C1L, ZEL/ */ +/* A 1.5835218E-4, 4.7968065E-7, .05490/ */ +/* DATA ZCOSIS, ZSINIS, ZSINGS/ */ +/* A .91744867, .39785416, -.98088458/ */ +/* DATA ZCOSGS, ZCOSHS, ZSINHS/ */ +/* A .1945905, 1.0, 0.0/ */ +/* DATA Q22,Q31,Q33/1.7891679E-6,2.1460748E-6,2.2123015E-7/ */ +/* DATA G22,G32/5.7686396,0.95240898/ */ +/* DATA G44,G52/1.8014998,1.0508330/ */ +/* DATA G54/4.4108898/ */ +/* DATA ROOT22,ROOT32/1.7891679E-6,3.7393792E-7/ */ +/* DATA ROOT44,ROOT52/7.3636953E-9,1.1428639E-7/ */ +/* DATA ROOT54/2.1765803E-9/ */ +/* DATA THDT/4.3752691E-3/ */ + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define ZNS (1.19459E-5) +#define C1SS (2.9864797E-6) +#define ZES (.01675) +#define ZNL (1.5835218E-4) +#define C1L (4.7968065E-7) +#define ZEL (.05490) +#define ZCOSIS (.91744867) +#define ZSINIS (.39785416) +#define ZSINGS (-.98088458) +#define ZCOSGS (.1945905) +#define ZCOSHS (1.0) +#define ZSINHS (0.0) + +#define Q22 (1.7891679E-6) +#define Q31 (2.1460748E-6) +#define Q33 (2.2123015E-7) +#define G22 (5.7686396) +#define G32 (0.95240898) +#define G44 (1.8014998) +#define G52 (1.0508330) +#define G54 (4.4108898) +#define ROOT22 (1.7891679E-6) +#define ROOT32 (3.7393792E-7) +#define ROOT44 (7.3636953E-9) +#define ROOT52 (1.1428639E-7) +#define ROOT54 (2.1765803E-9) +#define THDT (4.3752691E-3) + +#define IRESFL (sat->deep->deep_flags.IRESFL) +#define ISYNFL (sat->deep->deep_flags.ISYNFL) + +#define s_SINIQ (sat->deep->deep_s_SINIQ) +#define s_COSIQ (sat->deep->deep_s_COSIQ) +#define s_OMGDT (sat->deep->deep_s_OMGDT) +#define ATIME (sat->deep->deep_ATIME) +#define D2201 (sat->deep->deep_D2201) +#define D2211 (sat->deep->deep_D2211) +#define D3210 (sat->deep->deep_D3210) +#define D3222 (sat->deep->deep_D3222) +#define D4410 (sat->deep->deep_D4410) +#define D4422 (sat->deep->deep_D4422) +#define D5220 (sat->deep->deep_D5220) +#define D5232 (sat->deep->deep_D5232) +#define D5421 (sat->deep->deep_D5421) +#define D5433 (sat->deep->deep_D5433) +#define DEL1 (sat->deep->deep_DEL1) +#define DEL2 (sat->deep->deep_DEL2) +#define DEL3 (sat->deep->deep_DEL3) +#define E3 (sat->deep->deep_E3) +#define EE2 (sat->deep->deep_EE2) +#define FASX2 (sat->deep->deep_FASX2) +#define FASX4 (sat->deep->deep_FASX4) +#define FASX6 (sat->deep->deep_FASX6) +#define OMEGAQ (sat->deep->deep_OMEGAQ) +#define PE (sat->deep->deep_PE) +#define PINC (sat->deep->deep_PINC) +#define PL (sat->deep->deep_PL) +#define SAVTSN (sat->deep->deep_SAVTSN) +#define SE2 (sat->deep->deep_SE2) +#define SE3 (sat->deep->deep_SE3) +#define SGH2 (sat->deep->deep_SGH2) +#define SGH3 (sat->deep->deep_SGH3) +#define SGH4 (sat->deep->deep_SGH4) +#define SGHL (sat->deep->deep_SGHL) +#define SGHS (sat->deep->deep_SGHS) +#define SH2 (sat->deep->deep_SH2) +#define SH3 (sat->deep->deep_SH3) +#define SHS (sat->deep->deep_SHS) +#define SHL (sat->deep->deep_SHL) +#define SI2 (sat->deep->deep_SI2) +#define SI3 (sat->deep->deep_SI3) +#define SL2 (sat->deep->deep_SL2) +#define SL3 (sat->deep->deep_SL3) +#define SL4 (sat->deep->deep_SL4) +#define SSE (sat->deep->deep_SSE) +#define SSG (sat->deep->deep_SSG) +#define SSH (sat->deep->deep_SSH) +#define SSI (sat->deep->deep_SSI) +#define SSL (sat->deep->deep_SSL) +#define STEP2 (sat->deep->deep_STEP2) +#define STEPN (sat->deep->deep_STEPN) +#define STEPP (sat->deep->deep_STEPP) +#define THGR (sat->deep->deep_THGR) +#define XFACT (sat->deep->deep_XFACT) +#define XGH2 (sat->deep->deep_XGH2) +#define XGH3 (sat->deep->deep_XGH3) +#define XGH4 (sat->deep->deep_XGH4) +#define XH2 (sat->deep->deep_XH2) +#define XH3 (sat->deep->deep_XH3) +#define XI2 (sat->deep->deep_XI2) +#define XI3 (sat->deep->deep_XI3) +#define XL2 (sat->deep->deep_XL2) +#define XL3 (sat->deep->deep_XL3) +#define XL4 (sat->deep->deep_XL4) +#define XLAMO (sat->deep->deep_XLAMO) +#define XLI (sat->deep->deep_XLI) +#define XNI (sat->deep->deep_XNI) +#define XNQ (sat->deep->deep_XNQ) +#define XQNCL (sat->deep->deep_XQNCL) +#define ZMOL (sat->deep->deep_ZMOL) +#define ZMOS (sat->deep->deep_ZMOS) + +/* * ENTRANCE FOR DEEP SPACE INITIALIZATION */ + +/* ENTRY DPINIT(EQSQ,SINIQ,COSIQ,RTEQSQ,AO,COSQ2,SINOMO,COSOMO, */ +/* 1 BSQ,XLLDOT,OMGDT,XNODOT,XNODP) */ + +void +dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ, + double RTEQSQ, double AO, double COSQ2, double SINOMO, + double COSOMO, double BSQ, double XLLDOT, double OMGDT, + double XNODOT, double XNODP) +{ + double A1, A10, A2, A3, A4, A5, A6, A7, A8, A9, AINV2, AQNV, BFACT, + C, CC, COSQ, CTEM, DAY, DS50, EOC, EQ, F220, F221, F311, F321, F322, + F330, F441, F442, F522, F523, F542, F543, G200, G201, G211, G300, + G310, G322, G410, G422, G520, G521, G532, G533, GAM, PREEP, S1, S2, + S3, S4, S5, S6, S7, SE, SGH, SH, SI, SINI2, SINQ, SL, STEM, TEMP, + TEMP1, X1, X2, X3, X4, X5, X6, X7, X8, XMAO, XNO2, XNODCE, XNOI, + XPIDOT, Z1, Z11, Z12, Z13, Z2, Z21, Z22, Z23, Z3, Z31, Z32, Z33, + ZCOSG, ZCOSGL, ZCOSH, ZCOSHL, ZCOSI, ZCOSIL, ZE, ZMO, ZN, ZSING, + ZSINGL, ZSINH, ZSINHL, ZSINI, ZSINIL, ZX, ZY; + + int c; +#if 0 + A1=A10=A2=A3=A4=A5=A6=A7=A8=A9=AINV2=AQNV=BFACT = signaling_nan(); + C=CC=COSQ=CTEM=DAY=DS50=EOC=EQ=F220=F221=F311=F321=F322 = signaling_nan(); + F330=F441=F442=F522=F523=F542=F543=G200=G201=G211=G300 = signaling_nan(); + G310=G322=G410=G422=G520=G521=G532=G533=GAM=PREEP=S1=S2 = signaling_nan(); + S3=S4=S5=S6=S7=SE=SGH=SH=SI=SINI2=SINQ=SL=STEM=TEMP = signaling_nan(); + TEMP1=X1=X2=X3=X4=X5=X6=X7=X8=XMAO=XNO2=XNODCE=XNOI = signaling_nan(); + XPIDOT=Z1=Z11=Z12=Z13=Z2=Z21=Z22=Z23=Z3=Z31=Z32=Z33 = signaling_nan(); + ZCOSG=ZCOSGL=ZCOSH=ZCOSHL=ZCOSI=ZCOSIL=ZE=ZMO=ZN=ZSING = signaling_nan(); + ZSINGL=ZSINH=ZSINHL=ZSINI=ZSINIL=ZX=ZY = signaling_nan(); +#endif + if(!sat->deep) + sat->deep = (struct deep_data *) malloc(sizeof(struct deep_data)); + else + return; + + /* init_deep(sat->deep); */ + PREEP = 0.0; + + ZCOSGL = ZCOSHL = ZCOSIL = ZSINGL = ZSINHL = ZSINIL = 0.0; + + /* Save some of the arguments, for use by dpsec() and dpper() */ + s_SINIQ = SINIQ; + s_COSIQ = COSIQ; + s_OMGDT = OMGDT; + + THGR = thetag(EPOCH, &DS50); + + EQ = EO; + XNQ = XNODP; + AQNV = 1.0/AO; + XQNCL = XINCL; + XMAO = XMO; + XPIDOT = OMGDT + XNODOT; + SINQ = sin(XNODEO); + COSQ = cos(XNODEO); + OMEGAQ = OMEGAO; + + /* INITIALIZE LUNAR SOLAR TERMS */ + + DAY = DS50 + 18261.5; + + if(DAY != PREEP) { + PREEP = DAY; + XNODCE = 4.5236020 - 9.2422029E-4 * DAY; + STEM = sin(XNODCE); + CTEM = cos(XNODCE); + ZCOSIL = .91375164 - .03568096 * CTEM; + ZSINIL = sqrt(1.0 - ZCOSIL * ZCOSIL); + ZSINHL = .089683511 * STEM / ZSINIL; + ZCOSHL = sqrt(1.0 - ZSINHL * ZSINHL); + C = 4.7199672 + .22997150 * DAY; + GAM = 5.8351514 + .0019443680 * DAY; + ZMOL = fmod(C-GAM, TWOPI); + ZX = .39785416 * STEM / ZSINIL; + ZY = ZCOSHL * CTEM + 0.91744867 * ZSINHL * STEM; + ZX = actan(ZX, ZY); + ZX = GAM + ZX - XNODCE; + ZCOSGL = cos(ZX); + ZSINGL = sin(ZX); + ZMOS = 6.2565837 + .017201977 * DAY; + ZMOS = fmod(ZMOS, TWOPI); + } + + /* DO SOLAR TERMS */ + + SAVTSN = 1.0E20; + ZCOSG = ZCOSGS; + ZSING = ZSINGS; + ZCOSI = ZCOSIS; + ZSINI = ZSINIS; + ZCOSH = COSQ; + ZSINH = SINQ; + CC = C1SS; + ZN = ZNS; + ZE = ZES; + ZMO = ZMOS; + XNOI = 1.0 / XNQ; + + for(c = 0; c < 2; c++) { + A1 = ZCOSG * ZCOSH + ZSING * ZCOSI * ZSINH; + A3 = -ZSING * ZCOSH + ZCOSG * ZCOSI * ZSINH; + A7 = -ZCOSG * ZSINH + ZSING * ZCOSI * ZCOSH; + A8 = ZSING * ZSINI; + A9 = ZSING * ZSINH + ZCOSG * ZCOSI * ZCOSH; + A10 = ZCOSG * ZSINI; + A2 = COSIQ * A7 + SINIQ * A8; + A4 = COSIQ * A9 + SINIQ * A10; + A5 = - SINIQ * A7 + COSIQ * A8; + A6 = - SINIQ * A9 + COSIQ * A10; + + X1 = A1 * COSOMO + A2 * SINOMO; + X2 = A3 * COSOMO + A4 * SINOMO; + X3 = - A1 * SINOMO + A2 * COSOMO; + X4 = - A3 * SINOMO + A4 * COSOMO; + X5 = A5 * SINOMO; + X6 = A6 * SINOMO; + X7 = A5 * COSOMO; + X8 = A6 * COSOMO; + + Z31 = 12.0 * X1 * X1 -3.0 * X3 * X3; + Z32 = 24.0 * X1 * X2 -6.0 * X3 * X4; + Z33 = 12.0 * X2 * X2 -3.0 * X4 * X4; + Z1 = 3.0 * (A1 * A1 + A2 * A2) + Z31 * EQSQ; + Z2 = 6.0 * (A1 * A3 + A2 * A4) + Z32 * EQSQ; + Z3 = 3.0 * (A3 * A3 + A4 * A4) + Z33 * EQSQ; + Z11 = -6.0 * A1 * A5 + EQSQ * (-24.0 * X1 * X7 - 6.0 * X3 * X5); + + Z12 = -6.0 * (A1 * A6 + A3 * A5) + + EQSQ * (-24.0 * (X2 * X7 + X1 * X8) - 6.0 * (X3 * X6 + X4 * X5)); + + Z13 = -6.0 * A3 * A6 + EQSQ * (-24.0 * X2 * X8 - 6.0 * X4 * X6); + Z21 = 6.0 * A2 * A5 + EQSQ * (24.0 * X1 * X5 - 6.0 * X3 * X7); + + Z22 = 6.0 * (A4 * A5 + A2 * A6) + + EQSQ * (24.0 * (X2 * X5 + X1 * X6) - 6.0 * (X4 * X7 + X3 * X8)); + + Z23 = 6.0 * A4 * A6 + EQSQ * (24.0 * X2 * X6 - 6.0 * X4 * X8); + Z1 = Z1 + Z1 + BSQ * Z31; + Z2 = Z2 + Z2 + BSQ * Z32; + Z3 = Z3 + Z3 + BSQ * Z33; + S3 = CC * XNOI; + S2 = -.5 * S3 / RTEQSQ; + S4 = S3 * RTEQSQ; + S1 = -15.0 * EQ * S4; + S5 = X1 * X3 + X2 * X4; + S6 = X2 * X3 + X1 * X4; + S7 = X2 * X4 - X1 * X3; + SE = S1 * ZN * S5; + SI = S2 * ZN * (Z11 + Z13); + SL = -ZN * S3 * (Z1 + Z3 - 14.0 - 6.0 * EQSQ); + SGH = S4 * ZN * (Z31 + Z33 - 6.0); + SH = -ZN * S2 * (Z21 + Z23); + + if(XQNCL < 5.2359877E-2) + SH = 0.0; + + EE2 = 2.0 * S1 * S6; + E3 = 2.0 * S1 * S7; + XI2 = 2.0 * S2 * Z12; + XI3 = 2.0 * S2 * (Z13 - Z11); + XL2 = -2.0 * S3 * Z2; + XL3 = -2.0 * S3 * (Z3 - Z1); + XL4 = -2.0 * S3 * (-21.0 - 9.0 * EQSQ) * ZE; + XGH2 = 2.0 * S4 * Z32; + XGH3 = 2.0 * S4 * (Z33 - Z31); + XGH4 = -18.0 * S4 * ZE; + XH2 = -2.0 * S2 * Z22; + XH3 = -2.0 * S2 * (Z23 - Z21); + + if(c == 0) { + /* DO LUNAR TERMS */ + SSE = SE; + SSI = SI; + SSL = SL; + SSH = SH / SINIQ; + SSG = SGH - COSIQ * SSH; + SE2 = EE2; + SI2 = XI2; + SL2 = XL2; + SGH2 = XGH2; + SH2 = XH2; + SE3 = E3; + SI3 = XI3; + SL3 = XL3; + SGH3 = XGH3; + SH3 = XH3; + SL4 = XL4; + SGH4 = XGH4; + + ZCOSG = ZCOSGL; + ZSING = ZSINGL; + ZCOSI = ZCOSIL; + ZSINI = ZSINIL; + ZCOSH = ZCOSHL * COSQ + ZSINHL * SINQ; + ZSINH = SINQ * ZCOSHL - COSQ * ZSINHL; + ZN = ZNL; + CC = C1L; + ZE = ZEL; + ZMO = ZMOL; + } + } + + SSE = SSE + SE; + SSI = SSI + SI; + SSL = SSL + SL; + SSG = SSG + SGH - COSIQ / SINIQ * SH; + SSH = SSH + SH / SINIQ; + + /* GEOPOTENTIAL RESONANCE INITIALIZATION FOR 12 HOUR ORBITS */ + + IRESFL = 0; + ISYNFL = 0; + + if(XNQ <= .0034906585 || XNQ >= .0052359877) { + + if(XNQ < (8.26E-3) || XNQ > (9.24E-3)) + return; + + if(EQ < 0.5) + return; + + IRESFL = 1; + EOC = EQ * EQSQ; + G201 = -.306 - (EQ - .64) * .440; + + if(EQ <= (.65)) { + G211 = 3.616 - 13.247 * EQ + 16.290 * EQSQ; + G310 = -19.302 + 117.390 * EQ - 228.419 * EQSQ + 156.591 * EOC; + G322 = -18.9068 + 109.7927 * EQ - 214.6334 * EQSQ + 146.5816 * EOC; + G410 = -41.122 + 242.694 * EQ - 471.094 * EQSQ + 313.953 * EOC; + G422 = -146.407 + 841.880 * EQ - 1629.014 * EQSQ + 1083.435 * EOC; + G520 = -532.114 + 3017.977 * EQ - 5740 * EQSQ + 3708.276 * EOC; + } else { + G211 = -72.099 + 331.819 * EQ - 508.738 * EQSQ + 266.724 * EOC; + G310 = -346.844 + 1582.851 * EQ - 2415.925 * EQSQ + 1246.113 * EOC; + G322 = -342.585 + 1554.908 * EQ - 2366.899 * EQSQ + 1215.972 * EOC; + G410 = -1052.797 + 4758.686 * EQ - 7193.992 * EQSQ + + 3651.957 * EOC; + G422 = -3581.69 + 16178.11 * EQ - 24462.77 * EQSQ + 12422.52 * EOC; + + if(EQ > (.715)) + G520 = -5149.66 + 29936.92 * EQ - 54087.36 * EQSQ + + 31324.56 * EOC; + + G520 = 1464.74 - 4664.75 * EQ + 3763.64 * EQSQ; + } + + if(EQ < (.7)) { + G533 = -919.2277 + 4988.61 * EQ - 9064.77 * EQSQ + 5542.21 * EOC; + + G521 = -822.71072 + 4568.6173 * EQ - 8491.4146 * EQSQ + + 5337.524 * EOC; + + G532 = -853.666 + 4690.25 * EQ - 8624.77 * EQSQ + 5341.4 * EOC; + } else { + G533 = -37995.78 + 161616.52 * EQ - 229838.2 * EQSQ + + 109377.94 * EOC; + + G521 = -51752.104 + 218913.95 * EQ - 309468.16 * EQSQ + + 146349.42 * EOC; + + G532 = -40023.88 + 170470.89 * EQ - 242699.48 * EQSQ + + 115605.82 * EOC; + } + + SINI2 = SINIQ * SINIQ; + F220 = .75 * (1.0 + 2.0 * COSIQ + COSQ2); + F221 = 1.5 * SINI2; + F321 = 1.875 * SINIQ * (1.0 - 2.0 * COSIQ - 3.0 * COSQ2); + F322 = -1.875 * SINIQ * (1.0 + 2.0 * COSIQ - 3.0 * COSQ2); + F441 = 35.0 * SINI2 * F220; + F442 = 39.3750 * SINI2 * SINI2; + + F522 = 9.84375 * SINIQ * (SINI2 * (1.0 - 2.0 * COSIQ - 5.0 * COSQ2) + + .33333333 * (-2.0 + 4.0 * COSIQ + + 6.0 * COSQ2)); + + F523 = SINIQ * (4.92187512 * SINI2 * (-2.0 - 4.0 * COSIQ + + 10.0 * COSQ2) + + 6.56250012 * (1.0 + + 2.0 * COSIQ - + 3.0 * COSQ2)); + + F542 = 29.53125 * SINIQ * (2.0 - 8.0 * COSIQ + + COSQ2 * (-12.0 + 8.0 * COSIQ + + 10.0 * COSQ2)); + + F543 = 29.53125 * SINIQ * (-2.0 - 8.0 * COSIQ + + COSQ2 * (12.0 + 8.0 * COSIQ - + 10.0 * COSQ2)); + + XNO2 = XNQ * XNQ; + AINV2 = AQNV * AQNV; + TEMP1 = 3.0 * XNO2 * AINV2; + TEMP = TEMP1 * ROOT22; + D2201 = TEMP * F220 * G201; + D2211 = TEMP * F221 * G211; + TEMP1 = TEMP1 * AQNV; + TEMP = TEMP1 * ROOT32; + D3210 = TEMP * F321 * G310; + D3222 = TEMP * F322 * G322; + TEMP1 = TEMP1 * AQNV; + TEMP = 2.0 * TEMP1 * ROOT44; + D4410 = TEMP * F441 * G410; + D4422 = TEMP * F442 * G422; + TEMP1 = TEMP1 * AQNV; + TEMP = TEMP1 * ROOT52; + D5220 = TEMP * F522 * G520; + D5232 = TEMP * F523 * G532; + TEMP = 2.0 * TEMP1 * ROOT54; + D5421 = TEMP * F542* G521; + D5433 = TEMP * F543* G533; + XLAMO = XMAO + XNODEO + XNODEO - THGR - THGR; + BFACT = XLLDOT + XNODOT + XNODOT - THDT - THDT; + BFACT = BFACT + SSL + SSH + SSH; + } else { + /* SYNCHRONOUS RESONANCE TERMS INITIALIZATION */ + + IRESFL = 1; + ISYNFL = 1; + G200 = 1.0 + EQSQ * (-2.5 + .8125 * EQSQ); + G310 = 1.0 + 2.0 * EQSQ; + G300 = 1.0 + EQSQ * (-6.0 + 6.60937 * EQSQ); + F220 = .75 * (1.0 + COSIQ) * (1.0 + COSIQ); + F311 = .9375 * SINIQ * SINIQ * (1.0 + 3.0 * COSIQ) - + .75 * (1.0 + COSIQ); + F330 = 1.0 + COSIQ; + F330 = 1.875 * F330 * F330 * F330; + DEL1 = 3.0 * XNQ * XNQ * AQNV * AQNV; + DEL2 = 2.0 * DEL1 * F220 * G200 * Q22; + DEL3 = 3.0 * DEL1 * F330 * G300 * Q33 * AQNV; + DEL1 = DEL1 * F311 * G310 * Q31 * AQNV; + FASX2 = .13130908; + FASX4 = 2.8843198; + FASX6 = .37448087; + XLAMO = XMAO + XNODEO + OMEGAO - THGR; + BFACT = XLLDOT + XPIDOT - THDT; + BFACT = BFACT + SSL + SSG + SSH; + + } + + XFACT = BFACT - XNQ; + + XLI = XLAMO; + XNI = XNQ; + ATIME = 0.0; + STEPP = 720.0; + STEPN = -720.0; + STEP2 = 259200.0; +} + +/* ENTRANCE FOR DEEP SPACE SECULAR EFFECTS */ + +void +dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES, + double *EM, double *XINC, double *XN, double T) +{ + double DELT, XL, TEMP, XOMI, X2OMI, X2LI, XLDOT; + double XNDOT, XNDDT, FT; + int state, iret, iretn, done; + + DELT = XLDOT = XNDOT = XNDDT = FT = 0.0; + iret = iretn = 0; + +#if 0 + DELT = XL = TEMP = XOMI = X2OMI = X2LI = XLDOT = signaling_nan(); + XNDOT = XNDDT = FT = signaling_nan(); +#endif + + *XLL = *XLL + SSL * T; + *OMGASM = *OMGASM + SSG * T; + *XNODES = *XNODES + SSH * T; + *EM = EO + SSE * T; + *XINC = XINCL + SSI * T; + + if(*XINC < 0.0) { + *XINC = -*XINC; + *XNODES = *XNODES + PI; + *OMGASM = *OMGASM - PI; + } + + if(IRESFL == 0) + return; + + state = 1; + done = 0; + while(!done) { + /* printf("state = %d\n", state); */ + switch(state) { + case 1: + /* + * Chunk #1 + */ + if(ATIME == 0.0 || (T >= 0.0 && ATIME < 0.0) || + (T < 0.0 && ATIME >= 0.0)) { + /* + * Chunk #10 + */ + if(T >= 0.0) + DELT = STEPP; + else + DELT = STEPN; + + ATIME = 0.0; + XNI = XNQ; + XLI = XLAMO; + state = 4; + break; + } + + /* Fall through */ + case 2: + /* + * Chunk #2 + */ + if(fabs(T) < fabs(ATIME)) { + /* + * Chunk #2 + */ + if(T >= 0.0) + DELT = STEPN; + else + DELT = STEPP; + + iret = 1; + state = 8; + break; + } + + /* + * Chunk #3 + */ + if(T > 0.0) + DELT = STEPP; + else + DELT = STEPN; + + /* fall through */ + case 4: + /* + * Chunk #4 + */ + if(fabs(T - ATIME) >= STEPP) { + iret = 4; + state = 8; + } else { + /* + * Chunk #5 + */ + FT = T - ATIME; + iretn = 6; + state = 7; + } + + break; + + case 6: + /* + * Chunk #6 + */ + *XN = XNI + XNDOT * FT + XNDDT * FT * FT * 0.5; + XL = XLI + XLDOT * FT + XNDOT * FT * FT * 0.5; + TEMP = -*XNODES + THGR + T * THDT; + + if(ISYNFL == 0) + *XLL = XL + 2.0 * TEMP; + else + *XLL = XL - *OMGASM + TEMP; + + done = 1; + break; + + case 7: + /* DOT TERMS CALCULATED */ + + /* + * Chunk #7 + */ + if(ISYNFL != 0) { + XNDOT = + DEL1 * sin(XLI - FASX2) + + DEL2 * sin(2.0 * (XLI - FASX4)) + + DEL3 * sin(3.0 * (XLI - FASX6)); + + XNDDT = + DEL1 * cos(XLI - FASX2) + + 2.0 * DEL2 * cos(2.0 * (XLI - FASX4)) + + 3.0 * DEL3 * cos(3.0 * (XLI - FASX6)); + } else { + XOMI = OMEGAQ + s_OMGDT * ATIME; + X2OMI = XOMI + XOMI; + X2LI = XLI + XLI; + XNDOT = D2201 * sin(X2OMI + XLI - G22) + + D2211 * sin(XLI - G22) + + D3210 * sin(XOMI + XLI - G32) + + D3222 * sin(- XOMI + XLI - G32) + + D4410 * sin(X2OMI + X2LI - G44) + + D4422 * sin(X2LI - G44) + + D5220 * sin(XOMI + XLI - G52) + + D5232 * sin(- XOMI + XLI - G52) + + D5421 * sin(XOMI + X2LI - G54) + + D5433 * sin(- XOMI + X2LI - G54); + + XNDDT = D2201 * cos(X2OMI + XLI - G22) + + D2211 * cos(XLI - G22) + + D3210 * cos(XOMI + XLI - G32) + + D3222 * cos(- XOMI + XLI - G32) + + D5220 * cos(XOMI + XLI - G52) + + D5232 * cos(- XOMI + XLI - G52) + + 2.*(D4410 * cos(X2OMI + X2LI - G44) + + D4422 * cos(X2LI - G44) + + D5421 * cos(XOMI + X2LI - G54) + + D5433 * cos(- XOMI + X2LI - G54)); + } + + XLDOT = XNI + XFACT; + XNDDT = XNDDT * XLDOT; + + state = iretn; + break; + + case 8: + /* + * Chunk #8 + */ + + /* INTEGRATOR */ + iretn = 9; + state = 7; + break; + + case 9: + XLI = XLI + XLDOT * DELT + XNDOT * STEP2; + XNI = XNI + XNDOT * DELT + XNDDT * STEP2; + ATIME = ATIME + DELT; + + state = iret; + break; + } + } +} + +/* local */ + +/* C */ +/* C ENTRANCES FOR LUNAR-SOLAR PERIODICS */ +/* C */ +/* C */ +/* ENTRY DPPER(EM,XINC,OMGASM,XNODES,XLL) */ +void +dpper(SatData *sat, double *EM, double *XINC, double *OMGASM, + double *XNODES, double *XLL, double T) +{ + double SINIS, COSIS, ZM, ZF, SINZF, F2, F3, SES, SIS, SLS, SEL, SIL, SLL, PGH, PH, SINOK, COSOK, ALFDP, BETDP, DALF, DBET, XLS, DLS; + +#if 0 + SINIS = COSIS = ZM = ZF = SINZF = F2 = F3 = SES = SIS = signaling_nan(); + SLS = SEL = SIL = SLL = PGH = signaling_nan(); + PH = SINOK = COSOK = ALFDP = BETDP = DALF = DBET = XLS = signaling_nan(); + DLS = signaling_nan();; +#endif + SINIS = sin(*XINC); + COSIS = cos(*XINC); + + +/* IF (DABS(SAVTSN-T).LT.(30.D0)) GO TO 210 */ + if(fabs(SAVTSN - T) >= (30.0)) { + SAVTSN = T; + ZM = ZMOS + ZNS * T; +/* 205 ZF = ZM + 2.0 * ZES * sin(ZM) */ + ZF = ZM + 2.0 * ZES * sin(ZM); + SINZF = sin(ZF); + F2 = .5 * SINZF * SINZF - .25; + F3 = -.5 * SINZF * cos(ZF); + SES = SE2 * F2 + SE3 * F3; + SIS = SI2 * F2 + SI3 * F3; + SLS = SL2 * F2 + SL3 * F3 + SL4 * SINZF; + SGHS = SGH2 * F2 + SGH3 * F3 + SGH4 * SINZF; + SHS = SH2 * F2 + SH3 * F3; + ZM = ZMOL + ZNL * T; + ZF = ZM + 2.0 * ZEL * sin(ZM); + SINZF = sin(ZF); + F2 = .5 * SINZF * SINZF -.25; + F3 = -.5 * SINZF * cos(ZF); + SEL = EE2 * F2 + E3 * F3; + SIL = XI2 * F2 + XI3 * F3; + SLL = XL2 * F2 + XL3 * F3 + XL4 * SINZF; + SGHL = XGH2 * F2 + XGH3 * F3 + XGH4 * SINZF; + SHL = XH2 * F2 + XH3 * F3; + PE = SES + SEL; + PINC = SIS + SIL; + PL = SLS + SLL; + } + +/* 210 PGH=SGHS+SGHL */ + PGH = SGHS + SGHL; + PH = SHS + SHL; + *XINC = *XINC + PINC; + *EM = *EM + PE; + +/* IF(XQNCL.LT.(.2)) GO TO 220 */ + if(XQNCL >= (.2)) { +/* GO TO 218 */ +/* C */ +/* C APPLY PERIODICS DIRECTLY */ +/* C */ +/* 218 PH=PH/SINIQ */ + PH = PH / s_SINIQ; + PGH = PGH - s_COSIQ * PH; + *OMGASM = *OMGASM + PGH; + *XNODES = *XNODES + PH; + *XLL = *XLL + PL; +/* GO TO 230 */ + } else { +/* C */ +/* C APPLY PERIODICS WITH LYDDANE MODIFICATION */ +/* C */ +/* 220 SINOK=sin(XNODES) */ + SINOK = sin(*XNODES); + COSOK = cos(*XNODES); + ALFDP = SINIS * SINOK; + BETDP = SINIS * COSOK; + DALF = PH * COSOK + PINC * COSIS * SINOK; + DBET = -PH * SINOK + PINC * COSIS * COSOK; + ALFDP = ALFDP + DALF; + BETDP = BETDP + DBET; + XLS = *XLL + *OMGASM + COSIS * *XNODES; + DLS = PL + PGH - PINC * *XNODES * SINIS; + XLS = XLS + DLS; + *XNODES = actan(ALFDP, BETDP); + *XLL = *XLL + PL; + *OMGASM = XLS - *XLL - cos(*XINC) * *XNODES; + } +/* 230 CONTINUE */ +/* RETURN */ + +} +/* END */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: deep.c,v $ $Date: 2000/09/25 19:43:03 $ $Revision: 1.2 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/deepconst.h b/Common/Libraries/XEphemAstroLib/src/deepconst.h new file mode 100644 index 0000000000000000000000000000000000000000..8c715676a69353af1d59bdffda74d1e04d039d06 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/deepconst.h @@ -0,0 +1,34 @@ +#ifndef _CONST_H +#define _CONST_H + +/* $Id: deepconst.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + + +#define GE (3.986005E14) + +#define PI (3.1415926535897932385) + +#define XKE (7.43669161E-2) +#define CK2 (5.413080E-4) +#define CK4 (6.2098875E-7) +#define E6A (10E6) +#define QOMS2T (1.88027916E-9) +#define S (1.01222928) +#define TOTHRD (2.0/3.0) /* 6.6666666666666666667E-1 */ +#define XJ3 (-2.53881E-6) +/* #define XKE KE */ +#define XKMPER (6378.135) +#define XMNPDA (1440.0) +#define AE (1.0) +#define DE2RA (1.7453292519943295769E-2) +#define PIO2 (1.57079632679489661925) /* PI/2 */ +#define TWOPI (6.2831853071795864770) +#define X3PIO2 (4.7123889803846898578) /* 3*PI/2 */ + +#define RHO (0.15696590235) + +#endif /* _CONST_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: deepconst.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/deltat.c b/Common/Libraries/XEphemAstroLib/src/deltat.c new file mode 100644 index 0000000000000000000000000000000000000000..fb92df72668f0e5c4282553acdc229133bd37490 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/deltat.c @@ -0,0 +1,334 @@ +/* DeltaT = Ephemeris Time - Universal Time + * + * Adapted 2011/4/14 from Stephen Moshier , + * cosmetic changes only. + * + * Compile as follows to create stand-alone test program: + * cc -DTEST_MAIN deltat.c libastro.a + * + * Tabulated values of deltaT, in hundredths of a second, are + * from The Astronomical Almanac and current IERS reports. + * A table of values for the pre-telescopic period was taken from + * Morrison and Stephenson (2004). The overall tabulated range is + * -1000.0 through 2011.0. Values at intermediate times are interpolated + * from the tables. + * + * For dates earlier and later than the tabulated range, the program + * calculates a polynomial extrapolation formula. + * + * Updated deltaT predictions can be obtained from this network archive, + * http://maia.usno.navy.mil + * then appended to the dt[] table and update TABEND. + * + * Input is XEphem's MJD, output is ET-UT in seconds. + * + * + * References: + * + * Morrison, L. V., and F. R. Stephenson, Historical values of the Earth's + * clock error deltat T and the calculation of eclipses. Journal for the + * History of Astronomy 35, 327-336 (2004) + * + * Stephenson, F. R., and L. V. Morrison, "Long-term changes + * in the rotation of the Earth: 700 B.C. to A.D. 1980," + * Philosophical Transactions of the Royal Society of London + * Series A 313, 47-70 (1984) + * + * Chapront-Touze, Michelle, and Jean Chapront, _Lunar Tables + * and Programs from 4000 B.C. to A.D. 8000_, Willmann-Bell 1991 + * + * Stephenson, F. R., and M. A. Houlden, _Atlas of Historical + * Eclipse Maps_, Cambridge U. Press (1986) + * + */ + +#include + +#include "astro.h" + +#define TABSTART 1620 +#define TABEND 2011 +#define TABSIZ (TABEND - TABSTART + 1) + +/* Morrison and Stephenson (2004) + * This table covers -1000 through 1700 in 100-year steps. + * Values are in whole seconds. + * Estimated standard error at -1000 is 640 seconds; at 1600, 20 seconds. + * The first value in the table has been adjusted 28 sec for + * continuity with their long-term quadratic extrapolation formula. + * The last value in this table agrees with the AA table at 1700, + * so there is no discontinuity at either endpoint. + */ +#define MS_SIZ 28 +short m_s[MS_SIZ] = { + /* -1000 to -100 */ + 25428, 23700, 22000, 21000, 19040, 17190, 15530, 14080, 12790, 11640, + + /* 0 to 900 */ + 10580, 9600, 8640, 7680, 6700, 5710, 4740, 3810, 2960, 2200, + + /* 1000 to 1700 */ + 1570, 1090, 740, 490, 320, 200, 120, 9, +}; + + +/* Entries prior to 1955 in the following table are from + * the 1984 Astronomical Almanac and assume ndot = -26.0. + * For dates prior to 1700, the above table is used instead of this one. + */ +short dt[TABSIZ] = { + /* 1620.0 thru 1659.0 */ + 12400, 11900, 11500, 11000, 10600, 10200, 9800, 9500, 9100, 8800, + 8500, 8200, 7900, 7700, 7400, 7200, 7000, 6700, 6500, 6300, + 6200, 6000, 5800, 5700, 5500, 5400, 5300, 5100, 5000, 4900, + 4800, 4700, 4600, 4500, 4400, 4300, 4200, 4100, 4000, 3800, + + /* 1660.0 thru 1699.0 */ + 3700, 3600, 3500, 3400, 3300, 3200, 3100, 3000, 2800, 2700, + 2600, 2500, 2400, 2300, 2200, 2100, 2000, 1900, 1800, 1700, + 1600, 1500, 1400, 1400, 1300, 1200, 1200, 1100, 1100, 1000, + 1000, 1000, 900, 900, 900, 900, 900, 900, 900, 900, + + /* 1700.0 thru 1739.0 */ + 900, 900, 900, 900, 900, 900, 900, 900, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1200, 1200, 1200, 1200, 1200, 1200, + + /* 1740.0 thru 1779.0 */ + 1200, 1200, 1200, 1200, 1300, 1300, 1300, 1300, 1300, 1300, + 1300, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, 1700, 1700, 1700, 1700, 1700, + + /* 1780.0 thru 1799.0 */ + 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, + 1700, 1700, 1600, 1600, 1600, 1600, 1500, 1500, 1400, 1400, + + /* 1800.0 thru 1819.0 */ + 1370, 1340, 1310, 1290, 1270, 1260, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1240, 1230, 1220, + + /* 1820.0 thru 1859.0 */ + 1200, 1170, 1140, 1110, 1060, 1020, 960, 910, 860, 800, + 750, 700, 660, 630, 600, 580, 570, 560, 560, 560, + 570, 580, 590, 610, 620, 630, 650, 660, 680, 690, + 710, 720, 730, 740, 750, 760, 770, 770, 780, 780, + + /* 1860.0 thru 1899.0 */ + 788, 782, 754, 697, 640, 602, 541, 410, 292, 182, + 161, 10, -102, -128, -269, -324, -364, -454, -471, -511, + -540, -542, -520, -546, -546, -579, -563, -564, -580, -566, + -587, -601, -619, -664, -644, -647, -609, -576, -466, -374, + + /* 1900.0 thru 1939.0 */ + -272, -154, -2, 124, 264, 386, 537, 614, 775, 913, + 1046, 1153, 1336, 1465, 1601, 1720, 1824, 1906, 2025, 2095, + 2116, 2225, 2241, 2303, 2349, 2362, 2386, 2449, 2434, 2408, + 2402, 2400, 2387, 2395, 2386, 2393, 2373, 2392, 2396, 2402, + + /* 1940.0 thru 1979.0 */ + 2433, 2483, 2530, 2570, 2624, 2677, 2728, 2778, 2825, 2871, + 2915, 2957, 2997, 3036, 3072, 3107, 3135, 3168, 3218, 3268, + 3315, 3359, 3400, 3447, 3503, 3573, 3654, 3743, 3829, 3920, + 4018, 4117, 4223, 4337, 4449, 4548, 4646, 4752, 4853, 4959, + + /* 1980.0 thru 2011.0 */ + 5054, 5138, 5217, 5296, 5379, 5434, 5487, 5532, 5582, 5630, + 5686, 5757, 5831, 5912, 5998, 6078, 6163, 6230, 6297, 6347, + 6383, 6409, 6430, 6447, 6457, 6469, 6485, 6515, 6546, 6578, + 6607, 6632, +}; + + +/* Given MJD return DeltaT = ET - UT1 in seconds. Describes the irregularities + * of the Earth rotation rate in the ET time scale. + */ +double +deltat(double mj) +{ + static double ans, lastmj; + double Y, p, B; + int d[6]; + int i, iy, k; + + if (mj == lastmj) + return (ans); + lastmj = mj; + + mjd_year (mj, &Y); + + if( Y > TABEND ) { + /* Extrapolate future values beyond the lookup table. */ + if (Y > (TABEND + 100.0)) { + /* Morrison & Stephenson (2004) long-term curve fit. */ + B = 0.01 * (Y - 1820.0); + ans = 32.0 * B * B - 20.0; + + } else { + + double a, b, c, d, m0, m1; + + /* Cubic interpolation between last tabulated value + * and long-term curve evaluated at 100 years later. + */ + + /* Last tabulated delta T value. */ + a = 0.01 * dt[TABSIZ-1]; + /* Approximate slope in past 10 years. */ + b = 0.001 * (dt[TABSIZ-1] - dt[TABSIZ - 11]); + + /* Long-term curve 100 years hence. */ + B = 0.01 * (TABEND + 100.0 - 1820.0); + m0 = 32.0 * B*B - 20.0; + /* Its slope. */ + m1 = 0.64 * B; + + /* Solve for remaining coefficients of an interpolation polynomial + * that agrees in value and slope at both ends of the 100-year + * interval. + */ + d = 2.0e-6 * (50.0 * (m1 + b) - m0 + a); + c = 1.0e-4 * (m0 - a - 100.0 * b - 1.0e6 * d); + + /* Note, the polynomial coefficients do not depend on Y. + * A given tabulation and long-term formula + * determine the polynomial. + * Thus, for the IERS table ending at 2011.0, the coefficients are + * a = 66.32 + * b = 0.223 + * c = 0.03231376 + * d = -0.0001607784 + */ + + /* Compute polynomial value at desired time. */ + p = Y - TABEND; + ans = a + p * (b + p * (c + p * d)); + } + + return (ans); + } + + + /* Use Morrison and Stephenson (2004) prior to the year 1700. */ + if( Y < 1700.0 ) { + if (Y <= -1000.0) { + /* Morrison and Stephenson long-term fit. */ + B = 0.01 * (Y - 1820.0); + ans = 32.0 * B * B - 20.0; + + } else { + + /* Morrison and Stephenson recommend linear interpolation + * between tabulations. + */ + iy = Y; + iy = (iy + 1000) / 100; /* Integer index into the table. */ + B = -1000 + 100 * iy; /* Starting year of tabulated interval. */ + p = m_s[iy]; + ans = p + 0.01 * (Y - B) * (m_s[iy + 1] - p); + } + + return (ans); + } + + /* Besselian interpolation between tabulated values + * in the telescopic era. + * See AA page K11. + */ + + /* Index into the table. */ + p = floor(Y); + iy = (int) (p - TABSTART); + /* Zeroth order estimate is value at start of year */ + ans = dt[iy]; + k = iy + 1; + if( k >= TABSIZ ) + goto done; /* No data, can't go on. */ + + /* The fraction of tabulation interval */ + p = Y - p; + + /* First order interpolated value */ + ans += p*(dt[k] - dt[iy]); + if( (iy-1 < 0) || (iy+2 >= TABSIZ) ) + goto done; /* can't do second differences */ + + /* Make table of first differences */ + k = iy - 2; + for (i=0; i<5; i++) { + if( (k < 0) || (k+1 >= TABSIZ) ) + d[i] = 0; + else + d[i] = dt[k+1] - dt[k]; + k += 1; + } + + /* Compute second differences */ + for( i=0; i<4; i++ ) + d[i] = d[i+1] - d[i]; + B = 0.25*p*(p-1.0); + ans += B*(d[1] + d[2]); + if (iy+2 >= TABSIZ) + goto done; + + /* Compute third differences */ + for( i=0; i<3; i++ ) + d[i] = d[i+1] - d[i]; + B = 2.0*B/3.0; + ans += (p-0.5)*B*d[1]; + if ((iy-2 < 0) || (iy+3 > TABSIZ) ) + goto done; + + /* Compute fourth differences */ + for( i=0; i<2; i++ ) + d[i] = d[i+1] - d[i]; + B = 0.125*B*(p+1.0)*(p-2.0); + ans += B*(d[0] + d[1]); + + done: + + ans *= 0.01; + +#if 0 /* ndot = -26.0 assumed; no correction. */ + + /* Astronomical Almanac table is corrected by adding the expression + * -0.000091 (ndot + 26)(year-1955)^2 seconds + * to entries prior to 1955 (AA page K8), where ndot is the secular + * tidal term in the mean motion of the Moon. + * + * Entries after 1955 are referred to atomic time standards and + * are not affected by errors in Lunar or planetary theory. + */ + if( Y < 1955.0 ) + { + B = (Y - 1955.0); + #if 1 + ans += -0.000091 * (-25.8 + 26.0) * B * B; + #else + ans += -0.000091 * (-23.8946 + 26.0) * B * B; + #endif + } + +#endif /* 0 */ + + return( ans ); +} + + +#ifdef TEST_MAIN + +/* Exercise program. + */ +#include +#include + +int main(int ac, char *av[]) +{ + double ans, mj, y = atof(av[1]); + year_mjd (y, &mj); + ans = deltat(mj); + printf( "%.4lf\n", ans ); + return (0); +} +#endif diff --git a/Common/Libraries/XEphemAstroLib/src/descrip.mms b/Common/Libraries/XEphemAstroLib/src/descrip.mms new file mode 100644 index 0000000000000000000000000000000000000000..89be3eb381e24fc25d689def294b75f933fc315b --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/descrip.mms @@ -0,0 +1,92 @@ +# Makefile for the basic astronomy routines. +# The idea is to compile and archive them into libastro.a + +# compiler and flags + +# gcc +CC = cc +#CFLAGS= -O2 -ffast-math -Wall + +# solaris +# CC = cc +# CFLAGS= -O + +# AIX +# CC = xlc +# CFLAGS= -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -Aa -fast + +HS = astro.h bdl.h chap95.h deepconst.h preferences.h satlib.h satspec.h \ + sattypes.h vector.h vsop87.h + +OBJS = \ + aa_hadec.obj, \ + aberration.obj, \ + actan.obj, \ + airmass.obj, \ + anomaly.obj, \ + ap_as.obj, \ + atlas.obj, \ + auxil.obj, \ + bdl.obj, \ + chap95.obj, \ + chap95_data.obj, \ + circum.obj, \ + comet.obj, \ + constel.obj, \ + dbfmt.obj, \ + deep.obj, \ + deltat.obj, \ + earthsat.obj, \ + eq_ecl.obj, \ + eq_gal.obj, \ + formats.obj, \ + helio.obj, \ + jupmoon.obj, \ + libration.obj, \ + magdecl.obj, \ + marsmoon.obj, \ + misc.obj, \ + mjd.obj, \ + moon.obj, \ + mooncolong.obj, \ + moonnf.obj, \ + nutation.obj, \ + obliq.obj, \ + parallax.obj, \ + parallactic.obj, \ + plans.obj, \ + plmoon.obj, \ + plshadow.obj, \ + precess.obj, \ + reduce.obj, \ + refract.obj, \ + rings.obj, \ + riset.obj, \ + riset_cir.obj, \ + satmoon.obj, \ + sdp4.obj, \ + sgp4.obj, \ + sphcart.obj, \ + sun.obj, \ + thetag.obj, \ + utc_gst.obj, \ + umoon.obj, \ + twobody.obj, \ + vsop87.obj, \ + vsop87_data.obj + +libastro.olb : $(OBJS) + lib/crea $@ $(OBJS) + +#libastro.so: $(HS) $(OBJS) +# $(CC) -shared -o $@ $(OBJS) + +clean : + del *.o;* + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: descrip.mms,v $ $Date: 2005/07/27 21:28:40 $ $Revision: 1.1 $ $Name: $ diff --git a/Common/Libraries/XEphemAstroLib/src/earthsat.c b/Common/Libraries/XEphemAstroLib/src/earthsat.c new file mode 100644 index 0000000000000000000000000000000000000000..c86bea39acf18a6a03cf95bce401dccd32f42ee9 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/earthsat.c @@ -0,0 +1,792 @@ +/* this file contains routines to support Earth satellites. + * + * Orbit propagation is based on the NORAD SGP4/SDP4 code, as converted from + * the original FORTRAN to C by Magnus Backstrom. The paper "Spacetrack + * Report Number 3: Models for Propagation of NORAD Element Sets" describes + * the calculations. + * See http://www.celestrak.com/NORAD/documentation/spacetrk.pdf. + * + * A few topocentric routines are also used from the 'orbit' program which is + * Copyright (c) 1986,1987,1988,1989,1990 Robert W. Berger N3EMO + * + */ + +/* define this to use orbit's propagator +#define USE_ORBIT_PROPAGATOR + */ + +/* define this to print some stuff +#define ESAT_TRACE + */ + +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +#include "vector.h" +#include "sattypes.h" +#include "satlib.h" + + +#define ESAT_MAG 2 /* fake satellite magnitude */ + +typedef double MAT3x3[3][3]; + +static int crazyOp (Now *np, Obj *op); +static void esat_prop (Now *np, Obj *op, double *SatX, double *SatY, double + *SatZ, double *SatVX, double *SatVY, double *SatVZ); +static void GetSatelliteParams (Obj *op); +static void GetSiteParams (Now *np); +static double Kepler (double MeanAnomaly, double Eccentricity); +static void GetSubSatPoint (double SatX, double SatY, double SatZ, + double T, double *Latitude, double *Longitude, double *Height); +static void GetSatPosition (double EpochTime, double EpochRAAN, + double EpochArgPerigee, double SemiMajorAxis, double Inclination, + double Eccentricity, double RAANPrecession, double PerigeePrecession, + double T, double TrueAnomaly, double *X, double *Y, double *Z, + double *Radius, double *VX, double *VY, double *VZ); +static void GetSitPosition (double SiteLat, double SiteLong, + double SiteElevation, double CrntTime, double *SiteX, double *SiteY, + double *SiteZ, double *SiteVX, double *SiteVY, MAT3x3 SiteMatrix); +static void GetRange (double SiteX, double SiteY, double SiteZ, + double SiteVX, double SiteVY, double SatX, double SatY, double SatZ, + double SatVX, double SatVY, double SatVZ, double *Range, + double *RangeRate); +static void GetTopocentric (double SatX, double SatY, double SatZ, + double SiteX, double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *X, + double *Y, double *Z); +static void GetBearings (double SatX, double SatY, double SatZ, + double SiteX, double SiteY, double SiteZ, MAT3x3 SiteMatrix, + double *Azimuth, double *Elevation); +static int Eclipsed (double SatX, double SatY, double SatZ, + double SatRadius, double CrntTime); +static void InitOrbitRoutines (double EpochDay, int AtEod); + +#ifdef USE_ORBIT_PROPAGATOR +static void GetPrecession (double SemiMajorAxis, double Eccentricity, + double Inclination, double *RAANPrecession, double *PerigeePrecession); +#endif /* USE_ORBIT_PROPAGATOR */ + +/* stuff from orbit */ +/* char VersionStr[] = "N3EMO Orbit Simulator v3.9"; */ + +#ifdef PI2 +#undef PI2 +#endif + +#define PI2 (PI*2) + +#define MinutesPerDay (24*60.0) +#define SecondsPerDay (60*MinutesPerDay) +#define HalfSecond (0.5/SecondsPerDay) +#define EarthRadius 6378.16 /* Kilometers */ +#define C 2.997925e5 /* Kilometers/Second */ +#define RadiansPerDegree (PI/180) +#define ABS(x) ((x) < 0 ? (-(x)) : (x)) +#define SQR(x) ((x)*(x)) + +#define EarthFlat (1/298.25) /* Earth Flattening Coeff. */ +#define SiderealSolar 1.0027379093 +#define SidRate (PI2*SiderealSolar/SecondsPerDay) /* radians/second */ +#define GM 398600 /* Kilometers^3/seconds^2 */ + +#define Epsilon (RadiansPerDegree/3600) /* 1 arc second */ +#define SunRadius 695000 +#define SunSemiMajorAxis 149598845.0 /* Kilometers */ + +/* Keplerian Elements and misc. data for the satellite */ +static double EpochDay; /* time of epoch */ +static double EpochMeanAnomaly; /* Mean Anomaly at epoch */ +static long EpochOrbitNum; /* Integer orbit # of epoch */ +static double EpochRAAN; /* RAAN at epoch */ +static double epochMeanMotion; /* Revolutions/day */ +static double OrbitalDecay; /* Revolutions/day^2 */ +static double EpochArgPerigee; /* argument of perigee at epoch */ +static double Eccentricity; +static double Inclination; + +/* Site Parameters */ +static double SiteLat,SiteLong,SiteAltitude; + + +static double SidDay,SidReference; /* Date and sidereal time */ + +/* Keplerian elements for the sun */ +static double SunEpochTime,SunInclination,SunRAAN,SunEccentricity, + SunArgPerigee,SunMeanAnomaly,SunMeanMotion; + +/* values for shadow geometry */ +static double SinPenumbra,CosPenumbra; + + +/* given a Now and an Obj with info about an earth satellite in the es_* fields + * fill in the s_* sky fields describing the satellite. + * as usual, we compute the geocentric ra/dec precessed to np->n_epoch and + * compute topocentric altitude accounting for refraction. + * return 0 if all ok, else -1. + */ +int +obj_earthsat (Now *np, Obj *op) +{ + double Radius; /* From geocenter */ + double SatX,SatY,SatZ; /* In Right Ascension based system */ + double SatVX,SatVY,SatVZ; /* Kilometers/second */ + double SiteX,SiteY,SiteZ; + double SiteVX,SiteVY; + double SiteMatrix[3][3]; + double Height; + double SSPLat,SSPLong; + double Azimuth,Elevation,Range; + double RangeRate; + double dtmp; + double CrntTime; + double ra, dec; + +#ifdef ESAT_TRACE + printf ("\n"); + printf ("Name = %s\n", op->o_name); + printf ("current jd = %13.5f\n", mjd+MJD0); + printf ("current mjd = %g\n", mjd); + printf ("satellite jd = %13.5f\n", op->es_epoch+MJD0); + printf ("satellite mjd = %g\n", op->es_epoch); +#endif /* ESAT_TRACE */ + + /* xephem uses noon 12/31/1899 as 0; orbit uses midnight 1/1/1900. + * thus, xephem runs 12 hours, or 1/2 day, behind of what orbit wants. + */ + CrntTime = mjd + 0.5; + + /* extract the XEphem data forms into those used by orbit. + * (we still use some functions and names from orbit, thank you). + */ + InitOrbitRoutines(CrntTime, 1); + GetSatelliteParams(op); + GetSiteParams(np); + + /* propagate to np->n_mjd */ + esat_prop (np, op, &SatX, &SatY, &SatZ, &SatVX, &SatVY, &SatVZ); + Radius = sqrt (SatX*SatX + SatY*SatY + SatZ*SatZ); + + /* find geocentric EOD equatorial directly from xyz vector */ + dtmp = atan2 (SatY, SatX); + range (&dtmp, 2*PI); + op->s_gaera = (float) dtmp; + op->s_gaedec = (float) atan2 (SatZ, sqrt(SatX*SatX + SatY*SatY)); + + /* find topocentric from site location */ + GetSitPosition(SiteLat,SiteLong,SiteAltitude,CrntTime, + &SiteX,&SiteY,&SiteZ,&SiteVX,&SiteVY,SiteMatrix); + GetBearings(SatX,SatY,SatZ,SiteX,SiteY,SiteZ,SiteMatrix, + &Azimuth,&Elevation); + + op->s_az = Azimuth; + refract (pressure, temp, Elevation, &dtmp); + op->s_alt = dtmp; + + /* Range: line-of-site distance to satellite, m + * RangeRate: m/s + */ + GetRange(SiteX,SiteY,SiteZ,SiteVX,SiteVY, + SatX,SatY,SatZ,SatVX,SatVY,SatVZ,&Range,&RangeRate); + + op->s_range = (float)(Range*1000); /* we want m */ + op->s_rangev = (float)(RangeRate*1000); /* we want m/s */ + + /* SSPLat: sub-satellite latitude, rads + * SSPLong: sub-satellite longitude, >0 west, rads + * Height: height of satellite above ground, m + */ + GetSubSatPoint(SatX,SatY,SatZ,CrntTime, + &SSPLat,&SSPLong,&Height); + + op->s_elev = (float)(Height*1000); /* we want m */ + op->s_sublat = (float)SSPLat; + op->s_sublng = (float)(-SSPLong); /* we want +E */ + + op->s_eclipsed = Eclipsed(SatX,SatY,SatZ,Radius,CrntTime); + +#ifdef ESAT_TRACE + printf ("CrntTime = %g\n", CrntTime); + printf ("SatX = %g\n", SatX); + printf ("SatY = %g\n", SatY); + printf ("SatZ = %g\n", SatZ); + printf ("Radius = %g\n", Radius); + printf ("SatVX = %g\n", SatVX); + printf ("SatVY = %g\n", SatVY); + printf ("SatVZ = %g\n", SatVZ); + printf ("SiteX = %g\n", SiteX); + printf ("SiteY = %g\n", SiteY); + printf ("SiteZ = %g\n", SiteZ); + printf ("SiteVX = %g\n", SiteVX); + printf ("SiteVY = %g\n", SiteVY); + printf ("Height = %g\n", Height); + printf ("SSPLat = %g\n", SSPLat); + printf ("SSPLong = %g\n", SSPLong); + printf ("Azimuth = %g\n", Azimuth); + printf ("Elevation = %g\n", Elevation); + printf ("Range = %g\n", Range); + printf ("RangeRate = %g\n", RangeRate); + fflush (stdout); +#endif /* ESAT_TRACE */ + + /* find s_ra/dec, depending on current options. */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + double ha, lst; + aa_hadec (lat, Elevation, (double)op->s_az, &ha, &dec); + now_lst (np, &lst); + ra = hrrad(lst) - ha; + range (&ra, 2*PI); + } else { + ra = op->s_gaera; + dec = op->s_gaedec; + } + if (epoch != EOD) + precess (mjd, epoch, &ra, &dec); + op->s_ra = (float)ra; + op->s_dec = (float)dec; + + /* just make up a size and brightness */ + set_smag (op, ESAT_MAG); + op->s_size = (float)0; + + return (0); +} + +/* find position and velocity vector for given Obj at the given time. + * set USE_ORBIT_PROPAGATOR depending on desired propagator to use. + */ +static void +esat_prop (Now *np, Obj *op, double *SatX, double *SatY, double *SatZ, +double *SatVX, double *SatVY, double *SatVZ) +{ +#ifdef USE_ORBIT_PROPAGATOR + double ReferenceOrbit; /* Floating point orbit # at epoch */ + double CurrentOrbit; + long OrbitNum; + double RAANPrecession,PerigeePrecession; + double MeanAnomaly,TrueAnomaly; + double SemiMajorAxis; + double AverageMotion, /* Corrected for drag */ + CurrentMotion; + double Radius; + double CrntTime; + + if (crazyOp (np, op)) { + *SatX = *SatY = *SatZ = *SatVX = *SatVY = *SatVZ = 0; + return; + } + + SemiMajorAxis = 331.25 * exp(2*log(MinutesPerDay/epochMeanMotion)/3); + GetPrecession(SemiMajorAxis,Eccentricity,Inclination,&RAANPrecession, + &PerigeePrecession); + + ReferenceOrbit = EpochMeanAnomaly/PI2 + EpochOrbitNum; + + CrntTime = mjd + 0.5; + AverageMotion = epochMeanMotion + (CrntTime-EpochDay)*OrbitalDecay/2; + CurrentMotion = epochMeanMotion + (CrntTime-EpochDay)*OrbitalDecay; + + SemiMajorAxis = 331.25 * exp(2*log(MinutesPerDay/CurrentMotion)/3); + + CurrentOrbit = ReferenceOrbit + (CrntTime-EpochDay)*AverageMotion; + + OrbitNum = CurrentOrbit; + + MeanAnomaly = (CurrentOrbit-OrbitNum)*PI2; + + TrueAnomaly = Kepler(MeanAnomaly,Eccentricity); + + GetSatPosition(EpochDay,EpochRAAN,EpochArgPerigee,SemiMajorAxis, + Inclination,Eccentricity,RAANPrecession,PerigeePrecession, + CrntTime,TrueAnomaly,SatX,SatY,SatZ,&Radius,SatVX,SatVY,SatVZ); + +#ifdef ESAT_TRACE + printf ("O Radius = %g\n", Radius); + printf ("ReferenceOrbit = %g\n", ReferenceOrbit); + printf ("CurrentOrbit = %g\n", CurrentOrbit); + printf ("RAANPrecession = %g\n", RAANPrecession); + printf ("PerigeePrecession = %g\n", PerigeePrecession); + printf ("MeanAnomaly = %g\n", MeanAnomaly); + printf ("TrueAnomaly = %g\n", TrueAnomaly); + printf ("SemiMajorAxis = %g\n", SemiMajorAxis); + printf ("AverageMotion = %g\n", AverageMotion); + printf ("CurrentMotion = %g\n", CurrentMotion); +#endif /* ESAT_TRACE */ + +#else /* ! USE_ORBIT_PROPAGATOR */ +#define MPD 1440.0 /* minutes per day */ + + SatElem se; + SatData sd; + Vec3 posvec, velvec; + double dy; + double dt; + int yr; + + if (crazyOp (np, op)) { + *SatX = *SatY = *SatZ = *SatVX = *SatVY = *SatVZ = 0; + return; + } + + /* init */ + memset ((void *)&se, 0, sizeof(se)); + memset ((void *)&sd, 0, sizeof(sd)); + sd.elem = &se; + + /* se_EPOCH is packed as yr*1000 + dy, where yr is years since 1900 + * and dy is day of year, Jan 1 being 1 + */ + mjd_dayno (op->es_epoch, &yr, &dy); + yr -= 1900; + dy += 1; + se.se_EPOCH = yr*1000 + dy; + + /* others carry over with some change in units */ + se.se_XNO = op->es_n * (2*PI/MPD); /* revs/day to rads/min */ + se.se_XINCL = (float)degrad(op->es_inc); + se.se_XNODEO = (float)degrad(op->es_raan); + se.se_EO = op->es_e; + se.se_OMEGAO = (float)degrad(op->es_ap); + se.se_XMO = (float)degrad(op->es_M); + se.se_BSTAR = op->es_drag; + se.se_XNDT20 = op->es_decay*(2*PI/MPD/MPD); /*rv/dy^^2 to rad/min^^2*/ + + se.se_id.orbit = op->es_orbit; + + dt = (mjd-op->es_epoch)*MPD; + +#ifdef ESAT_TRACE + printf ("se_EPOCH : %30.20f\n", se.se_EPOCH); + printf ("se_XNO : %30.20f\n", se.se_XNO); + printf ("se_XINCL : %30.20f\n", se.se_XINCL); + printf ("se_XNODEO : %30.20f\n", se.se_XNODEO); + printf ("se_EO : %30.20f\n", se.se_EO); + printf ("se_OMEGAO : %30.20f\n", se.se_OMEGAO); + printf ("se_XMO : %30.20f\n", se.se_XMO); + printf ("se_BSTAR : %30.20f\n", se.se_BSTAR); + printf ("se_XNDT20 : %30.20f\n", se.se_XNDT20); + printf ("se_orbit : %30d\n", se.se_id.orbit); + printf ("dt : %30.20f\n", dt); +#endif /* ESAT_TRACE */ + + /* compute the state vectors */ + if (se.se_XNO >= (1.0/225.0)) + sgp4(&sd, &posvec, &velvec, dt); /* NEO */ + else + sdp4(&sd, &posvec, &velvec, dt); /* GEO */ + if (sd.prop.sgp4) + free (sd.prop.sgp4); /* sd.prop.sdp4 is in same union */ + if (sd.deep) + free (sd.deep); + + /* earth radii to km */ + *SatX = (ERAD/1000)*posvec.x; + *SatY = (ERAD/1000)*posvec.y; + *SatZ = (ERAD/1000)*posvec.z; + /* Minutes per day/Seconds by day = Minutes/Second = 1/60 */ + *SatVX = (ERAD*velvec.x)/(1000*60); + *SatVY =(ERAD*velvec.y)/(1000*60); + *SatVZ = (ERAD*velvec.z)/(1000*60); + +#endif +} + +/* return 1 if op is crazy @ np */ +static int +crazyOp (Now *np, Obj *op) +{ + /* toss if more than a year old */ + return (fabs(op->es_epoch - mjd) > 365); +} + +/* grab the xephem stuff from op and copy into orbit's globals. + */ +static void +GetSatelliteParams(Obj *op) +{ + /* the following are for the orbit functions */ + /* xephem uses noon 12/31/1899 as 0; orbit uses midnight 1/1/1900 as 1. + * thus, xephem runs 12 hours, or 1/2 day, behind of what orbit wants. + */ + EpochDay = op->es_epoch + 0.5; + + /* xephem stores inc in degrees; orbit wants rads */ + Inclination = degrad(op->es_inc); + + /* xephem stores RAAN in degrees; orbit wants rads */ + EpochRAAN = degrad(op->es_raan); + + Eccentricity = op->es_e; + + /* xephem stores arg of perigee in degrees; orbit wants rads */ + EpochArgPerigee = degrad(op->es_ap); + + /* xephem stores mean anomaly in degrees; orbit wants rads */ + EpochMeanAnomaly = degrad (op->es_M); + + epochMeanMotion = op->es_n; + + OrbitalDecay = op->es_decay; + + EpochOrbitNum = op->es_orbit; +} + + + +static void +GetSiteParams(Now *np) +{ + SiteLat = lat; + + /* xephem stores longitude as >0 east; orbit wants >0 west */ + SiteLong = 2.0*PI - lng; + + /* what orbit calls altitude xephem calls elevation and stores it from + * sea level in earth radii; orbit wants km + */ + SiteAltitude = elev*ERAD/1000.0; + + /* we don't implement a minimum horizon altitude cutoff + SiteMinElev = 0; + */ + +#ifdef ESAT_TRACE + printf ("SiteLat = %g\n", SiteLat); + printf ("SiteLong = %g\n", SiteLong); + printf ("SiteAltitude = %g\n", SiteAltitude); + fflush (stdout); +#endif +} + + +/* Solve Kepler's equation */ +/* Inputs: */ +/* MeanAnomaly Time Since last perigee, in radians. */ +/* PI2 = one complete orbit. */ +/* Eccentricity Eccentricity of orbit's ellipse. */ +/* Output: */ +/* TrueAnomaly Angle between perigee, geocenter, and */ +/* current position. */ + +static +double Kepler(double MeanAnomaly, double Eccentricity) +{ +register double E; /* Eccentric Anomaly */ +register double Error; +register double TrueAnomaly; + + E = MeanAnomaly ;/*+ Eccentricity*sin(MeanAnomaly); -- Initial guess */ + do + { + Error = (E - Eccentricity*sin(E) - MeanAnomaly) + / (1 - Eccentricity*cos(E)); + E -= Error; + } + while (ABS(Error) >= Epsilon); + + if (ABS(E-PI) < Epsilon) + TrueAnomaly = PI; + else + TrueAnomaly = 2*atan(sqrt((1+Eccentricity)/(1-Eccentricity)) + *tan(E/2)); + if (TrueAnomaly < 0) + TrueAnomaly += PI2; + + return TrueAnomaly; +} + +static void +GetSubSatPoint(double SatX, double SatY, double SatZ, double T, +double *Latitude, double *Longitude, double *Height) +{ + double r; + /* ECD: long i; */ + + r = sqrt(SQR(SatX) + SQR(SatY) + SQR(SatZ)); + + *Longitude = PI2*((T-SidDay)*SiderealSolar + SidReference) + - atan2(SatY,SatX); + + /* ECD: + * want Longitude in range -PI to PI , +W + */ + range (Longitude, 2*PI); + if (*Longitude > PI) + *Longitude -= 2*PI; + + *Latitude = atan(SatZ/sqrt(SQR(SatX) + SQR(SatY))); + +#define SSPELLIPSE +#ifdef SSPELLIPSE + /* ECD */ + *Height = r - EarthRadius*(sqrt(1-(2*EarthFlat-SQR(EarthFlat))*SQR(sin(*Latitude)))); +#else + *Height = r - EarthRadius; +#endif +} + + +#ifdef USE_ORBIT_PROPAGATOR +static void +GetPrecession(double SemiMajorAxis, double Eccentricity, double Inclination, +double *RAANPrecession, double *PerigeePrecession) +{ + *RAANPrecession = 9.95*pow(EarthRadius/SemiMajorAxis,3.5) * cos(Inclination) + / SQR(1-SQR(Eccentricity)) * RadiansPerDegree; + + *PerigeePrecession = 4.97*pow(EarthRadius/SemiMajorAxis,3.5) + * (5*SQR(cos(Inclination))-1) + / SQR(1-SQR(Eccentricity)) * RadiansPerDegree; +} +#endif /* USE_ORBIT_PROPAGATOR */ + +/* Compute the satellite postion and velocity in the RA based coordinate + * system. + * ECD: take care not to let Radius get below EarthRadius. + */ + +static void +GetSatPosition(double EpochTime, double EpochRAAN, double EpochArgPerigee, +double SemiMajorAxis, double Inclination, double Eccentricity, +double RAANPrecession, double PerigeePrecession, double T, +double TrueAnomaly, double *X, double *Y, double *Z, double *Radius, +double *VX, double *VY, double *VZ) + +{ + double RAAN,ArgPerigee; + + + double Xw,Yw,VXw,VYw; /* In orbital plane */ + double Tmp; + double Px,Qx,Py,Qy,Pz,Qz; /* Escobal transformation 31 */ + double CosArgPerigee,SinArgPerigee; + double CosRAAN,SinRAAN,CoSinclination,SinInclination; + + *Radius = SemiMajorAxis*(1-SQR(Eccentricity)) + / (1+Eccentricity*cos(TrueAnomaly)); + + if (*Radius <= EarthRadius) + *Radius = EarthRadius; + + + Xw = *Radius * cos(TrueAnomaly); + Yw = *Radius * sin(TrueAnomaly); + + Tmp = sqrt(GM/(SemiMajorAxis*(1-SQR(Eccentricity)))); + + VXw = -Tmp*sin(TrueAnomaly); + VYw = Tmp*(cos(TrueAnomaly) + Eccentricity); + + ArgPerigee = EpochArgPerigee + (T-EpochTime)*PerigeePrecession; + RAAN = EpochRAAN - (T-EpochTime)*RAANPrecession; + + CosRAAN = cos(RAAN); SinRAAN = sin(RAAN); + CosArgPerigee = cos(ArgPerigee); SinArgPerigee = sin(ArgPerigee); + CoSinclination = cos(Inclination); SinInclination = sin(Inclination); + + Px = CosArgPerigee*CosRAAN - SinArgPerigee*SinRAAN*CoSinclination; + Py = CosArgPerigee*SinRAAN + SinArgPerigee*CosRAAN*CoSinclination; + Pz = SinArgPerigee*SinInclination; + Qx = -SinArgPerigee*CosRAAN - CosArgPerigee*SinRAAN*CoSinclination; + Qy = -SinArgPerigee*SinRAAN + CosArgPerigee*CosRAAN*CoSinclination; + Qz = CosArgPerigee*SinInclination; + + *X = Px*Xw + Qx*Yw; /* Escobal, transformation #31 */ + *Y = Py*Xw + Qy*Yw; + *Z = Pz*Xw + Qz*Yw; + + *VX = Px*VXw + Qx*VYw; + *VY = Py*VXw + Qy*VYw; + *VZ = Pz*VXw + Qz*VYw; +} + +/* Compute the site postion and velocity in the RA based coordinate + system. SiteMatrix is set to a matrix which is used by GetTopoCentric + to convert geocentric coordinates to topocentric (observer-centered) + coordinates. */ + +static void +GetSitPosition(double SiteLat, double SiteLong, double SiteElevation, +double CrntTime, double *SiteX, double *SiteY, double *SiteZ, double *SiteVX, +double *SiteVY, MAT3x3 SiteMatrix) +{ + static double G1,G2; /* Used to correct for flattening of the Earth */ + static double CosLat,SinLat; + static double OldSiteLat = -100000; /* Used to avoid unneccesary recomputation */ + static double OldSiteElevation = -100000; + double Lat; + double SiteRA; /* Right Ascension of site */ + double CosRA,SinRA; + + if ((SiteLat != OldSiteLat) || (SiteElevation != OldSiteElevation)) + { + OldSiteLat = SiteLat; + OldSiteElevation = SiteElevation; + Lat = atan(1/(1-SQR(EarthFlat))*tan(SiteLat)); + + CosLat = cos(Lat); + SinLat = sin(Lat); + + G1 = EarthRadius/(sqrt(1-(2*EarthFlat-SQR(EarthFlat))*SQR(SinLat))); + G2 = G1*SQR(1-EarthFlat); + G1 += SiteElevation; + G2 += SiteElevation; + } + + + SiteRA = PI2*((CrntTime-SidDay)*SiderealSolar + SidReference) + - SiteLong; + CosRA = cos(SiteRA); + SinRA = sin(SiteRA); + + + *SiteX = G1*CosLat*CosRA; + *SiteY = G1*CosLat*SinRA; + *SiteZ = G2*SinLat; + *SiteVX = -SidRate * *SiteY; + *SiteVY = SidRate * *SiteX; + + SiteMatrix[0][0] = SinLat*CosRA; + SiteMatrix[0][1] = SinLat*SinRA; + SiteMatrix[0][2] = -CosLat; + SiteMatrix[1][0] = -SinRA; + SiteMatrix[1][1] = CosRA; + SiteMatrix[1][2] = 0.0; + SiteMatrix[2][0] = CosRA*CosLat; + SiteMatrix[2][1] = SinRA*CosLat; + SiteMatrix[2][2] = SinLat; +} + +static void +GetRange(double SiteX, double SiteY, double SiteZ, double SiteVX, +double SiteVY, double SatX, double SatY, double SatZ, double SatVX, +double SatVY, double SatVZ, double *Range, double *RangeRate) +{ + double DX,DY,DZ; + + DX = SatX - SiteX; DY = SatY - SiteY; DZ = SatZ - SiteZ; + + *Range = sqrt(SQR(DX)+SQR(DY)+SQR(DZ)); + + *RangeRate = ((SatVX-SiteVX)*DX + (SatVY-SiteVY)*DY + SatVZ*DZ) + / *Range; +} + +/* Convert from geocentric RA based coordinates to topocentric + (observer centered) coordinates */ + +static void +GetTopocentric(double SatX, double SatY, double SatZ, double SiteX, +double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *X, double *Y, +double *Z) +{ + SatX -= SiteX; + SatY -= SiteY; + SatZ -= SiteZ; + + *X = SiteMatrix[0][0]*SatX + SiteMatrix[0][1]*SatY + + SiteMatrix[0][2]*SatZ; + *Y = SiteMatrix[1][0]*SatX + SiteMatrix[1][1]*SatY + + SiteMatrix[1][2]*SatZ; + *Z = SiteMatrix[2][0]*SatX + SiteMatrix[2][1]*SatY + + SiteMatrix[2][2]*SatZ; +} + +static void +GetBearings(double SatX, double SatY, double SatZ, double SiteX, +double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *Azimuth, +double *Elevation) +{ + double x,y,z; + + GetTopocentric(SatX,SatY,SatZ,SiteX,SiteY,SiteZ,SiteMatrix,&x,&y,&z); + + *Elevation = atan(z/sqrt(SQR(x) + SQR(y))); + + *Azimuth = PI - atan2(y,x); + + if (*Azimuth < 0) + *Azimuth += PI; +} + +static int +Eclipsed(double SatX, double SatY, double SatZ, double SatRadius, +double CrntTime) +{ + double MeanAnomaly,TrueAnomaly; + double SunX,SunY,SunZ,SunRad; + double vx,vy,vz; + double CosTheta; + + MeanAnomaly = SunMeanAnomaly+ (CrntTime-SunEpochTime)*SunMeanMotion*PI2; + TrueAnomaly = Kepler(MeanAnomaly,SunEccentricity); + + GetSatPosition(SunEpochTime,SunRAAN,SunArgPerigee,SunSemiMajorAxis, + SunInclination,SunEccentricity,0.0,0.0,CrntTime, + TrueAnomaly,&SunX,&SunY,&SunZ,&SunRad,&vx,&vy,&vz); + + CosTheta = (SunX*SatX + SunY*SatY + SunZ*SatZ)/(SunRad*SatRadius) + *CosPenumbra + (SatRadius/EarthRadius)*SinPenumbra; + + if (CosTheta < 0) + if (CosTheta < -sqrt(SQR(SatRadius)-SQR(EarthRadius))/SatRadius + *CosPenumbra + (SatRadius/EarthRadius)*SinPenumbra) + + return 1; + return 0; +} + +/* Initialize the Sun's keplerian elements for a given epoch. + Formulas are from "Explanatory Supplement to the Astronomical Ephemeris". + Also init the sidereal reference */ + +static void +InitOrbitRoutines(double EpochDay, int AtEod) +{ + double T,T2,T3,Omega; + int n; + double SunTrueAnomaly,SunDistance; + + T = (floor(EpochDay)-0.5)/36525; + T2 = T*T; + T3 = T2*T; + + SidDay = floor(EpochDay); + + SidReference = (6.6460656 + 2400.051262*T + 0.00002581*T2)/24; + SidReference -= floor(SidReference); + + /* Omega is used to correct for the nutation and the abberation */ + Omega = AtEod ? (259.18 - 1934.142*T) * RadiansPerDegree : 0.0; + n = (int)(Omega / PI2); + Omega -= n*PI2; + + SunEpochTime = EpochDay; + SunRAAN = 0; + + SunInclination = (23.452294 - 0.0130125*T - 0.00000164*T2 + + 0.000000503*T3 +0.00256*cos(Omega)) * RadiansPerDegree; + SunEccentricity = (0.01675104 - 0.00004180*T - 0.000000126*T2); + SunArgPerigee = (281.220833 + 1.719175*T + 0.0004527*T2 + + 0.0000033*T3) * RadiansPerDegree; + SunMeanAnomaly = (358.475845 + 35999.04975*T - 0.00015*T2 + - 0.00000333333*T3) * RadiansPerDegree; + n = (int)(SunMeanAnomaly / PI2); + SunMeanAnomaly -= n*PI2; + + SunMeanMotion = 1/(365.24219879 - 0.00000614*T); + + SunTrueAnomaly = Kepler(SunMeanAnomaly,SunEccentricity); + SunDistance = SunSemiMajorAxis*(1-SQR(SunEccentricity)) + / (1+SunEccentricity*cos(SunTrueAnomaly)); + + SinPenumbra = (SunRadius-EarthRadius)/SunDistance; + CosPenumbra = sqrt(1-SQR(SinPenumbra)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: earthsat.c,v $ $Date: 2015/04/08 23:36:35 $ $Revision: 1.14 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/eq_ecl.c b/Common/Libraries/XEphemAstroLib/src/eq_ecl.c new file mode 100644 index 0000000000000000000000000000000000000000..14abc5e26bea781c34e58a89a7eb90c1c058402f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/eq_ecl.c @@ -0,0 +1,72 @@ +#include +#include + +#include "astro.h" + +static void ecleq_aux (int sw, double mj, double x, double y, + double *p, double *q); + +#define EQtoECL 1 +#define ECLtoEQ (-1) + + +/* given the modified Julian date, mj, and an equitorial ra and dec, each in + * radians, find the corresponding geocentric ecliptic latitude, *lt, and + * longititude, *lg, also each in radians. + * correction for the effect on the angle of the obliquity due to nutation is + * not included. + */ +void +eq_ecl (double mj, double ra, double dec, double *lt, double *lg) +{ + ecleq_aux (EQtoECL, mj, ra, dec, lg, lt); +} + +/* given the modified Julian date, mj, and a geocentric ecliptic latitude, + * *lt, and longititude, *lg, each in radians, find the corresponding + * equitorial ra and dec, also each in radians. + * correction for the effect on the angle of the obliquity due to nutation is + * not included. + */ +void +ecl_eq (double mj, double lt, double lg, double *ra, double *dec) +{ + ecleq_aux (ECLtoEQ, mj, lg, lt, ra, dec); +} + +static void +ecleq_aux ( +int sw, /* +1 for eq to ecliptic, -1 for vv. */ +double mj, +double x, double y, /* sw==1: x==ra, y==dec. sw==-1: x==lg, y==lt. */ +double *p, double *q) /* sw==1: p==lg, q==lt. sw==-1: p==ra, q==dec. */ +{ + static double lastmj = -10000; /* last mj calculated */ + static double seps, ceps; /* sin and cos of mean obliquity */ + double sx, cx, sy, cy, ty, sq; + + if (mj != lastmj) { + double eps; + obliquity (mj, &eps); /* mean obliquity for date */ + seps = sin(eps); + ceps = cos(eps); + lastmj = mj; + } + + sy = sin(y); + cy = cos(y); /* always non-negative */ + if (fabs(cy)<1e-20) cy = 1e-20; /* insure > 0 */ + ty = sy/cy; + cx = cos(x); + sx = sin(x); + sq = (sy*ceps)-(cy*seps*sx*sw); + if (sq < -1) sq = -1; + if (sq > 1) sq = 1; + *q = asin(sq); + *p = atan(((sx*ceps)+(ty*seps*sw))/cx); + if (cx<0) *p += PI; /* account for atan quad ambiguity */ + range (p, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: eq_ecl.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/eq_gal.c b/Common/Libraries/XEphemAstroLib/src/eq_gal.c new file mode 100644 index 0000000000000000000000000000000000000000..d4a5fafcfa09cffc25f505d1a5ae63d14dadb7b3 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/eq_gal.c @@ -0,0 +1,99 @@ +/* code to convert between equitorial and galactic coordinates */ + +#include +#include + +#include "astro.h" + +static void galeq_aux (int sw, double x, double y, double *p, double *q); +static void galeq_init (void); + +#define EQtoGAL 1 +#define GALtoEQ (-1) +#define SMALL (1e-20) + +static double an = degrad(32.93192); /* G lng of asc node on equator */ +static double gpr = degrad(192.85948); /* RA of North Gal Pole, 2000 */ +static double gpd = degrad(27.12825); /* Dec of " */ +static double cgpd, sgpd; /* cos() and sin() of gpd */ +static double mj2000; /* mj of 2000 */ +static int before; /* whether these have been set yet */ + +/* given ra and dec, each in radians, for the given epoch, find the + * corresponding galactic latitude, *lt, and longititude, *lg, also each in + * radians. + */ +void +eq_gal (double mj, double ra, double dec, double *lt, double *lg) +{ + galeq_init(); + precess (mj, mj2000, &ra, &dec); + galeq_aux (EQtoGAL, ra, dec, lg, lt); +} + +/* given galactic latitude, lt, and longititude, lg, each in radians, find + * the corresponding equitorial ra and dec, also each in radians, at the + * given epoch. + */ +void +gal_eq (double mj, double lt, double lg, double *ra, double *dec) +{ + galeq_init(); + galeq_aux (GALtoEQ, lg, lt, ra, dec); + precess (mj2000, mj, ra, dec); +} + +static void +galeq_aux ( +int sw, /* +1 for eq to gal, -1 for vv. */ +double x, double y, /* sw==1: x==ra, y==dec. sw==-1: x==lg, y==lt. */ +double *p, double *q) /* sw==1: p==lg, q==lt. sw==-1: p==ra, q==dec. */ +{ + double sy, cy, a, ca, sa, b, sq, c, d; + + cy = cos(y); + sy = sin(y); + a = x - an; + if (sw == EQtoGAL) + a = x - gpr; + ca = cos(a); + sa = sin(a); + b = sa; + if (sw == EQtoGAL) + b = ca; + sq = (cy*cgpd*b) + (sy*sgpd); + *q = asin (sq); + + if (sw == GALtoEQ) { + c = cy*ca; + d = (sy*cgpd) - (cy*sgpd*sa); + if (fabs(d) < SMALL) + d = SMALL; + *p = atan (c/d) + gpr; + } else { + c = sy - (sq*sgpd); + d = cy*sa*cgpd; + if (fabs(d) < SMALL) + d = SMALL; + *p = atan (c/d) + an; + } + + if (d < 0) *p += PI; + if (*p < 0) *p += 2*PI; + if (*p > 2*PI) *p -= 2*PI; +} + +/* set up the definitions */ +static void +galeq_init() +{ + if (!before) { + cgpd = cos (gpd); + sgpd = sin (gpd); + mj2000 = J2000; + before = 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: eq_gal.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/formats.c b/Common/Libraries/XEphemAstroLib/src/formats.c new file mode 100644 index 0000000000000000000000000000000000000000..f6c10538e5b976ca2db5b79ec9b6a2d779e1b1db --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/formats.c @@ -0,0 +1,212 @@ +#include +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +/* sprint the variable a in sexagesimal format into out[]. + * w is the number of spaces for the whole part. + * fracbase is the number of pieces a whole is to broken into; valid options: + * 360000: :mm:ss.ss + * 36000: :mm:ss.s + * 3600: :mm:ss + * 600: :mm.m + * 60: :mm + * return number of characters written to out, not counting final '\0'. + */ +int +fs_sexa (char *out, double a, int w, int fracbase) +{ + char *out0 = out; + unsigned long n; + int d; + int f; + int m; + int s; + int isneg; + + /* save whether it's negative but do all the rest with a positive */ + isneg = (a < 0); + if (isneg) + a = -a; + + /* convert to an integral number of whole portions */ + n = (unsigned long)(a * fracbase + 0.5); + d = n/fracbase; + f = n%fracbase; + + /* form the whole part; "negative 0" is a special case */ + if (isneg && d == 0) + out += sprintf (out, "%*s-0", w-2, ""); + else + out += sprintf (out, "%*d", w, isneg ? -d : d); + + /* do the rest */ + switch (fracbase) { + case 60: /* dd:mm */ + m = f/(fracbase/60); + out += sprintf (out, ":%02d", m); + break; + case 600: /* dd:mm.m */ + out += sprintf (out, ":%02d.%1d", f/10, f%10); + break; + case 3600: /* dd:mm:ss */ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d", m, s); + break; + case 36000: /* dd:mm:ss.s*/ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d.%1d", m, s/10, s%10); + break; + case 360000: /* dd:mm:ss.ss */ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d.%02d", m, s/100, s%100); + break; + default: + printf ("fs_sexa: unknown fracbase: %d\n", fracbase); + abort(); + } + + return (out - out0); +} + +/* put the given modified Julian date, jd, in out[] according to the given + * preference format. + * return number of characters written to out, not counting final '\0'. + */ +int +fs_date (char out[], int format, double jd) +{ + char *out0 = out; + int m, y; + double d; + + mjd_cal (jd, &m, &d, &y); + /* beware of %g rounding day up */ + if ((d < 1.0 && d - floor(d) >= .9999995) + || (d < 10.0 && d - floor(d) >= .999995) + || (d >= 10.0 && d - floor(d) >= .99995)) + mjd_cal (mjd_day(jd+0.5), &m, &d, &y); + + switch (format) { + case PREF_YMD: + out += sprintf (out, "%4d/%02d/%02.6g", y, m, d); + break; + case PREF_DMY: + out += sprintf (out, "%2.6g/%02d/%-4d", d, m, y); + break; + case PREF_MDY: + out += sprintf (out, "%2d/%02.6g/%-4d", m, d, y); + break; + default: + printf ("fs_date: bad date pref: %d\n", format); + abort(); + } + + return (out - out0); +} + + +/* convert sexagesimal string str AxBxC to double. + * x can be anything non-numeric. Any missing A, B or C will be assumed 0. + * optional - and + can be anywhere. + * return 0 if ok, -1 if can't find a thing. + */ +int +f_scansexa ( +const char *str0, /* input string */ +double *dp) /* cracked value, if return 0 */ +{ + double a, b, c; + char str[256]; + char *neg; + int isneg, r; + + /* copy str0 so we can play with it */ + strncpy (str, str0, sizeof(str)-1); + str[sizeof(str)-1] = '\0'; + + /* note first negative (but not fooled by neg exponent) */ + isneg = 0; + neg = strchr(str, '-'); + if (neg && (neg == str || (neg[-1] != 'E' && neg[-1] != 'e'))) { + *neg = ' '; + isneg = 1; + } + + /* crack up to three components */ + a = b = c = 0.0; + r = sscanf (str, "%lf%*[^0-9]%lf%*[^0-9]%lf", &a, &b, &c); + if (r < 1) + return (-1); + + /* back to one value, restoring neg */ + *dp = (c/60.0 + b)/60.0 + a; + if (isneg) + *dp *= -1; + return (0); +} + +/* crack a floating date string, bp, of the form X/Y/Z determined by the + * PREF_DATE_FORMAT preference into its components. allow the day to be a + * floating point number, + * the slashes may also be spaces or colons. + * a lone component with a decimal point is considered a year. + */ +void +f_sscandate ( +char *bp, +int pref, /* one of PREF_X for PREF_DATE_FORMAT */ +int *m, +double *d, +int *y) +{ + double X,Y,Z; /* the three components */ + int n; + + X = Y = Z = 0.0; + n = sscanf (bp, "%lf%*[/: ]%lf%*[/: ]%lf", &X, &Y, &Z); + if (n == 1 && (strchr(bp, '.') + || (pref == PREF_MDY && (X < 1 || X > 12)) + || (pref == PREF_DMY && (X < 1 || X > 31)))) { + double Mjd; + year_mjd (X, &Mjd); + mjd_cal (Mjd, m, d, y); + } else { + switch (pref) { + case PREF_MDY: + if (n > 0 && X != 0) + *m = (int)X; + if (n > 1 && Y != 0) + *d = Y; + if (n > 2 && Z != 0) + *y = (int)Z; + break; + case PREF_YMD: + if (n > 0 && X != 0) + *y = (int)X; + if (n > 1 && Y != 0) + *m = (int)Y; + if (n > 2 && Z != 0) + *d = Z; + break; + case PREF_DMY: + if (n > 0 && X != 0) + *d = X; + if (n > 1 && Y != 0) + *m = (int)Y; + if (n > 2 && Z != 0) + *y = (int)Z; + break; + } + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: formats.c,v $ $Date: 2006/04/10 09:00:06 $ $Revision: 1.17 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/helio.c b/Common/Libraries/XEphemAstroLib/src/helio.c new file mode 100644 index 0000000000000000000000000000000000000000..d0dceae1d12c4072a01772b0a29f11d833bd11c0 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/helio.c @@ -0,0 +1,51 @@ +#include +#include +#include + +#include "astro.h" + +/* given geocentric time jd and coords of a distant object at ra/dec (J2000), + * find the difference in time between light arriving at earth vs the sun. + * *hcp must be subtracted from geocentric jd to get heliocentric jd. + * From RLM Oct 12, 1995. + */ +void +heliocorr (double jd, double ra, double dec, double *hcp) +{ + double e; /* obliquity of ecliptic */ + double n; /* day number */ + double g; /* solar mean anomaly */ + double L; /* solar ecliptic longitude */ + double l; /* mean solar ecliptic longitude */ + double R; /* sun distance, AU */ + double X, Y; /* equatorial rectangular solar coords */ + double cdec, sdec; + double cra, sra; + + /* following algorithm really wants EOD */ + precess (J2000, jd - MJD0, &ra, &dec); + + cdec = cos(dec); + sdec = sin(dec); + cra = cos(ra); + sra = sin(ra); + + n = jd - 2451545.0; /* use epoch 2000 */ + e = degrad(23.439 - 0.0000004*n); + g = degrad(357.528) + degrad(0.9856003)*n; + L = degrad(280.461) + degrad(0.9856474)*n; + l = L + degrad(1.915)*sin(g) + degrad(0.02)*sin(2.0*g); + R = 1.00014 - 0.01671*cos(g) - 0.00014*cos(2.0*g); + X = R*cos(l); + Y = R*cos(e)*sin(l); + +#if 0 + printf ("n=%g g=%g L=%g l=%g R=%g X=%g Y=%g\n", + n, raddeg(g), raddeg(L), raddeg(l), R, X, Y); +#endif + + *hcp = 0.0057755 * (cdec*cra*X + (cdec*sra + tan(e)*sdec)*Y); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: helio.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/jupmoon.c b/Common/Libraries/XEphemAstroLib/src/jupmoon.c new file mode 100644 index 0000000000000000000000000000000000000000..40cb4ada9bbf928875344c6ce752e2c892a2b192 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/jupmoon.c @@ -0,0 +1,391 @@ +/* jupiter moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double jd, char *dir, MoonData md[J_NMOONS]); +static void meeus_jupiter (double d, double *cmlI, double *cmlII, + MoonData md[J_NMOONS]); +static void moonradec (double jupsize, MoonData md[J_NMOONS]); +static void moonSVis (Obj *sop, Obj *jop, MoonData md[J_NMOONS]); +static void moonEVis (MoonData md[J_NMOONS]); +static void moonPShad (Obj *sop, Obj *jop, MoonData md[J_NMOONS]); +static void moonTrans (MoonData md[J_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData jmd[J_NMOONS] = { + {"Jupiter", NULL}, + {"Io", "I"}, + {"Europa", "II"}, + {"Ganymede", "III"}, + {"Callisto", "IV"} +}; +static double sizemjd; /* size at last mjd */ +static double cmlImjd; /* central meridian long sys I, at last mjd */ +static double cmlIImjd; /* " II " */ + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(268.05) /* RA of Jupiter's north pole */ +#define POLE_DEC degrad(64.50) /* Dec of Jupiter's north pole */ + + +/* get jupiter info in md[0], moon info in md[1..J_NMOONS-1]. + * if !dir always use meeus model. + * if !jop caller just wants md[] for names + * N.B. we assume sop and jop are updated. + */ +void +jupiter_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *jop, /* jupiter */ +double *sizep, /* jup angular diam, rads */ +double *cmlI, double *cmlII, /* central meridian longitude, rads */ +double *polera, double *poledec, /* pole location */ +MoonData md[J_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, jmd, sizeof(jmd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !jop) { + if (jop) { + *sizep = sizemjd; + *cmlI = cmlImjd; + *cmlII = cmlIImjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = jop->s_ra; + md[0].dec = jop->s_dec; + md[0].mag = get_mag(jop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from jop */ + *sizep = degrad(jop->s_size/3600.0); + + /* mags from JPL ephemeris */ + md[1].mag = 5.7; + md[2].mag = 5.8; + md[3].mag = 5.3; + md[4].mag = 6.7; + + /* get moon data from BDL if possible, else Meeus' model. + * always use Meeus for cml + */ + if (dir && use_bdl (JD, dir, md) == 0) + meeus_jupiter (Mjd, cmlI, cmlII, NULL); + else + meeus_jupiter (Mjd, cmlI, cmlII, md); + + /* set visibilities */ + moonSVis (sop, jop, md); + moonPShad (sop, jop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + cmlImjd = *cmlI; + cmlIImjd = *cmlII; + memcpy (jmd, md, sizeof(jmd)); +} + +/* hunt for BDL file in dir[] and use if possible + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[J_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define JUPRAU .0004769108 /* jupiter radius, AU */ + double x[J_NMOONS], y[J_NMOONS], z[J_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "jupiter.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "jupiter.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != J_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, J_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < J_NMOONS; i++) { + md[i].x = x[i-1]/JUPRAU; /* we want jup radii +E */ + md[i].y = -y[i-1]/JUPRAU; /* we want jup radii +S */ + md[i].z = -z[i-1]/JUPRAU; /* we want jup radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* compute location of GRS and Galilean moons. + * if md == NULL, just to cml. + * from "Astronomical Formulae for Calculators", 2nd ed, by Jean Meeus, + * Willmann-Bell, Richmond, Va., U.S.A. (c) 1982, chapters 35 and 36. + */ +static void +meeus_jupiter( +double d, +double *cmlI, double *cmlII, /* central meridian longitude, rads */ +MoonData md[J_NMOONS]) /* fill in md[1..NM-1].x/y/z for each moon. + * N.B. md[0].ra/dec must already be set + */ +{ +#define dsin(x) sin(degrad(x)) +#define dcos(x) cos(degrad(x)) + double A, B, Del, J, K, M, N, R, V; + double cor_u1, cor_u2, cor_u3, cor_u4; + double solc, tmp, G, H, psi, r, r1, r2, r3, r4; + double u1, u2, u3, u4; + double lam, Ds; + double z1, z2, z3, z4; + double De, dsinDe; + double theta, phi; + double tvc, pvc; + double salpha, calpha; + int i; + + V = 134.63 + 0.00111587 * d; + + M = (358.47583 + 0.98560003*d); + N = (225.32833 + 0.0830853*d) + 0.33 * dsin (V); + + J = 221.647 + 0.9025179*d - 0.33 * dsin(V); + + A = 1.916*dsin(M) + 0.02*dsin(2*M); + B = 5.552*dsin(N) + 0.167*dsin(2*N); + K = (J+A-B); + R = 1.00014 - 0.01672 * dcos(M) - 0.00014 * dcos(2*M); + r = 5.20867 - 0.25192 * dcos(N) - 0.00610 * dcos(2*N); + Del = sqrt (R*R + r*r - 2*R*r*dcos(K)); + psi = raddeg (asin (R/Del*dsin(K))); + + *cmlI = degrad(268.28 + 877.8169088*(d - Del/173) + psi - B); + range (cmlI, 2*PI); + *cmlII = degrad(290.28 + 870.1869088*(d - Del/173) + psi - B); + range (cmlII, 2*PI); + + /* that's it if don't want moon info too */ + if (!md) + return; + + solc = (d - Del/173.); /* speed of light correction */ + tmp = psi - B; + + u1 = 84.5506 + 203.4058630 * solc + tmp; + u2 = 41.5015 + 101.2916323 * solc + tmp; + u3 = 109.9770 + 50.2345169 * solc + tmp; + u4 = 176.3586 + 21.4879802 * solc + tmp; + + G = 187.3 + 50.310674 * solc; + H = 311.1 + 21.569229 * solc; + + cor_u1 = 0.472 * dsin (2*(u1-u2)); + cor_u2 = 1.073 * dsin (2*(u2-u3)); + cor_u3 = 0.174 * dsin (G); + cor_u4 = 0.845 * dsin (H); + + r1 = 5.9061 - 0.0244 * dcos (2*(u1-u2)); + r2 = 9.3972 - 0.0889 * dcos (2*(u2-u3)); + r3 = 14.9894 - 0.0227 * dcos (G); + r4 = 26.3649 - 0.1944 * dcos (H); + + md[1].x = -r1 * dsin (u1+cor_u1); + md[2].x = -r2 * dsin (u2+cor_u2); + md[3].x = -r3 * dsin (u3+cor_u3); + md[4].x = -r4 * dsin (u4+cor_u4); + + lam = 238.05 + 0.083091*d + 0.33*dsin(V) + B; + Ds = 3.07*dsin(lam + 44.5); + De = Ds - 2.15*dsin(psi)*dcos(lam+24.) + - 1.31*(r-Del)/Del*dsin(lam-99.4); + dsinDe = dsin(De); + + z1 = r1 * dcos(u1+cor_u1); + z2 = r2 * dcos(u2+cor_u2); + z3 = r3 * dcos(u3+cor_u3); + z4 = r4 * dcos(u4+cor_u4); + + md[1].y = z1*dsinDe; + md[2].y = z2*dsinDe; + md[3].y = z3*dsinDe; + md[4].y = z4*dsinDe; + + /* compute sky transformation angle as triple vector product */ + tvc = PI/2.0 - md[0].dec; + pvc = md[0].ra; + theta = PI/2.0 - POLE_DEC; + phi = POLE_RA; + salpha = -sin(tvc)*sin(theta)*(cos(pvc)*sin(phi) - sin(pvc)*cos(phi)); + calpha = sqrt (1.0 - salpha*salpha); + + for (i = 0; i < J_NMOONS; i++) { + double tx = md[i].x*calpha + md[i].y*salpha; + double ty = -md[i].x*salpha + md[i].y*calpha; + md[i].x = tx; + md[i].y = ty; + } + + md[1].z = z1; + md[2].z = z2; + md[3].z = z3; + md[4].z = z4; +} + + +/* given jupiter loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in jup radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double jupsize, /* jup diameter, rads */ +MoonData md[J_NMOONS]) /* fill in RA and Dec */ +{ + double juprad = jupsize/2; + double jupra = md[0].ra; + double jupdec = md[0].dec; + int i; + + for (i = 1; i < J_NMOONS; i++) { + double dra = juprad * md[i].x; + double ddec = juprad * md[i].y; + md[i].ra = jupra + dra; + md[i].dec = jupdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *jop, /* jupiter */ +MoonData md[J_NMOONS]) +{ + double esd = sop->s_edist; + double eod = jop->s_edist; + double sod = jop->s_sdist; + double soa = degrad(jop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*jop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *jop, /* jupiter */ +MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (jop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: jupmoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.7 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/libration.c b/Common/Libraries/XEphemAstroLib/src/libration.c new file mode 100644 index 0000000000000000000000000000000000000000..59b5598fcbcff86c9efab2cc1d7e7b336eab3d7e --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/libration.c @@ -0,0 +1,2213 @@ +/* This file contains code to calculate the libration in Lunar lat and long. + * It is based entirely on code supplied to me 2 Oct 1996 by Stephen L. Moshier, + * , which implements a trigonometric expansion to + * approximate the librations according to JPL DE403. The following doc file + * was also supplied therewith: + +This program calculates a trigonometric series adjusted for a best fit +to the lunar librations from the Jet Propulsion Laboratory's DE403 +ephemeris. + +lblon403.c and lblat403.c are series for the selenographic longitude +and latitude of the earth. The longitude series matches DE403 +with a maximum discrepancy of 2.6" (0.4" rms). The latitude has a +maximum discrepancy of 1.9" (0.2" rms). The two series are valid in +the Julian year interval 1600 to 2200. + +In both Eckhardt and DE403 the moon's principal moment of inertia axes +form the lunar body coordinate system. The estimated geographic +locations of these axes vary as measurements and theories gradually +become more refined. There is a significant difference between +Eckhardt and DE403 in the constant term of the longitude. Almanac and +cartography coordinates drop the constant term (which is -64" for +DE403). That practice gives librations relative to the mean +selenographic longitude of the earth, for which the discrepancy from +one theory to the next is small. + +Steve Moshier +October, 1996 + + * Any errors in adapting this code to xephem are strictly my own. + * Elwood Downey. +*/ + +#include +#include + +#include "astro.h" + +#define CHAR short + + +/* plantbl.h */ + +struct plantbl { + /* char max_harmonic[9]; */ + char max_harmonic[14]; + char max_power_of_t; + CHAR *arg_tbl; + int *lon_tbl; + int *lat_tbl; + int *rad_tbl; + double distance; + double timescale; + double trunclvl; +}; + + +/* libra403.c */ + +static double JD2000 = 2451545.0; +/* Conversion factors between degrees and radians */ +static double STR = 4.8481368110953599359e-6; /* radians per arc second */ + +static double ss[14][24]; +static double cc[14][24]; + +/* Reduce arc seconds modulo 360 degrees, + answer in arc seconds. */ +static double +mods3600 (double x) +{ + double y; + y = x - 1.296e6 * floor (x / 1.296e6); + return y; +} + +/* Prepare lookup table of sin and cos ( i * L_k ) + for required multiple angles. + K is the array offset corresponding to the planet. + ARG is in radians. + n is the highest harmonic to compute. */ +static int +sscc (int k, double arg, int n) +{ + double cu, su, cv, sv, s; + int i; + + if (n <= 0) + return 0; + + su = sin (arg); + cu = cos (arg); + ss[k][0] = su; /* sin(L) */ + cc[k][0] = cu; /* cos(L) */ + sv = 2.0 * su * cu; + cv = cu * cu - su * su; + ss[k][1] = sv; /* sin(2L) */ + cc[k][1] = cv; + for (i = 2; i < n; i++) + { + s = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = s; + ss[k][i] = sv; /* sin( i+1 L ) */ + cc[k][i] = cv; + } + return (0); +} + + +/* Mean elements. + Copied from cmoon.c, DE404 version. */ + +static double Jlast = -1.0e38; +static double T; + +static int +dargs (double J, struct plantbl *plan) +{ + double T2, w; + + if (J == Jlast) + return 0; + + T = (J - JD2000) / 36525.0; + T2 = T * T; + + /* Mean anomaly of sun = l' (J. Laskar) */ + w = mods3600 (129596581.038354 * T + 1287104.76154); + w += (((((((( + 1.62e-20 * T + - 1.0390e-17) * T + - 3.83508e-15) * T + + 4.237343e-13) * T + + 8.8555011e-11) * T + - 4.77258489e-8) * T + - 1.1297037031e-5) * T + + 1.4732069041e-4) * T + - 0.552891801772) * T2; + sscc (10, STR * w, plan->max_harmonic[10]); + + /* Mean distance of moon from its ascending node = F */ + w = mods3600 ((1739527263.0983 - 2.079419901760e-01) * T + 335779.55755); + w = w + ((-9.646018347184e-06 * T2 /* F, t^4 */ + - 1.138215912580e-03) * T /* F, t^3 */ + - 1.312045233711e+01) * T; /* F, t^2 */ + sscc (11, STR * w, plan->max_harmonic[11]); + + /* Mean anomaly of moon = l */ + w = mods3600 ((1717915923.4728 - 2.035946368532e-01) * T + 485868.28096); + w = w + ((-3.421689790404e-04 * T2 /* l, t^4 */ + + 4.768357585780e-02) * T /* l, t^3 */ + + 3.146734198839e+01) * T; /* l, t^2 */ + sscc (9, STR * w, plan->max_harmonic[9]); + + /* Mean elongation of moon = D */ + w = mods3600 ((1602961601.4603 + 3.962893294503e-01) * T + 1072260.73512); + w = w + ((-2.905334122698e-04 * T2 /* D, t^4 */ + - 5.834100476561e-03) * T /* D, t^3 */ + - 6.847070905410e+00) * T; /* D, t^2 */ + sscc (12, STR * w, plan->max_harmonic[12]); + + /* Mean longitude of moon, re mean ecliptic and equinox of date */ + w = mods3600 ((1732564372.83264 - 6.784914260953e-01) * T + 785939.95571); + w = w + ((-8.466472828815e-05 * T2 /* L, t^4 */ + + 5.722859298199e-03) * T /* L, t^3 */ + - 5.663161722088e+00) * T; /* L, t^2 */ + sscc (13, STR * w, plan->max_harmonic[13]); + + /* Mean longitudes of planets (Laskar, Bretagnon) */ + + /* Venus. */ + w = mods3600 (210664136.4335482 * T + 655127.283046); + w += (((((((( + -9.36e-023 * T + - 1.95e-20) * T + + 6.097e-18) * T + + 4.43201e-15) * T + + 2.509418e-13) * T + - 3.0622898e-10) * T + - 2.26602516e-9) * T + - 1.4244812531e-5) * T + + 0.005871373088) * T2; + sscc (1, STR * w, plan->max_harmonic[1]); + + /* Earth. */ + w = mods3600 (129597742.26669231 * T + 361679.214649); + w += ((((((((-1.16e-22 * T + + 2.976e-19) * T + + 2.8460e-17) * T + - 1.08402e-14) * T + - 1.226182e-12) * T + + 1.7228268e-10) * T + + 1.515912254e-7) * T + + 8.863982531e-6) * T + - 2.0199859001e-2) * T2; + sscc (2, STR * w, plan->max_harmonic[2]); + + /* Mars. */ + w = mods3600 (68905077.59284 * T + 1279559.78866); + w += (-1.043e-5 * T + 9.38012e-3) * T2; + sscc (3, STR * w, plan->max_harmonic[3]); + + /* Jupiter. */ + w = mods3600 (10925660.428608 * T + 123665.342120); + w += (1.543273e-5 * T - 3.06037836351e-1) * T2; + sscc (4, STR * w, plan->max_harmonic[4]); + + /* Saturn. */ + w = mods3600 (4399609.65932 * T + 180278.89694); + w += ((4.475946e-8 * T - 6.874806E-5) * T + 7.56161437443E-1) * T2; + sscc (5, STR * w, plan->max_harmonic[5]); + return 0; +} + + + +/* Evaluate series PLAN at Julian date J. + Result in arcseconds, usually. */ + +static double +gplan (double J, struct plantbl *plan) +{ + double su, cu, sv, cv; + double t, sl; + int j, k, m, k1, ip, np, nt; + CHAR *p; + int *pl; + + dargs (J, plan); + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + sl = 0.0; + + for (;;) + { + /* Find sine and cosine of argument for this term in the series. + The argument has the form J_1 L_1 + J_2 L_2 + ... + where J_i are integers and L_i are mean elements. */ + + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { + /* If no periodic arguments, it is a polynomial term. + Evaluate A_n T^n + A_n-1 T^n-1 + ... + A_0. */ + nt = *p++; + cu = *pl++; + for (ip = 0; ip < nt; ip++) + cu = cu * T + *pl++; + sl += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = j; + if (j < 0) + k = -k; + k -= 1; + /* sin(k*angle) for planet m. */ + su = ss[m][k]; + if (j < 0) + su = -su; + /* cos(k*angle) for planet m. */ + cu = cc[m][k]; + if (k1 == 0) + { + /* Set sine and cosine of first angle. */ + sv = su; + cv = cu; + k1 = 1; + } + else + { + /* Combine angles by trigonometry. */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Now cv = cos(arg), sv = sin(arg). + Evaluate + cu = (C_n T^n + C_n-1 T^n-1 + ... + C_0) cos(arg) + su = (S_n T^n + S_n-1 T^n-1 + ... + S_0) sin(arg). */ + + /* Highest power of T. */ + nt = *p++; + /* Coefficients C_i, S_i. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + } + return (plan->trunclvl * sl); +} + + +/* lblat403.c */ + +static int lattabr[] = {-1}; +static int lattabb[] = {-1}; +static int lattabl[] = { + 785710, + + -1958, 780, + + -178, 2850, 2243, 5927, 2714, -2911, + + -174, 5888, -16705, 10828, -15113, -25049, + + -172, 1976, + + 37, -13560, + + -40, -911, + + -300, 691, + + 3779, 722, + + 68, -1048, + + -3092, -4, 3011, -31, 250, -14293664, + + -149, -228, + + -5, -842, + + 62, 57967, + + -7, -11207, + + 15, -66055, + + -79, -71560, + + 8, 2998, + + -1062, -46, + + -2, 711, + + -5, -2, + + 367, -5, -353, 1, -117, 2324027, + + 0, -176, + + 19, -4, + + -3, -1229, + + 7, 4327, + + -2, 112, + + -1, -540, + + 73, 102982, + + 0, -137, + + 2, 239, + + 0, -216, + + 2, 3707, + + -1, -100, + + -2, 124, + + 0, 408, + + 1, 561, + + 0, 594, + + 0, 11866, + + -2, -229, + + 11, 6768, + + 2, 1, + + -2, -788, -24, 314732, + + -5, -3238, + + -2, -1263, + + -1, 94, + + -2, 206, + + -283, 6489836, + + 63, 2562, + + -6, 1220, + + 0, 135, + + 795, -338, + + -406, -101, + + 757, -383, + + -73, -31018, + + -5, -3010, + + 6, 5821, + + 167, 7, + + 2, 122623, + + 41, 138924, + + 2, 253, + + 0, -198, + + 135, 30, + + 2, 934, + + 62, -14, + + -531, -297537, + + -3, -205, + + 1, -393, + + -4, -156, + + -467, 90, + + 9, -346, + + -55, 1368, + + 4414, 2094, + + 480, 510, + + 35, 728, + + 6832, 6429, + + -2099, -3703, + + -9, 579, + + 239, 1738, + + 22, 968, 60260, -8929, + + 26, -64, + + 0, 0, + + -47, -351, 2248, -1175, 3976, 7150, + + 15191, 1, -15535, -143, -2308,-239959618, + + -45, 355, 2252, 1189, 4009, -7131, + + -158, 499, + + 776, -34, + + -389, 4363, + + 30, 28, + + 0, -593, + + 1, -1, + + 58, -66, + + 4, 1552, + + -1, 244, + + 288, 59, + + -276, 62, + + 8, 3309, + + 2, 1249, + + -156, -3, + + 0, -7903, + + -47, 154458, + + -710, 160, + + 0, 288, + + 328, 219514, + + -1, 113, + + -1, 1515, + + -20, 28493, + + 13, 9011, + + -1, 1110, + + -1, -103, + + 0, 312, + + 1, 360, + + 6, 6139, + + -1, 142, + + -1, -709, + + -1, -242, + + 67, 67200, + + 5, 4148, + + 1, 137, + + -15, -17969, + + -2, -3372, + + -2, -1739, + + 154, 116200, + + -1, -640, + + -269, -336274, + + 0, -1557, + + -1, -353, + + 993, 39, + + -1, -294, + + -646, -135, + + 750, -3, -661, 8, -163, 2591179, + + -1, -258, + + 0, 381, + + 6, 8272, + + -44, -92044, + + -29, 70397, + + -25, -17892, + + 1, 67, + + -44, -17118, + + 2743, 349, + + -4, 231, + + 1501, 3099, + + -33, 21, + + -1130, 97, 1263, 164, -226, -13139965, + + 839, -202, + + -1, 660, + + 12, -10482, + + 1, 17, + + -2, -1480, + + -45, -26084, + + 2, 259, + + 0, 258, + + -1, -1560, + + 32, 73046, + + -1, -370, + + -1, -77, + + 46, 20687, + + 1, 742, + + 1, 2399, + + 2, 741, + + 0, 52, + + 0, 112, + + 0, 297, + + 2, 825, + + 0, 161, + + 1, 4228, + + 0, 212, + + -1, -105, + + 6, 2782, + + 9, 37199, + + 3, 5045, + + 105, -1, + + -1, -179, + + 75, 31274, + + -3, -1321, + + -1, 363, + + 0, 1137, + + 58, 104090, + + -2, -2695, + + -1, -392, + + -35, -21763, + + -2, -205, + + 567, 38, + + -7, 117, + + -569, -9, 321, -1522061, + + -4, 276, + + -2, -590, + + 2, 632, + + -14, -10601, + + 4, 8703, + + -10, 16870, + + -4, -995, + + 597, -6, -386, -805403, + + 1025, -474, + + -2, 201, + + -95, 16, + + -127, 135570, + + 0, -173, + + 10, 8565, + + -3, 1812, + + -1, -108, + + -107, -649, + + 0, 151, + + 1, 950, + + 1, 312, + + 1, 403, + + 0, -576, + + 7, 4418, + + -3, -4769, + + -1, -769, + + 63, 38890, + + 0, -101, + + 0, 169, + + -3, -14837, + + 1, 372, + + 0, -674, + + -3, -1488, + + -36, -196300, + + 0, -176, + + -10, -4811, + + -2, -991, + + 1, 831, + + 1, 3138, + + -103, -51819, + + 0, -133, + + -4, 22171, + + 2, 820, + + 1, 149, + + 2227, 1277, + + -502, -3049, + + 1, 122, + + 0, 370, + + 0, 166, + + 2, 772, + + 2, 2057, + + -1, -486, + + 13, -15447, + + -2, -1619, + + 0, 335, + + 0, -206, + + 0, -104, + + -19, -19726, + + 0, 414, + + -8, -3425, + + -19, -1, + + 1, 546, + + 0, -392, + + 0, -2754, + + 0, -158, + + -3, -1790, + + -1, -230, + + 0, -190, + + 0, -366, + + 0, -154, + +}; + +static CHAR latargs[] = { + 0, 0, + 3, 1, 2, 9, 3,-20, 4, 0, + 4, 1, 13, -1, 10, 3, 2, -4, 3, 2, + 4, 1, 13, -1, 10, -5, 2, 9, 3, 2, + 3, 9, 10, -9, 14, 1, 3, 0, + 3, 1, 11, -1, 12, 1, 13, 0, + 4, 1, 10, -2, 11, 1, 12, -2, 13, 0, + 4, 2, 11, -1, 14, 18, 2,-18, 3, 0, + 3, 1, 13, -1, 10, 1, 3, 0, + 2, 1, 10, -1, 14, 0, + 2, 1, 10, -1, 12, 2, + 4, 1, 14,-18, 2, 16, 3, 1, 5, 0, + 3, 2, 10, -1, 12, -1, 13, 0, + 3, 1, 10, 1, 11, -1, 12, 0, + 4, 1, 10, -1, 11, 1, 12, -2, 13, 0, + 2, 1, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -1, 12, 0, + 3, 3, 10, -1, 12, -2, 13, 0, + 2, 2, 10, -2, 13, 0, + 3, 1, 10, 2, 11, -1, 12, 0, + 3, 1, 10, -2, 13, 1, 3, 0, + 3, 1, 10, 1, 12, -2, 13, 2, + 3, 1, 11, 1, 12, -1, 13, 0, + 2, 2, 12, -2, 13, 0, + 3, 1, 10, -2, 11, -1, 12, 0, + 3, 1, 10, -3, 12, 2, 13, 0, + 4, 3, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -3, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -2, 13, 0, + 2, 3, 12, -3, 13, 0, + 4, 1, 10, -1, 11, -3, 12, 2, 13, 0, + 3, 3, 10, 1, 12, -4, 13, 0, + 4, 1, 10, 2, 11, 1, 12, -2, 13, 0, + 3, 1, 10, 3, 12, -4, 13, 0, + 4, 1, 10, 3, 11, 1, 12, -2, 13, 0, + 3, 3, 11, 1, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -4, 13, 0, + 2, 3, 12, -4, 13, 0, + 3, 2, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -3, 13, 0, + 3, 2, 10, 1, 12, -4, 13, 0, + 4, 1, 14, -3, 2,-16, 3, -4, 4, 0, + 3, 1, 11, 1, 12, -2, 13, 1, + 3, 1, 10, 1, 12, -3, 13, 0, + 4, 2, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, -3, 12, 2, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 1, 13, 0, + 2, 1, 12, -2, 13, 0, + 2, 2, 13, -1, 14, 0, + 2, 2, 11, -1, 12, 0, + 4, 1, 10, -1, 11, 1, 12, -3, 13, 0, + 3, 2, 10, -3, 14, 4, 4, 0, + 2, 1, 10, -2, 13, 0, + 3, 1, 13, -3, 3, 4, 4, 0, + 3, 2, 10, -1, 12, -2, 13, 0, + 3, 2, 10, -1, 11, -1, 12, 0, + 3, 1, 10, -1, 12, 1, 13, 0, + 2, 1, 10, -1, 11, 0, + 3, 1, 11, -1, 12, 2, 13, 0, + 2, 1, 11, -1, 12, 0, + 3, 1, 10, -1, 12, -1, 13, 0, + 4, 2, 13, -1, 12, 2, 2, -2, 3, 0, + 3, 1, 13, 2, 2, -3, 3, 0, + 4, 2, 10, -1, 11, -1, 12, -2, 13, 0, + 3, 1, 13, -1, 2, 2, 3, 0, + 2, 2, 10, -1, 12, 0, + 4, 2, 13, -1, 12, 2, 3, -2, 5, 0, + 4, 2, 13, -1, 12, 3, 2, -3, 3, 0, + 4, 2, 10, -2, 11, 1, 12, -2, 13, 0, + 3, 1, 13, 1, 3, -2, 5, 0, + 4, 1, 10, 1, 11, -1, 12, 1, 13, 0, + 3, 1, 13, -5, 2, 9, 3, 0, + 3, 1, 14, 2, 3, -4, 4, 0, + 3, 3, 10, 4, 12, -6, 14, 0, + 3, 1, 13, 3, 2, -4, 3, 0, + 1, 1, 10, 0, + 3, 1, 13, -3, 12, 9, 2, 0, + 4, 1, 10, -1, 11, 1, 12, -1, 13, 0, + 3, 2, 11, -1, 12, 2, 13, 0, + 1, 1, 14, 1, + 4, 1, 12, 1, 10, -1, 14, 1, 5, 0, + 4, 9, 13, -9, 10, 7, 2, 10, 3, 0, + 3, 1, 12, -8, 2, 13, 3, 2, + 1, 1, 12, 2, + 3, 1, 12, 8, 2,-13, 3, 2, + 2, 1, 13, 2, 4, 0, + 4, 2, 13, -1, 12, 5, 2, -6, 3, 0, + 3, 1, 13, -2, 12, 1, 3, 0, + 3, 1, 13, -3, 2, 6, 3, 0, + 4, 1, 10, -1, 11, -1, 12, -1, 13, 0, + 2, 1, 14, 2, 5, 0, + 2, 1, 10, -2, 12, 0, + 2, 2, 10, -3, 12, 0, + 4, 2, 13, -1, 12, 4, 2, -4, 3, 0, + 3, 1, 14, 4, 2, -6, 3, 0, + 2, 1, 13, 1, 2, 0, + 3, 2, 10, 1, 11, -1, 12, 0, + 4, 2, 10, -1, 11, 1, 12, -2, 13, 0, + 2, 1, 10, 1, 11, 0, + 3, 1, 10, 1, 12, -1, 13, 0, + 2, 1, 11, 1, 12, 0, + 3, 3, 12, -2, 13, -1, 3, 0, + 3, 4, 10, -1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -1, 13, 0, + 2, 2, 11, 1, 12, 0, + 2, 3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -2, 13, 0, + 3, 1, 11, 3, 12, -2, 13, 0, + 3, 4, 10, 1, 12, -4, 13, 0, + 4, 2, 10, 2, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 2, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 3, 11, -1, 12, -2, 13, 0, + 4, 1, 10, -2, 11, -1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, -3, 13, 0, + 3, 1, 10, 1, 12, -4, 13, 0, + 4, 1, 10, 2, 11, -1, 12, -2, 13, 0, + 3, 3, 10, -1, 12, -4, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 2, 13, 0, + 2, 1, 12, -3, 13, 0, + 4, 1, 10, -1, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, -1, 12, -3, 13, 0, + 3, 1, 10, -1, 12, 2, 13, 0, + 3, 1, 10, -2, 11, 1, 12, 0, + 3, 1, 11, -1, 12, 3, 13, 0, + 1, 2, 13, 0, + 3, 1, 11, -1, 12, -1, 13, 0, + 3, 1, 10, -3, 13, -1, 3, 0, + 3, 1, 10, -1, 12, -2, 13, 2, + 3, 3, 10, -1, 11, -1, 12, 0, + 3, 2, 10, -1, 12, 1, 13, 0, + 4, 1, 10, 1, 11, -1, 12, 2, 13, 0, + 3, 1, 10, -1, 11, 1, 12, 0, + 2, 1, 12, 1, 13, 0, + 4, 1, 10, -1, 11, -1, 12, -2, 13, 0, + 3, 1, 10, 1, 11, -3, 12, 0, + 2, 3, 10, -1, 12, 0, + 1, 2, 10, 0, + 4, 2, 10, -1, 11, 1, 12, -1, 13, 0, + 3, 1, 13, 1, 10, 1, 11, 0, + 3, 2, 13, 3, 3, -2, 11, 0, + 2, 1, 10, 1, 12, 2, + 3, 1, 10, -3, 14, 2, 5, 0, + 3, 3, 10, -1, 14, 4, 5, 0, + 3, 1, 11, 1, 12, 1, 13, 0, + 1, 2, 12, 0, + 4, 1, 10, -2, 11, -1, 12, -2, 13, 0, + 2, 1, 10, -3, 12, 0, + 3, 3, 10, 1, 11, -1, 12, 0, + 4, 3, 10, -1, 11, 1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -1, 13, 0, + 3, 1, 10, 1, 11, 1, 12, 0, + 2, 3, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -3, 12, 0, + 3, 3, 10, 1, 12, -2, 13, 0, + 3, 1, 10, 2, 11, 1, 12, 0, + 3, 1, 10, 3, 12, -2, 13, 0, + 4, 3, 10, 1, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -6, 13, 0, + 3, 2, 11, 1, 12, -4, 13, 0, + 3, 2, 10, 1, 12, -6, 13, 0, + 4, 2, 10, 2, 11, -1, 12, -4, 13, 0, + 3, 1, 11, 1, 12, -4, 13, 0, + 3, 3, 11, -1, 12, -2, 13, 0, + 3, 1, 10, 1, 12, -5, 13, 0, + 4, 2, 10, 1, 11, -1, 12, -4, 13, 0, + 2, 1, 12, -4, 13, 0, + 3, 2, 11, -1, 12, -2, 13, 0, + 2, 1, 10, -4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -3, 13, 0, + 3, 2, 10, -1, 12, -4, 13, 0, + 4, 2, 10, -1, 11, -1, 12, 2, 13, 0, + 3, 1, 10, -1, 12, 3, 13, 0, + 3, 1, 11, -1, 12, 4, 13, 0, + 3, 1, 11, -1, 12, -2, 13, 0, + 3, 1, 10, -1, 12, -3, 13, 0, + 4, 2, 10, -1, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, 2, 13, 0, + 3, 2, 10, -2, 11, 1, 12, 0, + 2, 1, 10, 2, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 1, 13, 0, + 2, 1, 12, 2, 13, 1, + 4, 1, 10, -1, 11, -1, 12, -3, 13, 0, + 3, 2, 10, -3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, -1, 12, 2, 13, 0, + 3, 2, 10, -1, 11, 1, 12, 0, + 3, 1, 10, 1, 12, 1, 13, 0, + 3, 1, 11, 1, 12, 2, 13, 0, + 2, 4, 10, -1, 12, 0, + 2, 2, 10, 1, 12, 1, + 4, 1, 13, 1, 12, 10, 2, -2, 3, 0, + 3, 2, 11, 1, 12, 2, 13, 0, + 2, 2, 12, 1, 14, 0, + 1, 3, 12, 0, + 3, 3, 10, 1, 12, -1, 13, 0, + 3, 2, 10, 1, 11, 1, 12, 0, + 3, 4, 10, 1, 12, -2, 13, 0, + 3, 2, 10, 3, 12, -2, 13, 0, + 3, 4, 10, -9, 3, -1, 4, 0, + 4, 1, 10, 1, 11, 1, 12, -6, 13, 0, + 3, 1, 10, 1, 12, -6, 13, 0, + 4, 1, 10, 2, 11, -1, 12, -4, 13, 0, + 3, 3, 10, -1, 12, -6, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -4, 13, 0, + 3, 1, 10, -1, 12, 4, 13, 0, + 4, 1, 10, -2, 11, 1, 12, 2, 13, 0, + 3, 1, 10, -1, 12, -4, 13, 0, + 4, 3, 10, -1, 11, -1, 12, 2, 13, 0, + 4, 1, 10, 1, 11, -1, 12, 4, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 2, 13, 0, + 2, 1, 12, 3, 13, 0, + 4, 1, 10, -1, 11, -1, 12, -4, 13, 0, + 3, 3, 10, -1, 12, 2, 13, 0, + 3, 1, 10, 1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, 3, 13, 0, + 3, 1, 10, -3, 12, -2, 13, 0, + 3, 3, 10, -1, 11, 1, 12, 0, + 3, 2, 10, 1, 12, 1, 13, 0, + 4, 1, 10, 1, 11, 1, 12, 2, 13, 0, + 2, 3, 10, 1, 12, 0, + 4, 2, 10, 1, 11, 1, 12, 1, 13, 0, + 2, 1, 10, 3, 12, 0, + 3, 3, 10, 1, 11, 1, 12, 0, + 3, 5, 10, 1, 12, -2, 13, 0, + 3, 4, 14, -4, 2, 8, 3, 0, + 3, 5, 10, -9, 3, -1, 4, 0, + 4, 2, 10, 1, 11, -1, 12, -6, 13, 0, + 2, 1, 12, -6, 13, 0, + 3, 2, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, -6, 13, 0, + 3, 1, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, 4, 13, 0, + 2, 1, 12, 4, 13, 0, + 4, 2, 10, -1, 11, 1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, 4, 13, 0, + 3, 1, 11, -3, 12, -2, 13, 0, + 3, 4, 10, -1, 12, 2, 13, 0, + 3, 2, 10, 1, 12, 2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, 2, 13, 0, + 2, 4, 10, 1, 12, 0, + 3, 7, 12, -2, 10, -4, 5, 0, + 3, 1, 10, -1, 12, -6, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 4, 13, 0, + 3, 1, 10, 1, 12, 4, 13, 0, + 4, 3, 10, -1, 11, 1, 12, 2, 13, 0, + 3, 3, 10, 1, 12, 2, 13, 0, + 2, 5, 10, 1, 12, 0, + 2, 1, 12, 6, 13, 0, + 3, 2, 10, 1, 12, 4, 13, 0, + 3, 4, 10, 1, 12, 2, 13, 0, + -1 +}; + +/* Total terms = 254, small = 254 */ +static struct plantbl liblat = { + /* { 0, 18, 18, 20, 4, 0, 0, 0, 0, 9, 3, 7, 9, 9,}, */ + /* Use max of liblon, liblat. */ + { 0, 18, 18, 20, 4, 2, 0, 0, 0, 9, 16, 7, 9, 9,}, + 2, + latargs, + lattabl, + lattabb, + lattabr, + 3.850000e+05, + 36525.0, + 1.0e-4, +}; + +/* lblon403.c */ +static int lontabr[] = {-1}; +static int lontabb[] = {-1}; +static int lontabl[] = { + -640001, + + -19, 3, + + -1, 0, + + -3, 17, + + 2, -9, + + 2, 3, + + 141, 1816, + + 2, -76, + + 78, -81, + + 3, 1, + + 50, -13, + + -12, 18, + + -6, 74, + + 19, 10, + + -19, 701, + + -26, 37, + + 36, -122, + + 131, -71, + + -40, 1, + + 61463, 12853, + + 5, -29, + + 354, 201, + + 94, -5, + + 31, 25, + + -73, -22, + + 673, 1435, + + 3844, 44, + + -44, -8, + + 195, -16, + + -827, -171768, + + 7051, -4116, + + 1036, 616, -2034, 6300, -13786, -3808, + + -118, -536, -1246, 771, 2555, 3214, + + 203, 26, + + 2975, -715, + + -743, 1286, + + -232, -50, + + 4, 234, + + -139, 475, + + 0, -98, + + -3, -11848, + + 0, 118, + + -202, 146, + + -33673, 7601, + + -150, 88, + + -1720, 1002, + + -293, 481, + + -2078, 1, + + 199, 220655, + + 137, 7459, + + -127, 28, + + -10, 2259, + + 4, 450, + + -26, 30, -76, 19043, 215, -7577830, + + -65, -45, + + -5, -14189, + + -6, -496, + + 9, 3265, + + 0, -131, + + 48, -90, + + -9, -155, + + -2, 21, + + 151, 19, + + -101, -516, + + -827, 3, 796, 2, 134, -2215850, + + -11, -1908, + + 0, 451, + + -2, 1399, + + 3, 7, + + -163, 5, + + -1582, 61, + + -22, -77215, + + 167, -471084, + + -85, -28, + + 1, -473, + + -1, 444, + + 4, 89, + + 6, -88, + + -157, -87813, + + 3, 274, + + -3, -1036, + + 7, -17005, + + -1, -332, + + 0, 50, + + -1, -228, + + -5, -2986, + + -1, -334, + + 1, -452, + + 0, 4, + + 0, -247, + + -3, -2493, + + -4, -1000, + + 0, -160, + + 0, -3163, + + -75, -74207, + + 13, 829, + + 32, 481, + + -33, -11859, + + -2, -3634, + + 7, -1611, + + 3, 520, + + -1, 2534, + + 5, -446, + + -471, 8, 399, 5160, 201, -2057189, + + 83, -2106, + + 11, 12240, + + 3, -270, + + 248, 1112, + + -63, -61809, + + -183, 594, + + 27, 25844, + + -3, 5594, + + 8, 571, + + -23, -1855, + + 477, -466, + + 0, -1257, + + 247, 1550, + + -10178, -175, 9570, -423, 2610, -45917681, + + -51, 937, + + -1001, 168, + + -168, 882, + + 1260, -2894, 4306, -1515, + + 7, 402, + + 0, 36, + + -280, -373, + + -19, 840, + + -1227, -138, + + 3486, 1478247, + + 1649, -644, + + 840, 377, + + 47, -1464, + + 167, -1251123, + + -194, -713, 133, 284429, + + 0, -191, + + -3, 1534, + + -700, 918, + + -7, -633, + + -221, -559, + + 1, 99, + + -17, -3513, + + -30, 14, + + -602, -5006, + + 908, 4178, + + 542, -379, + + 1568, 782, 528, 2761, + + -38994, -25804, + + 1696398, -324306, + + 47292, 71061, 457883, 52470, 159777, 224906030, + + -13068, -18508, + + -104, 3754, + + 541, 614, -290, 1412, + + -48, 162, + + 42, -50, + + -609, -4969, + + 44, -11435, + + -473, -412, + + 22, -6389, + + -87, 44, + + -39, 180182, + + -4186, -2227, + + -503, -208, + + 976, -512, -1016, -4403, + + 16, 25357, + + 565, -891, + + 28, 38836, + + -659, -855, + + -200, 619, + + 1, -1780, + + 24, 17531, + + 1053, 335, + + 502, 2745, -309, -1094576, + + -1, -263, + + 3, -394, + + 0, 4152, + + -1, -467, + + -339, -132142, + + -14, -11676, + + 29, 63360, + + 0, 129, + + -12, -4802, + + -1, -180, + + 2, 3424, + + 0, 45, + + -1, -155, + + -1, -74, + + 0, -134, + + -4, -1588, + + -1, -3424, + + 2, 119, + + -57, -27417, + + 0, 168, + + 0, 206, + + -21, -80823, + + 8, 2324, + + -4, 835, + + 396, -6, -244, -308040, + + 0, -294, + + -56, -1332, + + 2, -110, + + 306, 4060, -58, -1644587, + + -155, -210, + + 67, -1642, + + 27, 32070, + + 9, 3592, + + -8, -17, + + -1, 2, + + -9, -4580, + + 5, 1940, + + 5, -1217, + + 62, -862, + + -522, -1163, + + 0, 0, + + -1646, 1, 1169, 109, 1395, 23634968, + + 2, 0, + + -512, 1148, + + -9, 32, + + 0, -2749, + + 969, -4, + + 2, 351, + + 1, 105, + + 152, 97075, + + -55, -84524, + + -49, 607, 29, -242117, + + 4, 6518, + + 5, -77, + + 1, -39, + + 9, 1, + + 5, -231, + + 2296, -10, -2453, 3, 138, 7689964, + + 0, -689, + + 1, 12635, + + 5444, 372, + + 9, -1843, + + 3485, -560, + + 909, 3, -742, -1, -66, -6945414, + + 8, -7, + + -3, -181, + + 1, 1282, + + -115, -76497, + + 3, -90, + + 1, -142, + + -5, 10263, + + -33, -9479, + + 0, -657, + + 19, 15040, + + -2, 1084, + + -1, -295, + + -161, 403, + + 0, -175, + + -1, -392, + + -4, -3096, + + -9, -2928, + + 1, 332, + + -56, -43733, + + 1, 572, + + 2, -660, + + 4, 7540, + + 4, -659, + + -505, -382941, + + -3, 256, + + 2, 30, + + 76, 145296, + + -4, 4115, + + 9, 6329, + + 11, 6962, + + 0, -338, + + 1, 153, + + 2, -147, + + -270, 211, + + -519, 97, 385, 1912268, + + -1, 1495, + + -3, 223, + + 254, 152832, + + 15, 6709, + + -8, -5835, + + -12, -29016, + + 0, -5641, + + -2, 4217, + + -2, -1176, + + -496, 4, 331, 360972, + + 1, 918, + + -2, -136, + + -111, -762309, + + 2, -610, + + 1, 96, + + -11, -5468, + + 0, 4856, + + 0, -2, + + -16, -668, + + 20, 1963, + + -1, -95, + + 0, -83, + + 0, -96, + + -2, -902, + + 0, -1523, + + -14, -5691, + + -10, -18650, + + 0, 131, + + 0, 128, + + 0, 243, + + 1, 644, + + -76, 138046, + + -1, 316, + + 8, 2703, + + 15, 11758, + + -1, 16, + + 2, -2867, + + 5, 6504, + + 180, 143085, + + -1, 224, + + 86, -96384, + + 1, 471, + + 0, -407, + + -3, -2886, + + -1, -919, + + 0, 742, + + -2, 1145, + + 59, 19306, + + 0, 67, + + -61, -67569, + + -14, 11725, + + -1, -395, + + 1, 772, + + -1, -49, + + 563, 871, 1951, -22, + + -1, -711, + + 0, 240, + + -6, -3912, + + 1, 2812, + + 0, 106, + + 0, 378, + + 4, 19609, + + 6, 3331, + + 2, 930, + + 0, -37, + + 0, -502, + + 0, -1257, + + 21, 10531, + + 2, -16662, + + 0, -267, + + -1, 22, + + 6, 1104, + + -14, -5544, + + 1, -250, + + -1, 1248, + + 0, 325, + + 2, 2163, + + 2, -1421, + + 0, 73, + + -1, -67, + + 2, 771, + + -1, -2085, + + 0, 67, + + 1, 226, + + 1, 212, + + 0, 56, + +}; + +static CHAR lonargs[] = { + 0, 0, + 4, 1, 10, 3, 11,-18, 2, 13, 3, 0, + 4, -2, 12, 2, 13, 5, 2, -6, 3, 0, + 4, 2, 10, -2, 13, -2, 3, 3, 5, 0, + 3, 1, 10, -1, 14, 1, 5, 0, + 4, -2, 10, 2, 13, -5, 3, -6, 4, 0, + 2, 1, 12, -1, 14, 0, + 4, -2, 10, 2, 13, 2, 3, -2, 5, 0, + 2, 1, 3, -2, 4, 0, + 4, -1, 12, 1, 13, -3, 2, 6, 3, 0, + 1, 1, 5, 0, + 4, -1, 10, 2, 13,-15, 2, 13, 3, 0, + 4, 2, 10, -2, 13, -3, 2, 3, 3, 0, + 2, 2, 12, -2, 14, 0, + 3, 1, 10, -1, 11, -1, 13, 0, + 2, 11, 2,-18, 3, 0, + 2, 3, 2, -5, 3, 0, + 2, 2, 3, -4, 4, 0, + 2, 5, 2, -8, 3, 0, + 2, 1, 10, -1, 12, 0, + 4, -1, 12, 1, 14, 3, 2, -5, 3, 0, + 3, 6, 12, -6, 13, -4, 2, 0, + 2, 3, 3, -6, 4, 0, + 2, 5, 3, -9, 4, 0, + 4, -1, 10, 2, 13,-18, 2, 18, 3, 0, + 3, 2, 10, -2, 3, -2, 13, 0, + 2, 2, 2, -3, 3, 0, + 4, 2, 10, -2, 13, -4, 2, 5, 3, 0, + 2, 4, 3, -7, 4, 0, + 2, 2, 10, -2, 12, 0, + 2, 3, 3, -5, 4, 0, + 3, 3, 2, -4, 3, -1, 4, 2, + 3, 1, 2, -5, 3, 7, 4, 2, + 4, -2, 10, 2, 13, 5, 2, -6, 3, 0, + 2, 1, 2, -2, 3, 0, + 2, 2, 3, -3, 4, 0, + 4, -1, 12, 1, 14, 4, 2, -6, 3, 0, + 2, 1, 3, -1, 4, 0, + 2, 4, 2, -6, 3, 0, + 4, 2, 10, -2, 13, -2, 2, 2, 3, 0, + 2, 1, 2, -1, 3, 0, + 3, 2, 10, 1, 11, -2, 12, 0, + 2, 1, 3, -3, 5, 0, + 3, 2, 10, -1, 3, -2, 13, 0, + 2, 4, 3, -6, 4, 0, + 2, 1, 3, -2, 5, 0, + 2, 3, 3, -4, 4, 0, + 2, 3, 2, -4, 3, 0, + 2, 1, 10, -1, 13, 0, + 2, 1, 3, -1, 5, 0, + 2, 1, 3, -2, 6, 0, + 2, 2, 3, -2, 4, 0, + 2, 1, 3, -1, 6, 0, + 1, 1, 11, 2, + 2, 1, 3, 1, 5, 0, + 3, 1, 11, -2, 12, 2, 13, 0, + 3, 1, 10, -2, 12, 1, 13, 0, + 2, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 11, -2, 12, 0, + 2, 4, 3, -5, 4, 0, + 2, 3, 3, -3, 4, 0, + 3, 4, 10, -2, 12, -2, 13, 0, + 1, 1, 2, 0, + 2, 2, 3, -3, 5, 0, + 2, 2, 10, -2, 13, 2, + 2, 2, 3, -2, 5, 0, + 2, 3, 3, -3, 2, 0, + 3, 1, 10, 1, 11, -1, 13, 0, + 3, 3, 3, -1, 2, 1, 4, 0, + 2, 2, 3, -1, 5, 0, + 3, 1, 10, 1, 12, -2, 13, 0, + 1, 2, 11, 0, + 2, 2, 12, -2, 13, 0, + 2, 2, 2, -1, 3, 0, + 2, 4, 2, -4, 3, 0, + 2, 3, 10, -3, 13, 0, + 4, 2, 10, -2, 13, 1, 3, -1, 5, 0, + 2, 3, 3, -3, 5, 0, + 3, 2, 10, 1, 11, -2, 13, 0, + 3, 1, 10, 2, 12, -3, 13, 0, + 1, 3, 11, 0, + 3, 1, 11, 2, 12, -2, 13, 0, + 2, 5, 2, -5, 3, 0, + 2, 4, 10, -4, 13, 0, + 2, 6, 2, -6, 3, 0, + 3, 2, 10, 2, 11, -2, 13, 0, + 3, 2, 10, 2, 12, -4, 13, 0, + 3, 2, 11, 2, 12, -2, 13, 0, + 3, 4, 10, 1, 11, -4, 13, 0, + 4, 1, 10, 1, 11, 2, 12, -4, 13, 0, + 3, 1, 10, 3, 11, -2, 13, 0, + 3, 3, 10, 1, 11, -4, 13, 0, + 4, 1, 10, -2, 11, -2, 12, 2, 13, 0, + 3, 1, 10, 2, 12, -4, 13, 0, + 3, 1, 10, 2, 11, -2, 13, 0, + 3, 2, 10, 1, 11, -3, 13, 0, + 3, 1, 13, -2, 2, 1, 4, 0, + 2, 3, 10, -4, 13, 0, + 4, 1, 10, -1, 11, -2, 12, 2, 13, 0, + 4, -1, 10, 2, 13, -2, 2, 2, 3, 0, + 2, 1, 10, -3, 11, 0, + 2, 2, 12, -3, 13, 0, + 2, 2, 11, -1, 13, 0, + 3, 1, 10, 1, 11, -2, 13, 2, + 4, -1, 10, 2, 13, -1, 3, 1, 5, 0, + 2, 2, 10, -3, 13, 0, + 3, 3, 10, -1, 11, -4, 13, 0, + 3, 4, 11, 2, 13,-11, 2, 0, + 3, 1, 10, -2, 12, 2, 13, 0, + 3, 1, 12, -2, 13, 1, 5, 0, + 2, 1, 10, -2, 11, 0, + 2, 1, 11, -1, 13, 0, + 3, 1, 10, -2, 13, 1, 5, 0, + 3, 1, 10, -2, 3, 2, 5, 0, + 3, 18, 2,-18, 3, 2, 5, 0, + 3, 1, 10, -3, 2, 3, 3, 0, + 3, 2, 13, 16, 11,-18, 2, 0, + 2, 1, 10, -2, 13, 2, + 3, 1, 13, -2, 10, 5, 4, 0, + 3, 2, 12, -2, 14, 7, 2, 0, + 3, 1, 10, -2, 3, 3, 5, 0, + 3, 1, 12, -1, 3, -2, 5, 1, + 3, 2, 10, -1, 11, -3, 13, 0, + 3, 3, 10, -2, 12, -2, 13, 0, + 2, 8, 2, -1, 3, 0, + 4, 1, 10, 1, 11, -2, 12, 2, 13, 0, + 3, 1, 12, -2, 14, 2, 4, 0, + 2, 1, 10, -1, 11, 0, + 3, 8, 2, -5, 3, 8, 4, 0, + 2, 18, 2,-17, 3, 0, + 3, 1, 10, -1, 3, 1, 5, 0, + 1, 1, 13, 0, + 3, 1, 10, -1, 11, -2, 13, 1, + 3, 1, 10, 1, 11, -2, 12, 0, + 3, 1, 10, -1, 2, 1, 3, 0, + 3, 2, 13, -8, 2, 1, 3, 0, + 2, 3, 10, -2, 12, 0, + 3, 2, 10, -1, 12, -1, 5, 0, + 3, 3, 10, -2, 11, -2, 13, 0, + 3, 2, 10, -1, 11, -1, 13, 0, + 3, 2, 10, 1, 3, -2, 4, 0, + 3, 1, 12, -1, 10, -1, 14, 0, + 4, -1, 10, 2, 13, 2, 3, -3, 5, 0, + 3, 2, 13, -4, 2, -5, 3, 0, + 3, 2, 12, 2, 10, -3, 14, 1, + 2, 1, 12, -2, 5, 0, + 2, 10, 2, -3, 11, 0, + 1, 1, 10, 2, + 3, 1, 12, -2, 10, -2, 5, 0, + 2, 18, 2,-16, 3, 0, + 2, 2, 12, -3, 14, 1, + 3, 1, 13,-17, 2, 2, 11, 0, + 3, 1, 10, 1, 2, -3, 4, 0, + 3, 1, 12, 1, 10, -1, 14, 0, + 4, -1, 10, 2, 13, 2, 3, -2, 5, 0, + 3, 1, 10, -1, 3, 2, 4, 0, + 4, -1, 10, 2, 13, 3, 2, -3, 3, 0, + 4, 1, 10, -2, 11, 2, 12, -2, 13, 0, + 2, 1, 11, 1, 13, 0, + 3, 8, 2, 2, 3, -3, 4, 0, + 1, 1, 12, 0, + 3, 6, 2, 9, 3,-10, 4, 1, + 3, 1, 10, -2, 11, -2, 13, 0, + 2, 8, 2, 1, 4, 0, + 2, 1, 10, -2, 12, 0, + 2, 11, 2, -4, 3, 0, + 3, 3, 11, -2, 14, 6, 2, 0, + 3, 3, 10, -1, 11, -2, 13, 0, + 2, 2, 10, -1, 13, 0, + 3, 1, 12, -2, 2, 4, 3, 0, + 2, 1, 10, 1, 11, 1, + 4, 1, 10, -1, 11, 2, 12, -2, 13, 0, + 2, 2, 11, 1, 13, 0, + 2, 2, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -2, 12, 0, + 2, 3, 10, -2, 13, 0, + 2, 1, 10, 2, 11, 0, + 3, 1, 10, 2, 12, -2, 13, 0, + 3, 1, 11, 2, 12, -1, 13, 0, + 3, 3, 10, 1, 11, -2, 13, 0, + 2, 1, 10, 3, 11, 0, + 4, 1, 10, 1, 11, 2, 12, -2, 13, 0, + 2, 5, 10, -4, 13, 0, + 3, 3, 10, 2, 11, -2, 13, 0, + 3, 3, 10, 2, 12, -4, 13, 0, + 2, 4, 11, -2, 13, 0, + 3, 2, 10, 2, 11, -4, 13, 0, + 2, 3, 11, -2, 13, 0, + 3, 1, 10, 2, 11, -3, 13, 0, + 3, 2, 10, 1, 11, -4, 13, 0, + 2, 3, 10, -5, 13, 0, + 2, 2, 12, -4, 13, 0, + 2, 2, 11, -2, 13, 0, + 3, 1, 10, 1, 11, -3, 13, 0, + 3, 2, 13, -2, 3, 2, 5, 0, + 2, 2, 10, -4, 13, 1, + 4, 2, 10, -1, 11, -2, 12, 2, 13, 0, + 2, 2, 14, -2, 2, 0, + 3, 1, 10, -2, 12, 3, 13, 0, + 2, 1, 11, -2, 13, 1, + 3, 2, 14, -2, 2, 3, 5, 0, + 3, 2, 13, -1, 3, 1, 5, 0, + 2, 1, 10, -3, 13, 0, + 3, 2, 10, -1, 11, -4, 13, 0, + 4, 2, 10, 1, 11, -2, 12, -2, 13, 0, + 3, 2, 13, 1, 14, -8, 2, 0, + 3, 2, 10, -2, 12, 2, 13, 0, + 2, 2, 10, -2, 11, 0, + 3, 1, 10, -1, 11, 1, 13, 0, + 3, 1, 12, -2, 13, -1, 14, 0, + 3, 2, 13, -8, 2, 13, 3, 0, + 3, 3, 10, -5, 13, 5, 4, 0, + 1, 2, 13, 2, + 3, 3, 10, -1, 13, 5, 4, 0, + 3, 2, 13, 8, 2,-13, 3, 0, + 2, 2, 11, -2, 12, 0, + 3, 1, 10, -1, 11, -3, 13, 0, + 3, 1, 10, -1, 12, -2, 13, 0, + 3, 2, 10, -2, 11, -4, 13, 0, + 3, 2, 10, -2, 12, -2, 13, 0, + 2, 2, 10, -1, 11, 0, + 2, 1, 10, 1, 13, 0, + 2, 1, 11, 2, 13, 1, + 2, 1, 11, -2, 12, 0, + 3, 1, 10, -2, 12, -1, 13, 0, + 2, 4, 10, -2, 12, 0, + 2, 3, 10, -1, 12, 0, + 3, 3, 10, -1, 11, -1, 13, 0, + 1, 2, 10, 2, + 2, 2, 14, -2, 5, 0, + 3, 1, 10, 1, 11, 1, 13, 0, + 2, 1, 10, 1, 12, 0, + 2, 2, 11, 2, 13, 0, + 2, 1, 12, 1, 14, 0, + 1, 2, 12, 2, + 2, 1, 10, -3, 12, 0, + 3, 4, 10, -1, 11, -2, 13, 0, + 2, 3, 10, -1, 13, 0, + 2, 2, 10, 1, 11, 0, + 3, 1, 10, 2, 11, 1, 13, 0, + 3, 1, 10, 2, 12, -1, 13, 0, + 2, 1, 11, 2, 12, 0, + 2, 4, 10, -2, 13, 0, + 2, 2, 10, 2, 11, 0, + 3, 2, 10, 2, 12, -2, 13, 0, + 2, 4, 12, -2, 13, 0, + 3, 4, 10, 1, 11, -2, 13, 0, + 3, 2, 13, 11, 2,-13, 3, 0, + 3, 1, 10, 3, 11, -4, 13, 0, + 3, 3, 10, 1, 11, -6, 13, 0, + 3, 1, 10, 2, 11, -4, 13, 0, + 2, 3, 10, -6, 13, 0, + 3, 1, 10, -3, 11, 2, 13, 0, + 3, 1, 10, 1, 11, -4, 13, 0, + 2, 2, 10, -5, 13, 0, + 3, 1, 10, -2, 12, 4, 13, 0, + 3, 1, 10, -2, 11, 2, 13, 0, + 2, 1, 11, -3, 13, 0, + 2, 1, 10, -4, 13, 0, + 4, 1, 10, 2, 11, -2, 12, -2, 13, 0, + 3, 3, 10, -2, 12, -4, 13, 0, + 3, 1, 10, -1, 11, 2, 13, 0, + 1, 3, 13, 0, + 3, 1, 10, -1, 11, -4, 13, 0, + 4, 1, 10, 1, 11, -2, 12, -2, 13, 0, + 3, 3, 10, -2, 12, 2, 13, 0, + 2, 3, 10, -2, 11, 0, + 3, 2, 10, -1, 11, 1, 13, 0, + 3, 1, 12, 2, 13, -2, 5, 0, + 2, 1, 10, 2, 13, 1, + 2, 1, 11, 3, 13, 0, + 3, 1, 10, -2, 11, -4, 13, 0, + 3, 1, 10, -2, 12, -2, 13, 0, + 2, 3, 10, -1, 11, 0, + 2, 2, 10, 1, 13, 0, + 3, 1, 10, 1, 11, 2, 13, 0, + 3, 1, 10, -1, 11, 2, 12, 0, + 2, 2, 12, 1, 13, 0, + 4, 1, 10, -1, 11, -2, 12, -2, 13, 0, + 1, 3, 10, 1, + 3, 2, 10, 1, 11, 1, 13, 0, + 3, 1, 10, 2, 11, 2, 13, 0, + 2, 1, 10, 2, 12, 0, + 3, 1, 11, 2, 12, 1, 13, 0, + 2, 4, 10, -1, 13, 0, + 2, 3, 10, 1, 11, 0, + 3, 1, 10, 1, 11, 2, 12, 0, + 4, 1, 10, -1, 11, 4, 12, -2, 13, 0, + 2, 5, 10, -2, 13, 0, + 3, 3, 10, 2, 12, -2, 13, 0, + 3, 1, 10, 4, 12, -2, 13, 0, + 3, 2, 10, 2, 11, -6, 13, 0, + 2, 3, 11, -4, 13, 0, + 3, 2, 10, 1, 11, -6, 13, 0, + 2, 2, 11, -4, 13, 0, + 2, 2, 10, -6, 13, 0, + 2, 1, 11, -4, 13, 0, + 2, 1, 10, -5, 13, 0, + 3, 2, 10, -1, 11, -6, 13, 0, + 4, 2, 10, 1, 11, -2, 12, -4, 13, 0, + 3, 2, 10, -2, 11, 2, 13, 0, + 1, 4, 13, 0, + 3, 2, 11, -2, 12, -2, 13, 0, + 3, 2, 10, -2, 12, -4, 13, 0, + 3, 2, 10, -1, 11, 2, 13, 0, + 2, 1, 10, 3, 13, 0, + 2, 1, 11, 4, 13, 0, + 3, 1, 11, -2, 12, -2, 13, 0, + 2, 2, 10, 2, 13, 0, + 3, 1, 10, 1, 11, 3, 13, 0, + 2, 2, 12, 2, 13, 0, + 2, 4, 10, -1, 11, 0, + 2, 3, 10, 1, 13, 0, + 3, 2, 10, 1, 11, 2, 13, 0, + 3, 2, 10, -1, 11, 2, 12, 0, + 3, 1, 10, 2, 12, 1, 13, 0, + 3, 1, 11, 2, 12, 2, 13, 0, + 1, 4, 10, 0, + 3, 3, 10, 1, 11, 1, 13, 0, + 2, 2, 10, 2, 12, 0, + 1, 4, 12, 0, + 2, 4, 10, 1, 11, 0, + 3, 2, 10, 1, 11, 2, 12, 0, + 2, 6, 10, -2, 13, 0, + 3, 5, 12, -1, 14, 2, 4, 1, + 3, 1, 10, 1, 11, -6, 13, 0, + 3, 1, 10, -2, 11, 4, 13, 0, + 2, 1, 10, -6, 13, 0, + 3, 1, 10, -1, 11, 4, 13, 0, + 3, 1, 10, -1, 11, -6, 13, 0, + 4, 1, 10, 1, 11, -2, 12, -4, 13, 0, + 2, 1, 10, 4, 13, 0, + 3, 1, 10, -2, 12, -4, 13, 0, + 3, 3, 10, -1, 11, 2, 13, 0, + 2, 2, 10, 3, 13, 0, + 3, 1, 10, 1, 11, 4, 13, 0, + 4, 1, 10, -1, 11, 2, 12, 2, 13, 0, + 2, 3, 10, 2, 13, 0, + 3, 1, 10, 2, 12, 2, 13, 0, + 3, 3, 10, 1, 11, 2, 13, 0, + 3, 1, 10, -1, 11, 4, 12, 0, + 1, 5, 10, 0, + 2, 3, 10, 2, 12, 0, + 2, 1, 11, -6, 13, 0, + 1, 6, 13, 0, + 3, 2, 10, -1, 11, 4, 13, 0, + 2, 2, 10, 4, 13, 0, + 2, 2, 12, 4, 13, 0, + 3, 4, 10, -1, 11, 2, 13, 0, + 3, 2, 10, 1, 11, 4, 13, 0, + 2, 4, 10, 2, 13, 0, + 3, 2, 10, 2, 12, 2, 13, 0, + 1, 6, 10, 0, + 2, 1, 10, 6, 13, 0, + 2, 3, 10, 4, 13, 0, + 2, 5, 10, 2, 13, 0, + -1 +}; + +/* Total terms = 356, small = 356 */ +static struct plantbl liblon = { + /* { 0, 18, 18, 10, 3, 2, 0, 0, 0, 6, 16, 6, 6, 3,}, */ + /* Use max of liblon, liblat. */ + { 0, 18, 18, 20, 4, 2, 0, 0, 0, 9, 16, 7, 9, 9,}, + 2, + lonargs, + lontabl, + lontabb, + lontabr, + 3.850000e+05, + 36525.0, + 1.0e-4, +}; + + +/* given a Julian date, return the lunar libration in lat and long, in rads. + */ +void +llibration (double JD, double *llatp, double *llonp) +{ + double lg, lt; /* arc seconds */ + + lg = gplan (JD, &liblon); + lt = gplan (JD, &liblat); + + *llonp = degrad (lg/3600.0); + *llatp = degrad (lt/3600.0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: libration.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/magdecl.c b/Common/Libraries/XEphemAstroLib/src/magdecl.c new file mode 100644 index 0000000000000000000000000000000000000000..f3efa98fb267adfc91f797a58c6c4388a7c278cb --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/magdecl.c @@ -0,0 +1,381 @@ +/* DoD NIMA World Magnetic Model. + * from http://www.ngdc.noaa.gov + * +#define TEST_MAIN + */ + + +#include +#include +#include +#include + +#include "astro.h" + +static char mfn[] = "wmm.cof"; /* file with model coefficients */ + +static int geomag(FILE *wmmdat, int *maxdeg); +static int geomg1(FILE *wmmdat, float alt, float glat, float glon, + float t, float *dec, float *mdp, float *ti, float *gv); + +/* compute magnetic declination for given location, elevation and time. + * sign is such that mag bearing = true az + mag deviation. + * return 0 if ok, -1 if no model file, -2 if time outside model range. + * fill err[] with excuse if return < 0. + */ +int +magdecl ( +double l, double L, /* geodesic lat, +N, long, +E, rads */ +double e, /* elevation, m */ +double y, /* time, decimal year */ +char *dir, /* dir for model file */ +double *mdp, /* magnetic deviation, rads E of N */ +char *err) /* err message if return < 0 */ +{ + float dlat = raddeg(l); + float dlon = raddeg(L); + float alt = e/1000.; + int maxdeg = 12; + float dec, dp, ti, gv; + char mfile[1024]; + FILE *wmmdat; + int s; + + /* open model file */ + sprintf (mfile, "%s/%s", dir, mfn); + wmmdat = fopen (mfile, "r"); + if (!wmmdat) { + sprintf (err, "%s: %s", mfile, strerror(errno)); + return (-1); + } + + /* compute deviation */ + geomag(wmmdat, &maxdeg); + s = geomg1(wmmdat,alt,dlat,dlon,y,&dec,&dp,&ti,&gv); + fclose(wmmdat); + if (s < 0) { + sprintf (err, "%s: Magnetic model only available for %g .. %g. See http://www.ngdc.noaa.gov", mfile, ti, ti+5); + return (-2); + } + *mdp = degrad(dec); + return (0); +} + +#if defined(TEST_MAIN) + +int +main(int ac, char *av[]) +{ + char err[1024]; + float altm, dlat, dlon; + float t; + double dec; + + S1: + printf("\n\n\n ENTER LATITUDE IN DECIMAL DEGREES (+25.0)\n"); + scanf("%f", &dlat); + + printf(" ENTER LONGITUDE IN DECIMAL DEGREES (-100.0)\n"); + scanf("%f", &dlon); + + printf(" ENTER ALTITUDE IN METERS\n"); + scanf("%f", &altm); + + printf(" ENTER TIME IN DECIMAL YEAR\n"); + scanf("%f",&t); + + if (magdecl (degrad(dlat), degrad(dlon), altm, t, "auxil", &dec, + err) < 0) { + printf ("%s\n", err); + return(1); + } + + printf("\n LATITUDE: = %-7.2f DEG",dlat); + printf("\n LONGITUDE: = %-7.2f DEG\n",dlon); + printf("\n ALTITUDE = %.2f METERS",altm); + printf("\n DATE = %-5.1f\n",t); + + printf("\n\t\t\t OUTPUT\n\t\t\t ------"); + + printf("\n DEC = %-7.2f DEG", raddeg(dec)); + + printf("\n\n\n DO YOU NEED MORE POINT DATA? (y or n)\n"); + scanf("%s", err); + if ((err[0] =='y')||(err[0] == 'Y')) goto S1; + + return(0); +} +#endif /* defined(TEST_MAIN) */ + +/************************************************************************* + * return 0 if ok, -1 if time is out of range with base epoc in *ti + */ + +static int E0000(FILE *wmmdat, int IENTRY, int *maxdeg, float alt, +float glat, float glon, float t, float *dec, float *mdp, float *ti, +float *gv) +{ + static int maxord,i,icomp,n,m,j,D1,D2,D3,D4; + static float c[13][13],cd[13][13],tc[13][13],dp[13][13],snorm[169], + sp[13],cp[13],fn[13],fm[13],pp[13],k[13][13],pi,dtr,a,b,re, + a2,b2,c2,a4,b4,c4,epoc,gnm,hnm,dgnm,dhnm,flnmj,otime,oalt, + olat,olon,dt,rlon,rlat,srlon,srlat,crlon,crlat,srlat2, + crlat2,q,q1,q2,ct,st,r2,r,d,ca,sa,aor,ar,br,bt,bp,bpp, + par,temp1,temp2,parp,bx,by,bz,bh; + static char model[20], c_str[81], c_new[5]; + static float *p = snorm; + + switch(IENTRY){case 0: goto GEOMAG; case 1: goto GEOMG1;} + +GEOMAG: + +/* INITIALIZE CONSTANTS */ + maxord = *maxdeg; + sp[0] = 0.0; + cp[0] = *p = pp[0] = 1.0; + dp[0][0] = 0.0; + a = 6378.137; + b = 6356.7523142; + re = 6371.2; + a2 = a*a; + b2 = b*b; + c2 = a2-b2; + a4 = a2*a2; + b4 = b2*b2; + c4 = a4 - b4; + +/* READ WORLD MAGNETIC MODEL SPHERICAL HARMONIC COEFFICIENTS */ + c[0][0] = 0.0; + cd[0][0] = 0.0; + fgets(c_str, 80, wmmdat); + sscanf(c_str,"%f%s",&epoc,model); +S3: + fgets(c_str, 80, wmmdat); +/* CHECK FOR LAST LINE IN FILE */ + for (i=0; i<4 && (c_str[i] != '\0'); i++) + { + c_new[i] = c_str[i]; + c_new[i+1] = '\0'; + } + icomp = strcmp("9999", c_new); + if (icomp == 0) goto S4; +/* END OF FILE NOT ENCOUNTERED, GET VALUES */ + sscanf(c_str,"%d%d%f%f%f%f",&n,&m,&gnm,&hnm,&dgnm,&dhnm); + if (m <= n) + { + c[m][n] = gnm; + cd[m][n] = dgnm; + if (m != 0) + { + c[n][m-1] = hnm; + cd[n][m-1] = dhnm; + } + } + goto S3; + +/* CONVERT SCHMIDT NORMALIZED GAUSS COEFFICIENTS TO UNNORMALIZED */ +S4: + *snorm = 1.0; + for (n=1; n<=maxord; n++) + { + *(snorm+n) = *(snorm+n-1)*(float)(2*n-1)/(float)n; + j = 2; + for (m=0,D1=1,D2=(n-m+D1)/D1; D2>0; D2--,m+=D1) + { + k[m][n] = (float)(((n-1)*(n-1))-(m*m))/(float)((2*n-1)*(2*n-3)); + if (m > 0) + { + flnmj = (float)((n-m+1)*j)/(float)(n+m); + *(snorm+n+m*13) = *(snorm+n+(m-1)*13)*sqrt(flnmj); + j = 1; + c[n][m-1] = *(snorm+n+m*13)*c[n][m-1]; + cd[n][m-1] = *(snorm+n+m*13)*cd[n][m-1]; + } + c[m][n] = *(snorm+n+m*13)*c[m][n]; + cd[m][n] = *(snorm+n+m*13)*cd[m][n]; + } + fn[n] = (float)(n+1); + fm[n] = (float)n; + } + k[1][1] = 0.0; + + otime = oalt = olat = olon = -1000.0; + return (0); + +/*************************************************************************/ + +GEOMG1: + + dt = t - epoc; + if (otime < 0.0 && (dt < 0.0 || dt > 5.0)) { + *ti = epoc; /* pass back base time for diag msg */ + return (-1); + } + + pi = 3.14159265359; + dtr = pi/180.0; + rlon = glon*dtr; + rlat = glat*dtr; + srlon = sin(rlon); + srlat = sin(rlat); + crlon = cos(rlon); + crlat = cos(rlat); + srlat2 = srlat*srlat; + crlat2 = crlat*crlat; + sp[1] = srlon; + cp[1] = crlon; + +/* CONVERT FROM GEODETIC COORDS. TO SPHERICAL COORDS. */ + if (alt != oalt || glat != olat) + { + q = sqrt(a2-c2*srlat2); + q1 = alt*q; + q2 = ((q1+a2)/(q1+b2))*((q1+a2)/(q1+b2)); + ct = srlat/sqrt(q2*crlat2+srlat2); + st = sqrt(1.0-(ct*ct)); + r2 = (alt*alt)+2.0*q1+(a4-c4*srlat2)/(q*q); + r = sqrt(r2); + d = sqrt(a2*crlat2+b2*srlat2); + ca = (alt+d)/r; + sa = c2*crlat*srlat/(r*d); + } + if (glon != olon) + { + for (m=2; m<=maxord; m++) + { + sp[m] = sp[1]*cp[m-1]+cp[1]*sp[m-1]; + cp[m] = cp[1]*cp[m-1]-sp[1]*sp[m-1]; + } + } + aor = re/r; + ar = aor*aor; + br = bt = bp = bpp = 0.0; + for (n=1; n<=maxord; n++) + { + ar = ar*aor; + for (m=0,D3=1,D4=(n+m+D3)/D3; D4>0; D4--,m+=D3) + { +/* + COMPUTE UNNORMALIZED ASSOCIATED LEGENDRE POLYNOMIALS + AND DERIVATIVES VIA RECURSION RELATIONS +*/ + if (alt != oalt || glat != olat) + { + if (n == m) + { + *(p+n+m*13) = st**(p+n-1+(m-1)*13); + dp[m][n] = st*dp[m-1][n-1]+ct**(p+n-1+(m-1)*13); + goto S50; + } + if (n == 1 && m == 0) + { + *(p+n+m*13) = ct**(p+n-1+m*13); + dp[m][n] = ct*dp[m][n-1]-st**(p+n-1+m*13); + goto S50; + } + if (n > 1 && n != m) + { + if (m > n-2) *(p+n-2+m*13) = 0.0; + if (m > n-2) dp[m][n-2] = 0.0; + *(p+n+m*13) = ct**(p+n-1+m*13)-k[m][n]**(p+n-2+m*13); + dp[m][n] = ct*dp[m][n-1] - st**(p+n-1+m*13)-k[m][n]*dp[m][n-2]; + } + } +S50: +/* + TIME ADJUST THE GAUSS COEFFICIENTS +*/ + if (t != otime) + { + tc[m][n] = c[m][n]+dt*cd[m][n]; + if (m != 0) tc[n][m-1] = c[n][m-1]+dt*cd[n][m-1]; + } +/* + ACCUMULATE TERMS OF THE SPHERICAL HARMONIC EXPANSIONS +*/ + par = ar**(p+n+m*13); + if (m == 0) + { + temp1 = tc[m][n]*cp[m]; + temp2 = tc[m][n]*sp[m]; + } + else + { + temp1 = tc[m][n]*cp[m]+tc[n][m-1]*sp[m]; + temp2 = tc[m][n]*sp[m]-tc[n][m-1]*cp[m]; + } + bt = bt-ar*temp1*dp[m][n]; + bp += (fm[m]*temp2*par); + br += (fn[n]*temp1*par); +/* + SPECIAL CASE: NORTH/SOUTH GEOGRAPHIC POLES +*/ + if (st == 0.0 && m == 1) + { + if (n == 1) pp[n] = pp[n-1]; + else pp[n] = ct*pp[n-1]-k[m][n]*pp[n-2]; + parp = ar*pp[n]; + bpp += (fm[m]*temp2*parp); + } + } + } + if (st == 0.0) bp = bpp; + else bp /= st; +/* + ROTATE MAGNETIC VECTOR COMPONENTS FROM SPHERICAL TO + GEODETIC COORDINATES +*/ + bx = -bt*ca-br*sa; + by = bp; + bz = bt*sa-br*ca; +/* + COMPUTE DECLINATION (DEC), INCLINATION (DIP) AND + TOTAL INTENSITY (TI) +*/ + bh = sqrt((bx*bx)+(by*by)); + *ti = sqrt((bh*bh)+(bz*bz)); + *dec = atan2(by,bx)/dtr; + *mdp = atan2(bz,bh)/dtr; +/* + COMPUTE MAGNETIC GRID VARIATION IF THE CURRENT + GEODETIC POSITION IS IN THE ARCTIC OR ANTARCTIC + (I.E. GLAT > +55 DEGREES OR GLAT < -55 DEGREES) + + OTHERWISE, SET MAGNETIC GRID VARIATION TO -999.0 +*/ + *gv = -999.0; + if (fabs(glat) >= 55.) + { + if (glat > 0.0 && glon >= 0.0) *gv = *dec-glon; + if (glat > 0.0 && glon < 0.0) *gv = *dec+fabs(glon); + if (glat < 0.0 && glon >= 0.0) *gv = *dec+glon; + if (glat < 0.0 && glon < 0.0) *gv = *dec-fabs(glon); + if (*gv > +180.0) *gv -= 360.0; + if (*gv < -180.0) *gv += 360.0; + } + otime = t; + oalt = alt; + olat = glat; + olon = glon; + return (0); +} + +/*************************************************************************/ + +static int +geomag(FILE *wmmdat, int *maxdeg) +{ + return (E0000(wmmdat,0,maxdeg,0.0,0.0,0.0,0.0,NULL,NULL,NULL,NULL)); +} + +/*************************************************************************/ + +static int +geomg1(FILE *wmmdat, float alt, float glat, float glon, float t, +float *dec, float *mdp, float *ti, float *gv) +{ + return (E0000(wmmdat,1,NULL,alt,glat,glon,t,dec,mdp,ti,gv)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: magdecl.c,v $ $Date: 2004/10/12 15:21:48 $ $Revision: 1.6 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/marsmoon.c b/Common/Libraries/XEphemAstroLib/src/marsmoon.c new file mode 100644 index 0000000000000000000000000000000000000000..b09b13526509cc45c5aa1dbc54895a146d66f980 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/marsmoon.c @@ -0,0 +1,265 @@ +/* mars moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double JD, char *dir, MoonData md[M_NMOONS]); +static void moonradec (double msize, MoonData md[M_NMOONS]); +static void moonSVis (Obj *sop, Obj *mop, MoonData md[M_NMOONS]); +static void moonEVis (MoonData md[M_NMOONS]); +static void moonPShad (Obj *sop, Obj *mop, MoonData md[M_NMOONS]); +static void moonTrans (MoonData md[M_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData mmd[M_NMOONS] = { + {"Mars", NULL}, + {"Phobos", "I"}, + {"Deimos", "II"}, +}; +static double sizemjd; + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(317.61) +#define POLE_DEC degrad(52.85) + + +/* get mars info in md[0], moon info in md[1..M_NMOONS-1]. + * if !dir always use bruton model. + * if !mop caller just wants md[] for names + * N.B. we assume sop and mop are updated. + */ +void +marsm_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *mop, /* mars */ +double *sizep, /* mars's angular diam, rads */ +double *polera, double *poledec,/* pole location */ +MoonData md[M_NMOONS]) /* return info */ +{ + double JD, dmag; + + /* always copy back at least for name */ + memcpy (md, mmd, sizeof(mmd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !mop) { + if (mop) { + *sizep = sizemjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = mop->s_ra; + md[0].dec = mop->s_dec; + md[0].mag = get_mag(mop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from mop */ + *sizep = degrad(mop->s_size/3600.0); + + /* from Pasachoff/Menzel: brightest @ .6 AU */ + dmag = 5.0*log10(mop->s_edist + 0.4); + md[1].mag = 11.8 + dmag; + md[2].mag = 12.9 + dmag; + + /* get moon x,y,z from BDL if possible */ + if (!dir || use_bdl (JD, dir, md) < 0) { + int i; + for (i = 1; i < M_NMOONS; i++) + md[i].x = md[i].y = md[i].z = 0.0; + fprintf (stderr, "No mars model available\n"); + } + + /* set visibilities */ + moonSVis (sop, mop, md); + moonPShad (sop, mop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + memcpy (mmd, md, sizeof(mmd)); +} + +/* hunt for BDL file in dir[] and use if possible. + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[M_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define MRAU .00002269 /* Mars radius, AU */ + double x[M_NMOONS], y[M_NMOONS], z[M_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "mars.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "mars.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != M_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, M_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < M_NMOONS; i++) { + md[i].x = x[i-1]/MRAU; /* we want mars radii +E */ + md[i].y = -y[i-1]/MRAU; /* we want mars radii +S */ + md[i].z = -z[i-1]/MRAU; /* we want mars radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* given mars loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in mars radii,find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double msize, /* mars diameter, rads */ +MoonData md[M_NMOONS]) /* fill in RA and Dec */ +{ + double mrad = msize/2; + double mra = md[0].ra; + double mdec = md[0].dec; + int i; + + for (i = 1; i < M_NMOONS; i++) { + double dra = mrad * md[i].x; + double ddec = mrad * md[i].y; + md[i].ra = mra + dra; + md[i].dec = mdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *mop, /* mars */ +MoonData md[M_NMOONS]) +{ + double esd = sop->s_edist; + double eod = mop->s_edist; + double sod = mop->s_sdist; + double soa = degrad(mop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*mop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *mop, /* mars */ +MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (mop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: marsmoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.8 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/misc.c b/Common/Libraries/XEphemAstroLib/src/misc.c new file mode 100644 index 0000000000000000000000000000000000000000..504713733cd5f05429cbd1979dc6286fe4f5d7f7 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/misc.c @@ -0,0 +1,503 @@ +/* misc handy functions. + * every system has such, no? + * 4/20/98 now_lst() always just returns apparent time + */ + +#include +#include +#include +#include + +#include "astro.h" + +/* zero from loc for len bytes */ +void +zero_mem (void *loc, unsigned len) +{ + (void) memset (loc, 0, len); +} + +/* given min and max and an approximate number of divisions desired, + * fill in ticks[] with nicely spaced values and return how many. + * N.B. return value, and hence number of entries to ticks[], might be as + * much as 2 more than numdiv. + */ +int +tickmarks (double min, double max, int numdiv, double ticks[]) +{ + static int factor[] = { 1, 2, 5 }; + double minscale; + double delta; + double lo; + double v; + int n; + + minscale = fabs(max - min); + delta = minscale/numdiv; + for (n=0; n < (int)(sizeof(factor)/sizeof(factor[0])); n++) { + double scale; + double x = delta/factor[n]; + if ((scale = (pow(10.0, ceil(log10(x)))*factor[n])) < minscale) + minscale = scale; + } + delta = minscale; + + lo = floor(min/delta); + for (n = 0; (v = delta*(lo+n)) < max+delta; ) + ticks[n++] = v; + + return (n); +} + +/* given an Obj *, return its type as a descriptive string. + * if it's of type fixed then return its class description. + * N.B. we return the address of static storage -- do not free or change. + */ +char * +obj_description (Obj *op) +{ + typedef struct { + char classcode; + char *desc; + } CC; + +#define NFCM ((int)(sizeof(fixed_class_map)/sizeof(fixed_class_map[0]))) + static CC fixed_class_map[] = { + {'A', "Cluster of Galaxies"}, + {'B', "Binary System"}, + {'C', "Globular Cluster"}, + {'D', "Double Star"}, + {'F', "Diffuse Nebula"}, + {'G', "Spiral Galaxy"}, + {'H', "Spherical Galaxy"}, + {'J', "Radio"}, + {'K', "Dark Nebula"}, + {'L', "Pulsar"}, + {'M', "Multiple Star"}, + {'N', "Bright Nebula"}, + {'O', "Open Cluster"}, + {'P', "Planetary Nebula"}, + {'Q', "Quasar"}, + {'R', "Supernova Remnant"}, + {'S', "Star"}, + {'T', "Star-like Object"}, + {'U', "Cluster, with nebulosity"}, + {'V', "Variable Star"}, + {'Y', "Supernova"}, + }; + +#define NBCM ((int)(sizeof(binary_class_map)/sizeof(binary_class_map[0]))) + static CC binary_class_map[] = { + {'a', "Astrometric binary"}, + {'c', "Cataclysmic variable"}, + {'e', "Eclipsing binary"}, + {'x', "High-mass X-ray binary"}, + {'y', "Low-mass X-ray binary"}, + {'o', "Occultation binary"}, + {'s', "Spectroscopic binary"}, + {'t', "1-line spectral binary"}, + {'u', "2-line spectral binary"}, + {'v', "Spectrum binary"}, + {'b', "Visual binary"}, + {'d', "Visual binary, apparent"}, + {'q', "Visual binary, optical"}, + {'r', "Visual binary, physical"}, + {'p', "Exoplanet"}, + }; + + switch (op->o_type) { + case FIXED: + if (op->f_class) { + int i; + for (i = 0; i < NFCM; i++) + if (fixed_class_map[i].classcode == op->f_class) + return (fixed_class_map[i].desc); + } + return ("Fixed"); + case PARABOLIC: + return ("Solar - Parabolic"); + case HYPERBOLIC: + return ("Solar - Hyperbolic"); + case ELLIPTICAL: + return ("Solar - Elliptical"); + case BINARYSTAR: + if (op->f_class) { + int i; + for (i = 0; i < NFCM; i++) + if (binary_class_map[i].classcode == op->f_class) + return (binary_class_map[i].desc); + } + return ("Binary system"); + case PLANET: { + static char nsstr[16]; + static Obj *biop; + + if (op->pl_code == SUN) + return ("Star"); + if (op->pl_code == MOON) + return ("Moon of Earth"); + if (op->pl_moon == X_PLANET) + return ("Planet"); + if (!biop) + getBuiltInObjs (&biop); + sprintf (nsstr, "Moon of %s", biop[op->pl_code].o_name); + return (nsstr); + } + case EARTHSAT: + return ("Earth Sat"); + default: + printf ("obj_description: unknown type: 0x%x\n", op->o_type); + abort(); + return (NULL); /* for lint */ + } +} + +/* given a Now *, find the local apparent sidereal time, in hours. + */ +void +now_lst (Now *np, double *lstp) +{ + static double last_mjd = -23243, last_lng = 121212, last_lst; + double eps, lst, deps, dpsi; + + if (last_mjd == mjd && last_lng == lng) { + *lstp = last_lst; + return; + } + + utc_gst (mjd_day(mjd), mjd_hr(mjd), &lst); + lst += radhr(lng); + + obliquity(mjd, &eps); + nutation(mjd, &deps, &dpsi); + lst += radhr(dpsi*cos(eps+deps)); + + range (&lst, 24.0); + + last_mjd = mjd; + last_lng = lng; + *lstp = last_lst = lst; +} + +/* convert ra to ha, in range 0..2*PI + * need dec too if not already apparent. + */ +void +radec2ha (Now *np, double ra, double dec, double *hap) +{ + double ha, lst; + + if (epoch != EOD) + as_ap (np, epoch, &ra, &dec); + now_lst (np, &lst); + ha = hrrad(lst) - ra; + if (ha < 0) + ha += 2*PI; + *hap = ha; +} + +/* find Greenwich Hour Angle of the given object at the given time, 0..2*PI. + */ +void +gha (Now *np, Obj *op, double *ghap) +{ + Now n = *np; + Obj o = *op; + double tmp; + + n.n_epoch = EOD; + n.n_lng = 0.0; + n.n_lat = 0.0; + obj_cir (&n, &o); + now_lst (&n, &tmp); + tmp = hrrad(tmp) - o.s_ra; + if (tmp < 0) + tmp += 2*PI; + *ghap = tmp; +} + +/* given a circle and a line segment, find a segment of the line inside the + * circle. + * return 0 and the segment end points if one exists, else -1. + * We use a parametric representation of the line: + * x = x1 + (x2-x1)*t and y = y1 + (y2-y1)*t, 0 < t < 1 + * and a centered representation of the circle: + * (x - xc)**2 + (y - yc)**2 = r**2 + * and solve for the t's that work, checking for usual conditions. + */ +int +lc ( +int cx, int cy, int cw, /* circle bbox corner and width */ +int x1, int y1, int x2, int y2, /* line segment endpoints */ +int *sx1, int *sy1, int *sx2, int *sy2) /* segment inside the circle */ +{ + int dx = x2 - x1; + int dy = y2 - y1; + int r = cw/2; + int xc = cx + r; + int yc = cy + r; + int A = x1 - xc; + int B = y1 - yc; + double a = dx*dx + dy*dy; /* O(2 * 2**16 * 2**16) */ + double b = 2*(dx*A + dy*B); /* O(4 * 2**16 * 2**16) */ + double c = A*A + B*B - r*r; /* O(2 * 2**16 * 2**16) */ + double d = b*b - 4*a*c; /* O(2**32 * 2**32) */ + double sqrtd; + double t1, t2; + + if (d <= 0) + return (-1); /* containing line is purely outside circle */ + + sqrtd = sqrt(d); + t1 = (-b - sqrtd)/(2.0*a); + t2 = (-b + sqrtd)/(2.0*a); + + if (t1 >= 1.0 || t2 <= 0.0) + return (-1); /* segment is purely outside circle */ + + /* we know now that some part of the segment is inside, + * ie, t1 < 1 && t2 > 0 + */ + + if (t1 <= 0.0) { + /* (x1,y1) is inside circle */ + *sx1 = x1; + *sy1 = y1; + } else { + *sx1 = (int)(x1 + dx*t1); + *sy1 = (int)(y1 + dy*t1); + } + + if (t2 >= 1.0) { + /* (x2,y2) is inside circle */ + *sx2 = x2; + *sy2 = y2; + } else { + *sx2 = (int)(x1 + dx*t2); + *sy2 = (int)(y1 + dy*t2); + } + + return (0); +} + +/* compute visual magnitude using the H/G parameters used in the Astro Almanac. + * these are commonly used for asteroids. + */ +void +hg_mag ( +double h, double g, +double rp, /* sun-obj dist, AU */ +double rho, /* earth-obj dist, AU */ +double rsn, /* sun-earth dist, AU */ +double *mp) +{ + double psi_t, Psi_1, Psi_2, beta; + double c; + double tb2; + + c = (rp*rp + rho*rho - rsn*rsn)/(2*rp*rho); + if (c <= -1) + beta = PI; + else if (c >= 1) + beta = 0; + else + beta = acos(c);; + tb2 = tan(beta/2.0); + /* psi_t = exp(log(tan(beta/2.0))*0.63); */ + psi_t = pow (tb2, 0.63); + Psi_1 = exp(-3.33*psi_t); + /* psi_t = exp(log(tan(beta/2.0))*1.22); */ + psi_t = pow (tb2, 1.22); + Psi_2 = exp(-1.87*psi_t); + *mp = h + 5.0*log10(rp*rho); + if (Psi_1 || Psi_2) *mp -= 2.5*log10((1-g)*Psi_1 + g*Psi_2); +} + +/* given faintest desired mag, mag step magstp, image scale and object + * magnitude and size, return diameter to draw object, in pixels, or 0 if + * dimmer than fmag. + */ +int +magdiam ( +int fmag, /* faintest mag */ +int magstp, /* mag range per dot size */ +double scale, /* rads per pixel */ +double mag, /* magnitude */ +double size) /* rads, or 0 */ +{ + int diam, sized; + + if (mag > fmag) + return (0); + diam = (int)((fmag - mag)/magstp + 1); + sized = (int)(size/scale + 0.5); + if (sized > diam) + diam = sized; + + return (diam); +} + +/* computer visual magnitude using the g/k parameters commonly used for comets. + */ +void +gk_mag ( +double g, double k, +double rp, /* sun-obj dist, AU */ +double rho, /* earth-obj dist, AU */ +double *mp) +{ + *mp = g + 5.0*log10(rho) + 2.5*k*log10(rp); +} + +/* given a string convert to floating point and return it as a double. + * this is to isolate possible unportabilities associated with declaring atof(). + * it's worth it because atof() is often some 50% faster than sscanf ("%lf"); + */ +double +atod (char *buf) +{ + return (strtod (buf, NULL)); +} + +/* solve a spherical triangle: + * A + * / \ + * / \ + * c / \ b + * / \ + * / \ + * B ____________ C + * a + * + * given A, b, c find B and a in range 0..B..2PI and 0..a..PI, respectively.. + * cap and Bp may be NULL if not interested in either one. + * N.B. we pass in cos(c) and sin(c) because in many problems one of the sides + * remains constant for many values of A and b. + */ +void +solve_sphere (double A, double b, double cc, double sc, double *cap, double *Bp) +{ + double cb = cos(b), sb = sin(b); + double sA, cA = cos(A); + double x, y; + double ca; + double B; + + ca = cb*cc + sb*sc*cA; + if (ca > 1.0) ca = 1.0; + if (ca < -1.0) ca = -1.0; + if (cap) + *cap = ca; + + if (!Bp) + return; + + if (sc < 1e-7) + B = cc < 0 ? A : PI-A; + else { + sA = sin(A); + y = sA*sb*sc; + x = cb - ca*cc; + B = y ? (x ? atan2(y,x) : (y>0 ? PI/2 : -PI/2)) : (x>=0 ? 0 : PI); + } + + *Bp = B; + range (Bp, 2*PI); +} + +/* #define WANT_MATHERR if your system supports it. it gives SGI fits. + */ +#undef WANT_MATHERR +#if defined(WANT_MATHERR) +/* attempt to do *something* reasonable when a math function blows. + */ +matherr (xp) +struct exception *xp; +{ + static char *names[8] = { + "acos", "asin", "atan2", "pow", + "exp", "log", "log10", "sqrt" + }; + int i; + + /* catch-all */ + xp->retval = 0.0; + + for (i = 0; i < sizeof(names)/sizeof(names[0]); i++) + if (strcmp (xp->name, names[i]) == 0) + switch (i) { + case 0: /* acos */ + xp->retval = xp->arg1 >= 1.0 ? 0.0 : -PI; + break; + case 1: /* asin */ + xp->retval = xp->arg1 >= 1.0 ? PI/2 : -PI/2; + break; + case 2: /* atan2 */ + if (xp->arg1 == 0.0) + xp->retval = xp->arg2 < 0.0 ? PI : 0.0; + else if (xp->arg2 == 0.0) + xp->retval = xp->arg1 < 0.0 ? -PI/2 : PI/2; + else + xp->retval = 0.0; + break; + case 3: /* pow */ + /* FALLTHRU */ + case 4: /* exp */ + xp->retval = xp->o_type == OVERFLOW ? 1e308 : 0.0; + break; + case 5: /* log */ + /* FALLTHRU */ + case 6: /* log10 */ + xp->retval = xp->arg1 <= 0.0 ? -1e308 : 0; + break; + case 7: /* sqrt */ + xp->retval = 0.0; + break; + } + + return (1); /* suppress default error handling */ +} +#endif + +/* given the difference in two RA's, in rads, return their difference, + * accounting for wrap at 2*PI. caller need *not* first force it into the + * range 0..2*PI. + */ +double +delra (double dra) +{ + double fdra = fmod(fabs(dra), 2*PI); + + if (fdra > PI) + fdra = 2*PI - fdra; + return (fdra); +} + +/* return 1 if object is considered to be "deep sky", else 0. + * The only things deep-sky are fixed objects other than stars. + */ +int +is_deepsky (Obj *op) +{ + int deepsky = 0; + + if (is_type(op, FIXEDM)) { + switch (op->f_class) { + case 'T': + case 'B': + case 'D': + case 'M': + case 'S': + case 'V': + break; + default: + deepsky = 1; + break; + } + } + + return (deepsky); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: misc.c,v $ $Date: 2005/03/11 16:47:46 $ $Revision: 1.18 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/mjd.c b/Common/Libraries/XEphemAstroLib/src/mjd.c new file mode 100644 index 0000000000000000000000000000000000000000..b875a7b92a7a2886f51f6c6f8484d2c7fe338255 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/mjd.c @@ -0,0 +1,256 @@ +/* functions to manipulate the modified-julian-date used throughout xephem. */ + +#include +#include + +#include "astro.h" + +/* given a date in months, mn, days, dy, years, yr, + * return the modified Julian date (number of days elapsed since 1900 jan 0.5), + * *mjd. + */ +void +cal_mjd (int mn, double dy, int yr, double *mjp) +{ + static double last_mjd, last_dy; + static int last_mn, last_yr; + int b, d, m, y; + long c; + + if (mn == last_mn && yr == last_yr && dy == last_dy) { + *mjp = last_mjd; + return; + } + + m = mn; + y = (yr < 0) ? yr + 1 : yr; + if (mn < 3) { + m += 12; + y -= 1; + } + + if (yr < 1582 || (yr == 1582 && (mn < 10 || (mn == 10 && dy < 15)))) + b = 0; + else { + int a; + a = y/100; + b = 2 - a + a/4; + } + + if (y < 0) + c = (long)((365.25*y) - 0.75) - 694025L; + else + c = (long)(365.25*y) - 694025L; + + d = (int)(30.6001*(m+1)); + + *mjp = b + c + d + dy - 0.5; + + last_mn = mn; + last_dy = dy; + last_yr = yr; + last_mjd = *mjp; +} + +/* given the modified Julian date (number of days elapsed since 1900 jan 0.5,), + * mj, return the calendar date in months, *mn, days, *dy, and years, *yr. + */ +void +mjd_cal (double mj, int *mn, double *dy, int *yr) +{ + static double last_mj, last_dy; + static int last_mn, last_yr; + double d, f; + double i, a, b, ce, g; + + /* we get called with 0 quite a bit from unused epoch fields. + * 0 is noon the last day of 1899. + */ + if (mj == 0.0) { + *mn = 12; + *dy = 31.5; + *yr = 1899; + return; + } + + if (mj == last_mj) { + *mn = last_mn; + *yr = last_yr; + *dy = last_dy; + return; + } + + d = mj + 0.5; + i = floor(d); + f = d-i; + if (f == 1) { + f = 0; + i += 1; + } + + if (i > -115860.0) { + a = floor((i/36524.25)+.99835726)+14; + i += 1 + a - floor(a/4.0); + } + + b = floor((i/365.25)+.802601); + ce = i - floor((365.25*b)+.750001)+416; + g = floor(ce/30.6001); + *mn = (int)(g - 1); + *dy = ce - floor(30.6001*g)+f; + *yr = (int)(b + 1899); + + if (g > 13.5) + *mn = (int)(g - 13); + if (*mn < 2.5) + *yr = (int)(b + 1900); + if (*yr < 1) + *yr -= 1; + + last_mn = *mn; + last_dy = *dy; + last_yr = *yr; + last_mj = mj; +} + +/* given an mjd, set *dow to 0..6 according to which day of the week it falls + * on (0=sunday). + * return 0 if ok else -1 if can't figure it out. + */ +int +mjd_dow (double mj, int *dow) +{ + /* cal_mjd() uses Gregorian dates on or after Oct 15, 1582. + * (Pope Gregory XIII dropped 10 days, Oct 5..14, and improved the leap- + * year algorithm). however, Great Britian and the colonies did not + * adopt it until Sept 14, 1752 (they dropped 11 days, Sept 3-13, + * due to additional accumulated error). leap years before 1752 thus + * can not easily be accounted for from the cal_mjd() number... + */ + if (mj < -53798.5) { + /* pre sept 14, 1752 too hard to correct |:-S */ + return (-1); + } + *dow = ((long)floor(mj-.5) + 1) % 7;/* 1/1/1900 (mj 0.5) is a Monday*/ + if (*dow < 0) + *dow += 7; + return (0); +} + +/* given a year, return whether it is a leap year */ +int +isleapyear (int y) +{ + return ((y%4==0 && y%100!=0) || y%400==0); +} + +/* given a mjd, return the the number of days in the month. */ +void +mjd_dpm (double mj, int *ndays) +{ + static short dpm[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + int m, y; + double d; + + mjd_cal (mj, &m, &d, &y); + *ndays = (m==2 && isleapyear(y)) ? 29 : dpm[m-1]; +} + +/* given a mjd, return the year and number of days since 00:00 Jan 1 */ +void +mjd_dayno (double mj, int *yr, double *dy) +{ + double yrd; + int yri; + int dpy; + + mjd_year (mj, &yrd); + *yr = yri = (int)yrd; + dpy = isleapyear(yri) ? 366 : 365; + *dy = dpy*(yrd-yri); +} + +/* given a mjd, return the year as a double. */ +void +mjd_year (double mj, double *yr) +{ + static double last_mj, last_yr; + int m, y; + double d; + double e0, e1; /* mjd of start of this year, start of next year */ + + if (mj == last_mj) { + *yr = last_yr; + return; + } + + mjd_cal (mj, &m, &d, &y); + if (y == -1) y = -2; + cal_mjd (1, 1.0, y, &e0); + cal_mjd (1, 1.0, y+1, &e1); + *yr = y + (mj - e0)/(e1 - e0); + + last_mj = mj; + last_yr = *yr; +} + +/* given a decimal year, return mjd */ +void +year_mjd (double y, double *mjp) +{ + double e0, e1; /* mjd of start of this year, start of next year */ + int yf = (int)floor (y); + if (yf == -1) yf = -2; + + cal_mjd (1, 1.0, yf, &e0); + cal_mjd (1, 1.0, yf+1, &e1); + *mjp = e0 + (y - yf)*(e1-e0); +} + +/* round a time in days, *t, to the nearest second, IN PLACE. */ +void +rnd_second (double *t) +{ + *t = floor(*t*SPD+0.5)/SPD; +} + +/* given an mjd, truncate it to the beginning of the whole day */ +double +mjd_day(double mj) +{ + return (floor(mj-0.5)+0.5); +} + +/* given an mjd, return the number of hours past midnight of the whole day */ +double +mjd_hr(double mj) +{ + return ((mj-mjd_day(mj))*24.0); +} + +/* insure 0 <= *v < r. + */ +void +range (double *v, double r) +{ + *v -= r*floor(*v/r); +} + +/* insure 0 <= ra < 2PI and -PI/2 <= dec <= PI/2. if dec needs + * complimenting, reflect ra too + */ +void +radecrange (double *ra, double *dec) +{ + if (*dec < -PI/2) { + *dec = -PI - *dec; + *ra += PI; + } else if (*dec > PI/2) { + *dec = PI - *dec; + *ra += PI; + } + range (ra, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: mjd.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/moon.c b/Common/Libraries/XEphemAstroLib/src/moon.c new file mode 100644 index 0000000000000000000000000000000000000000..bf5f3768adc4304ec82778a71b2b8decd99e6546 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/moon.c @@ -0,0 +1,3467 @@ +/* geocentric moon polar coordinates re mean equinox and ecliptic of date + + S. L. Moshier + December, 1996 + +********************************************************************** + Adapted by Michael Sternberg + for xephem with minor modifications from the originals at: + ftp://ftp.std.com/pub/astronomy/selenog.zip + + Precision < 0.05" from -1369 to +2950. + Uses table lookup techniques to limit calls to trigonometric functions. + + NB: Uses International Earth Rotation System (IERS) which is + taken as equivalent to FK5 for the purposes of xephem. + + original files used: + chewtab.c mean.c mlr404.c + mlat404.c selenog.c + + changes: + added prototypes, grouped and cleaned up vars and #defines, + removed _MSC_VER #ifdefs, uniqed names in moonlr and moonlat, + included plantbl.h in .c file, dropped out librations for now. + + in struct plantbl, promoted "char *arg_tbl" to "short *". + reason: - more portable (BTW: this is the only place in xephem + where "signed char" would have been needed) + - using "short" costs a mere 7k memory but avoids core + dumps on a machine which we didn't anticipate. + +********************************************************************** + + + Residuals against JPL ephemeris DE404 (arc seconds) + +First date in file = 1221000.5 +Number of samples = 1053099 +Sampling interval = 1.515625 days + +Peak excursions from these mostly different test points +were consolidated with the above. They added .01" to a few +of the peak readings. +First date in file = 1221000.50 +Number of samples = 524290.0 +Sampling interval = 3.0 days + + + Julian Years Longitude Latitude Distance + 1 = 1.9 km + Peak RMS Ave Peak RMS Ave Peak RMS Ave + -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00 + -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00 + -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00 + 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00 + 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00 + 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00 + 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00 + 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00 + 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00 + 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00 + */ + +#include +#include +#include + +#include "astro.h" + +#define CHAR short + +#define NARGS 18 + +struct plantbl { + char max_harmonic[NARGS]; + char max_power_of_t; + CHAR *arg_tbl; + long *lon_tbl; + long *lat_tbl; + long *rad_tbl; + double distance; + double timescale; + double trunclvl; +}; + +static double mods3600 (double x); +static void mean_elements (double JED); +static int sscc (int k, double arg, int n); +static int g2plan (double J, struct plantbl *plan, double *pobj, int flag); +static double g1plan (double J, struct plantbl *plan); +static int gecmoon (double J, struct plantbl *lrtab, + struct plantbl *lattab, double *pobj); + +/* time points */ +#define MOSHIER_J2000 (2451545.0) + +#define MOSHIER_BEGIN (1221000.5 - MJD0) /* directly from above */ +#define MOSHIER_END (2798525.5 - MJD0) /* 2950.0; from libration table */ + + +static double Args[NARGS]; +static double LP_equinox; +static double NF_arcsec; +static double Ea_arcsec; +static double pA_precession; + + +/* This storage ought to be allocated dynamically. */ +double ss[NARGS][30]; +double cc[NARGS][30]; + +/* Time, in units of 10,000 Julian years from JED 2451545.0. */ +static double T; + +/* Conversion factors between degrees and radians */ +#define DTR 1.7453292519943295769e-2 +#define RTD 5.7295779513082320877e1 +#define RTS 2.0626480624709635516e5 /* arc seconds per radian */ +#define STR 4.8481368110953599359e-6 /* radians per arc second */ +#define AUKM 1.4959787e8 + + +static long lrtabl[] = { + 175667, 66453, 5249, -42, + 20057, 403, -2360, 6148, + -7644, 24646, -1273, 9127, + -1395, 1958, + 232, -289, + -97, 553, 69, 130, + -80, 6, + 129, -868, 26, -89, + 1042, 1172, 194, -112, + -47433, -241666, 224626, -103752, + 63419, 127606, + 2294, -691, -1827, -1254, + -1, -119, + 1057, 324, + 505, -195, 254, -641, + -36, 1008, -1082, -3, + -87, 122, + 161, 11, + 2, -106, + 29, -123, + -32, 41, + -524, -35, + 133, -595, + 225, 837, -108, -191, + -2294, 841, -340, -394, + -351, -1039, 238, -108, + -66, 21, + 1405, 869, 520, 2776, + -174, 71, + 425, 652, -1260, -80, + 249, 77, + -192, -17, + -97, 134, + -7, -54, + -802, -7436, -2824, 70869, + -35, 2481, + 1865, 1749, -2166, 2415, + 33, -183, + -835, 283, + 27, -45, + 56, 235, + 2, 718, + -1206, 275, -87, -158, + -7, -2534, 0, 10774, + 1, -324, + -208, 821, + 281, 1340, -797, 440, + 224, 72, + -65, -5, + -7, -44, + -48, 66, + -151, -40, + -41, -45, + 76, -108, + -18, 1202, 0, -2501, + 1438, -595, 900, 3040, + -3435, -5, + -100, -26, + 0, -13714, + -183, 68, + 453, -83, + -228, 325, + 97, 13, + 2, 105, + -61, 257, + 0, 57, + 88, -11, + -1, -8220, + 0, 275, + -43, -10, + -199, 105, + 1, -5849, 2, 24887, + -128, 48, + 712, 970, -1407, 845, + -266, 378, + 311, 1526, -1751, 27, + 0, -185858, + 133, 6383, + -108, 25, + -7, 1944, + 5, 390, + -11, 31, + 277, -384, 158, 72, + -81, -41, -13, -111, + -2332, -65804, -698, 505812, + 34, 1676716, -72, -6664384, + 154, -57, 52, 95, + -4, -5, + -7, 37, + -63, -32, + 4, 3349, 1, -14370, + 16, -83, + 0, -401, + 13, 3013, + 48, -20, + 0, 250, + 51, -79, + -7, -146, + 148, 9, + 0, -64, + -17, -59, + -67, -492, + -2, 2116601, + -12, -1848, + 8, -436, + -6, 324, 0, -1363, + -163, 9, + 0, -74, + 63, 8167, -29, 37587, + -22, -74501, + -71, 497, + -1, 551747, + -87, -22, + 0, -51, + -1, -463, + 0, -444, + 3, 89, + 15, -84, + -36, -6829, -5, -21663, + 0, 86058, + 0, -298, + -2, 751, -2, -1015, + 0, 69, + 1, -4989, 0, 21458, + 0, -330, + 0, -7, + 0, -226, + 0, -1407, 0, 2942, + 0, 66, + 0, 667, + 0, -155, + 0, 105, + 0, -107, + 0, -74, + 0, -52, + 0, 91, + 0, 59, + 0, 235, + -1, -1819, 0, 2470, + 71, 13, + 0, 1026, + 14, -54, + 0, -174, + -121, -19, + 0, -200, + 0, 3008, + -16, -8043, -10, -37136, + -3, 73724, + -157, -5, + 0, -854, + 8, 147, + -13, -893, + 0, 11869, + -23, -172, + 89, 14, + -1, 872, 0, -3744, + 11, 1606, + 0, -559, + -1, -2530, + 0, 454, + 0, -193, + -60, -10, + -82, -13, + -75, 6, + 36, 81, + 354, -162836, 148, -516569, + 4, 2054441, + 4, -94, + 39, 38, + 61, -30, + 2, 121, + -11, 590, + 62, 2108, + 0, -12242, + -476, -42, + -84, 113, + -394, 236, + 0, 276, + -49, 31, + 0, 86, + 1, -1313, + 1, 69, + -60, 88, + -46, 18, + 0, -63818, + 14, -93, + 113, 547, -618, 17, + -7, 12290, -1, -25679, + 0, 92, + -115, 50, + -48, 233, + 4, 1311, 1, -5567, + 3, 1251, + 29, 548, + -244, 257, + -2, 1825, + 42, 637, + -46, 68, + -62, 8, + 3, 110, + 445, -100, -316, -202, + 2925, -621, 763, 1495, + -169, -184, 20, -76, + -475, -138, 8, -141, + -197, 1351, -1284, 422, + -129, 1879, -102, 8382, + -9, 45864958, + -215, 1350, -1285, 422, + -481, -136, 8, -140, + 40, -53, + 2622, -543, 700, 1406, + 402, -95, -318, -194, + 122, 13, + -30, 147, + -121, -902, + 61, -23, + -63, 7, + 69, 479, + -224, 228, + -7, 500, + 0, -429, + -42, 193, + -92, 37, + 67, 5, + -350, -31, + 0, 67, + -55, -5, + 0, 47, + -36, 53, + 5, 561, + 0, -126, + 0, 871, + -52, 4, + -201, 116922, -22, 371352, + -12, -1473285, + 0, 87, + -164, 84, + -3, 422, + 30, 1434, + -26, 38, + 2, -1249943, + -404, -34, + -57, 79, + 5, 509, + 1, 131, + -344, 168, + 112, 22540, 30, 71218, + 18, -283983, + 0, -851, + 0, -1538, + 0, 1360, + -12, 51, + -48, 68, + 88, -20, + 1, 63, + 0, -568, + 303, 25, + 0, -122, + 87, 586, -606, -14, + 0, -100, + -85, 8, + -165, 54, + -45, 140, + 0, -54, + 4, -831, 1, 3495, + 31, 116, + -46, -11, + -371, 190, + -507, 399, + -2, 57, + -60, 36, + -198, -1174, -613, 4988, + -87, -4, + 141, 560, -276, 187, + 1876, 1379, 778, 4386, + 24, -15, + 167, -774, + -71, -9, + -62, 90, + 98, 580, -663, -7, + 34, -112, + 57, 15, + -355, -214, + -3240, -13605, 12229, -5723, + 3496, 7063, + 33, -51, + 1908, 1160, -226, 715, + 964, 1170, -1264, 623, + 14071, 5280, 5614, 3026, + 488, 1576, -2, 226395859, + 824, 1106, -1287, 617, + 1917, 1156, -214, 718, + 90, -97, + 12078, -2366, 3282, 6668, + -219, 9179, 593, 2015, + -282, -186, + 57, 25, + 31, -102, + -77, -4, + -268, -341, -7, -45, + -3, 74, + 15, -615, + -88, -7, + 234, -353, + 1, -119, + -163, -1159, -601, 4969, + 22, -58, + -17, -11434, + 17, 54, + 348, 348, -460, 434, + -371, 175, + -11, -204, + 4, -6440, + -5, -53, + -4, -14388, -37, -45231, + -7, 179562, + -44, 136, + -160, 49, + -101, 81, + -1, -188, + 0, 2, + -4, 12124, -11, -25217, + 71, 543, -557, -14, + -75, 526, + 0, 395274, + -233, -16, + 93, -20, + -43, 61, + 0, -1275, + 0, -824, + 1, -415, 0, 1762, + -261, 131, + -45, 64, + -297, -25, + 0, -17533, + -6, -56, + 21, 1100, + 1, 327, + 1, 66, + 23, -217, + -83, -7, + 83, 86847, 49, 275754, + -4, -1093857, + -46, 2, + 0, -24, + 0, -419, + 0, -5833, + 1, 506, + 0, -827, + -1, -377, + -11, -78, + 0, 131945, + -2, -334, + 1, -75, + 0, -72, + 0, -213, + -6, 5564, -2, -11618, + 0, 1790, + 0, -131, + 0, 6, + 0, -76, + 0, -130, + 0, -1115, 0, 4783, + 0, -195, + 0, -627, + 0, -55, + 0, -83, + 0, 163, + 0, -54, + 0, 82, + 0, 149, + 0, -754, 0, 1578, + 0, 138, + 0, 68, + 2, -2506, 0, 3399, + 0, -125, + 86, 16, + 0, -6350, 0, 27316, + 18, -63, + 0, -169, + -1, 46, + -136, -21, + 0, -239, + -30, -8788, -15, -40549, + -4, 80514, + -46, -8, + -168, -6, + -1, 536, 0, -2314, + 9, 148, + -13, -842, + -1, 307713, + -23, -175, + 95, 15, + 0, -297, + 11, 1341, + 0, -106, + 0, 5, + -4, 68, + -114, 10, + 32, 75, + 159, -130487, 98, -413967, + 2, 1647339, + -4, -85, + 100, -46, + 2, 95, + -11, 461, + 51, 1647, + 0, -32090, + -375, -33, + -65, 86, + -300, 180, + 0, 836, 0, -3576, + 0, -222, + 0, -993, + -41, 60, + 0, -4537, + -431, -34, + 2, 927, 0, -1931, + -79, 33, + -31, 144, + -1, 284, 0, -1207, + 0, 88, + -11, 315, + -178, 177, + -1, 144, + -58, 986, + 11, 86, + -228, -110, + 2636, -494, 718, 1474, + 28, -35, + -24, 782, -797, 277, + 2142, -1231, 856, 1853, + 74, 10797, 0, 23699298, + -21, 786, -796, 277, + 27, -34, + 2615, -494, 712, 1461, + -226, -109, + -11, 663, + 0, -123, + -169, 157, + -54, 266, + 0, -76, + 1, -634, 0, 2738, + -25, 106, + -63, 24, + 0, -372, + -221, -24, + 0, -5356, + 0, -219, + 0, 91, + -28, 7684, -6, 24391, + -1, -96795, + -77, 43, + 2, 95, + -47, -3, + 0, -84530, + 2, 310, + 1, 88, + 111, 19331, 32, 61306, + 4, -243595, + 0, 770, + 0, -103, + 0, 160, + 0, 356, + 0, 236, + -41, 354, + 39, 303, + 12, -56, + 873, -143, 238, 482, + -28, 35, + -93, 31, + -3, 7690211, + -91, 33, + -34, 43, + 824, -130, 226, 450, + -39, 341, + -1, -687, + 0, -303, + 11, -2935, 1, 12618, + 121, 924, 9, -1836, + -268, -1144, -678, 3685, + -69, -261, + 0, -4115951, + -69, -261, + 5, -151, + 0, -88, + 0, 91, + 0, 187, + 0, -1281, + 1, 77, + 1, 6059, 3, 19238, + 0, -76305, + 0, -90, + 0, -238, + 0, -962, 0, 4133, + 0, 96, + 0, 9483, + 0, 85, + 0, -688, + 0, -5607, + 0, 55, + 0, -752, + 0, 71, + 0, 303, + 0, -288, + 0, 57, + 0, 45, + 0, 189, + 0, 401, + 0, -1474, 0, 3087, + 0, -71, + 0, 2925, + 0, -75, + 0, 359, + 0, 55, + 1, -10155, 0, 43735, + 0, -572, + 0, -49, + 0, -660, + 0, -3591, 0, 7516, + 0, 668, + -1, -53, + -2, 384259, + 0, -163, + 0, -93, + 1, 112, + -95, -11528, -22, -36505, + -1, 145308, + 5, 145, + 0, 4047, + 1, 1483, 0, -6352, + 0, 991, 0, -4262, + 0, -93, + 0, -334, + 0, -160, + 0, -153, + -10, 127, + 51, 185, + -77, 18, + 56, 1217, 6, 1919574, + -74, 17, + 50, 180, + -5, 93, + 0, -104, + 0, -58, + -3, -353, -1, 1499, + 0, -229, + -15, 86, + 0, -93657, + 0, 1561, 0, -6693, + 0, -5839, + 1, 6791, 0, -29143, + 1, -701, 0, 3015, + 0, 2543, + 0, 693, + -1, 361233, + 0, -50, + 0, 946, + -1, -140, + -70, 407, + 0, -450995, + 0, -368, + 0, 54, + 0, -802, + 0, -96, + 0, 1274, 0, -5459, + 0, -614, 0, 2633, + 0, 685, + 0, -915, + 0, -85, + 0, 88, + 0, 106, + 0, 928, + 0, -726, 0, 1523, + 0, 5715, + 0, -4338, 0, 18706, + 0, -135, + 0, -132, + 0, -158, + 0, -98, + 0, 680, + -1, 138968, + 0, -192, + 0, -1698, + 0, -2734, 0, 11769, + 0, 4, + 0, 673, 0, -2891, + 0, 889, 0, -3821, + 0, 121, + -1, 143783, + 0, 231, + -9, 51, + 0, -57413, + 0, -483, + 0, -407, + 0, 676, 0, -2902, + 0, 531, + 0, 445, + 0, 672, + 0, 19336, + 0, 70, + 0, -39976, + 0, -68, + 0, 4203, + 0, -406, + 0, 446, + 0, -108, + 0, 79, + 0, 84, + 0, 734, + 0, 255, + 0, 3944, + 0, -655, 0, 2825, + 0, -109, + 0, -234, + 0, 57, + 0, 19773, + 0, -2013, + 0, 958, + 0, -521, + 0, -757, + 0, 10594, + 0, -9901, + 0, 199, + 0, -275, + 0, 64, + 0, 54, + 0, 165, + 0, 1110, + 0, -3286, + 0, 909, + 0, 54, + 0, 87, + 0, 258, + 0, 1261, + 0, -51, + 0, 336, + 0, -114, + 0, 2185, + 0, -850, + 0, 75, + 0, -69, + 0, -103, + 0, 776, + 0, -1238, + 0, 137, + 0, 67, + 0, -260, + 0, 130, + 0, 49, + 0, 228, + 0, 215, + 0, -178, + 0, 57, + 0, -133, +}; +static long lrtabb[] = {-1}; +static long lrtabr[] = { + -5422, -2120, 1077, 772, + 39, 75, 3, 10, + -468, -326, -113, -78, + -4, -2, + 1, 3, + 29, 24, 4, 2, + 1, 0, + -9, 7, -2, 0, + -32, -13, -3, -3, + 233, 126, 89, 77, + -33, 16, + 3, -3, 0, -1, + 2, 0, + 0, 1, + 4, 9, 1, 1, + 16, -1, 0, 18, + 3, 2, + 0, 0, + 0, 0, + 0, 0, + 0, 0, + 0, -1, + -22, -5, + 10, 3, 1, 1, + -15, 7, -2, 1, + -8, -11, -1, -2, + -1, 1, + 46, -58, 126, -23, + 4, 8, + 35, 8, 10, -17, + 0, 0, + 0, 0, + -10, -7, + 0, 0, + -23, 3, 151, 10, + -327, 0, + 4, -5, 6, 5, + 1, 0, + -1, -3, + 0, 0, + 0, 1, + -185, 0, + -3, -24, -5, -2, + -1062, 3, 4560, 0, + -3, 0, + 4, 1, + 8, -1, 2, 4, + 0, 1, + 0, -1, + 0, 0, + -1, 0, + 0, 1, + 0, 0, + -1, -1, + 277, 3, -583, 1, + -1, 4, -32, 7, + 0, -34, + 1, -1, + -23685, 0, + -1, -2, + -1, -7, + -5, -4, + 0, 2, + -2, 0, + -5, -1, + 35, 0, + 0, 2, + 202, 0, + 180, 0, + 0, -1, + -3, -6, + -193, 0, 770, -1, + -2, -4, + -32, 23, -28, -46, + -13, -9, + -54, 10, -1, -61, + -44895, 0, + -230, 5, + -1, -4, + -71, 0, + -15, 0, + 1, 0, + 15, 11, -3, 6, + 2, -3, 4, -1, + 2576, -138, -19881, -47, + -65906, -1, 261925, -4, + -2, -7, 4, -2, + 0, 0, + -1, 0, + 1, -3, + 172, -2, -727, 0, + 4, 1, + 324, 0, + -139, 1, + 1, 3, + -276, 0, + 5, 3, + 9, 0, + -1, 10, + -37, 0, + 5, -1, + 76, -10, + 1318810, 1, + 12, -1, + -38, 1, + -141, 0, 611, 0, + 0, -11, + 4, 0, + -627, 2, -2882, -3, + 5711, -2, + -48, -7, + 55294, 0, + 2, -7, + 31, 0, + 34, 0, + -259, 0, + -55, 2, + 6, 3, + -4273, 20, -13554, 3, + 53878, 0, + -46, 0, + -85, 0, 114, 0, + -45, 0, + -818, 0, 3520, 0, + 34, 0, + -157, 0, + 29, 0, + -878, 0, 1838, 0, + -428, 0, + 161, 0, + 24, 0, + 65, 0, + 19, 0, + 15, 0, + 12, 0, + -26, 0, + -14, 0, + -149, 0, + 584, 0, -793, 0, + 4, -23, + -238, 0, + -18, -5, + 45, 0, + -7, 42, + 79, 0, + -1723, 0, + 2895, -6, 13362, -4, + -26525, -1, + -2, 57, + 291, 0, + 52, -3, + -327, 5, + -2755, 0, + -63, 9, + 5, -33, + -261, -1, 1122, 0, + 621, -4, + -227, 0, + 1077, 0, + -167, 0, + 85, 0, + -4, 23, + -5, 32, + 3, 30, + -32, 14, + 64607, 141, 204958, 59, + -815115, 2, + -37, -1, + 15, -15, + 12, 24, + 48, -1, + 235, 4, + 843, -25, + 4621, 0, + -17, 191, + 45, 34, + 95, 159, + -132, 0, + 13, 20, + 32, 0, + -540, 0, + 29, 0, + 37, 25, + 8, 19, + 22127, 0, + -35, -5, + 232, -48, 7, 262, + 5428, 3, -11342, 1, + -45, 0, + -21, -49, + -100, -21, + -626, 1, 2665, 0, + 532, -2, + 235, -12, + -111, -105, + 774, 1, + -283, 17, + 29, 20, + 3, 27, + 47, -2, + -43, -192, -87, 136, + -269, -1264, 646, -330, + -79, 73, -33, -9, + 60, -205, 61, 4, + -584, -85, -182, -555, + -780, -57, -3488, -45, + -19818328, -4, + 583, 93, 182, 555, + -59, 208, -60, -4, + 23, 17, + 235, 1133, -608, 302, + 41, 174, 84, -137, + 6, -53, + 63, 13, + -392, 52, + -10, -27, + -3, -27, + 199, -31, + 99, 97, + -218, -3, + 209, 0, + 84, 18, + 16, 40, + 2, -30, + 14, -154, + 30, 0, + -2, 24, + -108, 0, + -24, -16, + 262, -2, + 55, 0, + -304, 0, + 2, 25, + 55112, 95, 175036, 11, + -694477, 5, + 41, 0, + -38, -76, + 199, 1, + 679, -14, + -17, -12, + 582619, 1, + -16, 191, + 38, 27, + -234, 2, + -60, 0, + 80, 163, + -10296, 48, -32526, 13, + 129703, 8, + -1366, 0, + -741, 0, + -646, 0, + 25, 6, + 33, 23, + 10, 43, + -31, 0, + -6, 0, + -12, 147, + 59, 0, + 287, -42, -7, 297, + -59, 0, + -4, -42, + -27, -81, + -69, -22, + 27, 0, + -423, -2, 1779, -1, + -57, 15, + 5, -23, + 94, 182, + -197, -250, + 24, 1, + -18, -30, + 581, -98, -2473, -303, + -2, 43, + -277, 70, -92, -136, + -681, 925, -2165, 384, + -8, -12, + 382, 82, + -4, 35, + -45, -31, + -286, 48, 3, -328, + -55, -17, + 8, -28, + -106, 175, + -6735, 1601, -2832, -6052, + 3495, -1730, + -25, -17, + -574, 944, -354, -112, + -579, 476, -308, -625, + -2411, 7074, -1529, 2828, + -1335, 247,-112000844, -1, + 545, -409, 305, 637, + 572, -950, 356, 106, + 48, 44, + 1170, 5974, -3298, 1624, + -4538, -106, -996, 294, + 92, -139, + -12, 28, + 50, 16, + 2, -38, + 169, -133, 22, -3, + 38, 1, + 305, 7, + 4, -44, + 175, 116, + 59, 1, + -573, 81, 2453, 297, + 29, 11, + 5674, -8, + -27, 9, + 173, -173, 215, 228, + -87, -184, + 102, -5, + 3206, 2, + -53, 2, + 7159, -7, 22505, -19, + -89344, -3, + 67, 22, + 24, 79, + -40, -50, + 94, 0, + 186, 0, + -6063, 0, 12612, -5, + -271, 35, 7, -278, + -479, -74, + 426754, 0, + 8, -116, + -10, -47, + -31, -22, + 645, 0, + 426, 0, + -213, 0, 903, 0, + -67, -133, + -33, -23, + 13, -152, + -9316, 0, + 29, -3, + -564, 11, + -167, 0, + -34, 0, + 114, 12, + 4, -44, + -44561, 42, -141493, 25, + 561256, -2, + -1, -24, + -261, 0, + 211, 0, + -4263, 0, + -262, 1, + 1842, 0, + 202, 0, + 41, -6, + 77165, 0, + 176, -1, + 39, 1, + -24, 0, + 118, 0, + -2991, -4, 6245, -1, + 46886, 0, + -75, 0, + -100, 0, + 40, 0, + 75, 0, + -618, 0, 2652, 0, + 112, 0, + 1780, 0, + 30, 0, + 49, 0, + 86, 0, + 33, 0, + -30, 0, + -95, 0, + 277, 0, -580, 0, + -35, 0, + -319, 0, + 1622, 1, -2201, 0, + 79, 0, + 10, -57, + 2363, 0, -10162, 0, + -41, -12, + 62, 0, + 30, 1, + -14, 89, + -2721, 0, + 5780, -19, 26674, -10, + -52964, -2, + -5, 30, + -4, 111, + -317, -1, 1369, 0, + 93, -6, + -564, 9, + -115913, 0, + -113, 15, + 10, -62, + 99, 0, + 891, -7, + 36, 0, + 108, 0, + -42, -2, + 7, 75, + -50, 21, + 86822, 104, 275441, 65, + -1096109, 1, + -56, 3, + 31, 66, + 63, -1, + 307, 7, + 1097, -34, + 17453, 0, + -22, 250, + 57, 43, + 120, 200, + -297, 0, 1269, 0, + 166, 0, + -662, 0, + 40, 28, + 1521, 0, + -23, 288, + 351, -2, -729, 0, + -22, -52, + -96, -21, + -139, -1, 589, 0, + 35, 0, + 210, 7, + -118, -119, + 62, 0, + -583, -26, + -42, 5, + -73, 152, + -330, -1759, 983, -479, + -23, -19, + -522, -15, -185, -533, + 739, 1559, -1300, 614, + -7332, 52, -15836758, 0, + 524, 16, 185, 532, + 23, 18, + 330, 1751, -978, 476, + 73, -151, + 519, 18, + 38, 0, + 105, 113, + -178, -37, + 26, 0, + 262, 1, -1139, 0, + 71, 17, + 16, 42, + 151, 0, + 16, -148, + 4147, 0, + 149, 0, + -30, 0, + 2980, 9, 9454, 2, + -37519, 0, + -28, -49, + 37, -1, + 2, -31, + 33870, 0, + -208, 1, + -59, 1, + -13105, 68, -41564, 21, + 165148, 3, + -1022, 0, + -40, 0, + -132, 0, + -228, 0, + 95, 0, + -138, -16, + -126, 16, + 24, 5, + -57, -346, 191, -94, + -14, -11, + -12, -37, + -3053364, -1, + 13, 36, + 17, 13, + 51, 327, -179, 90, + 138, 16, + 233, 0, + 62, 0, + 1164, 0, -5000, 0, + -407, 117, 770, 9, + -4, 1, 21, 2, + 1, 0, + -16869, 0, + -1, 0, + 1, 0, + 35, 0, + -78, 0, + 78, 0, + -533, 0, + -31, 1, + -2448, -6, -7768, -1, + 30812, 0, + 37, 0, + -227, 0, + 197, 0, -846, 0, + -77, 0, + 4171, 0, + -67, 0, + 287, 0, + 2532, 0, + -19, 0, + -40, 0, + -56, 0, + 128, 0, + 83, 0, + -45, 0, + -36, 0, + -92, 0, + -134, 0, + 714, 0, -1495, 0, + 32, 0, + -981, 0, + 15, 0, + -166, 0, + -59, 0, + 4923, 0, -21203, 0, + 246, 0, + 15, 0, + 104, 0, + 1683, 0, -3523, 0, + -865, 0, + -25, 1, + -186329, -1, + 10, 0, + 50, 0, + 53, 0, + 5455, -45, 17271, -10, + -68747, 0, + 69, -2, + -7604, 0, + -724, 1, 3101, 0, + -46, 0, 200, 0, + -44, 0, + 97, 0, + -53, 0, + 62, 0, + -54, -4, + 88, -24, + -9, -36, + -581, 27, -914711, 3, + 8, 35, + -86, 24, + 51, 3, + 48, 0, + 26, 0, + 133, 1, -577, 0, + 105, 0, + -3, -1, + 3194, 0, + 528, 0, -2263, 0, + 2028, 0, + -3266, 1, 14016, 0, + 10, 0, -41, 0, + -100, 0, + -32, 0, + -124348, 0, + 16, 0, + -325, 0, + 50, -1, + 1, 0, + -553, 0, + 0, 0, + 0, 0, + 2, 0, + -34, 0, + -444, 0, 1902, 0, + 9, 0, -37, 0, + 254, 0, + 156, 0, + -2, 0, + -35, 0, + -48, 0, + -368, 0, + 327, 0, -686, 0, + -2263, 0, + 1952, 0, -8418, 0, + -13, 0, + 52, 0, + 9, 0, + 21, 0, + -261, 0, + -62404, 0, + 0, 0, + 79, 0, + 1056, 0, -4547, 0, + -351, 0, + -305, 0, 1310, 0, + -1, 0, 6, 0, + 0, 0, + -55953, 0, + -80, 0, + 0, 0, + 168, 0, + -147, 0, + 127, 0, + -265, 0, 1138, 0, + -1, 0, + -9, 0, + -8, 0, + -5984, 0, + -22, 0, + -5, 0, + 0, 0, + 0, 0, + 127, 0, + -2, 0, + 10, 0, + -31, 0, + -29, 0, + -286, 0, + -98, 0, + -1535, 0, + 252, 0, -1087, 0, + 43, 0, + 4, 0, + -19, 0, + -7620, 0, + 29, 0, + -322, 0, + 203, 0, + 0, 0, + -3587, 0, + 10, 0, + 0, 0, + 94, 0, + 0, 0, + -1, 0, + -1, 0, + -315, 0, + 1, 0, + 0, 0, + 0, 0, + -30, 0, + -94, 0, + -460, 0, + 1, 0, + -114, 0, + 0, 0, + -746, 0, + 4, 0, + -23, 0, + 24, 0, + 0, 0, + -237, 0, + 1, 0, + 0, 0, + -18, 0, + 0, 0, + 0, 0, + -16, 0, + -76, 0, + -67, 0, + 0, 0, + -16, 0, + 0, 0, +}; +static CHAR lrargs[] = { + 0, 3, + 3, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 5, -5, 6, 2, + 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0, + 3, 1, 13, -1, 11, 2, 5, 1, + 2, 4, 5,-10, 6, 0, + 4, 2, 10, -2, 13, 14, 3,-23, 4, 1, + 3, 3, 2, -7, 3, 4, 4, 1, + 3, -1, 13, 18, 2,-16, 3, 2, + 2, 8, 2,-13, 3, 1, + 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0, + 3, -1, 13, 26, 2,-29, 3, 0, + 3, 1, 10, -1, 11, 2, 4, 1, + 4, 1, 10, -1, 13, 3, 2, -4, 3, 1, + 4, 1, 10, -1, 13, 3, 3, -4, 4, 0, + 3, -1, 10, 15, 2,-12, 3, 0, + 4, 2, 10, -3, 13, 24, 2,-24, 3, 0, + 3, -1, 10, 23, 2,-25, 3, 0, + 4, 1, 10, -1, 11, 1, 3, 1, 6, 0, + 4, 2, 10, -2, 11, 5, 2, -6, 3, 0, + 4, 2, 10, -2, 13, 6, 2, -8, 3, 0, + 4, -2, 10, 1, 13, 12, 2, -8, 3, 1, + 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1, + 4, -2, 10, 1, 13, 3, 1, -1, 3, 1, + 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0, + 4, 2, 10, -2, 13, 2, 3, -3, 5, 1, + 4, 2, 10, -2, 13, 6, 3, -8, 4, 0, + 4, -2, 10, 1, 13, 20, 2,-21, 3, 1, + 4, 1, 10, -1, 11, 1, 3, 1, 5, 0, + 1, 1, 6, 0, + 4, 2, 10, -2, 13, 5, 3, -6, 4, 0, + 3, 3, 2, -5, 3, 2, 5, 0, + 2, -1, 11, 1, 14, 1, + 4, 2, 10, -2, 13, 2, 3, -2, 5, 0, + 2, 1, 3, -2, 4, 1, + 4, 1, 10, -1, 11, 5, 2, -7, 3, 0, + 1, 1, 5, 0, + 2, 7, 3,-13, 4, 0, + 4, -2, 10, 1, 13, 15, 2,-13, 3, 0, + 4, 2, 10, -2, 13, 3, 2, -3, 3, 0, + 2, -2, 11, 2, 14, 1, + 3, 1, 10, 1, 12, -1, 13, 1, + 3, -1, 13, 21, 2,-21, 3, 0, + 2, 3, 2, -5, 3, 0, + 2, 2, 3, -4, 4, 1, + 2, 5, 2, -8, 3, 0, + 3, -1, 13, 23, 2,-24, 3, 0, + 2, 6, 3,-11, 4, 0, + 1, 2, 5, 0, + 2, 3, 3, -6, 4, 0, + 2, 5, 3, -9, 4, 0, + 4, 1, 10, -1, 11, 1, 3, -2, 5, 0, + 3, 2, 10, 2, 12, -2, 13, 1, + 2, 2, 2, -3, 3, 2, + 2, 4, 3, -7, 4, 0, + 2, 2, 13, -2, 11, 0, + 2, 3, 3, -5, 4, 0, + 2, 1, 2, -2, 3, 0, + 2, 2, 3, -3, 4, 0, + 4, 1, 10, -1, 11, 4, 2, -5, 3, 0, + 2, 1, 3, -1, 4, 0, + 2, 4, 2, -6, 3, 0, + 4, 2, 10, -2, 13, 2, 2, -2, 3, 0, + 3, 1, 10, -1, 11, 1, 2, 0, + 2, 1, 2, -1, 3, 0, + 3, 1, 12, 2, 13, -2, 11, 0, + 2, 5, 3, -8, 4, 0, + 2, 1, 3, -3, 5, 0, + 3, 2, 10, 1, 12, -2, 13, 1, + 2, 4, 3, -6, 4, 0, + 2, 1, 3, -2, 5, 1, + 2, 3, 3, -4, 4, 0, + 2, 3, 2, -4, 3, 1, + 2, 1, 10, -1, 13, 0, + 2, 1, 3, -1, 5, 0, + 2, 1, 3, -2, 6, 0, + 2, 2, 3, -2, 4, 0, + 2, 1, 3, -1, 6, 0, + 2, 8, 2,-14, 3, 0, + 3, 1, 3, 2, 5, -5, 6, 1, + 3, 5, 3, -8, 4, 3, 5, 1, + 1, 1, 12, 3, + 3, 3, 3, -8, 4, 3, 5, 1, + 3, 1, 3, -2, 5, 5, 6, 0, + 2, 8, 2,-12, 3, 0, + 2, 1, 3, 1, 5, 0, + 3, 2, 10, 1, 12, -2, 11, 1, + 2, 5, 2, -7, 3, 0, + 3, 1, 10, 1, 13, -2, 11, 0, + 2, 2, 2, -2, 3, 0, + 2, 5, 3, -7, 4, 0, + 3, 1, 12, -2, 13, 2, 11, 0, + 2, 4, 3, -5, 4, 0, + 2, 3, 3, -3, 4, 0, + 1, 1, 2, 0, + 3, 3, 10, 1, 12, -3, 13, 0, + 2, 2, 3, -4, 5, 0, + 2, 2, 3, -3, 5, 0, + 2, 2, 10, -2, 13, 0, + 2, 2, 3, -2, 5, 0, + 2, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -1, 13, 1, + 2, 2, 3, -1, 5, 0, + 2, 2, 3, -2, 6, 0, + 1, 2, 12, 2, + 3, -2, 10, 1, 11, 1, 14, 0, + 2, 2, 10, -2, 11, 0, + 2, 2, 2, -1, 3, 0, + 4, -2, 10, 2, 13, 1, 2, -1, 3, 0, + 2, 4, 2, -4, 3, 0, + 2, 3, 10, -3, 13, 0, + 4, -2, 10, 2, 13, 1, 3, -1, 5, 0, + 2, 3, 3, -3, 5, 0, + 3, 2, 10, -1, 12, -2, 13, 2, + 3, 3, 10, -1, 13, -2, 11, 0, + 1, 3, 12, 1, + 4, -2, 10, 2, 13, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, -2, 11, 1, + 2, 5, 2, -5, 3, 0, + 2, 4, 10, -4, 13, 0, + 2, 6, 2, -6, 3, 0, + 3, 2, 10, -2, 12, -2, 13, 1, + 3, 4, 10, -2, 13, -2, 11, 0, + 3, 2, 10, -2, 12, -2, 11, 0, + 2, 7, 2, -7, 3, 0, + 3, 2, 10, -3, 12, -2, 13, 0, + 2, 8, 2, -8, 3, 0, + 2, 9, 2, -9, 3, 0, + 2, 10, 2,-10, 3, 0, + 3, 2, 10, -4, 12, -1, 13, 0, + 3, 4, 10, -2, 12, -3, 13, 0, + 4, 4, 10, -1, 12, -1, 13, -2, 11, 0, + 3, 2, 10, -3, 12, -1, 13, 1, + 4, -2, 10, 1, 13, 3, 3, -2, 5, 0, + 3, 4, 10, -1, 12, -3, 13, 0, + 4, -2, 10, 1, 13, 3, 3, -3, 5, 0, + 4, 2, 10, -2, 12, 1, 13, -2, 11, 0, + 4, -2, 10, 1, 13, 2, 2, -1, 3, 0, + 3, 3, 10, -1, 12, -2, 11, 0, + 3, 4, 10, -1, 13, -2, 11, 0, + 3, 2, 10, -2, 12, -1, 13, 2, + 4, -2, 10, 1, 13, 2, 3, -1, 5, 0, + 3, 3, 10, -1, 12, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -3, 3, 0, + 4, -2, 10, 1, 13, 2, 3, -2, 5, 0, + 2, 4, 10, -3, 13, 0, + 4, -2, 10, 1, 13, 2, 3, -3, 5, 0, + 3, -2, 10, 1, 13, 1, 2, 0, + 4, 2, 10, -1, 12, 1, 13, -2, 11, 1, + 4, -2, 10, 1, 13, 2, 2, -2, 3, 0, + 2, 3, 12, -1, 13, 0, + 2, 3, 10, -2, 11, 0, + 2, 1, 10, -2, 12, 0, + 4, 4, 10, 1, 12, -1, 13, -2, 11, 0, + 3, -1, 13, 3, 2, -2, 3, 0, + 3, -1, 13, 3, 3, -2, 5, 0, + 3, -2, 10, 18, 2,-15, 3, 0, + 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 12, -1, 13, 2, + 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0, + 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0, + 4, 2, 10, -2, 13, 18, 2,-17, 3, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 6, 0, + 4, -2, 10, 1, 13, 2, 3, -2, 4, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 5, 0, + 2, 3, 10, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -4, 3, 0, + 4, -2, 10, 1, 13, 3, 3, -4, 4, 0, + 4, -2, 10, 1, 13, 1, 3, -2, 5, 0, + 3, 4, 10, 1, 12, -3, 13, 0, + 4, -2, 10, 1, 13, 1, 3, -3, 5, 0, + 3, -1, 13, 4, 2, -4, 3, 0, + 4, -2, 10, 1, 13, 1, 2, -1, 3, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 4, 0, + 4, -2, 10, 1, 13, 2, 3, -3, 4, 0, + 4, -2, 10, 1, 13, 3, 3, -5, 4, 0, + 3, 2, 10, 1, 13, -2, 11, 0, + 4, -2, 10, -1, 13, 1, 11, 1, 14, 0, + 4, -2, 10, 1, 13, 2, 2, -3, 3, 1, + 2, 2, 12, -1, 13, 1, + 3, 3, 10, 1, 12, -2, 11, 0, + 4, 2, 10, -1, 13, 2, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 3, 2, -5, 3, 0, + 2, 1, 10, -1, 12, 1, + 3, -1, 13, 3, 2, -3, 3, 0, + 3, -2, 10, 1, 13, 1, 5, 0, + 4, 2, 10, -1, 13, 1, 3, -2, 4, 0, + 3, -1, 13, 2, 3, -2, 5, 0, + 4, 2, 10, -1, 13, -1, 11, 1, 14, 0, + 3, -1, 13, 5, 3, -6, 4, 0, + 3, -2, 10, 1, 13, 1, 6, 0, + 3, -1, 10, 1, 3, -1, 5, 0, + 4, -2, 10, 1, 13, 8, 2,-13, 3, 1, + 3, -2, 10, 18, 2,-16, 3, 1, + 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1, + 4, 2, 10, -1, 13, 2, 5, -5, 6, 1, + 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 10, -1, 13, 2, + 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1, + 4, -2, 10, 1, 13, 2, 5, -5, 6, 1, + 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, -2, 13, 18, 2,-16, 3, 1, + 4, 2, 10, -1, 13, 8, 2,-13, 3, 1, + 3, -1, 10, 3, 2, -4, 3, 0, + 3, -1, 13, 6, 2, -8, 3, 0, + 3, -1, 13, 2, 3, -3, 5, 0, + 3, -1, 13, 6, 3, -8, 4, 0, + 3, 2, 10, -1, 13, 1, 6, 0, + 4, -2, 10, 1, 13, -1, 11, 1, 14, 0, + 4, -2, 10, 1, 13, 1, 3, -2, 4, 0, + 3, 2, 10, -1, 13, 1, 5, 0, + 3, 3, 10, 1, 12, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -5, 3, 0, + 4, -2, 10, 1, 13, 2, 3, -4, 4, 0, + 2, -1, 13, 1, 2, 0, + 4, 2, 10, -1, 13, 2, 2, -3, 3, 0, + 3, -1, 10, 1, 2, -1, 3, 0, + 3, -1, 13, 4, 2, -5, 3, 0, + 3, 2, 10, -3, 13, 2, 11, 0, + 4, 2, 10, -1, 13, 2, 3, -3, 4, 0, + 3, -1, 13, 2, 2, -2, 3, 0, + 4, 2, 10, -1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, 1, 12, 1, 13, -2, 11, 0, + 3, -2, 13, 18, 2,-15, 3, 0, + 2, 1, 12, -1, 13, 2, + 3, -1, 13, 1, 3, -1, 6, 0, + 4, 2, 10, -1, 13, 1, 3, -2, 5, 0, + 3, -1, 13, 2, 3, -2, 4, 0, + 3, -1, 13, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 3, 3, -4, 4, 0, + 1, 1, 10, 0, + 3, -1, 13, 3, 2, -4, 3, 0, + 3, -1, 13, 3, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 4, 0, + 3, -1, 13, 1, 3, -2, 5, 0, + 3, 2, 10, 1, 12, -1, 13, 2, + 3, 1, 12, 1, 13, -2, 11, 0, + 3, -1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 13, 2, 2, -2, 3, 0, + 3, -1, 13, 4, 2, -6, 3, 0, + 3, -1, 13, 2, 3, -3, 4, 0, + 3, 1, 13, 1, 2, -2, 3, 0, + 4, 2, 10, -1, 13, 3, 3, -3, 4, 0, + 2, 3, 13, -2, 11, 0, + 4, 2, 10, -1, 13, 4, 2, -5, 3, 0, + 3, 1, 10, 1, 2, -1, 3, 0, + 3, -1, 13, 2, 2, -3, 3, 1, + 3, 2, 10, 2, 12, -3, 13, 0, + 3, 2, 10, -1, 13, 1, 2, 0, + 3, 1, 13, 2, 3, -4, 4, 0, + 3, 1, 13, 3, 2, -5, 3, 0, + 2, 21, 2,-21, 3, 0, + 3, 1, 10, 1, 12, -2, 13, 1, + 4, 2, 10, -1, 13, 2, 3, -4, 5, 0, + 4, 2, 10, -1, 13, 7, 3,-10, 4, 0, + 2, -1, 13, 1, 5, 0, + 3, 1, 13, 1, 3, -2, 4, 0, + 4, 2, 10, -3, 13, 2, 3, -2, 5, 0, + 3, 1, 10, 1, 3, -2, 5, 0, + 3, 1, 13, -1, 11, 1, 14, 1, + 2, -1, 13, 1, 6, 0, + 4, 2, 10, -1, 13, 6, 3, -8, 4, 1, + 4, 2, 10, -1, 13, 2, 3, -3, 5, 1, + 3, -1, 13, 8, 3,-15, 4, 0, + 4, 2, 10, -1, 13, 6, 2, -8, 3, 0, + 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0, + 3, 1, 10, 3, 3, -4, 4, 0, + 3, 1, 10, 3, 2, -4, 3, 1, + 4, 1, 10, -1, 13, -1, 11, 2, 4, 0, + 3, -2, 13, 26, 2,-29, 3, 0, + 3, -1, 13, 8, 2,-13, 3, 0, + 3, -2, 13, 18, 2,-16, 3, 2, + 4, -1, 13, 3, 2, -7, 3, 4, 4, 0, + 3, 1, 13, 2, 5, -5, 6, 1, + 4, 1, 13, 4, 3, -8, 4, 3, 5, 1, + 1, 1, 13, 3, + 4, -1, 13, 4, 3, -8, 4, 3, 5, 1, + 3, -1, 13, 2, 5, -5, 6, 1, + 4, 1, 13, 3, 2, -7, 3, 4, 4, 0, + 2, 18, 2,-16, 3, 1, + 3, 1, 13, 8, 2,-13, 3, 2, + 2, 26, 2,-29, 3, 0, + 4, 1, 10, 1, 13, -1, 11, 2, 4, 0, + 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0, + 3, 1, 13, 8, 3,-15, 4, 1, + 4, 2, 10, -3, 13, 2, 3, -3, 5, 0, + 3, 1, 10, 1, 3, -1, 5, 0, + 2, 1, 13, 1, 6, 0, + 4, 2, 10, -1, 13, 5, 3, -6, 4, 0, + 3, 1, 10, 2, 3, -2, 4, 0, + 3, -1, 13, -1, 11, 1, 14, 1, + 4, 2, 10, -1, 13, 2, 3, -5, 6, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 5, 0, + 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0, + 3, -1, 13, 1, 3, -2, 4, 1, + 2, 1, 13, 1, 5, 0, + 4, 2, 10, -1, 13, 4, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 3, 2, -3, 3, 0, + 4, 2, 10, 2, 12, -1, 13, -2, 11, 0, + 2, 1, 10, 1, 12, 2, + 3, -1, 13, 3, 2, -5, 3, 0, + 3, -1, 13, 2, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 2, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 6, 0, + 3, 1, 10, 1, 12, -2, 11, 0, + 3, 2, 10, 2, 12, -1, 13, 1, + 3, 1, 13, 2, 2, -3, 3, 1, + 3, -1, 13, 1, 11, 1, 14, 0, + 2, 1, 13, -2, 11, 0, + 4, 2, 10, -1, 13, 5, 2, -6, 3, 0, + 3, -1, 13, 1, 2, -2, 3, 0, + 3, 1, 13, 2, 3, -3, 4, 0, + 3, 1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 13, 4, 2, -4, 3, 0, + 3, 2, 10, 1, 12, -3, 13, 1, + 3, 1, 13, 1, 3, -2, 5, 0, + 3, 1, 13, 3, 3, -4, 4, 0, + 3, 1, 13, 3, 2, -4, 3, 0, + 2, 1, 10, -2, 13, 0, + 4, 2, 10, -1, 13, 3, 3, -4, 5, 0, + 3, 1, 13, 1, 3, -1, 5, 0, + 3, 1, 13, 2, 3, -2, 4, 0, + 3, 1, 13, 1, 3, -1, 6, 0, + 4, 2, 10, -1, 13, 3, 3, -3, 5, 0, + 4, 2, 10, -1, 13, 6, 2, -7, 3, 0, + 2, 1, 12, 1, 13, 2, + 4, 2, 10, -1, 13, 3, 3, -2, 5, 0, + 4, 2, 10, 1, 12, -1, 13, -2, 11, 0, + 2, 1, 10, 2, 12, 0, + 2, 1, 10, -2, 11, 0, + 3, 1, 13, 2, 2, -2, 3, 0, + 3, 1, 12, -1, 13, 2, 11, 0, + 4, 2, 10, -1, 13, 5, 2, -5, 3, 0, + 3, 1, 13, 2, 3, -3, 5, 0, + 2, 2, 10, -3, 13, 0, + 3, 1, 13, 2, 3, -2, 5, 0, + 3, 1, 13, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -2, 13, 0, + 4, 2, 10, -1, 13, 6, 2, -6, 3, 0, + 2, 2, 12, 1, 13, 1, + 3, 2, 10, -1, 13, -2, 11, 0, + 3, 1, 10, -1, 12, -2, 11, 0, + 3, 2, 10, 1, 13, -4, 11, 0, + 3, 1, 13, 4, 2, -4, 3, 0, + 4, 2, 10, -1, 13, 7, 2, -7, 3, 0, + 3, 2, 10, -1, 12, -3, 13, 1, + 2, 3, 12, 1, 13, 0, + 4, 2, 10, -1, 12, -1, 13, -2, 11, 0, + 3, 1, 13, 5, 2, -5, 3, 0, + 4, 2, 10, -1, 13, 8, 2, -8, 3, 0, + 3, 2, 10, -2, 12, -3, 13, 0, + 4, 2, 10, -1, 13, 9, 2, -9, 3, 0, + 3, 4, 10, -3, 12, -2, 13, 0, + 2, 2, 10, -4, 12, 0, + 3, 4, 10, -2, 12, -2, 13, 1, + 2, 6, 10, -4, 13, 0, + 3, 4, 10, -1, 12, -2, 11, 0, + 2, 2, 10, -3, 12, 1, + 3, 3, 10, -2, 12, -1, 13, 0, + 3, -2, 10, 3, 3, -2, 5, 0, + 3, 4, 10, -1, 12, -2, 13, 1, + 3, -2, 10, 3, 3, -3, 5, 0, + 2, 5, 10, -3, 13, 0, + 3, -2, 10, 4, 2, -4, 3, 0, + 3, -2, 10, 2, 2, -1, 3, 0, + 2, 4, 10, -2, 11, 0, + 2, 2, 10, -2, 12, 2, + 3, -2, 10, 3, 3, -2, 4, 0, + 3, -2, 10, 2, 3, -1, 5, 0, + 3, 3, 10, -1, 12, -1, 13, 1, + 3, -2, 10, 3, 2, -3, 3, 0, + 3, -2, 10, 2, 3, -2, 5, 0, + 2, 4, 10, -2, 13, 0, + 3, -2, 10, 2, 3, -3, 5, 0, + 2, -2, 10, 1, 2, 0, + 4, 2, 10, -1, 12, 2, 13, -2, 11, 0, + 3, -2, 10, 2, 2, -2, 3, 0, + 3, 3, 10, 1, 13, -2, 11, 0, + 3, 4, 10, 1, 12, -2, 11, 0, + 4, 2, 10, -1, 12, -1, 11, 1, 14, 0, + 4, -2, 10, -1, 13, 18, 2,-15, 3, 0, + 4, 2, 10, 3, 3, -8, 4, 3, 5, 0, + 2, 2, 10, -1, 12, 2, + 4, -2, 10, 5, 3, -8, 4, 3, 5, 0, + 4, 2, 10, -1, 13, 18, 2,-17, 3, 0, + 3, -2, 10, 1, 3, -1, 6, 0, + 3, -2, 10, 2, 3, -2, 4, 0, + 3, -2, 10, 1, 3, -1, 5, 0, + 2, 3, 10, -1, 13, 0, + 3, -2, 10, 3, 2, -4, 3, 0, + 3, -2, 10, 3, 3, -4, 4, 0, + 3, -2, 10, 1, 3, -2, 5, 0, + 3, 4, 10, 1, 12, -2, 13, 1, + 4, 2, 10, -1, 12, -2, 13, 2, 11, 0, + 3, -2, 10, 1, 2, -1, 3, 0, + 3, -2, 10, 2, 3, -3, 4, 0, + 3, 2, 10, 2, 13, -2, 11, 0, + 3, -2, 10, 2, 2, -3, 3, 0, + 2, 2, 12, -2, 13, 1, + 3, 2, 10, 2, 3, -4, 4, 0, + 3, 2, 10, 3, 2, -5, 3, 0, + 3, 1, 10, -1, 12, 1, 13, 1, + 3, -2, 13, 3, 2, -3, 3, 0, + 2, -2, 10, 1, 5, 0, + 3, 2, 10, 1, 3, -2, 4, 0, + 3, -2, 13, 2, 3, -2, 5, 0, + 3, 2, 10, -1, 11, 1, 14, 0, + 4, 4, 10, -2, 13, 2, 3, -3, 5, 0, + 3, -2, 10, 8, 2,-13, 3, 0, + 4, -2, 10, -1, 13, 18, 2,-16, 3, 1, + 4, -2, 10, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, 4, 3, -8, 4, 3, 5, 1, + 1, 2, 10, 3, + 4, -2, 10, 4, 3, -8, 4, 3, 5, 1, + 4, 2, 10, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, -1, 13, 18, 2,-16, 3, 1, + 3, 2, 10, 8, 2,-13, 3, 0, + 3, -2, 10, -1, 11, 1, 14, 0, + 4, 4, 10, -2, 13, 2, 3, -2, 5, 0, + 3, -2, 10, 1, 3, -2, 4, 0, + 2, 2, 10, 1, 5, 0, + 4, 4, 10, -2, 13, 3, 2, -3, 3, 0, + 3, 3, 10, 1, 12, -1, 13, 1, + 3, -2, 10, 3, 2, -5, 3, 0, + 3, -2, 10, 2, 3, -4, 4, 0, + 3, 4, 10, 2, 12, -2, 13, 0, + 3, 2, 10, 2, 2, -3, 3, 0, + 3, 2, 10, -2, 13, 2, 11, 0, + 3, 2, 10, 1, 2, -1, 3, 0, + 4, 2, 10, 1, 12, 2, 13, -2, 11, 0, + 2, 1, 12, -2, 13, 2, + 3, 2, 10, 1, 3, -2, 5, 0, + 3, -2, 13, 1, 3, -1, 5, 0, + 3, 2, 10, 3, 2, -4, 3, 0, + 2, 1, 10, 1, 13, 0, + 3, 2, 10, 1, 3, -1, 5, 0, + 3, 2, 10, 2, 3, -2, 4, 0, + 2, 2, 10, 1, 12, 2, + 2, 1, 12, -2, 11, 0, + 3, -2, 13, 1, 2, -1, 3, 0, + 3, 1, 10, -1, 13, 2, 11, 0, + 3, 2, 10, 2, 2, -2, 3, 0, + 3, 1, 10, 1, 12, -3, 13, 0, + 3, 2, 13, -1, 11, 1, 14, 0, + 3, 2, 10, 2, 3, -3, 5, 0, + 3, 2, 10, 6, 2, -8, 3, 0, + 3, -3, 13, 18, 2,-16, 3, 1, + 3, 2, 13, 2, 5, -5, 6, 0, + 4, 2, 13, 4, 3, -8, 4, 3, 5, 0, + 1, 2, 13, 0, + 4, -2, 13, 4, 3, -8, 4, 3, 5, 0, + 3, -2, 13, 2, 5, -5, 6, 0, + 3, 1, 13, 18, 2,-16, 3, 1, + 3, -2, 13, -1, 11, 1, 14, 0, + 3, 2, 10, 2, 3, -2, 5, 0, + 3, 2, 10, 3, 2, -3, 3, 0, + 3, 1, 10, 1, 12, 1, 13, 1, + 2, 2, 10, 2, 12, 1, + 2, 1, 11, 1, 14, 1, + 4, -1, 13, -2, 11, 18, 2,-16, 3, 0, + 1, 2, 11, 0, + 4, -1, 13, 2, 11, 18, 2,-16, 3, 0, + 2, -3, 11, 1, 14, 0, + 3, 2, 13, 1, 2, -1, 3, 0, + 3, 2, 10, 4, 2, -4, 3, 0, + 3, 2, 10, 1, 12, -4, 13, 0, + 2, 1, 10, -3, 13, 0, + 3, 2, 13, 1, 3, -1, 5, 0, + 2, 1, 12, 2, 13, 2, + 3, 1, 10, 2, 12, 1, 13, 0, + 3, 1, 10, -1, 13, -2, 11, 0, + 2, 1, 12, 2, 11, 1, + 3, 2, 10, 5, 2, -5, 3, 0, + 2, 2, 10, -4, 13, 0, + 3, 2, 10, 6, 2, -6, 3, 0, + 2, 2, 12, 2, 13, 0, + 3, 2, 10, -2, 13, -2, 11, 0, + 2, 2, 12, 2, 11, 0, + 2, 2, 10, -4, 11, 0, + 3, 2, 10, 7, 2, -7, 3, 0, + 3, 2, 10, -1, 12, -4, 13, 0, + 4, 2, 10, -1, 12, -2, 13, -2, 11, 0, + 3, 2, 10, 8, 2, -8, 3, 0, + 3, 2, 10, 9, 2, -9, 3, 0, + 3, 4, 10, -3, 12, -1, 13, 0, + 3, 6, 10, -1, 12, -3, 13, 0, + 3, 4, 10, -2, 12, -1, 13, 1, + 3, 5, 10, -1, 12, -2, 13, 0, + 2, 6, 10, -3, 13, 0, + 4, 4, 10, -1, 12, 1, 13, -2, 11, 0, + 3, 2, 10, -3, 12, 1, 13, 0, + 2, 3, 10, -2, 12, 0, + 3, 4, 10, -1, 12, -1, 13, 1, + 2, 5, 10, -2, 13, 0, + 3, 6, 10, 1, 12, -3, 13, 0, + 3, 4, 10, 1, 13, -2, 11, 0, + 3, 2, 10, -2, 12, 1, 13, 1, + 2, 3, 10, -1, 12, 0, + 4, -2, 10, -1, 13, 2, 3, -2, 5, 0, + 2, 4, 10, -1, 13, 0, + 4, 2, 10, -2, 12, -1, 13, 2, 11, 0, + 3, 4, 10, -3, 13, 2, 11, 0, + 4, -2, 10, -1, 13, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, 1, 13, 2, + 4, -2, 10, -1, 13, 1, 3, -1, 5, 0, + 1, 3, 10, 0, + 3, 4, 10, 1, 12, -1, 13, 1, + 4, 2, 10, -1, 12, -1, 13, 2, 11, 1, + 4, -2, 10, -1, 13, 1, 2, -1, 3, 0, + 3, 2, 10, 3, 13, -2, 11, 0, + 2, 2, 12, -3, 13, 0, + 3, 1, 10, -1, 12, 2, 13, 0, + 4, 2, 10, 1, 13, -1, 11, 1, 14, 0, + 4, -2, 10, -2, 13, 18, 2,-16, 3, 0, + 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0, + 2, 2, 10, 1, 13, 1, + 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, 18, 2,-16, 3, 0, + 4, -2, 10, -1, 13, -1, 11, 1, 14, 0, + 4, 4, 10, -1, 13, 2, 3, -2, 5, 0, + 4, 4, 10, -1, 13, 3, 2, -3, 3, 0, + 2, 3, 10, 1, 12, 1, + 3, 4, 10, 2, 12, -1, 13, 0, + 4, 2, 10, -1, 13, 1, 11, 1, 14, 0, + 3, 2, 10, -1, 13, 2, 11, 0, + 2, 1, 12, -3, 13, 1, + 2, 1, 10, 2, 13, 0, + 3, 2, 10, 1, 12, 1, 13, 1, + 3, 1, 12, -1, 13, -2, 11, 1, + 2, 1, 10, 2, 11, 0, + 4, 2, 10, 1, 12, -1, 13, 2, 11, 0, + 1, 3, 13, 0, + 4, 2, 10, 1, 13, 2, 3, -2, 5, 0, + 3, 1, 10, 1, 12, 2, 13, 0, + 3, 2, 10, 2, 12, 1, 13, 0, + 3, 1, 13, 1, 11, 1, 14, 0, + 2, 1, 13, 2, 11, 0, + 3, 1, 10, 1, 12, 2, 11, 0, + 4, 2, 10, 2, 12, -1, 13, 2, 11, 0, + 2, 1, 13, -4, 11, 0, + 2, 1, 10, -4, 13, 0, + 2, 1, 12, 3, 13, 1, + 3, 1, 12, 1, 13, 2, 11, 1, + 2, 2, 10, -5, 13, 0, + 3, 2, 10, -3, 13, -2, 11, 0, + 3, 2, 10, -1, 13, -4, 11, 0, + 3, 6, 10, -2, 12, -2, 13, 0, + 2, 4, 10, -3, 12, 0, + 3, 6, 10, -1, 12, -2, 13, 0, + 2, 4, 10, -2, 12, 1, + 2, 6, 10, -2, 13, 0, + 2, 4, 10, -1, 12, 1, + 2, 5, 10, -1, 13, 0, + 3, 6, 10, 1, 12, -2, 13, 0, + 4, 4, 10, -1, 12, -2, 13, 2, 11, 0, + 3, 4, 10, 2, 13, -2, 11, 0, + 3, 2, 10, -2, 12, 2, 13, 0, + 1, 4, 10, 0, + 3, 2, 10, -2, 12, 2, 11, 0, + 3, 4, 10, -2, 13, 2, 11, 0, + 3, 2, 10, -1, 12, 2, 13, 1, + 2, 3, 10, 1, 13, 0, + 2, 4, 10, 1, 12, 1, + 3, 2, 10, -1, 12, 2, 11, 1, + 3, 3, 10, -1, 13, 2, 11, 0, + 2, 2, 10, 2, 13, 0, + 3, 3, 10, 1, 12, 1, 13, 0, + 3, 2, 10, 1, 11, 1, 14, 0, + 2, 2, 10, 2, 11, 0, + 2, 1, 12, -4, 13, 0, + 2, 1, 10, 3, 13, 0, + 3, 2, 10, 1, 12, 2, 13, 1, + 3, 1, 12, -2, 13, -2, 11, 0, + 3, 1, 10, 1, 13, 2, 11, 0, + 3, 2, 10, 1, 12, 2, 11, 0, + 1, 4, 13, 0, + 3, 1, 10, 1, 12, 3, 13, 0, + 2, 2, 13, 2, 11, 0, + 4, 1, 10, 1, 12, 1, 13, 2, 11, 0, + 1, 4, 11, 0, + 2, 1, 12, 4, 13, 0, + 3, 1, 12, 2, 13, 2, 11, 0, + 3, 2, 10, -4, 13, -2, 11, 0, + 3, 6, 10, -2, 12, -1, 13, 0, + 2, 8, 10, -3, 13, 0, + 3, 6, 10, -1, 12, -1, 13, 0, + 3, 4, 10, -2, 12, 1, 13, 0, + 2, 6, 10, -1, 13, 0, + 3, 4, 10, -1, 12, 1, 13, 1, + 3, 6, 10, 1, 12, -1, 13, 0, + 4, 4, 10, -1, 12, -1, 13, 2, 11, 0, + 3, 2, 10, -2, 12, 3, 13, 0, + 2, 4, 10, 1, 13, 0, + 3, 4, 10, -1, 13, 2, 11, 0, + 3, 2, 10, -1, 12, 3, 13, 0, + 3, 4, 10, 1, 12, 1, 13, 0, + 4, 2, 10, -1, 12, 1, 13, 2, 11, 0, + 2, 2, 10, 3, 13, 0, + 3, 2, 10, 1, 13, 2, 11, 0, + 3, 2, 10, -1, 13, 4, 11, 0, + 3, 2, 10, 1, 12, 3, 13, 0, + 3, 1, 12, -3, 13, -2, 11, 0, + 3, 1, 10, 2, 13, 2, 11, 0, + 4, 2, 10, 1, 12, 1, 13, 2, 11, 0, + 1, 5, 13, 0, + 2, 3, 13, 2, 11, 0, + 2, 1, 13, 4, 11, 0, + 3, 1, 12, 3, 13, 2, 11, 0, + 2, 8, 10, -2, 13, 0, + 2, 6, 10, -1, 12, 0, + 1, 6, 10, 0, + 3, 6, 10, -2, 13, 2, 11, 0, + 3, 4, 10, -1, 12, 2, 13, 0, + 3, 4, 10, -1, 12, 2, 11, 0, + 2, 4, 10, 2, 13, 0, + 2, 4, 10, 2, 11, 0, + 3, 2, 10, -1, 12, 4, 13, 0, + 3, 4, 10, 1, 12, 2, 13, 0, + 4, 2, 10, -1, 12, 2, 13, 2, 11, 0, + 2, 2, 10, 4, 13, 0, + 3, 2, 10, 2, 13, 2, 11, 0, + 2, 2, 10, 4, 11, 0, + 1, 6, 13, 0, + 2, 4, 13, 2, 11, 0, + 2, 2, 13, 4, 11, 0, + 3, 6, 10, -1, 12, 1, 13, 0, + 2, 6, 10, 1, 13, 0, + 2, 4, 10, 3, 13, 0, + 3, 4, 10, 1, 13, 2, 11, 0, + 2, 2, 10, 5, 13, 0, + 3, 2, 10, 3, 13, 2, 11, 0, + -1 +}; + +static long btabr[] = {-1}; +static long btabb[] = {-1}; +static long btabl[] = { + -3, -4, + 4, -1856, 0, 8043, + -9, -1082, + -1, -310, + -1, -522, + -330, -1449, -853, 4656, + -66, 7, + -1, 9996928, + -66, 6, + 23, 183, + 0, 173, + 0, -56, + 0, 50, + 0, -785, + 1, 51, + 0, -60, + 1, 11843, 0, -50754, + 0, 1834, 1, -7910, + 0, -48060, + 1, 56, + 0, 13141, -1, -56318, + 0, 2541, + -1, -649, + -133, 778, + -46, 8, + 1, 1665737, + -47, 7, + 0, 65, + 0, 45, + 0, -138, + 0, -1005, + 0, -2911, + 0, -47, + 0, 96, + 0, -394, + 2, 76, + 2, -17302, 0, 74337, + 0, -101, + 0, 58, + 0, -171, + 0, -77, + 0, -1283, 0, 2686, + 0, -55, + 0, 99, + 0, 55, + 0, 397, + 0, 540, + 0, 626, + -1, -5188, 0, 10857, + 0, -216, + -2, -123, + 0, 6337, + 2, 224, + -152, -23472, -29, -74336, 0, 295775, + -20, 149, + -2, 84, + 9, 304, + 0, -3051, + -70, -6, + -57, 34, + 0, -638, + 0, -201, + -73, 9, + 0, -100, + -101, -8, + 0, -57, + 0, -207, + -3, 80, + -45, 45, + -5, 102, + -59, -23, + 52, 201, + -48, 233, -220, 71, + 4, 2810, 0, 6236541, + -61, 218, -216, 67, + 51, 201, + -59, -23, + -144, -837, -457, 3029, + -45, 42, + -15, 73, + -6, -169, + 0, 135, + -64, -7, + 0, -16245, + 0, -81, + -74, -10, + 0, 702, 0, -3013, + 0, -5889, + 1, 141, + 58, 9598, 12, 30443, 1, -120946, + -1, -84, + -2, 11246, -1, -48391, + 0, 1393, + 0, 200, + -136, -17, + 0, 558, + -64, -8, + 0, -71, + 0, 317577, + -28, 183, + 1, 219, + 0, 421, + 0, -133, + 501, -139, + 3, 354, + -101, -13, + 74, 7, + 144, -84, + 59, -2, + 1, 64, + -2931, 12559, -4641, 2638, -303, -2058, + -13, -100, -123, -79, + -19214, 6084, 1494, 26993, 15213, -82219, + 42, 52, 48, -101, + -53, -4, + 4, 47, + 58, -131, + 46, 14, + -21, -6, + -1311, -8791, 10198, -4185, 2815, 5640, + 167, 422, -229, 83, + 3140, 39, 1221, 120, 96, -30, + -1, 184612405, + 187, 416, -226, 81, + -1985, -10083, 9983, -4464, 2807, 5643, + -21, -9, + 113, -367, + 120, 580, -667, 27, + 8, 66, + -56, -6, + 337, 95, + -87, 3303, + -1, 65, + 68, -374, + 0, -574, + 15, -94, + 0, -53, + 0, -1303, + 0, -236, + 283, 36, + -1, -54, + 269, -35, + 0, -83, + 0, -52, + 0, 730, 0, -3129, + 0, 813, + 0, -4299, + 1, 59, + -6, 5130, 1, 16239, -1, -64603, + 0, -80, + 91, 12, + 0, -561, + 133, -17, + 0, 250, + -12, 71, + 0, 155664, + 82, -11, + 0, 106, + 0, -604, + 0, 21862, + 55, -7, + 0, -1514, 0, 6501, + 0, 906, + 0, -68, + 0, 241, + 0, 366, + 0, 70, + 0, -1382, 0, 5957, + 0, 113, + 0, -51, + 0, -55, + 0, 731, + 0, -264, + 0, 65788, + 1, -1504, 0, 3147, + 0, 217, + 0, -4105, 0, 17658, + 1, 69, + 0, -3518, + 0, -1767, + -43, -7044, -10, -22304, 0, 88685, + 3, 91, + 0, -485, + 0, -57, + -1, 333548, + -24, 172, + 11, 544, 1, -1132, + 0, 353, + 0, -188, + 0, 53, + 0, 77, + 158, -887, + 35, 131, + -54, 13, + 0, 1994821, + -53, 14, + 36, 125, + 2, 56, + 0, -243, + 0, -364, + -2, 1916, 0, -8227, + 0, 15700, -1, -67308, + 1, 66, + 0, -53686, + 1, 3058, 1, -13177, + 0, -72, + 0, -72, + 0, 61, + 0, 15812, + 0, 165, + 8, -96, + 318, 1341, 803, -4252, + 24, 193, + 1137, -226, 310, 622, + -56, 30, + -3, 10101666, + -56, 30, + 1096, -225, 300, 600, + -31, 409, + -1, -507, + 0, -287, + 0, -1869, 0, 8026, + 1, 544, -1, -1133, + 0, 27984, + 0, -62, + 0, -249, + 0, 187, + 0, -1096, + 1, 53, + 2, 12388, 0, -53107, + 0, -322, + 0, -94, + 0, 15157, + 0, -582, + 0, 3291, + 0, 565, + 0, 106, + 0, 112, + 0, 306, + 0, 809, + 0, 130, + 0, -961, 0, 4149, + 0, 174, + 0, -105, + 0, 2196, + 0, 59, + 0, 36737, + -1, -1832, 0, 3835, + 0, -139, + 0, 24138, + 0, 1325, + 1, 64, + 0, -361, + 0, -1162, + -44, -6320, -10, -20003, 0, 79588, + 2, 80, + 0, -2059, + 0, -304, + 0, 21460, + 0, -166, + 0, -87, + 89, -493, + 32, 114, + 34, 510, 1, 1172616, + 31, 113, + -1, 57, + 0, 214, + 0, -656, + 0, -646, + 0, 1850, 0, -7931, + 0, -6674, + 0, 2944, 0, -12641, + 0, 916, + 45, -255, + 16, 60, + -1, 619116, + 16, 57, + 0, -58, + 0, 1045, + 0, -156, + -15, 88, + 0, -62964, + 0, -126, + 0, 1490, 0, -6387, + 0, 119, + 0, 1338, + 0, -56, + 0, 204, + 0, 153, + 0, 940, + 0, 251, + 0, 312, + 0, 584, + 0, -786, 0, 3388, + 0, -52, + 0, 4733, + 0, 618, + 0, 29982, + 0, 101, + 0, -174, + 0, -2637, 0, 11345, + 0, -284, + 0, -524, + 0, -121, + 0, 1464, + 11, -60, + -1, 151205, + 0, 139, + 0, -2448, + 0, -51, + 0, -768, + 0, -638, + 0, 552, 0, -2370, + 0, 70, + 0, 64, + 0, 57, + 0, 39840, + 0, 104, + 0, -10194, + 0, -635, + 0, 69, + 0, 113, + 0, 67, + 0, 96, + 0, 367, + 0, 134, + 0, 596, + 0, 63, + 0, 1622, + 0, 483, + 0, 72, + 0, 11917, + 0, -63, + 0, 1273, + 0, -66, + 0, -262, + 0, -97, + 0, 103, + 0, 15196, + 0, -1445, + 0, -66, + 0, -55, + 0, -323, + 0, 2632, + 0, -1179, + 0, 59, + 0, -56, + 0, 78, + 0, 65, + 0, 422, + 0, 309, + 0, 2125, + 0, -66, + 0, 124, + 0, -57, + 0, 1379, + 0, -304, + 0, 177, + 0, -118, + 0, 146, + 0, 283, + 0, 119, +}; +static CHAR bargs[] = { + 0, 1, + 3, 1, 10, 1, 12, -1, 11, 1, + 4, 2, 10, 2, 12, -1, 13, -1, 11, 0, + 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0, + 2, -1, 13, 1, 14, 1, + 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 2, 1, 13, -1, 11, 0, + 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0, + 4, 1, 10, 1, 12, -2, 13, 1, 11, 0, + 4, 1, 13, -1, 11, 1, 2, -1, 3, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0, + 3, 1, 10, -2, 13, 1, 11, 0, + 4, 1, 13, -1, 11, 1, 3, -1, 5, 0, + 4, -1, 13, 1, 11, 1, 2, -1, 3, 0, + 3, 1, 12, 1, 13, -1, 11, 1, + 4, 2, 10, 1, 12, -1, 13, -1, 11, 1, + 2, 1, 10, -1, 11, 0, + 4, -1, 13, 1, 11, 1, 3, -1, 5, 0, + 3, 1, 12, -1, 13, 1, 11, 1, + 3, 2, 10, -3, 13, 1, 11, 0, + 3, 2, 12, 1, 13, -1, 11, 0, + 3, -2, 10, 1, 13, 1, 14, 0, + 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 13, -1, 11, 0, + 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 4, -1, 13, 1, 11, 2, 3, -2, 5, 0, + 4, -1, 13, 1, 11, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -1, 11, 0, + 3, 2, 12, -1, 13, 1, 11, 0, + 3, 2, 10, 1, 13, -3, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 12, -3, 13, 1, 11, 0, + 3, 3, 10, -2, 13, -1, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 12, -1, 13, -1, 11, 1, + 2, 3, 10, -3, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0, + 4, 2, 10, -1, 12, 1, 13, -3, 11, 0, + 3, 4, 10, -3, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -1, 13, -1, 11, 1, + 3, 4, 10, -1, 13, -3, 11, 0, + 4, 2, 10, -3, 12, -1, 13, -1, 11, 0, + 3, 4, 10, -1, 12, -3, 11, 0, + 3, 2, 10, -3, 12, -1, 11, 0, + 4, 4, 10, -1, 12, -2, 13, -1, 11, 0, + 2, 4, 10, -3, 11, 0, + 3, 2, 10, -2, 12, -1, 11, 1, + 4, 3, 10, -1, 12, -1, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 2, 3, -2, 5, 0, + 3, 4, 10, -2, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, -1, 11, 2, + 3, -2, 10, 1, 12, 1, 14, 0, + 4, -2, 10, 1, 11, 2, 3, -2, 4, 0, + 4, -2, 10, 1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -1, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 3, 2, -4, 3, 0, + 4, -2, 10, 1, 11, 1, 3, -2, 5, 0, + 4, 2, 10, -1, 12, -2, 13, 1, 11, 0, + 4, -2, 10, 1, 11, 1, 2, -1, 3, 0, + 2, -1, 10, 1, 2, 0, + 3, 2, 10, 2, 13, -3, 11, 0, + 4, -2, 10, 1, 11, 2, 2, -3, 3, 0, + 3, 2, 12, -2, 13, 1, 11, 0, + 4, 1, 10, -1, 12, 1, 13, -1, 11, 0, + 3, -2, 10, 1, 11, 1, 5, 0, + 4, 2, 10, -1, 11, 1, 3, -2, 4, 0, + 3, 2, 10, -2, 11, 1, 14, 0, + 4, -2, 10, 1, 11, 8, 2,-13, 3, 0, + 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, + 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 10, -1, 11, 1, + 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1, + 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, + 4, 2, 10, -1, 11, 8, 2,-13, 3, 0, + 2, -2, 10, 1, 14, 1, + 4, -2, 10, 1, 11, 1, 3, -2, 4, 0, + 3, 2, 10, -1, 11, 1, 5, 0, + 2, 2, 12, -1, 11, 0, + 4, 3, 10, 1, 12, -1, 13, -1, 11, 0, + 4, 2, 10, -1, 11, 2, 2, -3, 3, 0, + 3, 2, 10, -2, 13, 1, 11, 0, + 4, 2, 10, -1, 11, 1, 2, -1, 3, 0, + 3, 1, 10, 1, 2, -2, 3, 0, + 3, 1, 12, -2, 13, 1, 11, 1, + 3, 1, 10, 1, 13, -1, 11, 0, + 4, 2, 10, -1, 11, 1, 3, -1, 5, 0, + 3, 2, 10, 1, 12, -1, 11, 2, + 3, -2, 10, -1, 12, 1, 14, 0, + 2, 1, 12, -1, 11, 1, + 3, 1, 10, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 11, 2, 2, -2, 3, 0, + 3, 1, 10, 2, 2, -3, 3, 0, + 4, 2, 10, 1, 12, -2, 13, 1, 11, 0, + 3, -1, 10, 1, 2, -2, 3, 0, + 3, -1, 11, 1, 2, -1, 3, 0, + 2, 2, 13, -1, 11, 0, + 2, -2, 13, 1, 14, 0, + 4, 2, 10, -1, 11, 2, 3, -2, 5, 0, + 4, 2, 10, -1, 11, 3, 2, -3, 3, 0, + 4, 2, 10, 2, 12, -2, 13, -1, 11, 0, + 3, 1, 10, 1, 3, -2, 5, 0, + 4, 1, 10, 1, 12, 1, 13, -1, 11, 0, + 3, 1, 10, 3, 2, -4, 3, 0, + 3, 1, 10, 1, 3, -1, 5, 0, + 3, 1, 10, 1, 3, -2, 6, 0, + 3, 1, 10, 2, 3, -2, 4, 0, + 4, 1, 10, 1, 12, -1, 13, -1, 11, 0, + 3, 2, 10, 2, 12, -1, 11, 2, + 4, 1, 10, 1, 3, 2, 5, -5, 6, 1, + 1, 1, 14, 2, + 3, 1, 10, 8, 2,-12, 3, 1, + 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0, + 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0, + 3, 1, 10, 1, 3, 1, 6, 0, + 4, -1, 13, -1, 11, 26, 2,-29, 3, 0, + 3, -1, 11, 8, 2,-13, 3, 0, + 4, -1, 13, -1, 11, 18, 2,-16, 3, 2, + 4, -1, 13, 1, 11, 10, 2, -3, 3, 1, + 1, 1, 11, 3, + 4, -1, 13, -1, 11, 10, 2, -3, 3, 1, + 4, -1, 13, 1, 11, 18, 2,-16, 3, 2, + 3, 1, 11, 8, 2,-13, 3, 0, + 2, 1, 10, 2, 4, 0, + 4, 2, 10, -1, 11, 5, 2, -6, 3, 1, + 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0, + 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0, + 3, 1, 10, 1, 3, 1, 5, 0, + 2, -2, 11, 1, 14, 0, + 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0, + 3, 1, 10, 5, 2, -7, 3, 0, + 4, 1, 10, 1, 12, -1, 13, 1, 11, 0, + 3, 1, 10, 2, 2, -2, 3, 0, + 4, 2, 10, 2, 12, -2, 13, 1, 11, 0, + 2, 2, 13, -3, 11, 0, + 4, 2, 10, -1, 11, 4, 2, -4, 3, 0, + 3, 1, 10, 4, 2, -5, 3, 0, + 3, 1, 10, -3, 13, 1, 11, 0, + 2, 1, 10, 1, 2, 0, + 3, 1, 11, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 11, 3, 3, -3, 5, 0, + 3, 1, 12, 2, 13, -1, 11, 1, + 4, 2, 10, 1, 12, -2, 13, -1, 11, 0, + 3, 1, 10, -1, 13, -1, 11, 0, + 3, 1, 11, 1, 3, -1, 5, 0, + 2, 1, 12, 1, 11, 2, + 4, 2, 10, -1, 11, 5, 2, -5, 3, 0, + 3, 1, 10, 5, 2, -6, 3, 0, + 3, 2, 10, 1, 12, -3, 11, 0, + 3, 1, 10, 2, 2, -1, 3, 0, + 3, 2, 10, -4, 13, 1, 11, 0, + 3, -2, 10, 2, 13, 1, 14, 0, + 3, 2, 10, -2, 13, -1, 11, 0, + 3, 1, 10, 3, 2, -2, 3, 0, + 4, 1, 10, -1, 12, -1, 13, -1, 11, 0, + 2, 2, 12, 1, 11, 0, + 2, 2, 10, -3, 11, 0, + 3, 1, 10, 4, 2, -3, 3, 0, + 4, 2, 10, -1, 12, -2, 13, -1, 11, 1, + 3, 2, 10, -1, 12, -3, 11, 0, + 3, 4, 10, -4, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -2, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -1, 13, -1, 11, 0, + 3, 6, 10, -3, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -1, 13, -1, 11, 1, + 4, 2, 10, -3, 12, -1, 13, 1, 11, 0, + 3, 5, 10, -2, 13, -1, 11, 0, + 3, 4, 10, 1, 13, -3, 11, 0, + 4, 2, 10, -2, 12, 1, 13, -1, 11, 0, + 3, 3, 10, -1, 12, -1, 11, 0, + 3, 4, 10, -1, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -1, 13, 1, 11, 1, + 3, 4, 10, -3, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 1, 13, -1, 11, 1, + 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0, + 2, 3, 10, -1, 11, 0, + 4, 4, 10, 1, 12, -1, 13, -1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, 1, 11, 2, + 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -2, 13, 1, 11, 0, + 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0, + 3, 2, 10, 1, 13, -1, 11, 0, + 3, -2, 10, -1, 13, 1, 14, 0, + 3, 2, 12, -1, 13, -1, 11, 1, + 3, 3, 10, 1, 12, -1, 11, 0, + 3, 1, 10, -1, 12, 1, 11, 0, + 4, -1, 13, -1, 11, 3, 2, -3, 3, 0, + 4, -1, 13, -1, 11, 2, 3, -2, 5, 0, + 3, 2, 10, -1, 13, 1, 14, 0, + 4, -2, 10, -1, 11, 18, 2,-16, 3, 0, + 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 13, 1, 11, 0, + 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0, + 4, -2, 10, 1, 13, -2, 11, 1, 14, 0, + 3, 1, 12, -3, 13, 1, 11, 0, + 3, 1, 10, 2, 13, -1, 11, 0, + 4, 2, 10, 1, 12, 1, 13, -1, 11, 1, + 3, 1, 12, -1, 13, -1, 11, 1, + 4, -1, 13, -1, 11, 1, 3, -1, 5, 0, + 2, 1, 10, 1, 11, 0, + 4, 2, 10, 1, 12, -1, 13, 1, 11, 1, + 3, 1, 12, 1, 13, -3, 11, 0, + 4, -1, 13, -1, 11, 1, 2, -1, 3, 0, + 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0, + 2, 3, 13, -1, 11, 0, + 4, 1, 10, 1, 12, -2, 13, -1, 11, 0, + 4, 2, 10, 2, 12, 1, 13, -1, 11, 0, + 2, 1, 13, 1, 14, 1, + 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0, + 4, -2, 13, -1, 11, 18, 2,-16, 3, 1, + 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 2, 1, 13, 1, 11, 0, + 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 1, 11, 18, 2,-16, 3, 1, + 3, -1, 13, -2, 11, 1, 14, 0, + 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0, + 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0, + 3, 1, 10, 1, 12, 1, 11, 1, + 4, 2, 10, 2, 12, -1, 13, 1, 11, 1, + 2, 1, 13, -3, 11, 0, + 4, 1, 13, 1, 11, 1, 2, -1, 3, 0, + 3, 1, 12, 3, 13, -1, 11, 0, + 4, 2, 10, 1, 12, -3, 13, -1, 11, 0, + 3, 1, 10, -2, 13, -1, 11, 0, + 4, 1, 13, 1, 11, 1, 3, -1, 5, 0, + 3, 1, 12, 1, 13, 1, 11, 1, + 2, 1, 10, -3, 11, 0, + 3, 1, 12, -1, 13, 3, 11, 0, + 3, 2, 10, -3, 13, -1, 11, 0, + 3, 2, 12, 1, 13, 1, 11, 0, + 3, 2, 10, -1, 13, -3, 11, 0, + 4, 2, 10, -1, 12, -3, 13, -1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, -3, 11, 0, + 4, 6, 10, -1, 12, -2, 13, -1, 11, 0, + 3, 4, 10, -2, 12, -1, 11, 0, + 3, 6, 10, -2, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -2, 13, 1, 11, 0, + 3, 4, 10, -1, 12, -1, 11, 1, + 3, 2, 10, -3, 12, 1, 11, 0, + 3, 5, 10, -1, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -2, 13, 1, 11, 0, + 4, 2, 10, -2, 12, 2, 13, -1, 11, 0, + 2, 4, 10, -1, 11, 0, + 3, 2, 10, -2, 12, 1, 11, 1, + 4, 3, 10, -1, 12, -1, 13, 1, 11, 0, + 3, 4, 10, -2, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 2, 13, -1, 11, 0, + 4, -2, 10, -1, 11, 2, 2, -2, 3, 0, + 3, 3, 10, 1, 13, -1, 11, 0, + 3, 4, 10, 1, 12, -1, 11, 0, + 3, 2, 10, -1, 12, 1, 11, 2, + 4, -2, 10, -1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -1, 13, 1, 11, 0, + 4, 4, 10, 1, 12, -2, 13, 1, 11, 0, + 3, 2, 10, 2, 13, -1, 11, 0, + 3, 2, 12, -2, 13, -1, 11, 0, + 4, 1, 10, -1, 12, 1, 13, 1, 11, 0, + 2, 2, 10, 1, 14, 0, + 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, + 2, 2, 10, 1, 11, 1, + 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, + 3, -2, 10, -2, 11, 1, 14, 0, + 4, 3, 10, 1, 12, -1, 13, 1, 11, 0, + 3, 2, 10, -2, 13, 3, 11, 0, + 4, 2, 10, 1, 12, 2, 13, -1, 11, 0, + 3, 1, 12, -2, 13, -1, 11, 1, + 3, 1, 10, 1, 13, 1, 11, 0, + 3, 2, 10, 1, 12, 1, 11, 1, + 2, 4, 13, -1, 11, 0, + 2, 2, 13, 1, 14, 0, + 4, -3, 13, -1, 11, 18, 2,-16, 3, 0, + 2, 2, 13, 1, 11, 0, + 4, 1, 13, 1, 11, 18, 2,-16, 3, 0, + 4, 2, 10, 1, 11, 2, 3, -2, 5, 0, + 4, 1, 10, 1, 12, 1, 13, 1, 11, 0, + 3, 2, 10, 2, 12, 1, 11, 0, + 2, 2, 11, 1, 14, 0, + 1, 3, 11, 0, + 3, 1, 10, -3, 13, -1, 11, 0, + 3, 1, 12, 2, 13, 1, 11, 1, + 2, 1, 12, 3, 11, 0, + 3, 2, 10, -4, 13, -1, 11, 0, + 3, 2, 12, 2, 13, 1, 11, 0, + 3, 2, 10, -2, 13, -3, 11, 0, + 4, 6, 10, -1, 12, -1, 13, -1, 11, 0, + 3, 6, 10, -1, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -1, 13, 1, 11, 0, + 3, 6, 10, -3, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 1, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -1, 13, 1, 11, 1, + 3, 5, 10, -2, 13, 1, 11, 0, + 3, 4, 10, 1, 13, -1, 11, 0, + 4, 2, 10, -2, 12, 1, 13, 1, 11, 0, + 3, 4, 10, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 3, 13, -1, 11, 0, + 4, 4, 10, 1, 12, 1, 13, -1, 11, 0, + 4, 2, 10, -1, 12, 1, 13, 1, 11, 1, + 2, 3, 10, 1, 11, 0, + 4, 4, 10, 1, 12, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, 3, 11, 0, + 3, 2, 10, 3, 13, -1, 11, 0, + 3, 2, 10, 1, 13, 1, 14, 0, + 3, 2, 10, 1, 13, 1, 11, 0, + 3, 3, 10, 1, 12, 1, 11, 0, + 3, 2, 10, -1, 13, 3, 11, 0, + 4, 2, 10, 1, 12, 3, 13, -1, 11, 0, + 3, 1, 12, -3, 13, -1, 11, 0, + 3, 1, 10, 2, 13, 1, 11, 0, + 4, 2, 10, 1, 12, 1, 13, 1, 11, 1, + 3, 1, 12, -1, 13, -3, 11, 0, + 2, 1, 10, 3, 11, 0, + 2, 5, 13, -1, 11, 0, + 2, 3, 13, 1, 11, 0, + 4, 1, 10, 1, 12, 2, 13, 1, 11, 0, + 2, 1, 13, 3, 11, 0, + 3, 1, 12, 3, 13, 1, 11, 0, + 3, 1, 12, 1, 13, 3, 11, 0, + 3, 2, 10, -5, 13, -1, 11, 0, + 3, 6, 10, -1, 12, -1, 11, 0, + 4, 6, 10, -1, 12, -2, 13, 1, 11, 0, + 2, 6, 10, -1, 11, 0, + 3, 4, 10, -2, 12, 1, 11, 0, + 3, 6, 10, -2, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 2, 13, -1, 11, 0, + 3, 4, 10, -1, 12, 1, 11, 0, + 3, 4, 10, 2, 13, -1, 11, 0, + 4, 2, 10, -2, 12, 2, 13, 1, 11, 0, + 2, 4, 10, 1, 11, 0, + 3, 4, 10, -2, 13, 3, 11, 0, + 4, 2, 10, -1, 12, 2, 13, 1, 11, 0, + 3, 3, 10, 1, 13, 1, 11, 0, + 3, 4, 10, 1, 12, 1, 11, 0, + 3, 2, 10, -1, 12, 3, 11, 0, + 3, 2, 10, 4, 13, -1, 11, 0, + 3, 2, 10, 2, 13, 1, 11, 0, + 2, 2, 10, 3, 11, 0, + 3, 1, 12, -4, 13, -1, 11, 0, + 3, 1, 10, 3, 13, 1, 11, 0, + 4, 2, 10, 1, 12, 2, 13, 1, 11, 0, + 2, 4, 13, 1, 11, 0, + 2, 2, 13, 3, 11, 0, + 1, 5, 11, 0, + 3, 1, 12, 4, 13, 1, 11, 0, + 4, 6, 10, -1, 12, -1, 13, 1, 11, 0, + 3, 6, 10, 1, 13, -1, 11, 0, + 3, 6, 10, -1, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 1, 13, 1, 11, 0, + 3, 4, 10, 1, 13, 1, 11, 0, + 3, 4, 10, -1, 13, 3, 11, 0, + 4, 2, 10, -1, 12, 3, 13, 1, 11, 0, + 4, 4, 10, 1, 12, 1, 13, 1, 11, 0, + 3, 2, 10, 3, 13, 1, 11, 0, + 3, 2, 10, 1, 13, 3, 11, 0, + 2, 5, 13, 1, 11, 0, + 2, 3, 13, 3, 11, 0, + 2, 6, 10, 1, 11, 0, + 3, 4, 10, 2, 13, 1, 11, 0, + 3, 2, 10, 4, 13, 1, 11, 0, + -1 +}; +struct plantbl moonlr = { + { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,}, + 3, + lrargs, + lrtabl, + lrtabb, + lrtabr, + 2.5735686895300000e-03, + 3.6525000000000000e+06, + 1.0000000000000000e-04, +}; + +struct plantbl moonlat = { + { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,}, + 3, + bargs, + btabl, + btabb, + btabr, + 0.0000000000000000e+00, + 3.6525000000000000e+06, + 1.0000000000000000e-04, +}; + + +/* Reduce arc seconds modulo 360 degrees + answer in arc seconds */ +static double +mods3600(double x) +{ + double y; +#if !defined(__STDC__) + double floor(); +#endif + + y = x - 1296000. * floor( x/1296000.); + return(y); +} + + +/* Time argument is Julian ephemeris date. */ + +static void +mean_elements (double JED) +{ + double x, T, T2; + + /* Time variables. T is in Julian centuries. */ + T = (JED - MOSHIER_J2000) / 36525.0; + T2 = T*T; + + /* Mean longitudes of planets (Simon et al, 1994) + .047" subtracted from constant term for offset to DE403 origin. */ + + /* Mercury */ + x = mods3600( 538101628.6889819 * T + 908103.213 ); + x += (6.39e-6 * T + - 0.0192789) * T2; + Args[0] = x; + + /* Venus */ + x = mods3600( 210664136.4335482 * T + 655127.236 ); + x += (-6.27e-6 * T + + 0.0059381) * T2; + Args[1] = x; + + /* Earth */ + x = mods3600( 129597742.283429 * T + 361679.198 ); + x += (-5.23e-6 * T + - 2.04411e-2 ) * T2; + Ea_arcsec = x; + Args[2] = x; + + /* Mars */ + x = mods3600( 68905077.493988 * T + 1279558.751 ); + x += (-1.043e-5 * T + + 0.0094264) * T2; + Args[3] = x; + + /* Jupiter */ + x = mods3600( 10925660.377991 * T + 123665.420 ); + x += ((((-3.4e-10 * T + + 5.91e-8) * T + + 4.667e-6) * T + + 5.706e-5) * T + - 3.060378e-1)*T2; + Args[4] = x; + + /* Saturn */ + x = mods3600( 4399609.855372 * T + 180278.752 ); + x += (((( 8.3e-10 * T + - 1.452e-7) * T + - 1.1484e-5) * T + - 1.6618e-4) * T + + 7.561614E-1)*T2; + Args[5] = x; + + /* Uranus */ + x = mods3600( 1542481.193933 * T + 1130597.971 ) + + (0.00002156*T - 0.0175083)*T2; + Args[6] = x; + + /* Neptune */ + x = mods3600( 786550.320744 * T + 1095655.149 ) + + (-0.00000895*T + 0.0021103)*T2; + Args[7] = x; + + /* Copied from cmoon.c, DE404 version. */ + /* Mean elongation of moon = D */ + x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 ); + x += (((((-3.207663637426e-013 * T + + 2.555243317839e-011) * T + + 2.560078201452e-009) * T + - 3.702060118571e-005) * T + + 6.9492746836058421e-03) * T /* D, t^3 */ + - 6.7352202374457519e+00) * T2; /* D, t^2 */ + Args[9] = x; + + /* Mean distance of moon from its ascending node = F */ + x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 ); + x += ((((( 4.474984866301e-013 * T + + 4.189032191814e-011) * T + - 2.790392351314e-009) * T + - 2.165750777942e-006) * T + - 7.5311878482337989e-04) * T /* F, t^3 */ + - 1.3117809789650071e+01) * T2; /* F, t^2 */ + NF_arcsec = x; + Args[10] = x; + +/* Mean anomaly of sun = l' (J. Laskar) */ + x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06); + x += (((((((( + 1.62e-20 * T + - 1.0390e-17 ) * T + - 3.83508e-15 ) * T + + 4.237343e-13 ) * T + + 8.8555011e-11 ) * T + - 4.77258489e-8 ) * T + - 1.1297037031e-5 ) * T + + 8.7473717367324703e-05) * T + - 5.5281306421783094e-01) * T2; + Args[11] = x; + + /* Mean anomaly of moon = l */ + x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 ); + x += (((((-1.755312760154e-012) * T + + 3.452144225877e-011 * T + - 2.506365935364e-008) * T + - 2.536291235258e-004) * T + + 5.2099641302735818e-02) * T /* l, t^3 */ + + 3.1501359071894147e+01) * T2; /* l, t^2 */ + Args[12] = x; + + /* Mean longitude of moon, re mean ecliptic and equinox of date = L */ + x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05); + x += ((((( 7.200592540556e-014 * T + + 2.235210987108e-010) * T + - 1.024222633731e-008) * T + - 6.073960534117e-005) * T + + 6.9017248528380490e-03) * T /* L, t^3 */ + - 5.6550460027471399e+00) * T2; /* L, t^2 */ + LP_equinox = x; + Args[13] = x; + + /* Precession of the equinox */ + x = ((((((((( -8.66e-20*T - 4.759e-17)*T + + 2.424e-15)*T + + 1.3095e-12)*T + + 1.7451e-10)*T + - 1.8055e-8)*T + - 0.0000235316)*T + + 0.000076)*T + + 1.105414)*T + + 5028.791959)*T; + /* Moon's longitude re fixed J2000 equinox. */ + /* + Args[13] -= x; + */ + pA_precession = x; + + /* OM = LP - NF; */ + + /* Free librations. */ + /* LB 2.891725 years, psi amplitude 1.8" */ + Args[14] = mods3600( 4.48175409e7 * T + 8.060457e5 ); + + /* 24.2 years */ + Args[15] = mods3600( 5.36486787e6 * T - 391702.8 ); + +#if 0 + /* 27.34907 days */ + Args[16] = mods3600( 1.7308227257e9 * T - 4.443583e5 ); +#endif + /* LA 74.7 years. */ +Args[17] = mods3600( 1.73573e6 * T ); +} + + +/* Prepare lookup table of sin and cos ( i*Lj ) + * for required multiple angles + */ +static int +sscc (int k, double arg, int n) +{ + double cu, su, cv, sv, s; + int i; + + s = STR * arg; + su = sin (s); + cu = cos (s); + ss[k][0] = su; /* sin(L) */ + cc[k][0] = cu; /* cos(L) */ + sv = 2.0 * su * cu; + cv = cu * cu - su * su; + ss[k][1] = sv; /* sin(2L) */ + cc[k][1] = cv; + for (i = 2; i < n; i++) + { + s = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = s; + ss[k][i] = sv; /* sin( i+1 L ) */ + cc[k][i] = cv; + } + return (0); +} + +/* Generic program to accumulate sum of trigonometric series + in two variables (e.g., longitude, radius) + of the same list of arguments. */ +static int +g2plan (double J, struct plantbl *plan, double pobj[], int flag) +{ + int i, j, k, m, k1, ip, np, nt; + /* On some systems such as Silicon Graphics, char is unsigned + by default. */ + CHAR *p; + long *pl, *pr; + double su, cu, sv, cv; + double t, sl, sr; + + mean_elements (J); + /* For librations, moon's longitude is sidereal. */ + if (flag) + Args[13] -= pA_precession; + + T = (J - MOSHIER_J2000) / plan->timescale; + /* Calculate sin( i*MM ), etc. for needed multiple angles. */ + for (i = 0; i < NARGS; i++) + { + if ((j = plan->max_harmonic[i]) > 0) + { + sscc (i, Args[i], j); + } + } + + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + pr = plan->rad_tbl; + sl = 0.0; + sr = 0.0; + + for (;;) + { + /* argument of sine and cosine */ + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { /* It is a polynomial term. */ + nt = *p++; + /* Longitude polynomial. */ + cu = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + } + /* sl += mods3600 (cu); */ + sl += cu; + /* Radius polynomial. */ + cu = *pr++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pr++; + } + sr += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = abs (j); + k -= 1; + su = ss[m][k]; /* sin(k*angle) */ + if (j < 0) + su = -su; + cu = cc[m][k]; + if (k1 == 0) + { /* set first angle */ + sv = su; + cv = cu; + k1 = 1; + } + else + { /* combine angles */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Highest power of T. */ + nt = *p++; + /* Longitude. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + /* Radius. */ + cu = *pr++; + su = *pr++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pr++; + su = su * T + *pr++; + } + sr += cu * cv + su * sv; + } + t = plan->trunclvl; + pobj[0] = t * sl; + pobj[2] = t * sr; + return (0); +} + + + +/* Generic program to accumulate sum of trigonometric series + in one variable. */ + +static double +g1plan (double J, struct plantbl *plan) +{ + int i, j, k, m, k1, ip, np, nt; + /* On some systems such as Silicon Graphics, char is unsigned + by default. */ + CHAR *p; + long *pl; + double su, cu, sv, cv; + double t, sl; + + T = (J - MOSHIER_J2000) / plan->timescale; + mean_elements (J); + /* Calculate sin( i*MM ), etc. for needed multiple angles. */ + for (i = 0; i < NARGS; i++) + { + if ((j = plan->max_harmonic[i]) > 0) + { + sscc (i, Args[i], j); + } + } + + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + sl = 0.0; + + for (;;) + { + /* argument of sine and cosine */ + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { /* It is a polynomial term. */ + nt = *p++; + cu = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + } + /* sl += mods3600 (cu); */ + sl += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = abs (j); + k -= 1; + su = ss[m][k]; /* sin(k*angle) */ + if (j < 0) + su = -su; + cu = cc[m][k]; + if (k1 == 0) + { /* set first angle */ + sv = su; + cv = cu; + k1 = 1; + } + else + { /* combine angles */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Highest power of T. */ + nt = *p++; + /* Cosine and sine coefficients. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + } + return (plan->trunclvl * sl); +} + + +/* geocentric moon, mean ecliptic and equinox of date + * J is Julian Epemeris Date + * output in pobj[]: + * pobj[0]: l in rad + * pobj[1]: b in rad + * pobj[2]: r in au + */ +static int +gecmoon (double J, struct plantbl *lrtab, struct plantbl *lattab, double pobj[]) +{ + double x; + + g2plan (J, lrtab, pobj, 0); + x = pobj[0]; + x += LP_equinox; + if (x < -6.45e5) + x += 1.296e6; + if (x > 6.45e5) + x -= 1.296e6; + pobj[0] = STR * x; + x = g1plan (J, lattab); + pobj[1] = STR * x; + pobj[2] = (STR * pobj[2] + 1.0) * lrtab->distance; + return 0; +} + +/*********** end stephen moshier's moon code ****************/ + +static void moon_fast (double mj, double *lam, double *bet, + double *hp, double *msp, double *mdp); + +/* previous version (elwood): + * + * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, + * bet, and horizontal parallax, hp for the moon. also return the sun's + * mean anomaly, *msp, and the moon's mean anomaly, *mdp. + * N.B. series for long and lat are good to about 10 and 3 arcseconds. however, + * math errors cause up to 100 and 30 arcseconds error, even if use double. + * why?? suspect highly sensitive nature of difference used to get m1..6. + * N.B. still need to correct for nutation. then for topocentric location + * further correct for parallax and refraction. + */ +static void +moon_fast (double mj, double *lam, double *bet, double *hp, double *msp, +double *mdp) +{ + double t, t2; + double ld; + double ms; + double md; + double de; + double f; + double n; + double a, sa, sn, b, sb, c, sc, e, e2, l, g, w1, w2; + double m1, m2, m3, m4, m5, m6; + + t = mj/36525.; + t2 = t*t; + + m1 = mj/27.32158213; + m1 = 360.0*(m1-(long)m1); + m2 = mj/365.2596407; + m2 = 360.0*(m2-(long)m2); + m3 = mj/27.55455094; + m3 = 360.0*(m3-(long)m3); + m4 = mj/29.53058868; + m4 = 360.0*(m4-(long)m4); + m5 = mj/27.21222039; + m5 = 360.0*(m5-(long)m5); + m6 = mj/6798.363307; + m6 = 360.0*(m6-(long)m6); + + ld = 270.434164+m1-(.001133-.0000019*t)*t2; + ms = 358.475833+m2-(.00015+.0000033*t)*t2; + md = 296.104608+m3+(.009192+.0000144*t)*t2; + de = 350.737486+m4-(.001436-.0000019*t)*t2; + f = 11.250889+m5-(.003211+.0000003*t)*t2; + n = 259.183275-m6+(.002078+.000022*t)*t2; + + a = degrad(51.2+20.2*t); + sa = sin(a); + sn = sin(degrad(n)); + b = 346.56+(132.87-.0091731*t)*t; + sb = .003964*sin(degrad(b)); + c = degrad(n+275.05-2.3*t); + sc = sin(c); + ld = ld+.000233*sa+sb+.001964*sn; + ms = ms-.001778*sa; + md = md+.000817*sa+sb+.002541*sn; + f = f+sb-.024691*sn-.004328*sc; + de = de+.002011*sa+sb+.001964*sn; + e = 1-(.002495+7.52e-06*t)*t; + e2 = e*e; + + ld = degrad(ld); + ms = degrad(ms); + n = degrad(n); + de = degrad(de); + f = degrad(f); + md = degrad(md); + + l = 6.28875*sin(md)+1.27402*sin(2*de-md)+.658309*sin(2*de)+ + .213616*sin(2*md)-e*.185596*sin(ms)-.114336*sin(2*f)+ + .058793*sin(2*(de-md))+.057212*e*sin(2*de-ms-md)+ + .05332*sin(2*de+md)+.045874*e*sin(2*de-ms)+.041024*e*sin(md-ms); + l = l-.034718*sin(de)-e*.030465*sin(ms+md)+.015326*sin(2*(de-f))- + .012528*sin(2*f+md)-.01098*sin(2*f-md)+.010674*sin(4*de-md)+ + .010034*sin(3*md)+.008548*sin(4*de-2*md)-e*.00791*sin(ms-md+2*de)- + e*.006783*sin(2*de+ms); + l = l+.005162*sin(md-de)+e*.005*sin(ms+de)+.003862*sin(4*de)+ + e*.004049*sin(md-ms+2*de)+.003996*sin(2*(md+de))+ + .003665*sin(2*de-3*md)+e*.002695*sin(2*md-ms)+ + .002602*sin(md-2*(f+de))+e*.002396*sin(2*(de-md)-ms)- + .002349*sin(md+de); + l = l+e2*.002249*sin(2*(de-ms))-e*.002125*sin(2*md+ms)- + e2*.002079*sin(2*ms)+e2*.002059*sin(2*(de-ms)-md)- + .001773*sin(md+2*(de-f))-.001595*sin(2*(f+de))+ + e*.00122*sin(4*de-ms-md)-.00111*sin(2*(md+f))+.000892*sin(md-3*de); + l = l-e*.000811*sin(ms+md+2*de)+e*.000761*sin(4*de-ms-2*md)+ + e2*.000704*sin(md-2*(ms+de))+e*.000693*sin(ms-2*(md-de))+ + e*.000598*sin(2*(de-f)-ms)+.00055*sin(md+4*de)+.000538*sin(4*md)+ + e*.000521*sin(4*de-ms)+.000486*sin(2*md-de); + l = l+e2*.000717*sin(md-2*ms); + *lam = ld+degrad(l); + range (lam, 2*PI); + + g = 5.12819*sin(f)+.280606*sin(md+f)+.277693*sin(md-f)+ + .173238*sin(2*de-f)+.055413*sin(2*de+f-md)+.046272*sin(2*de-f-md)+ + .032573*sin(2*de+f)+.017198*sin(2*md+f)+.009267*sin(2*de+md-f)+ + .008823*sin(2*md-f)+e*.008247*sin(2*de-ms-f); + g = g+.004323*sin(2*(de-md)-f)+.0042*sin(2*de+f+md)+ + e*.003372*sin(f-ms-2*de)+e*.002472*sin(2*de+f-ms-md)+ + e*.002222*sin(2*de+f-ms)+e*.002072*sin(2*de-f-ms-md)+ + e*.001877*sin(f-ms+md)+.001828*sin(4*de-f-md)-e*.001803*sin(f+ms)- + .00175*sin(3*f); + g = g+e*.00157*sin(md-ms-f)-.001487*sin(f+de)-e*.001481*sin(f+ms+md)+ + e*.001417*sin(f-ms-md)+e*.00135*sin(f-ms)+.00133*sin(f-de)+ + .001106*sin(f+3*md)+.00102*sin(4*de-f)+.000833*sin(f+4*de-md)+ + .000781*sin(md-3*f)+.00067*sin(f+4*de-2*md); + g = g+.000606*sin(2*de-3*f)+.000597*sin(2*(de+md)-f)+ + e*.000492*sin(2*de+md-ms-f)+.00045*sin(2*(md-de)-f)+ + .000439*sin(3*md-f)+.000423*sin(f+2*(de+md))+ + .000422*sin(2*de-f-3*md)-e*.000367*sin(ms+f+2*de-md)- + e*.000353*sin(ms+f+2*de)+.000331*sin(f+4*de); + g = g+e*.000317*sin(2*de+f-ms+md)+e2*.000306*sin(2*(de-ms)-f)- + .000283*sin(md+3*f); + w1 = .0004664*cos(n); + w2 = .0000754*cos(c); + *bet = degrad(g)*(1-w1-w2); + + *hp = .950724+.051818*cos(md)+.009531*cos(2*de-md)+.007843*cos(2*de)+ + .002824*cos(2*md)+.000857*cos(2*de+md)+e*.000533*cos(2*de-ms)+ + e*.000401*cos(2*de-md-ms)+e*.00032*cos(md-ms)-.000271*cos(de)- + e*.000264*cos(ms+md)-.000198*cos(2*f-md); + *hp = *hp+.000173*cos(3*md)+.000167*cos(4*de-md)-e*.000111*cos(ms)+ + .000103*cos(4*de-2*md)-.000084*cos(2*md-2*de)- + e*.000083*cos(2*de+ms)+.000079*cos(2*de+2*md)+.000072*cos(4*de)+ + e*.000064*cos(2*de-ms+md)-e*.000063*cos(2*de+ms-md)+ + e*.000041*cos(ms+de); + *hp = *hp+e*.000035*cos(2*md-ms)-.000033*cos(3*md-2*de)- + .00003*cos(md+de)-.000029*cos(2*(f-de))-e*.000029*cos(2*md+ms)+ + e2*.000026*cos(2*(de-ms))-.000023*cos(2*(f-de)+md)+ + e*.000019*cos(4*de-ms-md); + *hp = degrad(*hp); + + *msp = ms; + *mdp = md; +} + + +#define EarthRadius 6378.16 /* Kilometers */ + +/* moon() - front end rountine to get moon position; stern + * + * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, + * bet, and geocentric distance, rho in a.u. for the moon. also return + * the sun's mean anomaly, *msp, and the moon's mean anomaly, *mdp. + * + * now uses Stephen Moshier's expansion and code. + * + * TODO: - clarify lunar aberration for apparent places + * + * still need to correct for nutation. then for topocentric location + * further correct for parallax and refraction. + * NB: Do NOT correct for aberration - the geocentric moon frame moves + * along with the earth. + */ +void +moon (double mj, double *lam, double *bet, double *rho, double *msp, +double *mdp) +{ + double pobj[3], dt; + double hp; + + if (mj >= MOSHIER_BEGIN && mj <= MOSHIER_END) { + /* retard for light time */ + moon_fast (mj, lam, bet, &hp, msp, mdp); + *rho = EarthRadius/AUKM/sin(hp); + dt = *rho * 5.7755183e-3; /* speed of light in a.u/day */ + gecmoon(mj + MJD0 - dt, &moonlr, &moonlat, pobj); + + *lam = pobj[0]; + range (lam, 2*PI); + *bet = pobj[1]; + *rho = pobj[2]; + *msp = STR * Args[11]; /* don't need range correction here */ + *mdp = STR * Args[12]; + } else { + moon_fast (mj, lam, bet, &hp, msp, mdp); + *rho = EarthRadius/AUKM/sin(hp); + + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moon.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/mooncolong.c b/Common/Libraries/XEphemAstroLib/src/mooncolong.c new file mode 100644 index 0000000000000000000000000000000000000000..14e77b7db0ed3a0298338ed7f142d1d4b33bb84f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/mooncolong.c @@ -0,0 +1,236 @@ +/* code to compute lunar sunrise position and local sun angle. + */ + +#include +#include +#include + +#include "astro.h" + +static void Librations (double RAD, double LAMH, double BH, double OM, + double F, double L, double L1, double *L0, double *B0); +static void Moon (double RAD, double T, double T2, double LAM0, double R, + double M, double *F, double *L1, double *OM, double *LAM, double *B, + double *DR, double *LAMH, double *BH); +static void Sun (double RAD, double T, double T2, double *L, double *M, + double *R, double *LAM0); + +/* given a Julian date and a lunar location, find selenographic colongitude of + * rising sun, lunar latitude of subsolar point, illuminated fraction, and alt + * of sun at the given location. Any pointer may be 0 if not interested. + * From Bruning and Talcott, October 1995 _Astronomy_, page 76. + * N.B. lunar coordinates use +E, but selenograhic colongs are +W. + */ +void +moon_colong ( +double jd, /* jd */ +double lt, /* lat of location on moon, rads +N +E */ +double lg, /* long of location on moon, rads +N +E */ +double *cp, /* selenographic colongitude (-lng of rising sun), rads */ +double *kp, /* illuminated fraction of surface from Earth */ +double *ap, /* sun altitude at location, rads */ +double *sp) /* lunar latitude of subsolar point, rads */ +{ + double RAD = .0174533; + double T; + double T2; + double L, M, R, LAM0; + double F, L1, OM, LAM, B, DR, LAMH, BH; + double L0, B0; + double TEMP; + double C0; + double PSI; + double NUM, DEN; + double I, K; + double THETA, ETA; + double H; + + T = (jd - 2451545)/36525.0; + T2 = T * T; + + Sun(RAD, T, T2, &L, &M, &R, &LAM0); + Moon(RAD, T, T2, LAM0, R, M, &F, &L1, &OM, &LAM, &B, &DR, &LAMH, &BH); + Librations(RAD, LAMH, BH, OM, F, L, L1, &L0, &B0); + if (sp) + *sp = B0; + + TEMP = L0 / 360; + L0 = ((TEMP) - (int)(TEMP)) * 360; + if (L0 < 0) L0 = L0 + 360; + if (L0 <= 90) C0 = 90 - L0; else C0 = 450 - L0; + if (cp) { + *cp = degrad(C0); + range (cp, 2*PI); /* prefer 0..360 +W */ + } + + if (kp) { + TEMP = cos(B * RAD) * cos(LAM - LAM0 * RAD); + PSI = acos(TEMP); + NUM = R * sin(PSI); + DEN = DR - R * TEMP; + I = atan(NUM / DEN); + if (NUM * DEN < 0) I = I + 3.14159; + if (NUM < 0) I = I + 3.14159; + K = (1 + cos(I)) / 2; + *kp = K; + } + + if (ap) { + THETA = lt; + ETA = lg; + C0 = C0 * RAD; + TEMP = sin(B0) * sin(THETA) + cos(B0) * cos(THETA) * sin(C0+ETA); + H = asin(TEMP); + *ap = H; + } +} + +static void +Librations (double RAD, double LAMH, double BH, double OM, double F, +double L, double L1, double *L0, double *B0) +{ + double I, PSI, W, NUM, DEN, A, TEMP; + + /* inclination of lunar equator */ + I = 1.54242 * RAD; + + /* nutation in longitude, in arcseconds */ + PSI = -17.2 * sin(OM) - 1.32 * sin(2 * L) - .23 * sin(2 * L1) + + .21 * sin(2 * OM); + PSI = PSI * RAD / 3600; + + /* optical librations */ + W = (LAMH - PSI) - OM; + NUM = sin(W) * cos(BH) * cos(I) - sin(BH) * sin(I); + DEN = cos(W) * cos(BH); + A = atan(NUM / DEN); + if (NUM * DEN < 0) A = A + 3.14159; + if (NUM < 0) A = A + 3.14159; + *L0 = (A - F) / RAD; + TEMP = -sin(W) * cos(BH) * sin(I) - sin(BH) * cos(I); + *B0 = asin(TEMP); +} + +static void +Moon (double RAD, double T, double T2, double LAM0, double R, double M, +double *F, double *L1, double *OM, double *LAM, double *B, double *DR, +double *LAMH, double *BH) +{ + double T3, M1, D2, SUMR, SUML, DIST; + + T3 = T * T2; + + /* argument of the latitude of the Moon */ + *F = (93.2721 + 483202 * T - .003403 * T2 - T3 / 3526000) * RAD; + + /* mean longitude of the Moon */ + *L1 = (218.316 + 481268. * T) * RAD; + + /* longitude of the ascending node of Moon's mean orbit */ + *OM = (125.045 - 1934.14 * T + .002071 * T2 + T3 / 450000) * RAD; + + /* Moon's mean anomaly */ + M1 = (134.963 + 477199 * T + .008997 * T2 + T3 / 69700) * RAD; + + /* mean elongation of the Moon */ + D2 = (297.85 + 445267 * T - .00163 * T2 + T3 / 545900) * 2 * RAD; + + /* Lunar distance */ + SUMR = -20954 * cos(M1) - 3699 * cos(D2 - M1) - 2956 * cos(D2); + *DR = 385000 + SUMR; + + /* geocentric latitude */ + *B = 5.128 * sin(*F) + .2806 * sin(M1 + *F) + .2777 * sin(M1 - *F) + + .1732 * sin(D2 - *F); + SUML = 6.289 * sin(M1) + 1.274 * sin(D2 - M1) + .6583 * sin(D2) + + .2136 * sin(2 * M1) - .1851 * sin(M) - .1143 * sin(2 * *F); + *LAM = *L1 + SUML * RAD; + DIST = *DR / R; + *LAMH = (LAM0 + 180 + DIST * cos(*B) * sin(LAM0 * RAD - *LAM) / RAD) + * RAD; + *BH = DIST * *B * RAD; +} + +static void +Sun (double RAD, double T, double T2, double *L, double *M, double *R, +double *LAM0) +{ + double T3, C, V, E, THETA, OM; + + T3 = T2 * T; + + /* mean longitude of the Sun */ + *L = 280.466 + 36000.8 * T; + + /* mean anomaly of the Sun */ + *M = 357.529 + 35999 * T - .0001536 * T2 + T3 / 24490000; + *M = *M * RAD; + + /* correction for Sun's elliptical orbit */ + C = (1.915 - .004817 * T - .000014 * T2) * sin(*M) + + (.01999 - .000101 * T) * sin(2 * *M) + .00029 * sin(3 * *M); + + /* true anomaly of the Sun */ + V = *M + C * RAD; + + /* eccentricity of Earth's orbit */ + E = .01671 - .00004204 * T - .0000001236 * T2; + + /* Sun-Earth distance */ + *R = .99972 / (1 + E * cos(V)) * 145980000; + + /* true geometric longitude of the Sun */ + THETA = *L + C; + + /* apparent longitude of the Sun */ + OM = 125.04 - 1934.1 * T; + *LAM0 = THETA - .00569 - .00478 * sin(OM * RAD); +} + +#ifdef TESTCOLONG + +/* insure 0 <= *v < r. + */ +void +range (v, r) +double *v, r; +{ + *v -= r*floor(*v/r); +} + +/* To be sure the program is functioning properly, try the test case + * 2449992.5 (1 Oct 1995): the colongitude should be 3.69 degrees. + */ +int +main (int ac, char *av[]) +{ + double jd, lt, lg; + double c, k, a; + + if (ac != 2) { + fprintf (stderr, "%s: JD\n", av[0]); + abort(); + } + + jd = atof(av[1]); + + printf ("Latitude of lunar feature: "); + fscanf (stdin, "%lf", <); + lt = degrad(lt); + printf ("Longitude: "); + fscanf (stdin, "%lf", &lg); + lg = degrad(lg); + + moon_colong (jd, lt, lg, &c, &k, &a); + + printf ("Selenographic colongitude is %g\n", raddeg(c)); + printf ("The illuminated fraction of the Moon is %g\n", k); + printf ("Altitude of Sun above feature is %g\n", raddeg(a)); + + return (0); +} + +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: mooncolong.c,v $ $Date: 2004/05/05 17:45:49 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/moonnf.c b/Common/Libraries/XEphemAstroLib/src/moonnf.c new file mode 100644 index 0000000000000000000000000000000000000000..075aee7f8a070954169c39abdcc8cd8a3ad553ed --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/moonnf.c @@ -0,0 +1,69 @@ +#include +#include + +#include "astro.h" + +static void m (double t, double k, double *mj); + +#define unw(w,z) ((w)-floor((w)/(z))*(z)) + +/* given a modified Julian date, mj, return the mjd of the new + * and full moons about then, mjn and mjf. + * TODO: exactly which ones does it find? eg: + * 5/28/1988 yields 5/15 and 5/31 + * 5/29 6/14 6/29 + */ +void +moonnf (double mj, double *mjn, double *mjf) +{ + int mo, yr; + double dy; + double mj0; + double k, tn, tf, t; + + mjd_cal (mj, &mo, &dy, &yr); + cal_mjd (1, 0., yr, &mj0); + k = (yr-1900+((mj-mj0)/365))*12.3685; + k = floor(k+0.5); + tn = k/1236.85; + tf = (k+0.5)/1236.85; + t = tn; + m (t, k, mjn); + t = tf; + k += 0.5; + m (t, k, mjf); +} + +static void +m (double t, double k, double *mj) +{ + double t2, a, a1, b, b1, c, ms, mm, f, ddjd; + + t2 = t*t; + a = 29.53*k; + c = degrad(166.56+(132.87-9.173e-3*t)*t); + b = 5.8868e-4*k+(1.178e-4-1.55e-7*t)*t2+3.3e-4*sin(c)+7.5933E-1; + ms = 359.2242+360*unw(k/1.236886e1,1)-(3.33e-5+3.47e-6*t)*t2; + mm = 306.0253+360*unw(k/9.330851e-1,1)+(1.07306e-2+1.236e-5*t)*t2; + f = 21.2964+360*unw(k/9.214926e-1,1)-(1.6528e-3+2.39e-6*t)*t2; + ms = unw(ms,360); + mm = unw(mm,360); + f = unw(f,360); + ms = degrad(ms); + mm = degrad(mm); + f = degrad(f); + ddjd = (1.734e-1-3.93e-4*t)*sin(ms)+2.1e-3*sin(2*ms) + -4.068e-1*sin(mm)+1.61e-2*sin(2*mm)-4e-4*sin(3*mm) + +1.04e-2*sin(2*f)-5.1e-3*sin(ms+mm)-7.4e-3*sin(ms-mm) + +4e-4*sin(2*f+ms)-4e-4*sin(2*f-ms)-6e-4*sin(2*f+mm) + +1e-3*sin(2*f-mm)+5e-4*sin(ms+2*mm); + a1 = (long)a; + b = b+ddjd+(a-a1); + b1 = (long)b; + a = a1+b1; + b = b-b1; + *mj = a + b; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moonnf.c,v $ $Date: 2003/03/20 08:50:15 $ $Revision: 1.1 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/nutation.c b/Common/Libraries/XEphemAstroLib/src/nutation.c new file mode 100644 index 0000000000000000000000000000000000000000..241bf67eb601370ef02367b156f9c3cc3b1b31b6 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/nutation.c @@ -0,0 +1,441 @@ +/* nutation (in IAU (1980) expression) and abberation; stern + * on an HP PA processor, this reproduces the Almanac nutation values + * (given to 0.001") EXACTLY over 750 days (1995 and 1996) + */ +#include +#include + +#include "astro.h" + +#define NUT_SCALE 1e4 +#define NUT_SERIES 106 +#define NUT_MAXMUL 4 +#define SECPERCIRC (3600.*360.) + +/* Delaunay arguments, in arc seconds; they differ slightly from ELP82B */ +static double delaunay[5][4] = { + {485866.733, 1717915922.633, 31.310, 0.064}, /* M', moon mean anom */ + {1287099.804, 129596581.224, -0.577, -0.012}, /* M, sun mean anom */ + {335778.877, 1739527263.137, -13.257, 0.011}, /* F, moon arg lat */ + {1072261.307, 1602961601.328, -6.891, 0.019}, /* D, elong moon sun */ + {450160.280, -6962890.539, 7.455, 0.008}, /* Om, moon l asc node */ +}; + +/* multipliers for Delaunay arguments */ +static short multarg[NUT_SERIES][5] = { + /* bounds: -2..3, -2..2, -2/0/2/4, -4..4, 0..2 */ + {0, 0, 0, 0, 1}, + {0, 0, 0, 0, 2}, + {-2, 0, 2, 0, 1}, + {2, 0, -2, 0, 0}, + {-2, 0, 2, 0, 2}, + {1, -1, 0, -1, 0}, + {0, -2, 2, -2, 1}, + {2, 0, -2, 0, 1}, + {0, 0, 2, -2, 2}, + {0, 1, 0, 0, 0}, + {0, 1, 2, -2, 2}, + {0, -1, 2, -2, 2}, + {0, 0, 2, -2, 1}, + {2, 0, 0, -2, 0}, + {0, 0, 2, -2, 0}, + {0, 2, 0, 0, 0}, + {0, 1, 0, 0, 1}, + {0, 2, 2, -2, 2}, + {0, -1, 0, 0, 1}, + {-2, 0, 0, 2, 1}, + {0, -1, 2, -2, 1}, + {2, 0, 0, -2, 1}, + {0, 1, 2, -2, 1}, + {1, 0, 0, -1, 0}, + {2, 1, 0, -2, 0}, + {0, 0, -2, 2, 1}, + {0, 1, -2, 2, 0}, + {0, 1, 0, 0, 2}, + {-1, 0, 0, 1, 1}, + {0, 1, 2, -2, 0}, + {0, 0, 2, 0, 2}, + {1, 0, 0, 0, 0}, + {0, 0, 2, 0, 1}, + {1, 0, 2, 0, 2}, + {1, 0, 0, -2, 0}, + {-1, 0, 2, 0, 2}, + {0, 0, 0, 2, 0}, + {1, 0, 0, 0, 1}, + {-1, 0, 0, 0, 1}, + {-1, 0, 2, 2, 2}, + {1, 0, 2, 0, 1}, + {0, 0, 2, 2, 2}, + {2, 0, 0, 0, 0}, + {1, 0, 2, -2, 2}, + {2, 0, 2, 0, 2}, + {0, 0, 2, 0, 0}, + {-1, 0, 2, 0, 1}, + {-1, 0, 0, 2, 1}, + {1, 0, 0, -2, 1}, + {-1, 0, 2, 2, 1}, + {1, 1, 0, -2, 0}, + {0, 1, 2, 0, 2}, + {0, -1, 2, 0, 2}, + {1, 0, 2, 2, 2}, + {1, 0, 0, 2, 0}, + {2, 0, 2, -2, 2}, + {0, 0, 0, 2, 1}, + {0, 0, 2, 2, 1}, + {1, 0, 2, -2, 1}, + {0, 0, 0, -2, 1}, + {1, -1, 0, 0, 0}, + {2, 0, 2, 0, 1}, + {0, 1, 0, -2, 0}, + {1, 0, -2, 0, 0}, + {0, 0, 0, 1, 0}, + {1, 1, 0, 0, 0}, + {1, 0, 2, 0, 0}, + {1, -1, 2, 0, 2}, + {-1, -1, 2, 2, 2}, + {-2, 0, 0, 0, 1}, + {3, 0, 2, 0, 2}, + {0, -1, 2, 2, 2}, + {1, 1, 2, 0, 2}, + {-1, 0, 2, -2, 1}, + {2, 0, 0, 0, 1}, + {1, 0, 0, 0, 2}, + {3, 0, 0, 0, 0}, + {0, 0, 2, 1, 2}, + {-1, 0, 0, 0, 2}, + {1, 0, 0, -4, 0}, + {-2, 0, 2, 2, 2}, + {-1, 0, 2, 4, 2}, + {2, 0, 0, -4, 0}, + {1, 1, 2, -2, 2}, + {1, 0, 2, 2, 1}, + {-2, 0, 2, 4, 2}, + {-1, 0, 4, 0, 2}, + {1, -1, 0, -2, 0}, + {2, 0, 2, -2, 1}, + {2, 0, 2, 2, 2}, + {1, 0, 0, 2, 1}, + {0, 0, 4, -2, 2}, + {3, 0, 2, -2, 2}, + {1, 0, 2, -2, 0}, + {0, 1, 2, 0, 1}, + {-1, -1, 0, 2, 1}, + {0, 0, -2, 0, 1}, + {0, 0, 2, -1, 2}, + {0, 1, 0, 2, 0}, + {1, 0, -2, -2, 0}, + {0, -1, 2, 0, 1}, + {1, 1, 0, -2, 1}, + {1, 0, -2, 2, 0}, + {2, 0, 0, 2, 0}, + {0, 0, 2, 4, 2}, + {0, 1, 0, 1, 0} +}; + +/* amplitudes which have secular terms; in 1/NUT_SCALE arc seconds + * {index, constant dPSI, T/10 in dPSI, constant in dEPS, T/10 in dEPS} + */ +static long ampsecul[][5] = { + {0 ,-171996 ,-1742 ,92025 ,89}, + {1 ,2062 ,2 ,-895 ,5}, + {8 ,-13187 ,-16 ,5736 ,-31}, + {9 ,1426 ,-34 ,54 ,-1}, + {10 ,-517 ,12 ,224 ,-6}, + {11 ,217 ,-5 ,-95 ,3}, + {12 ,129 ,1 ,-70 ,0}, + {15 ,17 ,-1 ,0 ,0}, + {17 ,-16 ,1 ,7 ,0}, + {30 ,-2274 ,-2 ,977 ,-5}, + {31 ,712 ,1 ,-7 ,0}, + {32 ,-386 ,-4 ,200 ,0}, + {33 ,-301 ,0 ,129 ,-1}, + {37 ,63 ,1 ,-33 ,0}, + {38 ,-58 ,-1 ,32 ,0}, + /* termination */ { -1, } +}; + +/* amplitudes which only have constant terms; same unit as above + * {dPSI, dEPS} + * indexes which are already in ampsecul[][] are zeroed + */ +static short ampconst[NUT_SERIES][2] = { + {0,0}, + {0,0}, + {46,-24}, + {11,0}, + {-3,1}, + {-3,0}, + {-2,1}, + {1,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {48,1}, + {-22,0}, + {0,0}, + {-15,9}, + {0,0}, + {-12,6}, + {-6,3}, + {-5,3}, + {4,-2}, + {4,-2}, + {-4,0}, + {1,0}, + {1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {-158,-1}, + {123,-53}, + {63,-2}, + {0,0}, + {0,0}, + {-59,26}, + {-51,27}, + {-38,16}, + {29,-1}, + {29,-12}, + {-31,13}, + {26,-1}, + {21,-10}, + {16,-8}, + {-13,7}, + {-10,5}, + {-7,0}, + {7,-3}, + {-7,3}, + {-8,3}, + {6,0}, + {6,-3}, + {-6,3}, + {-7,3}, + {6,-3}, + {-5,3}, + {5,0}, + {-5,3}, + {-4,0}, + {4,0}, + {-4,0}, + {-3,0}, + {3,0}, + {-3,1}, + {-3,1}, + {-2,1}, + {-3,1}, + {-3,1}, + {2,-1}, + {-2,1}, + {2,-1}, + {-2,1}, + {2,0}, + {2,-1}, + {1,-1}, + {-1,0}, + {1,-1}, + {-2,1}, + {-1,0}, + {1,-1}, + {-1,1}, + {-1,1}, + {1,0}, + {1,0}, + {1,-1}, + {-1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {1,0}, + {-1,0}, + {1,0} +}; + +/* given the modified JD, mj, find the nutation in obliquity, *deps, and + * the nutation in longitude, *dpsi, each in radians. + */ +void +nutation ( +double mj, +double *deps, /* on input: precision parameter in arc seconds */ +double *dpsi) +{ + static double lastmj = -10000, lastdeps, lastdpsi; + double T, T2, T3, T10; /* jul cent since J2000 */ + double prec; /* series precis in arc sec */ + int i, isecul; /* index in term table */ + static double delcache[5][2*NUT_MAXMUL+1]; + /* cache for multiples of delaunay args + * [M',M,F,D,Om][-min*x, .. , 0, .., max*x] + * make static to have unfilled fields cleared on init + */ + + if (mj == lastmj) { + *deps = lastdeps; + *dpsi = lastdpsi; + return; + } + + prec = 0.0; + +#if 0 /* this is if deps should contain a precision value */ + prec =* deps; + if (prec < 0.0 || prec > 1.0) /* accept only sane value */ + prec = 1.0; +#endif + + /* augment for abundance of small terms */ + prec *= NUT_SCALE/10; + + T = (mj - J2000)/36525.; + T2 = T * T; + T3 = T2 * T; + T10 = T/10.; + + /* calculate delaunay args and place in cache */ + for (i = 0; i < 5; ++i) { + double x; + short j; + + x = delaunay[i][0] + + delaunay[i][1] * T + + delaunay[i][2] * T2 + + delaunay[i][3] * T3; + + /* convert to radians */ + x /= SECPERCIRC; + x -= floor(x); + x *= 2.*PI; + + /* fill cache table */ + for (j = 0; j <= 2*NUT_MAXMUL; ++j) + delcache[i][j] = (j - NUT_MAXMUL) * x; + } + + /* find dpsi and deps */ + lastdpsi = lastdeps = 0.; + for (i = isecul = 0; i < NUT_SERIES ; ++i) { + double arg = 0., ampsin, ampcos; + short j; + + if (ampconst[i][0] || ampconst[i][1]) { + /* take non-secular terms from simple array */ + ampsin = ampconst[i][0]; + ampcos = ampconst[i][1]; + } else { + /* secular terms from different array */ + ampsin = ampsecul[isecul][1] + ampsecul[isecul][2] * T10; + ampcos = ampsecul[isecul][3] + ampsecul[isecul][4] * T10; + ++isecul; + } + + for (j = 0; j < 5; ++j) + arg += delcache[j][NUT_MAXMUL + multarg[i][j]]; + + if (fabs(ampsin) >= prec) + lastdpsi += ampsin * sin(arg); + + if (fabs(ampcos) >= prec) + lastdeps += ampcos * cos(arg); + + } + + /* convert to radians. + */ + lastdpsi = degrad(lastdpsi/3600./NUT_SCALE); + lastdeps = degrad(lastdeps/3600./NUT_SCALE); + + lastmj = mj; + *deps = lastdeps; + *dpsi = lastdpsi; +} + +/* given the modified JD, mj, correct, IN PLACE, the right ascension *ra + * and declination *dec (both in radians) for nutation. + */ +void +nut_eq (double mj, double *ra, double *dec) +{ + static double lastmj = -10000; + static double a[3][3]; /* rotation matrix */ + double xold, yold, zold, x, y, z; + + if (mj != lastmj) { + double epsilon, dpsi, deps; + double se, ce, sp, cp, sede, cede; + + obliquity(mj, &epsilon); + nutation(mj, &deps, &dpsi); + + /* the rotation matrix a applies the nutation correction to + * a vector of equatoreal coordinates Xeq to Xeq' by 3 subsequent + * rotations: R1 - from equatoreal to ecliptic system by + * rotation of angle epsilon about x, R2 - rotate ecliptic + * system by -dpsi about its z, R3 - from ecliptic to equatoreal + * by rotation of angle -(epsilon + deps) + * + * Xeq' = A * Xeq = R3 * R2 * R1 * Xeq + * + * [ 1 0 0 ] + * R1 = [ 0 cos(eps) sin(eps) ] + * [ 0 - sin(eps) cos(eps) ] + * + * [ cos(dpsi) - sin(dpsi) 0 ] + * R2 = [ sin(dpsi) cos(dpsi) 0 ] + * [ 0 0 1 ] + * + * [ 1 0 0 ] + * R3 = [ 0 cos(eps + deps) - sin(eps + deps) ] + * [ 0 sin(eps + deps) cos(eps + deps) ] + * + * for efficiency, here is a explicitely: + */ + + se = sin(epsilon); + ce = cos(epsilon); + sp = sin(dpsi); + cp = cos(dpsi); + sede = sin(epsilon + deps); + cede = cos(epsilon + deps); + + a[0][0] = cp; + a[0][1] = -sp*ce; + a[0][2] = -sp*se; + + a[1][0] = cede*sp; + a[1][1] = cede*cp*ce+sede*se; + a[1][2] = cede*cp*se-sede*ce; + + a[2][0] = sede*sp; + a[2][1] = sede*cp*ce-cede*se; + a[2][2] = sede*cp*se+cede*ce; + + lastmj = mj; + } + + sphcart(*ra, *dec, 1.0, &xold, &yold, &zold); + x = a[0][0] * xold + a[0][1] * yold + a[0][2] * zold; + y = a[1][0] * xold + a[1][1] * yold + a[1][2] * zold; + z = a[2][0] * xold + a[2][1] * yold + a[2][2] * zold; + cartsph(x, y, z, ra, dec, &zold); /* radius should be 1.0 */ + if (*ra < 0.) *ra += 2.*PI; /* make positive for display */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: nutation.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/obliq.c b/Common/Libraries/XEphemAstroLib/src/obliq.c new file mode 100644 index 0000000000000000000000000000000000000000..e1dfce702d88692ba92862da8b007055df96e17e --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/obliq.c @@ -0,0 +1,27 @@ +#include + +#include "astro.h" + +/* given the modified Julian date, mj, find the mean obliquity of the + * ecliptic, *eps, in radians. + * + * IAU expression (see e.g. Astron. Almanac 1984); stern + */ +void +obliquity (double mj, double *eps) +{ + static double lastmj = -16347, lasteps; + + if (mj != lastmj) { + double t = (mj - J2000)/36525.; /* centuries from J2000 */ + lasteps = degrad(23.4392911 + /* 23^ 26' 21".448 */ + t * (-46.8150 + + t * ( -0.00059 + + t * ( 0.001813 )))/3600.0); + lastmj = mj; + } + *eps = lasteps; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: obliq.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/parallactic.c b/Common/Libraries/XEphemAstroLib/src/parallactic.c new file mode 100644 index 0000000000000000000000000000000000000000..327298c1208c8b7d184fe6b81bdfbefa62e04ea4 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/parallactic.c @@ -0,0 +1,54 @@ +/* compure parallactic angle: angle formed by N pole - Object - Zenith + */ + +#include +#include + +#include "astro.h" + +/* compute parallactic angle given latitude, object dec and alt. + * all angles in rads. + * N.B. always return >= 0, caller must determine sign and degenerate cases at + * pole or zenith. + */ +double +parallacticLDA (double lt, double dec, double alt) +{ + double ca = sin(lt); + double cb = sin(dec); + double sb = cos(dec); + double cc = sin(alt); + double sc = cos(alt); + double cpa; + + /* given three sides find an angle */ + if (sb==0 || sc==0) + return (0); + cpa = (ca - cb*cc)/(sb*sc); + if (cpa < -1) cpa = -1; + if (cpa > 1) cpa = 1; + return (acos (cpa)); +} + +/* compute parallactic angle given latitude, object HA and Dec. + * all angles in rads. + * return value is between -PI and PI, sign is like HA, ie +west + */ +double +parallacticLHD (double lt, double ha, double dec) +{ + double A, b, cc, sc, B; + + A = ha; + b = PI/2 - lt; + cc = sin(dec); + sc = cos(dec); + solve_sphere (A, b, cc, sc, NULL, &B); + + if (B > PI) + B -= 2*PI; + return (B); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: parallactic.c,v $ $Date: 2003/06/30 04:23:36 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/parallax.c b/Common/Libraries/XEphemAstroLib/src/parallax.c new file mode 100644 index 0000000000000000000000000000000000000000..3e1738f241fdd581aeeb94b8ecc1932704ea70eb --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/parallax.c @@ -0,0 +1,42 @@ +#include +#include + +#include "astro.h" + + +/* given true ha and dec, tha and tdec, the geographical latitude, phi, the + * height above sea-level (as a fraction of the earths radius, 6378.16km), + * ht, and the geocentric distance rho in Earth radii(!), find the apparent + * ha and dec, aha and adec allowing for parallax. + * all angles in radians. ehp is the angle subtended at the body by the + * earth's equator. + */ +void +ta_par (double tha, double tdec, double phi, double ht, double *rho, +double *aha, double *adec) +{ + static double last_phi = 1000.0, last_ht = -1000.0, xobs, zobs; + double x, y, z; /* obj cartesian coord, in Earth radii */ + + /* avoid calcs involving the same phi and ht */ + if (phi != last_phi || ht != last_ht) { + double cphi, sphi, robs, e2 = (2 - 1/298.257)/298.257; + cphi = cos(phi); + sphi = sin(phi); + robs = 1/sqrt(1 - e2 * sphi * sphi); + + /* observer coordinates: x to meridian, y east, z north */ + xobs = (robs + ht) * cphi; + zobs = (robs*(1-e2) + ht) * sphi; + last_phi = phi; + last_ht = ht; + } + + sphcart(-tha, tdec, *rho, &x, &y, &z); + cartsph(x - xobs, y, z - zobs, aha, adec, rho); + *aha *= -1; + range (aha, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: parallax.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/plans.c b/Common/Libraries/XEphemAstroLib/src/plans.c new file mode 100644 index 0000000000000000000000000000000000000000..c769f39f1ee722bfb785cb67059af2daae9fbb71 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/plans.c @@ -0,0 +1,227 @@ +/* rewritten for Bureau des Longitude theories by Bretagnon and Chapront + * Michael Sternberg + */ +#include +#include + +#include "astro.h" +#include "vsop87.h" +#include "chap95.h" + +static void pluto_ell (double mj, double *ret); +static void chap_trans (double mj, double *ret); +//void planpos (double mj, int obj, double prec, double *ret); + +/* coordinate transformation + * from: + * J2000.0 rectangular equatoreal ret[{0,1,2}] = {x,y,z} + * to: + * mean equinox of date spherical ecliptical ret[{0,1,2}] = {l,b,r} + */ +static void +chap_trans ( +double mj, /* destination epoch */ +double *ret) /* vector to be transformed _IN PLACE_ */ +{ + double ra, dec, r, eps; + double sr, cr, sd, cd, se, ce; + + cartsph(ret[0], ret[1], ret[2], &ra, &dec, &r); + precess(J2000, mj, &ra, &dec); + obliquity(mj, &eps); + sr = sin(ra); cr = cos(ra); + sd = sin(dec); cd = cos(dec); + se = sin(eps); ce = cos(eps); + ret[0] = atan2( sr * ce + sd/cd * se, cr); /* long */ + ret[1] = asin( sd * ce - cd * se * sr); /* lat */ + ret[2] = r; /* radius */ +} + +/* low precision ecliptic coordinates of Pluto from mean orbit. + * Only for sake of completeness outside available perturbation theories. + */ +static void +pluto_ell ( +double mj, /* epoch */ +double *ret) /* ecliptic coordinates {l,b,r} at equinox of date */ +{ + /* mean orbital elements of Pluto. + * The origin of these is somewhat obscure. + */ + double a = 39.543, /* semimajor axis, au */ + e = 0.2490, /* excentricity */ + inc0 = 17.140, /* inclination, deg */ + Om0 = 110.307, /* long asc node, deg */ + omeg0 = 113.768, /* arg of perihel, deg */ + mjp = 2448045.539 - MJD0, /* epoch of perihel */ + mjeq = J2000, /* equinox of elements */ + n = 144.9600/36525.; /* daily motion, deg */ + + double inc, Om, omeg; /* orbital elements at epoch of date */ + double ma, ea, nu; /* mean, excentric and true anomaly */ + double lo, slo, clo; /* longitude in orbit from asc node */ + + reduce_elements(mjeq, mj, degrad(inc0), degrad(omeg0), degrad(Om0), + &inc, &omeg, &Om); + ma = degrad((mj - mjp) * n); + anomaly(ma, e, &nu, &ea); + ret[2] = a * (1.0 - e*cos(ea)); /* r */ + lo = omeg + nu; + slo = sin(lo); + clo = cos(lo); + ret[1] = asin(slo * sin(inc)); /* b */ + ret[0] = atan2(slo * cos(inc), clo) + Om; /* l */ +} + +/*************************************************************/ + +/* geometric heliocentric position of planet, mean ecliptic of date + * (not corrected for light-time) + */ +void +planpos (double mj, int obj, double prec, double *ret) +{ + if (mj >= CHAP_BEGIN && mj <= CHAP_END) { + if (obj >= JUPITER) { /* prefer Chapront */ + chap95(mj, obj, prec, ret); + chap_trans (mj, ret); + } else { /* VSOP for inner planets */ + vsop87(mj, obj, prec, ret); + } + } else { /* outside Chapront time: */ + if (obj != PLUTO) { /* VSOP for all but Pluto */ + vsop87(mj, obj, prec, ret); + } else { /* Pluto mean elliptic orbit */ + pluto_ell(mj, ret); + } + } +} + +/*************************************************************/ + +/* visual elements of planets + * [planet][0] = angular size at 1 AU + * [planet][1] = magnitude at 1 AU from sun and earth and 0 deg phase angle + * [planet][2] = A + * [planet][3] = B + * [planet][4] = C + * where mag correction = A*(i/100) + B*(i/100)^2 + C*(i/100)^3 + * i = angle between sun and earth from planet, degrees + * from Explanatory Supplement, 1992 + */ +static double vis_elements[8][5] = { + /* Mercury */ { 6.74, -0.36, 3.8, -2.73, 2.00}, + /* Venus */ { 16.92, -4.29, 0.09, 2.39, -.65}, + /* Mars */ { 9.36, -1.52, 1.60, 0., 0.}, + /* Jupiter */ { 196.74, -9.25, 0.50, 0., 0.}, + /* Saturn */ { 165.6, -8.88, 4.40, 0., 0.}, + /* Uranus */ { 65.8, -7.19, 0.28, 0., 0.}, + /* Neptune */ { 62.2, -6.87, 0., 0., 0.}, + /* Pluto */ { 8.2, -1.01, 4.1, 0., 0.} +}; + +/* given a modified Julian date, mj, and a planet, p, find: + * lpd0: heliocentric longitude, + * psi0: heliocentric latitude, + * rp0: distance from the sun to the planet, + * rho0: distance from the Earth to the planet, + * none corrected for light time, ie, they are the true values for the + * given instant. + * lam: geocentric ecliptic longitude, + * bet: geocentric ecliptic latitude, + * each corrected for light time, ie, they are the apparent values as + * seen from the center of the Earth for the given instant. + * dia: angular diameter in arcsec at 1 AU, + * mag: visual magnitude + * + * all angles are in radians, all distances in AU. + * + * corrections for nutation and abberation must be made by the caller. The RA + * and DEC calculated from the fully-corrected ecliptic coordinates are then + * the apparent geocentric coordinates. Further corrections can be made, if + * required, for atmospheric refraction and geocentric parallax. + */ +void +plans (double mj, PLCode p, double *lpd0, double *psi0, double *rp0, +double *rho0, double *lam, double *bet, double *dia, double *mag) +{ + static double lastmj = -10000; + static double lsn, bsn, rsn; /* geocentric coords of sun */ + static double xsn, ysn, zsn; /* cartesian " */ + double lp, bp, rp; /* heliocentric coords of planet */ + double xp, yp, zp, rho; /* rect. coords and geocentric dist. */ + double dt; /* light time */ + double *vp; /* vis_elements[p] */ + double ci, i; /* sun/earth angle: cos, degrees */ + int pass; + + /* get sun cartesian; needed only once at mj */ + if (mj != lastmj) { + sunpos (mj, &lsn, &rsn, &bsn); + sphcart (lsn, bsn, rsn, &xsn, &ysn, &zsn); + lastmj = mj; + } + + /* first find the true position of the planet at mj. + * then repeat a second time for a slightly different time based + * on the position found in the first pass to account for light-travel + * time. + */ + dt = 0.0; + for (pass = 0; pass < 2; pass++) { + double ret[6]; + + /* get spherical coordinates of planet from precision routines, + * retarded for light time in second pass; + * alternative option: vsop allows calculating rates. + */ + planpos(mj - dt, p, 0.0, ret); + + lp = ret[0]; + bp = ret[1]; + rp = ret[2]; + + sphcart (lp, bp, rp, &xp, &yp, &zp); + cartsph (xp + xsn, yp + ysn, zp + zsn, lam, bet, &rho); + + if (pass == 0) { + /* save heliocentric coordinates at first pass since, being + * true, they are NOT to be corrected for light-travel time. + */ + *lpd0 = lp; + range (lpd0, 2.*PI); + *psi0 = bp; + *rp0 = rp; + *rho0 = rho; + } + + /* when we view a planet we see it in the position it occupied + * dt days ago, where rho is the distance between it and earth, + * in AU. use this as the new time for the next pass. + */ + dt = rho * 5.7755183e-3; + } + + vp = vis_elements[p]; + *dia = vp[0]; + + /* solve plane triangle, assume sun/earth dist == 1 */ + ci = (rp*rp + rho*rho - 1)/(2*rp*rho); + + /* expl supp equation for mag */ + if (ci < -1) ci = -1; + if (ci > 1) ci = 1; + i = raddeg(acos(ci))/100.; + *mag = vp[1] + 5*log10(rho*rp) + i*(vp[2] + i*(vp[3] + i*vp[4])); + + /* rings contribution if SATURN */ + if (p == SATURN) { + double et, st, set; + satrings (bp, lp, rp, lsn+PI, rsn, mj+MJD0, &et, &st); + set = sin(fabs(et)); + *mag += (-2.60 + 1.25*set)*set; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plans.c,v $ $Date: 2003/11/15 04:07:36 $ $Revision: 1.5 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/plmoon.c b/Common/Libraries/XEphemAstroLib/src/plmoon.c new file mode 100644 index 0000000000000000000000000000000000000000..9d5eeca9af238c4ab5c995ff8a55027d4257e16a --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/plmoon.c @@ -0,0 +1,284 @@ +/* compute Obj fields for natural satellites. + */ + +#include +#include +#include + +#include "astro.h" + +/* private cache of planet ephemerides and when they were computed + * N.B. don't use ones in builtin[] -- they are the user's responsibility. + */ +static ObjPl plobj[NOBJ]; +static Now plnow[NOBJ]; + +/* public builtin storage + */ +static Obj builtin[NBUILTIN]; + +static char *moondir; + +static void setMoon (Now *np, Obj *moonop, Obj *planop, MoonData *mdp); +static void init1BI (int idx, int pl, int moon, char *name); +static void initPlobj(void); +static void rotate (double a, double *x, double *y); + +/* directory in which to look for auxil moon data files. + * N.B. caller must supply persistent storage. + */ +void +setMoonDir (char *dir) +{ + moondir = dir; +} + +/* return set of builtin objects. + * caller can use this storage but should never try to free anything. + */ +int +getBuiltInObjs (Obj **opp) +{ + if (!builtin[MERCURY].o_name[0]) { + /* first time only */ + + init1BI (MERCURY, MERCURY, X_PLANET, "Mercury"); + + init1BI (VENUS, VENUS, X_PLANET, "Venus"); + + init1BI (MARS, MARS, X_PLANET, "Mars"); + init1BI (PHOBOS, MARS, M_PHOBOS, "Phobos"); + init1BI (DEIMOS, MARS, M_DEIMOS, "Deimos"); + + init1BI (JUPITER, JUPITER, X_PLANET, "Jupiter"); + init1BI (IO, JUPITER, J_IO, "Io"); + init1BI (EUROPA, JUPITER, J_EUROPA, "Europa"); + init1BI (GANYMEDE, JUPITER, J_GANYMEDE, "Ganymede"); + init1BI (CALLISTO, JUPITER, J_CALLISTO, "Callisto"); + + init1BI (SATURN, SATURN, X_PLANET, "Saturn"); + init1BI (MIMAS, SATURN, S_MIMAS, "Mimas"); + init1BI (ENCELADUS, SATURN, S_ENCELADUS, "Enceladus"); + init1BI (TETHYS, SATURN, S_TETHYS, "Tethys"); + init1BI (DIONE, SATURN, S_DIONE, "Dione"); + init1BI (RHEA, SATURN, S_RHEA, "Rhea"); + init1BI (TITAN, SATURN, S_TITAN, "Titan"); + init1BI (HYPERION, SATURN, S_HYPERION, "Hyperion"); + init1BI (IAPETUS, SATURN, S_IAPETUS, "Iapetus"); + + init1BI (URANUS, URANUS, X_PLANET, "Uranus"); + init1BI (ARIEL, URANUS, U_ARIEL, "Ariel"); + init1BI (UMBRIEL, URANUS, U_UMBRIEL, "Umbriel"); + init1BI (TITANIA, URANUS, U_TITANIA, "Titania"); + init1BI (OBERON, URANUS, U_OBERON, "Oberon"); + init1BI (MIRANDA, URANUS, U_MIRANDA, "Miranda"); + + init1BI (NEPTUNE, NEPTUNE, X_PLANET, "Neptune"); + + init1BI (PLUTO, PLUTO, X_PLANET, "Pluto"); + + init1BI (SUN, SUN, X_PLANET, "Sun"); + + init1BI (MOON, MOON, X_PLANET, "Moon"); + } + + *opp = builtin; + return (NBUILTIN); +} + +static void +init1BI (int idx, int pl, int moon, char *name) +{ + strcpy (builtin[idx].o_name, name); + builtin[idx].o_type = PLANET; + builtin[idx].pl_code = pl; + builtin[idx].pl_moon = moon; +} + +/* find the circumstances for natural satellite object op at np. + * TODO: distances and helio coords just copied from parent planet. + */ +int +plmoon_cir (Now *np, Obj *moonop) +{ + Obj *sunop = (Obj*)&plobj[SUN]; + MoonData md[X_MAXNMOONS]; + double sz, t1, t2; + double pra, pdec; + MoonData *mdp; + Obj *planop; + + /* init plobj[] */ + if (!((Obj *)&plobj[0])->o_type) + initPlobj(); + + /* get sun @ np */ + if (memcmp (&plnow[SUN], np, sizeof(Now))) { + obj_cir (np, (Obj*)&plobj[SUN]); + memcpy (&plnow[SUN], np, sizeof(Now)); + } + + /* get parent planet and moon info @ np */ + switch (moonop->pl_code) { + + case MARS: + case PHOBOS: + case DEIMOS: + + planop = (Obj*)&plobj[MARS]; + + if (memcmp (&plnow[MARS], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[MARS], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + marsm_data (mjd, moondir, sunop, planop, &sz, &pra, &pdec, md); + mdp = &md[moonop->pl_moon]; + break; + + case JUPITER: + case IO: + case EUROPA: + case GANYMEDE: + case CALLISTO: + + planop = (Obj*)&plobj[JUPITER]; + + if (memcmp (&plnow[JUPITER], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[JUPITER], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + jupiter_data (mjd,moondir,sunop,planop,&sz,&t1,&t2,&pra,&pdec,md); + mdp = &md[moonop->pl_moon]; + moonop->pl_aux1 = t1; + moonop->pl_aux2 = t2; + break; + + case SATURN: + case MIMAS: + case ENCELADUS: + case TETHYS: + case DIONE: + case RHEA: + case TITAN: + case HYPERION: + case IAPETUS: + + planop = (Obj*)&plobj[SATURN]; + + if (memcmp (&plnow[SATURN], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[SATURN], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + saturn_data (mjd,moondir,sunop,planop,&sz,&t1,&t2,&pra,&pdec,md); + mdp = &md[moonop->pl_moon]; + moonop->pl_aux1 = t1; + moonop->pl_aux2 = t2; + break; + + case URANUS: + case ARIEL: + case UMBRIEL: + case TITANIA: + case OBERON: + case MIRANDA: + + planop = (Obj*)&plobj[URANUS]; + + if (memcmp (&plnow[URANUS], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[URANUS], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + uranus_data (mjd, moondir, sunop, planop, &sz, &pra, &pdec, md); + mdp = &md[moonop->pl_moon]; + break; + + default: + + printf ("Called plmoon_cir with bad code: %d\n",moonop->pl_code); + return (-1); + + } + + /* set moonop */ + setMoon (np, moonop, planop, mdp); + + return (0); +} + +static void +initPlobj() +{ + int i; + + for (i = 0; i < NOBJ; i++) { + ((Obj*)&plobj[i])->o_type = PLANET; + ((Obj*)&plobj[i])->pl_code = i; + } +} + +/* set moonop->s_* fields. + * np is needed to get local parallactic angle. + */ +static void +setMoon (Now *np, Obj *moonop, Obj *planop, MoonData *mdp) +{ + double pa, dra, ddec; + + /* just copy most fields from planet for now */ + moonop->s_gaera = planop->s_gaera; /* TODO */ + moonop->s_gaedec = planop->s_gaedec; /* TODO */ + moonop->s_elong = planop->s_elong; /* TODO */ + moonop->s_size = 0; /* TODO */ + moonop->s_sdist = planop->s_sdist; /* TODO */ + moonop->s_edist = planop->s_edist; /* TODO */ + moonop->s_hlat = planop->s_hlat; /* TODO */ + moonop->s_hlong = planop->s_hlong; /* TODO */ + moonop->s_phase = planop->s_phase; /* TODO */ + + /* new ra/dec directly from mdp */ + moonop->s_ra = mdp->ra; + moonop->s_dec = mdp->dec; + + /* geoemtry info */ + moonop->pl_x = mdp->x; + moonop->pl_y = mdp->y; + moonop->pl_z = mdp->z; + moonop->pl_evis = mdp->evis; + moonop->pl_svis = mdp->svis; + + /* tweak alt/az by change in ra/dec rotated by pa */ + pa = parallacticLDA (lat, planop->s_dec, planop->s_alt); + if (planop->s_az < PI) + pa = -pa; /* rotation radec to altaz */ + dra = (moonop->s_ra - planop->s_ra)*cos(planop->s_dec); + ddec = moonop->s_dec - planop->s_dec; + rotate (pa, &dra, &ddec); + moonop->s_alt = planop->s_alt + ddec; + moonop->s_az = planop->s_az - dra/cos(planop->s_alt); + + /* new mag directly from mdp */ + set_smag (moonop, mdp->mag); + + /* name */ + strcpy (moonop->o_name, mdp->full); +} + +/* rotate ccw by a */ +static void +rotate (double a, double *x, double *y) +{ + double sa = sin(a); + double ca = cos(a); + double xp = (*x)*ca - (*y)*sa; + double yp = (*x)*sa + (*y)*ca; + *x = xp; + *y = yp; +} diff --git a/Common/Libraries/XEphemAstroLib/src/plshadow.c b/Common/Libraries/XEphemAstroLib/src/plshadow.c new file mode 100644 index 0000000000000000000000000000000000000000..514adc9b35f56ad81dd9d7d2c1017a16ce87d7b9 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/plshadow.c @@ -0,0 +1,50 @@ +#include + +#include "astro.h" + +#undef sqr +#define sqr(x) ((x)*(x)) + +/* given a planet, the sun, the planet's eq pole position and a + * position of a satellite (as eq x=+e y=+s z=front in planet radii) find x,y + * position of shadow. + * return 0 if ok else -1 if shadow not on planet + */ +int +plshadow (Obj *op, Obj *sop, double polera, double poledec, double x, +double y, double z, float *sxp, float *syp) +{ + /* equatorial to ecliptic sky-plane rotation */ + double sa = cos(op->s_dec) * cos(poledec) * + (cos(op->s_ra)*sin(polera) - sin(op->s_ra)*cos(polera)); + double ca = sqrt (1.0 - sa*sa); + + /* rotate moon from equatorial to ecliptic */ + double ex = x*ca + y*sa; + double ey = -x*sa + y*ca; + + /* find angle subtended by earth-sun from planet */ + double a = asin (sin(op->s_hlong - sop->s_hlong)/op->s_edist); + double b = asin (-sin(op->s_hlat)/op->s_edist); + + /* find displacement in sky plane */ + double x0 = ex - z*tan(a); + double y0 = ey - z*tan(b); + + /* projection onto unit sphere */ + double x1 = x0 + (ex-x0)/sqrt(sqr(ex-x0)+sqr(z)); + double y1 = y0 + (ey-y0)/sqrt(sqr(ey-y0)+sqr(z)); + + /* check behind or off edge */ + if (z < 0 || sqr(x1) + sqr(y1) > 1) + return (-1); + + /* rotate back to equatorial */ + *sxp = x1*ca - y1*sa; + *syp = x1*sa + y1*ca; + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plshadow.c,v $ $Date: 2004/12/17 20:53:43 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/precess.c b/Common/Libraries/XEphemAstroLib/src/precess.c new file mode 100644 index 0000000000000000000000000000000000000000..33ed4f459a5874785f8e359493ad6cca991a3181 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/precess.c @@ -0,0 +1,146 @@ +#include +#include + +#include "astro.h" + +static void precess_hiprec (double mjd1, double mjd2, double *ra, double *dec); + + +#define DCOS(x) cos(degrad(x)) +#define DSIN(x) sin(degrad(x)) +#define DASIN(x) raddeg(asin(x)) +#define DATAN2(y,x) raddeg(atan2((y),(x))) + +/* corrects ra and dec, both in radians, for precession from epoch 1 to epoch 2. + * the epochs are given by their modified JDs, mjd1 and mjd2, respectively. + * N.B. ra and dec are modifed IN PLACE. + */ +void +precess ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ + precess_hiprec (mjd1, mjd2, ra, dec); +} + +/* + * Copyright (c) 1990 by Craig Counterman. All rights reserved. + * + * This software may be redistributed freely, not sold. + * This copyright notice and disclaimer of warranty must remain + * unchanged. + * + * No representation is made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty, to the extent permitted by applicable law. + * + * Rigorous precession. From Astronomical Ephemeris 1989, p. B18 + * + * 96-06-20 Hayo Hase : theta_a corrected + */ +static void +precess_hiprec ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ + static double last_mjd1 = -213.432, last_from; + static double last_mjd2 = -213.432, last_to; + double zeta_A, z_A, theta_A; + double T; + double A, B, C; + double alpha, delta; + double alpha_in, delta_in; + double from_equinox, to_equinox; + double alpha2000, delta2000; + + /* convert mjds to years; + * avoid the remarkably expensive calls to mjd_year() + */ + if (last_mjd1 == mjd1) + from_equinox = last_from; + else { + mjd_year (mjd1, &from_equinox); + last_mjd1 = mjd1; + last_from = from_equinox; + } + if (last_mjd2 == mjd2) + to_equinox = last_to; + else { + mjd_year (mjd2, &to_equinox); + last_mjd2 = mjd2; + last_to = to_equinox; + } + + /* convert coords in rads to degs */ + alpha_in = raddeg(*ra); + delta_in = raddeg(*dec); + + /* precession progresses about 1 arc second in .047 years */ + /* From from_equinox to 2000.0 */ + if (fabs (from_equinox-2000.0) > .02) { + T = (from_equinox - 2000.0)/100.0; + zeta_A = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T; + z_A = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T; + theta_A = 0.5567530* T - 0.0001185* T*T - 0.0000116* T*T*T; + + A = DSIN(alpha_in - z_A) * DCOS(delta_in); + B = DCOS(alpha_in - z_A) * DCOS(theta_A) * DCOS(delta_in) + + DSIN(theta_A) * DSIN(delta_in); + C = -DCOS(alpha_in - z_A) * DSIN(theta_A) * DCOS(delta_in) + + DCOS(theta_A) * DSIN(delta_in); + + alpha2000 = DATAN2(A,B) - zeta_A; + range (&alpha2000, 360.0); + delta2000 = DASIN(C); + } else { + /* should get the same answer, but this could improve accruacy */ + alpha2000 = alpha_in; + delta2000 = delta_in; + }; + + + /* From 2000.0 to to_equinox */ + if (fabs (to_equinox - 2000.0) > .02) { + T = (to_equinox - 2000.0)/100.0; + zeta_A = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T; + z_A = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T; + theta_A = 0.5567530* T - 0.0001185* T*T - 0.0000116* T*T*T; + + A = DSIN(alpha2000 + zeta_A) * DCOS(delta2000); + B = DCOS(alpha2000 + zeta_A) * DCOS(theta_A) * DCOS(delta2000) + - DSIN(theta_A) * DSIN(delta2000); + C = DCOS(alpha2000 + zeta_A) * DSIN(theta_A) * DCOS(delta2000) + + DCOS(theta_A) * DSIN(delta2000); + + alpha = DATAN2(A,B) + z_A; + range(&alpha, 360.0); + delta = DASIN(C); + } else { + /* should get the same answer, but this could improve accruacy */ + alpha = alpha2000; + delta = delta2000; + }; + + *ra = degrad(alpha); + *dec = degrad(delta); +} + +#if 0 +static void +precess_fast ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ +#define N degrad (20.0468/3600.0) +#define M hrrad (3.07234/3600.0) + double nyrs; + + nyrs = (mjd2 - mjd1)/365.2425; + *dec += N * cos(*ra) * nyrs; + *ra += (M + (N * sin(*ra) * tan(*dec))) * nyrs; + range (ra, 2.0*PI); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: precess.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/preferences.h b/Common/Libraries/XEphemAstroLib/src/preferences.h new file mode 100644 index 0000000000000000000000000000000000000000..c5786611f3dcc2d23c68e97c8cd393e63dcf196f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/preferences.h @@ -0,0 +1,41 @@ +/* global info for the preferences facility. + * N.B. many of these enums are used as indexes -- don't change without + * checking where they are used! + */ +#ifndef _PREFERENCES_H +#define _PREFERENCES_H + +#ifdef __cplusplus +extern "C" { +#endif + +// all of your legacy C code here + + +typedef enum { + PREF_EQUATORIAL, PREF_UNITS, PREF_DATE_FORMAT, PREF_ZONE, PREF_DPYPREC, + PREF_MSG_BELL, PREF_PRE_FILL, PREF_TIPS, PREF_CONFIRM, PREF_WEEKSTART, + NPREFS +} Preferences; + +typedef enum {PREF_GEO, PREF_TOPO} PrefEquatorial; +typedef enum {PREF_ENGLISH, PREF_METRIC} PrefUnits; +typedef enum {PREF_MDY, PREF_YMD, PREF_DMY} PrefDateFormat; +typedef enum {PREF_LOCALTZ, PREF_UTCTZ} PrefStampZone; +typedef enum {PREF_LOPREC, PREF_HIPREC} PrefDpyPrec; +typedef enum {PREF_NOMSGBELL, PREF_MSGBELL} PrefMsgBell; +typedef enum {PREF_PREFILL, PREF_NOPREFILL} PrefPreFill; +typedef enum {PREF_TIPSON, PREF_NOTIPS} PrefTips; +typedef enum {PREF_CONFIRMON, PREF_NOCONFIRM} PrefConfirm; +typedef enum {PREF_SAT, PREF_SUN, PREF_MON} PrefWeekStart; + +extern int pref_get (Preferences p); +extern int pref_set (Preferences p, int newp); +#ifdef __cplusplus +} +#endif +#endif /* _PREFERENCES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: preferences.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/reduce.c b/Common/Libraries/XEphemAstroLib/src/reduce.c new file mode 100644 index 0000000000000000000000000000000000000000..58ede03a854220bb9bb934c0f3223c4dafd86f7f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/reduce.c @@ -0,0 +1,78 @@ +#include + +#include + +#include "astro.h" + +/* convert those orbital elements that change from epoch mj0 to epoch mj. + */ +void +reduce_elements ( +double mj0, /* initial epoch */ +double mj, /* desired epoch */ +double inc0, /* initial inclination, rads */ +double ap0, /* initial argument of perihelion, as an mj */ +double om0, /* initial long of ascending node, rads */ +double *inc, /* resultant inclination, rads */ +double *ap, /* resultant arg of perihelion, as an mj */ +double *om) /* resultant long of ascending node, rads */ +{ + double t0, t1; + double tt, tt2, t02, tt3; + double eta, th, th0; + double a, b; + double dap; + double cinc, sinc; + double ot, sot, cot, ot1; + double seta, ceta; + + if (fabs(mj - mj0) < 1e-5) { + /* sin(eta) blows for inc < 10 degrees -- anyway, no need */ + *inc = inc0; + *ap = ap0; + *om = om0; + return; + } + + t0 = mj0/365250.0; + t1 = mj/365250.0; + + tt = t1-t0; + tt2 = tt*tt; + t02 = t0*t0; + tt3 = tt*tt2; + eta = (471.07-6.75*t0+.57*t02)*tt+(.57*t0-3.37)*tt2+.05*tt3; + th0 = 32869.0*t0+56*t02-(8694+55*t0)*tt+3*tt2; + eta = degrad(eta/3600.0); + th0 = degrad((th0/3600.0)+173.950833); + th = (50256.41+222.29*t0+.26*t02)*tt+(111.15+.26*t0)*tt2+.1*tt3; + th = th0+degrad(th/3600.0); + cinc = cos(inc0); + sinc = sin(inc0); + ot = om0-th0; + sot = sin(ot); + cot = cos(ot); + seta = sin(eta); + ceta = cos(eta); + a = sinc*sot; + b = ceta*sinc*cot-seta*cinc; + ot1 = atan(a/b); + if (b<0) ot1 += PI; + b = sinc*ceta-cinc*seta*cot; + a = -1*seta*sot; + dap = atan(a/b); + if (b<0) dap += PI; + + *ap = ap0+dap; + range (ap, 2*PI); + *om = ot1+th; + range (om, 2*PI); + + if (inc0<.175) + *inc = asin(a/sin(dap)); + else + *inc = 1.570796327-asin((cinc*ceta)+(sinc*seta*cot)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: reduce.c,v $ $Date: 2003/03/28 10:23:35 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/refract.c b/Common/Libraries/XEphemAstroLib/src/refract.c new file mode 100644 index 0000000000000000000000000000000000000000..4483cc93f71373692513769de77f790d0dc7b05f --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/refract.c @@ -0,0 +1,96 @@ +#include +#include + +#include "astro.h" + +static void unrefractLT15 (double pr, double tr, double aa, double *ta); +static void unrefractGE15 (double pr, double tr, double aa, double *ta); + +void +unrefract (double pr, double tr, double aa, double *ta) +{ +#define LTLIM 14.5 +#define GELIM 15.5 + + double aadeg = raddeg(aa); + + if (aadeg < LTLIM) + unrefractLT15 (pr, tr, aa, ta); + else if (aadeg >= GELIM) + unrefractGE15 (pr, tr, aa, ta); + else { + /* smooth blend -- important for inverse */ + double taLT, taGE, p; + + unrefractLT15 (pr, tr, aa, &taLT); + unrefractGE15 (pr, tr, aa, &taGE); + p = (aadeg - LTLIM)/(GELIM - LTLIM); + *ta = taLT + (taGE - taLT)*p; + } +} + +static void +unrefractGE15 (double pr, double tr, double aa, double *ta) +{ + double r; + + r = 7.888888e-5*pr/((273+tr)*tan(aa)); + *ta = aa - r; +} + +static void +unrefractLT15 (double pr, double tr, double aa, double *ta) +{ + double aadeg = raddeg(aa); + double r, a, b; + + a = ((2e-5*aadeg+1.96e-2)*aadeg+1.594e-1)*pr; + b = (273+tr)*((8.45e-2*aadeg+5.05e-1)*aadeg+1); + r = degrad(a/b); + + *ta = (aa < 0 && r < 0) ? aa : aa - r; /* 0 below ~5 degs */ +} + +/* correct the true altitude, ta, for refraction to the apparent altitude, aa, + * each in radians, given the local atmospheric pressure, pr, in mbars, and + * the temperature, tr, in degrees C. + */ +void +refract (double pr, double tr, double ta, double *aa) +{ +#define MAXRERR degrad(0.1/3600.) /* desired accuracy, rads */ + + double d, t, t0, a; + + if (isnan (ta)) { + *aa = ta; + return; + } + + /* first guess of error is to go backwards. + * make use that we know delta-apparent is always < delta-true. + */ + unrefract (pr, tr, ta, &t); + d = 0.8*(ta - t); + t0 = t; + a = ta; + + /* use secant method to discover a value that unrefracts to ta. + * max=7 ave=2.4 loops in hundreds of test cases. + */ + while (1) { + a += d; + unrefract (pr, tr, a, &t); + if (fabs(ta-t) <= MAXRERR) + break; + d *= -(ta - t)/(t0 - t); + t0 = t; + } + + *aa = a; + +#undef MAXRERR +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: refract.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/rings.c b/Common/Libraries/XEphemAstroLib/src/rings.c new file mode 100644 index 0000000000000000000000000000000000000000..b09b6829bb7388984d537e496a8a4cc5a5be0f55 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/rings.c @@ -0,0 +1,45 @@ +#include +#include +#include + +#include "astro.h" + +/* RINGS OF SATURN by Olson, et al, BASIC Code from Sky & Telescope, May 1995. + * As converted from BASIC to C by pmartz@dsd.es.com (Paul Martz) + * Adapted to xephem by Elwood Charles Downey. + */ +void +satrings ( +double sb, double sl, double sr, /* Saturn hlat, hlong, sun dist */ +double el, double er, /* Earth hlong, sun dist */ +double JD, /* Julian date */ +double *etiltp, double *stiltp) /* tilt from earth and sun, rads south*/ +{ + double t, i, om; + double x, y, z; + double la, be; + double s, b, sp, bp; + + t = (JD-2451545.)/365250.; + i = degrad(28.04922-.13*t+.0004*t*t); + om = degrad(169.53+13.826*t+.04*t*t); + + x = sr*cos(sb)*cos(sl)-er*cos(el); + y = sr*cos(sb)*sin(sl)-er*sin(el); + z = sr*sin(sb); + + la = atan(y/x); + if (x<0) la+=PI; + be = atan(z/sqrt(x*x+y*y)); + + s = sin(i)*cos(be)*sin(la-om)-cos(i)*sin(be); + b = atan(s/sqrt(1.-s*s)); + sp = sin(i)*cos(sb)*sin(sl-om)-cos(i)*sin(sb); + bp = atan(sp/sqrt(1.-sp*sp)); + + *etiltp = b; + *stiltp = bp; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: rings.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/riset.c b/Common/Libraries/XEphemAstroLib/src/riset.c new file mode 100644 index 0000000000000000000000000000000000000000..1629d96856609df1e5324288ce7b903691444ab7 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/riset.c @@ -0,0 +1,100 @@ +#include +#include + +#include "astro.h" + +/* given the true geocentric ra and dec of an object, the observer's latitude, + * lt, and a horizon displacement correction, dis, all in radians, find the + * local sidereal times and azimuths of rising and setting, lstr/s + * and azr/s, also all in radians, respectively. + * dis is the vertical displacement from the true position of the horizon. it + * is positive if the apparent position is higher than the true position. + * said another way, it is positive if the shift causes the object to spend + * longer above the horizon. for example, atmospheric refraction is typically + * assumed to produce a vertical shift of 34 arc minutes at the horizon; dis + * would then take on the value +9.89e-3 (radians). On the other hand, if + * your horizon has hills such that your apparent horizon is, say, 1 degree + * above sea level, you would allow for this by setting dis to -1.75e-2 + * (radians). + * + * This version contributed by Konrad Bernloehr, Nov. 1996 + * + * status: 0=normal; 1=never rises; -1=circumpolar. + * In case of non-zero status, all other returned variables are undefined. + */ +void +riset (double ra, double dec, double lt, double dis, double *lstr, +double *lsts, double *azr, double *azs, int *status) +{ +#define EPS (1e-9) /* math rounding fudge - always the way, eh? */ + double h; /* hour angle */ + double cos_h; /* cos h */ + double z; /* zenith angle */ + double zmin, zmax; /* Minimum and maximum zenith angles */ + double xaz, yaz; /* components of az */ + int shemi; /* flag for southern hemisphere reflection */ + + /* reflect lt and dec if in southern hemisphere, then az back later */ + if ((shemi= (lt < 0.)) != 0) { + lt = -lt; + dec = -dec; + } + + /* establish zenith angle, and its extrema */ + z = (PI/2.) + dis; + zmin = fabs (dec - lt); + zmax = PI - fabs(dec + lt); + + /* first consider special cases. + * these also avoid any boundary problems in subsequent computations. + */ + if (zmax <= z + EPS) { + *status = -1; /* never sets */ + return; + } + if (zmin >= z - EPS) { + *status = 1; /* never rises */ + return; + } + + /* compute rising hour angle -- beware found off */ + cos_h = (cos(z)-sin(lt)*sin(dec))/(cos(lt)*cos(dec)); + if (cos_h >= 1.) + h = 0.; + else if (cos_h <= -1.) + h = PI; + else + h = acos (cos_h); + + /* compute setting azimuth -- beware found off */ + xaz = sin(dec)*cos(lt)-cos(dec)*cos(h)*sin(lt); + yaz = -1.*cos(dec)*sin(h); + if (xaz == 0.) { + if (yaz > 0) + *azs = PI/2; + else + *azs = -PI/2; + } else + *azs = atan2 (yaz, xaz); + + /* reflect az back if southern */ + if (shemi) + *azs = PI - *azs; + range(azs, 2.*PI); + + /* rising is just the opposite side */ + *azr = 2.*PI - *azs; + range(azr, 2.*PI); + + /* rise and set are just ha either side of ra */ + *lstr = radhr(ra-h); + range(lstr,24.0); + *lsts = radhr(ra+h); + range(lsts,24.0); + + /* OK */ + *status = 0; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: riset.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/riset_cir.c b/Common/Libraries/XEphemAstroLib/src/riset_cir.c new file mode 100644 index 0000000000000000000000000000000000000000..66f91c1f4560afa00beb0455d4c40e61f29d9197 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/riset_cir.c @@ -0,0 +1,426 @@ +/* find rise and set circumstances, ie, riset_cir() and related functions. */ + +#include +#include +#include +#include + +#include "astro.h" + + +static void e_riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +static int find_0alt (double dt, double fstep, double dis, Now *np, Obj *op); +static int find_transit (double dt, Now *np, Obj *op); +static int find_maxalt (Now *np, Obj *op, double tr, double ts, double *tp, + double *alp, double *azp); + +/* find where and when an object, op, will rise and set and + * it's transit circumstances. all times are utc mjd, angles rads e of n. + * dis is the angle down from an ideal horizon, in rads (see riset()). + * N.B. dis should NOT include refraction, we do that here. + */ +void +riset_cir (Now *np, Obj *op, double dis, RiseSet *rp) +{ + double mjdn; /* mjd of local noon */ + double lstn; /* lst at local noon */ + double lr, ls; /* lst rise/set times */ + double ar, as; /* az of rise/set */ + double ran; /* RA at noon */ + Now n; /* copy to move time around */ + Obj o; /* copy to get circumstances at n */ + int rss; /* temp status */ + + /* work with local copies so we can move the time around */ + (void) memcpy ((void *)&n, (void *)np, sizeof(n)); + (void) memcpy ((void *)&o, (void *)op, sizeof(o)); + + /* fast Earth satellites need a different approach. + * "fast" here is pretty arbitrary -- just too fast to work with the + * iterative approach based on refining the times for a "fixed" object. + */ + if (op->o_type == EARTHSAT && op->es_n > FAST_SAT_RPD) { + e_riset_cir (&n, &o, dis, rp); + return; + } + + /* assume no problems initially */ + rp->rs_flags = 0; + + /* start the iteration at local noon */ + mjdn = mjd_day(mjd - tz/24.0) + tz/24.0 + 0.5; + n.n_mjd = mjdn; + now_lst (&n, &lstn); + + /* first approximation is to find rise/set times of a fixed object + * at the current epoch in its position at local noon. + * N.B. add typical refraction if dis is above horizon for initial + * go/no-go test. if it passes, real code does refraction rigorously. + */ + n.n_mjd = mjdn; + if (obj_cir (&n, &o) < 0) { + rp->rs_flags = RS_ERROR; + return; + } + ran = o.s_gaera; + riset (o.s_gaera, o.s_gaedec, lat, dis+(dis>.01 ? 0 : .01), &lr, &ls, + &ar, &as, &rss); + switch (rss) { + case 0: break; + case 1: rp->rs_flags = RS_NEVERUP; return; + case -1: rp->rs_flags = RS_CIRCUMPOLAR; goto dotransit; + default: rp->rs_flags = RS_ERROR; return; + } + + /* iterate to find better rise time */ + n.n_mjd = mjdn; + switch (find_0alt ((lr - lstn)/SIDRATE, 60/SPD, dis, &n, &o)) { + case 0: /* ok */ + rp->rs_risetm = n.n_mjd; + rp->rs_riseaz = o.s_az; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_RISERR; + break; + case -2: /* converged but not today, err but give times anyway */ + rp->rs_risetm = n.n_mjd; + rp->rs_riseaz = o.s_az; + rp->rs_flags |= RS_NORISE; + break; + case -3: /* probably never up */ + rp->rs_flags |= RS_NEVERUP; + break; + } + + /* iterate to find better set time */ + n.n_mjd = mjdn; + switch (find_0alt ((ls - lstn)/SIDRATE, 60/SPD, dis, &n, &o)) { + case 0: /* ok */ + rp->rs_settm = n.n_mjd; + rp->rs_setaz = o.s_az; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_SETERR; + break; + case -2: /* converged but not today, err but give times anyway */ + rp->rs_settm = n.n_mjd; + rp->rs_setaz = o.s_az; + rp->rs_flags |= RS_NOSET; + break; + case -3: /* probably circumpolar */ + rp->rs_flags |= RS_CIRCUMPOLAR; + break; + } + + /* can try transit even if rise or set failed */ + dotransit: + n.n_mjd = mjdn; + switch (find_transit ((radhr(ran) - lstn)/SIDRATE, &n, &o)) { + case 0: /* ok */ + rp->rs_trantm = n.n_mjd; + rp->rs_tranalt = o.s_alt; + rp->rs_tranaz = o.s_az; + break; + case -1: /* did not converge */ + rp->rs_flags |= RS_TRANSERR; + break; + case -2: /* converged but not today */ + rp->rs_flags |= RS_NOTRANS; + break; + } +} + +/* find local times when sun is dis rads below horizon. + */ +void +twilight_cir (Now *np, double dis, double *dawn, double *dusk, int *status) +{ + RiseSet rs; + Obj o; + + memset (&o, 0, sizeof(o)); + o.o_type = PLANET; + o.pl_code = SUN; + (void) strcpy (o.o_name, "Sun"); + riset_cir (np, &o, dis, &rs); + *dawn = rs.rs_risetm; + *dusk = rs.rs_settm; + *status = rs.rs_flags; +} + +/* find where and when a fast-moving Earth satellite, op, will rise and set and + * it's transit circumstances. all times are mjd, angles rads e of n. + * dis is the angle down from the local topo horizon, in rads (see riset()). + * idea is to walk forward in time looking for alt+dis==0 crossings. + * initial time step is a few degrees (based on average daily motion). + * we stop as soon as we see both a rise and set. + * N.B. we assume *np and *op are working copies we can mess up. + */ +static void +e_riset_cir (Now *np, Obj *op, double dis, RiseSet *rp) +{ +#define DEGSTEP 2 /* time step is about this many degrees */ + int steps; /* max number of time steps */ + double dt; /* time change per step, days */ + double t0, t1; /* current and next mjd values */ + double a0, a1; /* altitude at t0 and t1 */ + int rise, set; /* flags to check when we find these events */ + int i; + + dt = DEGSTEP * (1.0/360.0/op->es_n); + steps = (int)(1.0/dt); + rise = set = 0; + rp->rs_flags = 0; + + if (obj_cir (np, op) < 0) { + rp->rs_flags |= RS_ERROR; + return; + } + + t0 = mjd; + a0 = op->s_alt + dis; + + for (i = 0; i < steps && (!rise || !set); i++) { + mjd = t1 = t0 + dt; + if (obj_cir (np, op) < 0) { + rp->rs_flags |= RS_ERROR; + return; + } + a1 = op->s_alt + dis; + + if (a0 < 0 && a1 > 0 && !rise) { + /* found a rise event -- interate to refine */ + switch (find_0alt (10./3600., 5./SPD, dis, np, op)) { + case 0: /* ok */ + rp->rs_risetm = np->n_mjd; + rp->rs_riseaz = op->s_az; + rise = 1; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_RISERR; + return; + case -2: /* converged but not today */ /* FALLTHRU */ + case -3: /* probably never up */ + rp->rs_flags |= RS_NORISE; + return; + } + } else if (a0 > 0 && a1 < 0 && !set) { + /* found a setting event -- interate to refine */ + switch (find_0alt (10./3600., 5./SPD, dis, np, op)) { + case 0: /* ok */ + rp->rs_settm = np->n_mjd; + rp->rs_setaz = op->s_az; + set = 1; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_SETERR; + return; + case -2: /* converged but not today */ /* FALLTHRU */ + case -3: /* probably circumpolar */ + rp->rs_flags |= RS_NOSET; + return; + } + } + + t0 = t1; + a0 = a1; + } + + /* instead of transit, for satellites we find time of maximum + * altitude, if we know both the rise and set times. + */ + if (rise && set) { + double tt, al, az; + if (find_maxalt (np, op, rp->rs_risetm, rp->rs_settm, &tt, &al, &az) < 0) { + rp->rs_flags |= RS_TRANSERR; + return; + } + rp->rs_trantm = tt; + rp->rs_tranalt = al; + rp->rs_tranaz = az; + } else + rp->rs_flags |= RS_NOTRANS; + + /* check for some bad conditions */ + if (!rise) { + if (a0 > 0) + rp->rs_flags |= RS_CIRCUMPOLAR; + else + rp->rs_flags |= RS_NORISE; + } + if (!set) { + if (a0 < 0) + rp->rs_flags |= RS_NEVERUP; + else + rp->rs_flags |= RS_NOSET; + } +} + +/* given a Now at noon and a dt from np, in hours, for a first approximation + * to a rise or set event, refine the event by searching for when alt+dis = 0. + * return 0: if find one within 12 hours of noon with np and op set to the + * better time and circumstances; + * return -1: if error from obj_cir; + * return -2: if converges but not today; + * return -3: if does not converge at all (probably circumpolar or never up); + */ +static int +find_0alt ( +double dt, /* hours from initial np to first guess at event */ +double fstep, /* first step size, days */ +double dis, /* horizon displacement, rads */ +Now *np, /* working Now -- starts with mjd is noon, returns as answer */ +Obj *op) /* working object -- returns as answer */ +{ +#define TMACC (0.01/SPD) /* convergence accuracy, days; tight for stable az */ +#define MAXPASSES 20 /* max iterations to try */ +#define MAXSTEP (12.0/24.0) /* max time step,days (to detect flat)*/ + + double a0 = 0; + double mjdn = mjd; + int npasses; + + /* insure initial guess is today -- if not, move by 24 hours */ + if (dt < -12.0 && !find_0alt (dt+24, fstep, dis, np, op)) + return (0); + mjd = mjdn; + if (dt > 12.0 && !find_0alt (dt-24, fstep, dis, np, op)) + return (0); + mjd = mjdn; + + /* convert dt to days for remainder of algorithm */ + dt /= 24.0; + + /* use secant method to look for s_alt + dis == 0 */ + npasses = 0; + do { + double a1; + + mjd += dt; + if (obj_cir (np, op) < 0) + return (-1); + a1 = op->s_alt; + + dt = (npasses == 0) ? fstep : (dis+a1)*dt/(a0-a1); + a0 = a1; + + if (++npasses > MAXPASSES || fabs(dt) >= MAXSTEP) + return (-3); + + } while (fabs(dt)>TMACC); + // fprintf (stderr, "%s 0alt npasses = %d\n", op->o_name, npasses); + + /* return codes */ + return (fabs(mjdn-mjd) < .5 ? 0 : -2); + +#undef MAXPASSES +#undef MAXSTEP +#undef TMACC +} + +/* find when the given object transits. start the search when LST matches the + * object's RA at noon. + * if ok, return 0 with np and op set to the transit conditions; if can't + * converge return -1; if converges ok but not today return -2. + * N.B. we assume np is passed set to local noon. + */ +static int +find_transit (double dt, Now *np, Obj *op) +{ +#define MAXLOOPS 10 +#define MAXERR (1./3600.) /* hours */ + double mjdn = mjd; + double lst; + int i; + + /* insure initial guess is today -- if not, move by 24 hours */ + if (dt < -12.0) + dt += 24.0; + if (dt > 12.0) + dt -= 24.0; + + i = 0; + do { + mjd += dt/24.0; + if (obj_cir (np, op) < 0) + return (-1); + now_lst (np, &lst); + dt = (radhr(op->s_gaera) - lst); + if (dt < -12.0) + dt += 24.0; + if (dt > 12.0) + dt -= 24.0; + } while (++i < MAXLOOPS && fabs(dt) > MAXERR); + + /* fprintf (stderr, "%s find_transit loops = %d, dt = %g seconds\n", op->o_name, i, dt*3600); */ + + /* return codes */ + if (i == MAXLOOPS) + return (-1); + return (fabs(mjd - mjdn) < 0.5 ? 0 : -2); + +#undef MAXLOOPS +#undef MAXERR +} + +/* find the mjd time of max altitude between the given rise and set times. + * N.B. we assume *np and *op are working copies we can modify. + * return 0 if ok, else -1. + */ +static int +find_maxalt ( +Now *np, +Obj *op, +double tr, double ts, /* mjd of rise and set */ +double *tp, /* time of max altitude */ +double *alp, double *azp) /* max altitude and transit az at said time */ +{ +#define MAXLOOPS 100 /* max loops */ +#define MAXERR (1.0/SPD) /* days */ + + double l, r; /* times known to bracket max alt */ + double m1, m2; /* intermediate range points inside l and r */ + double a1, a2; /* alt at m1 and m2 */ + int nloops; /* max loop check */ + + /* want rise before set */ + while (ts < tr) + tr -= 1.0/op->es_n; + + /* init time bracket */ + l = tr; + r = ts; + + /* ternary search for max */ + for (nloops = 0; r - l > MAXERR && nloops < MAXLOOPS; nloops++) { + + mjd = m1 = (2*l + r)/3; + obj_cir (np, op); + a1 = op->s_alt; + + mjd = m2 = (l + 2*r)/3; + obj_cir (np, op); + a2 = op->s_alt; + + if (a1 < a2) + l = m1; + else + r = m2; + } + // fprintf (stderr, "tern nloops = %d\n", nloops); + if (nloops >= MAXLOOPS) + return (-1); + + /* best is between l and r */ + mjd = *tp = (l+r)/2; + obj_cir (np, op); + *alp = op->s_alt; + *azp = op->s_az; + + return (0); +#undef MAXERR +#undef MAXLOOPS +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: riset_cir.c,v $ $Date: 2013/01/06 01:12:57 $ $Revision: 1.18 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/satlib.h b/Common/Libraries/XEphemAstroLib/src/satlib.h new file mode 100644 index 0000000000000000000000000000000000000000..31c34675ccbf49c3d0b622fdb927c4d97a586381 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/satlib.h @@ -0,0 +1,206 @@ +#ifndef __SATLIB_H +#define __SATLIB_H + +/* $Id: satlib.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _SatElem { + float se_XMO; + float se_XNODEO; + float se_OMEGAO; + float se_EO; + float se_XINCL; + float se_XNDD60; + float se_BSTAR; + float pad1; + double se_XNO; + double se_XNDT20; + double se_EPOCH; + struct { + unsigned int catno : 21; + unsigned int classif : 5; + unsigned int elnum : 10; + unsigned int year : 14; + unsigned int launch : 10; + unsigned int piece : 15; + unsigned int ephtype : 4; + unsigned int orbit : 17; + } se_id; +} SatElem; + +#if 0 +struct sat_loc { + double sl_X; + double sl_XDOT; + double sl_Y; + double sl_YDOT; + double sl_Z; + double sl_ZDOT; +}; +#endif + +struct sgp4_data { + unsigned int sgp4_flags; + unsigned int pad; + double sgp4_AODP; + double sgp4_AYCOF; + double sgp4_C1; + double sgp4_C4; + double sgp4_C5; + double sgp4_COSIO; + double sgp4_D2; + double sgp4_D3; + double sgp4_D4; + double sgp4_DELMO; + double sgp4_ETA; + double sgp4_OMGCOF; + double sgp4_OMGDOT; + double sgp4_SINIO; + double sgp4_SINMO; + double sgp4_T2COF; + double sgp4_T3COF; + double sgp4_T4COF; + double sgp4_T5COF; + double sgp4_X1MTH2; + double sgp4_X3THM1; + double sgp4_X7THM1; + double sgp4_XLCOF; + double sgp4_XMCOF; + double sgp4_XMDOT; + double sgp4_XNODCF; + double sgp4_XNODOT; + double sgp4_XNODP; +}; + +struct deep_data { + struct { + unsigned int IRESFL : 1; + unsigned int ISYNFL : 1; + } deep_flags; + double deep_s_SINIQ; + double deep_s_COSIQ; + double deep_s_OMGDT; + double deep_ATIME; + double deep_D2201; + double deep_D2211; + double deep_D3210; + double deep_D3222; + double deep_D4410; + double deep_D4422; + double deep_D5220; + double deep_D5232; + double deep_D5421; + double deep_D5433; + double deep_DEL1; + double deep_DEL2; + double deep_DEL3; + double deep_E3; + double deep_EE2; + double deep_FASX2; + double deep_FASX4; + double deep_FASX6; + double deep_OMEGAQ; + double deep_PE; + double deep_PINC; + double deep_PL; + double deep_SAVTSN; + double deep_SE2; + double deep_SE3; + double deep_SGH2; + double deep_SGH3; + double deep_SGH4; + double deep_SGHL; + double deep_SGHS; + double deep_SH2; + double deep_SH3; + double deep_SHS; + double deep_SHL; + double deep_SI2; + double deep_SI3; + double deep_SL2; + double deep_SL3; + double deep_SL4; + double deep_SSE; + double deep_SSG; + double deep_SSH; + double deep_SSI; + double deep_SSL; + double deep_STEP2; + double deep_STEPN; + double deep_STEPP; + double deep_THGR; + double deep_XFACT; + double deep_XGH2; + double deep_XGH3; + double deep_XGH4; + double deep_XH2; + double deep_XH3; + double deep_XI2; + double deep_XI3; + double deep_XL2; + double deep_XL3; + double deep_XL4; + double deep_XLAMO; + double deep_XLI; + double deep_XNI; + double deep_XNQ; + double deep_XQNCL; + double deep_ZMOL; + double deep_ZMOS; +}; + +struct sdp4_data { + double sdp4_AODP; /* dpa */ + double sdp4_AYCOF; + double sdp4_BETAO; /* dpa */ + double sdp4_BETAO2; /* dpa */ + double sdp4_C1; + double sdp4_C4; + double sdp4_COSG; /* dpa */ + double sdp4_COSIO; /* dpa */ + double sdp4_EOSQ; /* dpa */ + double sdp4_OMGDOT; /* dpa */ + double sdp4_SING; /* dpa */ + double sdp4_SINIO; /* dpa */ + double sdp4_T2COF; + double sdp4_THETA2; /* dpa */ + double sdp4_X1MTH2; + double sdp4_X3THM1; + double sdp4_X7THM1; + double sdp4_XLCOF; + double sdp4_XMDOT; /* dpa */ + double sdp4_XNODCF; + double sdp4_XNODOT; /* dpa */ + double sdp4_XNODP; /* dpa */ + + double sdp4_XMDF_seco; + double sdp4_OMGADF_seco; + double sdp4_XNODE_seco; + double sdp4_EM_seco; + double sdp4_XINC_seco; + double sdp4_XN_seco; + + double sdp4_E_pero; + double sdp4_XINC_pero; + double sdp4_OMGADF_pero; + double sdp4_XNODE_pero; + double sdp4_XMAM_pero; +}; + +typedef struct _SatData { + struct _SatElem *elem; + union { + struct sgp4_data *sgp4; + struct sdp4_data *sdp4; + } prop; + struct deep_data *deep; +} SatData; + +void sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double t); + +void sdp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE); + +#endif /* __SATLIB_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satlib.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/satmoon.c b/Common/Libraries/XEphemAstroLib/src/satmoon.c new file mode 100644 index 0000000000000000000000000000000000000000..6e401c208d7fd634c3e41aba02f129a0cd3d2bda --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/satmoon.c @@ -0,0 +1,510 @@ +/* saturn moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double JD, char *dir, MoonData md[S_NMOONS]); +static void bruton_saturn (Obj *sop, double JD, MoonData md[S_NMOONS]); +static void moonradec (double satsize, MoonData md[S_NMOONS]); +static void moonSVis (Obj *eop, Obj *sop, MoonData md[S_NMOONS]); +static void moonEVis (MoonData md[S_NMOONS]); +static void moonPShad (Obj *eop, Obj *sop, MoonData md[S_NMOONS]); +static void moonTrans (MoonData md[S_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData smd[S_NMOONS] = { + {"Saturn", NULL}, + {"Mimas", "I"}, + {"Enceladus","II"}, + {"Tethys", "III"}, + {"Dione", "IV"}, + {"Rhea", "V"}, + {"Titan", "VI"}, + {"Hyperion","VII"}, + {"Iapetus", "VIII"}, +}; +static double sizemjd; +static double etiltmjd; +static double stiltmjd; + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(40.58) /* RA of Saturn's north pole */ +#define POLE_DEC degrad(83.54) /* Dec of Saturn's north pole */ + + +/* get saturn info in md[0], moon info in md[1..S_NMOONS-1]. + * if !dir always use bruton model. + * if !sop caller just wants md[] for names + * N.B. we assume eop and sop are updated. + */ +void +saturn_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *eop, /* earth == Sun */ +Obj *sop, /* saturn */ +double *sizep, /* saturn's angular diam, rads */ +double *etiltp, double *stiltp, /* earth and sun tilts -- +S */ +double *polera, double *poledec,/* pole location */ +MoonData md[S_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, smd, sizeof(smd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !sop) { + if (sop) { + *sizep = sizemjd; + *etiltp = etiltmjd; + *stiltp = stiltmjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = sop->s_ra; + md[0].dec = sop->s_dec; + md[0].mag = get_mag(sop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from sop */ + *sizep = degrad(sop->s_size/3600.0); + + /* Visual Magnitude of the Satellites */ + + md[1].mag = 13; md[2].mag = 11.8; md[3].mag = 10.3; md[4].mag = 10.2; + md[5].mag = 9.8; md[6].mag = 8.4; md[7].mag = 14.3; md[8].mag = 11.2; + + /* get tilts from sky and tel code */ + satrings (sop->s_hlat, sop->s_hlong, sop->s_sdist, eop->s_hlong, + eop->s_edist, JD, etiltp, stiltp); + + /* get moon x,y,z from BDL if possible, else Bruton's model */ + if (!dir || use_bdl (JD, dir, md) < 0) + bruton_saturn (sop, JD, md); + + /* set visibilities */ + moonSVis (eop, sop, md); + moonPShad (eop, sop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + etiltmjd = *etiltp; + stiltmjd = *stiltp; + sizemjd = *sizep; + memcpy (smd, md, sizeof(smd)); +} + +/* hunt for BDL file in dir[] and use if possible. + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[S_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define SATRAU .0004014253 /* saturn radius, AU */ + double x[S_NMOONS], y[S_NMOONS], z[S_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "saturne.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "saturne.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != S_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, S_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < S_NMOONS; i++) { + md[i].x = x[i-1]/SATRAU; /* we want sat radii +E */ + md[i].y = -y[i-1]/SATRAU; /* we want sat radii +S */ + md[i].z = -z[i-1]/SATRAU; /* we want sat radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* */ +/* SS2TXT.BAS Dan Bruton, astro@tamu.edu */ +/* */ +/* This is a text version of SATSAT2.BAS. It is smaller, */ +/* making it easier to convert other languages (250 lines */ +/* compared to 850 lines). */ +/* */ +/* This BASIC program computes and displays the locations */ +/* of Saturn's Satellites for a given date and time. See */ +/* "Practical Astronomy with your Calculator" by Peter */ +/* Duffett-Smith and the Astronomical Almanac for explanations */ +/* of some of the calculations here. The code is included so */ +/* that users can make changes or convert to other languages. */ +/* This code was made using QBASIC (comes with DOS 5.0). */ +/* */ +/* ECD: merged with Sky and Tel, below, for better earth and sun ring tilt */ +/* */ + +/* ECD: BASICeze */ +#define FOR for +#define IF if +#define ELSE else +#define COS cos +#define SIN sin +#define TAN tan +#define ATN atan +#define ABS fabs +#define SQR sqrt + +/* find saturn moon data from Bruton's model */ +/* this originally computed +X:East +Y:North +Z:behind in [1..8] indeces. + * and +tilt:front south, rads + * then we adjust things in md[].x/y/z/mag to fit into our MoonData format. + */ +static void +bruton_saturn ( +Obj *sop, /* saturn */ +double JD, /* julian date */ +MoonData md[S_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ + /* ECD: code does not use [0]. + * ECD and why 11 here? seems like 9 would do + */ + double SMA[11], U[11], U0[11], PD[11]; + double X[S_NMOONS], Y[S_NMOONS], Z[S_NMOONS]; + + double P,TP,TE,EP,EE,RE0,RP0,RS; + double JDE,LPE,LPP,LEE,LEP; + double NN,ME,MP,VE,VP; + double LE,LP,RE,RP,DT,II,F,F1; + double RA,DECL; + double TVA,PVA,TVC,PVC,DOT1,INC,TVB,PVB,DOT2,INCI; + double TRIP,GAM,TEMPX,TEMPY,TEMPZ; + int I; + + /* saturn */ + RA = sop->s_ra; + DECL = sop->s_dec; + + /* ******************************************************************** */ + /* * * */ + /* * Constants * */ + /* * * */ + /* ******************************************************************** */ + P = PI / 180; + /* Orbital Rate of Saturn in Radians per Days */ + TP = 2 * PI / (29.45771 * 365.2422); + /* Orbital Rate of Earth in Radians per Day */ + TE = 2 * PI / (1.00004 * 365.2422); + /* Eccentricity of Saturn's Orbit */ + EP = .0556155; + /* Eccentricity of Earth's Orbit */ + EE = .016718; + /* Semimajor axis of Earth's and Saturn's orbit in Astronomical Units */ + RE0 = 1; RP0 = 9.554747; + /* Semimajor Axis of the Satellites' Orbit in Kilometers */ + SMA[1] = 185600; SMA[2] = 238100; SMA[3] = 294700; SMA[4] = 377500; + SMA[5] = 527200; SMA[6] = 1221600; SMA[7] = 1483000; SMA[8] = 3560100; + /* Eccentricity of Satellites' Orbit [Program uses 0] */ + /* Synodic Orbital Period of Moons in Days */ + PD[1] = .9425049; + PD[2] = 1.3703731; + PD[3] = 1.8880926; + PD[4] = 2.7375218; + PD[5] = 4.5191631; + PD[6] = 15.9669028; + PD[7] = 21.3174647; + PD[8] = 79.9190206; /* personal mail 1/14/95 */ + RS = 60330; /* Radius of planet in kilometers */ + + /* ******************************************************************** */ + /* * * */ + /* * Epoch Information * */ + /* * * */ + /* ******************************************************************** */ + JDE = 2444238.5; /* Epoch Jan 0.0 1980 = December 31,1979 0:0:0 UT */ + LPE = 165.322242 * P; /* Longitude of Saturn at Epoch */ + LPP = 92.6653974 * P; /* Longitude of Saturn`s Perihelion */ + LEE = 98.83354 * P; /* Longitude of Earth at Epoch */ + LEP = 102.596403 * P; /* Longitude of Earth's Perihelion */ + /* U0[I] = Angle from inferior geocentric conjuction */ + /* measured westward along the orbit at epoch */ + U0[1] = 18.2919 * P; + U0[2] = 174.2135 * P; + U0[3] = 172.8546 * P; + U0[4] = 76.8438 * P; + U0[5] = 37.2555 * P; + U0[6] = 57.7005 * P; + U0[7] = 266.6977 * P; + U0[8] = 195.3513 * P; /* from personal mail 1/14/1995 */ + + /* ******************************************************************** */ + /* * * */ + /* * Orbit Calculations * */ + /* * * */ + /* ******************************************************************** */ + /* ****************** FIND MOON ORBITAL ANGLES ************************ */ + NN = JD - JDE; /* NN = Number of days since epoch */ + ME = ((TE * NN) + LEE - LEP); /* Mean Anomoly of Earth */ + MP = ((TP * NN) + LPE - LPP); /* Mean Anomoly of Saturn */ + VE = ME; VP = MP; /* True Anomolies - Solve Kepler's Equation */ + FOR (I = 1; I <= 3; I++) { + VE = VE - (VE - (EE * SIN(VE)) - ME) / (1 - (EE * COS(VE))); + VP = VP - (VP - (EP * SIN(VP)) - MP) / (1 - (EP * COS(VP))); + } + VE = 2 * ATN(SQR((1 + EE) / (1 - EE)) * TAN(VE / 2)); + IF (VE < 0) VE = (2 * PI) + VE; + VP = 2 * ATN(SQR((1 + EP) / (1 - EP)) * TAN(VP / 2)); + IF (VP < 0) VP = (2 * PI) + VP; + /* Heliocentric Longitudes of Earth and Saturn */ + LE = VE + LEP; IF (LE > (2 * PI)) LE = LE - (2 * PI); + LP = VP + LPP; IF (LP > (2 * PI)) LP = LP - (2 * PI); + /* Distances of Earth and Saturn from the Sun in AU's */ + RE = RE0 * (1 - EE * EE) / (1 + EE * COS(VE)); + RP = RP0 * (1 - EP * EP) / (1 + EP * COS(VP)); + /* DT = Distance from Saturn to Earth in AU's - Law of Cosines */ + DT = SQR((RE * RE) + (RP * RP) - (2 * RE * RP * COS(LE - LP))); + /* II = Angle between Earth and Sun as seen from Saturn */ + II = RE * SIN(LE - LP) / DT; + II = ATN(II / SQR(1 - II * II)); /* ArcSIN and Law of Sines */ + /* F = NN - (Light Time to Earth in days) */ + F = NN - (DT / 173.83); + F1 = II + MP - VP; + /* U(I) = Angle from inferior geocentric conjuction measured westward */ + FOR (I = 1; I < S_NMOONS; I++) { + U[I] = U0[I] + (F * 2 * PI / PD[I]) + F1; + U[I] = ((U[I] / (2 * PI)) - (int)(U[I] / (2 * PI))) * 2 * PI; + + } + + /* **************** FIND INCLINATION OF RINGS ************************* */ + /* Use dot product of Earth-Saturn vector and Saturn's rotation axis */ + TVA = (90 - 83.51) * P; /* Theta coordinate of Saturn's axis */ + PVA = 40.27 * P; /* Phi coordinate of Saturn's axis */ + TVC = (PI / 2) - DECL; + PVC = RA; + DOT1 = SIN(TVA) * COS(PVA) * SIN(TVC) * COS(PVC); + DOT1 = DOT1 + SIN(TVA) * SIN(PVA) * SIN(TVC) * SIN(PVC); + DOT1 = DOT1 + COS(TVA) * COS(TVC); + INC = ATN(SQR(1 - DOT1 * DOT1) / DOT1); /* ArcCOS */ + IF (INC > 0) INC = (PI / 2) - INC; ELSE INC = -(PI / 2) - INC; + + /* ************* FIND INCLINATION OF IAPETUS' ORBIT ******************* */ + /* Use dot product of Earth-Saturn vector and Iapetus' orbit axis */ + /* Vector B */ + TVB = (90 - 75.6) * P; /* Theta coordinate of Iapetus' orbit axis (estimate) */ + PVB = 21.34 * 2 * PI / 24; /* Phi coordinate of Iapetus' orbit axis (estimate) */ + DOT2 = SIN(TVB) * COS(PVB) * SIN(TVC) * COS(PVC); + DOT2 = DOT2 + SIN(TVB) * SIN(PVB) * SIN(TVC) * SIN(PVC); + DOT2 = DOT2 + COS(TVB) * COS(TVC); + INCI = ATN(SQR(1 - DOT2 * DOT2) / DOT2); /* ArcCOS */ + IF (INCI > 0) INCI = (PI / 2) - INCI; ELSE INCI = -(PI / 2) - INCI; + + /* ************* FIND ROTATION ANGLE OF IAPETUS' ORBIT **************** */ + /* Use inclination of Iapetus' orbit with respect to ring plane */ + /* Triple Product */ + TRIP = SIN(TVC) * COS(PVC) * SIN(TVA) * SIN(PVA) * COS(TVB); + TRIP = TRIP - SIN(TVC) * COS(PVC) * SIN(TVB) * SIN(PVB) * COS(TVA); + TRIP = TRIP + SIN(TVC) * SIN(PVC) * SIN(TVB) * COS(PVB) * COS(TVA); + TRIP = TRIP - SIN(TVC) * SIN(PVC) * SIN(TVA) * COS(PVA) * COS(TVB); + TRIP = TRIP + COS(TVC) * SIN(TVA) * COS(PVA) * SIN(TVB) * SIN(PVB); + TRIP = TRIP - COS(TVC) * SIN(TVB) * COS(PVB) * SIN(TVA) * SIN(PVA); + GAM = -1 * ATN(TRIP / SQR(1 - TRIP * TRIP)); /* ArcSIN */ + + /* ******************************************************************** */ + /* * * */ + /* * Compute Moon Positions * */ + /* * * */ + /* ******************************************************************** */ + FOR (I = 1; I < S_NMOONS - 1; I++) { + X[I] = -1 * SMA[I] * SIN(U[I]) / RS; + Z[I] = -1 * SMA[I] * COS(U[I]) / RS; /* ECD */ + Y[I] = SMA[I] * COS(U[I]) * SIN(INC) / RS; + } + /* ************************* Iapetus' Orbit *************************** */ + TEMPX = -1 * SMA[8] * SIN(U[8]) / RS; + TEMPZ = -1 * SMA[8] * COS(U[8]) / RS; + TEMPY = SMA[8] * COS(U[8]) * SIN(INCI) / RS; + X[8] = TEMPX * COS(GAM) + TEMPY * SIN(GAM); /* Rotation */ + Z[8] = TEMPZ * COS(GAM) + TEMPY * SIN(GAM); + Y[8] = -1 * TEMPX * SIN(GAM) + TEMPY * COS(GAM); + +#ifdef SHOWALL + /* ******************************************************************** */ + /* * * */ + /* * Show Results * */ + /* * * */ + /* ******************************************************************** */ + printf (" Julian Date : %g\n", JD); + printf (" Right Ascension of Saturn : %g Hours\n", RA * 24 / (2 * PI)); + printf (" Declination of Saturn : %g\n", DECL / P); + printf (" Ring Inclination as seen from Earth : %g\n", -1 * INC / P); + printf (" Heliocentric Longitude of Saturn : %g\n", LP / P); + printf (" Heliocentric Longitude of Earth : %g\n", LE / P); + printf (" Sun-Saturn-Earth Angle : %g\n", II / P); + printf (" Distance between Saturn and Earth : %g AU = %g million miles\n", DT, (DT * 93)); + printf (" Light time from Saturn to Earth : %g minutes\n", DT * 8.28); + TEMP = 2 * ATN(TAN(165.6 * P / (2 * 3600)) / DT) * 3600 / P; + printf (" Angular Size of Saturn : %g arcsec\n", TEMP); + printf (" Major Angular Size of Saturn's Rings : %g arcsec\n", RS4 * TEMP / RS); + printf (" Minor Angular Size of Saturn's Rings : %g arcsec\n", ABS(RS4 * TEMP * SIN(INC) / RS)); +#endif + + /* copy into md[1..S_NMOONS-1] with our sign conventions */ + for (I = 1; I < S_NMOONS; I++) { + md[I].x = X[I]; /* we want +E */ + md[I].y = -Y[I]; /* we want +S */ + md[I].z = -Z[I]; /* we want +front */ + } +} + +/* given saturn loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in sat radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double satsize, /* sat diameter, rads */ +MoonData md[S_NMOONS]) /* fill in RA and Dec */ +{ + double satrad = satsize/2; + double satra = md[0].ra; + double satdec = md[0].dec; + int i; + + for (i = 1; i < S_NMOONS; i++) { + double dra = satrad * md[i].x; + double ddec = satrad * md[i].y; + md[i].ra = satra + dra; + md[i].dec = satdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *eop, /* earth == SUN */ +Obj *sop, /* saturn */ +MoonData md[S_NMOONS]) +{ + double esd = eop->s_edist; + double eod = sop->s_edist; + double sod = sop->s_sdist; + double soa = degrad(sop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*sop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *eop, /* earth == SUN */ +Obj *sop, /* saturn */ +MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (sop, eop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: satmoon.c,v $ $Date: 2007/07/24 18:15:28 $ $Revision: 1.8 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/satspec.h b/Common/Libraries/XEphemAstroLib/src/satspec.h new file mode 100644 index 0000000000000000000000000000000000000000..0986dd7890972fe85878b1eab7a8c5336d0655a4 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/satspec.h @@ -0,0 +1,43 @@ +#ifndef __SATSPEC_H +#define __SATSPEC_H + +/* $Id: satspec.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#include "sattypes.h" +#include "satlib.h" + +#define SGP4_SIMPLE 0x00000001 + +extern void init_deep(struct deep_data *deep); +void init_sdp4(struct sdp4_data *sdp); +char *tleerr(int); +int readtle(char *, char *, SatElem *); + +double current_jd(); + +double ut1_to_gha(double); + +void smallsleep(double t); + +double epoch_jd(double); + +double actan(double sinx, double cosx); + +double thetag(double EP, double *DS50); + +void dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ, + double RTEQSQ, double AO, double COSQ2, double SINOMO, + double COSOMO, double BSQ, double XLLDOT, double OMGDT, + double XNODOT, double XNODP); + +void dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES, + double *EM, double *XINC, double *XN, double T); + +void dpper(SatData *sat, double *EM, double *XINC, double *OMGASM, + double *XNODES, double *XLL, double T); + +#endif /* __SATSPEC_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satspec.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/sattypes.h b/Common/Libraries/XEphemAstroLib/src/sattypes.h new file mode 100644 index 0000000000000000000000000000000000000000..61891ff0369d3321dba92d740e508cde033dd8e3 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/sattypes.h @@ -0,0 +1,28 @@ +#ifndef __SATTYPES_H +#define __SATTYPES_H + +/* $Id: sattypes.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _Vec3 { + double x, y, z; +} Vec3; + + +typedef struct _LookAngle { + double az; + double el; + double r; +} LookAngle; + + +typedef struct _Geoloc { + double lt; + double ln; + double h; +} GeoLoc; + +#endif /* __SATTYPES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: sattypes.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/sdp4.c b/Common/Libraries/XEphemAstroLib/src/sdp4.c new file mode 100644 index 0000000000000000000000000000000000000000..54e575ce35cecde87d05965c9ffb498bb2c005a7 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/sdp4.c @@ -0,0 +1,430 @@ +#include +#include +#undef SING + +#include "sattypes.h" +#include "vector.h" +#include "satspec.h" + +/* SDP4 3 NOV 80 */ +/* SUBROUTINE SDP4(IFLAG,TSINCE) + COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O, + 1 XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 + COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD, + 1 XJ3,XKE,XKMPER,XMNPDA,AE + DOUBLE PRECISION EPOCH, DS50 + */ + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define CK2 (5.413080e-04) +#define CK4 (6.209887e-07) +#define QOMS2T (1.880279e-09) +#define S (1.012229e+00) + +#define AE (1.0) +#define DE2RA (.174532925E-1) +#define E6A (1.E-6) +#define PI (3.14159265) +#define PIO2 (1.57079633) +#define QO (120.0) +#define SO (78.0) +#define TOTHRD (.66666667) +#define TWOPI (6.2831853) +#define X3PIO2 (4.71238898) +#define XJ2 (1.082616E-3) +#define XJ3 (-.253881E-5) +#define XJ4 (-1.65597E-6) +#define XKE (.743669161E-1) +#define XKMPER (6378.135) +#define XMNPDA (1440.) + +/* int IFLAG; */ + +#define X (pos->sl_X) +#define XDOT (pos->sl_XDOT) +#define Y (pos->sl_Y) +#define YDOT (pos->sl_YDOT) +#define Z (pos->sl_Z) +#define ZDOT (pos->sl_ZDOT) + +/* sat->prop.sdp4-> */ +#define AODP (sat->prop.sdp4->sdp4_AODP) +#define AYCOF (sat->prop.sdp4->sdp4_AYCOF) +#define BETAO (sat->prop.sdp4->sdp4_BETAO) +#define BETAO2 (sat->prop.sdp4->sdp4_BETAO2) +#define C1 (sat->prop.sdp4->sdp4_C1) +#define C4 (sat->prop.sdp4->sdp4_C4) +#define COSG (sat->prop.sdp4->sdp4_COSG) +#define COSIO (sat->prop.sdp4->sdp4_COSIO) +#define EOSQ (sat->prop.sdp4->sdp4_EOSQ) +#define OMGDOT (sat->prop.sdp4->sdp4_OMGDOT) +#define SING (sat->prop.sdp4->sdp4_SING) +#define SINIO (sat->prop.sdp4->sdp4_SINIO) +#define T2COF (sat->prop.sdp4->sdp4_T2COF) +#define THETA2 (sat->prop.sdp4->sdp4_THETA2) +#define X1MTH2 (sat->prop.sdp4->sdp4_X1MTH2) +#define X3THM1 (sat->prop.sdp4->sdp4_X3THM1) +#define X7THM1 (sat->prop.sdp4->sdp4_X7THM1) +#define XLCOF (sat->prop.sdp4->sdp4_XLCOF) +#define XMDOT (sat->prop.sdp4->sdp4_XMDOT) +#define XNODCF (sat->prop.sdp4->sdp4_XNODCF) +#define XNODOT (sat->prop.sdp4->sdp4_XNODOT) +#define XNODP (sat->prop.sdp4->sdp4_XNODP) + +#define XMDF_seco (sat->prop.sdp4->sdp4_XMDF_seco) +#define OMGADF_seco (sat->prop.sdp4->sdp4_OMGADF_seco) +#define XNODE_seco (sat->prop.sdp4->sdp4_XNODE_seco) +#define EM_seco (sat->prop.sdp4->sdp4_EM_seco) +#define XINC_seco (sat->prop.sdp4->sdp4_XINC_seco) +#define XN_seco (sat->prop.sdp4->sdp4_XN_seco) + +#define E_pero (sat->prop.sdp4->sdp4_E_pero) +#define XINC_pero (sat->prop.sdp4->sdp4_XINC_pero) +#define OMGADF_pero (sat->prop.sdp4->sdp4_OMGADF_pero) +#define XNODE_pero (sat->prop.sdp4->sdp4_XNODE_pero) +#define XMAM_pero (sat->prop.sdp4->sdp4_XMAM_pero) + +void +sdp4 (SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE) +{ + int i; + + /* private temporary variables used only in init section */ + double A1,A3OVK2,AO,C2,COEF,COEF1,DEL1,DELO,EETA,ETA, + ETASQ,PERIGE,PINVSQ,PSISQ,QOMS24,S4,THETA4,TSI,X1M5TH,XHDOT1; + + /* private temporary variables */ + double A,AXN,AYN,AYNL,BETA,BETAL,CAPU,COS2U,COSEPW=0, + COSIK,COSNOK,COSU,COSUK,E,ECOSE,ELSQ,EM=0,EPW,ESINE,OMGADF,PL, + R,RDOT,RDOTK,RFDOT,RFDOTK,RK,SIN2U,SINEPW=0,SINIK,SINNOK, + SINU,SINUK,TEMP,TEMP1,TEMP2,TEMP3=0,TEMP4=0,TEMP5=0,TEMP6=0,TEMPA, + TEMPE,TEMPL,TSQ,U,UK,UX,UY,UZ,VX,VY,VZ,XINC=0,XINCK,XL,XLL,XLT, + XMAM,XMDF,XMX,XMY,XN,XNODDF,XNODE,XNODEK; + +#if 0 + A1=A3OVK2=AO=C2=COEF=COEF1=DEL1=DELO=EETA=ETA = signaling_nan(); + ETASQ=PERIGE=PINVSQ=PSISQ=QOMS24=S4=THETA4=TSI=X1M5TH=XHDOT1 = signaling_nan(); + + A=AXN=AYN=AYNL=BETA=BETAL=CAPU=COS2U=COSEPW = signaling_nan(); + COSIK=COSNOK=COSU=COSUK=E=ECOSE=ELSQ=EM=EPW=ESINE=OMGADF=PL = signaling_nan(); + R=RDOT=RDOTK=RFDOT=RFDOTK=RK=SIN2U=SINEPW=SINIK=SINNOK = signaling_nan(); + SINU=SINUK=TEMP=TEMP1=TEMP2=TEMP3=TEMP4=TEMP5=TEMP6=TEMPA = signaling_nan(); + TEMPE=TEMPL=TSQ=U=UK=UX=UY=UZ=VX=VY=VZ=XINC=XINCK=XL=XLL=XLT = signaling_nan(); + XMAM=XMDF=XMX=XMY=XN=XNODDF=XNODE=XNODEK = signaling_nan(); +#endif + + if(TSINCE != 0.0 && !sat->prop.sdp4) { + /* + * Yes, this is a recursive call. + */ + sdp4(sat, pos, dpos, 0.0); + } + +/* IF (IFLAG .EQ. 0) GO TO 100 */ +/* if(!IFLAG) */ + if(!sat->prop.sdp4) { + sat->prop.sdp4 = (struct sdp4_data *) malloc(sizeof(struct sdp4_data)); + +/* init_sdp4(sat->prop.sdp4); */ + +/* RECOVER ORIGINAL MEAN MOTION (XNODP) AND SEMIMAJOR AXIS (AODP) */ +/* FROM INPUT ELEMENTS */ + + A1=pow((XKE/XNO), TOTHRD); + COSIO=cos(XINCL); + THETA2=COSIO*COSIO; + X3THM1=3.0 * THETA2 - 1.0; + EOSQ = EO * EO; + BETAO2 = 1.0 - EOSQ; + BETAO = sqrt(BETAO2); + DEL1 = 1.5 * CK2 * X3THM1 / (A1 * A1 * BETAO * BETAO2); + AO = A1 * (1.0 - DEL1 * (0.5 * TOTHRD + + DEL1 * (1.0 + 134.0 / 81.0 * DEL1))); + DELO = 1.5 * CK2 * X3THM1 / (AO * AO * BETAO * BETAO2); + XNODP = XNO / (1.0 + DELO); + AODP = AO / (1.0 - DELO); + +/* INITIALIZATION */ + +/* FOR PERIGEE BELOW 156 KM, THE VALUES OF +* S AND QOMS2T ARE ALTERED */ + + S4 = S; + QOMS24 = QOMS2T; + PERIGE = (AODP * (1.0 - EO) - AE) * XKMPER; + +/* IF(PERIGE .GE. 156.) GO TO 10 */ + + if(PERIGE < 156.0) { + S4 = PERIGE - 78.0; + + if(PERIGE <= 98.0) { /* GO TO 9 */ + S4 = 20.0; + } + + QOMS24 = pow((120.0 - S4) * AE / XKMPER, 4.0); /* 9 */ + S4 = S4 / XKMPER + AE; + } + PINVSQ = 1.0 / (AODP * AODP * BETAO2 * BETAO2); /* 10 */ + SING = sin(OMEGAO); + COSG = cos(OMEGAO); + TSI = 1.0 / (AODP - S4); + ETA = AODP * EO * TSI; + ETASQ = ETA * ETA; + EETA = EO * ETA; + PSISQ = fabs(1.0 - ETASQ); + COEF = QOMS24 * pow(TSI, 4.0); + COEF1 = COEF / pow(PSISQ, 3.5); + C2 = COEF1 * XNODP * (AODP * (1.0 + 1.5 * ETASQ + + EETA * (4.0 + ETASQ)) + + .75 * CK2 * TSI / PSISQ * X3THM1 * + (8.0 + 3.0 * ETASQ * (8.0 + ETASQ))); + C1 = BSTAR * C2; + SINIO = sin(XINCL); + A3OVK2 = -XJ3 / CK2 * AE * AE * AE; /* A3OVK2=-XJ3/CK2*AE**3; */ + X1MTH2 = 1.0 - THETA2; + C4 = 2.0 * XNODP * COEF1 * AODP * BETAO2 * + (ETA * (2.0 + .5 * ETASQ) + EO * (.5 + 2.0 * ETASQ) - + 2.0 * CK2 * TSI / (AODP * PSISQ) * + (-3.0 * X3THM1 * (1.0 - 2.0 * EETA + ETASQ * + (1.5 - .5 * EETA)) + + .75 * X1MTH2 * (2.0 * ETASQ - EETA * + (1.0 + ETASQ)) * cos(2.0 * OMEGAO))); + THETA4 = THETA2 * THETA2; + TEMP1 = 3.0 * CK2 * PINVSQ * XNODP; + TEMP2 = TEMP1 * CK2 * PINVSQ; + TEMP3 = 1.25 * CK4 * PINVSQ * PINVSQ * XNODP; + XMDOT = XNODP + 0.5 * TEMP1 * BETAO * X3THM1 + .0625 * TEMP2 * BETAO * + (13.0 - 78.0 * THETA2 + 137.0 * THETA4); + X1M5TH=1.0 - 5.0 * THETA2; + OMGDOT = -.5 * TEMP1 * X1M5TH + .0625 * TEMP2 * + (7.0 - 114.0 * THETA2 + 395.0 * THETA4) + + TEMP3 * (3.0 - 36.0 * THETA2 + 49.0 * THETA4); + XHDOT1 = -TEMP1 * COSIO; + XNODOT = XHDOT1 + (.5 * TEMP2 * (4.0 - 19.0 * THETA2) + + 2.0 * TEMP3 * (3.0 - 7.0 * THETA2)) * COSIO; + XNODCF = 3.5 * BETAO2 * XHDOT1 * C1; + T2COF = 1.5 * C1; + XLCOF = .125 * A3OVK2 * SINIO * (3.0 + 5.0 * COSIO) / (1.0 + COSIO); + AYCOF = .25 * A3OVK2 * SINIO; + X7THM1 = 7.0 * THETA2 - 1.0; +/* 90 IFLAG=0 */ + +#ifdef SDP_DEEP_DEBUG + printf("calling dpinit\n"); + printf("%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n", + EOSQ,SINIO,COSIO,BETAO,AODP,THETA2, + SING,COSG,BETAO2,XMDOT,OMGDOT,XNODOT,XNODP); +#endif + dpinit(sat, EOSQ, SINIO, COSIO, BETAO, AODP, THETA2, + SING, COSG, BETAO2, XMDOT, OMGDOT, XNODOT, XNODP); + +/* CALL DPINIT(EOSQ,SINIO,COSIO,BETAO,AODP,THETA2, + 1 SING,COSG,BETAO2,XMDOT,OMGDOT,XNODOT,XNODP) */ + +/* UPDATE FOR SECULAR GRAVITY AND ATMOSPHERIC DRAG */ + } + + XMDF = XMO + XMDOT * TSINCE; /* 100 */ + OMGADF = OMEGAO + OMGDOT * TSINCE; + XNODDF = XNODEO + XNODOT * TSINCE; + TSQ = TSINCE * TSINCE; + XNODE = XNODDF + XNODCF * TSQ; + TEMPA = 1.0 - C1 * TSINCE; + TEMPE = BSTAR * C4 * TSINCE; + TEMPL = T2COF * TSQ; + XN = XNODP; + + if(TSINCE == 0.0) { + XMDF_seco = XMDF; + OMGADF_seco = OMGADF; + XNODE_seco = XNODE; + EM_seco = EM; + XINC_seco = XINC; + XN_seco = XN; + } + + dpsec(sat, &XMDF, &OMGADF, &XNODE, &EM, &XINC, &XN, TSINCE); + + if(TSINCE == 0.0) { + XMDF_seco = XMDF - XMDF_seco; + OMGADF_seco = OMGADF - OMGADF_seco; + XNODE_seco = XNODE - XNODE_seco; + EM_seco = EM - EM_seco; + XINC_seco = XINC - XINC_seco; + XN_seco = XN - XN_seco; + +#if 0 + printf("XMDF_seco = %e\n", XMDF_seco); + printf("OMGADF_seco = %e\n", OMGADF_seco); + printf("XNODE_seco = %e\n", XNODE_seco); + printf("EM_seco = %e\n", EM_seco); + printf("XINC_seco = %e\n", XINC_seco); + printf("XN_seco = %e\n", XN_seco); +#endif + } + + /* + XMDF -= XMDF_seco; + OMGADF -= OMGADF_seco; + XNODE -= XNODE_seco; + EM -= EM_seco; + XINC -= XINC_seco; + XN -= XN_seco; + */ + + A = pow(XKE/XN, TOTHRD) * TEMPA * TEMPA; + E = EM - TEMPE; +#ifdef SDP_DEEP_DEBUG + printf("*** E = %f\n", E); +#endif + XMAM = XMDF + XNODP * TEMPL; +/* CALL DPPER(E,XINC,OMGADF,XNODE,XMAM) */ + +#ifdef SDP_DEEP_DEBUG + printf("%12s %12s %12s %12s %12s\n", + "E", "XINC", "OMGADF", "XNODE", "XMAM"); + printf("%12f %12f %12f %12f %12f\n", + E, XINC, OMGADF, XNODE, XMAM); +#endif + + if(TSINCE == 0.0) { + E_pero = E; + XINC_pero = XINC; + OMGADF_pero = OMGADF; + XNODE_pero = XNODE; + XMAM_pero = XMAM; + } + + dpper(sat, &E, &XINC, &OMGADF, &XNODE, &XMAM, TSINCE); + + if(TSINCE == 0.0) { + E_pero = E - E_pero; + XINC_pero = XINC - XINC_pero; + OMGADF_pero = OMGADF - OMGADF_pero; + XNODE_pero = XNODE - XNODE_pero; + XMAM_pero = XMAM - XMAM_pero; + +#if 0 + printf("E_pero = %e\n", E_pero); + printf("XINC_pero = %e\n", XINC_pero); + printf("OMGADF_pero = %e\n", OMGADF_pero); + printf("XNODE_pero = %e\n", XNODE_pero); + printf("XMAM_pero = %e\n\n", XMAM_pero); +#endif + } + + /* + E -= E_pero; + XINC -= XINC_pero; + OMGADF -= OMGADF_pero; + XNODE -= XNODE_pero; + XMAM -= XMAM_pero; + */ + XL = XMAM + OMGADF + XNODE; + BETA = sqrt(1.0 - E * E); + XN = XKE / pow(A, 1.5); + +/* LONG PERIOD PERIODICS */ + + AXN = E * cos(OMGADF); + TEMP=1./(A*BETA*BETA); + XLL=TEMP*XLCOF*AXN; + AYNL=TEMP*AYCOF; + XLT=XL+XLL; + AYN=E*sin(OMGADF)+AYNL; + +/* SOLVE KEPLERS EQUATION */ + + CAPU=fmod(XLT-XNODE, TWOPI); + TEMP2=CAPU; +/* DO 130 I=1,10*/ + for(i = 1; i < 10; i++) { + SINEPW=sin(TEMP2); + COSEPW=cos(TEMP2); + TEMP3=AXN*SINEPW; + TEMP4=AYN*COSEPW; + TEMP5=AXN*COSEPW; + TEMP6=AYN*SINEPW; + EPW=(CAPU-TEMP4+TEMP3-TEMP2)/(1.-TEMP5-TEMP6)+TEMP2; +/* IF(ABS(EPW-TEMP2) .LE. E6A) GO TO 140 */ + if(fabs(EPW-TEMP2) <= E6A) + break; + TEMP2=EPW; /* 130 */ + } + +/* SHORT PERIOD PRELIMINARY QUANTITIES */ + + ECOSE=TEMP5+TEMP6; /* 140 */ + ESINE=TEMP3-TEMP4; + ELSQ=AXN*AXN+AYN*AYN; + TEMP=1.-ELSQ; + PL=A*TEMP; + R=A*(1.-ECOSE); + TEMP1=1./R; + RDOT=XKE*sqrt(A)*ESINE*TEMP1; + RFDOT=XKE*sqrt(PL)*TEMP1; + TEMP2=A*TEMP1; + BETAL=sqrt(TEMP); + TEMP3=1./(1.+BETAL); + COSU=TEMP2*(COSEPW-AXN+AYN*ESINE*TEMP3); + SINU=TEMP2*(SINEPW-AYN-AXN*ESINE*TEMP3); + U=actan(SINU,COSU); + SIN2U=2.*SINU*COSU; + COS2U=2.*COSU*COSU-1.0; + TEMP=1./PL; + TEMP1=CK2*TEMP; + TEMP2=TEMP1*TEMP; + +/* UPDATE FOR SHORT PERIODICS */ + + RK=R*(1.-1.5*TEMP2*BETAL*X3THM1)+.5*TEMP1*X1MTH2*COS2U; + UK=U - .25 * TEMP2 * X7THM1 * SIN2U; + XNODEK=XNODE+1.5*TEMP2*COSIO*SIN2U; + XINCK=XINC+1.5*TEMP2*COSIO*SINIO*COS2U; + RDOTK=RDOT-XN*TEMP1*X1MTH2*SIN2U; + RFDOTK=RFDOT+XN*TEMP1*(X1MTH2*COS2U+1.5*X3THM1); + +/* ORIENTATION VECTORS */ + SINUK=sin(UK); + COSUK=cos(UK); + SINIK=sin(XINCK); + COSIK=cos(XINCK); + SINNOK=sin(XNODEK); + COSNOK=cos(XNODEK); + XMX=-SINNOK*COSIK; + XMY=COSNOK*COSIK; + UX=XMX*SINUK+COSNOK*COSUK; + UY=XMY*SINUK+SINNOK*COSUK; + UZ=SINIK*SINUK; + VX=XMX*COSUK-COSNOK*SINUK; + VY=XMY*COSUK-SINNOK*SINUK; + VZ=SINIK*COSUK; +#if 0 + printf("UX = %f VX = %f RK = %f RDOTK = %f RFDOTK = %f\n", + UX, VX, RK, RDOTK, RFDOTK); +#endif +/* POSITION AND VELOCITY */ + + pos->x = RK*UX; + pos->y = RK*UY; + pos->z = RK*UZ; + dpos->x = RDOTK*UX+RFDOTK*VX; + dpos->y = RDOTK*UY+RFDOTK*VY; + dpos->z = RDOTK*UZ+RFDOTK*VZ; +/* RETURN + END */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sdp4.c,v $ $Date: 2002/12/26 05:43:07 $ $Revision: 1.5 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/sgp4.c b/Common/Libraries/XEphemAstroLib/src/sgp4.c new file mode 100644 index 0000000000000000000000000000000000000000..e1b191acf02fa8efb072f0dcf06fcc4d4fb6a824 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/sgp4.c @@ -0,0 +1,401 @@ +#include +#include + +#include "sattypes.h" +#include "vector.h" +#include "satspec.h" + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define X (pos->sl_X) +#define XDOT (pos->sl_XDOT) +#define Y (pos->sl_Y) +#define YDOT (pos->sl_YDOT) +#define Z (pos->sl_Z) +#define ZDOT (pos->sl_ZDOT) + +#define AODP (sat->prop.sgp4->sgp4_AODP) +#define AYCOF (sat->prop.sgp4->sgp4_AYCOF) +#define C1 (sat->prop.sgp4->sgp4_C1) +#define C4 (sat->prop.sgp4->sgp4_C4) +#define C5 (sat->prop.sgp4->sgp4_C5) +#define COSIO (sat->prop.sgp4->sgp4_COSIO) +#define D2 (sat->prop.sgp4->sgp4_D2) +#define D3 (sat->prop.sgp4->sgp4_D3) +#define D4 (sat->prop.sgp4->sgp4_D4) +#define DELMO (sat->prop.sgp4->sgp4_DELMO) +#define ETA (sat->prop.sgp4->sgp4_ETA) +#define OMGCOF (sat->prop.sgp4->sgp4_OMGCOF) +#define OMGDOT (sat->prop.sgp4->sgp4_OMGDOT) +#define SINIO (sat->prop.sgp4->sgp4_SINIO) +#define SINMO (sat->prop.sgp4->sgp4_SINMO) +#define T2COF (sat->prop.sgp4->sgp4_T2COF) +#define T3COF (sat->prop.sgp4->sgp4_T3COF) +#define T4COF (sat->prop.sgp4->sgp4_T4COF) +#define T5COF (sat->prop.sgp4->sgp4_T5COF) +#define X1MTH2 (sat->prop.sgp4->sgp4_X1MTH2) +#define X3THM1 (sat->prop.sgp4->sgp4_X3THM1) +#define X7THM1 (sat->prop.sgp4->sgp4_X7THM1) +#define XLCOF (sat->prop.sgp4->sgp4_XLCOF) +#define XMCOF (sat->prop.sgp4->sgp4_XMCOF) +#define XMDOT (sat->prop.sgp4->sgp4_XMDOT) +#define XNODCF (sat->prop.sgp4->sgp4_XNODCF) +#define XNODOT (sat->prop.sgp4->sgp4_XNODOT) +#define XNODP (sat->prop.sgp4->sgp4_XNODP) + +#define CK2 (5.413080e-04) +#define CK4 (6.209887e-07) +#define QOMS2T (1.880279e-09) +#define S (1.012229e+00) + +#define AE (1.0) +#define DE2RA (.174532925E-1) +#define E6A (1.E-12) +#define PI (3.14159265) +#define PIO2 (1.57079633) +#define QO (120.0) +#define SO (78.0) +#define TOTHRD (.66666667) +#define TWOPI (6.2831853) +#define X3PIO2 (4.71238898) +#define XJ2 (1.082616E-3) +#define XJ3 (-.253881E-5) +#define XJ4 (-1.65597E-6) +#define XKE (.743669161E-1) +#define XKMPER (6378.135) +#define XMNPDA (1440.0) + +/* compute position and velocity vectors for the satellite defined in sat->elem + * at its epoch + TSINCE. + */ +void +sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE) +{ + int i; + + double A1, A3OVK2, AO, BETAO, BETAO2, C1SQ, C2, C3, COEF, COEF1, + DEL1, DELO, EETA, EOSQ, ETASQ, PERIGE, PINVSQ, PSISQ, QOMS24, + S4, TEMP, TEMP1, TEMP2, TEMP3=0, THETA2, THETA4, TSI, X1M5TH, + XHDOT1; + + double A, AXN, AYN, AYNL, BETA, BETAL, CAPU, COS2U, COSEPW=0, COSIK, + COSNOK, COSU, COSUK, DELM, DELOMG, E, ECOSE, ELSQ, EPW, ESINE, + OMEGA, OMGADF, PL, R, RDOT, RDOTK, RFDOT, RFDOTK, RK, SIN2U, + SINEPW=0, SINIK, SINNOK, SINU, SINUK, TCUBE, TEMP4=0, TEMP5=0, TEMP6=0, + TEMPA, TEMPE, TEMPL, TFOUR, TSQ, U, UK, UX, UY, UZ, VX, VY, VZ, + XINCK, XL, XLL, XLT, XMDF, XMP, XMX, XMY, XN, XNODDF, XNODE, + XNODEK; + +#if 0 + A1 = A3OVK2 = AO = BETAO = BETAO2 = C1SQ = C2 = C3 = COEF = COEF1 = + DEL1 = DELO = EETA = EOSQ = ETASQ = PERIGE = PINVSQ = PSISQ = QOMS24 = + S4 = TEMP = TEMP1 = TEMP2 = TEMP3 = THETA2 = THETA4 = TSI = X1M5TH = + XHDOT1 = signaling_nan(); + + A = AXN = AYN = AYNL = BETA = BETAL = CAPU = COS2U = COSEPW = COSIK = + COSNOK = COSU = COSUK = DELM = DELOMG = E = ECOSE = ELSQ = EPW = + ESINE = OMEGA = OMGADF = PL = R = RDOT = RDOTK = RFDOT = RFDOTK = + RK = SIN2U = SINEPW = SINIK = SINNOK = SINU = SINUK = TCUBE = TEMP4 = + TEMP5 = TEMP6 = TEMPA = TEMPE = TEMPL = TFOUR = TSQ = U = UK = UX = + UY = UZ = VX = VY = VZ = XINCK = XL = XLL = XLT = XMDF = XMP = XMX = + XMY = XN = XNODDF = XNODE = XNODEK = signaling_nan(); +#endif + + if(!sat->prop.sgp4) { + sat->prop.sgp4 = (struct sgp4_data *) malloc(sizeof(struct sgp4_data)); + + /* + * RECOVER ORIGINAL MEAN MOTION (XNODP) AND SEMIMAJOR AXIS (AODP) + * FROM INPUT ELEMENTS + */ + + A1 = pow((XKE/XNO), TOTHRD); + COSIO = cos(XINCL); + THETA2 = COSIO * COSIO; + X3THM1 = 3.0 * THETA2 - 1.0; + EOSQ = EO * EO; + BETAO2 = 1.0 - EOSQ; + BETAO = sqrt(BETAO2); + DEL1 = 1.5 * CK2 * X3THM1 / (A1 * A1 * BETAO * BETAO2); + AO = A1 * (1.0 - DEL1 * (.5 * TOTHRD + + DEL1 * (1.0 + 134.0 /81.0 * DEL1))); + DELO = 1.5 * CK2 * X3THM1 / (AO * AO * BETAO * BETAO2); + XNODP = XNO / (1.0 + DELO); + AODP=AO / (1.0 - DELO); + + /* + * INITIALIZATION + * + * FOR PERIGEE LESS THAN 220 KILOMETERS, THE ISIMP FLAG IS SET AND + * THE EQUATIONS ARE TRUNCATED TO LINEAR VARIATION IN SQRT A AND + * QUADRATIC VARIATION IN MEAN ANOMALY. ALSO, THE C3 TERM, THE + * DELTA OMEGA TERM, AND THE DELTA M TERM ARE DROPPED. + */ + + sat->prop.sgp4->sgp4_flags = 0; + + /* IF((AODP*(1.-EO)/AE) .LT. (220./XKMPER+AE)) ISIMP=1 */ + + if((AODP * (1.0 - EO) / AE) < (220.0 / XKMPER + AE)) + sat->prop.sgp4->sgp4_flags |= SGP4_SIMPLE; + + /* + * FOR PERIGEE BELOW 156 KM, THE VALUES OF + * S AND QOMS2T ARE ALTERED + */ + + S4 = S; + QOMS24 = QOMS2T; + PERIGE = (AODP * (1.0 - EO) - AE) * XKMPER; + + if(PERIGE < 156.0) { + S4 = PERIGE - 78.0; + + if(PERIGE <= 98.0) + S4 = 20.0; + + QOMS24 = pow(((120.0 - S4) * AE / XKMPER), 4.0); + S4 = S4 / XKMPER + AE; + } + + PINVSQ=1.0 / (AODP * AODP * BETAO2 * BETAO2); + TSI = 1.0 / (AODP - S4); + ETA = AODP * EO * TSI; + ETASQ = ETA * ETA; + EETA = EO * ETA; + + PSISQ = fabs(1.0 - ETASQ); + + COEF = QOMS24 * pow(TSI, 4.0); + COEF1 = COEF / pow(PSISQ, 3.5); + + C2 = COEF1 * XNODP * (AODP * (1.0 + 1.5 * ETASQ + + EETA * (4.0 + ETASQ)) + .75 * + CK2 * TSI / + PSISQ * X3THM1 * (8.0 + + 3.0 * ETASQ * (8.0 + ETASQ))); + + + C1 = BSTAR * C2; + + SINIO = sin(XINCL); + + A3OVK2 = -XJ3 / CK2 * pow(AE, 3.0); + + C3 = COEF * TSI * A3OVK2 * XNODP * AE * SINIO / EO; + + X1MTH2 = 1.0 - THETA2; + C4 = 2.0 * XNODP * COEF1 * AODP * BETAO2 * + (ETA * (2.0 + .5 * ETASQ) + + EO * (.5 + 2.0 * ETASQ) - + 2.0 * CK2 * TSI / (AODP * PSISQ) * + (-3.0 * X3THM1 * (1.0 - 2.0 * EETA + ETASQ * (1.5 - .5 * EETA)) + + .75 * X1MTH2 * (2.0 * ETASQ - EETA * (1.0 + ETASQ)) * + cos(2.0 * OMEGAO))); + + C5 = 2.0 * COEF1 * AODP * BETAO2 * (1.0 + + 2.75 * (ETASQ + EETA) + + EETA * ETASQ); + THETA4 = THETA2 * THETA2; + TEMP1 = 3.0 * CK2 * PINVSQ * XNODP; + TEMP2 = TEMP1 * CK2 * PINVSQ; + TEMP3 = 1.25 * CK4 * PINVSQ * PINVSQ * XNODP; + + XMDOT = XNODP + + .5 * TEMP1 * BETAO * X3THM1 + + .0625 * TEMP2 * BETAO * (13.0 - 78.0 * THETA2 + 137.0 * THETA4); + + X1M5TH = 1.0 - 5.0 * THETA2; + + OMGDOT = -.5 * TEMP1 * X1M5TH + + .0625 * TEMP2 * (7.0 - 114.0 * THETA2 + 395.0 * THETA4) + + TEMP3 * (3.0 - 36.0 * THETA2 + 49.0 * THETA4); + + XHDOT1 = -TEMP1 * COSIO; + + XNODOT = XHDOT1 + (.5 * TEMP2 * (4.0 - 19.0 * THETA2) + + 2.0 * TEMP3 * (3.0 - 7.0 * THETA2)) * COSIO; + + OMGCOF = BSTAR * C3 * cos(OMEGAO); + + XMCOF = -TOTHRD * COEF * BSTAR * AE / EETA; + XNODCF = 3.5 * BETAO2 * XHDOT1 * C1; + T2COF = 1.5 * C1; + XLCOF = .125 * A3OVK2 * SINIO * (3.0 + 5.0 *COSIO) / (1.0 + COSIO); + + AYCOF = .25 * A3OVK2 * SINIO; + DELMO = pow(1.0 + ETA * cos(XMO), 3.0); + SINMO = sin(XMO); + + X7THM1 = 7.0 * THETA2 - 1.0; + +/* IF(ISIMP .EQ. 1) GO TO 90 */ + if(!(sat->prop.sgp4->sgp4_flags & SGP4_SIMPLE)) { + C1SQ = C1 * C1; + D2 = 4.0 * AODP * TSI * C1SQ; + TEMP = D2 * TSI * C1 / 3.0; + D3 = (17.0 * AODP + S4) * TEMP; + D4 = .5 * TEMP * AODP * TSI * (221.0 * AODP + 31.0 * S4) * C1; + T3COF = D2 + 2.0 * C1SQ; + T4COF = .25 * (3.0 * D3 + C1 * (12.0 * D2 + 10.0 * C1SQ)); + T5COF = .2 * (3.0 * D4 + + 12.0 * C1 * D3 + + 6.0 * D2 * D2 + + 15.0 * C1SQ * (2.0 * D2 + C1SQ)); + } + } + + /* + * UPDATE FOR SECULAR GRAVITY AND ATMOSPHERIC DRAG + */ + + XMDF = XMO + XMDOT * TSINCE; + OMGADF = OMEGAO + OMGDOT * TSINCE; + XNODDF = XNODEO + XNODOT * TSINCE; + OMEGA = OMGADF; + XMP = XMDF; + TSQ = TSINCE * TSINCE; + XNODE = XNODDF + XNODCF * TSQ; + TEMPA = 1.0 - C1 * TSINCE; + TEMPE = BSTAR * C4 * TSINCE; + TEMPL = T2COF * TSQ; + if(!(sat->prop.sgp4->sgp4_flags & SGP4_SIMPLE)) { + DELOMG = OMGCOF * TSINCE; + DELM = XMCOF * (pow(1.0 + ETA * cos(XMDF), 3) - DELMO); + TEMP = DELOMG + DELM; + XMP = XMDF + TEMP; + OMEGA = OMGADF - TEMP; + TCUBE = TSQ * TSINCE; + TFOUR = TSINCE * TCUBE; + TEMPA = TEMPA - D2 * TSQ - D3 * TCUBE - D4 * TFOUR; + TEMPE = TEMPE + BSTAR * C5 * (sin(XMP) - SINMO); + TEMPL = TEMPL + T3COF * TCUBE + TFOUR * (T4COF + TSINCE * T5COF); + } + + A = AODP * TEMPA * TEMPA; + E = EO - TEMPE; + XL = XMP + OMEGA + XNODE + XNODP * TEMPL; + BETA = sqrt(1.0 - E * E); + XN = XKE / pow(A, 1.5); + + /* + * LONG PERIOD PERIODICS + */ + + AXN = E * cos(OMEGA); + TEMP = 1.0 / (A * BETA * BETA); + XLL = TEMP * XLCOF * AXN; + AYNL = TEMP * AYCOF; + XLT = XL + XLL; + AYN = E * sin(OMEGA) + AYNL; + + /* + * SOLVE KEPLERS EQUATION + */ + + CAPU = fmod(XLT - XNODE, TWOPI); + TEMP2 = CAPU; + + for(i = 0; i < 10; i++) { + SINEPW = sin(TEMP2); + COSEPW = cos(TEMP2); + TEMP3 = AXN * SINEPW; + TEMP4 = AYN * COSEPW; + TEMP5 = AXN * COSEPW; + TEMP6 = AYN * SINEPW; + EPW = (CAPU - TEMP4 + TEMP3 - TEMP2) / (1.0 - TEMP5 - TEMP6) + TEMP2; + + if(fabs(EPW - TEMP2) <= E6A) + break; + + TEMP2 = EPW; + } + + /* + * SHORT PERIOD PRELIMINARY QUANTITIES + */ + + ECOSE = TEMP5 + TEMP6; + ESINE = TEMP3 - TEMP4; + ELSQ = AXN * AXN + AYN * AYN; + TEMP = 1.0 - ELSQ; + PL = A * TEMP; + R = A * (1.0 - ECOSE); + + TEMP1 = 1.0 / R; + RDOT = XKE * sqrt(A) * ESINE * TEMP1; + RFDOT = XKE * sqrt(PL) * TEMP1; + TEMP2 = A * TEMP1; + BETAL = sqrt(TEMP); + TEMP3 = 1.0 / (1.0 + BETAL); + + COSU = TEMP2 * (COSEPW - AXN + AYN * ESINE * TEMP3); + SINU = TEMP2 * (SINEPW - AYN - AXN * ESINE * TEMP3); + + U = actan(SINU, COSU); + + SIN2U = 2.0 * SINU * COSU; + COS2U = 2.0 * COSU * COSU - 1.0; + + TEMP = 1.0 / PL; + TEMP1 = CK2 * TEMP; + TEMP2 = TEMP1 * TEMP; + + /* + * UPDATE FOR SHORT PERIODICS + */ + + RK = R * (1.0 - 1.5 * TEMP2 * BETAL * X3THM1) + + .5 * TEMP1 * X1MTH2 * COS2U; + + UK = U - .25 * TEMP2 * X7THM1 * SIN2U; + + XNODEK = XNODE + 1.5 * TEMP2 * COSIO * SIN2U; + XINCK = XINCL + 1.5 * TEMP2 * COSIO * SINIO * COS2U; + RDOTK = RDOT - XN * TEMP1 * X1MTH2 * SIN2U; + RFDOTK = RFDOT + XN * TEMP1 * (X1MTH2 * COS2U + 1.5 * X3THM1); + + /* + * ORIENTATION VECTORS + */ + + SINUK = sin(UK); + COSUK = cos(UK); + SINIK = sin(XINCK); + COSIK = cos(XINCK); + SINNOK = sin(XNODEK); + COSNOK = cos(XNODEK); + + XMX = -SINNOK * COSIK; + XMY = COSNOK * COSIK; + UX = XMX * SINUK + COSNOK * COSUK; + UY = XMY * SINUK + SINNOK * COSUK; + UZ = SINIK * SINUK; + VX = XMX * COSUK - COSNOK * SINUK; + VY = XMY * COSUK - SINNOK * SINUK; + VZ = SINIK * COSUK; + + /* + * POSITION AND VELOCITY + */ + + pos->x = RK * UX; + pos->y = RK * UY; + pos->z = RK * UZ; + + dpos->x = RDOTK * UX + RFDOTK * VX; + dpos->y = RDOTK * UY + RFDOTK * VY; + dpos->z = RDOTK * UZ + RFDOTK * VZ; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sgp4.c,v $ $Date: 2012/10/01 00:05:23 $ $Revision: 1.5 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/sphcart.c b/Common/Libraries/XEphemAstroLib/src/sphcart.c new file mode 100644 index 0000000000000000000000000000000000000000..9d216a8afefd8d091503cf00b10a31673905398c --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/sphcart.c @@ -0,0 +1,43 @@ +#include +#include + +#include "astro.h" + +/* transformation from spherical to cartesian coordinates */ +void +sphcart ( +double l, double b, double r, /* source: spherical coordinates */ +double *x, double *y, double *z) /* result: rectangular coordinates */ +{ + double rcb = r * cos(b); + + *x = rcb * cos(l); + *y = rcb * sin(l); + *z = r * sin(b); +} + +/* transformation from cartesian to spherical coordinates */ +void +cartsph ( +double x, double y, double z, /* source: rectangular coordinates */ +double *l, double *b, double *r) /* result: spherical coordinates */ +{ + double rho = x*x + y*y; + + if (rho > 0) { /* standard case: off axis */ + *l = atan2(y, x); + range (l, 2*PI); + *b = atan2(z, sqrt(rho)); + *r = sqrt(rho + z*z); + } else { /* degenerate case; avoid math error */ + *l = 0.0; + if (z == 0.0) + *b = 0.0; + else + *b = (z > 0.0) ? PI/2. : -PI/2.; + *r = fabs(z); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sphcart.c,v $ $Date: 2006/08/28 00:20:27 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/sun.c b/Common/Libraries/XEphemAstroLib/src/sun.c new file mode 100644 index 0000000000000000000000000000000000000000..6d92d5ec5e2f3e4d955f9ce8fe565a9691b12a88 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/sun.c @@ -0,0 +1,44 @@ +#include +#include + +#include "astro.h" +#include "vsop87.h" + +/* given the modified JD, mj, return the true geocentric ecliptic longitude + * of the sun for the mean equinox of the date, *lsn, in radians, the + * sun-earth distance, *rsn, in AU, and the latitude *bsn, in radians + * (since this is always <= 1.2 arcseconds, in can be neglected by + * calling with bsn = NULL). + * + * if the APPARENT ecliptic longitude is required, correct the longitude for + * nutation to the true equinox of date and for aberration (light travel time, + * approximately -9.27e7/186000/(3600*24*365)*2*pi = -9.93e-5 radians). + */ +void +sunpos (double mj, double *lsn, double *rsn, double *bsn) +{ + static double last_mj = -3691, last_lsn, last_rsn, last_bsn; + double ret[6]; + + if (mj == last_mj) { + *lsn = last_lsn; + *rsn = last_rsn; + if (bsn) *bsn = last_bsn; + return; + } + + vsop87(mj, SUN, 0.0, ret); /* full precision earth pos */ + + *lsn = ret[0] - PI; /* revert to sun pos */ + range (lsn, 2*PI); /* normalise */ + + last_lsn = *lsn; /* memorise */ + last_rsn = *rsn = ret[2]; + last_bsn = -ret[1]; + last_mj = mj; + + if (bsn) *bsn = last_bsn; /* assign only if non-NULL pointer */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sun.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/thetag.c b/Common/Libraries/XEphemAstroLib/src/thetag.c new file mode 100644 index 0000000000000000000000000000000000000000..36a96a7eefe8fdb922f52d3c14542cdaefb3cc7e --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/thetag.c @@ -0,0 +1,90 @@ +#include + +#include "deepconst.h" + +/* @(#) $Id: thetag.c,v 1.3 2000/10/07 05:12:17 ecdowney Exp $ */ + + +/* + * FUNCTION THETAG(EP) + * COMMON /E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O,XNDD6O,BSTAR, + * 1 X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 + * DOUBLE PRECISION EPOCH,D,THETA,TWOPI,YR,TEMP,EP,DS50 + * TWOPI=6.28318530717959D0 + * YR=(EP+2.D-7)*1.D-3 + * JY=YR + * YR=JY + * D=EP-YR*1.D3 + * IF(JY.LT.10) JY=JY+80 + * N=(JY-69)/4 + * IF(JY.LT.70) N=(JY-72)/4 + * DS50=7305.D0 + 365.D0*(JY-70) +N + D + * THETA=1.72944494D0 + 6.3003880987D0*DS50 + * TEMP=THETA/TWOPI + * I=TEMP + * TEMP=I + * THETAG=THETA-TEMP*TWOPI + * IF(THETAG.LT.0.D0) THETAG=THETAG+TWOPI + * RETURN + * END + */ + +/* FUNCTION THETAG(EP) */ +double +thetag(double EP, double *DS50) +{ + int JY, N, I; + double YR, D, THETA, TEMP, THETAG; + + YR = (EP + 2.0E-7) * 1.0E-3; + + JY = (int) YR; + + YR = JY; + + D = EP - YR * 1.0E3; + + if(JY < 10) + JY += 80; + + N = (JY - 69) / 4; + + if(JY < 70) + N = (JY - 72) / 4; + +/* printf("N = %d\n", N); */ + + *DS50 = 7305.0 + 365.0 * (JY-70) + N + D; + +/* printf("DS50 = %f\n", *DS50); */ + + THETA = 1.72944494 + 6.3003880987 * *DS50; + +/* printf("THETA = %f\n", THETA); */ + + TEMP = THETA / TWOPI; + + I = (int)TEMP; + TEMP = I; + + THETAG = THETA - TEMP * TWOPI; + + if(THETAG < 0.0) + THETAG += TWOPI; + + return THETAG; +} + +#if 0 +void main(int argc, char **argv) { + double ds50, gwa; + + if(argc >= 2) { + gwa = thetag(atof(argv[1]), &ds50); + printf("%f, %f\n", gwa, ds50); + } +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: thetag.c,v $ $Date: 2000/10/07 05:12:17 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/twobody.c b/Common/Libraries/XEphemAstroLib/src/twobody.c new file mode 100644 index 0000000000000000000000000000000000000000..086bc577ad77caed0ac7eaf78c185b1a611b0d9b --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/twobody.c @@ -0,0 +1,243 @@ +/* + * + * TWOBODY.C + * + * Computation of planetary position, two-body computation + * + * Paul Schlyter, 1987-06-15 + * + * Decreased EPSILON from 2E-4 to 3E-8, 1988-12-05 + * + * 1990-01-01: Bug fix in almost parabolic orbits: now the routine + * doesn't bomb there (an if block was too large) + * + * 2000-12-06: Donated to Elwood Downey if he wants to use it in XEphem + */ + + +#include +#include +#include + + +/* Constants used when solving Kepler's equation */ +#undef EPSILON +#define EPSILON 3E-8 +#undef INFINITY +#define INFINITY 1E+10 + +/* Math constants */ +#undef PI +#define PI 3.14159265358979323846 +#define RADEG ( 180.0 / PI ) +#define DEGRAD ( PI / 180.0 ) + +/* Trig functions in degrees */ +#define sind(x) sin(x*DEGRAD) +#define cosd(x) cos(x*DEGRAD) +#define atand(x) (RADEG*atan(x)) +#define atan2d(y,x) (RADEG*atan2(y,x)) + +/* Gauss' grav.-konstant */ +#define K 1.720209895E-2 +#define KD ( K * 180.0 / PI ) +#define K2 ( K / 2.0 ) + + + + +static double cubroot( double x ) +/* Cubic root */ +{ + double a,b; + + if ( x == 0.0 ) + return 0.0; + else + { + a = fabs(x); + b = exp( log(a) / 3.0 ); + return x > 0.0 ? b : -b; + } +} /* cubroot */ + + +static double rev180( double ang ) +/* Normalize angle to between +180 and -180 degrees */ +{ + return ang - 360.0 * floor(ang*(1.0/360.0) + 0.5); +} /* rev180 */ + + + +static double kepler( double m, double ex ) +/* + * Solves Kepler's equation + * m = mean anomaly + * ex = eccentricity + * kepler = eccentric anomaly + */ +{ + double m1, sinm, cosm, exd, exan, dexan, lim1, adko, adk, denom; + int converged; + + m1 = rev180(m); + sinm = sind(m1); + cosm = cosd(m1); + /* 1st approximation: */ + exan = atan2d(sinm,cosm-ex); + if ( ex > 0.008 ) + { /* Iteration formula: */ + exd = ex * RADEG; + lim1 = 1E-3 / ex; + adko = INFINITY; + denom = 1.0 - ex * cosd(exan); + do + { + dexan = (m1 + exd * sind(exan) - exan) / denom; + exan = exan + dexan; + adk = fabs(dexan); + converged = adk < EPSILON || adk >= adko ; + adko = adk; + if ( !converged && adk > lim1 ) + denom = 1.0 - ex * cosd(exan); + } while ( !converged ); + } + return exan; +} /* kepler */ + + +static void vr( double *v, double *r, double m, double e, double a ) +/* + * Elliptic orbits only: + * computes: v = true anomaly (degrees) + * r = radius vector (a.u.) + * from: m = mean anomaly (degrees) + * e = eccentricity + * a = semimajor axis (a.u.) + */ +{ + double ean, x, y; + + ean = kepler(m,e); + x = a*(cosd(ean)-e); + y = a*sqrt(1.-e*e)*sind(ean); + *r = sqrt(x*x+y*y); + *v = atan2d(y,x); +} /* vr */ + + +/* return 0 if ok, else -1 */ +int vrc( double *v, double *r, double tp, double e, double q ) +/* + * Elliptic, hyperbolic and near-parabolic orbits: + * computes: v = true anomaly (degrees) + * r = radius vector (a.u.) + * from: tp = time from perihelion (days) + * e = eccentricity + * q = perihelion distance (a.u.) + */ +{ + + double lambda; + + double a, b, w, w2, w4, c, c1, c2, c3, c5, a0, a1, a2, + a3, m, n, g, adgg, adgg2, gs, dg; + + if ( tp == 0.0 ) /* In perihelion */ + { + *v = 0.0; + *r = q; + return 0; + } + + + lambda = (1.0-e) / (1.0+e); + + if ( fabs(lambda) < 0.01 ) + { /* Near-parabolic orbits */ + a = K2 * sqrt((1.0+e)/(q*q*q)) * tp; + b = sqrt( 1.0 + 2.25*a*a ); + w = cubroot( b + 1.5*a ) - cubroot( b - 1.5*a ); + + /* Test if it's accuate enough to compute this as a near-parabolic orbit */ + if ( fabs(w*w*lambda) > 0.2 ) + { + if ( fabs(lambda) < 0.0002 ) + { + /* Sorry, but we cannot compute this at all -- we must give up! + * + * This happens very rarely, in orbits having an eccentricity + * some 2% away from 1.0 AND if the body is very very far from + * perihelion. E.g. a Kreutz sun-grazing comet having + * eccentricity near 0.98 or 1.02, and being outside + * the orbit of Pluto. For any reasonable orbit this will + * never happen in practice. + * + * You might want to code a more graceful error exit here though. + * + */ + printf( "\nNear-parabolic orbit: inaccurate result." + "\n e = %f, lambda = %f, w = %f", e, lambda, w ); + return -1; + } + else + { + /* We cannot compute this as a near-parabolic orbit, so let's + compute it as an elliptic or hyperbolic orbit instead. */ + goto ellipse_hyperbola; + } + } + + /* Go ahead computing the near-parabolic case */ + c = 1.0 + 1.0 / (w*w); + c1 = 1.0 / c; + c2 = c1*c1; + c3 = c1*c2; + c5 = c3*c2; + w2 = w*w; + w4 = w2*w2; + a0 = w; + a1 = 2.0 * w * (0.33333333 + 0.2*w2) * c1; + a2 = 0.2 * w * (7.0 + 0.14285714 * (33.0*w2+7.4*w4)) * c3; + a3 = 0.022857143 * (108.0 + 37.177777*w2 + 5.1111111*w4) * c5; + w = (( lambda * a3 + a2 ) * lambda + a1 ) * lambda + a0; + w2 = w*w; + *v = 2.0 * atand(w); + *r = q * (1+w2) / ( 1.0 + w2*lambda ); + return 0; /* Near-parabolic orbit */ + } + + +ellipse_hyperbola: + + if ( lambda > 0.0 ) + { /* Elliptic orbit: */ + a = q / (1.0-e); /* Semi-major axis */ + m = KD * tp / sqrt(a*a*a); /* Mean Anomaly */ + vr( v, r, m, e, a ); /* Solve Kepler's equation, etc */ + } + else + { /* Hyperbolic orbit: */ + a = q / (e-1.0); /* Semi-major axis */ + n = K * tp / sqrt(a*a*a); /* "Daily motion" */ + g = n/e; + adgg = INFINITY; + do + { + adgg2 = adgg; + gs = sqrt(g*g+1.0); + dg = -( e*g - log(g+gs) - n ) / ( e - 1.0/gs ); + g = g + dg; + adgg = fabs(dg/g); + } while ( adgg < adgg2 && adgg > 1E-5 ); + gs = sqrt(g*g+1.0); + *v = 2.0 * atand( sqrt( (e+1.0)/(e-1.0) ) * g / (gs+1.0) ); + *r = q * (1.0+e) / ( 1.0 + e*cosd(*v) ); + } + return 0; + +} /* vrc */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: twobody.c,v $ $Date: 2004/04/20 04:17:08 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/umoon.c b/Common/Libraries/XEphemAstroLib/src/umoon.c new file mode 100644 index 0000000000000000000000000000000000000000..7b0c982571793e0c710d1d8f13bcac1d3a8764c9 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/umoon.c @@ -0,0 +1,270 @@ +/* uranus moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double jd, char *dir, MoonData md[U_NMOONS]); +static void moonradec (double usize, MoonData md[U_NMOONS]); +static void moonSVis (Obj *sop, Obj *uop, MoonData md[U_NMOONS]); +static void moonEVis (MoonData md[U_NMOONS]); +static void moonPShad (Obj *sop, Obj *uop, MoonData md[U_NMOONS]); +static void moonTrans (MoonData md[U_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData umd[U_NMOONS] = { + {"Uranus", NULL}, + {"Ariel", "I"}, + {"Umbriel", "II"}, + {"Titania", "III"}, + {"Oberon", "IV"}, + {"Miranda", "V"}, +}; +static double sizemjd; /* size at last mjd */ + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(257.43) /* RA of Uranus' north pole */ +#define POLE_DEC degrad(-15.10) /* Dec of Uranus' north pole */ + + +/* get uranus info in md[0], moon info in md[1..U_NMOONS-1]. + * if !uop caller just wants md[] for names + * N.B. we assume sop and uop are updated. + */ +void +uranus_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *uop, /* uranus */ +double *sizep, /* u angular diam, rads */ +double *polera, double *poledec, /* pole location */ +MoonData md[U_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, umd, sizeof(umd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !uop) { + if (uop) { + *sizep = sizemjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = uop->s_ra; + md[0].dec = uop->s_dec; + md[0].mag = get_mag(uop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from uop */ + *sizep = degrad(uop->s_size/3600.0); + + /* from Pasachoff/Menzel */ + + md[1].mag = 14.2; + md[2].mag = 14.8; + md[3].mag = 13.7; + md[4].mag = 14.0; + md[5].mag = 16.3; + + /* get moon x,y,z from BDL if possible */ + if (!dir || use_bdl (JD, dir, md) < 0) { + int i; + for (i = 1; i < U_NMOONS; i++) + md[i].x = md[i].y = md[i].z = 0.0; + fprintf (stderr, "No uranus model available\n"); + } + + /* set visibilities */ + moonSVis (sop, uop, md); + moonPShad (sop, uop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + memcpy (umd, md, sizeof(umd)); +} + +/* hunt for BDL file in dir[] and use if possible + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[U_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define URAU .0001597 /* Uranus radius, AU */ + double x[U_NMOONS], y[U_NMOONS], z[U_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "uranus.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "uranus.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != U_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, U_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < U_NMOONS; i++) { + md[i].x = x[i-1]/URAU; /* we want u radii +E */ + md[i].y = -y[i-1]/URAU; /* we want u radii +S */ + md[i].z = -z[i-1]/URAU; /* we want u radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* given uranus loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in ura radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double usize, /* ura diameter, rads */ +MoonData md[U_NMOONS]) /* fill in RA and Dec */ +{ + double urad = usize/2; + double ura = md[0].ra; + double udec = md[0].dec; + int i; + + for (i = 1; i < U_NMOONS; i++) { + double dra = urad * md[i].x; + double ddec = urad * md[i].y; + md[i].ra = ura + dra; + md[i].dec = udec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *uop, /* uranus */ +MoonData md[U_NMOONS]) +{ + double esd = sop->s_edist; + double eod = uop->s_edist; + double sod = uop->s_sdist; + double soa = degrad(uop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*uop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *uop, /* uranus */ +MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (uop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: umoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.10 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/utc_gst.c b/Common/Libraries/XEphemAstroLib/src/utc_gst.c new file mode 100644 index 0000000000000000000000000000000000000000..bc4d3bbf75e704d22a8aea23a7cb9e1fd8bf1b5b --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/utc_gst.c @@ -0,0 +1,95 @@ +#include "astro.h" + +static double gmst0 (double mj); + +/* given a modified julian date, mj, and a universally coordinated time, utc, + * return greenwich mean siderial time, *gst. + * N.B. mj must be at the beginning of the day. + */ +void +utc_gst (double mj, double utc, double *gst) +{ + static double lastmj = -18981; + static double t0; + + if (mj != lastmj) { + t0 = gmst0(mj); + lastmj = mj; + } + *gst = (1.0/SIDRATE)*utc + t0; + range (gst, 24.0); +} + +/* given a modified julian date, mj, and a greenwich mean siderial time, gst, + * return universally coordinated time, *utc. + * N.B. mj must be at the beginning of the day. + */ +void +gst_utc (double mj, double gst, double *utc) +{ + static double lastmj = -10000; + static double t0; + + if (mj != lastmj) { + t0 = gmst0 (mj); + lastmj = mj; + } + *utc = gst - t0; + range (utc, 24.0); + *utc *= SIDRATE; +} + +/* gmst0() - return Greenwich Mean Sidereal Time at 0h UT; stern + */ +static double +gmst0 ( +double mj) /* date at 0h UT in julian days since MJD0 */ +{ + double T, x; + + T = ((int)(mj - 0.5) + 0.5 - J2000)/36525.0; + x = 24110.54841 + + (8640184.812866 + (0.093104 - 6.2e-6 * T) * T) * T; + x /= 3600.0; + range(&x, 24.0); + return (x); +} + +#ifdef TEST_GMST + +/* original routine by elwood; has a secular drift of 0.08s/cty */ +static double +tnaught (mj) +double mj; /* julian days since 1900 jan 0.5 */ +{ + double dmj; + int m, y; + double d; + double t, t0; + + mjd_cal (mj, &m, &d, &y); + cal_mjd (1, 0., y, &dmj); + t = dmj/36525; + t0 = 6.57098e-2 * (mj - dmj) - + (24 - (6.6460656 + (5.1262e-2 + (t * 2.581e-5))*t) - + (2400 * (t - (((double)y - 1900)/100)))); + range(&t0, 24.0); + return (t0); +} + +#include +main(argc, argv) + int argc; + char *argv[]; +{ + double mj, gst; + while (scanf("%lf", &mj) == 1) { + mj -= MJD0; + gst = tnaught(mj); + printf("%17.9f %10.7f %10.7f\n", mj + MJD0, gst, gmst0(mj)); + } +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: utc_gst.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/vector.h b/Common/Libraries/XEphemAstroLib/src/vector.h new file mode 100644 index 0000000000000000000000000000000000000000..be1ec56c2ef91136b486d5b8b2a1bdf73b390170 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/vector.h @@ -0,0 +1,19 @@ +#ifndef __SATVECTOR_H +#define __SATVECTOR_H + +/* $Id: vector.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#define dotp(A,B) ((A).x*(B).x+(A).y*(B).y+(A).z*(B).z) + +#define crossp(A,B,C) {(C).x=(A).y*(B).z-(A).z*(B).y;(C).y=(A).z*(B).x-(A).x*(B).z;(C).z=(A).x*(B).y-(A).y*(B).x;} + +#define vecabs(V) (sqrt((V).x*(V).x+(V).y*(V).y+(V).z*(V).z)) +#define vecsq(V) ((V).x*(V).x+(V).y*(V).y+(V).z*(V).z) +#define vecsub(A,B,C) {(C).x=(A).x-(B).x;(C).y=(A).y-(B).y;(C).z=(A).z-(B).z;} +#define vecscale(A,k) {(A).x*=(k);(A).y*=(k);(A).z*=(k);} + +#endif /* __SATVECTOR_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vector.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/vsop87.c b/Common/Libraries/XEphemAstroLib/src/vsop87.c new file mode 100644 index 0000000000000000000000000000000000000000..57c2c8d79a0293bf9e50564a96073e08df0e1086 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/vsop87.c @@ -0,0 +1,209 @@ +/* VSOP87 planetary theory + * + * currently uses version VSOP87D: + * heliocentric spherical, mean ecliptic of date. + * + * calculation of rates (daily changes) is optional; + * see header file for the necessary #define's + * + * rough orientation on calculation time, miliseconds + * on an HP 715/75, all planets Mercury to Neptune, prec=0.0: + * + * terms with rates without rates + * 3598 11 7.1 + * 31577 51 44 + * + * with secular terms for JD 2232395.0 19/12/1399 0h TDB: + * + * FULL PRECISION code (31577 terms), milliseconds + * prec terms rates no rates + * 1e-8 15086 62 36 + * 1e-7 10105 44 25 + * 1e-6 3725 20 13 + * 1e-5 1324 11 7.8 + * 1e-4 443 7.0 6.0 + * 1e-3 139 6.0 5.0 + * + * REDUCED PRECISION code (3598 terms), milliseconds + * prec terms rates no rates + * 1e-7 2463 9.9 5.5 + * 1e-6 1939 8.0 4.5 + * 1e-5 1131 4.9 2.9 + * 1e-4 443 2.2 1.5 + * 1e-3 139 1.0 0.9 + */ + +#include + +#include "astro.h" +#include "vsop87.h" + +#define VSOP_A1000 365250.0 /* days per millenium */ +#define VSOP_MAXALPHA 5 /* max degree of time */ + +/****************************************************************** + * adapted from BdL FORTRAN Code; stern + * + * Reference : Bureau des Longitudes - PBGF9502 + * + * Object : calculate a VSOP87 position for a given time. + * + * Input : + * + * mj modified julian date, counted from J1900.0 + * time scale : dynamical time TDB. + * + * obj object number as in astro.h, NB: not for pluto + * + * prec relative precision + * + * if prec is equal to 0 then the precision is the precision + * p0 of the complete solution VSOP87. + * Mercury p0 = 0.6 10**-8 + * Venus p0 = 2.5 10**-8 + * Earth p0 = 2.5 10**-8 + * Mars p0 = 10.0 10**-8 + * Jupiter p0 = 35.0 10**-8 + * Saturn p0 = 70.0 10**-8 + * Uranus p0 = 8.0 10**-8 + * Neptune p0 = 42.0 10**-8 + * + * if prec is not equal to 0, let us say in between p0 and + * 10**-3, the precision is : + * for the positions : + * - prec*a0 au for the distances. + * - prec rad for the other variables. + * for the velocities : + * - prec*a0 au/day for the distances. + * - prec rad/day for the other variables. + * a0 is the semi-major axis of the body. + * + * Output : + * + * ret[6] array of the results (double). + * + * for spherical coordinates : + * 1: longitude (rd) + * 2: latitude (rd) + * 3: radius (au) + * #if VSOP_GETRATE: + * 4: longitude velocity (rad/day) + * 5: latitude velocity (rad/day) + * 6: radius velocity (au/day) + * + * return: error index (int) + * 0: no error. + * 2: object out of range [MERCURY .. NEPTUNE, SUN] + * 3: precision out of range [0.0 .. 1e-3] + ******************************************************************/ +int +vsop87 (double mj, int obj, double prec, double *ret) +{ + static double (*vx_map[])[3] = { /* data tables */ + vx_mercury, vx_venus, vx_mars, vx_jupiter, + vx_saturn, vx_uranus, vx_neptune, 0, vx_earth, + }; + static int (*vn_map[])[3] = { /* indexes */ + vn_mercury, vn_venus, vn_mars, vn_jupiter, + vn_saturn, vn_uranus, vn_neptune, 0, vn_earth, + }; + static double a0[] = { /* semimajor axes; for precision ctrl only */ + 0.39, 0.72, 1.5, 5.2, 9.6, 19.2, 30.1, 39.5, 1.0, + }; + double (*vx_obj)[3] = vx_map[obj]; /* VSOP87 data and indexes */ + int (*vn_obj)[3] = vn_map[obj]; + + double t[VSOP_MAXALPHA+1]; /* powers of time */ + double t_abs[VSOP_MAXALPHA+1]; /* powers of abs(time) */ + double q; /* aux for precision control */ + int i, cooidx, alpha; /* misc indexes */ + + if (obj == PLUTO || obj > SUN) + return (2); + + if (prec < 0.0 || prec > 1e-3) + return(3); + + /* zero result array */ + for (i = 0; i < 6; ++i) ret[i] = 0.0; + + /* time and its powers */ + t[0] = 1.0; + t[1] = (mj - J2000)/VSOP_A1000; + for (i = 2; i <= VSOP_MAXALPHA; ++i) t[i] = t[i-1] * t[1]; + t_abs[0] = 1.0; + for (i = 1; i <= VSOP_MAXALPHA; ++i) t_abs[i] = fabs(t[i]); + + /* precision control */ + q = -log10(prec + 1e-35) - 2; /* decades below 1e-2 */ + q = VSOP_ASCALE * prec / 10.0 / q; /* reduce threshold progressively + * for higher precision */ + + /* do the term summation; first the spatial dimensions */ + for (cooidx = 0; cooidx < 3; ++cooidx) { + + /* then the powers of time */ + for (alpha = 0; vn_obj[alpha+1][cooidx] ; ++alpha) { + double p, term, termdot; + + /* precision threshold */ + p= alpha ? q/(t_abs[alpha] + alpha*t_abs[alpha-1]*1e-4 + 1e-35) : q; +#if VSOP_SPHERICAL + if (cooidx == 2) /* scale by semimajor axis for radius */ +#endif + p *= a0[obj]; + + term = termdot = 0.0; + for (i = vn_obj[alpha][cooidx]; i < vn_obj[alpha+1][cooidx]; ++i) { + double a, b, c, arg; + + a = vx_obj[i][0]; + if (a < p) continue; /* ignore small terms */ + + b = vx_obj[i][1]; + c = vx_obj[i][2]; + + arg = b + c * t[1]; + term += a * cos(arg); +#if VSOP_GETRATE + termdot += -c * a * sin(arg); +#endif + } + + ret[cooidx] += t[alpha] * term; +#if VSOP_GETRATE + ret[cooidx + 3] += t[alpha] * termdot + + ((alpha > 0) ? alpha * t[alpha - 1] * term : 0.0); +#endif + } /* alpha */ + } /* cooidx */ + + for (i = 0; i < 6; ++i) ret[i] /= VSOP_ASCALE; + +#if VSOP_SPHERICAL + /* reduce longitude to 0..2pi */ + ret[0] -= floor(ret[0]/(2.*PI)) * (2.*PI); +#endif + +#if VSOP_GETRATE + /* convert millenium rate to day rate */ + for (i = 3; i < 6; ++i) ret[i] /= VSOP_A1000; +#endif + +#if VSOP_SPHERICAL + /* reduction from dynamical equinox of VSOP87 to FK5; + */ + if (prec < 5e-7) { /* 5e-7 rad = 0.1 arc seconds */ + double L1, c1, s1; + L1 = ret[0] - degrad(13.97 * t[1] - 0.031 * t[2]); + c1 = cos(L1); s1 = sin(L1); + ret[0] += degrad(-0.09033 + 0.03916 * (c1 + s1) * tan(ret[1]))/3600.0; + ret[1] += degrad(0.03916 * (c1 - s1))/3600.0; + } +#endif + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: vsop87.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/Common/Libraries/XEphemAstroLib/src/vsop87.h b/Common/Libraries/XEphemAstroLib/src/vsop87.h new file mode 100644 index 0000000000000000000000000000000000000000..b5cb958f520f8a8f645a2218338a0a6e8e5bbefd --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/vsop87.h @@ -0,0 +1,93 @@ +/* Position of planets mercury to neptune; from: +ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/ +from README: + +========================== =========================== + BUREAU DES LONGITUDES + PLANETARY SOLUTION VSOP87 + 1996, January +========================== =========================== + +These files and programs are associated to : + +Planetary Theories in rectangular and spherical variables: VSOP87 solution. + Bretagnon P., Francou G. + Astron. Astrophys. 202, 309 (1988). + +Theorie du mouvement de l'ensemble des planetes (VSOP82). + Bretagnon P. + Astron. Astrophys. 114, 278 (1982). + +============================================================================== + +Description: + The Planetary solutions VSOP87 (Variations Seculaires des Orbites + Planetaires) are analytical solutions of the motion of the planets in + different versions. The main version VSOP87 consists of the series in + elliptic elements as in the case of VSOP82 solution and the other + versions VSOP87 (A-B-C-D-E) are built in rectangular and spherical + variables. + +Authors' Address: + P. Bretagnon, G. Francou + Bureau des Longitudes, CNRS URA 707 + 77, Avenue Denfert-Rochereau + 75014, Paris, France + Tel : (33) 1 40 51 22 69 (33) 1 40 51 22 60 + Fax : (33) 1 46 33 28 34 + E-mail : pierre@bdl.fr francou@bdl.fr + +Contents: + The main version of VSOP87 is similar to the previous theory VSOP82. + In the both cases the constants of integration have been determined by + fitting to the numerical integration DE200 of the Jet Propulsion + Laboratory. The various versions of VSOP87 are different from one to + another in the type of coordinates and the reference frame. + VSOP87 : heliocentric elliptic variables; equinox and ecliptic J2000. + VSOP87A : heliocentric rectangular variables; equinox and ecliptic J2000. + VSOP87B : heliocentric spherical variables; equinox and ecliptic J2000. + VSOP87C : heliocentric rectangular variables; equinox and ecliptic of date. + VSOP87D : heliocentric spherical variables; equinox and ecliptic of date. + VSOP87E : barycentric rectangular variables; equinox and ecliptic J2000. +... +============================================================================== +User feed-back is encouraged. Unless otherwise specified, send comments and bug +reports to: E-mail : comments@bdl.fr + Fax : (33) 1 46 33 28 34 + Postal mail: Bureau des longitudes + 77 avenue Denfert Rochereau + F-75014 PARIS +============================================================================== + implemented for C: stern +*/ + +#define VSOP_ASCALE 1e8 /* amplitude factor as stored */ + +/* coding flags */ +#define VSOP_SPHERICAL 1 /* version in data.c uses spherical coords */ +#define VSOP_GETRATE 0 /* calculate time derivatives of coordinates */ + +/* data tables */ +extern double vx_mercury[][3]; +extern int vn_mercury[][3]; +extern double vx_venus[][3]; +extern int vn_venus[][3]; +extern double vx_earth[][3]; +extern int vn_earth[][3]; +extern double vx_mars[][3]; +extern int vn_mars[][3]; +extern double vx_jupiter[][3]; +extern int vn_jupiter[][3]; +extern double vx_saturn[][3]; +extern int vn_saturn[][3]; +extern double vx_uranus[][3]; +extern int vn_uranus[][3]; +extern double vx_neptune[][3]; +extern int vn_neptune[][3]; + +extern int vsop87 (double mj, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vsop87.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/Common/Libraries/XEphemAstroLib/src/vsop87_data.c b/Common/Libraries/XEphemAstroLib/src/vsop87_data.c new file mode 100644 index 0000000000000000000000000000000000000000..360c3865edd20418ff7a7a42d4b99fa82e9e03c3 --- /dev/null +++ b/Common/Libraries/XEphemAstroLib/src/vsop87_data.c @@ -0,0 +1,6988 @@ +/* data tables for planetary solution VSOP87 + * + * created by automatic conversion from original distribution files at + * ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/ + * + * Each coordinate is calculated as: + * + * x = Sum{ T^alpha * A * cos( B + C*T ) } + * + * x is the coordinate in rad or a.u. + * T is the VSOP time in Julian Millenia(!) since J2000.0 + * Note: the time argument in VSOP87 theory is equal to TAI + 32.184 s + * + * A (scaled by VSOP_ASCALE), B, C given below for each x and alpha + * run-of-the mill for each planet in one array vx_planet[][3]. + * The block-boundary indices for each spatial dimension are then listed + * in a separate array vn_planet[][3]. + * + * Truncation errors given in comments are from the authors' empirical + * formula: 2*sqrt(number of retained terms)*A[last retained] + */ + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_earth[][3] = { + /* earth l, T^0 */ + { 175347045.7, 0, 0 }, + { 3341656.5, 4.66925680, 6283.07584999 }, + { 34894.3, 4.626102, 12566.151700 }, + { 3417.6, 2.82887, 3.52312 }, + { 3497.1, 2.74412, 5753.38488 }, + { 3135.9, 3.62767, 77713.77147 }, + { 2676.2, 4.41808, 7860.41939 }, + { 2342.7, 6.13516, 3930.20970 }, + { 1273.2, 2.03710, 529.69097 }, + { 1324.3, 0.74246, 11506.76977 }, + { 901.9, 2.0451, 26.2983 }, + { 1199.2, 1.10963, 1577.34354 }, + { 857.2, 3.5085, 398.1490 }, + { 779.8, 1.1788, 5223.6939 }, + { 990.2, 5.2327, 5884.9268 }, + { 753.1, 2.5334, 5507.5532 }, + { 505.3, 4.5829, 18849.2275 }, + { 492.4, 4.2051, 775.5226 }, + { 356.7, 2.9195, 0.0673 }, + { 284.1, 1.8987, 796.2980 }, + { 242.8, 0.3448, 5486.7778 }, + { 317.1, 5.8490, 11790.6291 }, + { 271.0, 0.3149, 10977.0788 }, + { 206.2, 4.8065, 2544.3144 }, + { 205.4, 1.8695, 5573.1428 }, + { 202.3, 2.4577, 6069.7768 }, + { 126.2, 1.0830, 20.7754 }, + { 155.5, 0.8331, 213.2991 }, + { 115.1, 0.6454, 0.9803 }, + { 102.9, 0.6360, 4694.0030 }, + { 101.7, 4.2668, 7.1135 }, + { 99.2, 6.210, 2146.165 }, + { 132.2, 3.4112, 2942.4634 }, + { 97.6, 0.681, 155.420 }, + { 85.1, 1.299, 6275.962 }, + { 74.7, 1.755, 5088.629 }, + { 101.9, 0.9757, 15720.8388 }, + { 84.7, 3.671, 71430.696 }, + { 73.5, 4.679, 801.821 }, + { 73.9, 3.503, 3154.687 }, + { 78.8, 3.037, 12036.461 }, + { 79.6, 1.808, 17260.155 }, + { 85.8, 5.983, 161000.686 }, + { 57.0, 2.784, 6286.599 }, + { 61.1, 1.818, 7084.897 }, + { 69.6, 0.833, 9437.763 }, + { 56.1, 4.387, 14143.495 }, + { 62.4, 3.978, 8827.390 }, + { 51.1, 0.283, 5856.478 }, + { 55.6, 3.470, 6279.553 }, + { 41.0, 5.368, 8429.241 }, + { 51.6, 1.333, 1748.016 }, + { 52.0, 0.189, 12139.554 }, + { 49.0, 0.487, 1194.447 }, + { 39.2, 6.168, 10447.388 }, + { 35.6, 1.776, 6812.767 }, + { 36.8, 6.041, 10213.286 }, + { 36.6, 2.570, 1059.382 }, + { 33.3, 0.593, 17789.846 }, + { 36.0, 1.709, 2352.866 }, + { 40.9, 2.399, 19651.048 }, + { 30.0, 2.740, 1349.867 }, + { 30.4, 0.443, 83996.847 }, + { 23.7, 0.485, 8031.092 }, + { 23.6, 2.065, 3340.612 }, + { 21.1, 4.148, 951.718 }, + { 24.7, 0.215, 3.590 }, + { 25.4, 3.165, 4690.480 }, + { 22.8, 5.222, 4705.732 }, + { 21.4, 1.426, 16730.464 }, + { 21.9, 5.556, 553.569 }, + { 17.5, 4.561, 135.065 }, + { 19.9, 5.222, 12168.003 }, + { 19.9, 5.775, 6309.374 }, + { 20.3, 0.371, 283.859 }, + { 14.4, 4.193, 242.729 }, + { 16.2, 5.988, 11769.854 }, + { 15.1, 4.196, 6256.778 }, + { 19.1, 3.822, 23581.258 }, + { 18.9, 5.386, 149854.400 }, + { 14.3, 3.724, 38.028 }, + { 17.9, 2.215, 13367.973 }, + { 12.1, 2.622, 955.600 }, + { 11.3, 0.177, 4164.312 }, + { 14.0, 4.401, 6681.225 }, + { 13.6, 1.889, 7632.943 }, + { 12.5, 1.131, 5.523 }, + { 10.5, 5.359, 1592.596 }, + { 9.8, 1.00, 11371.70 }, + { 9.2, 4.57, 4292.33 }, + { 10.3, 6.200, 6438.496 }, + { 12.0, 1.004, 632.784 }, + { 10.8, 0.327, 103.093 }, + { 8.4, 4.54, 25132.30 }, + { 10.0, 6.029, 5746.271 }, + { 8.4, 3.30, 7234.79 }, + { 8.0, 5.82, 28.45 }, + { 10.5, 0.939, 11926.254 }, + { 7.7, 3.12, 7238.68 }, + { 9.4, 2.62, 5760.50 }, + { 8.1, 6.11, 4732.03 }, + { 9.2, 0.48, 522.58 }, + { 9.8, 5.24, 27511.47 }, + { 7.9, 1.00, 5643.18 }, + { 8.1, 6.27, 426.60 }, + { 9.0, 5.34, 6386.17 }, + { 8.6, 4.17, 7058.60 }, + { 6.3, 4.72, 6836.65 }, + { 7.6, 3.97, 11499.66 }, + { 7.8, 2.96, 23013.54 }, + { 7.3, 0.61, 11513.88 }, + { 6.5, 5.79, 18073.70 }, + { 7.2, 4.00, 74.78 }, + { 7.3, 4.39, 316.39 }, + { 7.1, 0.32, 263.08 }, + { 6.6, 3.66, 17298.18 }, + { 6.8, 5.91, 90955.55 }, + /* 117 terms retained, 442 terms dropped, error 0.3" */ + + /* earth l, T^1 */ + { 628331966747.5, 0, 0 }, + { 206058.9, 2.6782346, 6283.0758500 }, + { 4303.4, 2.63513, 12566.15170 }, + { 425.3, 1.5905, 3.5231 }, + { 109.0, 2.9662, 1577.3435 }, + { 93.5, 2.592, 18849.228 }, + { 119.3, 5.7956, 26.2983 }, + { 72.1, 1.138, 529.691 }, + { 67.8, 1.875, 398.149 }, + { 67.3, 4.409, 5507.553 }, + { 59.0, 2.888, 5223.694 }, + { 56.0, 2.175, 155.420 }, + { 45.4, 0.398, 796.298 }, + { 36.4, 0.466, 775.523 }, + { 29.0, 2.647, 7.114 }, + { 19.1, 1.846, 5486.778 }, + { 20.8, 5.341, 0.980 }, + { 18.5, 4.969, 213.299 }, + { 16.2, 0.032, 2544.314 }, + { 17.3, 2.991, 6275.962 }, + { 15.8, 1.430, 2146.165 }, + { 14.6, 1.205, 10977.079 }, + { 11.9, 3.258, 5088.629 }, + { 11.5, 2.075, 4694.003 }, + { 9.7, 4.24, 1349.87 }, + { 10.0, 1.303, 6286.599 }, + { 9.5, 2.70, 242.73 }, + { 12.5, 2.834, 1748.016 }, + { 11.8, 5.274, 1194.447 }, + { 8.6, 5.64, 951.72 }, + { 10.6, 0.766, 553.569 }, + { 7.6, 5.30, 2352.87 }, + { 5.8, 1.77, 1059.38 }, + { 6.4, 2.65, 9437.76 }, + { 5.2, 5.66, 71430.70 }, + { 5.3, 0.91, 3154.69 }, + { 6.1, 4.67, 4690.48 }, + { 4.3, 0.24, 6812.77 }, + { 5.0, 1.42, 6438.50 }, + { 4.3, 0.77, 10447.39 }, + { 5.2, 1.85, 801.82 }, + { 3.7, 2.00, 8031.09 }, + { 3.6, 2.43, 14143.50 }, + { 3.4, 3.86, 1592.60 }, + { 3.4, 0.89, 12036.46 }, + { 3.2, 3.19, 4705.73 }, + { 3.2, 0.62, 8429.24 }, + { 4.1, 5.24, 7084.90 }, + { 3.0, 6.07, 4292.33 }, + { 2.9, 2.32, 20.36 }, + { 3.5, 4.80, 6279.55 }, + { 2.9, 1.43, 5746.27 }, + { 2.7, 4.80, 7234.79 }, + { 2.5, 6.22, 6836.65 }, + { 2.7, 0.93, 5760.50 }, + { 3.2, 3.40, 7632.94 }, + { 2.3, 5.00, 17789.85 }, + { 2.1, 3.96, 10213.29 }, + { 2.1, 2.22, 5856.48 }, + { 2.3, 5.67, 11499.66 }, + { 2.1, 5.20, 11513.88 }, + { 1.9, 0.53, 3340.61 }, + { 1.9, 4.74, 83996.85 }, + { 2.1, 2.55, 25132.30 }, + { 1.8, 1.47, 4164.31 }, + { 1.8, 3.02, 5.52 }, + { 2.0, 0.91, 6256.78 }, + { 2.1, 2.27, 522.58 }, + { 1.8, 3.03, 5753.38 }, + { 1.6, 6.12, 5216.58 }, + { 1.6, 4.64, 3.29 }, + /* 71 terms retained, 270 terms dropped, error 0.056"*T */ + + /* earth l, T^2 */ + { 52918.9, 0, 0 }, + { 8719.8, 1.07210, 6283.07585 }, + { 309.1, 0.8673, 12566.1517 }, + { 27.3, 0.053, 3.523 }, + { 16.3, 5.188, 26.298 }, + { 15.8, 3.685, 155.420 }, + { 9.5, 0.76, 18849.23 }, + { 8.9, 2.06, 77713.77 }, + { 7.0, 0.83, 775.52 }, + { 5.1, 4.66, 1577.34 }, + { 4.1, 1.03, 7.11 }, + { 3.5, 5.14, 796.30 }, + { 3.2, 6.05, 5507.55 }, + { 3.0, 1.19, 242.73 }, + { 2.9, 6.12, 529.69 }, + { 3.8, 3.44, 5573.14 }, + { 2.7, 0.31, 398.15 }, + { 2.4, 4.38, 5223.69 }, + { 2.5, 2.28, 553.57 }, + { 2.1, 3.75, 0.98 }, + { 1.7, 0.90, 951.72 }, + { 1.5, 5.76, 1349.87 }, + { 1.2, 2.97, 2146.17 }, + { 1.4, 4.36, 1748.02 }, + { 1.3, 3.72, 1194.45 }, + { 1.3, 2.95, 6438.50 }, + { 1.0, 5.99, 6286.60 }, + { 0.9, 4.80, 5088.63 }, + { 0.8, 3.31, 213.30 }, + { 1.1, 1.27, 161000.69 }, + { 0.8, 3.42, 5486.78 }, + { 1.0, 0.60, 3154.69 }, + { 0.9, 5.23, 7084.90 }, + { 0.6, 1.60, 2544.31 }, + { 0.7, 3.43, 4694.00 }, + { 0.6, 2.48, 10977.08 }, + { 0.7, 6.19, 4690.48 }, + { 0.6, 1.98, 801.82 }, + { 0.5, 1.44, 6836.65 }, + { 0.5, 2.34, 1592.60 }, + { 0.5, 1.31, 4292.33 }, + { 0.4, 0.04, 7234.79 }, + { 0.5, 3.81, 149854.40 }, + { 0.4, 4.94, 7632.94 }, + /* 44 terms retained, 98 terms dropped, error 0.011"*T^2 */ + + /* earth l, T^3 */ + { 289.2, 5.8438, 6283.0758 }, + { 35.0, 0, 0 }, + { 16.8, 5.488, 12566.152 }, + { 3.0, 5.20, 155.42 }, + { 1.3, 4.72, 3.52 }, + { 0.6, 5.97, 242.73 }, + { 0.7, 5.30, 18849.23 }, + { 0.4, 3.79, 553.57 }, + /* 8 terms retained, 14 terms dropped, error 0.005"*T^3 */ + + /* earth l, T^4 */ + { 114.1, 3.1416, 0 }, + { 7.7, 4.13, 6283.08 }, + { 0.8, 3.84, 12566.15 }, + { 0.4, 0.42, 155.42 }, + /* 4 terms retained, 7 terms dropped, error 0.00032"*T^4 */ + + /* earth l, T^5 */ + { 0.9, 3.14, 0 }, + { 0.2, 2.77, 6283.08 }, + { 0.1, 2.01, 155.42 }, + /* 3 terms retained, 2 terms dropped, error 0.00023"*T^5 */ + /* end earth l */ + + /* earth b, T^0 */ + { 279.6, 3.1987, 84334.6616 }, + { 101.6, 5.4225, 5507.5532 }, + { 80.4, 3.880, 5223.694 }, + { 43.8, 3.704, 2352.866 }, + { 31.9, 4.000, 1577.344 }, + { 22.7, 3.985, 1047.747 }, + { 16.4, 3.565, 5856.478 }, + { 18.1, 4.984, 6283.076 }, + { 14.4, 3.703, 9437.763 }, + { 14.3, 3.411, 10213.286 }, + { 11.2, 4.828, 14143.495 }, + { 10.9, 2.086, 6812.767 }, + { 9.7, 3.47, 4694.00 }, + { 10.4, 4.057, 71092.881 }, + { 8.8, 4.44, 5753.38 }, + { 8.4, 4.99, 7084.90 }, + { 6.9, 4.33, 6275.96 }, + { 9.1, 1.14, 6620.89 }, + { 7.2, 3.60, 529.69 }, + { 7.7, 5.55, 167621.58 }, + /* 20 terms retained, 164 terms dropped, error 0.15" */ + + /* earth b, T^1 */ + { 9.0, 3.90, 5507.55 }, + { 6.2, 1.73, 5223.69 }, + { 3.8, 5.24, 2352.87 }, + { 2.8, 2.47, 1577.34 }, + { 1.8, 0.42, 6283.08 }, + /* 5 terms retained, 94 terms dropped, error 0.018"*T */ + + /* earth b, T^2 */ + { 1.7, 1.63, 84334.66 }, + { 0.5, 2.41, 1047.75 }, + /* 2 terms retained, 47 terms dropped, error 0.0035"*T^2 */ + + /* earth b, T^3 */ + /* 0 terms retained, 11 terms dropped, error 4.5e-05"*T^3 */ + + /* earth b, T^4 */ + /* 0 terms retained, 5 terms dropped, error 1.7e-05"*T^4 */ + /* end earth b */ + + /* earth r, T^0 */ + { 100013988.8, 0, 0 }, + { 1670699.6, 3.09846351, 6283.07584999 }, + { 13956.0, 3.055246, 12566.151700 }, + { 3083.7, 5.19847, 77713.77147 }, + { 1628.5, 1.17388, 5753.38488 }, + { 1575.6, 2.84685, 7860.41939 }, + { 924.8, 5.4529, 11506.7698 }, + { 542.4, 4.5641, 3930.2097 }, + { 472.1, 3.6610, 5884.9268 }, + { 328.8, 5.8998, 5223.6939 }, + { 346.0, 0.9637, 5507.5532 }, + { 306.8, 0.2987, 5573.1428 }, + { 174.8, 3.0119, 18849.2275 }, + { 243.2, 4.2735, 11790.6291 }, + { 211.8, 5.8471, 1577.3435 }, + { 185.8, 5.0219, 10977.0788 }, + { 109.8, 5.0551, 5486.7778 }, + { 98.3, 0.887, 6069.777 }, + { 86.5, 5.690, 15720.839 }, + { 85.8, 1.271, 161000.686 }, + { 62.9, 0.922, 529.691 }, + { 57.1, 2.014, 83996.847 }, + { 64.9, 0.273, 17260.155 }, + { 49.4, 3.245, 2544.314 }, + { 55.7, 5.242, 71430.696 }, + { 42.5, 6.011, 6275.962 }, + { 47.0, 2.578, 775.523 }, + { 39.0, 5.361, 4694.003 }, + { 44.7, 5.537, 9437.763 }, + { 35.7, 1.675, 12036.461 }, + { 31.9, 0.184, 5088.629 }, + { 31.8, 1.778, 398.149 }, + { 33.2, 0.244, 7084.897 }, + { 38.2, 2.393, 8827.390 }, + { 28.5, 1.213, 6286.599 }, + { 37.5, 0.830, 19651.048 }, + { 37.0, 4.901, 12139.554 }, + { 34.5, 1.843, 2942.463 }, + { 26.3, 4.589, 10447.388 }, + { 24.6, 3.787, 8429.241 }, + { 23.6, 0.269, 796.298 }, + { 27.8, 1.899, 6279.553 }, + { 23.9, 4.996, 5856.478 }, + { 20.3, 4.653, 2146.165 }, + { 23.3, 2.808, 14143.495 }, + { 22.1, 1.950, 3154.687 }, + { 19.5, 5.382, 2352.866 }, + { 18.0, 0.199, 6812.767 }, + { 17.2, 4.433, 10213.286 }, + { 16.2, 5.232, 17789.846 }, + { 17.3, 6.152, 16730.464 }, + { 13.8, 5.190, 8031.092 }, + { 18.8, 0.673, 149854.400 }, + { 18.3, 2.253, 23581.258 }, + { 13.6, 3.685, 4705.732 }, + { 13.1, 0.653, 13367.973 }, + { 10.4, 4.333, 11769.854 }, + { 10.0, 4.201, 6309.374 }, + { 10.2, 1.594, 4690.480 }, + { 7.6, 2.63, 6256.78 }, + { 9.7, 3.68, 27511.47 }, + { 6.7, 0.56, 3340.61 }, + { 8.7, 6.06, 1748.02 }, + { 7.8, 3.67, 12168.00 }, + { 6.6, 5.66, 11371.70 }, + { 7.7, 0.31, 7632.94 }, + { 6.6, 3.14, 801.82 }, + { 7.5, 5.65, 11926.25 }, + { 6.9, 2.92, 6681.22 }, + { 6.8, 1.42, 23013.54 }, + { 6.5, 2.65, 19804.83 }, + /* 71 terms retained, 455 terms dropped, error 1.1e-06 a.u. */ + + /* earth r, T^1 */ + { 103018.6, 1.1074897, 6283.0758500 }, + { 1721.2, 1.06442, 12566.15170 }, + { 702.2, 3.1416, 0 }, + { 32.3, 1.022, 18849.228 }, + { 30.8, 2.844, 5507.553 }, + { 25.0, 1.319, 5223.694 }, + { 18.5, 1.424, 1577.344 }, + { 10.1, 5.914, 10977.079 }, + { 8.6, 0.27, 5486.78 }, + { 8.7, 1.42, 6275.96 }, + { 5.1, 1.69, 5088.63 }, + { 5.0, 6.01, 6286.60 }, + { 4.7, 5.99, 529.69 }, + { 4.4, 0.52, 4694.00 }, + { 3.9, 4.75, 2544.31 }, + { 3.8, 5.07, 796.30 }, + { 4.1, 1.08, 9437.76 }, + { 3.5, 0.02, 83996.85 }, + { 3.4, 0.95, 71430.70 }, + { 3.2, 6.16, 2146.17 }, + { 3.4, 5.41, 775.52 }, + { 2.9, 5.48, 10447.39 }, + { 2.5, 0.24, 398.15 }, + { 2.2, 4.95, 6812.77 }, + { 2.2, 0.42, 8031.09 }, + { 2.8, 3.42, 2352.87 }, + { 2.6, 6.13, 6438.50 }, + { 1.9, 5.31, 8429.24 }, + { 2.4, 3.09, 4690.48 }, + { 1.7, 1.54, 4705.73 }, + { 2.2, 3.69, 7084.90 }, + { 2.1, 1.28, 1748.02 }, + { 1.8, 3.23, 6279.55 }, + { 1.6, 4.10, 11499.66 }, + { 1.6, 5.54, 3154.69 }, + { 1.8, 1.82, 7632.94 }, + /* 36 terms retained, 256 terms dropped, error 2.2e-07 a.u.*T */ + + /* earth r, T^2 */ + { 4359.4, 5.78455, 6283.07585 }, + { 123.6, 5.5793, 12566.1517 }, + { 12.3, 3.142, 0 }, + { 8.8, 3.63, 77713.77 }, + { 5.7, 1.87, 5573.14 }, + { 3.3, 5.47, 18849.23 }, + { 1.5, 4.48, 5507.55 }, + { 1.0, 2.81, 5223.69 }, + { 0.9, 3.11, 1577.34 }, + { 1.1, 2.84, 161000.69 }, + { 0.6, 5.47, 775.52 }, + { 0.6, 1.38, 6438.50 }, + { 0.5, 4.42, 6286.60 }, + { 0.4, 0.90, 10977.08 }, + { 0.4, 3.20, 5088.63 }, + { 0.5, 3.66, 7084.90 }, + { 0.5, 5.39, 149854.40 }, + /* 17 terms retained, 122 terms dropped, error 3.9e-08 a.u.*T^2 */ + + /* earth r, T^3 */ + { 144.6, 4.2732, 6283.0758 }, + { 6.7, 3.92, 12566.15 }, + { 0.8, 0, 0 }, + { 0.2, 3.73, 18849.23 }, + /* 4 terms retained, 23 terms dropped, error 1.1e-08 a.u.*T^3 */ + + /* earth r, T^4 */ + { 3.9, 2.56, 6283.08 }, + { 0.3, 2.27, 12566.15 }, + { 0.1, 3.44, 5573.14 }, + /* 3 terms retained, 7 terms dropped, error 2.1e-09 a.u.*T^4 */ + + /* earth r, T^5 */ + { 0.1, 1.22, 6283.08 }, + /* 1 terms retained, 2 terms dropped, error 2.4e-09 a.u.*T^5 */ + /* end earth */ +}; + +int vn_earth[][3] = { + /* addresses for earth l, b, r */ + /* T^0 */ { 0, 247, 274, }, + /* T^1 */ { 117, 267, 345, }, + /* T^2 */ { 188, 272, 381, }, + /* T^3 */ { 232, 274, 398, }, + /* T^4 */ { 240, 0, 402, }, + /* T^5 */ { 244, 0, 405, }, + /* end */ { 247, 0, 406, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_jupiter[][3] = { + /* jupiter l, T^0 */ + { 59954691.5, 0, 0 }, + { 9695898.7, 5.06191793, 529.69096509 }, + { 573610.1, 1.4440621, 7.1135470 }, + { 306389.2, 5.4173473, 1059.3819302 }, + { 97178.3, 4.142647, 632.783739 }, + { 72903.1, 3.640429, 522.577418 }, + { 64264.0, 3.411452, 103.092774 }, + { 39806.1, 2.293767, 419.484644 }, + { 38857.8, 1.272317, 316.391870 }, + { 27964.6, 1.784546, 536.804512 }, + { 13589.7, 5.774810, 1589.072895 }, + { 8246.4, 3.58228, 206.18555 }, + { 8768.7, 3.63000, 949.17561 }, + { 7368.1, 5.08101, 735.87651 }, + { 6263.2, 0.02498, 213.29910 }, + { 6114.0, 4.51320, 1162.47470 }, + { 4905.4, 1.32085, 110.20632 }, + { 5305.3, 1.30671, 14.22709 }, + { 5305.5, 4.18625, 1052.26838 }, + { 4647.2, 4.69958, 3.93215 }, + { 3045.0, 4.31676, 426.59819 }, + { 2610.0, 1.56668, 846.08283 }, + { 2028.2, 1.06377, 3.18139 }, + { 1764.8, 2.14148, 1066.49548 }, + { 1723.0, 3.88036, 1265.56748 }, + { 1921.0, 0.97169, 639.89729 }, + { 1633.2, 3.58201, 515.46387 }, + { 1432.0, 4.29684, 625.67019 }, + { 973.3, 4.0976, 95.9792 }, + { 884.4, 2.4370, 412.3711 }, + { 732.9, 6.0853, 838.9693 }, + { 731.1, 3.8059, 1581.9593 }, + { 691.9, 6.1337, 2118.7639 }, + { 709.2, 1.2927, 742.9901 }, + { 614.5, 4.1085, 1478.8666 }, + { 495.2, 3.7557, 323.5054 }, + { 581.9, 4.5397, 309.2783 }, + { 375.7, 4.7030, 1368.6603 }, + { 389.9, 4.8972, 1692.1657 }, + { 341.0, 5.7145, 533.6231 }, + { 330.5, 4.7405, 0.0482 }, + { 440.9, 2.9582, 454.9094 }, + { 417.3, 1.0355, 2.4477 }, + { 244.2, 5.2202, 728.7630 }, + { 261.5, 1.8765, 0.9632 }, + { 256.6, 3.7241, 199.0720 }, + { 261.0, 0.8205, 380.1278 }, + { 220.4, 1.6512, 543.9181 }, + { 202.0, 1.8068, 1375.7738 }, + { 207.3, 1.8546, 525.7588 }, + { 197.0, 5.2925, 1155.3612 }, + { 235.1, 1.2269, 909.8187 }, + { 174.8, 5.9097, 956.2892 }, + { 149.4, 4.3775, 1685.0521 }, + { 175.2, 3.2263, 1898.3512 }, + { 175.2, 3.7297, 942.0621 }, + { 157.9, 4.3648, 1795.2584 }, + { 137.9, 1.3180, 1169.5883 }, + { 117.5, 2.5002, 1596.1864 }, + { 150.5, 3.9063, 74.7816 }, + { 116.8, 3.3892, 0.5213 }, + { 105.9, 4.5544, 526.5096 }, + { 130.5, 4.1687, 1045.1548 }, + { 141.4, 3.1357, 491.5579 }, + { 99.5, 1.421, 532.872 }, + { 96.1, 1.182, 117.320 }, + { 91.8, 0.858, 1272.681 }, + { 87.7, 1.217, 453.425 }, + { 68.5, 2.352, 2.921 }, + { 66.1, 5.344, 1471.753 }, + { 77.4, 4.427, 39.357 }, + { 72.0, 4.238, 2111.650 }, + { 63.4, 4.977, 0.751 }, + { 59.4, 4.111, 2001.444 }, + { 62.5, 0.512, 220.413 }, + { 66.5, 2.989, 2214.743 }, + { 60.2, 4.126, 4.193 }, + { 56.0, 1.155, 21.341 }, + { 52.9, 0.912, 10.295 }, + { 70.3, 5.142, 835.037 }, + { 51.9, 4.100, 1258.454 }, + { 46.4, 4.665, 5.629 }, + { 58.2, 5.866, 5753.385 }, + { 40.1, 4.688, 0.160 }, + { 46.7, 4.794, 305.346 }, + { 39.3, 4.254, 853.196 }, + { 46.0, 5.110, 4.666 }, + { 54.5, 1.571, 983.116 }, + { 38.9, 6.076, 518.645 }, + { 38.4, 2.438, 433.712 }, + { 46.8, 3.546, 5.417 }, + { 41.8, 4.680, 302.165 }, + { 35.9, 2.451, 430.530 }, + { 37.9, 0.211, 2648.455 }, + { 39.2, 1.718, 11.046 }, + { 37.6, 6.195, 831.856 }, + { 35.8, 4.615, 2008.558 }, + { 43.4, 0.150, 528.206 }, + { 31.6, 5.141, 1788.145 }, + { 29.8, 5.344, 2221.857 }, + { 32.8, 5.289, 88.866 }, + { 27.7, 1.852, 0.212 }, + { 25.8, 3.859, 2317.836 }, + { 33.8, 1.006, 9683.595 }, + { 27.1, 2.808, 18.159 }, + { 26.8, 1.776, 532.139 }, + { 26.1, 2.744, 2531.135 }, + { 30.8, 0.423, 1.484 }, + { 30.5, 3.667, 508.350 }, + /* 109 terms retained, 651 terms dropped, error 1.3" */ + + /* jupiter l, T^1 */ + { 52993480757.5, 0, 0 }, + { 489741.2, 4.2206669, 529.6909651 }, + { 228918.5, 6.0264746, 7.1135470 }, + { 27655.4, 4.572660, 1059.381930 }, + { 20720.9, 5.459389, 522.577418 }, + { 12105.7, 0.169858, 536.804512 }, + { 6068.1, 4.42420, 103.09277 }, + { 5433.9, 3.98478, 419.48464 }, + { 4237.8, 5.89009, 14.22709 }, + { 2211.9, 5.26771, 206.18555 }, + { 1295.8, 5.55133, 3.18139 }, + { 1745.9, 4.92669, 1589.07290 }, + { 1163.4, 0.51451, 3.93215 }, + { 1007.2, 0.46478, 735.87651 }, + { 1173.1, 5.85647, 1052.26838 }, + { 847.7, 5.7581, 110.2063 }, + { 827.3, 4.8031, 213.2991 }, + { 1003.6, 3.15040, 426.59819 }, + { 1098.7, 5.30705, 515.46387 }, + { 816.4, 0.5864, 1066.4955 }, + { 725.4, 5.5183, 639.8973 }, + { 567.8, 5.9887, 625.6702 }, + { 474.2, 4.1325, 412.3711 }, + { 412.9, 5.7365, 95.9792 }, + { 335.8, 3.7325, 1162.4747 }, + { 345.2, 4.2416, 632.7837 }, + { 234.1, 6.2430, 309.2783 }, + { 194.8, 2.2188, 323.5054 }, + { 234.3, 4.0347, 949.1756 }, + { 183.9, 6.2796, 543.9181 }, + { 198.5, 1.5046, 838.9693 }, + { 186.9, 6.0862, 742.9901 }, + { 171.4, 5.4166, 199.0720 }, + { 130.8, 0.6264, 728.7630 }, + { 107.6, 4.4928, 956.2892 }, + { 115.4, 0.6802, 846.0828 }, + { 115.0, 5.2864, 2118.7639 }, + { 66.8, 5.734, 21.341 }, + { 69.6, 5.973, 532.872 }, + { 64.9, 6.088, 1581.959 }, + { 79.7, 5.824, 1045.155 }, + { 57.9, 0.995, 1596.186 }, + { 65.6, 0.129, 526.510 }, + { 58.5, 0.586, 1155.361 }, + { 56.6, 1.412, 533.623 }, + { 71.6, 5.342, 942.062 }, + { 57.4, 5.969, 1169.588 }, + { 54.9, 5.428, 10.295 }, + { 52.0, 0.230, 1368.660 }, + { 52.3, 5.727, 117.320 }, + { 50.4, 6.081, 525.759 }, + { 47.4, 3.626, 1478.867 }, + { 39.9, 4.162, 1692.166 }, + { 46.7, 0.511, 1265.567 }, + { 32.8, 5.036, 220.413 }, + { 33.6, 0.099, 302.165 }, + { 29.4, 3.359, 4.666 }, + { 29.3, 0.759, 88.866 }, + { 32.4, 5.375, 508.350 }, + { 29.5, 5.422, 1272.681 }, + { 21.8, 6.151, 1685.052 }, + { 25.2, 1.607, 831.856 }, + { 21.1, 5.863, 1258.454 }, + { 19.7, 2.172, 316.392 }, + { 17.9, 0.828, 433.712 }, + { 17.7, 5.955, 5.417 }, + { 17.2, 2.764, 853.196 }, + { 17.5, 0.707, 1471.753 }, + { 17.5, 0.498, 1375.774 }, + { 14.4, 0.915, 18.159 }, + { 14.1, 0.630, 2.921 }, + { 11.6, 4.304, 405.258 }, + { 11.7, 1.764, 380.128 }, + { 11.1, 5.567, 1574.846 }, + { 10.4, 0.314, 1361.547 }, + { 9.8, 5.90, 519.40 }, + { 9.8, 0.39, 1073.61 }, + { 9.3, 3.22, 1795.26 }, + { 8.9, 0.54, 1788.14 }, + { 8.4, 5.88, 2001.44 }, + { 8.1, 5.10, 1485.98 }, + { 7.7, 5.65, 2648.45 }, + { 6.7, 2.41, 4.19 }, + { 7.3, 6.19, 11.05 }, + { 6.3, 1.36, 1148.25 }, + /* 85 terms retained, 284 terms dropped, error 0.24"*T */ + + /* jupiter l, T^2 */ + { 47233.6, 4.321483, 7.113547 }, + { 30629.1, 2.930214, 529.690965 }, + { 38965.5, 0, 0 }, + { 3189.3, 1.05505, 522.57742 }, + { 2723.4, 3.41412, 1059.38193 }, + { 2729.3, 4.84545, 536.80451 }, + { 1721.1, 4.18734, 14.22709 }, + { 383.3, 5.7679, 419.4846 }, + { 367.5, 6.0551, 103.0928 }, + { 377.5, 0.7605, 515.4639 }, + { 337.4, 3.7864, 3.1814 }, + { 308.2, 0.6936, 206.1855 }, + { 218.4, 3.8139, 1589.0729 }, + { 198.9, 5.3400, 1066.4955 }, + { 197.4, 2.4836, 3.9322 }, + { 146.2, 3.8137, 639.8973 }, + { 155.9, 1.4064, 1052.2684 }, + { 129.6, 5.8374, 412.3711 }, + { 141.9, 1.6344, 426.5982 }, + { 117.3, 1.4144, 625.6702 }, + { 96.7, 4.034, 110.206 }, + { 90.8, 1.106, 95.979 }, + { 78.8, 4.637, 543.918 }, + { 72.4, 2.217, 735.877 }, + { 87.3, 2.522, 632.784 }, + { 56.9, 3.123, 213.299 }, + { 48.6, 1.673, 309.278 }, + { 58.5, 0.832, 199.072 }, + { 40.1, 4.025, 21.341 }, + { 39.8, 0.624, 323.505 }, + { 35.7, 2.326, 728.763 }, + { 25.6, 2.512, 1162.475 }, + { 29.3, 3.608, 10.295 }, + { 23.6, 3.005, 956.289 }, + { 27.8, 3.240, 838.969 }, + { 26.0, 4.501, 742.990 }, + { 25.2, 1.219, 1045.155 }, + { 19.5, 4.290, 532.872 }, + { 17.7, 0.810, 508.350 }, + { 15.4, 5.810, 1596.186 }, + { 17.1, 4.200, 2118.764 }, + { 17.0, 1.834, 526.510 }, + { 14.7, 4.000, 117.320 }, + { 13.6, 1.803, 302.165 }, + { 13.2, 2.519, 88.866 }, + { 12.8, 4.369, 1169.588 }, + { 15.3, 0.682, 942.062 }, + { 11.0, 4.436, 525.759 }, + { 13.9, 5.952, 316.392 }, + { 9.4, 2.18, 1155.36 }, + { 8.8, 3.29, 220.41 }, + { 7.8, 5.76, 846.08 }, + { 7.5, 2.71, 533.62 }, + { 9.7, 1.72, 1581.96 }, + { 8.7, 3.32, 831.86 }, + { 6.3, 0.50, 949.18 }, + { 6.7, 2.18, 1265.57 }, + { 5.4, 6.01, 405.26 }, + { 4.7, 1.41, 1258.45 }, + { 4.4, 3.02, 1692.17 }, + { 4.4, 5.48, 433.71 }, + { 4.3, 5.07, 1073.61 }, + { 4.2, 5.29, 18.16 }, + { 3.9, 1.27, 853.20 }, + { 5.4, 3.65, 1272.68 }, + { 4.4, 2.27, 1368.66 }, + { 3.5, 1.54, 519.40 }, + { 2.7, 2.10, 1478.87 }, + { 2.7, 1.06, 1574.85 }, + { 2.9, 2.05, 1361.55 }, + { 3.1, 0.99, 191.96 }, + { 2.5, 2.37, 1471.75 }, + { 2.2, 2.48, 721.65 }, + { 2.1, 3.71, 1485.98 }, + { 2.0, 1.88, 1685.05 }, + { 2.3, 3.03, 1148.25 }, + { 2.0, 6.17, 330.62 }, + /* 77 terms retained, 114 terms dropped, error 0.074"*T^2 */ + + /* jupiter l, T^3 */ + { 6501.7, 2.59863, 7.11355 }, + { 1356.5, 1.34636, 529.69097 }, + { 470.7, 2.4750, 14.2271 }, + { 417.0, 3.2445, 536.8045 }, + { 352.9, 2.9736, 522.5774 }, + { 154.9, 2.0757, 1059.3819 }, + { 86.8, 2.514, 515.464 }, + { 33.5, 3.826, 1066.495 }, + { 44.4, 0, 0 }, + { 22.6, 2.982, 543.918 }, + { 23.7, 1.277, 412.371 }, + { 28.5, 2.448, 206.186 }, + { 19.8, 2.101, 639.897 }, + { 19.7, 1.403, 419.485 }, + { 18.8, 1.594, 103.093 }, + { 17.0, 2.302, 21.341 }, + { 16.8, 2.598, 1589.073 }, + { 16.2, 3.145, 625.670 }, + { 16.1, 3.360, 1052.268 }, + { 13.4, 2.760, 95.979 }, + { 13.2, 2.539, 199.072 }, + { 12.6, 6.266, 426.598 }, + { 8.6, 2.27, 110.21 }, + { 6.7, 3.43, 309.28 }, + { 8.7, 1.76, 10.29 }, + { 6.5, 4.04, 728.76 }, + { 5.4, 5.25, 323.51 }, + { 5.7, 2.52, 508.35 }, + { 5.4, 2.91, 1045.15 }, + { 4.0, 4.30, 88.87 }, + { 3.9, 3.52, 302.16 }, + { 3.8, 4.09, 735.88 }, + { 3.3, 1.43, 956.29 }, + { 2.8, 4.36, 1596.19 }, + { 2.7, 1.25, 213.30 }, + { 2.6, 2.24, 117.32 }, + { 2.4, 2.90, 742.99 }, + { 2.7, 5.02, 838.97 }, + { 1.9, 2.77, 1169.59 }, + { 2.3, 2.36, 942.06 }, + { 1.5, 1.61, 220.41 }, + { 1.5, 3.09, 2118.76 }, + { 1.9, 5.01, 831.86 }, + { 1.6, 1.40, 405.26 }, + { 1.3, 3.98, 1155.36 }, + { 1.2, 3.46, 1073.61 }, + { 1.0, 3.39, 532.87 }, + { 0.9, 2.70, 191.96 }, + { 0.8, 1.48, 632.78 }, + { 0.8, 1.11, 1162.47 }, + { 0.8, 3.30, 1258.45 }, + { 0.7, 5.90, 853.20 }, + { 0.8, 3.66, 1581.96 }, + { 0.7, 3.75, 433.71 }, + { 0.7, 2.93, 1574.85 }, + { 0.7, 3.53, 525.76 }, + { 0.6, 4.15, 721.65 }, + { 0.6, 4.69, 81.75 }, + { 0.7, 1.96, 1272.68 }, + { 0.5, 1.57, 949.18 }, + { 0.7, 2.02, 526.51 }, + { 0.5, 4.36, 1368.66 }, + { 0.5, 4.96, 1148.25 }, + { 0.5, 4.31, 330.62 }, + { 0.6, 2.28, 551.03 }, + { 0.5, 3.87, 1361.55 }, + { 0.4, 2.95, 1038.04 }, + { 0.4, 4.08, 1471.75 }, + { 0.4, 2.22, 539.99 }, + { 0.4, 4.53, 1464.64 }, + /* 70 terms retained, 39 terms dropped, error 0.014"*T^3 */ + + /* jupiter l, T^4 */ + { 669.5, 0.8528, 7.1135 }, + { 100.0, 0.7426, 14.2271 }, + { 114.0, 3.1416, 0 }, + { 50.0, 1.653, 536.805 }, + { 43.6, 5.820, 529.691 }, + { 31.8, 4.858, 522.577 }, + { 14.7, 4.291, 515.464 }, + { 8.9, 0.71, 1059.38 }, + { 5.0, 1.30, 543.92 }, + { 4.5, 2.32, 1066.50 }, + { 4.3, 0.48, 21.34 }, + { 3.1, 3.00, 412.37 }, + { 2.1, 0.40, 639.90 }, + { 1.8, 4.91, 625.67 }, + { 1.9, 4.26, 199.07 }, + { 1.7, 4.26, 206.19 }, + { 1.4, 5.26, 1052.27 }, + { 1.2, 4.72, 95.98 }, + { 1.1, 1.29, 1589.07 }, + { 1.0, 4.78, 1045.15 }, + { 0.9, 6.06, 88.87 }, + { 0.9, 5.78, 728.76 }, + { 0.9, 4.55, 426.60 }, + { 0.8, 3.40, 419.48 }, + { 0.8, 3.55, 103.09 }, + { 0.7, 0.52, 110.21 }, + { 0.4, 5.23, 302.16 }, + { 0.4, 6.24, 956.29 }, + { 0.4, 5.25, 309.28 }, + { 0.4, 0.60, 117.32 }, + { 0.3, 4.78, 508.35 }, + { 0.3, 3.48, 323.51 }, + { 0.3, 2.96, 1596.19 }, + { 0.3, 4.33, 942.06 }, + { 0.3, 0.48, 831.86 }, + { 0.3, 1.80, 1073.61 }, + { 0.2, 0.44, 220.41 }, + { 0.2, 1.13, 1169.59 }, + { 0.2, 2.16, 1361.55 }, + { 0.2, 3.43, 1148.25 }, + { 0.2, 1.93, 2118.76 }, + { 0.2, 3.03, 1272.68 }, + /* 42 terms retained, 3 terms dropped, error 0.0042"*T^4 */ + + /* jupiter l, T^5 */ + { 49.6, 5.257, 7.114 }, + { 15.8, 5.251, 14.227 }, + { 4.3, 0.01, 536.80 }, + { 1.5, 1.10, 522.58 }, + { 0.7, 5.86, 543.92 }, + { 0.7, 0.87, 515.46 }, + { 0.8, 3.14, 0 }, + { 0.5, 0.82, 1066.50 }, + { 0.3, 5.63, 1059.38 }, + /* 9 terms retained, 1 terms dropped, error 0.0038"*T^5 */ + /* end jupiter l */ + + /* jupiter b, T^0 */ + { 2268615.7, 3.55852607, 529.69096509 }, + { 109971.6, 3.9080935, 1059.3819302 }, + { 110090.4, 0, 0 }, + { 8101.4, 3.60510, 522.57742 }, + { 6044.0, 4.25883, 1589.07290 }, + { 6437.8, 0.30627, 536.80451 }, + { 1106.9, 2.98534, 1162.47470 }, + { 941.7, 2.9362, 1052.2684 }, + { 894.1, 1.7545, 7.1135 }, + { 767.3, 2.1547, 632.7837 }, + { 944.3, 1.6752, 426.5982 }, + { 684.2, 3.6781, 213.2991 }, + { 629.2, 0.6434, 1066.4955 }, + { 835.9, 5.1788, 103.0928 }, + { 531.7, 2.7031, 110.2063 }, + { 558.5, 0.0135, 846.0828 }, + { 464.4, 1.1734, 949.1756 }, + { 431.1, 2.6083, 419.4846 }, + { 351.4, 4.6106, 2118.7639 }, + { 123.1, 3.3497, 1692.1657 }, + { 115.0, 5.0489, 316.3919 }, + { 132.2, 4.7782, 742.9901 }, + { 103.4, 2.3188, 1478.8666 }, + { 116.4, 1.3869, 323.5054 }, + { 102.4, 3.1529, 1581.9593 }, + { 103.8, 3.7010, 515.4639 }, + { 78.7, 3.983, 1265.567 }, + { 69.9, 2.560, 956.289 }, + { 55.6, 0.375, 1375.774 }, + { 52.0, 0.990, 1596.186 }, + { 55.2, 0.402, 525.759 }, + { 63.5, 4.501, 735.877 }, + { 49.7, 0.186, 543.918 }, + { 48.8, 3.573, 533.623 }, + { 28.4, 1.535, 625.670 }, + { 29.2, 5.431, 206.186 }, + /* 36 terms retained, 213 terms dropped, error 0.73" */ + + /* jupiter b, T^1 */ + { 177351.8, 5.7016649, 529.6909651 }, + { 3230.2, 5.77942, 1059.38193 }, + { 3081.4, 5.47464, 522.57742 }, + { 2211.9, 4.73477, 536.80451 }, + { 1694.2, 3.14159, 0 }, + { 346.4, 4.7460, 1052.2684 }, + { 234.3, 5.1886, 1066.4955 }, + { 196.2, 6.1855, 7.1135 }, + { 150.5, 3.9272, 1589.0729 }, + { 114.1, 3.4390, 632.7837 }, + { 96.7, 2.914, 949.176 }, + { 76.6, 2.505, 103.093 }, + { 81.7, 5.077, 1162.475 }, + { 76.6, 0.613, 419.485 }, + { 73.9, 5.500, 515.464 }, + { 49.9, 3.948, 735.877 }, + { 60.5, 5.447, 213.299 }, + { 36.6, 4.698, 543.918 }, + { 46.0, 0.539, 110.206 }, + { 45.1, 1.895, 846.083 }, + { 36.0, 6.110, 316.392 }, + { 32.0, 4.925, 1581.959 }, + { 21.0, 5.630, 1596.186 }, + { 23.2, 5.848, 323.505 }, + { 24.7, 3.941, 2118.764 }, + { 17.3, 5.653, 533.623 }, + { 16.5, 5.898, 526.510 }, + { 16.7, 5.667, 1265.567 }, + { 15.8, 4.433, 1045.155 }, + { 13.4, 4.302, 532.872 }, + { 11.7, 1.810, 956.289 }, + { 11.9, 4.301, 525.759 }, + { 9.5, 2.03, 206.19 }, + { 10.5, 6.155, 14.227 }, + { 8.4, 3.93, 1478.87 }, + { 8.1, 4.20, 1169.59 }, + { 7.7, 2.99, 942.06 }, + { 8.8, 1.56, 426.60 }, + { 8.9, 4.87, 1155.36 }, + { 7.8, 3.85, 625.67 }, + /* 40 terms retained, 101 terms dropped, error 0.21"*T */ + + /* jupiter b, T^2 */ + { 8094.1, 1.46323, 529.69097 }, + { 742.4, 0.9569, 522.5774 }, + { 813.2, 3.1416, 0 }, + { 399.0, 2.8989, 536.8045 }, + { 342.2, 1.4468, 1059.3819 }, + { 73.9, 0.407, 1052.268 }, + { 46.2, 3.480, 1066.495 }, + { 29.3, 0.991, 515.464 }, + { 29.7, 1.925, 1589.073 }, + { 22.8, 4.271, 7.114 }, + { 13.9, 2.922, 543.918 }, + { 12.1, 5.222, 632.784 }, + { 10.7, 4.880, 949.176 }, + { 6.1, 6.21, 1045.15 }, + { 5.9, 0.53, 1581.96 }, + { 5.0, 1.43, 526.51 }, + { 4.6, 0.92, 1162.47 }, + { 4.5, 4.02, 1596.19 }, + { 5.1, 6.03, 735.88 }, + { 3.6, 4.54, 110.21 }, + { 3.4, 1.39, 533.62 }, + { 3.3, 4.40, 14.23 }, + { 3.4, 0.42, 419.48 }, + { 2.9, 2.06, 316.39 }, + { 2.5, 3.98, 323.51 }, + { 3.1, 2.48, 2118.76 }, + { 3.1, 2.40, 532.87 }, + { 2.2, 4.78, 942.06 }, + { 2.1, 3.89, 426.60 }, + { 2.3, 0.37, 1155.36 }, + { 2.0, 3.90, 846.08 }, + { 1.9, 1.20, 103.09 }, + { 1.7, 1.42, 1265.57 }, + { 2.3, 0.88, 213.30 }, + { 1.8, 5.80, 625.67 }, + { 1.7, 2.24, 525.76 }, + /* 36 terms retained, 45 terms dropped, error 0.043"*T^2 */ + + /* jupiter b, T^3 */ + { 251.6, 3.3809, 529.6910 }, + { 121.7, 2.7331, 522.5774 }, + { 48.7, 1.037, 536.805 }, + { 11.0, 2.315, 1052.268 }, + { 8.1, 2.77, 515.46 }, + { 6.2, 1.78, 1066.50 }, + { 7.3, 4.25, 1059.38 }, + { 3.6, 1.13, 543.92 }, + { 2.8, 3.14, 0 }, + { 1.9, 2.29, 7.11 }, + { 1.6, 1.78, 1045.15 }, + { 0.9, 0.45, 632.78 }, + { 0.8, 0.31, 949.18 }, + { 0.7, 2.64, 14.23 }, + { 0.9, 0.33, 1589.07 }, + { 0.7, 2.37, 1581.96 }, + { 0.6, 2.48, 1596.19 }, + { 0.7, 1.53, 735.88 }, + { 0.5, 3.68, 419.48 }, + { 0.5, 0.27, 942.06 }, + { 0.5, 3.18, 526.51 }, + { 0.4, 2.88, 110.21 }, + /* 22 terms retained, 20 terms dropped, error 0.0081"*T^3 */ + + /* jupiter b, T^4 */ + { 15.1, 4.530, 522.577 }, + { 5.4, 4.47, 529.69 }, + { 4.5, 5.44, 536.80 }, + { 3.4, 0, 0 }, + { 1.8, 4.52, 515.46 }, + { 1.3, 4.20, 1052.27 }, + { 0.8, 5.59, 543.92 }, + { 0.5, 0.06, 1066.50 }, + { 0.3, 3.67, 1059.38 }, + { 0.1, 3.56, 1045.15 }, + { 0.1, 5.70, 7.11 }, + { 0.1, 1.17, 14.23 }, + /* 12 terms retained, 0 terms dropped, error 0.0017"*T^4 */ + + /* jupiter b, T^5 */ + { 1.4, 0.09, 522.58 }, + { 0.4, 0.01, 515.46 }, + { 0.3, 3.28, 536.80 }, + { 0.1, 0.34, 529.69 }, + /* 4 terms retained, 1 terms dropped, error 0.0012"*T^5 */ + /* end jupiter b */ + + /* jupiter r, T^0 */ + { 520887429.5, 0, 0 }, + { 25209327.0, 3.491086400, 529.690965095 }, + { 610599.9, 3.8411537, 1059.3819302 }, + { 282029.5, 2.5741988, 632.7837393 }, + { 187647.4, 2.0759038, 522.5774181 }, + { 86792.9, 0.710011, 419.484644 }, + { 72062.9, 0.214657, 536.804512 }, + { 65517.2, 5.979959, 316.391870 }, + { 29134.6, 1.677592, 103.092774 }, + { 30135.3, 2.161321, 949.175609 }, + { 23453.2, 3.540231, 735.876514 }, + { 22283.7, 4.193628, 1589.072895 }, + { 23947.3, 0.274579, 7.113547 }, + { 13032.6, 2.960431, 1162.474704 }, + { 9703.3, 1.90670, 206.18555 }, + { 12749.0, 2.715501, 1052.268383 }, + { 9161.4, 4.41353, 213.29910 }, + { 7894.5, 2.47908, 426.59819 }, + { 7058.0, 2.18185, 1265.56748 }, + { 6137.8, 6.26418, 846.08283 }, + { 5477.1, 5.65729, 639.89729 }, + { 3502.5, 0.56531, 1066.49548 }, + { 4136.9, 2.72220, 625.67019 }, + { 4170.0, 2.01605, 515.46387 }, + { 2500.0, 4.55182, 838.96929 }, + { 2617.0, 2.00994, 1581.95935 }, + { 1911.9, 0.85622, 412.37110 }, + { 2127.6, 6.12751, 742.99006 }, + { 1610.5, 3.08868, 1368.66025 }, + { 1479.5, 2.68026, 1478.86657 }, + { 1230.7, 1.89043, 323.50542 }, + { 1216.8, 1.80172, 110.20632 }, + { 961.1, 4.5488, 2118.7639 }, + { 885.7, 4.1479, 533.6231 }, + { 776.7, 3.6770, 728.7630 }, + { 998.6, 2.8721, 309.2783 }, + { 1015.0, 1.38673, 454.90937 }, + { 727.2, 3.9882, 1155.3612 }, + { 655.3, 2.7907, 1685.0521 }, + { 821.5, 1.5934, 1898.3512 }, + { 620.8, 4.8228, 956.2892 }, + { 654.0, 3.3815, 1692.1657 }, + { 812.0, 5.9409, 909.8187 }, + { 562.1, 0.0810, 543.9181 }, + { 542.2, 0.2836, 525.7588 }, + { 457.9, 0.1272, 1375.7738 }, + { 614.8, 2.2762, 942.0621 }, + { 435.8, 2.6027, 95.9792 }, + { 496.1, 5.5301, 380.1278 }, + { 470.0, 2.8190, 1795.2584 }, + { 445.0, 0.1462, 14.2271 }, + { 290.9, 3.8934, 1471.7530 }, + { 276.6, 2.5224, 2001.4440 }, + { 275.1, 2.9886, 526.5096 }, + { 293.9, 2.0494, 199.0720 }, + { 291.0, 6.0313, 1169.5883 }, + { 338.3, 2.7987, 1045.1548 }, + { 257.5, 6.1340, 532.8724 }, + { 319.0, 1.3480, 2214.7431 }, + { 309.4, 5.3686, 1272.6810 }, + { 345.8, 1.5640, 491.5579 }, + { 303.4, 1.1541, 5753.3849 }, + { 192.3, 0.9200, 1596.1864 }, + { 215.4, 2.6357, 2111.6503 }, + { 200.7, 2.3726, 1258.4539 }, + { 239.0, 3.5740, 835.0371 }, + { 197.1, 5.9286, 453.4249 }, + { 139.4, 3.6396, 1788.1449 }, + { 191.4, 6.2825, 983.1159 }, + { 176.6, 2.5767, 9683.5946 }, + { 123.6, 2.2616, 2317.8359 }, + { 128.2, 4.6659, 831.8557 }, + { 112.4, 0.8560, 433.7117 }, + { 128.8, 1.1057, 2531.1350 }, + { 99.4, 4.503, 518.645 }, + { 93.9, 2.726, 853.196 }, + { 106.5, 5.8146, 220.4126 }, + { 120.2, 2.9516, 3.9322 }, + { 104.0, 2.2222, 74.7816 }, + { 81.7, 3.235, 1361.547 }, + { 112.5, 4.8622, 528.2065 }, + { 79.5, 0.885, 430.530 }, + { 85.8, 2.115, 1574.846 }, + { 85.7, 2.338, 2428.042 }, + { 68.3, 3.357, 2104.537 }, + { 69.6, 3.042, 302.165 }, + { 69.8, 3.224, 305.346 }, + { 69.6, 0.205, 532.139 }, + { 57.0, 2.002, 2634.228 }, + { 77.1, 2.098, 508.350 }, + { 56.7, 3.917, 2221.857 }, + { 58.3, 5.724, 628.852 }, + { 52.5, 4.025, 527.243 }, + { 63.6, 1.100, 1364.728 }, + { 53.6, 0.874, 2847.527 }, + { 59.6, 0.958, 494.266 }, + { 58.0, 3.458, 2008.558 }, + { 41.5, 3.520, 529.739 }, + { 44.7, 1.623, 984.600 }, + { 44.9, 4.901, 2648.455 }, + { 53.2, 1.198, 760.256 }, + { 44.4, 4.426, 1063.314 }, + { 37.6, 2.930, 1677.939 }, + { 41.5, 0.322, 529.643 }, + { 42.9, 0.031, 1439.510 }, + { 46.0, 2.543, 636.716 }, + { 40.2, 4.394, 1148.248 }, + { 38.8, 4.317, 149.563 }, + { 40.3, 2.101, 2744.434 }, + { 48.9, 5.603, 2810.921 }, + { 37.1, 5.078, 1905.465 }, + { 43.9, 1.245, 621.738 }, + { 34.0, 3.094, 2420.929 }, + { 36.8, 0.842, 530.654 }, + { 31.1, 5.358, 1485.980 }, + { 39.3, 4.708, 569.048 }, + { 39.7, 2.462, 355.749 }, + { 31.5, 6.193, 3.181 }, + { 28.4, 2.485, 519.396 }, + { 32.4, 2.733, 604.473 }, + { 27.1, 3.923, 2324.949 }, + { 26.8, 1.750, 2950.620 }, + { 29.0, 1.835, 1891.238 }, + { 26.5, 0.604, 1055.450 }, + { 33.5, 0.761, 643.829 }, + { 26.6, 1.036, 405.258 }, + { 25.5, 3.463, 458.842 }, + { 32.9, 3.186, 528.728 }, + { 25.7, 0.524, 511.532 }, + { 26.0, 1.336, 330.619 }, + /* 130 terms retained, 615 terms dropped, error 6e-06 a.u. */ + + /* jupiter r, T^1 */ + { 1271801.6, 2.64937511, 529.69096509 }, + { 61661.8, 3.000763, 1059.381930 }, + { 53443.6, 3.897176, 522.577418 }, + { 31185.2, 4.882767, 536.804512 }, + { 41390.3, 0, 0 }, + { 11847.2, 2.413296, 419.484644 }, + { 9166.4, 4.75979, 7.11355 }, + { 3175.8, 2.79298, 103.09277 }, + { 3203.4, 5.21083, 735.87651 }, + { 3403.6, 3.34689, 1589.07290 }, + { 2600.0, 3.63435, 206.18555 }, + { 2412.2, 1.46947, 426.59819 }, + { 2806.1, 3.74224, 515.46387 }, + { 2676.6, 4.33053, 1052.26838 }, + { 2100.5, 3.92763, 639.89729 }, + { 1646.2, 5.30954, 1066.49548 }, + { 1641.3, 4.41629, 625.67019 }, + { 1049.9, 3.16114, 213.29910 }, + { 1024.8, 2.55433, 412.37110 }, + { 741.0, 2.1709, 1162.4747 }, + { 806.4, 2.6775, 632.7837 }, + { 676.9, 6.2495, 838.9693 }, + { 468.9, 4.7097, 543.9181 }, + { 444.7, 0.4028, 323.5054 }, + { 567.1, 4.5766, 742.9901 }, + { 415.9, 5.3684, 728.7630 }, + { 484.7, 2.4688, 949.1756 }, + { 337.6, 3.1678, 956.2892 }, + { 401.7, 4.6053, 309.2783 }, + { 347.4, 4.6815, 14.2271 }, + { 260.8, 5.3429, 846.0828 }, + { 220.1, 4.8421, 1368.6603 }, + { 203.2, 5.6000, 1155.3612 }, + { 246.6, 3.9231, 942.0621 }, + { 183.5, 4.2653, 95.9792 }, + { 180.1, 4.4017, 532.8724 }, + { 197.1, 3.7055, 2118.7639 }, + { 196.0, 3.7588, 199.0720 }, + { 200.2, 4.4389, 1045.1548 }, + { 170.2, 4.8465, 526.5096 }, + { 146.3, 6.1296, 533.6231 }, + { 133.5, 1.3225, 110.2063 }, + { 132.1, 4.5119, 525.7588 }, + { 123.9, 2.0429, 1478.8666 }, + { 121.9, 4.4058, 1169.5883 }, + { 115.3, 4.4674, 1581.9593 }, + { 98.5, 5.728, 1596.186 }, + { 91.6, 4.530, 1685.052 }, + { 110.6, 3.6250, 1272.6810 }, + { 80.5, 4.113, 1258.454 }, + { 79.6, 2.719, 1692.166 }, + { 100.2, 5.2469, 1265.5675 }, + { 77.9, 5.567, 1471.753 }, + { 85.8, 0.079, 831.856 }, + { 82.1, 3.808, 508.350 }, + { 55.3, 0.352, 316.392 }, + { 52.3, 5.531, 433.712 }, + { 55.8, 4.751, 302.165 }, + { 50.6, 4.856, 1375.774 }, + { 43.6, 4.944, 1361.547 }, + { 42.2, 1.224, 853.196 }, + { 37.7, 4.268, 2001.444 }, + { 49.4, 4.014, 220.413 }, + { 38.3, 5.330, 1788.145 }, + { 35.6, 1.762, 1795.258 }, + { 36.3, 3.850, 1574.846 }, + { 29.3, 5.166, 3.932 }, + { 25.2, 4.338, 519.396 }, + { 24.8, 2.729, 405.258 }, + { 27.0, 6.097, 1148.248 }, + { 22.6, 0.192, 380.128 }, + { 20.5, 4.329, 3.181 }, + { 19.9, 4.630, 1677.939 }, + { 19.5, 5.106, 1073.609 }, + { 18.4, 3.765, 1485.980 }, + { 18.9, 5.053, 2104.537 }, + { 17.0, 4.018, 2317.836 }, + { 16.7, 5.429, 88.866 }, + { 15.3, 2.927, 2008.558 }, + { 14.5, 3.633, 628.852 }, + { 14.6, 5.508, 721.649 }, + { 13.7, 4.876, 629.602 }, + { 18.5, 6.030, 330.619 }, + { 13.5, 1.385, 518.645 }, + { 15.7, 2.930, 1905.465 }, + { 12.5, 1.586, 2111.650 }, + { 12.3, 3.377, 635.965 }, + { 11.8, 4.085, 2648.455 }, + { 11.2, 4.626, 636.716 }, + { 14.3, 2.742, 2221.857 }, + { 11.2, 3.553, 1891.238 }, + { 13.1, 5.838, 1464.639 }, + { 11.4, 2.576, 511.532 }, + { 10.5, 0.499, 453.425 }, + { 9.7, 4.39, 1994.33 }, + { 10.1, 2.764, 423.417 }, + { 8.6, 5.16, 1056.20 }, + { 9.0, 4.79, 2420.93 }, + { 8.1, 3.73, 2634.23 }, + { 8.1, 1.29, 2428.04 }, + { 8.9, 1.86, 750.10 }, + { 8.9, 4.81, 1062.56 }, + { 8.6, 4.54, 21.34 }, + { 9.5, 4.33, 1802.37 }, + { 6.9, 5.97, 540.74 }, + { 7.3, 4.98, 1699.28 }, + { 7.1, 4.99, 1055.45 }, + { 7.2, 4.98, 1898.35 }, + { 6.5, 1.39, 422.67 }, + { 6.8, 2.91, 2324.95 }, + { 6.5, 4.57, 1038.04 }, + { 7.3, 3.02, 416.30 }, + { 6.6, 5.55, 1781.03 }, + /* 113 terms retained, 268 terms dropped, error 1.4e-06 a.u.*T */ + + /* jupiter r, T^2 */ + { 79644.8, 1.358659, 529.690965 }, + { 8251.6, 5.77774, 522.57742 }, + { 7029.9, 3.27477, 536.80451 }, + { 5314.0, 1.83835, 1059.38193 }, + { 1860.8, 2.97682, 7.11355 }, + { 836.3, 4.1989, 419.4846 }, + { 964.5, 5.4803, 515.4639 }, + { 406.5, 3.7825, 1066.4955 }, + { 426.6, 2.2275, 639.8973 }, + { 377.3, 2.2425, 1589.0729 }, + { 497.9, 3.1416, 0 }, + { 339.0, 6.1269, 625.6702 }, + { 362.9, 5.3676, 206.1855 }, + { 342.0, 6.0992, 1052.2684 }, + { 279.9, 4.2616, 412.3711 }, + { 332.6, 0.0033, 426.5982 }, + { 229.8, 0.7053, 735.8765 }, + { 200.8, 3.0685, 543.9181 }, + { 199.8, 4.4288, 103.0928 }, + { 257.3, 0.9630, 632.7837 }, + { 138.6, 2.9324, 14.2271 }, + { 113.5, 0.7871, 728.7630 }, + { 86.0, 5.144, 323.505 }, + { 94.6, 1.705, 838.969 }, + { 83.5, 0.058, 309.278 }, + { 75.2, 1.605, 956.289 }, + { 70.5, 1.510, 213.299 }, + { 80.3, 2.981, 742.990 }, + { 56.2, 0.955, 1162.475 }, + { 61.6, 6.101, 1045.155 }, + { 66.6, 5.473, 199.072 }, + { 50.1, 2.721, 532.872 }, + { 51.9, 5.584, 942.062 }, + { 39.8, 5.946, 95.979 }, + { 44.5, 5.524, 508.350 }, + { 44.3, 0.271, 526.510 }, + { 29.9, 0.936, 1155.361 }, + { 28.4, 2.878, 525.759 }, + { 26.3, 4.269, 1596.186 }, + { 27.0, 2.806, 1169.588 }, + { 27.5, 2.648, 2118.764 }, + { 22.7, 0.178, 302.165 }, + { 29.3, 1.786, 831.856 }, + { 20.0, 0.043, 949.176 }, + { 19.9, 1.161, 533.623 }, + { 21.7, 1.888, 1272.681 }, + { 17.6, 4.150, 846.083 }, + { 17.1, 5.892, 1258.454 }, + { 21.4, 4.355, 316.392 }, + { 21.3, 0.544, 1265.567 }, + { 19.9, 0.065, 1581.959 }, + { 17.0, 0.534, 1368.660 }, + { 12.8, 3.900, 433.712 }, + { 13.1, 0.795, 110.206 }, + { 11.9, 0.407, 1361.547 }, + { 11.7, 4.444, 405.258 }, + { 12.0, 2.229, 220.413 }, + { 9.6, 6.01, 853.20 }, + { 10.2, 0.995, 1471.753 }, + { 9.0, 1.60, 1692.17 }, + { 8.7, 3.52, 1073.61 }, + { 8.3, 5.60, 1574.85 }, + { 9.0, 6.27, 519.40 }, + { 7.8, 0.65, 1478.87 }, + { 7.8, 0.18, 1685.05 }, + { 7.5, 0.88, 88.87 }, + { 7.3, 0.89, 721.65 }, + { 9.1, 1.51, 1148.25 }, + { 6.1, 2.50, 3.18 }, + { 7.0, 4.44, 330.62 }, + { 5.2, 2.79, 21.34 }, + { 5.1, 2.98, 1375.77 }, + { 4.9, 0.05, 1677.94 }, + { 4.7, 2.28, 1485.98 }, + { 4.7, 0.86, 3.93 }, + { 5.3, 0.85, 1788.14 }, + { 4.2, 0.41, 629.60 }, + { 4.2, 1.61, 635.97 }, + { 3.6, 2.71, 551.03 }, + { 3.3, 0.55, 1795.26 }, + { 4.4, 1.28, 1464.64 }, + { 3.3, 1.19, 1905.46 }, + { 3.2, 6.19, 1038.04 }, + { 3.1, 6.23, 2001.44 }, + { 3.4, 2.45, 539.99 }, + { 3.2, 5.55, 191.96 }, + { 2.6, 3.24, 1062.56 }, + { 2.6, 0.55, 2104.54 }, + { 2.2, 5.33, 1891.24 }, + { 2.7, 4.82, 416.30 }, + { 2.2, 1.72, 628.85 }, + { 2.3, 6.19, 1994.33 }, + { 2.3, 4.28, 963.40 }, + { 2.6, 0.03, 1898.35 }, + { 2.1, 3.33, 1699.28 }, + { 2.5, 2.40, 227.53 }, + { 2.5, 0.07, 750.10 }, + { 2.0, 0.29, 636.72 }, + { 1.9, 0.32, 295.05 }, + { 1.9, 3.44, 647.01 }, + { 1.9, 0.29, 2111.65 }, + { 1.9, 3.14, 611.44 }, + { 2.3, 1.95, 824.74 }, + { 1.9, 4.72, 2125.88 }, + { 2.5, 1.24, 2221.86 }, + { 1.8, 1.60, 2008.56 }, + { 1.6, 5.83, 422.67 }, + { 1.7, 2.32, 440.83 }, + { 1.6, 0.37, 1056.20 }, + { 1.6, 2.42, 10.29 }, + { 1.6, 3.52, 1055.45 }, + { 1.6, 5.76, 117.32 }, + { 1.6, 5.89, 2317.84 }, + { 2.0, 4.62, 423.42 }, + { 2.1, 1.05, 1781.03 }, + { 1.9, 1.12, 618.56 }, + { 1.9, 2.79, 1802.37 }, + { 1.8, 3.01, 2648.45 }, + /* 118 terms retained, 72 terms dropped, error 3.9e-07 a.u.*T^2 */ + + /* jupiter r, T^3 */ + { 3519.3, 6.05801, 529.69097 }, + { 1073.2, 1.67321, 536.80451 }, + { 915.7, 1.4133, 522.5774 }, + { 341.6, 0.5230, 1059.3819 }, + { 254.9, 1.1963, 7.1135 }, + { 221.5, 0.9523, 515.4639 }, + { 69.1, 2.269, 1066.495 }, + { 89.7, 3.142, 0 }, + { 57.8, 1.414, 543.918 }, + { 57.7, 0.526, 639.897 }, + { 51.1, 5.980, 412.371 }, + { 46.9, 1.579, 625.670 }, + { 42.8, 6.117, 419.485 }, + { 37.5, 1.183, 14.227 }, + { 33.8, 1.667, 1052.268 }, + { 31.2, 1.043, 1589.073 }, + { 30.0, 4.632, 426.598 }, + { 33.5, 0.848, 206.186 }, + { 20.8, 2.501, 728.763 }, + { 14.5, 0.960, 508.350 }, + { 13.0, 1.502, 1045.155 }, + { 11.7, 3.555, 323.505 }, + { 12.3, 2.610, 735.877 }, + { 15.0, 0.891, 199.072 }, + { 11.2, 1.790, 309.278 }, + { 10.6, 6.278, 956.289 }, + { 9.8, 6.26, 103.09 }, + { 9.3, 3.45, 838.97 }, + { 6.7, 1.87, 302.16 }, + { 7.4, 1.28, 742.99 }, + { 7.2, 0.92, 942.06 }, + { 5.6, 1.38, 95.98 }, + { 6.8, 3.45, 831.86 }, + { 4.6, 2.83, 1596.19 }, + { 4.0, 1.21, 1169.59 }, + { 3.9, 5.99, 213.30 }, + { 3.6, 6.11, 405.26 }, + { 2.9, 2.33, 1155.36 }, + { 2.4, 1.87, 532.87 }, + { 2.4, 0.43, 220.41 }, + { 2.3, 1.95, 1073.61 }, + { 2.3, 0.09, 632.78 }, + { 2.2, 1.59, 2118.76 }, + { 2.4, 5.97, 1162.47 }, + { 2.1, 1.07, 21.34 }, + { 2.1, 1.51, 1258.45 }, + { 2.5, 0.35, 1272.68 }, + { 2.0, 5.94, 110.21 }, + { 2.0, 2.55, 88.87 }, + { 2.0, 2.16, 433.71 }, + { 2.0, 2.70, 721.65 }, + { 1.7, 4.46, 853.20 }, + { 1.9, 2.26, 1361.55 }, + { 1.7, 1.98, 525.76 }, + { 1.5, 0.12, 949.18 }, + { 2.0, 3.17, 1148.25 }, + { 1.7, 2.71, 330.62 }, + { 1.6, 0.47, 526.51 }, + { 1.2, 3.02, 963.40 }, + { 1.7, 0.44, 533.62 }, + { 1.2, 1.16, 1574.85 }, + { 1.1, 2.55, 846.08 }, + { 1.4, 1.17, 1038.04 }, + { 1.0, 2.70, 519.40 }, + { 1.4, 0.67, 551.03 }, + { 1.0, 4.17, 2627.11 }, + { 1.1, 1.07, 227.53 }, + { 0.9, 2.93, 1368.66 }, + { 0.8, 4.87, 611.44 }, + { 1.1, 1.79, 1581.96 }, + { 0.9, 4.91, 1670.83 }, + { 0.9, 3.69, 824.74 }, + { 0.8, 3.23, 2125.88 }, + { 0.8, 2.39, 2317.84 }, + { 0.9, 0.60, 539.99 }, + { 0.9, 4.52, 750.10 }, + { 0.8, 0.21, 1141.13 }, + { 0.8, 0.94, 191.96 }, + { 0.8, 2.25, 2538.25 }, + { 0.7, 0.67, 440.83 }, + { 0.7, 5.80, 1485.98 }, + { 0.6, 2.48, 1265.57 }, + { 0.6, 6.14, 1279.79 }, + { 0.6, 5.51, 2413.82 }, + { 0.6, 4.41, 1382.89 }, + { 0.6, 2.18, 1062.56 }, + { 0.6, 1.93, 2634.23 }, + { 0.5, 2.05, 295.05 }, + { 0.5, 2.32, 1471.75 }, + { 0.7, 2.27, 1699.28 }, + { 0.5, 1.96, 1677.94 }, + { 0.5, 4.36, 1692.17 }, + { 0.5, 2.50, 2207.63 }, + { 0.5, 5.77, 1478.87 }, + { 0.4, 5.99, 934.95 }, + { 0.4, 2.80, 81.75 }, + { 0.4, 3.94, 316.39 }, + { 0.5, 0.19, 10.29 }, + /* 98 terms retained, 0 terms dropped, error 1e-07 a.u.*T^3 */ + + /* jupiter r, T^4 */ + { 128.6, 0.0842, 536.8045 }, + { 113.5, 4.2486, 529.6910 }, + { 82.7, 3.298, 522.577 }, + { 37.9, 2.733, 515.464 }, + { 26.7, 5.691, 7.114 }, + { 17.6, 5.400, 1059.382 }, + { 12.6, 6.016, 543.918 }, + { 9.3, 0.77, 1066.50 }, + { 8.1, 5.68, 14.23 }, + { 6.3, 5.12, 639.90 }, + { 7.0, 1.43, 412.37 }, + { 5.4, 3.34, 625.67 }, + { 2.9, 3.40, 1052.27 }, + { 2.6, 4.16, 728.76 }, + { 2.6, 2.90, 426.60 }, + { 2.3, 6.22, 1589.07 }, + { 2.1, 3.12, 1045.15 }, + { 1.7, 2.81, 206.19 }, + { 1.8, 2.60, 199.07 }, + { 1.8, 1.89, 419.48 }, + { 1.5, 1.33, 1596.19 }, + { 1.7, 0, 0 }, + { 1.0, 4.42, 956.29 }, + { 1.2, 5.16, 831.86 }, + { 0.9, 3.17, 508.35 }, + { 0.9, 5.79, 1169.59 }, + { 0.9, 1.87, 1148.25 }, + { 1.0, 0.67, 1361.55 }, + { 0.8, 1.48, 1272.68 }, + { 1.0, 5.47, 220.41 }, + { 0.8, 2.42, 117.32 }, + { 0.7, 0.50, 1073.61 }, + { 0.7, 3.53, 302.16 }, + { 0.7, 2.85, 191.96 }, + { 0.8, 2.20, 942.06 }, + { 0.8, 5.31, 551.03 }, + { 0.7, 3.72, 88.87 }, + { 0.5, 1.83, 647.01 }, + { 0.6, 0.86, 330.62 }, + { 0.5, 5.26, 21.34 }, + { 0.6, 3.82, 618.56 }, + { 0.5, 4.44, 110.21 }, + { 0.6, 1.59, 3.18 }, + { 0.6, 1.84, 10.29 }, + { 0.5, 1.53, 405.26 }, + { 0.5, 0.24, 433.71 }, + /* 46 terms retained, 0 terms dropped, error 7.1e-08 a.u.*T^4 */ + + /* jupiter r, T^5 */ + { 11.2, 4.752, 536.805 }, + { 4.3, 5.92, 522.58 }, + { 2.1, 5.57, 515.46 }, + { 1.9, 4.30, 543.92 }, + { 1.9, 3.69, 7.11 }, + { 1.6, 5.49, 1066.50 }, + { 1.6, 4.13, 1059.38 }, + { 1.2, 3.78, 14.23 }, + { 1.0, 4.51, 529.69 }, + /* 9 terms retained, 0 terms dropped, error 6.5e-08 a.u.*T^5 */ + /* end jupiter */ +}; + +int vn_jupiter[][3] = { + /* addresses for jupiter l, b, r */ + /* T^0 */ { 0, 392, 542, }, + /* T^1 */ { 109, 428, 672, }, + /* T^2 */ { 194, 468, 785, }, + /* T^3 */ { 271, 504, 903, }, + /* T^4 */ { 341, 526, 1001, }, + /* T^5 */ { 383, 538, 1047, }, + /* end */ { 392, 542, 1056, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_mars[][3] = { + /* mars l, T^0 */ + { 620347711.6, 0, 0 }, + { 18656368.1, 5.050371003, 3340.612426700 }, + { 1108216.8, 5.40099837, 6681.22485340 }, + { 91798.4, 5.754787, 10021.837280 }, + { 27745.0, 5.970495, 3.523118 }, + { 10610.2, 2.939585, 2281.230497 }, + { 12315.9, 0.849561, 2810.921462 }, + { 8926.8, 4.15698, 0.01725 }, + { 8715.7, 6.11005, 13362.44971 }, + { 6797.6, 0.36462, 398.14900 }, + { 7774.9, 3.33969, 5621.84292 }, + { 3575.1, 1.66187, 2544.31442 }, + { 4161.1, 0.22815, 2942.46342 }, + { 3075.2, 0.85697, 191.44827 }, + { 2628.1, 0.64806, 3337.08931 }, + { 2937.5, 6.07894, 0.06731 }, + { 2389.4, 5.03896, 796.29801 }, + { 2579.8, 0.02997, 3344.13555 }, + { 1528.1, 1.14979, 6151.53389 }, + { 1798.8, 0.65634, 529.69097 }, + { 1264.4, 3.62275, 5092.15196 }, + { 1286.2, 3.06796, 2146.16542 }, + { 1546.4, 2.91580, 1751.53953 }, + { 1024.9, 3.69334, 8962.45535 }, + { 891.6, 0.1829, 16703.0621 }, + { 858.8, 2.4009, 2914.0142 }, + { 832.7, 2.4642, 3340.5952 }, + { 832.7, 4.4950, 3340.6297 }, + { 712.9, 3.6634, 1059.3819 }, + { 748.7, 3.8225, 155.4204 }, + { 723.9, 0.6750, 3738.7614 }, + { 635.6, 2.9218, 8432.7644 }, + { 655.2, 0.4886, 3127.3133 }, + { 550.5, 3.8100, 0.9803 }, + { 552.7, 4.4748, 1748.0164 }, + { 426.0, 0.5537, 6283.0758 }, + { 415.1, 0.4966, 213.2991 }, + { 472.2, 3.6255, 1194.4470 }, + { 306.6, 0.3805, 6684.7480 }, + { 312.1, 0.9985, 6677.7017 }, + { 293.2, 4.2213, 20.7754 }, + { 302.4, 4.4862, 3532.0607 }, + { 274.0, 0.5422, 3340.5451 }, + { 281.1, 5.8816, 1349.8674 }, + { 231.2, 1.2824, 3870.3034 }, + { 283.6, 5.7689, 3149.1642 }, + { 236.1, 5.7550, 3333.4989 }, + { 274.0, 0.1337, 3340.6797 }, + { 299.4, 2.7832, 6254.6267 }, + { 204.2, 2.8213, 1221.8486 }, + { 238.9, 5.3716, 4136.9104 }, + { 188.6, 1.4910, 9492.1463 }, + { 221.2, 3.5047, 382.8965 }, + { 179.2, 1.0056, 951.7184 }, + { 172.1, 0.4394, 5486.7778 }, + { 193.1, 3.3572, 3.5904 }, + { 144.3, 1.4187, 135.0651 }, + { 160.0, 3.9485, 4562.4610 }, + { 174.1, 2.4136, 553.5694 }, + { 131.0, 4.0449, 12303.0678 }, + { 138.2, 4.3015, 7.1135 }, + { 128.1, 1.8067, 5088.6288 }, + { 139.9, 3.3259, 2700.7151 }, + { 128.1, 2.2081, 1592.5960 }, + { 116.9, 3.1281, 7903.0734 }, + { 110.4, 1.0520, 242.7286 }, + { 113.5, 3.7007, 1589.0729 }, + { 100.1, 3.2434, 11773.3768 }, + { 95.6, 0.540, 20043.675 }, + { 98.9, 4.846, 6681.242 }, + { 104.5, 0.7854, 8827.3903 }, + { 84.2, 3.990, 4399.994 }, + { 86.9, 2.202, 11243.686 }, + { 71.4, 2.803, 3185.192 }, + { 72.1, 5.847, 5884.927 }, + { 73.5, 2.184, 8429.241 }, + { 98.9, 2.815, 6681.208 }, + { 68.4, 2.738, 2288.344 }, + { 86.8, 1.021, 7079.374 }, + { 65.3, 2.681, 28.449 }, + { 83.7, 3.203, 4690.480 }, + { 75.0, 0.766, 6467.926 }, + { 69.0, 3.764, 6041.328 }, + { 66.7, 0.736, 3723.509 }, + { 63.3, 4.528, 426.598 }, + { 61.7, 6.168, 2274.117 }, + { 52.3, 0.899, 9623.688 }, + { 55.5, 4.606, 4292.331 }, + { 51.3, 4.148, 3341.593 }, + { 56.6, 5.063, 15.252 }, + { 63.4, 0.913, 3553.912 }, + { 45.8, 0.788, 1990.745 }, + { 48.5, 3.957, 4535.059 }, + { 41.2, 6.020, 3894.182 }, + { 41.9, 3.583, 8031.092 }, + { 56.4, 1.687, 6872.673 }, + { 55.9, 3.463, 263.084 }, + { 51.7, 2.813, 3339.632 }, + { 40.7, 3.138, 9595.239 }, + { 38.1, 0.734, 10025.360 }, + { 39.5, 5.632, 3097.884 }, + { 44.2, 3.195, 5628.956 }, + { 36.7, 2.637, 692.158 }, + { 45.9, 0.287, 5614.729 }, + { 38.4, 5.829, 3191.049 }, + { 38.2, 2.348, 162.467 }, + { 32.6, 0.484, 6681.292 }, + { 37.1, 0.685, 2818.035 }, + { 31.2, 3.982, 20.355 }, + { 32.6, 0.893, 6681.158 }, + { 37.8, 4.155, 2803.808 }, + { 33.6, 6.120, 6489.777 }, + { 29.0, 2.427, 3319.837 }, + { 38.8, 1.352, 10018.314 }, + { 33.1, 1.140, 5.523 }, + { 27.6, 1.597, 7210.916 }, + { 28.7, 5.721, 7477.523 }, + { 34.0, 2.595, 11769.854 }, + { 25.4, 0.521, 10.637 }, + { 26.4, 1.345, 3496.033 }, + { 25.6, 0.250, 522.577 }, + { 27.3, 4.556, 3361.388 }, + { 27.5, 6.084, 6674.111 }, + { 25.5, 3.432, 3443.705 }, + /* 124 terms retained, 1093 terms dropped, error 1.2" */ + + /* mars l, T^1 */ + { 334085627474.3, 0, 0 }, + { 1458227.1, 3.60426054, 3340.61242670 }, + { 164901.3, 3.9263125, 6681.2248534 }, + { 19963.3, 4.265941, 10021.837280 }, + { 3452.4, 4.73210, 3.52312 }, + { 2485.5, 4.61278, 13362.44971 }, + { 841.6, 4.4586, 2281.2305 }, + { 537.6, 5.0159, 398.1490 }, + { 521.0, 4.9942, 3344.1355 }, + { 432.6, 2.5607, 191.4483 }, + { 429.7, 5.3165, 155.4204 }, + { 381.7, 3.5388, 796.2980 }, + { 314.1, 4.9634, 16703.0621 }, + { 282.8, 3.1597, 2544.3144 }, + { 205.7, 4.5689, 2146.1654 }, + { 168.8, 1.3289, 3337.0893 }, + { 157.6, 4.1850, 1751.5395 }, + { 133.7, 2.2333, 0.9803 }, + { 116.6, 2.2135, 1059.3819 }, + { 117.6, 6.0241, 6151.5339 }, + { 113.6, 5.4280, 3738.7614 }, + { 133.6, 5.9742, 1748.0164 }, + { 91.1, 1.096, 1349.867 }, + { 83.3, 5.296, 6684.748 }, + { 113.9, 2.1287, 1194.4470 }, + { 80.8, 4.428, 529.691 }, + { 79.5, 2.249, 8962.455 }, + { 72.5, 5.842, 242.729 }, + { 72.9, 2.502, 951.718 }, + { 71.5, 3.856, 2914.014 }, + { 85.3, 3.909, 553.569 }, + { 67.6, 5.023, 382.897 }, + { 65.1, 1.018, 3340.595 }, + { 65.1, 3.049, 3340.630 }, + { 61.5, 4.152, 3149.164 }, + { 48.5, 4.874, 213.299 }, + { 46.6, 1.315, 3185.192 }, + { 56.5, 3.888, 4136.910 }, + { 47.6, 1.182, 3333.499 }, + { 41.3, 0.714, 1592.596 }, + { 40.1, 5.316, 20043.675 }, + { 40.3, 2.725, 7.114 }, + { 32.9, 5.411, 6283.076 }, + { 28.2, 0.045, 9492.146 }, + { 22.3, 5.885, 3870.303 }, + { 22.4, 5.466, 20.355 }, + { 22.6, 0.838, 3097.884 }, + { 21.4, 5.379, 3340.545 }, + { 23.3, 6.168, 3532.061 }, + { 26.6, 3.890, 1221.849 }, + { 22.8, 1.545, 2274.117 }, + { 20.4, 2.364, 1589.073 }, + { 20.2, 3.364, 5088.629 }, + { 26.6, 5.113, 2700.715 }, + { 19.7, 2.578, 12303.068 }, + { 19.5, 0.492, 6677.702 }, + { 21.1, 3.525, 15.252 }, + { 21.4, 4.971, 3340.680 }, + { 18.5, 5.579, 1990.745 }, + { 17.8, 6.125, 4292.331 }, + { 16.5, 2.603, 3341.593 }, + { 16.6, 1.255, 3894.182 }, + { 19.5, 2.531, 4399.994 }, + { 15.0, 1.035, 2288.344 }, + { 20.0, 4.731, 4690.480 }, + { 15.4, 2.470, 4535.059 }, + { 20.0, 5.787, 7079.374 }, + { 15.3, 2.265, 3723.509 }, + { 14.7, 3.370, 6681.242 }, + { 13.5, 2.123, 5486.778 }, + { 12.9, 5.619, 10025.360 }, + { 12.7, 2.950, 3496.033 }, + { 13.6, 1.977, 5614.729 }, + { 13.0, 1.514, 5628.956 }, + { 14.7, 1.339, 6681.208 }, + { 11.4, 6.234, 135.065 }, + { 13.3, 3.422, 5621.843 }, + { 10.9, 5.282, 2818.035 }, + { 11.8, 3.127, 426.598 }, + { 10.5, 2.736, 2787.043 }, + { 11.1, 5.842, 2803.808 }, + { 11.8, 2.586, 8432.764 }, + { 11.9, 5.476, 3553.912 }, + { 8.5, 1.91, 11773.38 }, + { 9.7, 4.53, 6489.78 }, + { 8.6, 3.16, 162.47 }, + { 11.0, 4.158, 2388.894 }, + { 8.1, 1.61, 2957.72 }, + { 8.8, 4.23, 7477.52 }, + { 8.0, 5.70, 6041.33 }, + { 8.3, 2.18, 23.88 }, + { 7.7, 5.72, 9623.69 }, + { 8.7, 4.44, 5092.15 }, + { 8.4, 3.16, 3347.73 }, + { 6.7, 5.08, 8031.09 }, + { 8.7, 4.33, 3339.63 }, + { 7.4, 6.18, 3583.34 }, + { 6.4, 2.12, 5884.93 }, + /* 98 terms retained, 588 terms dropped, error 0.26"*T */ + + /* mars l, T^2 */ + { 58015.8, 2.049795, 3340.612427 }, + { 54187.6, 0, 0 }, + { 13908.4, 2.457424, 6681.224853 }, + { 2465.1, 2.80000, 10021.83728 }, + { 398.4, 3.1412, 13362.4497 }, + { 222.0, 3.1944, 3.5231 }, + { 121.0, 0.5433, 155.4204 }, + { 61.5, 3.485, 16703.062 }, + { 53.6, 3.542, 3344.136 }, + { 34.3, 6.002, 2281.230 }, + { 31.7, 4.140, 191.448 }, + { 29.8, 1.999, 796.298 }, + { 23.2, 4.334, 242.729 }, + { 21.7, 3.445, 398.149 }, + { 16.0, 6.110, 2146.165 }, + { 20.4, 5.422, 553.569 }, + { 14.9, 6.095, 3185.192 }, + { 16.2, 0.657, 0.980 }, + { 14.3, 2.619, 1349.867 }, + { 14.4, 4.019, 951.718 }, + { 11.9, 3.861, 6684.748 }, + { 15.6, 1.221, 1748.016 }, + { 11.3, 4.718, 2544.314 }, + { 13.4, 0.602, 1194.447 }, + { 10.4, 0.250, 382.897 }, + { 9.5, 0.68, 1059.38 }, + { 9.2, 3.83, 20043.67 }, + { 9.0, 3.88, 3738.76 }, + { 7.5, 5.46, 1751.54 }, + { 6.5, 5.48, 1592.60 }, + { 6.3, 2.34, 3097.88 }, + { 6.9, 2.58, 3149.16 }, + { 5.9, 1.15, 7.11 }, + { 6.7, 2.38, 4136.91 }, + { 4.6, 4.43, 6151.53 }, + { 4.2, 3.69, 5614.73 }, + { 4.8, 2.90, 3333.50 }, + { 4.0, 6.12, 5628.96 }, + { 3.7, 4.07, 1990.75 }, + { 3.6, 2.47, 529.69 }, + { 3.3, 0.68, 8962.46 }, + { 3.3, 2.80, 3894.18 }, + { 3.1, 4.57, 3496.03 }, + { 2.9, 5.41, 2914.01 }, + { 2.9, 1.23, 2787.04 }, + { 2.8, 1.39, 4292.33 }, + { 2.6, 1.04, 3341.59 }, + { 2.9, 3.41, 3337.09 }, + { 2.4, 0.96, 4535.06 }, + { 2.4, 4.85, 9492.15 }, + { 2.6, 5.75, 3340.60 }, + { 2.2, 3.26, 213.30 }, + { 2.6, 1.50, 3340.63 }, + { 2.3, 4.18, 10025.36 }, + { 2.6, 4.68, 3583.34 }, + { 2.6, 2.65, 2388.89 }, + { 1.8, 0.97, 1589.07 }, + { 2.4, 1.05, 4399.99 }, + { 2.4, 4.27, 7079.37 }, + { 2.2, 0.16, 6525.80 }, + { 2.3, 0.01, 4690.48 }, + { 1.6, 4.96, 5088.63 }, + { 1.6, 1.11, 12303.07 }, + { 2.1, 0.48, 2700.72 }, + { 1.6, 4.94, 1221.85 }, + { 1.8, 3.81, 3723.51 }, + { 1.8, 2.52, 2810.92 }, + /* 67 terms retained, 243 terms dropped, error 0.06"*T^2 */ + + /* mars l, T^3 */ + { 1482.4, 0.44435, 3340.61243 }, + { 662.1, 0.8847, 6681.2249 }, + { 188.3, 1.2880, 10021.8373 }, + { 41.5, 1.649, 13362.450 }, + { 22.7, 2.053, 155.420 }, + { 26.0, 0, 0 }, + { 8.0, 2.00, 16703.06 }, + { 10.5, 1.580, 3.523 }, + { 4.9, 2.82, 242.73 }, + { 3.8, 2.02, 3344.14 }, + { 3.2, 4.59, 3185.19 }, + { 3.1, 0.65, 553.57 }, + { 1.7, 5.54, 951.72 }, + { 1.5, 5.72, 191.45 }, + { 1.4, 0.46, 796.30 }, + { 1.4, 2.34, 20043.67 }, + { 1.3, 5.36, 0.98 }, + { 1.2, 4.15, 1349.87 }, + { 1.1, 2.38, 6684.75 }, + { 1.0, 1.77, 382.90 }, + { 0.9, 5.34, 1194.45 }, + { 0.8, 2.75, 1748.02 }, + { 0.6, 6.11, 3496.03 }, + { 0.6, 1.85, 398.15 }, + { 0.6, 5.86, 7.11 }, + { 0.6, 3.18, 3583.34 }, + { 0.5, 5.98, 2787.04 }, + { 0.5, 1.01, 3149.16 }, + { 0.5, 4.93, 6525.80 }, + { 0.4, 1.27, 2281.23 }, + { 0.4, 2.33, 3738.76 }, + { 0.5, 0.84, 4136.91 }, + /* 32 terms retained, 97 terms dropped, error 0.011"*T^3 */ + + /* mars l, T^4 */ + { 114.0, 3.1416, 0 }, + { 28.7, 5.637, 6681.225 }, + { 24.4, 5.139, 3340.612 }, + { 11.2, 6.032, 10021.837 }, + { 3.2, 3.56, 155.42 }, + { 3.3, 0.13, 13362.45 }, + { 0.8, 0.49, 16703.06 }, + { 0.8, 1.32, 242.73 }, + { 0.5, 3.06, 3185.19 }, + { 0.4, 2.16, 553.57 }, + { 0.3, 6.23, 3.52 }, + { 0.2, 0.44, 3344.14 }, + { 0.2, 0.82, 20043.67 }, + { 0.2, 3.74, 3496.03 }, + { 0.1, 1.67, 3583.34 }, + /* 15 terms retained, 21 terms dropped, error 0.0019"*T^4 */ + + /* mars l, T^5 */ + { 0.7, 4.04, 6681.22 }, + { 0.9, 3.14, 0 }, + { 0.5, 4.49, 10021.84 }, + { 0.4, 5.07, 155.42 }, + { 0.2, 3.51, 3340.61 }, + { 0.2, 4.85, 13362.45 }, + { 0.1, 6.09, 242.73 }, + /* 7 terms retained, 8 terms dropped, error 0.0012"*T^5 */ + /* end mars l */ + + /* mars b, T^0 */ + { 3197135.0, 3.76832042, 3340.61242670 }, + { 298033.2, 4.1061700, 6681.2248534 }, + { 289104.7, 0, 0 }, + { 31365.5, 4.446511, 10021.837280 }, + { 3484.1, 4.78813, 13362.44971 }, + { 443.0, 5.6523, 3337.0893 }, + { 443.4, 5.0264, 3344.1355 }, + { 399.1, 5.1306, 16703.0621 }, + { 292.5, 3.7929, 2281.2305 }, + { 182.0, 6.1365, 6151.5339 }, + { 163.2, 4.2640, 529.6910 }, + { 159.7, 2.2319, 1059.3819 }, + { 139.3, 2.4180, 8962.4553 }, + { 149.3, 2.1650, 5621.8429 }, + { 142.7, 1.1822, 3340.5952 }, + { 142.7, 3.2129, 3340.6297 }, + { 82.5, 5.367, 6684.748 }, + { 73.6, 5.092, 398.149 }, + { 72.7, 5.538, 6283.076 }, + { 86.4, 5.744, 3738.761 }, + { 83.3, 5.989, 6677.702 }, + { 60.1, 3.680, 796.298 }, + { 63.1, 0.730, 5884.927 }, + { 62.3, 4.851, 2942.463 }, + { 47.0, 5.543, 3340.545 }, + { 47.0, 5.135, 3340.680 }, + { 46.6, 5.474, 20043.675 }, + { 45.6, 2.133, 2810.921 }, + { 41.3, 0.200, 9492.146 }, + { 47.2, 4.522, 3149.164 }, + { 38.5, 4.080, 4136.910 }, + { 33.1, 4.066, 1751.540 }, + { 29.7, 5.922, 3532.061 }, + { 32.7, 2.621, 2914.014 }, + { 29.5, 2.753, 12303.068 }, + { 28.2, 2.063, 5486.778 }, + { 28.6, 4.947, 3870.303 }, + { 26.6, 3.551, 6681.242 }, + { 26.6, 1.520, 6681.208 }, + { 26.1, 2.601, 4399.994 }, + /* 40 terms retained, 401 terms dropped, error 0.69" */ + + /* mars b, T^1 */ + { 350068.8, 5.3684784, 3340.6124267 }, + { 14116.0, 3.141593, 0 }, + { 9670.8, 5.47878, 6681.22485 }, + { 1471.9, 3.20206, 10021.83728 }, + { 425.9, 3.4084, 13362.4497 }, + { 102.0, 0.7762, 3337.0893 }, + { 78.8, 3.718, 16703.062 }, + { 26.2, 2.483, 2281.230 }, + { 32.7, 3.458, 5621.843 }, + { 20.7, 1.441, 6151.534 }, + { 18.3, 6.031, 529.691 }, + { 15.7, 3.931, 8962.455 }, + { 17.0, 4.811, 3344.136 }, + { 13.1, 0.973, 6677.702 }, + { 15.6, 2.782, 3340.595 }, + { 15.6, 4.813, 3340.630 }, + { 13.8, 1.680, 3532.061 }, + { 12.7, 4.045, 20043.675 }, + { 14.3, 0.246, 2942.463 }, + { 12.5, 2.256, 5884.927 }, + { 8.8, 0.34, 398.15 }, + { 8.6, 1.75, 2544.31 }, + { 8.9, 5.95, 2810.92 }, + { 8.1, 0.84, 6283.08 }, + { 9.2, 4.35, 3496.03 }, + { 8.1, 4.30, 6684.75 }, + /* 26 terms retained, 261 terms dropped, error 0.17"*T */ + + /* mars b, T^2 */ + { 16726.7, 0.602214, 3340.612427 }, + { 4986.8, 3.14159, 0 }, + { 302.1, 5.5587, 6681.2249 }, + { 25.8, 1.897, 13362.450 }, + { 21.5, 0.917, 10021.837 }, + { 11.8, 2.242, 3337.089 }, + { 8.0, 2.25, 16703.06 }, + { 3.0, 5.89, 3496.03 }, + { 2.4, 5.19, 5621.84 }, + { 1.8, 2.59, 20043.67 }, + /* 10 terms retained, 120 terms dropped, error 0.024"*T^2 */ + + /* mars b, T^3 */ + { 606.5, 1.9805, 3340.6124 }, + { 42.6, 0, 0 }, + { 13.7, 1.796, 6681.225 }, + { 2.7, 3.45, 10021.84 }, + { 0.9, 3.75, 3337.09 }, + { 0.6, 0.11, 13362.45 }, + { 0.6, 1.14, 3496.03 }, + { 0.5, 0.71, 16703.06 }, + /* 8 terms retained, 33 terms dropped, error 0.0059"*T^3 */ + + /* mars b, T^4 */ + { 11.3, 3.457, 3340.612 }, + { 13.4, 0, 0 }, + { 0.7, 0.50, 6681.22 }, + { 0.1, 1.05, 10021.84 }, + { 0.1, 2.66, 3496.03 }, + /* 5 terms retained, 6 terms dropped, error 0.001"*T^4 */ + + /* mars b, T^5 */ + { 0.5, 4.87, 3340.61 }, + /* 1 terms retained, 4 terms dropped, error 0.0027"*T^5 */ + /* end mars b */ + + /* mars r, T^0 */ + { 153033488.3, 0, 0 }, + { 14184953.2, 3.479712835, 3340.612426700 }, + { 660776.4, 3.8178344, 6681.2248534 }, + { 46179.1, 4.155953, 10021.837280 }, + { 8109.7, 5.55958, 2810.92146 }, + { 7485.3, 1.77239, 5621.84292 }, + { 5523.2, 1.36436, 2281.23050 }, + { 3825.2, 4.49407, 13362.44971 }, + { 2306.5, 0.09082, 2544.31442 }, + { 1999.4, 5.36060, 3337.08931 }, + { 2484.4, 4.92546, 2942.46342 }, + { 1960.2, 4.74249, 3344.13555 }, + { 1167.1, 2.11262, 5092.15196 }, + { 1102.8, 5.00908, 398.14900 }, + { 899.1, 4.4079, 529.6910 }, + { 992.3, 5.8386, 6151.5339 }, + { 807.3, 2.1022, 1059.3819 }, + { 797.9, 3.4484, 796.2980 }, + { 741.0, 1.4991, 2146.1654 }, + { 692.3, 2.1338, 8962.4553 }, + { 633.1, 0.8935, 3340.5952 }, + { 725.6, 1.2452, 8432.7644 }, + { 633.1, 2.9243, 3340.6297 }, + { 574.4, 0.8290, 2914.0142 }, + { 526.2, 5.3829, 3738.7614 }, + { 630.0, 1.2874, 1751.5395 }, + { 472.8, 5.1985, 3127.3133 }, + { 348.1, 4.8322, 16703.0621 }, + { 283.7, 2.9069, 3532.0607 }, + { 279.6, 5.2575, 6283.0758 }, + { 233.8, 5.1055, 5486.7778 }, + { 219.4, 5.5834, 191.4483 }, + { 269.9, 3.7639, 5884.9268 }, + { 208.3, 5.2548, 3340.5451 }, + { 275.2, 2.9082, 1748.0164 }, + { 275.5, 1.2177, 6254.6267 }, + { 239.1, 2.0367, 1194.4470 }, + { 223.2, 4.1986, 3149.1642 }, + { 182.7, 5.0806, 6684.7480 }, + { 186.2, 5.6987, 6677.7017 }, + { 176.0, 5.9534, 3870.3034 }, + { 178.6, 4.1842, 3333.4989 }, + { 208.3, 4.8463, 3340.6797 }, + { 228.1, 3.2553, 6872.6731 }, + { 144.3, 0.2130, 5088.6288 }, + { 163.5, 3.7989, 4136.9104 }, + { 133.1, 1.5391, 7903.0734 }, + { 141.8, 2.4779, 4562.4610 }, + { 114.9, 4.3175, 1349.8674 }, + { 118.8, 2.1218, 1589.0729 }, + { 102.1, 6.1814, 9492.1463 }, + { 128.6, 5.4988, 8827.3903 }, + { 111.5, 0.5534, 11243.6858 }, + { 82.5, 1.622, 11773.377 }, + { 83.2, 0.616, 8429.241 }, + { 84.5, 0.623, 1592.596 }, + { 86.7, 1.750, 2700.715 }, + { 71.8, 2.475, 12303.068 }, + { 85.3, 1.616, 4690.480 }, + { 63.6, 2.673, 426.598 }, + { 68.6, 2.402, 4399.994 }, + { 58.6, 4.721, 213.299 }, + { 62.0, 1.101, 1221.849 }, + { 66.5, 2.213, 6041.328 }, + { 55.8, 1.233, 3185.192 }, + { 55.0, 5.727, 951.718 }, + { 52.4, 3.024, 4292.331 }, + { 55.7, 5.447, 3723.509 }, + { 59.0, 3.262, 6681.242 }, + { 44.6, 2.015, 8031.092 }, + { 59.0, 1.232, 6681.208 }, + { 42.4, 2.266, 155.420 }, + { 39.0, 2.578, 3341.593 }, + { 51.6, 5.723, 7079.374 }, + { 48.9, 5.616, 3553.912 }, + { 45.4, 5.433, 6467.926 }, + { 36.4, 4.439, 3894.182 }, + { 36.0, 1.160, 2288.344 }, + { 35.3, 5.490, 1990.745 }, + { 42.2, 1.633, 5628.956 }, + { 44.3, 5.003, 5614.729 }, + { 33.6, 5.170, 20043.675 }, + { 43.3, 1.037, 11769.854 }, + { 39.2, 1.242, 3339.632 }, + { 31.9, 4.593, 2274.117 }, + { 30.3, 2.442, 11371.705 }, + { 32.3, 2.382, 4535.059 }, + { 31.9, 4.375, 3.523 }, + { 29.3, 4.060, 3097.884 }, + { 32.0, 1.940, 382.897 }, + { 26.2, 5.585, 9623.688 }, + { 27.9, 4.258, 3191.049 }, + { 33.1, 0.855, 553.569 }, + { 27.5, 1.577, 9595.239 }, + { 25.2, 0.814, 10713.995 }, + /* 95 terms retained, 1023 terms dropped, error 4.9e-06 a.u. */ + + /* mars r, T^1 */ + { 1107433.3, 2.03250525, 3340.61242670 }, + { 103175.9, 2.3707185, 6681.2248534 }, + { 12877.2, 0, 0 }, + { 10815.9, 2.708881, 10021.837280 }, + { 1194.5, 3.04702, 13362.44971 }, + { 438.6, 2.8884, 2281.2305 }, + { 395.7, 3.4232, 3344.1355 }, + { 182.6, 1.5843, 2544.3144 }, + { 135.8, 3.3851, 16703.0621 }, + { 128.2, 0.6299, 1059.3819 }, + { 127.1, 1.9539, 796.2980 }, + { 118.4, 2.9976, 2146.1654 }, + { 128.4, 6.0434, 3337.0893 }, + { 87.5, 3.421, 398.149 }, + { 83.0, 3.856, 3738.761 }, + { 75.6, 4.451, 6151.534 }, + { 72.0, 2.764, 529.691 }, + { 66.5, 2.549, 1751.540 }, + { 54.3, 0.678, 8962.455 }, + { 51.0, 3.726, 6684.748 }, + { 66.4, 4.406, 1748.016 }, + { 47.9, 2.285, 2914.014 }, + { 49.4, 5.730, 3340.595 }, + { 49.4, 1.477, 3340.630 }, + { 57.5, 0.544, 1194.447 }, + { 48.3, 2.581, 3149.164 }, + { 36.4, 6.027, 3185.192 }, + { 37.2, 5.814, 1349.867 }, + { 36.0, 5.895, 3333.499 }, + { 31.1, 0.978, 191.448 }, + { 39.0, 2.319, 4136.910 }, + { 27.2, 5.414, 1592.596 }, + { 24.3, 3.758, 155.420 }, + { 22.8, 1.748, 5088.629 }, + { 22.3, 0.939, 951.718 }, + { 21.7, 3.836, 6283.076 }, + { 21.3, 0.780, 1589.073 }, + { 21.6, 4.569, 3532.061 }, + { 18.0, 4.219, 3870.303 }, + { 18.2, 0.413, 5486.778 }, + { 16.3, 3.808, 3340.545 }, + { 16.8, 5.549, 3097.884 }, + { 16.9, 4.537, 4292.331 }, + { 15.8, 4.757, 9492.146 }, + { 15.7, 3.724, 20043.675 }, + { 20.4, 3.135, 4690.480 }, + { 14.7, 5.953, 3894.182 }, + { 16.3, 3.399, 3340.680 }, + { 14.3, 3.999, 1990.745 }, + { 16.5, 0.968, 4399.994 }, + { 13.0, 5.142, 6677.702 }, + { 12.5, 1.032, 3341.593 }, + { 16.5, 3.539, 2700.715 }, + { 16.2, 2.349, 553.569 }, + { 13.2, 0.415, 5614.729 }, + { 11.3, 1.024, 12303.068 }, + { 12.4, 6.231, 5628.956 }, + { 12.7, 0.690, 3723.509 }, + { 11.8, 6.253, 2274.117 }, + { 10.4, 1.233, 426.598 }, + { 11.2, 1.318, 3496.033 }, + { 10.3, 0.901, 4535.059 }, + { 12.2, 4.223, 7079.374 }, + { 9.8, 3.45, 382.90 }, + { 8.6, 1.16, 2787.04 }, + { 7.9, 5.74, 2288.34 }, + { 9.2, 1.82, 6681.24 }, + { 7.8, 4.15, 6041.33 }, + { 9.2, 6.07, 6681.21 }, + { 9.0, 2.58, 2388.89 }, + { 6.8, 0.24, 11773.38 }, + { 7.1, 3.51, 8031.09 }, + { 9.2, 3.90, 3553.91 }, + { 6.7, 4.26, 242.73 }, + { 7.2, 3.70, 2818.04 }, + { 6.5, 0.04, 2957.72 }, + { 8.8, 2.20, 1221.85 }, + { 6.5, 2.12, 8429.24 }, + { 6.8, 4.05, 10025.36 }, + { 7.3, 4.27, 2803.81 }, + { 7.7, 1.01, 8432.76 }, + { 6.3, 1.90, 5621.84 }, + { 6.3, 1.60, 3347.73 }, + { 6.5, 2.76, 3339.63 }, + /* 84 terms retained, 512 terms dropped, error 1.2e-06 a.u.*T */ + + /* mars r, T^2 */ + { 44242.2, 0.479306, 3340.612427 }, + { 8138.0, 0.86998, 6681.22485 }, + { 1274.9, 1.22594, 10021.83728 }, + { 187.4, 1.5730, 13362.4497 }, + { 40.7, 1.971, 3344.136 }, + { 52.4, 3.142, 0 }, + { 26.6, 1.917, 16703.062 }, + { 17.8, 4.435, 2281.230 }, + { 11.7, 4.525, 3185.192 }, + { 10.2, 5.391, 1059.382 }, + { 9.9, 0.42, 796.30 }, + { 9.2, 4.54, 2146.17 }, + { 7.3, 3.14, 2544.31 }, + { 7.2, 2.29, 6684.75 }, + { 6.8, 5.27, 155.42 }, + { 6.5, 2.31, 3738.76 }, + { 7.8, 5.93, 1748.02 }, + { 5.8, 1.05, 1349.87 }, + { 6.7, 5.30, 1194.45 }, + { 4.7, 0.77, 3097.88 }, + { 5.4, 1.00, 3149.16 }, + { 4.4, 2.46, 951.72 }, + { 4.3, 3.90, 1592.60 }, + { 3.5, 1.85, 398.15 }, + { 3.7, 2.26, 20043.67 }, + { 3.4, 3.82, 1751.54 }, + { 4.6, 0.81, 4136.91 }, + { 3.2, 2.12, 5614.73 }, + { 3.6, 1.32, 3333.50 }, + { 2.9, 1.19, 529.69 }, + { 3.0, 2.86, 6151.53 }, + { 3.1, 4.55, 5628.96 }, + { 2.9, 1.20, 3894.18 }, + { 3.9, 3.86, 553.57 }, + { 2.8, 2.49, 1990.75 }, + { 2.7, 6.07, 4292.33 }, + { 2.7, 2.92, 3496.03 }, + { 2.4, 5.94, 2787.04 }, + { 2.3, 2.56, 191.45 }, + { 2.2, 5.37, 8962.46 }, + { 2.1, 2.75, 242.73 }, + { 2.2, 1.85, 3337.09 }, + { 2.0, 5.76, 3341.59 }, + { 2.0, 3.82, 2914.01 }, + { 1.8, 5.69, 1589.07 }, + { 1.8, 3.32, 5088.63 }, + { 2.4, 4.68, 4690.48 }, + { 2.0, 4.17, 3340.60 }, + { 2.0, 6.21, 3340.63 }, + { 1.6, 5.68, 4535.06 }, + { 2.2, 1.07, 2388.89 }, + { 2.0, 3.11, 3583.34 }, + { 2.0, 5.76, 4399.99 }, + /* 53 terms retained, 260 terms dropped, error 2.9e-07 a.u.*T^2 */ + + /* mars r, T^3 */ + { 1113.1, 5.14987, 3340.61243 }, + { 424.4, 5.6134, 6681.2249 }, + { 100.0, 5.9973, 10021.8373 }, + { 19.6, 0.076, 13362.450 }, + { 3.5, 0.43, 16703.06 }, + { 4.7, 3.14, 0 }, + { 2.9, 0.45, 3344.14 }, + { 2.4, 3.02, 3185.19 }, + { 0.7, 0.81, 6684.75 }, + { 0.5, 3.87, 1059.38 }, + { 0.6, 0.78, 20043.67 }, + { 0.5, 4.52, 3496.03 }, + { 0.5, 1.61, 3583.34 }, + { 0.4, 5.72, 3149.16 }, + /* 14 terms retained, 97 terms dropped, error 3.1e-08 a.u.*T^3 */ + + /* mars r, T^4 */ + { 19.6, 3.582, 3340.612 }, + { 16.3, 4.051, 6681.225 }, + { 5.8, 4.46, 10021.84 }, + { 1.5, 4.84, 13362.45 }, + { 0.4, 1.51, 3185.19 }, + { 0.3, 5.21, 16703.06 }, + { 0.2, 5.16, 3344.14 }, + { 0.1, 2.19, 3496.03 }, + { 0.1, 0, 0 }, + /* 9 terms retained, 19 terms dropped, error 9.4e-09 a.u.*T^4 */ + + /* mars r, T^5 */ + { 0.5, 2.48, 6681.22 }, + { 0.3, 2.92, 10021.84 }, + { 0.1, 1.77, 3340.61 }, + /* 3 terms retained, 6 terms dropped, error 4.6e-09 a.u.*T^5 */ + /* end mars */ +}; + +int vn_mars[][3] = { + /* addresses for mars l, b, r */ + /* T^0 */ { 0, 343, 433, }, + /* T^1 */ { 124, 383, 528, }, + /* T^2 */ { 222, 409, 612, }, + /* T^3 */ { 289, 419, 665, }, + /* T^4 */ { 321, 427, 679, }, + /* T^5 */ { 336, 432, 688, }, + /* end */ { 343, 433, 691, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_mercury[][3] = { + /* mercury l, T^0 */ + { 440250710.1, 0, 0 }, + { 40989415.0, 1.483020342, 26087.903141574 }, + { 5046294.2, 4.47785490, 52175.80628315 }, + { 855346.8, 1.1652032, 78263.7094247 }, + { 165590.4, 4.1196916, 104351.6125663 }, + { 34561.9, 0.779308, 130439.515708 }, + { 7583.5, 3.71348, 156527.41885 }, + { 3559.7, 1.51203, 1109.37855 }, + { 1726.0, 0.35832, 182615.32199 }, + { 1803.5, 4.10333, 5661.33205 }, + { 1364.7, 4.59918, 27197.28169 }, + { 1589.9, 2.99510, 25028.52121 }, + { 1017.3, 0.88031, 31749.23519 }, + { 714.2, 1.5414, 24978.5246 }, + { 643.8, 5.3027, 21535.9496 }, + { 404.2, 3.2823, 208703.2251 }, + { 352.4, 5.2416, 20426.5711 }, + { 343.3, 5.7653, 955.5997 }, + { 339.2, 5.8633, 25558.2122 }, + { 451.1, 6.0499, 51116.4244 }, + { 325.3, 1.3367, 53285.1848 }, + { 259.6, 0.9873, 4551.9535 }, + { 345.2, 2.7921, 15874.6176 }, + { 272.9, 2.4945, 529.6910 }, + { 234.8, 0.2667, 11322.6641 }, + { 238.8, 0.1134, 1059.3819 }, + { 264.3, 3.9171, 57837.1383 }, + { 216.6, 0.6599, 13521.7514 }, + { 183.4, 2.6288, 27043.5029 }, + { 176.0, 4.5364, 51066.4277 }, + { 181.6, 2.4341, 25661.3050 }, + { 209.0, 2.0918, 47623.8528 }, + { 172.6, 2.4520, 24498.8302 }, + { 142.3, 3.3600, 37410.5672 }, + { 137.9, 0.2910, 10213.2855 }, + { 118.2, 2.7815, 77204.3275 }, + { 96.9, 6.204, 234791.128 }, + { 125.2, 3.7208, 39609.6546 }, + { 86.8, 2.642, 51646.115 }, + { 86.7, 1.960, 46514.474 }, + { 88.3, 5.413, 26617.594 }, + { 106.4, 4.2057, 19804.8273 }, + { 90.0, 5.852, 41962.521 }, + { 85.0, 4.331, 79373.088 }, + { 69.2, 4.194, 19.670 }, + { 63.5, 3.147, 7238.676 }, + { 68.5, 0.634, 83925.041 }, + { 69.7, 3.572, 25132.303 }, + { 59.5, 2.747, 16983.996 }, + { 64.8, 0.048, 33326.579 }, + { 55.4, 4.053, 30639.857 }, + { 54.4, 3.143, 27147.285 }, + { 47.6, 5.497, 3.881 }, + { 49.6, 3.990, 6770.711 }, + { 56.5, 5.119, 73711.756 }, + { 41.8, 5.642, 53131.406 }, + { 51.5, 5.478, 50586.733 }, + { 44.7, 1.224, 77154.331 }, + { 41.9, 5.193, 6283.076 }, + { 38.0, 2.431, 12566.152 }, + { 35.6, 0.814, 32858.614 }, + { 48.0, 5.493, 51749.208 }, + { 35.4, 3.370, 36301.189 }, + { 34.0, 2.786, 14765.239 }, + { 30.6, 5.840, 43071.899 }, + { 36.0, 1.424, 2218.757 }, + { 34.0, 0.475, 65697.558 }, + { 30.8, 5.770, 103292.231 }, + { 28.5, 0.650, 426.598 }, + { 26.2, 5.242, 22645.328 }, + { 26.3, 0.648, 1589.073 }, + { 29.5, 0.698, 213.299 }, + { 27.5, 0.980, 45892.730 }, + { 26.8, 1.061, 3442.575 }, + { 27.1, 0.085, 63498.470 }, + /* 75 terms retained, 1305 terms dropped, error 0.97" */ + + /* mercury l, T^1 */ + { 2608814706222.7, 0, 0 }, + { 1126007.8, 6.21703971, 26087.90314157 }, + { 303471.4, 3.0556547, 52175.8062831 }, + { 80538.5, 6.104547, 78263.709425 }, + { 21245.0, 2.835319, 104351.612566 }, + { 5592.1, 5.82676, 130439.51571 }, + { 1472.2, 2.51845, 156527.41885 }, + { 352.2, 3.0524, 1109.3786 }, + { 388.3, 5.4804, 182615.3220 }, + { 93.5, 6.118, 27197.282 }, + { 90.6, 0.000, 24978.525 }, + { 102.7, 2.1488, 208703.2251 }, + { 51.9, 5.621, 5661.332 }, + { 44.4, 4.573, 25028.521 }, + { 28.1, 3.042, 51066.428 }, + { 22.0, 0.865, 955.600 }, + { 27.3, 5.092, 234791.128 }, + { 20.4, 3.715, 20426.571 }, + { 20.2, 0.519, 21535.950 }, + { 17.5, 5.727, 4551.953 }, + { 16.7, 1.351, 529.691 }, + { 15.3, 1.792, 11322.664 }, + { 15.4, 5.743, 19.670 }, + { 14.0, 3.594, 24498.830 }, + { 12.8, 2.696, 53285.185 }, + { 12.6, 3.895, 3.881 }, + { 12.6, 4.705, 1059.382 }, + { 8.0, 4.18, 26617.59 }, + { 7.9, 0.50, 46514.47 }, + { 8.0, 3.93, 27043.50 }, + { 7.7, 2.48, 57837.14 }, + { 8.6, 6.06, 77154.33 }, + { 6.8, 2.77, 7.11 }, + { 6.6, 5.53, 6770.71 }, + { 7.3, 1.75, 260879.03 }, + { 7.2, 2.98, 2218.76 }, + { 6.4, 2.14, 25132.30 }, + /* 37 terms retained, 802 terms dropped, error 0.16"*T */ + + /* mercury l, T^2 */ + { 53049.8, 0, 0 }, + { 16903.7, 4.690723, 26087.903142 }, + { 7396.7, 1.34736, 52175.80628 }, + { 3018.3, 4.45644, 78263.70942 }, + { 1107.4, 1.26227, 104351.61257 }, + { 378.2, 4.3200, 130439.5157 }, + { 123.0, 1.0687, 156527.4188 }, + { 38.7, 4.080, 182615.322 }, + { 14.9, 4.633, 1109.379 }, + { 11.9, 0.792, 208703.225 }, + { 5.2, 4.72, 24978.52 }, + { 3.6, 3.77, 234791.13 }, + { 2.6, 1.44, 27197.28 }, + { 2.0, 1.50, 51066.43 }, + /* 14 terms retained, 381 terms dropped, error 0.033"*T^2 */ + + /* mercury l, T^3 */ + { 188.1, 0.0347, 52175.8063 }, + { 142.2, 3.1251, 26087.9031 }, + { 96.9, 3.004, 78263.709 }, + { 43.7, 6.019, 104351.613 }, + { 35.4, 0, 0 }, + { 18.0, 2.775, 130439.516 }, + { 7.0, 5.82, 156527.42 }, + { 2.6, 2.57, 182615.32 }, + { 0.9, 5.59, 208703.23 }, + /* 9 terms retained, 144 terms dropped, error 0.012"*T^3 */ + + /* mercury l, T^4 */ + { 114.1, 3.1416, 0 }, + { 3.2, 2.03, 26087.90 }, + { 1.9, 1.42, 78263.71 }, + { 1.7, 4.50, 52175.81 }, + { 1.2, 4.50, 104351.61 }, + { 0.6, 1.27, 130439.52 }, + { 0.3, 4.31, 156527.42 }, + { 0.1, 1.06, 182615.32 }, + /* 8 terms retained, 20 terms dropped, error 0.0016"*T^4 */ + + /* mercury l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 12 terms dropped, error 0.0051"*T^5 */ + /* end mercury l */ + + /* mercury b, T^0 */ + { 11737529.0, 1.983574988, 26087.903141574 }, + { 2388077.0, 5.03738960, 52175.80628315 }, + { 1222839.5, 3.14159265, 0 }, + { 543251.8, 1.7964436, 78263.7094247 }, + { 129778.8, 4.8323250, 104351.6125663 }, + { 31866.9, 1.580885, 130439.515708 }, + { 7963.3, 4.60972, 156527.41885 }, + { 2014.2, 1.35324, 182615.32199 }, + { 514.0, 4.3784, 208703.2251 }, + { 207.7, 4.9177, 27197.2817 }, + { 208.6, 2.0202, 24978.5246 }, + { 132.0, 1.1191, 234791.1283 }, + { 100.5, 5.6568, 20426.5711 }, + { 121.4, 1.8127, 53285.1848 }, + { 91.6, 2.282, 25028.521 }, + { 99.2, 0.094, 51116.424 }, + { 94.6, 1.242, 31749.235 }, + { 78.8, 4.407, 57837.138 }, + { 77.7, 0.526, 1059.382 }, + { 84.3, 5.085, 51066.428 }, + { 49.9, 3.498, 5661.332 }, + { 46.5, 3.237, 77204.327 }, + { 44.8, 4.878, 79373.088 }, + { 40.8, 2.466, 46514.474 }, + { 37.4, 4.458, 4551.953 }, + { 34.1, 4.142, 260879.031 }, + { 35.9, 1.091, 1109.379 }, + { 32.0, 1.185, 83925.041 }, + { 31.0, 3.503, 21535.950 }, + { 31.8, 2.415, 47623.853 }, + { 28.7, 1.848, 77154.331 }, + { 25.8, 2.776, 27043.503 }, + { 25.2, 3.591, 27147.285 }, + /* 33 terms retained, 785 terms dropped, error 0.61" */ + + /* mercury b, T^1 */ + { 429151.4, 3.5016978, 26087.9031416 }, + { 146233.7, 3.1415927, 0 }, + { 22675.3, 0.015154, 52175.806283 }, + { 10895.0, 0.485402, 78263.709425 }, + { 6353.5, 3.42944, 104351.61257 }, + { 2495.7, 0.16051, 130439.51571 }, + { 859.6, 3.1845, 156527.4188 }, + { 277.5, 6.2102, 182615.3220 }, + { 86.2, 2.952, 208703.225 }, + { 26.1, 5.977, 234791.128 }, + { 27.7, 0.291, 27197.282 }, + { 12.8, 3.377, 53285.185 }, + { 12.7, 0.538, 24978.525 }, + { 7.8, 2.72, 260879.03 }, + { 7.5, 3.58, 51066.43 }, + /* 15 terms retained, 479 terms dropped, error 0.12"*T */ + + /* mercury b, T^2 */ + { 11830.9, 4.790656, 26087.903142 }, + { 1913.5, 0, 0 }, + { 1044.8, 1.21217, 52175.80628 }, + { 266.2, 4.4342, 78263.7094 }, + { 170.3, 1.6226, 104351.6126 }, + { 96.3, 4.800, 130439.516 }, + { 44.7, 1.608, 156527.419 }, + { 18.3, 4.669, 182615.322 }, + { 6.9, 1.43, 208703.23 }, + { 2.5, 4.47, 234791.13 }, + { 1.7, 1.83, 27197.28 }, + /* 11 terms retained, 219 terms dropped, error 0.025"*T^2 */ + + /* mercury b, T^3 */ + { 235.4, 0.3539, 26087.9031 }, + { 160.5, 0, 0 }, + { 18.9, 4.363, 52175.806 }, + { 6.4, 2.51, 78263.71 }, + { 4.6, 6.14, 104351.61 }, + { 3.1, 3.12, 130439.52 }, + { 1.7, 6.27, 156527.42 }, + { 0.9, 3.08, 182615.32 }, + /* 8 terms retained, 45 terms dropped, error 0.011"*T^3 */ + + /* mercury b, T^4 */ + { 4.3, 1.75, 26087.90 }, + { 1.0, 3.14, 0 }, + { 0.4, 4.03, 52175.81 }, + { 0.3, 0.21, 78263.71 }, + { 0.1, 3.75, 104351.61 }, + /* 5 terms retained, 10 terms dropped, error 0.0012"*T^4 */ + + /* mercury b, T^5 */ + { 0.1, 3.95, 26087.90 }, + /* 1 terms retained, 9 terms dropped, error 0.00062"*T^5 */ + /* end mercury b */ + + /* mercury r, T^0 */ + { 39528271.7, 0, 0 }, + { 7834131.8, 6.19233723, 26087.90314157 }, + { 795525.6, 2.9598969, 52175.8062831 }, + { 121281.8, 6.0106415, 78263.7094247 }, + { 21922.0, 2.778201, 104351.612566 }, + { 4354.1, 5.82895, 130439.51571 }, + { 918.2, 2.5965, 156527.4188 }, + { 260.0, 3.0282, 27197.2817 }, + { 290.0, 1.4244, 25028.5212 }, + { 201.9, 5.6473, 182615.3220 }, + { 201.5, 5.5923, 31749.2352 }, + { 142.0, 6.2526, 24978.5246 }, + { 100.1, 3.7344, 21535.9496 }, + { 77.6, 3.670, 20426.571 }, + { 63.3, 4.299, 25558.212 }, + { 63.0, 4.766, 1059.382 }, + { 66.8, 2.525, 5661.332 }, + { 75.5, 4.474, 51116.424 }, + { 48.3, 6.068, 53285.185 }, + { 45.7, 2.415, 208703.225 }, + { 35.2, 1.059, 27043.503 }, + { 40.8, 2.359, 57837.138 }, + { 44.2, 1.220, 15874.618 }, + { 33.9, 0.864, 25661.305 }, + { 37.2, 0.517, 47623.853 }, + { 30.1, 1.795, 37410.567 }, + { 28.4, 3.021, 51066.428 }, + { 30.9, 0.884, 24498.830 }, + { 26.1, 2.150, 39609.655 }, + /* 29 terms retained, 1186 terms dropped, error 2.9e-06 a.u. */ + + /* mercury r, T^1 */ + { 217347.7, 4.6561716, 26087.9031416 }, + { 44141.8, 1.423855, 52175.806283 }, + { 10094.5, 4.474663, 78263.709425 }, + { 2432.8, 1.24226, 104351.61257 }, + { 1624.4, 0, 0 }, + { 604.0, 4.2930, 130439.5157 }, + { 152.9, 1.0606, 156527.4188 }, + { 39.2, 4.111, 182615.322 }, + { 17.8, 4.544, 27197.282 }, + { 18.0, 4.712, 24978.525 }, + { 10.2, 0.879, 208703.225 }, + { 8.1, 3.01, 25028.52 }, + /* 12 terms retained, 699 terms dropped, error 5.8e-07 a.u.*T */ + + /* mercury r, T^2 */ + { 3117.9, 3.08232, 26087.90314 }, + { 1245.4, 6.15183, 52175.80628 }, + { 424.8, 2.9258, 78263.7094 }, + { 136.1, 5.9798, 104351.6126 }, + { 42.2, 2.749, 130439.516 }, + { 21.8, 3.142, 0 }, + { 12.8, 5.801, 156527.419 }, + { 3.8, 2.57, 182615.32 }, + /* 8 terms retained, 318 terms dropped, error 2.3e-07 a.u.*T^2 */ + + /* mercury r, T^3 */ + { 32.7, 1.680, 26087.903 }, + { 24.2, 4.634, 52175.806 }, + { 12.1, 1.390, 78263.709 }, + { 5.1, 4.44, 104351.61 }, + { 2.0, 1.21, 130439.52 }, + { 1.5, 3.14, 0 }, + { 0.7, 4.26, 156527.42 }, + /* 7 terms retained, 112 terms dropped, error 4.1e-08 a.u.*T^3 */ + + /* mercury r, T^4 */ + { 0.4, 0.37, 26087.90 }, + { 0.4, 3.19, 52175.81 }, + { 0.3, 6.17, 78263.71 }, + { 0.1, 2.92, 104351.61 }, + /* 4 terms retained, 14 terms dropped, error 6.7e-09 a.u.*T^4 */ + + /* mercury r, T^5 */ + /* 0 terms retained, 10 terms dropped, error 1.2e-10 a.u.*T^5 */ + /* end mercury */ +}; + +int vn_mercury[][3] = { + /* addresses for mercury l, b, r */ + /* T^0 */ { 0, 144, 217, }, + /* T^1 */ { 75, 177, 246, }, + /* T^2 */ { 112, 192, 258, }, + /* T^3 */ { 126, 203, 266, }, + /* T^4 */ { 135, 211, 273, }, + /* T^5 */ { 143, 216, 277, }, + /* end */ { 144, 217, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_neptune[][3] = { + /* neptune l, T^0 */ + { 531188633.0, 0, 0 }, + { 1798475.5, 2.90101273, 38.13303564 }, + { 1019727.7, 0.48580924, 1.48447271 }, + { 124531.8, 4.8300809, 36.6485629 }, + { 42064.4, 5.410550, 2.968945 }, + { 37714.6, 6.092218, 35.164090 }, + { 33784.7, 1.244889, 76.266071 }, + { 16482.7, 0.000077, 491.557929 }, + { 9198.6, 4.93747, 39.61751 }, + { 8994.2, 0.27462, 175.16606 }, + { 4216.2, 1.98712, 73.29713 }, + { 3364.8, 1.03590, 33.67962 }, + { 2284.8, 4.20607, 4.45342 }, + { 1433.5, 2.78340, 74.78160 }, + { 900.2, 2.0761, 109.9457 }, + { 745.0, 3.1903, 71.8127 }, + { 506.2, 5.7479, 114.3991 }, + { 399.6, 0.3497, 1021.2489 }, + { 345.2, 3.4619, 41.1020 }, + { 306.3, 0.4968, 0.5213 }, + { 287.3, 4.5052, 0.0482 }, + { 323.0, 2.2482, 32.1951 }, + { 340.3, 3.3037, 77.7505 }, + { 266.6, 4.8893, 0.9632 }, + { 227.1, 1.7971, 453.4249 }, + { 244.7, 1.2469, 9.5612 }, + { 232.9, 2.5046, 137.0330 }, + { 282.2, 2.2457, 146.5943 }, + { 251.9, 5.7817, 388.4652 }, + { 150.2, 2.9971, 5.9379 }, + { 170.4, 3.3239, 108.4612 }, + { 151.4, 2.1915, 33.9402 }, + { 148.3, 0.8595, 111.4302 }, + { 118.7, 3.6771, 2.4477 }, + { 101.8, 5.7054, 0.1119 }, + { 97.9, 2.805, 8.077 }, + { 103.1, 4.4044, 70.3282 }, + { 103.3, 0.0408, 0.2606 }, + { 109.3, 2.4160, 183.2428 }, + { 73.9, 1.328, 529.691 }, + { 77.7, 4.164, 4.193 }, + { 86.4, 4.228, 490.073 }, + { 81.5, 5.199, 493.042 }, + { 71.5, 5.295, 350.332 }, + { 64.4, 3.545, 168.053 }, + { 62.6, 0.150, 182.280 }, + { 58.5, 3.501, 145.110 }, + { 48.3, 1.113, 112.915 }, + { 47.2, 4.574, 46.210 }, + { 39.1, 1.666, 213.299 }, + { 47.7, 0.129, 484.444 }, + { 46.9, 3.017, 498.671 }, + { 38.7, 2.387, 2.921 }, + { 47.0, 4.498, 173.682 }, + { 47.6, 2.584, 219.891 }, + { 44.7, 5.473, 176.651 }, + { 32.3, 3.458, 30.711 }, + { 28.2, 4.133, 6.592 }, + /* 58 terms retained, 365 terms dropped, error 0.9" */ + + /* neptune l, T^1 */ + { 3837687716.7, 0, 0 }, + { 16604.2, 4.863191, 1.484473 }, + { 15807.1, 2.279235, 38.133036 }, + { 3334.7, 3.68200, 76.26607 }, + { 1305.8, 3.67321, 2.96895 }, + { 604.8, 1.5048, 35.1641 }, + { 178.6, 3.4532, 39.6175 }, + { 106.5, 2.4513, 4.4534 }, + { 105.7, 2.7548, 33.6796 }, + { 72.7, 5.487, 36.649 }, + { 57.1, 5.216, 0.521 }, + { 57.4, 1.858, 114.399 }, + { 35.4, 4.517, 74.782 }, + { 32.2, 5.904, 77.751 }, + { 29.9, 3.670, 388.465 }, + { 28.9, 5.169, 9.561 }, + { 28.7, 5.167, 2.448 }, + { 25.5, 5.245, 168.053 }, + { 24.9, 4.732, 182.280 }, + { 20.2, 5.789, 1021.249 }, + { 19.0, 1.830, 484.444 }, + { 18.7, 1.316, 498.671 }, + { 15.1, 4.950, 137.033 }, + { 15.1, 3.987, 32.195 }, + { 10.7, 2.441, 4.193 }, + { 11.7, 4.893, 71.813 }, + { 9.6, 1.23, 5.94 }, + { 9.6, 1.89, 41.10 }, + { 9.0, 0.02, 8.08 }, + { 9.9, 6.08, 7.11 }, + { 7.6, 5.51, 73.30 }, + { 7.0, 0.62, 2.92 }, + /* 32 terms retained, 151 terms dropped, error 0.17"*T */ + + /* neptune l, T^2 */ + { 53892.6, 0, 0 }, + { 281.3, 1.1908, 38.1330 }, + { 295.7, 1.8552, 1.4845 }, + { 270.2, 5.7214, 76.2661 }, + { 23.0, 1.210, 2.969 }, + { 7.3, 0.54, 2.45 }, + { 9.1, 4.43, 35.16 }, + { 5.2, 0.67, 168.05 }, + { 5.2, 3.02, 182.28 }, + { 4.3, 3.84, 114.40 }, + { 3.9, 3.53, 484.44 }, + { 3.7, 5.90, 498.67 }, + { 3.0, 0.31, 4.45 }, + { 3.4, 0.56, 74.78 }, + { 3.3, 1.85, 175.17 }, + { 2.2, 1.89, 388.47 }, + { 2.2, 4.38, 7.11 }, + { 1.8, 3.49, 9.56 }, + { 2.5, 4.69, 491.56 }, + { 1.8, 5.12, 33.68 }, + { 2.2, 1.69, 77.75 }, + { 1.7, 2.56, 36.65 }, + /* 22 terms retained, 35 terms dropped, error 0.033"*T^2 */ + + /* neptune l, T^3 */ + { 31.3, 0, 0 }, + { 12.5, 6.044, 1.484 }, + { 14.5, 1.353, 76.266 }, + { 11.5, 6.113, 38.133 }, + { 1.4, 4.94, 2.97 }, + { 0.7, 2.36, 168.05 }, + { 0.7, 1.27, 182.28 }, + { 0.5, 5.24, 484.44 }, + { 0.5, 4.17, 498.67 }, + { 0.7, 0.56, 31.02 }, + /* 10 terms retained, 5 terms dropped, error 0.0091"*T^3 */ + + /* neptune l, T^4 */ + { 114.0, 3.1416, 0 }, + { 0.6, 3.18, 76.27 }, + /* 2 terms retained, 0 terms dropped, error 0.0043"*T^4 */ + + /* neptune l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 0 terms dropped, error 0.0051"*T^5 */ + /* end neptune l */ + + /* neptune b, T^0 */ + { 3088622.9, 1.44104373, 38.13303564 }, + { 27780.1, 5.912719, 76.266071 }, + { 27623.6, 0, 0 }, + { 15355.5, 2.521238, 36.648563 }, + { 15448.1, 3.508771, 39.617508 }, + { 1999.9, 1.50999, 74.78160 }, + { 1967.5, 4.37778, 1.48447 }, + { 1015.1, 3.21561, 35.16409 }, + { 605.8, 2.8025, 73.2971 }, + { 594.9, 2.1289, 41.1020 }, + { 588.8, 3.1866, 2.9689 }, + { 401.8, 4.1688, 114.3991 }, + { 254.3, 3.2712, 453.4249 }, + { 261.6, 3.7672, 213.2991 }, + { 280.0, 1.6817, 77.7505 }, + { 205.6, 4.2565, 529.6910 }, + { 140.5, 3.5297, 137.0330 }, + { 98.5, 4.168, 33.680 }, + { 51.3, 1.951, 4.453 }, + { 68.0, 4.670, 71.813 }, + { 41.9, 5.418, 111.430 }, + { 41.8, 5.948, 112.915 }, + { 30.6, 0.936, 42.586 }, + /* 23 terms retained, 149 terms dropped, error 0.62" */ + + /* neptune b, T^1 */ + { 227279.2, 3.8079309, 38.1330356 }, + { 1803.1, 1.97576, 76.26607 }, + { 1385.7, 4.82556, 36.64856 }, + { 1433.3, 3.14159, 0 }, + { 1073.3, 6.08054, 39.61751 }, + { 147.9, 3.8577, 74.7816 }, + { 136.4, 0.4776, 1.4845 }, + { 70.3, 6.188, 35.164 }, + { 51.9, 5.052, 73.297 }, + { 37.3, 4.895, 41.102 }, + { 42.6, 0.307, 114.399 }, + { 37.1, 5.760, 2.969 }, + { 26.4, 5.216, 213.299 }, + { 16.9, 4.265, 77.751 }, + { 18.7, 0.904, 453.425 }, + { 13.0, 6.177, 529.691 }, + { 10.5, 1.203, 137.033 }, + /* 17 terms retained, 65 terms dropped, error 0.18"*T */ + + /* neptune b, T^2 */ + { 9690.8, 5.57124, 38.13304 }, + { 78.8, 3.627, 76.266 }, + { 71.5, 0.455, 36.649 }, + { 58.6, 3.142, 0 }, + { 29.9, 1.607, 39.618 }, + { 6.5, 5.61, 74.78 }, + { 5.8, 2.25, 1.48 }, + { 4.3, 1.68, 35.16 }, + { 3.5, 2.39, 114.40 }, + { 2.6, 0.65, 73.30 }, + /* 10 terms retained, 15 terms dropped, error 0.036"*T^2 */ + + /* neptune b, T^3 */ + { 273.4, 1.0169, 38.1330 }, + { 2.3, 2.37, 36.65 }, + { 2.0, 5.33, 76.27 }, + { 2.4, 0, 0 }, + { 0.5, 3.22, 39.62 }, + /* 5 terms retained, 4 terms dropped, error 0.0054"*T^3 */ + + /* neptune b, T^4 */ + { 5.7, 2.67, 38.13 }, + /* 1 terms retained, 0 terms dropped, error 0.033"*T^4 */ + + /* neptune b, T^5 */ + { 0.1, 4.71, 38.13 }, + /* 1 terms retained, 0 terms dropped, error 0.00066"*T^5 */ + /* end neptune b */ + + /* neptune r, T^0 */ + { 3007013206.1, 0, 0 }, + { 27062259.5, 1.329994589, 38.133035638 }, + { 1691764.3, 3.25186139, 36.64856293 }, + { 807830.7, 5.1859284, 1.4844727 }, + { 537760.6, 4.5211390, 35.1640902 }, + { 495725.6, 1.5710565, 491.5579295 }, + { 274572.0, 1.8455226, 175.1660598 }, + { 135134.1, 3.3722061, 39.6175083 }, + { 121801.8, 5.7975444, 76.2660713 }, + { 100895.4, 0.3770275, 73.2971259 }, + { 69791.7, 3.796172, 2.968945 }, + { 46687.8, 5.749378, 33.679618 }, + { 24593.8, 0.508017, 109.945689 }, + { 16939.2, 1.594222, 71.812653 }, + { 14229.7, 1.077861, 74.781599 }, + { 12011.8, 1.920621, 1021.248895 }, + { 8394.7, 0.67817, 146.59425 }, + { 7571.8, 1.07149, 388.46516 }, + { 5720.9, 2.59060, 4.45342 }, + { 4839.7, 1.90686, 41.10198 }, + { 4483.5, 2.90573, 529.69097 }, + { 4270.2, 3.41344, 453.42489 }, + { 4353.8, 0.67986, 32.19514 }, + { 4420.8, 1.74994, 108.46122 }, + { 2881.1, 1.98600, 137.03302 }, + { 2635.5, 3.09756, 213.29910 }, + { 3380.9, 0.84811, 183.24281 }, + { 2878.9, 3.67416, 350.33212 }, + { 2306.3, 2.80963, 70.32818 }, + { 2530.1, 5.79840, 490.07346 }, + { 2523.1, 0.48631, 493.04240 }, + { 2087.3, 0.61858, 33.94025 }, + { 1976.5, 5.11703, 168.05251 }, + { 1905.3, 1.72186, 182.27961 }, + { 1654.0, 1.92783, 145.10978 }, + { 1435.1, 1.70005, 484.44438 }, + { 1403.0, 4.58914, 498.67148 }, + { 1499.2, 1.01623, 219.89138 }, + { 1398.9, 0.76220, 176.65053 }, + { 1403.4, 6.07659, 173.68159 }, + { 1128.6, 5.96661, 9.56123 }, + { 1228.3, 1.59881, 77.75054 }, + { 835.4, 3.9707, 114.3991 }, + { 811.2, 3.0026, 46.2098 }, + { 731.9, 2.1045, 181.7583 }, + { 615.8, 2.9787, 106.9767 }, + { 704.8, 1.1874, 256.5399 }, + { 502.0, 1.3866, 5.9379 }, + { 530.4, 4.2406, 111.4302 }, + { 437.1, 2.2703, 1550.9399 }, + { 400.2, 1.2561, 8.0768 }, + { 421.0, 1.8908, 30.7107 }, + { 382.5, 3.2997, 983.1159 }, + { 422.5, 5.5319, 525.4982 }, + { 355.4, 2.2785, 218.4069 }, + { 280.1, 1.5413, 98.9000 }, + { 314.5, 3.9593, 381.3516 }, + { 280.6, 4.5424, 44.7253 }, + { 267.7, 5.1332, 112.9146 }, + { 333.3, 5.7507, 39.0962 }, + { 291.6, 4.0240, 68.8437 }, + { 321.4, 1.5063, 454.9094 }, + { 309.2, 2.8545, 72.0733 }, + { 345.1, 1.3591, 293.1885 }, + { 307.4, 0.3196, 601.7643 }, + { 251.4, 3.5399, 312.1991 }, + { 248.2, 3.4108, 37.6118 }, + { 306.0, 2.7248, 6244.9428 }, + { 293.5, 4.8908, 528.2065 }, + { 234.5, 0.5923, 42.5865 }, + { 239.6, 3.1644, 143.6253 }, + { 214.5, 3.6248, 278.2588 }, + { 246.2, 1.0151, 141.2258 }, + { 174.1, 5.5501, 567.8240 }, + { 163.9, 2.1017, 2.4477 }, + { 162.9, 2.4895, 4.1928 }, + { 193.5, 1.5843, 138.5175 }, + { 155.3, 3.2843, 31.0195 }, + { 182.5, 2.4524, 255.0555 }, + { 177.8, 4.1477, 10175.1525 }, + { 174.4, 1.5304, 329.8371 }, + { 137.6, 3.3490, 0.9632 }, + { 161.0, 5.1666, 211.8146 }, + { 113.5, 4.9629, 148.0787 }, + { 128.8, 3.2552, 24.1184 }, + { 107.4, 3.2646, 1059.3819 }, + { 122.7, 5.3940, 62.2514 }, + { 120.5, 3.0805, 184.7273 }, + { 99.4, 1.929, 28.572 }, + { 97.7, 2.595, 6.592 }, + { 124.1, 3.1152, 221.3759 }, + { 124.7, 2.9704, 251.4321 }, + { 114.3, 0.2504, 594.6507 }, + { 111.0, 3.3428, 180.2739 }, + { 120.9, 1.9291, 25.6029 }, + { 104.7, 0.9488, 395.5787 }, + { 109.8, 5.4315, 494.5269 }, + { 96.9, 0.862, 1014.135 }, + { 98.7, 0.896, 488.589 }, + { 89.0, 4.781, 144.147 }, + { 107.9, 0.9870, 1124.3417 }, + { 97.1, 2.627, 291.704 }, + { 75.1, 5.889, 43.241 }, + { 93.7, 6.099, 526.722 }, + { 94.8, 0.207, 456.394 }, + { 70.0, 2.397, 426.598 }, + { 77.2, 4.211, 105.492 }, + { 89.9, 3.251, 258.024 }, + { 69.1, 4.930, 1028.362 }, + { 90.7, 1.695, 366.486 }, + { 74.2, 3.145, 82.858 }, + { 58.0, 0.862, 60.767 }, + { 78.7, 1.093, 700.664 }, + { 57.2, 0.813, 2.921 }, + { 63.4, 4.396, 149.563 }, + { 55.7, 3.890, 47.694 }, + { 56.4, 5.150, 0.521 }, + { 56.2, 5.430, 911.043 }, + { 61.7, 6.165, 1019.764 }, + { 70.5, 0.081, 40.581 }, + { 74.7, 4.859, 186.212 }, + { 61.9, 4.787, 11.046 }, + { 61.1, 0.837, 1022.733 }, + { 61.3, 5.702, 178.135 }, + { 52.9, 0.375, 27.087 }, + { 56.7, 3.523, 216.922 }, + { 48.8, 5.108, 64.960 }, + { 63.3, 4.394, 807.950 }, + { 64.1, 6.283, 7.114 }, + { 46.4, 1.347, 451.940 }, + { 60.5, 3.403, 294.673 }, + { 46.9, 0.170, 7.422 }, + { 56.8, 0.450, 140.002 }, + { 55.9, 1.068, 172.197 }, + { 53.8, 2.796, 328.353 }, + { 43.8, 6.047, 135.549 }, + { 49.5, 0.641, 41.054 }, + { 54.0, 2.918, 563.631 }, + { 43.0, 5.402, 487.365 }, + { 51.5, 0.091, 210.330 }, + { 41.9, 3.123, 29.226 }, + { 47.7, 3.907, 63.736 }, + { 41.6, 6.268, 32.716 }, + { 41.4, 4.455, 37.170 }, + { 40.7, 0.160, 79.235 }, + { 48.2, 1.842, 403.134 }, + { 36.9, 0.448, 30.056 }, + { 47.8, 0.881, 3302.479 }, + { 39.5, 3.506, 357.446 }, + { 42.1, 0.634, 343.219 }, + { 41.3, 1.364, 31.232 }, + { 42.6, 3.553, 38.654 }, + { 38.9, 5.267, 415.292 }, + { 39.0, 5.259, 386.981 }, + { 33.7, 5.244, 67.359 }, + { 40.9, 3.553, 331.322 }, + { 38.8, 1.123, 38.181 }, + { 37.5, 6.087, 35.425 }, + { 38.8, 4.679, 38.085 }, + { 38.2, 6.265, 389.950 }, + { 30.0, 4.458, 22.634 }, + { 31.4, 0.077, 12.530 }, + { 26.3, 4.596, 106.014 }, + { 27.5, 5.995, 206.186 }, + { 25.2, 4.499, 34.201 }, + { 29.0, 3.649, 253.571 }, + { 27.2, 4.379, 142.141 }, + { 30.6, 1.593, 348.848 }, + { 31.5, 1.051, 100.384 }, + { 26.3, 3.016, 365.001 }, + { 26.5, 3.614, 367.970 }, + { 25.5, 2.438, 351.817 }, + { 25.7, 2.005, 439.783 }, + { 25.4, 4.740, 1474.674 }, + /* 174 terms retained, 433 terms dropped, error 6.7e-06 a.u. */ + + /* neptune r, T^1 */ + { 236338.5, 0.7049801, 38.1330356 }, + { 13220.3, 3.320155, 1.484473 }, + { 8621.9, 6.21629, 35.16409 }, + { 2701.7, 1.88141, 39.61751 }, + { 2153.2, 5.16874, 76.26607 }, + { 2154.7, 2.09431, 2.96895 }, + { 1463.9, 1.18417, 33.67962 }, + { 1603.2, 0, 0 }, + { 1135.8, 3.91891, 36.64856 }, + { 897.6, 5.2412, 388.4652 }, + { 789.9, 0.5332, 168.0525 }, + { 760.0, 0.0205, 182.2796 }, + { 607.2, 1.0771, 1021.2489 }, + { 571.6, 3.4006, 484.4444 }, + { 560.8, 2.8869, 498.6715 }, + { 490.2, 3.4683, 137.0330 }, + { 264.1, 0.8622, 4.4534 }, + { 270.5, 3.2736, 71.8127 }, + { 203.5, 2.4182, 32.1951 }, + { 155.4, 0.3654, 41.1020 }, + { 132.8, 3.6016, 9.5612 }, + { 93.6, 0.667, 46.210 }, + { 83.3, 3.260, 98.900 }, + { 72.2, 4.477, 601.764 }, + { 69.0, 1.463, 74.782 }, + { 87.0, 5.772, 381.352 }, + { 68.7, 4.526, 70.328 }, + { 64.7, 3.855, 73.297 }, + { 68.4, 3.395, 108.461 }, + { 53.4, 5.437, 395.579 }, + { 44.5, 3.614, 2.448 }, + { 41.2, 4.739, 8.077 }, + { 48.3, 1.986, 175.166 }, + { 41.7, 4.943, 31.019 }, + { 44.1, 1.417, 1550.940 }, + { 41.2, 1.420, 490.073 }, + { 41.1, 4.863, 493.042 }, + { 36.3, 5.308, 312.199 }, + { 36.3, 0.382, 77.751 }, + { 40.6, 2.272, 529.691 }, + { 32.4, 5.911, 5.938 }, + { 31.2, 2.705, 1014.135 }, + { 32.7, 5.221, 41.054 }, + { 36.1, 4.878, 491.558 }, + { 30.2, 3.633, 30.711 }, + { 30.0, 3.308, 1028.362 }, + { 27.0, 1.776, 44.725 }, + { 27.8, 4.556, 7.114 }, + { 27.5, 0.972, 33.940 }, + { 24.9, 3.101, 144.147 }, + { 26.0, 2.997, 60.767 }, + { 21.4, 4.713, 278.259 }, + { 21.3, 0.690, 251.432 }, + { 23.7, 5.120, 176.651 }, + { 21.4, 0.863, 4.193 }, + { 23.4, 1.650, 173.682 }, + { 24.2, 3.566, 145.110 }, + { 20.2, 5.615, 24.118 }, + { 27.0, 4.143, 453.425 }, + { 24.0, 1.007, 213.299 }, + { 18.3, 1.980, 72.073 }, + { 18.3, 6.173, 189.393 }, + { 19.2, 4.652, 106.977 }, + { 17.6, 1.603, 62.251 }, + { 16.5, 1.699, 357.446 }, + { 20.1, 3.295, 114.399 }, + { 15.4, 4.388, 25.603 }, + { 19.2, 2.200, 343.219 }, + { 15.1, 3.668, 0.521 }, + { 14.0, 0.553, 129.919 }, + { 13.4, 5.858, 68.844 }, + { 15.4, 4.207, 567.824 }, + { 12.7, 3.528, 477.331 }, + { 11.7, 5.576, 31.232 }, + { 11.5, 0.891, 594.651 }, + { 10.5, 4.356, 32.716 }, + { 10.8, 5.218, 26.827 }, + { 10.1, 1.981, 40.581 }, + { 10.5, 5.273, 2.921 }, + { 9.2, 0.50, 64.96 }, + { 9.2, 0.68, 160.94 }, + { 8.7, 5.81, 6.59 }, + { 10.1, 4.512, 28.572 }, + { 10.4, 5.189, 42.586 }, + { 9.9, 3.77, 181.76 }, + { 8.3, 2.82, 43.24 }, + { 9.8, 1.49, 47.69 }, + { 7.6, 4.08, 389.95 }, + { 8.0, 2.78, 505.79 }, + { 7.4, 2.36, 11.05 }, + { 7.3, 1.62, 135.55 }, + { 9.5, 0.27, 426.60 }, + { 7.2, 0.83, 911.04 }, + { 7.0, 1.87, 206.19 }, + { 6.9, 0.84, 82.86 }, + { 7.9, 1.87, 38.65 }, + { 6.7, 3.98, 12.53 }, + { 6.4, 0.90, 487.37 }, + { 6.7, 1.34, 220.41 }, + { 7.7, 5.13, 23.91 }, + { 7.1, 6.00, 639.90 }, + { 8.3, 3.86, 37.61 }, + { 6.4, 2.42, 1059.38 }, + { 6.8, 1.97, 45.25 }, + { 6.4, 4.08, 35.69 }, + { 6.4, 0.65, 350.33 }, + /* 106 terms retained, 144 terms dropped, error 1.3e-06 a.u.*T */ + + /* neptune r, T^2 */ + { 4247.4, 5.89911, 38.13304 }, + { 217.6, 0.3458, 1.4845 }, + { 163.0, 2.2387, 168.0525 }, + { 156.3, 4.5941, 182.2796 }, + { 117.9, 5.1030, 484.4444 }, + { 112.4, 1.1900, 498.6715 }, + { 127.1, 2.8479, 35.1641 }, + { 99.5, 3.416, 175.166 }, + { 64.8, 3.462, 388.465 }, + { 77.3, 0.017, 491.558 }, + { 49.5, 4.070, 76.266 }, + { 39.3, 6.095, 1021.249 }, + { 36.5, 5.171, 137.033 }, + { 37.1, 5.973, 2.969 }, + { 30.5, 3.583, 33.680 }, + { 21.1, 0.768, 36.649 }, + { 13.9, 3.592, 395.579 }, + { 13.1, 5.093, 98.900 }, + { 11.4, 1.181, 381.352 }, + { 9.1, 2.35, 601.76 }, + { 8.5, 5.25, 2.45 }, + { 8.1, 4.96, 4.45 }, + { 7.4, 4.47, 189.39 }, + { 7.2, 1.92, 9.56 }, + { 7.3, 1.66, 1028.36 }, + { 8.1, 5.84, 220.41 }, + { 9.7, 0, 0 }, + { 6.6, 0.69, 144.15 }, + { 7.8, 1.14, 1059.38 }, + { 5.7, 6.25, 74.78 }, + { 5.6, 5.23, 46.21 }, + { 5.5, 4.59, 1014.14 }, + { 5.2, 5.23, 477.33 }, + { 5.5, 3.50, 183.76 }, + { 4.9, 3.53, 39.62 }, + { 4.8, 2.08, 41.10 }, + { 5.1, 0.20, 166.57 }, + { 4.8, 1.18, 169.54 }, + { 4.7, 1.51, 73.30 }, + { 6.1, 6.18, 71.81 }, + { 4.6, 3.92, 587.54 }, + { 5.8, 2.24, 176.65 }, + { 4.5, 2.84, 7.11 }, + { 4.3, 0.52, 446.31 }, + { 3.9, 0.26, 1550.94 }, + { 4.5, 3.01, 129.92 }, + { 3.7, 2.38, 160.94 }, + { 3.8, 3.79, 111.43 }, + { 4.1, 1.70, 983.12 }, + { 3.3, 1.08, 505.79 }, + { 4.0, 0.31, 494.74 }, + { 4.0, 5.97, 488.38 }, + { 3.9, 4.86, 60.77 }, + { 3.0, 2.02, 822.18 }, + { 4.0, 1.08, 374.24 }, + { 3.8, 5.23, 350.33 }, + { 2.8, 6.18, 704.86 }, + { 3.5, 0.79, 274.07 }, + { 2.8, 1.32, 386.98 }, + { 2.8, 5.37, 251.43 }, + { 3.1, 5.13, 426.60 }, + { 3.3, 5.61, 1124.34 }, + { 2.6, 0.68, 312.20 }, + { 2.6, 3.56, 567.82 }, + { 2.6, 1.46, 1035.48 }, + { 2.5, 5.19, 1227.43 }, + { 2.5, 4.12, 171.23 }, + { 2.5, 2.72, 179.10 }, + { 2.3, 0.96, 1019.76 }, + { 2.5, 0.70, 707.78 }, + { 2.5, 4.60, 693.55 }, + { 2.3, 0.74, 976.00 }, + /* 72 terms retained, 0 terms dropped, error 3.8e-07 a.u.*T^2 */ + + /* neptune r, T^3 */ + { 166.3, 4.5524, 38.1330 }, + { 22.4, 3.948, 168.053 }, + { 21.3, 2.863, 182.280 }, + { 16.2, 0.542, 484.444 }, + { 15.6, 5.757, 498.671 }, + { 11.9, 4.403, 1.484 }, + { 6.4, 5.19, 31.02 }, + { 3.7, 5.91, 1007.02 }, + { 3.7, 1.63, 388.47 }, + { 3.2, 0.70, 1558.05 }, + { 3.2, 1.88, 522.58 }, + { 3.3, 2.94, 76.27 }, + { 2.7, 1.87, 402.69 }, + { 3.2, 0.79, 536.80 }, + { 2.6, 5.77, 343.22 }, + { 2.6, 4.65, 500.16 }, + { 2.5, 4.79, 482.96 }, + { 2.5, 1.73, 395.58 }, + { 2.7, 2.21, 446.31 }, + { 2.4, 5.77, 485.93 }, + { 2.9, 6.20, 815.06 }, + { 2.3, 3.67, 497.19 }, + /* 22 terms retained, 0 terms dropped, error 2.2e-07 a.u.*T^3 */ + + /* neptune r, T^4 */ + { 4.2, 2.40, 477.33 }, + { 4.3, 0.10, 395.58 }, + { 3.5, 4.78, 1028.36 }, + { 3.2, 3.88, 505.79 }, + { 3.0, 1.04, 189.39 }, + { 2.3, 1.11, 182.28 }, + { 2.3, 5.68, 168.05 }, + /* 7 terms retained, 0 terms dropped, error 1.3e-07 a.u.*T^4 */ + /* end neptune */ +}; + +int vn_neptune[][3] = { + /* addresses for neptune l, b, r */ + /* T^0 */ { 0, 125, 182, }, + /* T^1 */ { 58, 148, 356, }, + /* T^2 */ { 90, 165, 462, }, + /* T^3 */ { 112, 175, 534, }, + /* T^4 */ { 122, 180, 556, }, + /* T^5 */ { 124, 181, 563, }, + /* end */ { 125, 182, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_saturn[][3] = { + /* saturn l, T^0 */ + { 87401354.0, 0, 0 }, + { 11107659.8, 3.962050902, 213.299095438 }, + { 1414151.0, 4.58581516, 7.11354700 }, + { 398379.4, 0.5211203, 206.1855484 }, + { 350769.2, 3.3032990, 426.5981909 }, + { 206816.3, 0.2465837, 103.0927742 }, + { 79271.3, 3.840071, 220.412642 }, + { 23990.3, 4.669769, 110.206321 }, + { 16573.6, 0.437191, 419.484644 }, + { 14907.0, 5.769033, 316.391870 }, + { 15820.3, 0.938090, 632.783739 }, + { 14609.6, 1.565186, 3.932153 }, + { 13160.3, 4.448912, 14.227094 }, + { 15053.5, 2.716700, 639.897286 }, + { 13005.3, 5.981191, 11.045700 }, + { 10725.1, 3.129396, 202.253395 }, + { 5863.2, 0.23657, 529.69097 }, + { 5227.8, 4.20783, 3.18139 }, + { 6126.3, 1.76328, 277.03499 }, + { 5019.7, 3.17788, 433.71174 }, + { 4592.5, 0.61976, 199.07200 }, + { 4005.9, 2.24480, 63.73590 }, + { 2953.8, 0.98280, 95.97923 }, + { 3873.7, 3.22283, 138.51750 }, + { 2461.2, 2.03164, 735.87651 }, + { 3269.5, 0.77492, 949.17561 }, + { 1758.1, 3.26581, 522.57742 }, + { 1640.2, 5.50505, 846.08283 }, + { 1391.3, 4.02332, 323.50542 }, + { 1580.6, 4.37266, 309.27832 }, + { 1123.5, 2.83727, 415.55249 }, + { 1017.3, 3.71698, 227.52619 }, + { 848.6, 3.1915, 209.3669 }, + { 1087.2, 4.18343, 2.44768 }, + { 956.8, 0.5074, 1265.5675 }, + { 789.2, 5.0075, 0.9632 }, + { 687.0, 1.7471, 1052.2684 }, + { 654.5, 1.5989, 0.0482 }, + { 748.8, 2.1440, 853.1964 }, + { 634.0, 2.2989, 412.3711 }, + { 743.6, 5.2528, 224.3448 }, + { 852.7, 3.4214, 175.1661 }, + { 579.9, 3.0926, 74.7816 }, + { 624.9, 0.9705, 210.1177 }, + { 529.9, 4.4494, 117.3199 }, + { 542.6, 1.5182, 9.5612 }, + { 474.3, 5.4753, 742.9901 }, + { 448.5, 1.2899, 127.4718 }, + { 546.4, 2.1268, 350.3321 }, + { 478.1, 2.9649, 137.0330 }, + { 354.9, 3.0129, 838.9693 }, + { 451.8, 1.0444, 490.3341 }, + { 347.4, 1.5393, 340.7709 }, + { 343.5, 0.2460, 0.5213 }, + { 309.0, 3.4949, 216.4805 }, + { 322.2, 0.9614, 203.7379 }, + { 372.3, 2.2782, 217.2312 }, + { 321.5, 2.5718, 647.0108 }, + { 330.2, 0.2472, 1581.9593 }, + { 249.1, 1.4701, 1368.6603 }, + { 286.7, 2.3704, 351.8166 }, + { 220.2, 4.2042, 200.7689 }, + { 277.8, 0.4002, 211.8146 }, + { 204.5, 6.0108, 265.9893 }, + { 207.7, 0.4835, 1162.4747 }, + { 208.7, 1.3452, 625.6702 }, + { 182.5, 5.4912, 2.9208 }, + { 226.6, 4.9100, 12.5302 }, + { 207.7, 1.2830, 39.3569 }, + { 173.9, 1.8631, 0.7508 }, + { 184.7, 3.5034, 149.5632 }, + { 183.5, 0.9725, 4.1928 }, + { 146.1, 6.2310, 195.1398 }, + { 164.5, 0.4401, 5.4166 }, + { 147.5, 1.5353, 5.6291 }, + { 139.7, 4.2945, 21.3406 }, + { 131.3, 4.0683, 10.2949 }, + { 117.3, 2.6792, 1155.3612 }, + { 149.3, 5.7359, 52.6902 }, + { 122.4, 1.9759, 4.6659 }, + { 113.7, 5.5943, 1059.3819 }, + { 102.7, 1.1975, 1685.0521 }, + { 118.2, 5.3407, 554.0700 }, + { 109.3, 3.4381, 536.8045 }, + { 110.4, 0.1660, 1.4845 }, + { 125.0, 6.2774, 1898.3512 }, + { 89.9, 5.804, 114.138 }, + { 104.0, 2.1921, 88.8657 }, + { 112.4, 1.1050, 191.2077 }, + { 106.6, 4.0116, 956.2892 }, + { 91.4, 1.875, 38.133 }, + { 83.8, 5.488, 0.112 }, + { 83.5, 2.290, 628.852 }, + { 97.0, 4.537, 302.165 }, + { 100.6, 4.9651, 269.9214 }, + { 75.5, 2.180, 728.763 }, + { 96.3, 2.833, 275.551 }, + { 82.4, 3.055, 440.825 }, + { 73.9, 5.089, 1375.774 }, + { 71.6, 5.109, 65.220 }, + { 70.4, 4.868, 0.212 }, + { 69.8, 3.710, 14.978 }, + { 88.8, 3.863, 278.519 }, + { 68.1, 0.734, 1478.867 }, + { 66.5, 0.027, 70.849 }, + { 65.7, 2.022, 142.450 }, + { 75.8, 1.614, 284.149 }, + { 63.2, 3.495, 479.288 }, + { 62.5, 2.587, 422.666 }, + { 69.3, 3.440, 515.464 }, + { 79.0, 4.452, 35.425 }, + { 63.7, 3.317, 62.251 }, + { 52.9, 5.514, 0.261 }, + { 53.0, 3.185, 8.077 }, + { 54.5, 2.457, 22.091 }, + { 50.5, 4.267, 99.161 }, + { 55.2, 0.968, 942.062 }, + { 49.3, 2.386, 1471.753 }, + { 47.2, 2.025, 312.199 }, + { 61.1, 1.503, 210.851 }, + { 45.1, 0.931, 2001.444 }, + { 60.6, 2.687, 388.465 }, + { 43.5, 2.526, 288.081 }, + { 42.5, 3.818, 330.619 }, + { 39.9, 5.714, 408.439 }, + { 50.1, 6.032, 2214.743 }, + { 45.9, 0.542, 212.336 }, + { 54.2, 0.782, 191.958 }, + { 47.0, 4.599, 437.644 }, + { 42.4, 1.901, 430.530 }, + { 39.7, 1.633, 1066.495 }, + { 36.3, 0.848, 213.347 }, + { 35.5, 4.186, 215.747 }, + { 36.3, 3.933, 213.251 }, + { 38.0, 0.313, 423.417 }, + { 44.7, 1.125, 6.150 }, + { 37.9, 1.198, 2.708 }, + { 43.4, 1.374, 563.631 }, + { 43.8, 3.930, 525.498 }, + { 34.8, 1.016, 203.004 }, + { 31.8, 1.693, 0.160 }, + { 30.9, 6.135, 417.037 }, + { 36.4, 6.006, 18.159 }, + { 29.0, 1.197, 404.507 }, + { 32.8, 0.536, 107.025 }, + { 30.4, 0.723, 222.860 }, + { 32.6, 0.812, 1795.258 }, + { 37.8, 3.697, 1272.681 }, + { 27.7, 1.457, 7.162 }, + { 27.2, 1.897, 1045.155 }, + { 37.7, 4.520, 24.379 }, + { 34.9, 4.461, 214.262 }, + { 32.6, 0.664, 692.587 }, + { 30.3, 5.304, 33.940 }, + { 27.5, 6.227, 1.272 }, + { 26.7, 4.567, 7.065 }, + { 31.7, 5.498, 56.622 }, + { 28.1, 5.644, 128.956 }, + { 32.0, 5.223, 92.047 }, + { 27.0, 0.067, 205.222 }, + { 31.8, 5.592, 6069.777 }, + { 31.0, 0.372, 703.633 }, + { 29.4, 0.147, 131.404 }, + { 26.2, 5.413, 140.002 }, + { 25.7, 4.360, 32.243 }, + /* 165 terms retained, 987 terms dropped, error 1.4" */ + + /* saturn l, T^1 */ + { 21354295596.0, 0, 0 }, + { 1296855.0, 1.82820545, 213.29909544 }, + { 564347.6, 2.8850014, 7.1135470 }, + { 98323.0, 1.080701, 426.598191 }, + { 107678.8, 2.2776991, 206.1855484 }, + { 40254.6, 2.041283, 220.412642 }, + { 19941.7, 1.279547, 103.092774 }, + { 10511.7, 2.748804, 14.227094 }, + { 6939.2, 0.40493, 639.89729 }, + { 4803.3, 2.44194, 419.48464 }, + { 4056.3, 2.92167, 110.20632 }, + { 3768.6, 3.64966, 3.93215 }, + { 3384.7, 2.41694, 3.18139 }, + { 3302.2, 1.26256, 433.71174 }, + { 3071.4, 2.32739, 199.07200 }, + { 1953.0, 3.56395, 11.04570 }, + { 1249.3, 2.62804, 95.97923 }, + { 921.7, 1.9609, 227.5262 }, + { 705.6, 4.4169, 529.6910 }, + { 649.7, 6.1742, 202.2534 }, + { 627.6, 6.1109, 309.2783 }, + { 486.8, 6.0400, 853.1964 }, + { 468.4, 4.6171, 63.7359 }, + { 478.5, 4.9878, 522.5774 }, + { 417.0, 2.1171, 323.5054 }, + { 407.6, 1.2995, 209.3669 }, + { 343.8, 3.9585, 412.3711 }, + { 339.7, 3.6340, 316.3919 }, + { 335.9, 3.7717, 735.8765 }, + { 331.9, 2.8608, 210.1177 }, + { 352.5, 2.3171, 632.7837 }, + { 289.4, 2.7326, 117.3199 }, + { 265.8, 0.5434, 647.0108 }, + { 230.5, 1.6443, 216.4805 }, + { 280.9, 5.7440, 2.4477 }, + { 191.7, 2.9651, 224.3448 }, + { 172.9, 4.0770, 846.0828 }, + { 167.1, 2.5975, 21.3406 }, + { 136.3, 2.2858, 10.2949 }, + { 131.4, 3.4411, 742.9901 }, + { 127.8, 4.0953, 217.2312 }, + { 108.9, 6.1614, 415.5525 }, + { 93.9, 3.484, 1052.268 }, + { 92.5, 3.948, 88.866 }, + { 97.6, 4.728, 838.969 }, + { 86.6, 1.220, 440.825 }, + { 83.5, 3.113, 625.670 }, + { 77.6, 6.244, 302.165 }, + { 61.6, 1.828, 195.140 }, + { 61.9, 4.293, 127.472 }, + { 67.1, 0.290, 4.666 }, + { 56.9, 5.019, 137.033 }, + { 54.2, 5.126, 490.334 }, + { 54.6, 0.284, 74.782 }, + { 51.4, 1.458, 536.805 }, + { 65.8, 5.648, 9.561 }, + { 57.8, 2.476, 191.958 }, + { 44.4, 2.709, 5.417 }, + { 46.8, 1.177, 149.563 }, + { 40.4, 3.889, 728.763 }, + { 37.8, 2.534, 12.530 }, + { 46.6, 5.148, 515.464 }, + { 45.9, 2.232, 956.289 }, + { 40.4, 0.413, 269.921 }, + { 37.2, 3.782, 2.921 }, + { 33.8, 3.211, 1368.660 }, + { 38.0, 0.647, 422.666 }, + { 32.9, 0.301, 351.817 }, + { 33.0, 5.430, 1066.495 }, + { 30.3, 2.841, 203.004 }, + { 35.1, 6.084, 5.629 }, + { 29.7, 3.391, 1059.382 }, + { 33.2, 4.641, 277.035 }, + { 31.9, 4.386, 1155.361 }, + { 28.9, 2.026, 330.619 }, + { 28.3, 2.742, 265.989 }, + { 30.1, 6.187, 284.149 }, + { 31.3, 2.435, 52.690 }, + { 26.5, 4.512, 340.771 }, + { 22.0, 5.144, 4.193 }, + { 22.2, 1.965, 203.738 }, + { 20.8, 6.160, 860.310 }, + { 21.7, 2.676, 942.062 }, + { 22.6, 5.886, 210.851 }, + { 19.8, 2.313, 437.644 }, + { 19.4, 4.766, 70.849 }, + { 19.3, 4.102, 18.159 }, + { 22.7, 4.137, 191.208 }, + { 18.2, 0.903, 429.780 }, + { 17.7, 1.850, 234.640 }, + { 17.5, 2.447, 423.417 }, + { 15.4, 4.238, 1162.475 }, + { 14.6, 3.597, 1045.155 }, + { 14.1, 2.943, 1685.052 }, + { 16.3, 4.057, 949.176 }, + { 13.3, 6.245, 38.133 }, + { 15.9, 1.064, 56.622 }, + { 14.1, 1.435, 408.439 }, + { 13.1, 5.758, 138.517 }, + { 15.8, 5.594, 6.150 }, + { 15.0, 5.772, 22.091 }, + { 16.0, 1.939, 1272.681 }, + { 16.8, 5.967, 628.852 }, + { 12.8, 4.247, 405.258 }, + { 13.6, 4.099, 1471.753 }, + { 15.1, 0.741, 200.769 }, + { 11.0, 1.550, 223.594 }, + { 11.7, 1.812, 124.433 }, + { 10.3, 3.468, 1375.774 }, + { 12.1, 1.857, 131.404 }, + { 10.1, 2.382, 107.025 }, + { 9.9, 3.95, 430.53 }, + { 9.8, 2.55, 99.91 }, + { 10.6, 5.367, 215.747 }, + { 12.1, 4.845, 831.856 }, + { 10.2, 6.077, 32.243 }, + { 9.2, 3.65, 142.45 }, + { 9.0, 1.24, 106.27 }, + { 9.3, 5.81, 7.16 }, + { 9.7, 1.39, 145.63 }, + { 8.4, 4.42, 703.63 }, + { 8.4, 5.64, 62.25 }, + { 8.2, 2.42, 1258.45 }, + { 7.8, 0.53, 654.12 }, + { 7.6, 3.75, 312.20 }, + { 7.2, 0.28, 0.75 }, + { 8.2, 6.22, 14.98 }, + { 7.1, 0.53, 388.47 }, + { 6.6, 3.49, 35.42 }, + { 9.0, 4.95, 208.63 }, + { 9.0, 0.08, 288.08 }, + { 6.4, 3.33, 1361.55 }, + { 6.5, 2.89, 114.14 }, + { 6.7, 0.24, 8.08 }, + { 7.3, 4.85, 222.86 }, + { 6.3, 3.81, 1788.14 }, + { 6.9, 2.05, 99.16 }, + { 6.6, 5.83, 483.22 }, + /* 138 terms retained, 504 terms dropped, error 0.32"*T */ + + /* saturn l, T^2 */ + { 116441.2, 1.1798785, 7.1135470 }, + { 91920.8, 0.074253, 213.299095 }, + { 90592.3, 0, 0 }, + { 15276.9, 4.064920, 206.185548 }, + { 10631.4, 0.257783, 220.412642 }, + { 10605.0, 5.409636, 426.598191 }, + { 4265.4, 1.04596, 14.22709 }, + { 1215.5, 2.91860, 103.09277 }, + { 1164.7, 4.60942, 639.89729 }, + { 1082.0, 5.69130, 433.71174 }, + { 1020.1, 0.63369, 3.18139 }, + { 1044.8, 4.04206, 199.07200 }, + { 633.6, 4.3883, 419.4846 }, + { 549.3, 5.5730, 3.9322 }, + { 456.9, 1.2684, 110.2063 }, + { 425.1, 0.2094, 227.5262 }, + { 273.7, 4.2884, 95.9792 }, + { 161.6, 1.3814, 11.0457 }, + { 129.5, 1.5659, 309.2783 }, + { 117.0, 3.8812, 853.1964 }, + { 105.4, 4.9000, 647.0108 }, + { 101.0, 0.8927, 21.3406 }, + { 95.2, 5.626, 412.371 }, + { 81.9, 1.025, 117.320 }, + { 74.9, 4.762, 210.118 }, + { 82.7, 6.050, 216.480 }, + { 95.7, 2.911, 316.392 }, + { 63.7, 0.352, 323.505 }, + { 84.9, 5.735, 209.367 }, + { 60.6, 4.875, 632.784 }, + { 66.5, 0.483, 10.295 }, + { 67.2, 0.456, 522.577 }, + { 53.3, 2.747, 529.691 }, + { 45.8, 5.693, 440.825 }, + { 45.3, 1.669, 202.253 }, + { 42.3, 5.708, 88.866 }, + { 32.1, 0.071, 63.736 }, + { 31.6, 1.672, 302.165 }, + { 31.1, 4.164, 191.958 }, + { 24.6, 5.656, 735.877 }, + { 26.6, 0.833, 224.345 }, + { 20.1, 5.944, 217.231 }, + { 17.5, 4.900, 625.670 }, + { 17.1, 1.626, 742.990 }, + { 13.7, 3.765, 195.140 }, + { 12.2, 4.718, 203.004 }, + { 11.9, 0.126, 234.640 }, + { 16.0, 0.579, 515.464 }, + { 11.2, 5.922, 536.805 }, + { 14.1, 0.207, 838.969 }, + { 11.0, 5.602, 728.763 }, + { 11.7, 3.121, 846.083 }, + { 10.0, 4.155, 860.310 }, + { 10.6, 3.203, 1066.495 }, + { 10.1, 0.257, 330.619 }, + { 9.5, 0.46, 956.29 }, + { 10.2, 4.987, 422.666 }, + { 8.3, 2.14, 269.92 }, + { 7.2, 5.40, 1052.27 }, + { 7.7, 5.25, 429.78 }, + { 6.4, 4.46, 284.15 }, + { 5.9, 5.41, 149.56 }, + { 7.5, 4.03, 9.56 }, + { 5.8, 4.29, 415.55 }, + { 6.1, 5.93, 405.26 }, + { 5.7, 0.02, 124.43 }, + { 5.7, 6.02, 223.59 }, + { 4.8, 4.93, 654.12 }, + { 4.7, 2.27, 18.16 }, + { 4.5, 4.41, 942.06 }, + { 5.6, 0.30, 127.47 }, + { 5.5, 5.54, 949.18 }, + { 4.1, 4.69, 74.78 }, + { 4.1, 5.31, 1045.15 }, + { 4.2, 2.89, 56.62 }, + { 4.9, 3.20, 277.03 }, + { 3.9, 3.30, 490.33 }, + { 3.9, 6.10, 81.75 }, + { 3.8, 4.93, 52.69 }, + { 4.6, 6.14, 1155.36 }, + { 3.7, 0.41, 137.03 }, + { 3.4, 4.29, 99.91 }, + { 3.6, 0.20, 1272.68 }, + { 3.9, 0.37, 12.53 }, + { 3.2, 1.57, 1059.38 }, + { 4.1, 0.29, 831.86 }, + { 3.7, 0.15, 437.64 }, + { 2.9, 3.13, 70.85 }, + { 2.8, 0.33, 191.21 }, + { 2.7, 1.88, 295.05 }, + { 3.5, 4.77, 423.42 }, + { 2.6, 5.15, 1368.66 }, + { 2.5, 3.90, 210.85 }, + { 2.5, 1.59, 32.24 }, + { 2.6, 3.59, 131.40 }, + { 2.3, 4.77, 351.82 }, + { 2.4, 5.83, 106.27 }, + { 2.2, 5.98, 6062.66 }, + { 2.2, 2.06, 6076.89 }, + { 2.2, 5.95, 145.63 }, + { 2.7, 3.38, 408.44 }, + { 2.3, 3.14, 22.09 }, + { 2.1, 1.12, 9992.87 }, + { 2.1, 3.48, 10007.10 }, + { 2.6, 5.12, 265.99 }, + { 1.8, 4.15, 1258.45 }, + { 1.8, 5.05, 1361.55 }, + { 1.8, 4.14, 107.02 }, + { 1.9, 4.52, 138.52 }, + { 1.7, 1.36, 231.46 }, + { 2.0, 5.87, 1471.75 }, + { 2.1, 5.23, 1265.57 }, + { 1.6, 5.62, 447.94 }, + { 1.6, 3.75, 628.85 }, + { 1.7, 6.24, 1148.25 }, + /* 115 terms retained, 206 terms dropped, error 0.074"*T^2 */ + + /* saturn l, T^3 */ + { 16038.7, 5.739454, 7.113547 }, + { 4249.8, 4.58540, 213.29910 }, + { 1906.5, 4.76082, 220.41264 }, + { 1465.7, 5.91327, 206.18555 }, + { 1162.0, 5.61973, 14.22709 }, + { 1066.6, 3.60817, 426.59819 }, + { 239.4, 3.8609, 433.7117 }, + { 237.0, 5.7683, 199.0720 }, + { 165.6, 5.1164, 3.1814 }, + { 131.4, 4.7433, 227.5262 }, + { 151.4, 2.7359, 639.8973 }, + { 61.6, 4.743, 103.093 }, + { 63.4, 0.229, 419.485 }, + { 40.4, 5.473, 21.341 }, + { 40.2, 5.964, 95.979 }, + { 38.7, 5.834, 110.206 }, + { 28.0, 3.012, 647.011 }, + { 25.0, 0.988, 3.932 }, + { 18.1, 1.025, 412.371 }, + { 17.9, 3.319, 309.278 }, + { 16.2, 3.898, 440.825 }, + { 15.8, 5.617, 117.320 }, + { 19.0, 1.916, 853.196 }, + { 18.3, 4.967, 10.295 }, + { 12.9, 1.181, 88.866 }, + { 17.9, 4.204, 216.480 }, + { 11.5, 5.575, 11.046 }, + { 10.5, 5.929, 191.958 }, + { 10.4, 3.948, 209.367 }, + { 8.7, 3.39, 302.16 }, + { 7.6, 4.88, 323.51 }, + { 6.7, 0.38, 632.78 }, + { 5.9, 1.06, 210.12 }, + { 5.4, 4.64, 234.64 }, + { 6.3, 2.25, 522.58 }, + { 3.6, 2.31, 515.46 }, + { 3.2, 2.20, 860.31 }, + { 3.7, 3.14, 0 }, + { 2.6, 4.93, 224.34 }, + { 2.5, 0.42, 625.67 }, + { 2.2, 3.20, 202.25 }, + { 2.4, 4.77, 330.62 }, + { 2.9, 0.59, 529.69 }, + { 2.0, 4.40, 124.43 }, + { 2.2, 1.35, 405.26 }, + { 2.3, 3.35, 429.78 }, + { 2.0, 3.07, 654.12 }, + { 2.0, 1.03, 728.76 }, + { 1.9, 3.09, 422.67 }, + { 1.8, 4.15, 536.80 }, + { 2.2, 1.19, 1066.50 }, + { 2.1, 4.16, 223.59 }, + { 1.5, 0.38, 316.39 }, + { 1.7, 5.83, 195.14 }, + { 1.5, 1.58, 81.75 }, + { 1.6, 6.04, 742.99 }, + { 1.3, 1.66, 63.74 }, + { 1.3, 5.02, 956.29 }, + { 1.4, 2.11, 838.97 }, + { 1.2, 3.88, 269.92 }, + { 1.0, 3.73, 295.05 }, + { 1.3, 1.38, 735.88 }, + { 1.3, 2.33, 217.23 }, + { 0.9, 2.76, 284.15 }, + { 0.9, 0.71, 846.08 }, + { 0.9, 3.84, 447.94 }, + { 0.9, 3.31, 18.16 }, + { 0.8, 4.71, 56.62 }, + { 0.9, 2.02, 831.86 }, + { 0.8, 0.80, 1045.15 }, + { 0.7, 4.27, 437.64 }, + { 0.7, 6.18, 942.06 }, + { 0.8, 2.41, 203.00 }, + { 0.7, 1.65, 423.42 }, + { 0.5, 2.86, 184.84 }, + { 0.5, 6.26, 1059.38 }, + { 0.5, 3.43, 149.56 }, + { 0.5, 4.88, 1272.68 }, + { 0.4, 5.40, 408.44 }, + { 0.4, 4.06, 543.92 }, + { 0.4, 1.69, 1155.36 }, + { 0.4, 1.22, 1052.27 }, + /* 82 terms retained, 66 terms dropped, error 0.015"*T^3 */ + + /* saturn l, T^4 */ + { 1661.9, 3.99826, 7.11355 }, + { 257.1, 2.9844, 220.4126 }, + { 236.3, 3.9024, 14.2271 }, + { 149.4, 2.7411, 213.2991 }, + { 109.6, 1.5152, 206.1855 }, + { 114.0, 3.1416, 0 }, + { 68.4, 1.721, 426.598 }, + { 37.7, 1.238, 199.072 }, + { 40.1, 2.046, 433.712 }, + { 31.2, 3.011, 227.526 }, + { 15.1, 0.829, 639.897 }, + { 9.4, 3.71, 21.34 }, + { 5.7, 2.42, 419.48 }, + { 4.5, 1.45, 95.98 }, + { 5.6, 1.16, 647.01 }, + { 4.5, 2.12, 440.83 }, + { 3.2, 4.09, 110.21 }, + { 2.9, 2.77, 412.37 }, + { 2.8, 3.01, 88.87 }, + { 2.6, 0.00, 853.20 }, + { 2.6, 0.39, 103.09 }, + { 1.9, 5.08, 309.28 }, + { 2.2, 3.78, 117.32 }, + { 1.8, 5.19, 302.16 }, + { 1.9, 2.83, 234.64 }, + { 1.8, 2.24, 216.48 }, + { 1.2, 1.55, 191.96 }, + { 0.8, 3.45, 323.51 }, + { 0.8, 4.83, 210.12 }, + { 0.6, 4.19, 515.46 }, + { 0.6, 2.29, 209.37 }, + { 0.6, 4.03, 522.58 }, + { 0.6, 2.38, 632.78 }, + { 0.6, 0.30, 860.31 }, + { 0.6, 2.17, 124.43 }, + { 0.4, 2.24, 447.94 }, + { 0.4, 5.45, 1066.50 }, + { 0.5, 1.27, 654.12 }, + { 0.5, 3.20, 405.26 }, + { 0.4, 3.12, 330.62 }, + { 0.4, 3.39, 81.75 }, + { 0.3, 4.12, 838.97 }, + { 0.3, 3.18, 529.69 }, + { 0.3, 1.41, 429.78 }, + { 0.3, 3.19, 1464.64 }, + { 0.3, 2.94, 728.76 }, + { 0.2, 3.67, 1148.25 }, + { 0.3, 2.58, 1045.15 }, + { 0.2, 3.58, 1155.36 }, + { 0.3, 2.05, 1677.94 }, + { 0.2, 2.62, 536.80 }, + { 0.3, 2.48, 625.67 }, + { 0.2, 4.39, 1574.85 }, + { 0.2, 1.26, 422.67 }, + { 0.2, 2.33, 223.59 }, + { 0.2, 1.09, 742.99 }, + { 0.2, 0.70, 824.74 }, + { 0.2, 5.03, 203.00 }, + { 0.2, 0.40, 867.42 }, + { 0.2, 3.68, 831.86 }, + { 0.2, 5.75, 1073.61 }, + { 0.2, 3.02, 1781.03 }, + { 0.1, 2.28, 295.05 }, + { 0.1, 3.48, 956.29 }, + { 0.2, 1.91, 942.06 }, + { 0.1, 6.17, 316.39 }, + /* 66 terms retained, 2 terms dropped, error 0.0049"*T^4 */ + + /* saturn l, T^5 */ + { 123.6, 2.2592, 7.1135 }, + { 34.2, 2.163, 14.227 }, + { 27.5, 1.199, 220.413 }, + { 5.8, 1.22, 227.53 }, + { 5.3, 0.24, 433.71 }, + { 3.7, 6.23, 426.60 }, + { 3.1, 2.97, 199.07 }, + { 2.9, 4.29, 206.19 }, + { 1.6, 6.25, 213.30 }, + { 1.3, 5.28, 639.90 }, + { 0.9, 5.57, 647.01 }, + { 0.8, 6.18, 191.96 }, + { 0.8, 0.69, 302.16 }, + { 1.0, 0.24, 440.83 }, + { 1.0, 3.14, 0 }, + { 0.5, 4.88, 88.87 }, + { 0.5, 4.78, 419.48 }, + { 0.3, 4.32, 853.20 }, + { 0.4, 5.70, 654.12 }, + { 0.2, 2.05, 323.51 }, + { 0.3, 1.11, 234.64 }, + { 0.2, 0.89, 309.28 }, + { 0.3, 5.10, 95.98 }, + { 0.2, 2.40, 515.46 }, + { 0.2, 4.70, 860.31 }, + { 0.1, 0.49, 117.32 }, + /* 26 terms retained, 1 terms dropped, error 0.0022"*T^5 */ + /* end saturn l */ + + /* saturn b, T^0 */ + { 4330678.0, 3.60284428, 213.29909544 }, + { 240348.3, 2.8523849, 426.5981909 }, + { 84745.9, 0, 0 }, + { 30863.4, 3.484415, 220.412642 }, + { 34116.1, 0.572973, 206.185548 }, + { 14734.1, 2.118466, 639.897286 }, + { 9916.7, 5.79003, 419.48464 }, + { 6993.6, 4.73605, 7.11355 }, + { 4807.6, 5.43305, 316.39187 }, + { 4788.4, 4.96513, 110.20632 }, + { 3432.1, 2.73256, 433.71174 }, + { 1506.1, 6.01305, 103.09277 }, + { 1060.3, 5.63099, 529.69097 }, + { 969.1, 5.2043, 632.7837 }, + { 942.1, 1.3965, 853.1964 }, + { 707.6, 3.8030, 323.5054 }, + { 552.3, 5.1315, 202.2534 }, + { 399.7, 3.3589, 227.5262 }, + { 316.1, 1.9972, 647.0108 }, + { 319.4, 3.6257, 209.3669 }, + { 284.5, 4.8865, 224.3448 }, + { 314.2, 0.4651, 217.2312 }, + { 236.4, 2.1389, 11.0457 }, + { 215.4, 5.9498, 846.0828 }, + { 208.5, 2.1200, 415.5525 }, + { 179.0, 2.9536, 63.7359 }, + { 207.2, 0.7302, 199.0720 }, + { 139.1, 1.9982, 735.8765 }, + { 134.9, 5.2450, 742.9901 }, + { 140.6, 0.6442, 490.3341 }, + { 121.7, 3.1154, 522.5774 }, + { 139.2, 4.5954, 14.2271 }, + { 115.5, 3.1089, 216.4805 }, + { 114.2, 0.9626, 210.1177 }, + { 96.4, 4.482, 117.320 }, + { 80.6, 1.317, 277.035 }, + { 73.0, 3.060, 536.805 }, + { 69.3, 4.924, 309.278 }, + { 74.3, 2.894, 149.563 }, + { 68.0, 2.180, 351.817 }, + { 61.7, 0.677, 1066.495 }, + { 56.6, 2.610, 440.825 }, + { 48.9, 5.787, 95.979 }, + { 48.2, 2.182, 74.782 }, + { 38.3, 5.292, 1059.382 }, + { 36.3, 1.633, 628.852 }, + { 35.1, 1.713, 1052.268 }, + { 34.3, 2.457, 422.666 }, + { 34.3, 5.980, 412.371 }, + { 33.8, 1.141, 949.176 }, + { 31.6, 4.147, 437.644 }, + { 36.8, 6.278, 1162.475 }, + { 27.0, 1.272, 860.310 }, + /* 53 terms retained, 447 terms dropped, error 0.82" */ + + /* saturn b, T^1 */ + { 397555.0, 5.3328999, 213.2990954 }, + { 49478.6, 3.141593, 0 }, + { 18571.6, 6.099192, 426.598191 }, + { 14800.6, 2.305861, 206.185548 }, + { 9644.0, 1.69675, 220.41264 }, + { 3757.2, 1.25430, 419.48464 }, + { 2716.6, 5.91167, 639.89729 }, + { 1455.3, 0.85162, 433.71174 }, + { 1290.6, 2.91771, 7.11355 }, + { 852.6, 0.4357, 316.3919 }, + { 284.4, 1.6188, 227.5262 }, + { 292.2, 5.3157, 853.1964 }, + { 275.1, 3.8886, 103.0928 }, + { 297.7, 0.9191, 632.7837 }, + { 172.4, 0.0522, 647.0108 }, + { 127.7, 1.2071, 529.6910 }, + { 166.2, 2.4435, 199.0720 }, + { 158.2, 5.2085, 110.2063 }, + { 109.8, 2.4570, 217.2312 }, + { 81.8, 2.758, 210.118 }, + { 81.0, 2.860, 14.227 }, + { 68.7, 1.655, 202.253 }, + { 59.3, 1.824, 323.505 }, + { 65.2, 1.255, 216.480 }, + { 61.0, 1.253, 209.367 }, + { 46.4, 0.815, 440.825 }, + { 36.2, 1.819, 224.345 }, + { 34.0, 2.840, 117.320 }, + { 32.2, 1.187, 846.083 }, + { 33.1, 1.306, 412.371 }, + { 27.3, 4.647, 1066.495 }, + { 22.8, 4.129, 415.552 }, + { 27.1, 4.442, 11.046 }, + { 18.1, 5.564, 860.310 }, + { 20.9, 1.410, 309.278 }, + { 14.9, 1.343, 95.979 }, + { 15.3, 1.224, 63.736 }, + { 14.6, 1.008, 536.805 }, + { 12.8, 2.271, 742.990 }, + { 12.8, 4.889, 522.577 }, + { 13.1, 2.460, 490.334 }, + { 11.9, 1.873, 423.417 }, + { 13.0, 3.217, 277.035 }, + { 9.9, 3.12, 625.67 }, + { 12.7, 0.295, 422.666 }, + { 9.6, 1.75, 330.62 }, + { 8.1, 2.42, 430.53 }, + { 8.2, 4.68, 215.75 }, + { 9.0, 0.46, 429.78 }, + { 6.5, 3.01, 949.18 }, + { 7.3, 5.97, 149.56 }, + { 6.6, 3.91, 351.82 }, + { 6.8, 1.52, 437.64 }, + /* 53 terms retained, 207 terms dropped, error 0.21"*T */ + + /* saturn b, T^2 */ + { 20630.0, 0.504824, 213.299095 }, + { 3719.6, 3.99833, 206.18555 }, + { 1627.2, 6.18190, 220.41264 }, + { 1346.1, 0, 0 }, + { 705.8, 3.0391, 419.4846 }, + { 365.0, 5.0993, 426.5982 }, + { 329.6, 5.2790, 433.7117 }, + { 219.3, 3.8284, 639.8973 }, + { 139.4, 1.0427, 7.1135 }, + { 104.0, 6.1573, 227.5262 }, + { 93.0, 1.980, 316.392 }, + { 71.2, 4.148, 199.072 }, + { 51.9, 2.884, 632.784 }, + { 49.0, 4.434, 647.011 }, + { 41.4, 3.159, 853.196 }, + { 28.6, 4.530, 210.118 }, + { 24.0, 1.116, 14.227 }, + { 20.5, 4.351, 217.231 }, + { 19.5, 5.308, 440.825 }, + { 18.3, 0.854, 110.206 }, + { 15.7, 4.258, 103.093 }, + { 16.8, 5.681, 216.480 }, + { 13.6, 2.999, 412.371 }, + { 11.6, 2.527, 529.691 }, + { 8.0, 3.32, 202.25 }, + { 6.6, 0.29, 323.51 }, + { 6.3, 1.16, 117.32 }, + { 5.9, 3.58, 309.28 }, + { 6.6, 5.56, 209.37 }, + { 5.6, 2.48, 1066.50 }, + { 6.2, 3.61, 860.31 }, + { 4.2, 3.02, 846.08 }, + { 3.6, 4.80, 625.67 }, + { 3.4, 3.77, 423.42 }, + { 3.4, 6.04, 234.64 }, + { 2.6, 5.64, 735.88 }, + { 2.8, 4.82, 429.78 }, + { 2.8, 4.48, 654.12 }, + { 2.6, 0.22, 522.58 }, + { 2.6, 3.29, 95.98 }, + { 2.4, 0.03, 415.55 }, + { 2.1, 4.56, 422.67 }, + { 2.3, 6.25, 330.62 }, + { 1.8, 5.53, 536.80 }, + { 1.8, 5.06, 277.03 }, + { 1.6, 5.54, 224.34 }, + /* 46 terms retained, 65 terms dropped, error 0.045"*T^2 */ + + /* saturn b, T^3 */ + { 666.3, 1.9901, 213.2991 }, + { 632.4, 5.6978, 206.1855 }, + { 398.1, 0, 0 }, + { 187.8, 4.3378, 220.4126 }, + { 91.9, 4.841, 419.485 }, + { 42.4, 2.381, 426.598 }, + { 51.5, 3.421, 433.712 }, + { 25.7, 4.402, 227.526 }, + { 20.6, 5.853, 199.072 }, + { 18.1, 1.993, 639.897 }, + { 10.9, 5.373, 7.114 }, + { 9.6, 2.55, 647.01 }, + { 7.1, 3.46, 316.39 }, + { 6.0, 4.80, 632.78 }, + { 5.8, 0.02, 210.12 }, + { 4.9, 5.64, 14.23 }, + { 4.5, 1.22, 853.20 }, + { 5.5, 3.52, 440.83 }, + { 3.5, 4.71, 412.37 }, + { 2.9, 0.63, 103.09 }, + { 2.2, 3.72, 216.48 }, + { 2.0, 6.11, 217.23 }, + { 1.4, 1.69, 860.31 }, + { 1.2, 4.31, 234.64 }, + { 1.2, 5.75, 309.28 }, + { 0.8, 5.69, 117.32 }, + { 0.7, 0.60, 1066.50 }, + { 0.7, 0.22, 625.67 }, + { 0.8, 5.48, 202.25 }, + { 0.9, 2.66, 654.12 }, + { 0.5, 2.86, 429.78 }, + { 0.5, 4.18, 529.69 }, + { 0.5, 4.52, 323.51 }, + /* 33 terms retained, 25 terms dropped, error 0.012"*T^3 */ + + /* saturn b, T^4 */ + { 80.4, 1.119, 206.186 }, + { 31.7, 3.122, 213.299 }, + { 17.1, 2.481, 220.413 }, + { 11.8, 3.142, 0 }, + { 9.0, 0.38, 419.48 }, + { 6.2, 1.56, 433.71 }, + { 4.7, 1.28, 199.07 }, + { 4.8, 2.63, 227.53 }, + { 1.5, 1.43, 426.60 }, + { 1.4, 0.67, 647.01 }, + { 1.1, 6.18, 639.90 }, + { 1.1, 1.72, 440.83 }, + { 0.7, 3.85, 14.23 }, + { 0.7, 3.49, 7.11 }, + { 0.5, 0.47, 632.78 }, + { 0.5, 0.31, 412.37 }, + { 0.3, 5.86, 853.20 }, + { 0.3, 2.50, 234.64 }, + { 0.2, 5.39, 316.39 }, + { 0.2, 2.11, 210.12 }, + { 0.2, 6.10, 860.31 }, + { 0.2, 5.95, 216.48 }, + { 0.1, 1.99, 625.67 }, + { 0.1, 0.86, 654.12 }, + { 0.1, 5.04, 117.32 }, + { 0.1, 0.45, 110.21 }, + /* 26 terms retained, 0 terms dropped, error 0.0025"*T^4 */ + + /* saturn b, T^5 */ + { 7.9, 2.82, 206.19 }, + { 1.0, 0.51, 220.41 }, + { 0.8, 2.99, 199.07 }, + { 1.0, 3.14, 0 }, + { 0.6, 5.96, 433.71 }, + { 0.6, 0.78, 227.53 }, + { 0.4, 2.39, 419.48 }, + { 0.1, 5.11, 647.01 }, + /* 8 terms retained, 3 terms dropped, error 0.0012"*T^5 */ + /* end saturn b */ + + /* saturn r, T^0 */ + { 955758135.8, 0, 0 }, + { 52921382.5, 2.392262197, 213.299095438 }, + { 1873679.9, 5.23549605, 206.18554844 }, + { 1464664.0, 1.64763045, 426.59819088 }, + { 821891.1, 5.9352003, 316.3918697 }, + { 547506.9, 5.0153263, 103.0927742 }, + { 371684.4, 2.2711483, 220.4126424 }, + { 361778.4, 3.1390430, 7.1135470 }, + { 140617.5, 5.7040665, 632.7837393 }, + { 108974.7, 3.2931360, 110.2063212 }, + { 69007.0, 5.940996, 419.484644 }, + { 61053.3, 0.940378, 639.897286 }, + { 48913.0, 1.557334, 202.253395 }, + { 34143.8, 0.195186, 277.034994 }, + { 32401.7, 5.470846, 949.175609 }, + { 20936.6, 0.463492, 735.876514 }, + { 20839.1, 1.521026, 433.711738 }, + { 20746.7, 5.332557, 199.072001 }, + { 15298.5, 3.059437, 529.690965 }, + { 14296.5, 2.604335, 323.505417 }, + { 11993.3, 5.980514, 846.082835 }, + { 11380.3, 1.731057, 522.577418 }, + { 12884.1, 1.648923, 138.517497 }, + { 7752.8, 5.85191, 95.97923 }, + { 9796.1, 5.20476, 1265.56748 }, + { 6466.0, 0.17733, 1052.26838 }, + { 6770.6, 3.00433, 14.22709 }, + { 5850.4, 1.45520, 415.55249 }, + { 5307.5, 0.59738, 63.73590 }, + { 4695.7, 2.14919, 227.52619 }, + { 4044.0, 1.64010, 209.36694 }, + { 3688.1, 0.78016, 412.37110 }, + { 3376.5, 3.69528, 224.34480 }, + { 2885.3, 1.38764, 838.96929 }, + { 2976.0, 5.68468, 210.11770 }, + { 3419.6, 4.94549, 1581.95935 }, + { 3460.9, 1.85089, 175.16606 }, + { 3400.6, 0.55387, 350.33212 }, + { 2507.6, 3.53852, 742.99006 }, + { 2448.3, 6.18412, 1368.66025 }, + { 2406.1, 2.96559, 117.31987 }, + { 2881.2, 0.17961, 853.19638 }, + { 2174.0, 0.01509, 340.77089 }, + { 2024.5, 5.05411, 11.04570 }, + { 1740.3, 2.34657, 309.27832 }, + { 1861.4, 5.93362, 625.67019 }, + { 1888.4, 0.02968, 3.93215 }, + { 1610.9, 1.17302, 74.78160 }, + { 1462.6, 1.92588, 216.48049 }, + { 1474.5, 5.67670, 203.73787 }, + { 1395.1, 5.93669, 127.47180 }, + { 1781.2, 0.76314, 217.23125 }, + { 1817.2, 5.77713, 490.33409 }, + { 1472.4, 1.40065, 137.03302 }, + { 1304.1, 0.77236, 647.01083 }, + { 1149.8, 5.74021, 1162.47470 }, + { 1126.7, 4.46708, 265.98929 }, + { 1277.5, 2.98413, 1059.38193 }, + { 1207.1, 0.75286, 351.81659 }, + { 1071.4, 1.13567, 1155.36116 }, + { 1020.9, 5.91234, 1685.05212 }, + { 1315.0, 5.11203, 211.81462 }, + { 1295.6, 4.69184, 1898.35122 }, + { 1099.0, 1.81765, 149.56320 }, + { 998.5, 2.6313, 200.7689 }, + { 985.9, 2.2599, 956.2892 }, + { 932.4, 3.6698, 554.0700 }, + { 664.5, 0.6030, 728.7630 }, + { 659.8, 4.6664, 195.1398 }, + { 617.7, 5.6209, 942.0621 }, + { 626.4, 5.9421, 1478.8666 }, + { 482.2, 1.8407, 479.2884 }, + { 487.7, 2.7937, 3.1814 }, + { 470.1, 0.8385, 1471.7530 }, + { 451.8, 5.6447, 2001.4440 }, + { 553.1, 3.4109, 269.9214 }, + { 534.4, 1.2644, 275.5505 }, + { 472.6, 1.8820, 515.4639 }, + { 405.4, 1.6400, 536.8045 }, + { 517.2, 4.4431, 2214.7431 }, + { 452.8, 3.0035, 302.1648 }, + { 494.3, 2.2863, 278.5195 }, + { 489.8, 5.8063, 191.2077 }, + { 427.5, 0.0574, 284.1485 }, + { 339.8, 1.4020, 440.8253 }, + { 340.6, 0.8909, 628.8516 }, + { 386.0, 1.9970, 1272.6810 }, + { 288.3, 1.1216, 422.6660 }, + { 294.4, 0.4258, 312.1991 }, + { 262.5, 0.3175, 1045.1548 }, + { 295.3, 0.6714, 88.8657 }, + { 343.0, 5.8560, 1795.2584 }, + { 341.1, 2.3759, 525.4982 }, + { 234.0, 4.2276, 114.1385 }, + { 223.7, 2.2813, 330.6190 }, + { 275.8, 0.4783, 38.1330 }, + { 224.6, 0.5475, 1788.1449 }, + { 303.3, 0.8795, 6069.7768 }, + { 292.1, 6.2142, 210.8514 }, + { 226.1, 0.3750, 142.4497 }, + { 277.3, 5.3192, 692.5875 }, + { 242.9, 5.3719, 1258.4539 }, + { 205.6, 0.9576, 288.0807 }, + { 207.6, 5.3813, 2317.8359 }, + { 186.8, 6.0359, 404.5068 }, + { 218.5, 5.2561, 212.3359 }, + { 222.2, 5.9459, 39.3569 }, + { 179.7, 4.4105, 408.4389 }, + { 241.4, 1.1253, 388.4652 }, + { 197.1, 3.9014, 52.6902 }, + { 236.6, 0.9080, 1375.7738 }, + { 171.9, 5.5632, 213.3473 }, + { 169.9, 2.8567, 99.1606 }, + { 214.4, 4.2025, 2531.1350 }, + { 172.0, 2.3654, 213.2509 }, + { 165.7, 2.6368, 215.7468 }, + { 230.9, 5.4946, 191.9585 }, + { 177.6, 0.3816, 430.5303 }, + { 191.5, 2.9591, 437.6439 }, + { 163.2, 3.4583, 617.8059 }, + { 162.3, 5.7305, 203.0042 }, + { 175.1, 5.7140, 1066.4955 }, + { 183.0, 5.6685, 2111.6503 }, + { 150.1, 4.4066, 417.0370 }, + { 187.9, 6.0792, 563.6312 }, + { 145.1, 5.0818, 423.4168 }, + { 137.5, 5.4391, 222.8603 }, + { 172.8, 1.8492, 1589.0729 }, + { 165.5, 2.8913, 214.2623 }, + { 145.7, 1.5657, 831.8557 }, + { 176.9, 2.3032, 9999.9865 }, + { 128.9, 2.5534, 414.0680 }, + { 120.1, 0.0433, 1361.5467 }, + { 143.4, 0.9982, 76.2661 }, + { 108.7, 2.0928, 207.6700 }, + { 132.1, 2.8590, 312.4597 }, + { 112.2, 0.2622, 2104.5368 }, + { 125.2, 4.7835, 205.2223 }, + { 104.4, 3.6367, 65.2204 }, + { 107.4, 3.6706, 212.7778 }, + { 108.6, 2.8549, 21.3406 }, + { 97.7, 5.122, 2634.228 }, + { 109.1, 1.6323, 208.6332 }, + { 96.9, 4.199, 305.346 }, + { 96.5, 2.560, 1692.166 }, + { 85.8, 4.545, 210.378 }, + { 99.2, 5.138, 1574.846 }, + { 112.5, 5.0311, 703.6332 }, + { 84.0, 1.183, 429.780 }, + { 89.0, 5.388, 107.025 }, + { 110.2, 2.4366, 355.7487 }, + { 90.7, 4.209, 213.820 }, + { 95.9, 5.446, 2428.042 }, + { 94.1, 2.398, 483.221 }, + { 85.6, 0.034, 860.310 }, + { 88.8, 4.058, 128.956 }, + { 82.0, 1.665, 62.251 }, + { 91.2, 3.969, 2847.527 }, + { 84.0, 4.608, 177.874 }, + { 88.4, 3.868, 140.002 }, + { 93.3, 0.738, 831.105 }, + { 91.9, 2.950, 35.425 }, + { 87.1, 1.334, 1905.465 }, + { 96.6, 4.844, 131.404 }, + { 71.0, 0.993, 405.258 }, + { 95.3, 2.515, 2.448 }, + { 72.5, 4.632, 245.542 }, + { 82.6, 1.528, 145.631 }, + { 76.7, 3.152, 767.369 }, + { 70.3, 4.043, 173.942 }, + { 86.0, 2.301, 85.827 }, + { 66.5, 4.751, 70.849 }, + { 65.8, 2.469, 280.967 }, + { 64.8, 0.093, 9.561 }, + { 71.6, 0.012, 565.116 }, + { 66.5, 1.080, 339.286 }, + { 63.5, 2.017, 234.640 }, + { 60.8, 5.120, 756.323 }, + { 58.1, 6.057, 1677.939 }, + { 64.2, 1.286, 1148.248 }, + { 73.1, 4.378, 425.114 }, + { 55.0, 3.859, 342.255 }, + { 57.1, 6.267, 2420.929 }, + { 64.1, 4.099, 327.438 }, + { 55.3, 1.605, 543.024 }, + { 58.0, 5.473, 347.884 }, + { 73.6, 3.723, 92.047 }, + { 73.8, 3.570, 1.484 }, + { 64.9, 2.447, 267.474 }, + { 54.4, 3.715, 344.703 }, + { 49.8, 3.935, 192.692 }, + { 49.5, 3.228, 333.657 }, + { 47.5, 3.929, 199.284 }, + { 49.4, 4.903, 217.492 }, + { 62.7, 4.401, 214.784 }, + { 46.4, 2.094, 212.548 }, + { 46.3, 2.640, 10.295 }, + { 54.3, 1.072, 362.862 }, + { 58.7, 2.623, 225.829 }, + { 48.5, 3.152, 216.220 }, + { 46.3, 4.862, 2950.620 }, + { 46.0, 4.973, 198.321 }, + { 46.7, 2.450, 207.149 }, + { 44.9, 1.776, 223.594 }, + { 44.5, 5.560, 264.505 }, + { 55.9, 4.295, 329.725 }, + { 49.6, 5.208, 2744.434 }, + { 58.8, 4.231, 700.664 }, + { 52.6, 3.792, 343.219 }, + { 41.5, 0.745, 125.987 }, + { 47.8, 2.393, 207.882 }, + { 56.2, 2.072, 124.433 }, + { 43.3, 1.837, 106.274 }, + { 39.8, 4.009, 12.530 }, + { 53.9, 4.979, 134.585 }, + { 50.1, 5.759, 320.324 }, + { 45.0, 5.357, 218.928 }, + { 41.1, 4.923, 1891.238 }, + { 46.5, 2.066, 2008.558 }, + { 42.9, 0.399, 357.446 }, + { 38.0, 2.065, 247.239 }, + { 48.7, 5.328, 3127.313 }, + { 34.6, 5.626, 99.911 }, + { 41.1, 2.473, 237.678 }, + { 40.8, 4.084, 621.738 }, + { 34.2, 0.731, 750.104 }, + { 34.0, 5.313, 206.234 }, + { 36.5, 1.688, 22.091 }, + { 39.4, 3.457, 241.610 }, + { 34.8, 2.248, 487.365 }, + { 33.0, 4.866, 209.106 }, + { 32.6, 2.227, 319.573 }, + { 39.0, 3.739, 3163.919 }, + { 32.7, 1.066, 252.656 }, + { 38.7, 4.396, 18.159 }, + { 34.5, 1.826, 380.128 }, + { 41.5, 0.081, 210.330 }, + { 33.5, 5.805, 251.432 }, + { 31.2, 1.965, 244.319 }, + { 30.5, 2.269, 1169.588 }, + { 34.8, 5.963, 217.965 }, + { 38.5, 4.437, 160.609 }, + { 36.0, 3.833, 56.622 }, + { 31.0, 4.899, 144.147 }, + { 32.3, 3.582, 231.458 }, + { 28.8, 5.801, 1994.330 }, + { 32.2, 2.132, 206.137 }, + { 32.6, 1.931, 98.900 }, + { 34.9, 5.653, 497.448 }, + { 28.9, 2.217, 14.978 }, + { 31.6, 3.818, 73.297 }, + { 32.2, 0.998, 1464.639 }, + { 29.2, 5.984, 2737.321 }, + { 36.7, 4.755, 348.848 }, + { 28.7, 1.687, 78.714 }, + { 27.5, 6.121, 214.050 }, + { 28.8, 0.044, 5.629 }, + { 27.2, 0.246, 313.210 }, + { 32.4, 3.779, 33.940 }, + { 27.1, 5.203, 148.079 }, + { 35.0, 3.439, 273.103 }, + { 33.1, 2.447, 969.622 }, + { 27.7, 1.446, 258.876 }, + { 27.2, 4.259, 179.359 }, + { 27.9, 0.788, 546.956 }, + { 29.1, 4.839, 905.887 }, + { 27.4, 2.449, 254.944 }, + { 34.3, 6.009, 166.829 }, + { 28.9, 6.029, 188.920 }, + { 26.0, 0.650, 654.124 }, + { 33.6, 1.237, 2221.857 }, + { 27.8, 5.178, 5.417 }, + { 25.6, 3.359, 0.963 }, + { 28.8, 0.755, 488.850 }, + { 31.2, 2.053, 282.452 }, + { 25.4, 5.290, 636.716 }, + { 25.3, 4.970, 3060.826 }, + { 29.6, 3.927, 206.707 }, + { 28.3, 2.721, 32.243 }, + { 26.9, 2.863, 24.379 }, + { 28.3, 4.731, 552.586 }, + { 25.3, 5.120, 168.053 }, + { 26.4, 1.593, 491.819 }, + { 27.1, 5.537, 555.554 }, + { 27.3, 3.579, 561.184 }, + { 25.2, 1.781, 182.280 }, + { 25.6, 1.621, 2324.949 }, + { 25.6, 2.099, 248.724 }, + /* 288 terms retained, 917 terms dropped, error 8.7e-06 a.u. */ + + /* saturn r, T^1 */ + { 6182981.3, 0.25843515, 213.29909544 }, + { 506577.6, 0.7111465, 206.1855484 }, + { 341394.1, 5.7963577, 426.5981909 }, + { 188491.4, 0.4721572, 220.4126424 }, + { 186261.5, 3.1415927, 0 }, + { 143891.2, 1.4074486, 7.1135470 }, + { 49621.1, 6.017445, 103.092774 }, + { 20928.2, 5.092457, 639.897286 }, + { 19952.6, 1.175601, 419.484644 }, + { 18839.6, 1.608196, 110.206321 }, + { 12892.8, 5.943303, 433.711738 }, + { 13876.6, 0.758862, 199.072001 }, + { 5396.7, 1.28852, 14.22709 }, + { 4869.3, 0.86794, 323.50542 }, + { 4247.5, 0.39299, 227.52619 }, + { 3252.1, 1.25853, 95.97923 }, + { 2856.0, 2.16731, 735.87651 }, + { 2909.4, 4.60679, 202.25340 }, + { 3081.4, 3.43663, 522.57742 }, + { 1987.7, 2.45054, 412.37110 }, + { 1941.3, 6.02393, 209.36694 }, + { 1581.4, 1.29192, 210.11770 }, + { 1339.5, 4.30802, 853.19638 }, + { 1315.6, 1.25296, 117.31987 }, + { 1203.1, 1.86655, 316.39187 }, + { 1091.1, 0.07527, 216.48049 }, + { 954.4, 5.1517, 647.0108 }, + { 966.0, 0.4799, 632.7837 }, + { 881.8, 1.8847, 1052.2684 }, + { 874.2, 1.4022, 224.3448 }, + { 897.5, 0.9834, 529.6910 }, + { 784.9, 3.0638, 838.9693 }, + { 739.9, 1.3823, 625.6702 }, + { 613.0, 3.0331, 63.7359 }, + { 658.2, 4.1436, 309.2783 }, + { 649.6, 1.7249, 742.9901 }, + { 599.2, 2.5492, 217.2312 }, + { 502.9, 2.1296, 3.9322 }, + { 413.0, 4.5933, 415.5525 }, + { 356.1, 2.3031, 728.7630 }, + { 344.8, 5.8879, 440.8253 }, + { 395.0, 0.5335, 956.2892 }, + { 335.5, 1.6161, 1368.6603 }, + { 362.8, 4.7069, 302.1648 }, + { 321.6, 0.9793, 3.1814 }, + { 277.8, 0.2601, 195.1398 }, + { 291.2, 2.8313, 1155.3612 }, + { 265.0, 2.4267, 88.8657 }, + { 264.9, 5.8286, 149.5632 }, + { 316.8, 3.5840, 515.4639 }, + { 294.3, 2.8163, 11.0457 }, + { 244.9, 1.0449, 942.0621 }, + { 215.4, 3.5654, 490.3341 }, + { 264.0, 1.2855, 1059.3819 }, + { 246.2, 0.9073, 191.9585 }, + { 222.1, 5.1319, 269.9214 }, + { 195.0, 4.5667, 846.0828 }, + { 182.8, 2.6791, 127.4718 }, + { 181.6, 4.9343, 74.7816 }, + { 174.7, 3.4456, 137.0330 }, + { 165.5, 5.9978, 536.8045 }, + { 154.8, 1.1972, 265.9893 }, + { 169.7, 4.6346, 284.1485 }, + { 151.5, 0.5293, 330.6190 }, + { 152.5, 5.4389, 422.6660 }, + { 157.7, 2.9956, 340.7709 }, + { 140.6, 2.0207, 1045.1548 }, + { 139.8, 1.3528, 1685.0521 }, + { 141.0, 1.2710, 203.0042 }, + { 136.0, 5.0168, 351.8166 }, + { 153.4, 0.2697, 1272.6810 }, + { 129.5, 1.1434, 21.3406 }, + { 127.8, 2.5388, 1471.7530 }, + { 126.5, 3.0031, 277.0350 }, + { 100.3, 3.6136, 1066.4955 }, + { 103.2, 0.3818, 203.7379 }, + { 107.5, 4.3187, 210.8514 }, + { 95.9, 0.795, 1258.454 }, + { 82.7, 0.282, 234.640 }, + { 98.0, 2.561, 191.208 }, + { 97.4, 3.262, 831.856 }, + { 72.2, 4.380, 860.310 }, + { 70.6, 0.732, 437.644 }, + { 70.4, 0.877, 423.417 }, + { 72.1, 5.580, 429.780 }, + { 73.3, 0.625, 1375.774 }, + { 66.4, 2.684, 405.258 }, + { 63.8, 1.751, 1361.547 }, + { 61.6, 1.093, 2001.444 }, + { 67.0, 0.069, 408.439 }, + { 68.9, 2.471, 949.176 }, + { 60.5, 2.251, 1788.145 }, + { 67.1, 5.454, 200.769 }, + { 65.6, 0.055, 1589.073 }, + { 49.3, 4.172, 138.517 }, + { 50.6, 6.269, 223.594 }, + { 55.2, 4.595, 628.852 }, + { 47.9, 0.839, 10.295 }, + { 46.7, 2.173, 312.199 }, + { 54.2, 0.284, 124.433 }, + { 49.5, 3.800, 215.747 }, + { 40.1, 5.182, 1478.867 }, + { 39.3, 0.563, 1574.846 }, + { 35.0, 4.685, 38.133 }, + { 42.8, 2.986, 1148.248 }, + { 36.5, 0.635, 52.690 }, + { 39.8, 0.284, 131.404 }, + { 31.8, 5.190, 76.266 }, + { 33.0, 1.980, 142.450 }, + { 42.1, 4.830, 288.081 }, + { 30.8, 1.479, 1677.939 }, + { 42.8, 3.382, 208.633 }, + { 29.2, 5.099, 654.124 }, + { 29.2, 4.957, 1795.258 }, + { 29.1, 2.747, 404.507 }, + { 32.7, 6.121, 145.631 }, + { 28.0, 0.832, 2317.836 }, + { 27.7, 2.244, 430.530 }, + { 29.9, 1.964, 2104.537 }, + { 33.0, 3.282, 222.860 }, + { 31.8, 6.025, 1905.465 }, + { 27.0, 5.243, 388.465 }, + { 26.5, 0.996, 107.025 }, + { 25.4, 2.873, 703.633 }, + { 24.9, 1.077, 99.911 }, + { 25.0, 6.240, 106.274 }, + { 24.9, 0.810, 312.460 }, + { 24.3, 0.549, 214.262 }, + { 28.4, 0.826, 1692.166 }, + { 23.2, 5.080, 479.288 }, + { 24.4, 3.106, 212.336 }, + { 22.0, 6.067, 85.827 }, + { 22.0, 3.899, 563.631 }, + { 22.6, 4.867, 295.051 }, + { 21.3, 5.108, 333.657 }, + { 26.0, 2.208, 1265.567 }, + { 20.9, 3.289, 70.849 }, + { 21.5, 3.795, 347.884 }, + { 22.1, 4.227, 217.965 }, + { 20.6, 1.687, 231.458 }, + { 21.4, 3.089, 554.070 }, + { 21.3, 0.389, 319.573 }, + { 20.5, 2.457, 18.159 }, + { 26.1, 4.276, 483.221 }, + { 20.7, 5.121, 362.862 }, + { 22.0, 5.512, 343.219 }, + { 19.4, 2.024, 313.210 }, + { 20.2, 5.085, 750.104 }, + { 20.1, 3.430, 213.347 }, + { 24.2, 0.648, 207.882 }, + { 22.0, 0.729, 99.161 }, + { 21.1, 2.693, 1464.639 }, + { 17.2, 4.715, 2111.650 }, + { 18.5, 0.048, 245.542 }, + { 17.5, 3.837, 497.448 }, + { 16.1, 4.224, 565.116 }, + { 21.6, 4.166, 2.448 }, + { 16.0, 0.274, 225.829 }, + { 16.8, 1.411, 114.138 }, + { 15.6, 2.828, 81.752 }, + { 15.5, 1.206, 1994.330 }, + { 15.2, 3.846, 1162.475 }, + { 16.4, 3.048, 134.585 }, + { 15.9, 0.330, 1891.238 }, + { 20.4, 0.232, 213.251 }, + { 16.3, 1.706, 2420.929 }, + { 16.3, 4.942, 357.446 }, + { 18.1, 5.695, 56.622 }, + { 13.7, 0.572, 2634.228 }, + { 17.4, 3.553, 218.928 }, + { 13.7, 5.705, 92.047 }, + { 15.3, 1.313, 216.220 }, + { 12.5, 5.192, 635.965 }, + { 12.8, 1.602, 320.324 }, + { 13.0, 0.451, 1169.588 }, + { 12.0, 5.949, 543.918 }, + { 11.8, 2.803, 217.492 }, + { 14.7, 5.565, 344.703 }, + { 12.8, 1.636, 273.103 }, + { 11.9, 2.462, 721.649 }, + { 13.3, 5.756, 2221.857 }, + { 14.5, 0.453, 2008.558 }, + { 11.8, 1.757, 160.609 }, + { 12.4, 1.015, 329.725 }, + { 10.7, 1.581, 212.778 }, + { 12.8, 1.920, 1581.959 }, + { 11.9, 4.447, 32.243 }, + { 11.9, 5.107, 4.666 }, + { 11.9, 4.308, 618.557 }, + { 10.0, 0.487, 305.346 }, + { 12.8, 3.744, 508.350 }, + { 10.7, 0.766, 218.716 }, + { 11.4, 3.000, 198.321 }, + { 10.2, 2.409, 546.956 }, + { 10.0, 2.639, 416.303 }, + { 9.3, 5.46, 414.07 }, + { 9.3, 4.46, 2428.04 }, + { 9.9, 4.05, 62.25 }, + { 12.8, 3.433, 258.876 }, + { 9.7, 1.61, 327.44 }, + { 11.2, 2.407, 1781.031 }, + { 10.6, 2.075, 213.820 }, + { 9.1, 2.92, 1279.79 }, + { 9.5, 1.10, 113.39 }, + { 9.8, 3.28, 275.55 }, + { 11.3, 1.894, 561.184 }, + { 8.6, 2.18, 425.11 }, + { 8.6, 1.95, 35.42 }, + { 10.2, 0.090, 182.280 }, + { 11.8, 3.713, 350.332 }, + { 8.6, 1.83, 629.60 }, + { 8.4, 3.77, 251.43 }, + { 8.5, 0.36, 617.81 }, + { 8.2, 5.31, 65.22 }, + { 8.3, 1.38, 1.48 }, + { 8.0, 5.14, 22.09 }, + { 8.4, 0.92, 1485.98 }, + { 8.0, 0.94, 2310.72 }, + { 8.9, 0.54, 168.05 }, + { 8.2, 3.46, 424.15 }, + { 8.0, 3.38, 144.15 }, + { 7.9, 5.14, 358.93 }, + { 8.9, 6.14, 621.74 }, + { 7.5, 5.75, 447.94 }, + { 7.5, 2.19, 264.50 }, + { 8.1, 1.43, 2737.32 }, + { 8.2, 0.96, 767.37 }, + { 8.2, 0.35, 278.52 }, + { 8.2, 5.44, 254.94 }, + { 6.8, 1.20, 5.42 }, + { 8.9, 4.88, 120.36 }, + { 7.8, 4.56, 280.97 }, + { 6.6, 3.50, 9.56 }, + { 6.4, 0.33, 2950.62 }, + { 6.9, 3.39, 98.90 }, + { 7.4, 4.52, 5.63 }, + { 8.0, 0.94, 636.72 }, + { 7.2, 3.85, 214.05 }, + { 6.4, 2.12, 274.07 }, + { 6.5, 5.31, 6076.89 }, + { 6.4, 0.45, 10007.10 }, + { 6.3, 3.21, 219.45 }, + { 6.7, 1.65, 1898.35 }, + { 7.6, 0.10, 2324.95 }, + { 6.3, 0.76, 210.38 }, + { 6.6, 1.79, 12.53 }, + /* 246 terms retained, 393 terms dropped, error 2.1e-06 a.u.*T */ + + /* saturn r, T^2 */ + { 436902.5, 4.7867167, 213.2990954 }, + { 71922.8, 2.500700, 206.185548 }, + { 49766.8, 4.971682, 220.412642 }, + { 43220.9, 3.869404, 426.598191 }, + { 29645.6, 5.963103, 7.113547 }, + { 4141.6, 4.10671, 433.71174 }, + { 4720.9, 2.47528, 199.07200 }, + { 3789.4, 3.09771, 639.89729 }, + { 2964.0, 1.37206, 103.09277 }, + { 2556.4, 2.85066, 419.48464 }, + { 2208.5, 6.27589, 110.20632 }, + { 2187.6, 5.85546, 14.22709 }, + { 1956.9, 4.92449, 227.52619 }, + { 2326.8, 0, 0 }, + { 923.8, 5.4639, 323.5054 }, + { 705.9, 2.9708, 95.9792 }, + { 546.1, 4.1285, 412.3711 }, + { 373.8, 5.8344, 117.3199 }, + { 360.9, 3.2770, 647.0108 }, + { 356.3, 3.1915, 210.1177 }, + { 390.6, 4.4811, 216.4805 }, + { 431.5, 5.1783, 522.5774 }, + { 325.6, 2.2687, 853.1964 }, + { 405.0, 4.1729, 209.3669 }, + { 204.5, 0.0877, 202.2534 }, + { 206.9, 4.0219, 735.8765 }, + { 178.5, 4.0972, 440.8253 }, + { 180.1, 3.5970, 632.7837 }, + { 153.7, 3.1347, 625.6702 }, + { 147.8, 0.1361, 302.1648 }, + { 123.2, 4.1890, 88.8657 }, + { 133.1, 2.5935, 191.9585 }, + { 100.4, 5.4606, 3.1814 }, + { 132.0, 5.9329, 309.2783 }, + { 97.2, 4.018, 728.763 }, + { 110.7, 4.7785, 838.9693 }, + { 119.1, 5.5539, 224.3448 }, + { 93.9, 4.384, 217.231 }, + { 108.7, 5.2931, 515.4639 }, + { 78.6, 5.725, 21.341 }, + { 81.5, 5.109, 956.289 }, + { 96.4, 6.259, 742.990 }, + { 69.2, 4.049, 3.932 }, + { 65.2, 3.777, 1052.268 }, + { 64.1, 5.812, 529.691 }, + { 62.5, 2.184, 195.140 }, + { 57.0, 3.147, 203.004 }, + { 56.0, 4.841, 234.640 }, + { 52.9, 5.078, 330.619 }, + { 50.6, 2.773, 942.062 }, + { 41.6, 4.790, 63.736 }, + { 44.9, 0.565, 269.921 }, + { 41.4, 3.735, 316.392 }, + { 52.8, 3.926, 949.176 }, + { 38.4, 3.740, 1045.155 }, + { 37.6, 4.189, 536.805 }, + { 35.3, 2.908, 284.149 }, + { 33.6, 3.805, 149.563 }, + { 41.1, 4.579, 1155.361 }, + { 30.4, 2.481, 860.310 }, + { 31.4, 4.841, 1272.681 }, + { 30.2, 4.352, 405.258 }, + { 39.4, 3.509, 422.666 }, + { 29.7, 1.589, 1066.495 }, + { 35.2, 5.945, 1059.382 }, + { 25.8, 3.549, 1368.660 }, + { 26.3, 4.816, 124.433 }, + { 30.0, 3.663, 429.780 }, + { 33.0, 4.969, 831.856 }, + { 24.3, 5.311, 10.295 }, + { 26.3, 4.453, 223.594 }, + { 22.1, 2.761, 415.552 }, + { 27.2, 1.663, 277.035 }, + { 21.6, 1.038, 11.046 }, + { 19.7, 2.522, 1258.454 }, + { 17.1, 3.277, 654.124 }, + { 17.3, 3.494, 1361.547 }, + { 16.1, 1.734, 490.334 }, + { 21.1, 3.621, 1265.567 }, + { 17.7, 4.311, 1471.753 }, + { 13.5, 0.323, 295.051 }, + { 12.6, 3.138, 74.782 }, + { 12.0, 2.329, 210.851 }, + { 15.1, 3.596, 265.989 }, + { 13.0, 4.624, 1589.073 }, + { 15.4, 5.013, 127.472 }, + { 11.2, 4.550, 81.752 }, + { 13.4, 4.887, 437.644 }, + { 10.7, 5.052, 191.208 }, + { 14.0, 3.050, 423.417 }, + { 10.6, 5.028, 137.033 }, + { 14.4, 4.687, 1148.248 }, + { 13.5, 1.903, 408.439 }, + { 10.1, 5.204, 340.771 }, + { 10.3, 3.345, 1685.052 }, + { 9.6, 3.17, 351.82 }, + { 11.3, 5.478, 1375.774 }, + { 8.6, 2.81, 99.91 }, + { 8.5, 3.23, 1677.94 }, + { 7.9, 2.36, 1574.85 }, + { 7.6, 6.08, 231.46 }, + { 9.2, 3.40, 1581.96 }, + { 7.3, 2.00, 131.40 }, + { 8.2, 4.04, 1788.14 }, + { 7.6, 3.68, 846.08 }, + { 6.7, 4.37, 145.63 }, + { 7.5, 3.29, 750.10 }, + { 6.4, 4.00, 447.94 }, + { 6.2, 4.56, 106.27 }, + { 6.5, 1.34, 215.75 }, + { 6.5, 3.78, 313.21 }, + { 6.0, 0.55, 18.16 }, + { 6.2, 2.85, 138.52 }, + { 6.8, 4.83, 319.57 }, + { 6.7, 5.43, 508.35 }, + { 7.2, 4.38, 1464.64 }, + { 5.8, 4.14, 543.92 }, + { 5.7, 4.35, 1905.46 }, + { 5.1, 2.64, 288.08 }, + { 5.3, 3.63, 6076.89 }, + { 5.5, 4.20, 721.65 }, + { 5.1, 5.05, 10007.10 }, + { 5.5, 1.13, 56.62 }, + { 4.8, 3.30, 76.27 }, + { 4.9, 6.18, 483.22 }, + { 5.0, 2.45, 628.85 }, + { 4.5, 1.20, 200.77 }, + { 4.8, 3.12, 2001.44 }, + { 4.7, 1.27, 6062.66 }, + { 4.8, 5.78, 184.84 }, + { 4.8, 0.76, 333.66 }, + { 4.5, 0.95, 343.22 }, + { 4.5, 2.69, 9992.87 }, + { 4.4, 0.80, 222.86 }, + { 4.9, 5.92, 618.56 }, + { 4.1, 1.92, 497.45 }, + { 5.1, 4.50, 416.30 }, + { 4.1, 1.98, 347.88 }, + { 4.0, 2.88, 38.13 }, + { 4.1, 2.90, 107.02 }, + { 4.0, 2.93, 1994.33 }, + { 4.9, 3.12, 1898.35 }, + { 3.7, 3.25, 362.86 }, + { 3.8, 0.88, 703.63 }, + { 3.6, 3.48, 388.47 }, + { 3.6, 4.08, 430.53 }, + { 3.6, 0.05, 32.24 }, + { 3.6, 5.46, 6283.08 }, + { 3.5, 1.82, 70.85 }, + { 3.8, 3.12, 635.97 }, + { 3.4, 0.55, 10213.29 }, + { 3.4, 3.52, 629.60 }, + { 3.4, 3.28, 357.45 }, + { 3.3, 1.98, 203.74 }, + { 3.1, 2.18, 1891.24 }, + { 3.2, 1.26, 134.59 }, + { 4.0, 5.45, 1692.17 }, + { 3.2, 2.46, 867.42 }, + { 3.4, 4.21, 337.73 }, + { 3.0, 2.19, 217.96 }, + { 3.6, 5.55, 113.39 }, + { 3.7, 3.79, 2104.54 }, + { 3.1, 4.09, 1478.87 }, + { 2.9, 3.91, 312.20 }, + { 3.2, 3.92, 1038.04 }, + { 4.0, 5.18, 404.51 }, + { 3.9, 4.12, 1781.03 }, + { 3.1, 1.61, 1073.61 }, + { 3.1, 5.01, 312.46 }, + { 3.0, 5.46, 258.88 }, + { 2.9, 2.38, 181.06 }, + { 3.0, 0.89, 1279.79 }, + { 2.7, 0.01, 195.89 }, + { 3.1, 5.60, 216.22 }, + { 2.6, 6.13, 273.10 }, + { 2.7, 2.32, 565.12 }, + { 3.2, 3.88, 85.83 }, + { 2.7, 5.74, 160.61 }, + { 2.9, 4.75, 213.25 }, + { 2.5, 5.30, 444.76 }, + { 2.8, 5.09, 1169.59 }, + { 2.9, 1.67, 213.35 }, + { 2.9, 4.21, 650.94 }, + { 3.0, 2.55, 6069.78 }, + { 3.1, 2.67, 52.69 }, + { 2.4, 0.90, 121.25 }, + { 3.0, 3.97, 9999.99 }, + { 3.1, 0.41, 561.18 }, + { 2.4, 4.74, 218.72 }, + { 2.6, 1.13, 344.70 }, + { 2.3, 4.08, 131.55 }, + { 2.2, 3.38, 22.09 }, + { 2.1, 3.32, 358.93 }, + { 2.7, 1.69, 208.63 }, + { 2.6, 5.10, 824.74 }, + { 2.2, 2.60, 305.35 }, + { 2.1, 3.37, 320.32 }, + { 2.7, 3.62, 436.89 }, + { 2.5, 2.96, 2214.74 }, + { 2.7, 2.88, 643.08 }, + { 2.1, 1.61, 218.93 }, + { 2.0, 4.63, 188.03 }, + { 2.4, 3.46, 6275.96 }, + { 2.0, 2.29, 2627.11 }, + { 1.9, 5.67, 28.45 }, + { 1.9, 4.26, 546.96 }, + { 2.5, 3.58, 2420.93 }, + { 1.9, 1.31, 212.34 }, + { 1.9, 1.59, 424.15 }, + { 1.9, 3.58, 329.73 }, + { 2.1, 3.95, 1795.26 }, + { 2.2, 4.22, 2221.86 }, + { 1.9, 1.69, 350.33 }, + { 1.8, 2.07, 144.15 }, + { 1.9, 4.61, 182.28 }, + { 2.2, 5.18, 99.16 }, + { 1.8, 2.73, 291.26 }, + { 2.2, 5.43, 207.88 }, + { 1.8, 2.24, 168.05 }, + { 1.7, 1.32, 219.45 }, + { 1.7, 5.56, 92.80 }, + { 1.7, 1.95, 129.92 }, + { 2.1, 4.85, 1141.13 }, + { 1.8, 5.05, 214.26 }, + { 1.8, 2.86, 636.72 }, + { 1.9, 2.90, 2310.72 }, + { 1.8, 5.35, 45.58 }, + { 1.7, 6.14, 554.07 }, + { 1.6, 4.51, 210.38 }, + { 1.7, 3.55, 1354.43 }, + { 1.9, 3.01, 2317.84 }, + { 1.6, 1.16, 235.39 }, + { 1.9, 4.13, 225.83 }, + { 1.6, 3.30, 1670.83 }, + { 1.9, 0.18, 12.53 }, + { 1.6, 5.73, 1485.98 }, + { 1.7, 3.44, 2428.04 }, + { 1.8, 2.70, 12.74 }, + { 1.7, 4.98, 2008.56 }, + /* 239 terms retained, 103 terms dropped, error 5.2e-07 a.u.*T^2 */ + + /* saturn r, T^3 */ + { 20315.0, 3.021866, 213.299095 }, + { 8923.6, 3.19144, 220.41264 }, + { 6908.7, 4.35175, 206.18555 }, + { 4087.1, 4.22407, 7.11355 }, + { 3879.0, 2.01056, 426.59819 }, + { 1070.8, 4.20360, 199.07200 }, + { 907.3, 2.2834, 433.7117 }, + { 606.1, 3.1746, 227.5262 }, + { 596.6, 4.1346, 14.2271 }, + { 483.2, 1.1735, 639.8973 }, + { 393.2, 0, 0 }, + { 229.5, 4.6984, 419.4846 }, + { 188.2, 4.5900, 110.2063 }, + { 149.5, 3.2020, 103.0928 }, + { 121.4, 3.7683, 323.5054 }, + { 101.2, 5.8188, 412.3711 }, + { 102.1, 4.7097, 95.9792 }, + { 93.1, 1.435, 647.011 }, + { 72.6, 4.154, 117.320 }, + { 84.3, 2.635, 216.480 }, + { 62.2, 2.312, 440.825 }, + { 45.1, 4.373, 191.958 }, + { 49.5, 2.389, 209.367 }, + { 54.8, 0.305, 853.196 }, + { 40.5, 1.838, 302.165 }, + { 38.1, 5.945, 88.866 }, + { 32.2, 4.011, 21.341 }, + { 40.7, 0.688, 522.577 }, + { 28.2, 5.772, 210.118 }, + { 25.0, 3.062, 234.640 }, + { 20.8, 4.926, 625.670 }, + { 25.1, 0.731, 515.464 }, + { 17.5, 5.731, 728.763 }, + { 18.0, 1.456, 309.278 }, + { 16.9, 3.528, 3.181 }, + { 13.4, 3.365, 330.619 }, + { 11.1, 3.372, 224.345 }, + { 11.1, 3.417, 956.289 }, + { 10.0, 1.588, 202.253 }, + { 11.6, 5.991, 735.877 }, + { 10.5, 6.069, 405.258 }, + { 9.1, 2.94, 124.43 }, + { 8.7, 4.65, 632.78 }, + { 10.0, 0.582, 860.310 }, + { 7.5, 4.51, 942.06 }, + { 10.1, 0.283, 838.969 }, + { 9.2, 2.57, 223.59 }, + { 8.7, 1.76, 429.78 }, + { 7.6, 1.46, 654.12 }, + { 7.1, 5.47, 1045.15 }, + { 7.0, 1.52, 422.67 }, + { 8.1, 4.48, 742.99 }, + { 6.8, 4.83, 316.39 }, + { 7.7, 0.44, 831.86 }, + { 7.9, 4.20, 195.14 }, + { 6.1, 2.34, 269.92 }, + { 5.6, 1.15, 284.15 }, + { 5.6, 4.18, 529.69 }, + { 5.0, 2.12, 295.05 }, + { 6.6, 3.42, 10.29 }, + { 5.5, 2.47, 536.80 }, + { 6.2, 6.01, 1066.50 }, + { 5.6, 0.83, 217.23 }, + { 4.3, 3.23, 1272.68 }, + { 4.5, 0.92, 203.00 }, + { 3.3, 4.33, 1258.45 }, + { 3.7, 0.06, 81.75 }, + { 4.0, 0.11, 1155.36 }, + { 3.8, 6.01, 1052.27 }, + { 2.9, 5.64, 3.93 }, + { 3.0, 2.19, 447.94 }, + { 3.0, 1.89, 149.56 }, + { 3.1, 0.19, 1148.25 }, + { 2.8, 0.92, 508.35 }, + { 2.8, 4.97, 1677.94 }, + { 2.6, 3.00, 1589.07 }, + { 2.9, 5.41, 1361.55 }, + { 2.3, 1.30, 184.84 }, + { 2.5, 3.71, 408.44 }, + { 2.5, 3.22, 319.57 }, + { 2.6, 2.31, 543.92 }, + { 2.3, 5.88, 721.65 }, + { 2.0, 0.52, 416.30 }, + { 2.5, 4.24, 1059.38 }, + { 1.9, 2.41, 337.73 }, + { 1.9, 0.54, 635.97 }, + { 1.9, 5.62, 11.05 }, + { 2.4, 5.73, 313.21 }, + { 1.9, 2.41, 131.55 }, + { 1.7, 4.58, 1994.33 }, + { 1.9, 5.17, 2854.64 }, + { 1.9, 6.23, 1471.75 }, + { 2.0, 6.18, 1464.64 }, + { 1.8, 5.59, 1038.04 }, + { 1.5, 0.61, 210.85 }, + { 1.6, 1.75, 195.89 }, + { 1.6, 0.56, 2324.95 }, + { 1.5, 0.27, 497.45 }, + { 1.7, 2.58, 2090.31 }, + { 1.8, 1.82, 436.89 }, + { 1.6, 6.15, 490.33 }, + { 1.8, 6.12, 1073.61 }, + { 1.5, 0.85, 415.55 }, + { 1.6, 2.95, 437.64 }, + { 1.4, 4.12, 1574.85 }, + { 1.6, 5.97, 1781.03 }, + { 1.5, 3.85, 1251.34 }, + { 1.4, 5.33, 2538.25 }, + { 1.8, 1.51, 750.10 }, + { 1.5, 3.29, 1884.12 }, + { 1.5, 0.99, 643.08 }, + { 1.3, 3.79, 1567.73 }, + { 1.7, 0.03, 423.42 }, + { 1.5, 5.35, 1354.43 }, + { 1.4, 0.70, 867.42 }, + { 1.1, 1.80, 618.56 }, + { 1.1, 4.70, 113.39 }, + { 1.1, 3.96, 1891.24 }, + { 1.5, 1.50, 430.53 }, + { 1.1, 5.13, 25.27 }, + { 1.2, 2.97, 241.75 }, + { 1.3, 2.29, 2420.93 }, + { 1.1, 0.05, 63.74 }, + { 1.4, 5.58, 1382.89 }, + { 1.1, 3.11, 2200.52 }, + { 1.1, 0.79, 127.47 }, + { 1.0, 5.85, 215.75 }, + { 1.1, 3.73, 131.40 }, + { 1.2, 0.48, 824.74 }, + { 1.1, 3.78, 1375.77 }, + { 1.0, 5.91, 265.99 }, + { 1.2, 1.41, 2634.23 }, + { 1.1, 4.80, 1987.22 }, + { 0.9, 6.26, 2015.67 }, + { 1.0, 1.09, 362.86 }, + { 1.1, 5.42, 1279.79 }, + { 0.9, 1.92, 483.22 }, + { 0.9, 2.97, 934.95 }, + { 0.9, 2.66, 145.63 }, + { 0.9, 6.26, 2.45 }, + { 1.1, 4.48, 2214.74 }, + { 1.0, 0.74, 16.67 }, + { 1.0, 4.06, 231.46 }, + { 0.9, 0.09, 628.85 }, + { 0.9, 5.99, 2524.02 }, + { 0.9, 3.16, 2207.63 }, + { 0.8, 1.24, 74.78 }, + { 0.8, 2.90, 2008.56 }, + { 0.8, 2.28, 1478.87 }, + { 1.0, 5.33, 2428.04 }, + { 0.8, 2.38, 2228.97 }, + { 0.8, 4.70, 1670.83 }, + { 1.0, 4.23, 1802.37 }, + { 0.8, 5.87, 1368.66 }, + { 0.7, 5.92, 1685.05 }, + { 0.8, 1.16, 3053.71 }, + { 0.7, 3.13, 56.62 }, + /* 157 terms retained, 0 terms dropped, error 1.7e-07 a.u.*T^3 */ + + /* saturn r, T^4 */ + { 1202.0, 1.41499, 220.41264 }, + { 707.8, 1.1615, 213.2991 }, + { 516.1, 6.2397, 206.1855 }, + { 426.7, 2.4692, 7.1135 }, + { 267.7, 0.1866, 426.5982 }, + { 170.2, 5.9593, 199.0720 }, + { 145.1, 1.4421, 227.5262 }, + { 150.3, 0.4797, 433.7117 }, + { 121.0, 2.4053, 14.2271 }, + { 47.3, 5.569, 639.897 }, + { 15.7, 2.901, 110.206 }, + { 16.7, 0.529, 440.825 }, + { 19.0, 5.856, 647.011 }, + { 14.1, 1.303, 412.371 }, + { 12.7, 2.093, 323.505 }, + { 14.7, 0.299, 419.485 }, + { 11.1, 2.463, 117.320 }, + { 11.3, 0.218, 95.979 }, + { 9.2, 2.28, 21.34 }, + { 9.2, 1.56, 88.87 }, + { 9.0, 0.68, 216.48 }, + { 7.7, 3.59, 302.16 }, + { 7.8, 4.49, 853.20 }, + { 8.4, 1.27, 234.64 }, + { 9.6, 3.14, 0 }, + { 4.8, 2.59, 515.46 }, + { 6.1, 5.17, 103.09 }, + { 4.4, 0.02, 191.96 }, + { 4.4, 1.60, 330.62 }, + { 3.7, 3.30, 210.12 }, + { 4.4, 5.97, 654.12 }, + { 4.4, 4.97, 860.31 }, + { 3.2, 2.73, 522.58 }, + { 4.0, 1.60, 405.26 }, + { 3.1, 0.75, 209.37 }, + { 2.5, 1.19, 124.43 }, + { 3.1, 1.32, 728.76 }, + { 2.2, 3.28, 203.00 }, + { 2.1, 6.15, 429.78 }, + { 2.1, 0.75, 295.05 }, + { 2.0, 3.89, 1066.50 }, + { 2.2, 0.49, 447.94 }, + { 2.2, 0.73, 625.67 }, + { 1.8, 0.09, 942.06 }, + { 1.7, 1.40, 224.34 }, + { 1.6, 3.02, 184.84 }, + { 1.8, 0.82, 223.59 }, + { 1.9, 2.00, 831.86 }, + { 1.6, 5.41, 824.74 }, + { 1.5, 5.96, 422.67 }, + { 1.1, 1.12, 838.97 }, + { 1.2, 1.90, 956.29 }, + { 1.5, 2.12, 529.69 }, + { 1.4, 0.72, 536.80 }, + { 1.1, 0.89, 721.65 }, + { 1.3, 1.65, 17.41 }, + { 1.2, 5.97, 195.14 }, + { 1.0, 5.36, 316.39 }, + { 1.0, 3.06, 1574.85 }, + { 1.1, 1.59, 735.88 }, + { 0.8, 4.93, 56.62 }, + { 0.8, 2.72, 508.35 }, + { 1.0, 1.01, 1045.15 }, + { 0.7, 1.11, 1169.59 }, + /* 64 terms retained, 0 terms dropped, error 1.2e-07 a.u.*T^4 */ + + /* saturn r, T^5 */ + { 128.6, 5.9128, 220.4126 }, + { 32.3, 0.693, 7.114 }, + { 26.7, 5.914, 227.526 }, + { 19.9, 0.674, 14.227 }, + { 20.2, 4.951, 433.712 }, + { 13.5, 1.457, 199.072 }, + { 14.1, 2.671, 206.186 }, + { 13.4, 4.588, 426.598 }, + { 7.3, 4.63, 213.30 }, + { 4.9, 3.61, 639.90 }, + { 3.1, 4.66, 191.96 }, + { 2.9, 0.49, 323.51 }, + { 3.8, 4.90, 440.83 }, + { 3.3, 4.07, 647.01 }, + { 2.9, 3.18, 419.48 }, + { 2.3, 3.70, 88.87 }, + { 1.9, 5.33, 302.16 }, + { 2.1, 3.32, 95.98 }, + { 1.6, 2.67, 853.20 }, + { 2.0, 0.56, 117.32 }, + { 1.6, 0.86, 515.46 }, + { 1.7, 0, 0 }, + { 1.1, 5.98, 3.18 }, + { 1.3, 5.83, 234.64 }, + { 0.9, 5.23, 216.48 }, + { 1.1, 0.16, 412.37 }, + { 0.8, 0.37, 28.45 }, + { 0.8, 5.05, 124.43 }, + /* 28 terms retained, 0 terms dropped, error 9e-08 a.u.*T^5 */ + /* end saturn */ +}; + +int vn_saturn[][3] = { + /* addresses for saturn l, b, r */ + /* T^0 */ { 0, 592, 811, }, + /* T^1 */ { 165, 645, 1099, }, + /* T^2 */ { 303, 698, 1345, }, + /* T^3 */ { 418, 744, 1584, }, + /* T^4 */ { 500, 777, 1741, }, + /* T^5 */ { 566, 803, 1805, }, + /* end */ { 592, 811, 1833, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_uranus[][3] = { + /* uranus l, T^0 */ + { 548129294.3, 0, 0 }, + { 9260408.3, 0.89106422, 74.78159857 }, + { 1504247.8, 3.62719262, 1.48447271 }, + { 365981.7, 1.8996219, 73.2971259 }, + { 272328.1, 3.3582371, 149.5631971 }, + { 70328.5, 5.392544, 63.735898 }, + { 68892.6, 6.092925, 76.266071 }, + { 61998.6, 2.269520, 2.968945 }, + { 61950.7, 2.850989, 11.045700 }, + { 26468.9, 3.141521, 71.812653 }, + { 25710.5, 6.113798, 454.909367 }, + { 21078.9, 4.360595, 148.078724 }, + { 17818.7, 1.744370, 36.648563 }, + { 14613.5, 4.737320, 3.932153 }, + { 11162.5, 5.826820, 224.344796 }, + { 10997.9, 0.488655, 138.517497 }, + { 9527.5, 2.95517, 35.16409 }, + { 7545.5, 5.23626, 109.94569 }, + { 4220.2, 3.23329, 70.84945 }, + { 4051.9, 2.27754, 151.04767 }, + { 3354.6, 1.06549, 4.45342 }, + { 2926.7, 4.62904, 9.56123 }, + { 3490.4, 5.48306, 146.59425 }, + { 3144.1, 4.75199, 77.75054 }, + { 2922.4, 5.35237, 85.82730 }, + { 2272.8, 4.36601, 70.32818 }, + { 2051.2, 1.51774, 0.11187 }, + { 2148.6, 0.60746, 38.13304 }, + { 1991.7, 4.92437, 277.03499 }, + { 1376.2, 2.04281, 65.22037 }, + { 1666.9, 3.62745, 380.12777 }, + { 1284.2, 3.11346, 202.25340 }, + { 1150.4, 0.93344, 3.18139 }, + { 1533.2, 2.58593, 52.69020 }, + { 1281.6, 0.54270, 222.86032 }, + { 1372.1, 4.19642, 111.43016 }, + { 1221.0, 0.19901, 108.46122 }, + { 946.2, 1.1925, 127.4718 }, + { 1151.0, 4.17898, 33.67962 }, + { 1244.3, 0.91613, 2.44768 }, + { 1072.0, 0.23565, 62.25143 }, + { 1090.5, 1.77502, 12.53017 }, + { 707.9, 5.1829, 213.2991 }, + { 653.4, 0.9659, 78.7138 }, + { 627.6, 0.1821, 984.6003 }, + { 524.5, 2.0128, 299.1264 }, + { 559.4, 3.3578, 0.5213 }, + { 606.8, 5.4321, 529.6910 }, + { 404.9, 5.9869, 8.0768 }, + { 467.2, 0.4148, 145.1098 }, + { 471.3, 1.4066, 184.7273 }, + { 483.2, 2.1055, 0.9632 }, + { 395.6, 5.8704, 351.8166 }, + { 433.5, 5.5214, 183.2428 }, + { 309.9, 5.8330, 145.6310 }, + { 378.6, 2.3498, 56.6224 }, + { 399.0, 0.3381, 415.5525 }, + { 300.4, 5.6435, 22.0914 }, + { 249.2, 4.7462, 225.8293 }, + { 239.3, 2.3505, 137.0330 }, + { 294.2, 5.8392, 39.6175 }, + { 216.5, 4.7785, 340.7709 }, + { 251.8, 1.6370, 221.3759 }, + { 219.6, 1.9221, 67.6681 }, + { 202.0, 1.2969, 0.0482 }, + { 224.1, 0.5157, 84.3428 }, + { 216.5, 6.1421, 5.9379 }, + { 222.6, 2.8431, 0.2606 }, + { 207.8, 5.5802, 68.8437 }, + { 187.5, 1.3192, 0.1601 }, + { 158.0, 0.7381, 54.1747 }, + { 199.1, 0.9563, 152.5321 }, + { 168.6, 5.8787, 18.1592 }, + { 170.3, 3.6772, 5.4166 }, + { 193.7, 1.8880, 456.3938 }, + { 193.0, 0.9162, 453.4249 }, + { 181.9, 3.5362, 79.2350 }, + { 173.1, 1.5386, 160.6089 }, + { 164.6, 1.4238, 106.9767 }, + { 172.0, 5.6795, 219.8914 }, + { 162.8, 3.0503, 112.9146 }, + { 146.7, 1.2630, 59.8037 }, + { 139.5, 5.3860, 32.1951 }, + { 138.6, 4.2599, 909.8187 }, + { 143.1, 1.3000, 35.4247 }, + { 123.8, 1.3736, 7.1135 }, + { 104.4, 5.0282, 0.7508 }, + { 103.3, 0.6810, 14.9779 }, + { 94.7, 0.907, 74.670 }, + { 83.0, 2.928, 265.989 }, + { 110.2, 2.0269, 554.0700 }, + { 94.2, 3.943, 74.893 }, + { 79.9, 1.014, 6.592 }, + { 109.4, 5.7058, 77.9630 }, + { 85.9, 1.706, 82.858 }, + { 103.6, 1.4577, 24.3790 }, + { 74.7, 4.632, 69.365 }, + { 79.9, 3.010, 297.642 }, + { 84.5, 0.369, 186.212 }, + { 88.8, 0.525, 181.758 }, + { 70.3, 1.190, 66.705 }, + { 70.0, 0.875, 305.346 }, + { 69.9, 3.761, 131.404 }, + { 84.6, 5.887, 256.540 }, + { 74.3, 6.243, 447.796 }, + { 62.3, 0.169, 479.288 }, + { 72.7, 2.849, 462.023 }, + { 69.1, 4.439, 39.357 }, + { 76.6, 4.587, 6.220 }, + { 73.4, 4.276, 87.312 }, + { 55.3, 1.496, 71.600 }, + { 57.3, 1.630, 143.625 }, + { 61.7, 3.186, 77.229 }, + { 57.6, 3.672, 51.206 }, + { 50.3, 1.123, 20.607 }, + { 53.7, 5.519, 128.956 }, + { 57.9, 2.669, 381.612 }, + { 58.1, 1.586, 60.767 }, + { 45.4, 0.481, 14.015 }, + { 37.6, 6.068, 211.815 }, + { 38.6, 3.436, 153.495 }, + { 46.1, 4.362, 75.745 }, + { 40.1, 4.573, 46.210 }, + { 34.2, 2.940, 140.002 }, + { 38.7, 5.589, 99.161 }, + { 34.8, 1.028, 203.738 }, + { 40.0, 0.699, 218.407 }, + { 32.5, 4.216, 200.769 }, + { 31.9, 5.510, 72.334 }, + { 41.7, 3.824, 81.001 }, + { 34.8, 0.394, 1.373 }, + { 39.8, 6.056, 293.189 }, + { 27.6, 2.183, 125.987 }, + { 36.3, 1.666, 258.024 }, + { 35.4, 1.967, 835.037 }, + { 35.4, 3.723, 692.587 }, + { 27.3, 2.102, 209.367 }, + { 26.5, 4.483, 373.908 }, + { 34.5, 1.079, 191.208 }, + { 29.9, 3.874, 259.509 }, + { 26.2, 3.632, 490.334 }, + { 25.8, 0.545, 41.644 }, + { 27.0, 6.277, 28.572 }, + { 26.4, 5.811, 75.303 }, + { 34.2, 6.056, 275.551 }, + { 29.9, 1.888, 269.921 }, + { 26.2, 6.201, 134.585 }, + { 25.2, 5.425, 116.426 }, + { 26.5, 4.772, 284.149 }, + { 27.0, 4.753, 41.102 }, + { 28.9, 0.171, 528.206 }, + { 25.8, 0.746, 278.519 }, + /* 152 terms retained, 795 terms dropped, error 1.3" */ + + /* uranus l, T^1 */ + { 7502543121.6, 0, 0 }, + { 154458.2, 5.2420166, 74.7815986 }, + { 24456.4, 1.712557, 1.484473 }, + { 9257.8, 0.42845, 11.04570 }, + { 8266.0, 1.50220, 63.73590 }, + { 7841.7, 1.31984, 149.56320 }, + { 3899.1, 0.46484, 3.93215 }, + { 2283.8, 4.17368, 76.26607 }, + { 1926.6, 0.53013, 2.96895 }, + { 1232.7, 1.58634, 70.84945 }, + { 791.2, 5.4364, 3.1814 }, + { 767.0, 1.9956, 73.2971 }, + { 481.7, 2.9840, 85.8273 }, + { 449.8, 4.1383, 138.5175 }, + { 445.6, 3.7230, 224.3448 }, + { 426.6, 4.7313, 71.8127 }, + { 347.7, 2.4537, 9.5612 }, + { 353.8, 2.5832, 148.0787 }, + { 317.1, 5.5786, 52.6902 }, + { 179.9, 5.6837, 12.5302 }, + { 171.1, 3.0006, 78.7138 }, + { 205.6, 2.3626, 2.4477 }, + { 158.0, 2.9093, 0.9632 }, + { 189.1, 4.2024, 56.6224 }, + { 154.7, 5.5908, 4.4534 }, + { 183.8, 0.2837, 151.0477 }, + { 143.5, 2.5905, 62.2514 }, + { 152.0, 2.9422, 77.7505 }, + { 153.5, 4.6519, 35.1641 }, + { 121.5, 4.1484, 127.4718 }, + { 115.5, 3.7322, 65.2204 }, + { 102.0, 4.1875, 145.6310 }, + { 101.7, 6.0339, 0.1119 }, + { 88.2, 3.990, 18.159 }, + { 87.5, 6.155, 202.253 }, + { 80.5, 2.641, 22.091 }, + { 72.0, 6.045, 70.328 }, + { 68.6, 4.051, 77.963 }, + { 59.2, 3.704, 67.668 }, + { 47.3, 3.543, 351.817 }, + { 42.5, 5.724, 5.417 }, + { 44.3, 5.909, 7.114 }, + { 35.6, 3.292, 8.077 }, + { 35.5, 3.328, 71.600 }, + { 36.1, 5.900, 33.680 }, + { 30.6, 5.464, 160.609 }, + { 31.5, 5.620, 984.600 }, + { 38.5, 4.915, 222.860 }, + { 35.0, 5.080, 38.133 }, + { 30.8, 5.496, 59.804 }, + { 28.9, 4.519, 84.343 }, + { 26.6, 5.541, 131.404 }, + { 29.9, 1.660, 447.796 }, + { 29.2, 1.147, 462.023 }, + { 25.8, 4.994, 137.033 }, + { 25.4, 5.736, 380.128 }, + { 21.7, 2.806, 69.365 }, + { 26.6, 6.146, 299.126 }, + { 23.0, 2.249, 111.430 }, + { 19.2, 3.556, 54.175 }, + { 21.8, 0.933, 213.299 }, + { 19.3, 1.862, 108.461 }, + { 16.2, 3.102, 14.978 }, + { 13.1, 1.954, 87.312 }, + { 13.9, 1.541, 340.771 }, + { 13.5, 4.385, 5.938 }, + { 13.1, 5.883, 6.220 }, + { 11.8, 0.326, 35.425 }, + { 11.0, 1.692, 45.577 }, + { 12.4, 0.328, 51.206 }, + { 10.9, 5.971, 265.989 }, + { 11.4, 3.378, 72.334 }, + { 12.0, 3.604, 269.921 }, + { 11.7, 1.745, 79.235 }, + { 13.8, 2.690, 225.829 }, + { 12.0, 5.344, 152.532 }, + { 9.9, 5.50, 153.50 }, + { 10.4, 4.169, 24.379 }, + { 10.6, 3.069, 284.149 }, + { 9.6, 0.50, 209.37 }, + { 9.3, 3.54, 41.64 }, + { 9.5, 5.60, 82.86 }, + { 9.7, 1.01, 68.84 }, + { 9.2, 4.49, 20.61 }, + { 10.2, 3.518, 529.691 }, + { 8.6, 3.89, 60.77 }, + { 10.0, 4.648, 77.229 }, + { 8.7, 1.97, 195.14 }, + { 8.4, 4.41, 134.59 }, + { 9.3, 3.93, 39.62 }, + { 7.8, 5.36, 75.74 }, + { 7.7, 5.77, 73.82 }, + { 7.7, 4.44, 14.01 }, + { 8.4, 2.44, 146.59 }, + { 8.0, 5.73, 184.73 }, + { 7.5, 2.19, 145.11 }, + { 6.4, 0.85, 32.20 }, + { 6.3, 2.17, 74.89 }, + { 7.9, 0.17, 120.36 }, + { 7.0, 4.12, 191.21 }, + { 6.9, 2.13, 116.43 }, + /* 101 terms retained, 325 terms dropped, error 0.29"*T */ + + /* uranus l, T^2 */ + { 53033.3, 0, 0 }, + { 2357.6, 2.26015, 74.78160 }, + { 769.1, 4.5256, 11.0457 }, + { 551.5, 3.2581, 63.7359 }, + { 541.5, 2.2757, 3.9322 }, + { 529.5, 4.9235, 1.4845 }, + { 257.5, 3.6906, 3.1814 }, + { 238.8, 5.8581, 149.5632 }, + { 181.9, 6.2176, 70.8494 }, + { 49.4, 6.031, 56.622 }, + { 53.5, 1.442, 76.266 }, + { 38.2, 1.785, 52.690 }, + { 44.8, 3.909, 2.448 }, + { 44.5, 0.812, 85.827 }, + { 37.4, 4.462, 2.969 }, + { 33.0, 0.864, 9.561 }, + { 24.3, 2.107, 18.159 }, + { 29.4, 5.098, 73.297 }, + { 22.1, 4.817, 78.714 }, + { 22.5, 5.993, 138.517 }, + { 17.2, 2.535, 145.631 }, + { 21.4, 2.399, 77.963 }, + { 20.6, 2.169, 224.345 }, + { 16.8, 3.466, 12.530 }, + { 12.0, 0.019, 22.091 }, + { 10.5, 4.456, 62.251 }, + { 11.0, 0.085, 127.472 }, + { 8.7, 4.26, 7.11 }, + { 10.5, 5.165, 71.600 }, + { 7.2, 1.25, 5.42 }, + { 8.4, 5.50, 67.67 }, + { 6.1, 5.45, 65.22 }, + { 6.0, 4.52, 151.05 }, + { 5.7, 1.83, 202.25 }, + { 6.1, 3.36, 447.80 }, + { 6.0, 5.73, 462.02 }, + { 5.1, 3.52, 59.80 }, + { 5.2, 1.06, 131.40 }, + { 6.0, 5.61, 148.08 }, + { 5.1, 3.36, 4.45 }, + { 4.8, 1.20, 71.81 }, + { 4.0, 0.68, 77.75 }, + { 3.7, 1.76, 351.82 }, + { 3.1, 3.84, 45.58 }, + { 3.0, 3.32, 160.61 }, + { 3.0, 6.15, 77.23 }, + { 3.6, 4.57, 454.91 }, + { 2.7, 5.36, 269.92 }, + { 2.5, 1.05, 69.36 }, + { 2.3, 2.69, 84.34 }, + { 2.2, 5.08, 14.98 }, + { 2.2, 1.39, 284.15 }, + { 2.1, 4.35, 984.60 }, + { 2.1, 2.32, 120.36 }, + { 1.9, 5.70, 54.17 }, + { 2.0, 3.87, 195.14 }, + { 1.6, 5.08, 209.37 }, + { 1.6, 0.49, 137.03 }, + { 1.6, 2.91, 51.21 }, + { 1.7, 6.26, 41.64 }, + { 2.1, 1.24, 35.16 }, + { 1.7, 6.28, 277.03 }, + /* 62 terms retained, 89 terms dropped, error 0.055"*T^2 */ + + /* uranus l, T^3 */ + { 120.9, 0.0242, 74.7816 }, + { 68.1, 4.121, 3.932 }, + { 52.8, 2.390, 11.046 }, + { 43.8, 2.960, 1.484 }, + { 45.3, 2.044, 3.181 }, + { 45.8, 0, 0 }, + { 25.0, 4.887, 63.736 }, + { 21.1, 4.545, 70.849 }, + { 19.9, 2.313, 149.563 }, + { 8.9, 1.58, 56.62 }, + { 4.3, 0.23, 18.16 }, + { 3.6, 5.39, 76.27 }, + { 3.5, 4.98, 85.83 }, + { 3.5, 4.13, 52.69 }, + { 3.6, 0.95, 77.96 }, + { 2.3, 0.86, 145.63 }, + { 2.7, 0.37, 78.71 }, + { 1.9, 2.68, 7.11 }, + { 2.2, 5.66, 9.56 }, + { 1.4, 4.87, 224.34 }, + { 1.3, 1.25, 12.53 }, + { 1.6, 0.49, 71.60 }, + { 1.5, 5.20, 73.30 }, + { 1.2, 3.93, 22.09 }, + { 0.9, 2.19, 127.47 }, + { 0.8, 3.98, 462.02 }, + { 0.8, 5.06, 447.80 }, + { 0.7, 0.35, 5.63 }, + { 0.7, 1.06, 138.52 }, + { 0.7, 2.94, 131.40 }, + { 0.5, 1.59, 151.05 }, + { 0.4, 4.33, 120.36 }, + /* 32 terms retained, 14 terms dropped, error 0.0098"*T^3 */ + + /* uranus l, T^4 */ + { 113.9, 3.1416, 0 }, + { 5.6, 4.58, 74.78 }, + { 3.2, 0.35, 11.05 }, + { 1.2, 3.42, 56.62 }, + { 0.6, 4.66, 18.16 }, + { 0.2, 3.80, 149.56 }, + { 0.1, 4.36, 63.74 }, + /* 7 terms retained, 0 terms dropped, error 0.0016"*T^4 */ + + /* uranus l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 0 terms dropped, error 0.0051"*T^5 */ + /* end uranus l */ + + /* uranus b, T^0 */ + { 1346277.6, 2.61877811, 74.78159857 }, + { 62341.4, 5.081112, 149.563197 }, + { 61601.2, 3.141593, 0 }, + { 9963.7, 1.61604, 76.26607 }, + { 9926.2, 0.57630, 73.29713 }, + { 3259.5, 1.26119, 224.34480 }, + { 2972.3, 2.24367, 1.48447 }, + { 2010.3, 6.05550, 148.07872 }, + { 1522.2, 0.27960, 63.73590 }, + { 924.1, 4.0382, 151.0477 }, + { 760.6, 6.1400, 71.8127 }, + { 420.3, 5.2128, 11.0457 }, + { 430.7, 3.5545, 213.2991 }, + { 436.8, 3.3808, 529.6910 }, + { 522.3, 3.3209, 138.5175 }, + { 434.6, 0.3407, 77.7505 }, + { 462.6, 0.7426, 85.8273 }, + { 232.6, 2.2572, 222.8603 }, + { 215.8, 1.5912, 38.1330 }, + { 244.7, 0.7880, 2.9689 }, + { 179.9, 3.7249, 299.1264 }, + { 174.9, 1.2355, 146.5943 }, + { 173.7, 1.9365, 380.1278 }, + { 160.4, 5.3364, 111.4302 }, + { 144.1, 5.9624, 35.1641 }, + { 102.0, 2.6188, 78.7138 }, + { 116.4, 5.7388, 70.8494 }, + { 106.4, 0.9410, 70.3282 }, + { 86.2, 0.703, 39.618 }, + { 72.6, 0.206, 225.829 }, + { 71.2, 0.833, 109.946 }, + { 57.5, 2.670, 108.461 }, + { 54.3, 3.352, 184.727 }, + { 44.5, 2.744, 152.532 }, + { 38.6, 5.174, 202.253 }, + { 39.2, 2.171, 351.817 }, + { 41.3, 3.221, 160.609 }, + { 35.1, 4.001, 112.915 }, + { 33.1, 3.614, 221.376 }, + { 31.3, 2.720, 145.110 }, + { 37.3, 4.021, 52.690 }, + { 32.0, 1.292, 145.631 }, + { 27.6, 3.701, 36.649 }, + /* 43 terms retained, 240 terms dropped, error 0.75" */ + + /* uranus b, T^1 */ + { 206366.2, 4.1239431, 74.7815986 }, + { 8563.2, 0.33820, 149.56320 }, + { 1725.7, 2.12193, 73.29713 }, + { 1368.9, 3.06862, 76.26607 }, + { 1374.4, 0, 0 }, + { 399.8, 2.8477, 224.3448 }, + { 450.6, 3.7766, 1.4845 }, + { 307.2, 1.2546, 148.0787 }, + { 154.3, 3.7858, 63.7359 }, + { 110.9, 5.3289, 138.5175 }, + { 112.4, 5.5730, 151.0477 }, + { 83.5, 3.592, 71.813 }, + { 55.6, 3.401, 85.827 }, + { 41.4, 4.455, 78.714 }, + { 53.7, 1.705, 77.751 }, + { 41.9, 1.215, 11.046 }, + { 32.0, 3.774, 222.860 }, + { 30.3, 2.564, 2.969 }, + { 27.0, 5.337, 213.299 }, + { 26.2, 0.416, 380.128 }, + { 20.1, 5.931, 529.691 }, + { 23.0, 2.489, 146.594 }, + { 19.6, 5.372, 299.126 }, + { 20.4, 3.702, 70.849 }, + { 19.1, 1.092, 111.430 }, + { 19.4, 3.830, 38.133 }, + { 10.8, 2.663, 3.932 }, + { 10.2, 2.313, 109.946 }, + { 9.4, 2.77, 39.62 }, + { 7.7, 1.81, 225.83 }, + { 8.1, 4.69, 184.73 }, + { 6.6, 5.50, 35.16 }, + { 7.4, 1.18, 65.22 }, + { 6.5, 4.98, 71.60 }, + /* 34 terms retained, 120 terms dropped, error 0.16"*T */ + + /* uranus b, T^2 */ + { 9211.7, 5.80044, 74.78160 }, + { 556.9, 0, 0 }, + { 286.3, 2.1773, 149.5632 }, + { 95.0, 3.842, 73.297 }, + { 45.4, 4.878, 76.266 }, + { 20.1, 5.463, 1.484 }, + { 14.8, 0.880, 138.517 }, + { 14.0, 5.072, 63.736 }, + { 14.3, 2.845, 148.079 }, + { 10.1, 5.003, 224.345 }, + { 8.3, 6.27, 78.71 }, + { 4.7, 5.16, 71.81 }, + { 3.8, 6.28, 85.83 }, + { 3.5, 3.53, 11.05 }, + { 2.6, 1.44, 151.05 }, + { 2.4, 4.23, 3.93 }, + { 2.6, 0.41, 71.60 }, + /* 17 terms retained, 43 terms dropped, error 0.045"*T^2 */ + + /* uranus b, T^3 */ + { 267.8, 1.2510, 74.7816 }, + { 11.0, 3.142, 0 }, + { 6.2, 4.01, 149.56 }, + { 3.4, 5.78, 73.30 }, + { 1.6, 1.06, 63.74 }, + { 1.3, 1.67, 78.71 }, + { 1.2, 2.59, 138.52 }, + { 1.1, 0.29, 76.27 }, + { 0.6, 1.87, 71.60 }, + { 0.6, 0.80, 1.48 }, + { 0.5, 4.43, 148.08 }, + /* 11 terms retained, 5 terms dropped, error 0.0067"*T^3 */ + + /* uranus b, T^4 */ + { 5.7, 2.85, 74.78 }, + { 0.3, 3.14, 0 }, + /* 2 terms retained, 0 terms dropped, error 0.0021"*T^4 */ + /* end uranus b */ + + /* uranus r, T^0 */ + { 1921264847.9, 0, 0 }, + { 88784984.1, 5.603775270, 74.781598567 }, + { 3440835.5, 0.32836099, 73.29712586 }, + { 2055653.5, 1.78295170, 149.56319713 }, + { 649321.9, 4.5224730, 76.2660713 }, + { 602248.1, 3.8600382, 63.7358983 }, + { 496404.2, 1.4013993, 454.9093665 }, + { 338525.5, 1.5800268, 138.5174969 }, + { 243508.2, 1.5708660, 71.8126532 }, + { 190521.9, 1.9980936, 1.4844727 }, + { 161858.3, 2.7913786, 148.0787244 }, + { 143705.9, 1.3836857, 11.0457003 }, + { 93192.4, 0.174372, 36.648563 }, + { 71424.3, 4.245093, 224.344796 }, + { 89805.8, 3.661054, 109.945689 }, + { 39009.6, 1.669711, 70.849445 }, + { 46677.3, 1.399766, 35.164090 }, + { 39025.7, 3.362347, 277.034994 }, + { 36755.2, 3.886489, 146.594252 }, + { 30348.9, 0.701004, 151.047670 }, + { 29156.3, 3.180562, 77.750544 }, + { 20471.6, 1.555890, 202.253395 }, + { 25620.4, 5.256563, 380.127768 }, + { 25785.8, 3.785377, 85.827299 }, + { 22637.2, 0.725191, 529.690965 }, + { 20473.2, 2.796398, 70.328180 }, + { 17900.6, 0.554555, 2.968945 }, + { 12328.2, 5.960392, 127.471797 }, + { 14701.6, 4.904344, 108.461216 }, + { 11494.7, 0.437740, 65.220371 }, + { 15502.8, 5.354050, 38.133036 }, + { 10792.7, 1.421049, 213.299095 }, + { 11696.1, 3.298256, 3.932153 }, + { 11959.4, 1.750441, 984.600332 }, + { 12896.5, 2.621540, 111.430161 }, + { 11853.0, 0.993428, 52.690198 }, + { 9111.4, 4.99639, 62.25143 }, + { 8420.6, 5.25351, 222.86032 }, + { 7449.1, 0.79492, 351.81659 }, + { 8402.1, 5.03878, 415.55249 }, + { 6046.4, 5.67961, 78.71375 }, + { 5524.1, 3.11499, 9.56123 }, + { 7329.5, 3.97278, 183.24281 }, + { 5444.9, 5.10576, 145.10978 }, + { 5238.1, 2.62960, 33.67962 }, + { 4079.2, 3.22065, 340.77089 }, + { 3801.6, 6.10986, 184.72729 }, + { 3919.5, 4.25015, 39.61751 }, + { 2940.5, 2.14637, 137.03302 }, + { 3781.2, 3.45840, 456.39384 }, + { 2942.2, 0.42394, 299.12639 }, + { 3686.8, 2.48718, 453.42489 }, + { 3101.7, 4.14031, 219.89138 }, + { 2962.6, 0.82978, 56.62235 }, + { 2937.8, 3.67657, 140.00197 }, + { 2865.1, 0.30997, 12.53017 }, + { 2538.0, 4.85458, 131.40395 }, + { 1962.5, 5.24342, 84.34283 }, + { 2363.6, 0.44253, 554.06999 }, + { 1979.4, 6.12836, 106.97674 }, + { 2182.6, 2.94040, 305.34617 }, + { 1963.0, 0.04115, 221.37585 }, + { 1829.6, 4.01106, 68.84371 }, + { 1642.9, 0.35564, 67.66805 }, + { 1584.8, 3.16267, 225.82927 }, + { 1848.7, 2.91112, 909.81873 }, + { 1632.4, 4.23062, 22.09140 }, + { 1401.4, 1.39084, 265.98929 }, + { 1403.7, 5.63564, 4.45342 }, + { 1655.9, 1.96431, 79.23502 }, + { 1249.0, 5.44027, 54.17467 }, + { 1563.4, 1.47918, 112.91463 }, + { 1248.1, 4.88984, 479.28839 }, + { 1197.4, 2.52186, 145.63104 }, + { 1507.0, 5.24186, 181.75834 }, + { 1481.7, 5.66203, 152.53214 }, + { 1438.8, 1.53046, 447.79582 }, + { 1408.5, 4.41922, 462.02291 }, + { 1477.1, 4.32215, 256.53994 }, + { 1228.3, 5.97703, 59.80375 }, + { 1250.0, 6.24485, 160.60890 }, + { 906.5, 5.6203, 74.6697 }, + { 1090.7, 4.15394, 77.96299 }, + { 844.9, 0.1294, 82.8584 }, + { 900.4, 2.3732, 74.8935 }, + { 1072.0, 1.74287, 528.20649 }, + { 689.7, 3.0810, 69.3650 }, + { 593.8, 4.5007, 8.0768 }, + { 718.6, 4.0005, 128.9563 }, + { 699.6, 0.0399, 143.6253 }, + { 575.7, 5.8955, 66.7048 }, + { 759.0, 2.1370, 692.5875 }, + { 710.4, 5.4161, 218.4069 }, + { 548.7, 5.6281, 3.1814 }, + { 651.6, 4.4234, 18.1592 }, + { 539.8, 6.2079, 71.6002 }, + { 544.5, 5.6938, 203.7379 }, + { 710.3, 4.2197, 381.6122 }, + { 593.8, 3.8381, 32.1951 }, + { 710.1, 4.4897, 293.1885 }, + { 705.5, 0.4552, 835.0371 }, + { 588.0, 5.0825, 186.2118 }, + { 598.2, 0.3582, 269.9214 }, + { 641.9, 2.7113, 87.3118 }, + { 495.6, 2.6509, 200.7689 }, + { 630.3, 4.4615, 275.5505 }, + { 575.2, 5.5786, 2.4477 }, + { 569.9, 1.6393, 77.2293 }, + { 556.7, 1.0723, 1059.3819 }, + { 449.4, 0.2798, 617.8059 }, + { 463.6, 1.4345, 297.6419 }, + { 436.5, 0.5280, 209.3669 }, + { 463.9, 2.3544, 211.8146 }, + { 435.9, 2.1008, 1514.2913 }, + { 515.5, 3.2327, 284.1485 }, + { 454.9, 4.0836, 99.1606 }, + { 477.4, 2.8940, 39.3569 }, + { 542.3, 5.3948, 278.5195 }, + { 410.1, 3.0497, 404.5068 }, + { 367.8, 0.7116, 125.9873 }, + { 503.1, 5.8393, 191.2077 }, + { 487.5, 0.0640, 60.7670 }, + { 455.0, 2.5932, 490.3341 }, + { 436.3, 2.0818, 51.2057 }, + { 435.8, 2.7945, 75.7448 }, + { 323.5, 4.8290, 195.1398 }, + { 359.4, 0.0087, 35.4247 }, + { 429.3, 3.0803, 41.1020 }, + { 320.0, 5.4863, 14.9779 }, + { 414.3, 0.0901, 258.0244 }, + { 379.7, 0.0583, 378.6433 }, + { 420.1, 2.2539, 81.0014 }, + { 357.7, 4.7141, 173.9422 }, + { 358.9, 0.3521, 426.5982 }, + { 405.4, 6.1226, 24.3790 }, + { 365.2, 5.5948, 255.0555 }, + { 308.1, 3.9236, 116.4261 }, + { 325.7, 4.7200, 134.5853 }, + { 292.8, 3.9952, 72.3339 }, + { 386.5, 0.6862, 230.5646 }, + { 305.7, 3.7611, 344.7030 }, + { 287.0, 1.8499, 153.4954 }, + { 353.6, 4.6572, 329.8371 }, + { 302.1, 0.1319, 565.1157 }, + { 241.1, 1.6045, 81.3739 }, + { 249.8, 4.2421, 75.3029 }, + { 245.1, 5.9491, 20.6069 }, + { 248.3, 1.0628, 105.4923 }, + { 305.4, 2.5553, 6208.2943 }, + { 296.3, 4.2110, 1364.7281 }, + { 219.9, 2.9612, 120.3582 }, + { 233.6, 2.9707, 46.2098 }, + { 262.4, 3.8365, 831.1050 }, + { 233.5, 4.4812, 628.8516 }, + { 187.4, 3.0353, 135.5486 }, + { 216.8, 3.4291, 241.6103 }, + { 255.8, 1.1671, 177.8744 }, + { 220.5, 0.1963, 180.2739 }, + { 224.5, 0.4068, 114.3991 }, + { 205.4, 2.3038, 259.5089 }, + { 211.1, 4.9308, 103.0928 }, + { 175.8, 5.5082, 7.1135 }, + { 188.5, 2.2359, 5.4166 }, + { 171.7, 5.2173, 41.6445 }, + { 176.1, 1.9596, 756.3234 }, + { 170.4, 4.9498, 206.1855 }, + { 169.5, 4.0432, 55.6591 }, + { 219.0, 0.2479, 294.6730 }, + { 187.8, 2.0454, 408.4389 }, + { 182.3, 0.7073, 391.1735 }, + { 192.1, 5.7672, 291.7040 }, + { 153.7, 4.7066, 543.0243 }, + { 170.0, 4.5100, 288.0807 }, + { 164.1, 5.2253, 67.3592 }, + { 194.3, 6.1169, 414.0680 }, + { 168.0, 5.2581, 518.6453 }, + { 156.6, 0.6630, 220.4126 }, + { 182.3, 0.7838, 417.0370 }, + { 167.5, 4.9224, 422.6660 }, + { 170.8, 2.3093, 98.9000 }, + { 161.7, 3.2726, 443.8637 }, + { 132.8, 2.8888, 373.9080 }, + { 161.1, 3.8234, 451.9404 }, + { 179.3, 4.8241, 366.4856 }, + { 178.2, 3.9803, 10138.5039 }, + { 141.9, 1.2697, 159.1244 }, + { 153.8, 4.2785, 45.5767 }, + { 161.5, 4.9955, 73.8184 }, + { 146.3, 2.6566, 465.9551 }, + { 124.9, 4.3047, 339.2864 }, + { 154.6, 4.3205, 760.2555 }, + { 142.9, 2.0777, 457.8783 }, + { 152.4, 4.6474, 155.7830 }, + { 116.4, 4.4351, 5.9379 }, + { 113.4, 4.6535, 80.1982 }, + { 107.6, 3.7729, 142.4497 }, + { 133.7, 5.3089, 14.0146 }, + { 116.1, 2.5118, 296.1574 }, + { 129.1, 0.3628, 96.8730 }, + { 122.8, 2.3834, 141.4864 }, + { 101.4, 1.0574, 92.3077 }, + { 114.7, 6.2486, 767.3691 }, + { 113.3, 0.8305, 100.3845 }, + { 107.2, 2.3937, 347.8844 }, + { 95.4, 0.801, 342.255 }, + { 110.8, 0.3865, 216.9224 }, + { 127.0, 0.4236, 331.3215 }, + { 112.6, 0.0811, 558.0021 }, + { 103.2, 0.6979, 358.9301 }, + { 111.5, 0.7502, 80.7195 }, + { 90.9, 5.165, 144.147 }, + { 90.7, 0.220, 333.657 }, + { 98.6, 4.332, 74.521 }, + { 89.3, 2.189, 74.830 }, + { 117.2, 3.9497, 74.2603 }, + { 89.1, 5.878, 74.733 }, + { 97.3, 0.694, 977.487 }, + { 116.6, 1.8368, 1289.9465 }, + { 85.4, 5.803, 6.592 }, + { 86.8, 5.620, 300.611 }, + { 105.2, 5.9451, 328.3526 }, + { 112.1, 1.2117, 329.7252 }, + { 83.0, 2.208, 74.942 }, + { 94.3, 4.539, 28.572 }, + { 106.8, 1.8207, 306.8306 }, + { 103.6, 2.9937, 6.2198 }, + { 106.4, 0.8158, 1087.6931 }, + { 77.7, 2.734, 110.206 }, + { 98.4, 3.735, 75.042 }, + { 86.2, 2.833, 983.116 }, + { 89.0, 4.738, 604.473 }, + { 83.0, 1.883, 387.241 }, + { 90.2, 3.804, 986.085 }, + { 84.6, 1.258, 142.141 }, + { 74.7, 1.351, 350.332 }, + { 95.8, 5.548, 969.622 }, + { 90.3, 0.368, 0.963 }, + { 82.7, 5.856, 74.622 }, + { 75.8, 2.780, 88.115 }, + { 83.8, 1.844, 227.314 }, + { 70.7, 4.656, 44.725 }, + { 71.3, 3.650, 894.841 }, + { 94.1, 4.988, 403.134 }, + { 89.0, 4.439, 154.017 }, + { 79.4, 5.667, 267.474 }, + { 75.6, 5.410, 50.403 }, + { 68.6, 4.767, 991.714 }, + { 65.3, 0.693, 152.745 }, + { 63.0, 2.899, 79.889 }, + { 63.9, 0.098, 681.542 }, + { 80.1, 2.975, 526.722 }, + { 69.7, 3.953, 187.696 }, + { 59.5, 3.596, 58.107 }, + { 59.3, 0.509, 28.311 }, + { 68.6, 2.419, 235.390 }, + { 66.0, 5.046, 30.711 }, + { 70.2, 3.736, 546.956 }, + { 66.8, 0.855, 522.577 }, + { 63.0, 0.293, 119.507 }, + { 62.0, 2.316, 74.031 }, + { 71.4, 3.170, 23.576 }, + { 74.8, 5.368, 373.014 }, + { 64.2, 2.368, 157.640 }, + { 70.7, 0.558, 92.941 }, + { 55.8, 5.270, 874.394 }, + { 75.6, 4.663, 101.869 }, + { 73.7, 6.206, 312.460 }, + { 72.9, 0.584, 367.970 }, + { 53.2, 2.247, 17.526 }, + { 63.1, 4.596, 67.880 }, + { 60.5, 0.576, 253.571 }, + { 52.9, 2.459, 264.505 }, + { 70.2, 1.519, 552.586 }, + { 68.6, 2.445, 555.554 }, + { 62.8, 0.338, 561.184 }, + { 49.0, 1.092, 19.122 }, + { 64.6, 5.275, 68.189 }, + { 63.0, 5.359, 92.047 }, + { 47.7, 3.909, 192.692 }, + { 65.3, 4.236, 771.301 }, + { 65.2, 3.739, 536.805 }, + { 59.5, 6.106, 365.001 }, + { 52.2, 1.717, 905.887 }, + { 46.0, 3.871, 210.330 }, + { 46.4, 5.974, 477.804 }, + { 62.1, 2.675, 130.441 }, + { 46.0, 3.894, 48.758 }, + { 42.7, 3.815, 61.288 }, + { 53.9, 2.865, 353.301 }, + { 46.9, 1.000, 166.829 }, + { 42.2, 2.617, 90.823 }, + { 43.3, 4.158, 173.682 }, + { 41.3, 1.799, 149.451 }, + { 45.0, 1.766, 0.521 }, + { 51.9, 2.978, 383.097 }, + { 42.9, 1.574, 120.991 }, + { 49.6, 4.034, 303.862 }, + { 45.3, 3.584, 97.416 }, + { 38.7, 2.394, 31.493 }, + { 38.1, 5.795, 75.532 }, + { 50.1, 4.764, 911.303 }, + { 50.9, 5.155, 439.783 }, + { 43.1, 0.850, 58.319 }, + { 42.7, 5.173, 162.093 }, + { 50.3, 5.816, 66.917 }, + { 35.6, 1.874, 472.175 }, + { 50.0, 1.889, 42.586 }, + { 40.0, 1.743, 89.759 }, + { 45.3, 1.925, 55.138 }, + { 44.9, 1.484, 450.977 }, + { 34.3, 5.203, 316.392 }, + { 46.4, 0.339, 273.103 }, + { 37.2, 2.038, 117.911 }, + { 46.1, 5.623, 1819.637 }, + { 39.4, 4.194, 486.402 }, + { 41.0, 4.830, 149.675 }, + { 45.0, 0.727, 3265.831 }, + { 43.6, 0.753, 404.619 }, + { 31.8, 3.848, 20.447 }, + { 44.2, 4.368, 418.261 }, + { 37.9, 3.029, 167.089 }, + { 43.7, 1.573, 491.558 }, + { 34.0, 1.263, 260.993 }, + { 31.3, 4.161, 13.333 }, + { 40.0, 2.866, 468.243 }, + { 36.5, 2.588, 68.562 }, + { 32.4, 3.116, 103.353 }, + { 33.9, 0.156, 24.118 }, + { 35.9, 1.368, 59.282 }, + { 33.6, 0.755, 290.220 }, + { 29.8, 5.332, 1033.358 }, + { 32.0, 4.675, 205.222 }, + { 31.0, 4.628, 258.876 }, + { 35.3, 1.007, 1108.140 }, + { 33.4, 3.407, 43.129 }, + { 32.6, 5.255, 114.138 }, + { 29.8, 5.642, 254.944 }, + { 31.6, 3.782, 152.011 }, + { 31.0, 2.267, 104.008 }, + { 34.6, 5.173, 25.603 }, + { 28.4, 1.769, 820.059 }, + { 28.0, 3.925, 199.284 }, + { 29.0, 2.582, 76.479 }, + { 33.8, 5.794, 274.066 }, + { 29.4, 5.936, 280.967 }, + { 31.1, 1.394, 178.789 }, + { 30.1, 0.444, 27.087 }, + { 33.8, 6.262, 401.650 }, + { 27.5, 2.152, 480.773 }, + { 26.9, 2.513, 123.540 }, + { 26.1, 0.220, 286.596 }, + { 26.5, 3.882, 372.424 }, + { 34.0, 1.446, 88.796 }, + { 30.1, 0.827, 100.645 }, + { 27.7, 4.648, 198.321 }, + { 33.7, 1.143, 82.486 }, + { 26.5, 1.979, 95.389 }, + { 26.6, 0.399, 106.014 }, + { 27.0, 2.102, 1057.897 }, + { 31.0, 5.340, 476.431 }, + { 27.0, 0.713, 248.724 }, + { 29.1, 3.992, 908.334 }, + { 28.0, 3.465, 1439.510 }, + { 27.8, 4.124, 694.072 }, + { 25.5, 5.496, 115.884 }, + { 27.2, 5.761, 1215.165 }, + { 26.3, 2.775, 490.073 }, + { 26.4, 3.371, 49.721 }, + { 26.9, 3.260, 691.103 }, + { 25.0, 3.650, 73.409 }, + /* 370 terms retained, 754 terms dropped, error 9.6e-06 a.u. */ + + /* uranus r, T^1 */ + { 1479896.4, 3.67205705, 74.78159857 }, + { 71212.1, 6.226010, 63.735898 }, + { 68627.0, 6.134113, 149.563197 }, + { 20857.3, 5.246255, 11.045700 }, + { 21468.2, 2.601767, 76.266071 }, + { 24059.6, 3.141593, 0 }, + { 11405.3, 0.018485, 70.849445 }, + { 7496.8, 0.42360, 73.29713 }, + { 4243.8, 1.41692, 85.82730 }, + { 3505.9, 2.58354, 138.51750 }, + { 3228.8, 5.25500, 3.93215 }, + { 3926.7, 3.15514, 71.81265 }, + { 3060.0, 0.15322, 1.48447 }, + { 3578.4, 2.31161, 224.34480 }, + { 2564.3, 0.98077, 148.07872 }, + { 2429.4, 3.99440, 52.69020 }, + { 1644.7, 2.65349, 127.47180 }, + { 1583.8, 1.43046, 78.71375 }, + { 1413.1, 4.57462, 202.25340 }, + { 1489.5, 2.67559, 56.62235 }, + { 1403.2, 1.36985, 77.75054 }, + { 1228.2, 1.04704, 62.25143 }, + { 1508.0, 5.05996, 151.04767 }, + { 992.1, 2.1717, 65.2204 }, + { 1032.7, 0.26459, 131.40395 }, + { 861.9, 5.0553, 351.8166 }, + { 744.4, 3.0764, 35.1641 }, + { 604.4, 0.9072, 984.6003 }, + { 646.9, 4.4729, 70.3282 }, + { 574.7, 3.2307, 447.7958 }, + { 687.5, 2.4991, 77.9630 }, + { 623.6, 0.8625, 9.5612 }, + { 527.8, 5.1514, 2.9689 }, + { 561.8, 2.7178, 462.0229 }, + { 530.4, 5.9166, 213.2991 }, + { 460.1, 4.2230, 12.5302 }, + { 494.3, 0.4629, 145.6310 }, + { 487.3, 0.7061, 380.1278 }, + { 380.9, 3.8509, 3.1814 }, + { 444.4, 2.1556, 67.6681 }, + { 338.8, 2.5382, 18.1592 }, + { 372.9, 5.0514, 529.6910 }, + { 348.3, 1.7487, 71.6002 }, + { 405.9, 1.2296, 22.0914 }, + { 268.9, 6.2407, 340.7709 }, + { 255.6, 2.9570, 84.3428 }, + { 259.5, 3.9205, 59.8037 }, + { 224.7, 3.9096, 160.6089 }, + { 221.7, 3.6473, 137.0330 }, + { 254.6, 3.5041, 38.1330 }, + { 238.3, 2.0488, 269.9214 }, + { 272.4, 3.3836, 222.8603 }, + { 200.6, 1.2486, 69.3650 }, + { 234.2, 0.2783, 108.4612 }, + { 188.5, 4.4131, 265.9893 }, + { 211.7, 0.6803, 111.4302 }, + { 205.9, 1.5338, 284.1485 }, + { 196.2, 4.7715, 299.1264 }, + { 153.1, 5.2176, 209.3669 }, + { 162.6, 4.3405, 33.6796 }, + { 150.6, 1.9897, 54.1747 }, + { 137.0, 0.4032, 195.1398 }, + { 117.2, 0.3965, 87.3118 }, + { 127.9, 2.4033, 39.6175 }, + { 104.2, 2.9215, 134.5853 }, + { 103.9, 1.8162, 72.3339 }, + { 105.7, 0.1707, 79.2350 }, + { 106.4, 0.6980, 2.4477 }, + { 95.3, 4.029, 82.858 }, + { 104.8, 4.4362, 305.3462 }, + { 93.8, 5.018, 51.206 }, + { 103.7, 2.5755, 191.2077 }, + { 106.7, 1.2300, 225.8293 }, + { 93.5, 3.093, 77.229 }, + { 97.4, 3.814, 152.532 }, + { 84.6, 5.725, 68.844 }, + { 77.4, 0.083, 45.577 }, + { 76.2, 4.204, 73.818 }, + { 86.2, 0.531, 145.110 }, + { 75.8, 3.786, 75.745 }, + { 77.6, 1.636, 479.288 }, + { 84.6, 0.617, 116.426 }, + { 100.2, 4.9408, 120.3582 }, + { 72.1, 4.305, 565.116 }, + { 70.7, 2.385, 60.767 }, + { 71.6, 3.939, 153.495 }, + { 84.6, 5.560, 344.703 }, + { 63.6, 1.937, 41.644 }, + { 71.6, 3.712, 408.439 }, + { 61.6, 3.900, 4.453 }, + { 65.0, 1.558, 106.977 }, + { 59.9, 0.601, 74.893 }, + { 62.0, 4.394, 453.425 }, + { 63.4, 4.192, 184.727 }, + { 62.3, 3.238, 422.666 }, + { 54.4, 3.725, 7.114 }, + { 52.5, 6.086, 404.507 }, + { 59.1, 1.556, 456.394 }, + { 52.6, 3.505, 125.987 }, + { 52.8, 5.201, 358.930 }, + { 58.1, 5.335, 220.413 }, + { 52.9, 4.448, 426.598 }, + { 50.9, 0.526, 490.334 }, + { 55.0, 1.601, 14.978 }, + { 49.5, 4.255, 5.417 }, + { 51.3, 0.368, 206.186 }, + { 51.8, 1.758, 8.077 }, + { 57.0, 0.841, 146.594 }, + { 49.1, 0.941, 99.161 }, + { 46.4, 5.351, 152.745 }, + { 48.0, 1.972, 288.081 }, + { 43.8, 3.037, 20.607 }, + { 49.5, 5.846, 112.915 }, + { 42.0, 0.046, 128.956 }, + { 48.6, 3.628, 81.001 }, + { 41.5, 2.337, 277.035 }, + { 40.0, 5.095, 35.425 }, + { 41.9, 2.511, 24.379 }, + { 38.3, 3.619, 173.942 }, + { 38.4, 2.060, 333.657 }, + { 42.6, 1.261, 1514.291 }, + { 38.9, 0.742, 347.884 }, + { 38.5, 4.951, 92.941 }, + { 33.2, 1.384, 74.670 }, + { 33.8, 3.684, 66.917 }, + { 39.0, 5.492, 200.769 }, + { 31.9, 0.540, 203.738 }, + { 33.3, 6.260, 1059.382 }, + { 30.8, 2.538, 977.487 }, + { 29.2, 5.431, 58.107 }, + { 30.1, 0.195, 387.241 }, + { 29.0, 3.105, 991.714 }, + { 35.6, 3.729, 96.873 }, + { 27.6, 0.371, 80.198 }, + { 32.5, 4.384, 221.376 }, + { 27.0, 1.356, 0.963 }, + { 31.3, 0.796, 373.014 }, + { 31.1, 2.054, 230.565 }, + { 25.9, 3.468, 144.147 }, + { 30.2, 0.714, 109.946 }, + { 24.7, 3.042, 14.015 }, + { 27.9, 4.766, 415.552 }, + { 25.1, 5.124, 81.374 }, + { 25.6, 2.569, 522.577 }, + { 24.4, 2.203, 628.852 }, + { 25.5, 1.795, 143.625 }, + { 24.2, 5.672, 443.864 }, + { 25.7, 5.432, 546.956 }, + { 24.2, 5.600, 32.195 }, + { 24.4, 3.303, 617.806 }, + { 23.5, 0.658, 46.210 }, + { 22.4, 4.821, 135.549 }, + { 27.2, 2.027, 536.805 }, + { 22.2, 4.617, 391.173 }, + { 22.0, 4.592, 241.610 }, + { 20.8, 0.244, 465.955 }, + { 27.3, 2.152, 140.002 }, + { 21.4, 5.272, 159.124 }, + { 23.6, 4.950, 561.184 }, + { 24.9, 0.546, 181.758 }, + { 23.0, 3.806, 55.138 }, + { 19.8, 1.303, 518.645 }, + { 19.3, 1.314, 543.024 }, + { 19.7, 4.909, 909.819 }, + { 20.8, 0.912, 76.479 }, + { 19.9, 0.665, 66.705 }, + { 19.0, 4.680, 98.900 }, + { 25.9, 4.529, 454.909 }, + { 21.9, 1.234, 41.102 }, + { 18.7, 6.096, 103.093 }, + { 18.2, 0.973, 55.659 }, + { 21.2, 4.194, 329.725 }, + { 19.4, 4.315, 6.220 }, + { 18.5, 5.786, 142.450 }, + { 22.6, 5.846, 297.642 }, + { 16.8, 6.091, 211.815 }, + { 16.4, 2.500, 61.288 }, + { 20.4, 3.161, 186.212 }, + { 16.0, 2.983, 81.895 }, + { 19.0, 6.012, 155.783 }, + { 17.7, 4.826, 273.103 }, + { 15.1, 3.656, 472.175 }, + { 18.4, 3.476, 36.649 }, + { 16.3, 0.131, 554.070 }, + { 18.6, 0.239, 23.576 }, + { 14.4, 2.694, 70.116 }, + { 15.2, 2.438, 486.402 }, + { 14.0, 5.124, 29.205 }, + { 15.8, 4.249, 146.382 }, + { 14.1, 1.557, 110.206 }, + { 17.5, 1.945, 835.037 }, + { 13.7, 1.638, 92.047 }, + { 13.8, 0.137, 235.390 }, + { 13.6, 2.854, 49.509 }, + { 12.6, 3.209, 100.384 }, + { 12.4, 2.886, 60.555 }, + { 15.0, 0.326, 259.509 }, + { 12.9, 2.776, 105.492 }, + { 12.3, 3.364, 440.682 }, + { 15.2, 0.256, 258.876 }, + { 12.1, 0.109, 157.640 }, + { 12.9, 0.307, 124.290 }, + { 10.9, 3.429, 33.137 }, + { 11.2, 4.988, 604.473 }, + { 10.8, 3.863, 767.369 }, + { 11.6, 2.605, 166.829 }, + { 10.2, 5.278, 264.505 }, + { 10.9, 0.641, 558.002 }, + { 12.3, 4.340, 16.675 }, + { 9.9, 0.67, 31.49 }, + { 12.6, 4.832, 114.399 }, + { 10.5, 0.204, 275.551 }, + { 11.3, 0.961, 373.908 }, + { 12.1, 1.917, 378.643 }, + { 12.2, 0.705, 218.407 }, + { 10.8, 5.745, 88.115 }, + { 9.5, 0.66, 353.30 }, + { 11.0, 2.630, 154.017 }, + { 9.1, 2.99, 681.54 }, + { 10.4, 2.331, 132.888 }, + { 9.2, 4.79, 216.48 }, + { 9.3, 0.76, 129.92 }, + { 8.9, 0.78, 67.36 }, + { 8.8, 6.13, 150.53 }, + { 9.6, 2.89, 67.88 }, + { 10.5, 0.369, 699.701 }, + { 9.3, 1.50, 19.64 }, + { 9.4, 5.26, 80.72 }, + { 10.1, 3.565, 278.519 }, + { 9.5, 3.06, 149.68 }, + { 9.2, 3.03, 162.09 }, + { 8.4, 2.18, 342.26 }, + { 9.2, 5.33, 152.01 }, + { 9.8, 2.44, 75.30 }, + { 10.0, 0.819, 339.286 }, + { 9.4, 1.94, 147.12 }, + { 7.9, 4.72, 106.01 }, + { 8.8, 0.02, 42.59 }, + { 7.8, 0.61, 135.34 }, + { 8.2, 2.60, 469.14 }, + { 10.1, 2.586, 50.403 }, + { 8.6, 5.69, 760.26 }, + { 7.5, 2.65, 5.94 }, + { 8.7, 0.54, 66.18 }, + { 8.0, 1.94, 180.27 }, + { 7.5, 5.95, 97.42 }, + { 7.6, 5.80, 450.98 }, + { 8.7, 3.70, 300.61 }, + { 7.7, 1.47, 32.24 }, + { 8.2, 2.31, 254.94 }, + { 8.5, 1.28, 39.36 }, + { 7.0, 0.68, 874.39 }, + { 8.9, 0.16, 43.13 }, + { 7.2, 4.98, 117.91 }, + { 7.4, 4.09, 92.31 }, + { 7.3, 5.04, 756.32 }, + { 8.5, 1.22, 79.45 }, + { 6.9, 6.04, 350.33 }, + { 8.8, 1.33, 48.76 }, + { 7.3, 3.33, 68.19 }, + { 6.8, 4.78, 142.66 }, + { 6.8, 3.90, 480.77 }, + { 7.1, 1.28, 68.56 }, + { 7.9, 4.30, 624.92 }, + { 6.7, 5.43, 610.69 }, + { 6.5, 5.44, 88.80 }, + { 7.6, 4.81, 312.46 }, + { 7.2, 3.18, 268.44 }, + { 8.1, 1.99, 692.59 }, + { 6.5, 1.05, 685.47 }, + { 6.6, 1.38, 291.26 }, + { 6.9, 2.59, 282.66 }, + { 7.1, 5.80, 468.24 }, + { 6.3, 2.58, 458.09 }, + { 7.6, 0.49, 296.16 }, + { 8.5, 0.01, 227.31 }, + { 6.5, 3.99, 42.54 }, + { 6.4, 1.04, 365.90 }, + { 8.2, 1.13, 69.15 }, + { 6.4, 0.16, 228.28 }, + { 8.0, 4.04, 183.24 }, + { 6.3, 3.52, 285.63 }, + { 6.9, 3.32, 306.83 }, + { 6.9, 1.34, 7.86 }, + { 6.5, 0.46, 106.27 }, + { 6.6, 5.25, 58.32 }, + { 6.4, 0.35, 411.62 }, + { 6.4, 5.19, 120.99 }, + { 7.0, 4.86, 419.48 }, + { 6.4, 2.78, 198.32 }, + /* 290 terms retained, 224 terms dropped, error 2.2e-06 a.u.*T */ + + /* uranus r, T^2 */ + { 22439.9, 0.699531, 74.781599 }, + { 4727.0, 1.69902, 63.73590 }, + { 1681.9, 4.64834, 70.84945 }, + { 1433.8, 3.52120, 149.56320 }, + { 1649.6, 3.09660, 11.04570 }, + { 770.2, 0, 0 }, + { 461.0, 0.7668, 3.9322 }, + { 500.4, 6.1723, 76.2661 }, + { 390.4, 4.4961, 56.6224 }, + { 389.9, 5.5267, 85.8273 }, + { 292.1, 0.2039, 52.6902 }, + { 272.9, 3.8471, 138.5175 }, + { 286.6, 3.5336, 73.2971 }, + { 205.4, 3.2476, 78.7138 }, + { 219.7, 1.9642, 131.4039 }, + { 215.8, 0.8481, 77.9630 }, + { 128.8, 2.0815, 3.1814 }, + { 148.6, 4.8984, 127.4718 }, + { 117.5, 4.9341, 447.7958 }, + { 112.7, 1.0136, 462.0229 }, + { 98.9, 6.158, 224.345 }, + { 91.4, 0.680, 18.159 }, + { 89.2, 0.234, 202.253 }, + { 88.2, 2.931, 62.251 }, + { 114.1, 4.7874, 145.6310 }, + { 103.9, 3.5856, 71.6002 }, + { 61.8, 3.300, 351.817 }, + { 57.8, 4.907, 22.091 }, + { 64.4, 3.390, 1.484 }, + { 71.1, 6.105, 454.909 }, + { 51.0, 3.867, 65.220 }, + { 63.5, 3.962, 67.668 }, + { 59.0, 5.555, 9.561 }, + { 48.7, 3.747, 269.921 }, + { 43.6, 1.926, 59.804 }, + { 42.2, 2.617, 151.048 }, + { 42.4, 6.136, 284.149 }, + { 44.3, 5.900, 71.813 }, + { 37.3, 5.913, 984.600 }, + { 36.2, 5.403, 77.751 }, + { 42.0, 2.091, 12.530 }, + { 31.4, 4.592, 148.079 }, + { 31.3, 2.267, 195.140 }, + { 27.2, 3.532, 209.367 }, + { 28.2, 4.578, 77.229 }, + { 26.1, 0.660, 120.358 }, + { 24.4, 5.867, 69.365 }, + { 23.0, 1.038, 84.343 }, + { 22.7, 1.714, 160.609 }, + { 27.7, 4.915, 277.035 }, + { 20.8, 2.196, 45.577 }, + { 20.0, 2.321, 2.448 }, + { 16.6, 4.775, 213.299 }, + { 16.6, 1.856, 340.771 }, + { 17.2, 4.369, 54.175 }, + { 16.1, 3.646, 152.745 }, + { 14.8, 5.438, 408.439 }, + { 13.9, 3.385, 358.930 }, + { 13.3, 5.252, 137.033 }, + { 13.3, 1.263, 134.585 }, + { 12.9, 3.033, 92.941 }, + { 12.5, 1.332, 51.206 }, + { 13.4, 1.532, 422.666 }, + { 16.4, 0.402, 265.989 }, + { 12.0, 5.104, 191.208 }, + { 12.9, 4.432, 87.312 }, + { 11.4, 2.026, 7.114 }, + { 11.8, 4.656, 41.644 }, + { 12.0, 3.239, 116.426 }, + { 11.7, 3.733, 220.413 }, + { 11.6, 4.165, 60.555 }, + { 10.2, 0.329, 70.328 }, + { 11.3, 1.076, 72.334 }, + { 9.7, 3.06, 2.97 }, + { 9.3, 2.44, 565.12 }, + { 9.0, 5.19, 225.83 }, + { 10.3, 1.186, 344.703 }, + { 8.8, 6.01, 5.42 }, + { 8.5, 5.25, 347.88 }, + { 8.3, 3.72, 14.98 }, + { 8.3, 2.27, 299.13 }, + { 8.1, 5.72, 55.14 }, + { 7.8, 0.90, 222.86 }, + { 8.3, 4.49, 70.12 }, + { 8.8, 5.82, 153.50 }, + { 8.5, 3.91, 333.66 }, + { 9.9, 5.97, 35.16 }, + { 9.6, 0.39, 415.55 }, + { 7.1, 1.51, 991.71 }, + { 6.6, 1.18, 96.87 }, + { 8.1, 2.26, 206.19 }, + { 6.5, 2.99, 380.13 }, + { 9.0, 6.05, 146.38 }, + { 6.1, 0.06, 99.16 }, + { 5.8, 0.82, 142.45 }, + { 5.8, 4.63, 49.51 }, + { 5.6, 0.66, 58.11 }, + { 6.0, 2.49, 373.01 }, + { 5.7, 2.24, 80.20 }, + { 5.3, 5.07, 440.68 }, + { 5.2, 4.36, 977.49 }, + { 5.4, 0.85, 546.96 }, + { 5.8, 0.34, 536.80 }, + { 5.9, 5.48, 76.48 }, + { 5.3, 3.73, 23.58 }, + { 5.2, 4.14, 132.89 }, + { 5.3, 6.14, 39.62 }, + { 5.8, 3.40, 458.09 }, + { 5.0, 4.26, 522.58 }, + { 5.0, 4.79, 387.24 }, + { 5.2, 3.26, 561.18 }, + { 4.6, 1.69, 152.53 }, + { 5.3, 1.84, 124.29 }, + { 5.0, 0.37, 60.77 }, + { 4.5, 2.30, 312.46 }, + { 4.5, 0.46, 33.14 }, + { 5.7, 0.90, 81.90 }, + { 5.8, 0.92, 20.61 }, + { 5.7, 0.66, 38.13 }, + { 4.3, 3.55, 479.29 }, + { 4.2, 4.38, 79.24 }, + { 4.2, 1.65, 128.96 }, + { 5.1, 1.41, 144.15 }, + { 4.0, 6.07, 19.64 }, + { 4.0, 5.77, 288.08 }, + { 5.0, 3.00, 29.20 }, + { 3.8, 2.60, 426.60 }, + { 3.9, 3.20, 159.12 }, + { 3.9, 4.44, 141.70 }, + { 5.3, 4.08, 111.43 }, + { 4.6, 0.01, 298.23 }, + { 3.7, 5.28, 353.30 }, + { 3.9, 5.27, 521.09 }, + { 3.7, 5.15, 490.33 }, + { 4.0, 0.61, 152.01 }, + { 3.9, 1.34, 535.32 }, + { 4.4, 0.62, 827.17 }, + { 3.6, 4.72, 6.90 }, + { 3.6, 3.25, 230.56 }, + { 3.5, 0.79, 983.12 }, + { 4.5, 2.87, 129.92 }, + { 3.6, 5.59, 774.48 }, + { 3.5, 4.50, 376.20 }, + { 3.4, 2.56, 258.88 }, + { 4.4, 2.10, 404.51 }, + { 3.3, 0.90, 469.14 }, + { 3.3, 3.86, 42.54 }, + { 3.2, 2.76, 248.72 }, + { 3.2, 0.08, 1514.29 }, + { 3.8, 5.30, 369.08 }, + { 3.3, 2.25, 73.82 }, + { 3.1, 2.60, 433.71 }, + { 3.1, 4.55, 980.67 }, + { 3.1, 1.27, 200.77 }, + { 3.1, 1.71, 639.90 }, + { 3.1, 3.63, 16.67 }, + { 3.5, 4.94, 411.62 }, + { 3.5, 4.49, 881.51 }, + { 3.3, 5.59, 472.17 }, + { 3.0, 6.03, 291.26 }, + { 3.5, 2.17, 554.07 }, + { 3.1, 0.52, 1094.81 }, + { 3.3, 2.49, 451.73 }, + { 2.9, 0.50, 305.35 }, + { 3.1, 4.20, 146.59 }, + { 2.9, 2.45, 135.34 }, + { 3.0, 0.39, 25.27 }, + { 2.8, 2.53, 867.28 }, + { 2.7, 5.29, 125.99 }, + { 2.9, 4.71, 218.93 }, + { 2.8, 4.28, 350.33 }, + { 2.7, 1.99, 82.86 }, + { 2.9, 3.09, 216.48 }, + { 3.4, 3.68, 661.09 }, + { 2.9, 1.44, 381.61 }, + { 2.8, 0.39, 33.68 }, + { 2.8, 4.63, 1357.61 }, + { 3.4, 2.13, 685.47 }, + { 2.6, 5.93, 89.76 }, + { 2.7, 0.76, 486.40 }, + { 2.7, 4.16, 235.39 }, + { 2.6, 3.82, 550.89 }, + { 3.4, 3.17, 108.46 }, + { 2.6, 5.68, 24.38 }, + { 2.7, 1.87, 529.69 }, + { 2.6, 4.37, 1080.58 }, + { 2.4, 3.07, 391.17 }, + { 2.4, 5.74, 535.91 }, + { 2.3, 5.19, 1059.38 }, + { 2.6, 1.10, 913.00 }, + { 2.2, 6.10, 140.00 }, + { 3.1, 5.35, 681.54 }, + /* 192 terms retained, 0 terms dropped, error 8.5e-07 a.u.*T^2 */ + + /* uranus r, T^3 */ + { 1164.4, 4.73453, 74.78160 }, + { 212.4, 3.3426, 63.7359 }, + { 196.4, 2.9800, 70.8494 }, + { 104.5, 0.9581, 11.0457 }, + { 71.7, 0.025, 56.622 }, + { 72.5, 0.997, 149.563 }, + { 54.9, 2.594, 3.932 }, + { 34.0, 3.816, 76.266 }, + { 32.1, 3.598, 131.404 }, + { 29.6, 3.441, 85.827 }, + { 36.4, 5.650, 77.963 }, + { 27.7, 0.428, 3.181 }, + { 27.5, 2.551, 52.690 }, + { 24.6, 5.140, 78.714 }, + { 19.4, 5.135, 18.159 }, + { 15.8, 0.371, 447.796 }, + { 15.4, 5.573, 462.023 }, + { 15.2, 3.860, 73.297 }, + { 15.5, 2.975, 145.631 }, + { 18.0, 0, 0 }, + { 16.0, 5.199, 71.600 }, + { 11.1, 6.032, 138.517 }, + { 10.5, 3.583, 224.345 }, + { 7.6, 1.45, 1.48 }, + { 8.1, 2.62, 22.09 }, + { 7.1, 5.44, 269.92 }, + { 6.5, 4.37, 284.15 }, + { 6.8, 0.01, 151.05 }, + { 8.1, 0.30, 127.47 }, + { 5.8, 4.23, 373.01 }, + { 5.0, 1.84, 202.25 }, + { 4.7, 2.78, 120.36 }, + { 5.1, 0.78, 62.25 }, + { 4.2, 1.84, 72.33 }, + { 3.9, 1.89, 209.37 }, + { 5.2, 4.16, 195.14 }, + { 3.6, 2.00, 65.22 }, + { 3.6, 3.93, 124.29 }, + { 3.8, 1.05, 92.94 }, + { 4.2, 3.96, 9.56 }, + { 3.5, 1.54, 148.08 }, + { 3.2, 2.99, 387.24 }, + { 4.0, 1.86, 152.74 }, + { 3.3, 1.41, 351.82 }, + { 3.6, 1.17, 153.50 }, + { 2.9, 6.04, 12.53 }, + { 2.7, 5.65, 134.59 }, + { 2.8, 0.79, 572.23 }, + { 3.1, 5.84, 160.61 }, + { 2.7, 1.99, 450.98 }, + { 2.7, 2.77, 213.30 }, + { 2.3, 1.68, 358.93 }, + { 2.3, 5.77, 84.34 }, + { 2.3, 4.81, 536.80 }, + { 2.2, 2.20, 465.96 }, + /* 55 terms retained, 0 terms dropped, error 3.3e-07 a.u.*T^3 */ + + /* uranus r, T^4 */ + { 53.0, 3.008, 74.782 }, + { 9.9, 1.91, 56.62 }, + { 7.0, 5.09, 11.05 }, + { 6.7, 5.43, 149.56 }, + { 3.7, 5.23, 131.40 }, + { 3.4, 1.30, 85.83 }, + { 2.7, 0.44, 63.74 }, + { 2.3, 0.92, 145.63 }, + { 2.4, 6.21, 358.93 }, + { 2.3, 2.23, 440.68 }, + { 3.1, 3.14, 0 }, + /* 11 terms retained, 0 terms dropped, error 2.1e-07 a.u.*T^4 */ + /* end uranus */ +}; + +int vn_uranus[][3] = { + /* addresses for uranus l, b, r */ + /* T^0 */ { 0, 355, 462, }, + /* T^1 */ { 152, 398, 832, }, + /* T^2 */ { 253, 432, 1122, }, + /* T^3 */ { 315, 449, 1314, }, + /* T^4 */ { 347, 460, 1369, }, + /* T^5 */ { 354, 462, 1380, }, + /* end */ { 355, 0, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_venus[][3] = { + /* venus l, T^0 */ + { 317614666.8, 0, 0 }, + { 1353968.4, 5.59313320, 10213.28554621 }, + { 89891.6, 5.306500, 20426.571092 }, + { 5477.2, 4.41631, 7860.41939 }, + { 3455.7, 2.69964, 11790.62909 }, + { 2372.1, 2.99378, 3930.20970 }, + { 1317.1, 5.18668, 26.29832 }, + { 1664.1, 4.25019, 1577.34354 }, + { 1438.3, 4.15745, 9683.59458 }, + { 1200.5, 6.15357, 30639.85664 }, + { 761.4, 1.9501, 529.6910 }, + { 707.7, 1.0647, 775.5226 }, + { 584.8, 3.9984, 191.4483 }, + { 769.3, 0.8163, 9437.7629 }, + { 499.9, 4.1234, 15720.8388 }, + { 326.2, 4.5906, 10404.7338 }, + { 429.5, 3.5864, 19367.1892 }, + { 327.0, 5.6774, 5507.5532 }, + { 231.9, 3.1625, 9153.9036 }, + { 179.7, 4.6534, 1109.3786 }, + { 128.3, 4.2260, 20.7754 }, + { 155.5, 5.5704, 19651.0485 }, + { 127.9, 0.9621, 5661.3320 }, + { 105.5, 1.5372, 801.8209 }, + { 85.7, 0.356, 3154.687 }, + { 99.1, 0.833, 213.299 }, + { 98.8, 5.394, 13367.973 }, + { 82.1, 3.216, 18837.498 }, + { 88.0, 3.889, 9999.986 }, + { 71.6, 0.111, 11015.106 }, + { 56.1, 4.240, 7.114 }, + { 70.2, 0.675, 23581.258 }, + { 50.8, 0.245, 11322.664 }, + { 46.1, 5.316, 18073.705 }, + { 44.6, 6.063, 40853.142 }, + { 42.6, 5.329, 2352.866 }, + { 42.6, 1.800, 7084.897 }, + { 41.2, 0.362, 382.897 }, + { 35.7, 2.704, 10206.172 }, + { 33.9, 2.023, 6283.076 }, + { 29.1, 3.592, 22003.915 }, + { 28.5, 2.224, 1059.382 }, + { 29.8, 4.022, 10239.584 }, + { 33.3, 2.100, 27511.468 }, + { 30.2, 4.942, 13745.346 }, + { 29.3, 3.514, 283.859 }, + { 26.3, 0.541, 17298.182 }, + /* 47 terms retained, 320 terms dropped, error 0.75" */ + + /* venus l, T^1 */ + { 1021352943052.9, 0, 0 }, + { 95707.7, 2.464244, 10213.285546 }, + { 14445.0, 0.516246, 20426.571092 }, + { 213.4, 1.7955, 30639.8566 }, + { 151.7, 6.1064, 1577.3435 }, + { 173.9, 2.6554, 26.2983 }, + { 82.2, 5.702, 191.448 }, + { 69.7, 2.681, 9437.763 }, + { 52.4, 3.600, 775.523 }, + { 38.3, 1.034, 529.691 }, + { 29.6, 1.251, 5507.553 }, + { 25.1, 6.107, 10404.734 }, + { 17.8, 6.194, 1109.379 }, + { 16.5, 2.643, 7.114 }, + { 14.2, 5.451, 9153.904 }, + { 12.6, 1.245, 40853.142 }, + { 11.6, 4.976, 213.299 }, + { 12.6, 1.881, 382.897 }, + { 8.9, 0.95, 13367.97 }, + { 7.4, 4.39, 10206.17 }, + { 6.6, 2.28, 2352.87 }, + { 6.3, 4.08, 3154.69 }, + { 6.7, 5.06, 801.82 }, + /* 23 terms retained, 192 terms dropped, error 0.14"*T */ + + /* venus l, T^2 */ + { 54127.1, 0, 0 }, + { 3891.5, 0.34514, 10213.28555 }, + { 1337.9, 2.02011, 20426.57109 }, + { 23.8, 2.046, 26.298 }, + { 19.3, 3.535, 30639.857 }, + { 10.0, 3.971, 775.523 }, + { 7.0, 1.52, 1577.34 }, + { 6.0, 1.00, 191.45 }, + { 3.2, 4.36, 9437.76 }, + { 2.1, 2.66, 40853.14 }, + { 1.9, 3.39, 382.90 }, + /* 11 terms retained, 59 terms dropped, error 0.028"*T^2 */ + + /* venus l, T^3 */ + { 135.7, 4.8039, 10213.2855 }, + { 77.8, 3.669, 20426.571 }, + { 26.0, 0, 0 }, + { 1.2, 5.32, 30639.86 }, + /* 4 terms retained, 5 terms dropped, error 0.011"*T^3 */ + + /* venus l, T^4 */ + { 114.0, 3.1416, 0 }, + { 3.2, 5.21, 20426.57 }, + { 1.7, 2.51, 10213.29 }, + /* 3 terms retained, 2 terms dropped, error 0.014"*T^4 */ + + /* venus l, T^5 */ + { 0.9, 3.14, 0 }, + { 0.1, 0.55, 20426.57 }, + { 0.1, 1.91, 10213.29 }, + /* 3 terms retained, 2 terms dropped, error 0.00097"*T^5 */ + /* end venus l */ + + /* venus b, T^0 */ + { 5923638.5, 0.26702776, 10213.28554621 }, + { 40108.0, 1.147372, 20426.571092 }, + { 32814.9, 3.141593, 0 }, + { 1011.4, 1.08946, 30639.85664 }, + { 149.5, 6.2539, 18073.7049 }, + { 137.8, 0.8602, 1577.3435 }, + { 130.0, 3.6715, 9437.7629 }, + { 119.5, 3.7047, 2352.8662 }, + { 108.0, 4.5390, 22003.9146 }, + { 92.0, 1.540, 9153.904 }, + { 53.0, 2.281, 5507.553 }, + { 45.6, 0.723, 10239.584 }, + { 38.9, 2.934, 10186.987 }, + { 43.5, 6.140, 11790.629 }, + { 41.7, 5.991, 19896.880 }, + { 39.6, 3.868, 8635.942 }, + { 39.2, 3.950, 529.691 }, + { 33.3, 4.832, 14143.495 }, + /* 18 terms retained, 192 terms dropped, error 0.6" */ + + /* venus b, T^1 */ + { 513347.6, 1.8036431, 10213.2855462 }, + { 4380.1, 3.38616, 20426.57109 }, + { 196.6, 2.5300, 30639.8566 }, + { 199.2, 0, 0 }, + { 14.0, 2.271, 9437.763 }, + { 13.0, 1.507, 18073.705 }, + { 11.9, 5.605, 1577.344 }, + { 10.3, 5.242, 2352.866 }, + { 9.3, 6.08, 22003.91 }, + { 7.4, 1.50, 11790.63 }, + { 8.0, 0.29, 9153.90 }, + { 7.5, 5.08, 10186.99 }, + /* 12 terms retained, 121 terms dropped, error 0.11"*T */ + + /* venus b, T^2 */ + { 22377.7, 3.385091, 10213.285546 }, + { 281.7, 0, 0 }, + { 173.2, 5.2556, 20426.5711 }, + { 26.9, 3.870, 30639.857 }, + /* 4 terms retained, 55 terms dropped, error 0.25"*T^2 */ + + /* venus b, T^3 */ + { 646.7, 4.9917, 10213.2855 }, + { 20.0, 3.142, 0 }, + { 5.5, 0.77, 20426.57 }, + { 2.5, 5.44, 30639.86 }, + /* 4 terms retained, 11 terms dropped, error 0.023"*T^3 */ + + /* venus b, T^4 */ + { 14.1, 0.315, 10213.286 }, + { 0.2, 2.35, 20426.57 }, + { 0.2, 0.74, 30639.86 }, + { 0.2, 3.14, 0 }, + /* 4 terms retained, 1 terms dropped, error 0.002"*T^4 */ + + /* venus b, T^5 */ + { 0.2, 2.05, 10213.29 }, + /* 1 terms retained, 3 terms dropped, error 0.0014"*T^5 */ + /* end venus b */ + + /* venus r, T^0 */ + { 72334820.9, 0, 0 }, + { 489824.2, 4.0215183, 10213.2855462 }, + { 1658.1, 4.90207, 20426.57109 }, + { 1632.1, 2.84549, 7860.41939 }, + { 1378.0, 1.12847, 11790.62909 }, + { 498.4, 2.5868, 9683.5946 }, + { 374.0, 1.4231, 3930.2097 }, + { 263.6, 5.5294, 9437.7629 }, + { 237.5, 2.5514, 15720.8388 }, + { 222.0, 2.0135, 19367.1892 }, + { 119.5, 3.0198, 10404.7338 }, + { 125.9, 2.7277, 1577.3435 }, + { 76.2, 1.596, 9153.904 }, + { 85.3, 3.986, 19651.048 }, + { 74.3, 4.120, 5507.553 }, + { 41.9, 1.643, 18837.498 }, + { 42.5, 3.819, 13367.973 }, + { 39.4, 5.390, 23581.258 }, + { 29.0, 5.677, 5661.332 }, + { 27.6, 5.724, 775.523 }, + { 27.3, 4.822, 11015.106 }, + { 31.3, 2.318, 9999.986 }, + /* 22 terms retained, 308 terms dropped, error 3e-06 a.u. */ + + /* venus r, T^1 */ + { 34551.0, 0.891987, 10213.285546 }, + { 234.2, 1.7722, 20426.5711 }, + { 234.0, 3.1416, 0 }, + { 23.9, 1.113, 9437.763 }, + { 10.6, 4.592, 1577.344 }, + { 9.1, 4.54, 10404.73 }, + { 6.6, 5.98, 5507.55 }, + /* 7 terms retained, 173 terms dropped, error 3.7e-07 a.u.*T */ + + /* venus r, T^2 */ + { 1406.6, 5.06366, 10213.28555 }, + { 15.5, 5.473, 20426.571 }, + { 13.1, 0, 0 }, + /* 3 terms retained, 60 terms dropped, error 5.2e-07 a.u.*T^2 */ + + /* venus r, T^3 */ + { 49.6, 3.223, 10213.286 }, + { 0.8, 3.21, 20426.57 }, + /* 2 terms retained, 5 terms dropped, error 2.9e-08 a.u.*T^3 */ + + /* venus r, T^4 */ + { 0.6, 0.92, 10213.29 }, + /* 1 terms retained, 2 terms dropped, error 1.6e-08 a.u.*T^4 */ + + /* venus r, T^5 */ + /* 0 terms retained, 2 terms dropped, error 9e-10 a.u.*T^5 */ + /* end venus */ +}; + +int vn_venus[][3] = { + /* addresses for venus l, b, r */ + /* T^0 */ { 0, 91, 134, }, + /* T^1 */ { 47, 109, 156, }, + /* T^2 */ { 70, 121, 163, }, + /* T^3 */ { 81, 125, 166, }, + /* T^4 */ { 85, 129, 168, }, + /* T^5 */ { 88, 133, 169, }, + /* end */ { 91, 134, 0, }, + /* termination */ { 0, } +}; + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: vsop87_data.c,v $ $Date: 1997/05/19 18:21:42 $ $Revision: 1.1 $ $Name: $"}; diff --git a/Common/Servers/ActiveSurfaceUSD/src/ActiveSurfaceUSDImpl.cpp b/Common/Servers/ActiveSurfaceUSD/src/ActiveSurfaceUSDImpl.cpp index d9d23a79552b1895ca678852cd293cbb920d8548..5d30ba85024b8a1f6b4394b04297acbae737951a 100644 --- a/Common/Servers/ActiveSurfaceUSD/src/ActiveSurfaceUSDImpl.cpp +++ b/Common/Servers/ActiveSurfaceUSD/src/ActiveSurfaceUSDImpl.cpp @@ -144,6 +144,7 @@ void USDImpl::initialize() throw (ACSErr::ACSbaseExImpl) _SET_LDEF(acc, "USDImpl::initialize()"); _SET_LDEF(uBits, "USDImpl::initialize()"); } + _GET_PROP(status,m_status,"usdImpl::initialize()") } catch (ASErrors::ASErrorsEx& ex) { @@ -324,6 +325,8 @@ void USDImpl::reset() throw (CORBA::SystemException,ASErrors::ASErrorsEx) //_SET_CDB(calibrate, m_calibrate, "::USDImpl::reset()") action(RESET); + CIRATools::Wait(0, 200000); // 0.2 secs, guard time to wait after a reset command + //* restore defaults *// _SET_LDEF(delay, "USDImpl::reset()"); _SET_LDEF(Fmax, "USDImpl::reset()"); diff --git a/Common/Servers/AntennaBoss/include/BossCore.h b/Common/Servers/AntennaBoss/include/BossCore.h index c109b4dd23c616ca5afc743cfb749910d7217cac..0c957beaa7c6bd1651c0d977a66a127b81520b58 100644 --- a/Common/Servers/AntennaBoss/include/BossCore.h +++ b/Common/Servers/AntennaBoss/include/BossCore.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include diff --git a/Common/Servers/AntennaBoss/src/BossCore.cpp b/Common/Servers/AntennaBoss/src/BossCore.cpp index cd3ab88c93b2c700e9e7fd5119ae498cccf947b0..181718076c680420ec97337cd4b675a1ea2ee4b9 100644 --- a/Common/Servers/AntennaBoss/src/BossCore.cpp +++ b/Common/Servers/AntennaBoss/src/BossCore.cpp @@ -1551,7 +1551,7 @@ Antenna::EphemGenerator_ptr CBossCore::loadInternalGenerator(const Antenna::TGen ref=Antenna::EphemGenerator::_duplicate(m_satelliteGenerator); break; } - case Antenna::ANT_SOLARSYTEMBODY : { + case Antenna::ANT_SOLARSYSTEMBODY : { if (CORBA::is_nil(m_solarBodyGenerator)) { m_solarBodyGenerator=loadGenerator(type); // could throw exceptions } @@ -1605,7 +1605,7 @@ Antenna::EphemGenerator_ptr CBossCore::loadPrimaryGenerator(const Antenna::TGene ref=Antenna::EphemGenerator::_duplicate(m_primarySatelliteGenerator); break; } - case Antenna::ANT_SOLARSYTEMBODY : { + case Antenna::ANT_SOLARSYSTEMBODY : { if (CORBA::is_nil(m_primarySolarBodyGenerator)) { m_primarySolarBodyGenerator=loadGenerator(type); // could throw exceptions } @@ -1652,7 +1652,7 @@ Antenna::EphemGenerator_ptr CBossCore::loadGenerator(const Antenna::TGeneratorTy cSpec->component_type = CORBA::string_dup((const char*)m_config->getSatelliteInterface()); //IDL interface implemented by the component break; } - case Antenna::ANT_SOLARSYTEMBODY : { + case Antenna::ANT_SOLARSYSTEMBODY : { cSpec->component_type = CORBA::string_dup((const char*)m_config->getSolarSystemBodyInterface()); //IDL interface implemented by the component break; } diff --git a/Common/Servers/AntennaBoss/src/BossCore_prepareScan.i b/Common/Servers/AntennaBoss/src/BossCore_prepareScan.i index afa85a04acb6dcc98a66b8c53db3c78f9d898065..9f6038ba101c6d003732ef914c5d007c7ba59dfc 100644 --- a/Common/Servers/AntennaBoss/src/BossCore_prepareScan.i +++ b/Common/Servers/AntennaBoss/src/BossCore_prepareScan.i @@ -269,6 +269,7 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan( } try { currentGenerator->setOffsets(lonOffTmp,latOffTmp,offFrameTmp); //could throw an AntennaErrorsEx exception + ACS_LOG(LM_FULL_INFO,"CBossCore::prepareScan()",(LM_DEBUG,"currentGenerator SET OFFSET")); } catch (CORBA::SystemException& ex) { _EXCPT(ComponentErrors::CORBAProblemExImpl,impl,"CBossCore::prepareScan()"); @@ -383,6 +384,8 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan( sourceName=IRA::CString(att->sourceID); currentGeneratorFlux=currentGenerator; // the flux computer is the moon generator itself...make a deep copy } + + catch (CORBA::SystemException& ex) { sourceName=IRA::CString("????"); ra=dec=0.0; // in that case I do not want to rise an error @@ -391,11 +394,95 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan( //velDef=Antenna::ANT_UNDEF_DEF; axis=Management::MNG_NO_AXIS; } + catch(AntennaErrors::AntennaErrorsEx& ex) { + _ADD_BACKTRACE(AntennaErrors::ScanErrorExImpl,impl,ex,"CBossCore::prepareScan()"); + impl.setReason("Unable to load the scan configuration into the generator"); + throw impl; + } + catch (ComponentErrors::ComponentErrorsEx& ex) { + _ADD_BACKTRACE(AntennaErrors::ScanErrorExImpl,impl,ex,"CBossCore::prepareScan()"); + impl.setReason("Unable to load the scan configuration into the generator"); + throw impl; + } + catch (...) { + _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"CBossCore::prepareScan()"); + } + + vrad=primary.RadialVelocity; velFrame=primary.VradFrame; velDef=primary.VradDefinition; timeToStop=0; } + else if (primary.type==Antenna::ANT_SUN || primary.type==Antenna::ANT_SOLARSYSTEMBODY ) { + // moon has nothing to do...no configuration + Antenna::SolarSystemBody_var tracker; + tracker=Antenna::SolarSystemBody::_narrow(currentGenerator); + try{ + + tracker->setBodyName(primary.targetName); // + + } catch(AntennaErrors::AntennaErrorsEx& ex) { + + _ADD_BACKTRACE(AntennaErrors::ScanErrorExImpl,impl,ex,"CBossCore::prepareScan()"); + impl.setReason("Unable to load the scan configuration into the generator"); + throw impl; + } + + //copy the current track and store it + copyTrack(lastPar,primary); + lastPar.applyOffsets=false; + lastPar.secondary=false; + if (primary.type==Antenna::ANT_SUN ) + { + ACS_LOG(LM_FULL_INFO,"CBossCore::prepareScan()",(LM_DEBUG,"SUN_TRACKING")); + } else + { + ACS_LOG(LM_FULL_INFO,"CBossCore::prepareScan()",(LM_DEBUG,"PLANET_TRACKING")); + + } + + try { + Antenna::SolarSystemBodyAttributes_var att; + tracker->getAttributes(att); + ACS_LOG(LM_FULL_INFO,"CBossCore::prepareScan()",(LM_DEBUG,"GOT ATTRIBUTES")) + ra=att->J2000RightAscension; + + dec=att->J2000Declination; + lon=att->gLongitude; + lat=att->gLatitude; + //vrad=0.0; + //velFrame=Antenna::ANT_UNDEF_FRAME; + //velDef=Antenna::ANT_UNDEF_DEF; + axis=att->axis; + sourceName=IRA::CString(att->sourceID); + currentGeneratorFlux=currentGenerator; // the flux computer is the moon generator itself...make a deep copy + } + catch(AntennaErrors::AntennaErrorsEx& ex) { + _ADD_BACKTRACE(AntennaErrors::ScanErrorExImpl,impl,ex,"CBossCore::prepareScan()"); + impl.setReason("Unable to load the scan configuration into the generator"); + throw impl; + } + catch (...) { + _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"CBossCore::prepareScan()"); + } + + //catch (CORBA::SystemException& ex) { + // sourceName=IRA::CString("????"); + // ra=dec=0.0; // in that case I do not want to rise an error + // //vrad=0.0; + // //velFrame=Antenna::ANT_UNDEF_FRAME; + // //velDef=Antenna::ANT_UNDEF_DEF; + // axis=Management::MNG_NO_AXIS; + // } + + vrad=primary.RadialVelocity; + velFrame=primary.VradFrame; + velDef=primary.VradDefinition; + timeToStop=0; + } + + else if (primary.type==Antenna::ANT_OTF) { ACS_LOG(LM_FULL_INFO,"CBossCore::prepareScan()",(LM_DEBUG,"OTF_SCANNING")); Antenna::OTF_var tracker; @@ -473,9 +560,15 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan( } else if (primary.type==Antenna::ANT_SATELLITE) { } - else if (primary.type==Antenna::ANT_SOLARSYTEMBODY) { + + + else if (primary.type==Antenna::ANT_SOLARSYSTEMBODY) { + + } else if (primary.type==Antenna::ANT_SUN) { + + // useless? } // if everything looks ok....return back the offsets..... /* @@ -486,6 +579,8 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan( return currentGenerator._retn(); } + + Antenna::EphemGenerator_ptr CBossCore::prepareOTFSecondary(const bool& useInternal,const Antenna::TTrackingParameters& sec,IRA::CString& sourceName,double& ra,double& dec,double& lon, double& lat,double& vrad,Antenna::TReferenceFrame& velFrame,Antenna::TVradDefinition& velDef,bool& result) { diff --git a/Common/Servers/AntennaBoss/src/Makefile b/Common/Servers/AntennaBoss/src/Makefile index ba00b1850a87c8a4bc5ad349b8b8ec28ce4d7291..8e36f6f4b735977097c5e642b10b35f5f6063d6a 100644 --- a/Common/Servers/AntennaBoss/src/Makefile +++ b/Common/Servers/AntennaBoss/src/Makefile @@ -66,7 +66,7 @@ AntennaBossImpl_OBJECTS = AntennaBossImpl BossCore Configuration \ WorkingThread WatchingThread Callback SlewCheck Offset AntennaBossImpl_LIBS = AntennaDefinitionsStubs AntennaBossStubs MountStubs ObservatoryStubs \ EphemGeneratorStubs ManagmentDefinitionsStubs IRALibrary ComponentErrors ManagementErrors \ - AntennaErrors ParserErrors PointingModelStubs RefractionStubs SkySourceStubs OTFStubs MoonStubs acsnc \ + AntennaErrors ParserErrors PointingModelStubs RefractionStubs SkySourceStubs OTFStubs MoonStubs SolarSystemBodyStubs acsnc \ DiscosVersion # diff --git a/Common/Servers/FitsWriter/include/Version.h b/Common/Servers/FitsWriter/include/Version.h index cb1621ae0bd927a4a9c35921e6b61a568b38e4e1..cb266e16b6ee61e10195b5a47db3014f1d85a8dd 100644 --- a/Common/Servers/FitsWriter/include/Version.h +++ b/Common/Servers/FitsWriter/include/Version.h @@ -23,9 +23,10 @@ #define FITS_VERSION11 "V.1.2" #define FITS_VERSION12 "V.1.21" #define FITS_VERSION13 "V.1.22" +#define FITS_VERSION14 "V.1.23" -#define CURRENT_VERSION FITS_VERSION13 +#define CURRENT_VERSION FITS_VERSION14 #define DEFAULT_COMMENT CURRENT_VERSION" Created by S. Righini, M. Bartolini & A. Orlati" @@ -42,6 +43,8 @@ #define HISTORY11 FITS_VERSION11" Frequency and bandwidth columns added to Section table reporting backend sampled band" #define HISTORY12 FITS_VERSION12" SubScan offsets added to the primary header" #define HISTORY13 FITS_VERSION13" Summary file aligned to reference document" +#define HISTORY14 FITS_VERSION14" Rest frequency information also added in the header of section table" + #define CREDITS1 " " #define CREDITS2 "These data are property of:" diff --git a/Common/Servers/FitsWriter/src/EngineThread.cpp b/Common/Servers/FitsWriter/src/EngineThread.cpp index 0008d1dbb92fa6799bf5e0f5a0fc3563c8ab96f7..9ed3691f7b7afa0e373ef75d4ade125e5131368a 100644 --- a/Common/Servers/FitsWriter/src/EngineThread.cpp +++ b/Common/Servers/FitsWriter/src/EngineThread.cpp @@ -629,7 +629,7 @@ void CEngineThread::runLoop() ACS::doubleSeq fluxes; ACS::longSeq feedsID; ACS::longSeq ifsID; - ACS::doubleSeq atts; + ACS::doubleSeq atts,restFreqs; ACS::longSeq sectionsID; ACS::stringSeq axisName,axisUnit; @@ -889,6 +889,39 @@ void CEngineThread::runLoop() impl.log(LM_ERROR); // not filtered, because the user need to know about the problem immediately m_data->setStatus(Management::MNG_FAILURE); } + m_info.getRestFreq(restFreqs); + if (restFreqs.length()==1) { + double rfValue; + IRA::CString keyName; + for (long j=0;jgetSectionsNumber();j++) { + if (restFreqs[0]>0.0) rfValue=restFreqs[0]; + else rfValue=DOUBLE_DUMMY_VALUE; + keyName.Format("RESTFREQ%d",j+1); + if (!m_file->setSectionHeaderKey(keyName,rfValue,"Frequency resolution of the Nth section (MHz)")) { + _EXCPT(ManagementErrors::FitsCreationErrorExImpl,impl,"CEngineThread::runLoop()"); + impl.setFileName((const char *)m_data->getFileName()); + impl.setError(m_file->getLastError()); + impl.log(LM_ERROR); // not filtered, because the user need to know about the problem immediately + m_data->setStatus(Management::MNG_FAILURE); + } + } + } + else { + double rfValue; + IRA::CString keyName; + for (long j=0;j0.0) rfValue=restFreqs[j]; + else rfValue=DOUBLE_DUMMY_VALUE; + keyName.Format("RESTFREQ%d",j+1); + if (!m_file->setSectionHeaderKey(keyName,rfValue,"Frequency resolution of the Nth section (MHz)")) { + _EXCPT(ManagementErrors::FitsCreationErrorExImpl,impl,"CEngineThread::runLoop()"); + impl.setFileName((const char *)m_data->getFileName()); + impl.setError(m_file->getLastError()); + impl.log(LM_ERROR); // not filtered, because the user need to know about the problem immediately + m_data->setStatus(Management::MNG_FAILURE); + } + } + } CFitsWriter::TFeedHeader *feedH=m_info.getFeedHeader(); if (!m_file->addFeedTable("FEED TABLE")) { _EXCPT(ManagementErrors::FitsCreationErrorExImpl,impl,"CEngineThread::runLoop()"); diff --git a/Common/Servers/FitsWriter/src/FitsWriter.cpp b/Common/Servers/FitsWriter/src/FitsWriter.cpp index b7dafd5df31cd11f91c3e57c2c4febd2e12cb8fc..57a1a3a68ba20eb6fc32de3532335618af404a61 100644 --- a/Common/Servers/FitsWriter/src/FitsWriter.cpp +++ b/Common/Servers/FitsWriter/src/FitsWriter.cpp @@ -234,7 +234,8 @@ bool CFitsWriter::create() if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY10,m_lastError)) return false; if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY11,m_lastError)) return false; if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY12,m_lastError)) return false; - if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY13,m_lastError)) return false; + if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY13,m_lastError)) return false; + if (!CFitsTools::primaryHeaderHistory(pFits,HISTORY14,m_lastError)) return false; if (!CFitsTools::primaryHeaderComment(pFits,CREDITS1,m_lastError)) return false; if (!CFitsTools::primaryHeaderComment(pFits,CREDITS2,m_lastError)) return false; diff --git a/Common/Servers/FitsWriter/src/SummaryWriter.cpp b/Common/Servers/FitsWriter/src/SummaryWriter.cpp index 81fc021f007a4e6312c4b587bda9b8bac559f7c5..b516e783bbee4bff3865acb336296807125c0301 100644 --- a/Common/Servers/FitsWriter/src/SummaryWriter.cpp +++ b/Common/Servers/FitsWriter/src/SummaryWriter.cpp @@ -63,6 +63,7 @@ bool CSummaryWriter::create() if (!CFitsTools::primaryHeaderHistory(m_pFits,HISTORY11,m_lastError)) return false; if (!CFitsTools::primaryHeaderHistory(m_pFits,HISTORY12,m_lastError)) return false; if (!CFitsTools::primaryHeaderHistory(m_pFits,HISTORY13,m_lastError)) return false; + if (!CFitsTools::primaryHeaderHistory(m_pFits,HISTORY14,m_lastError)) return false; if (!CFitsTools::primaryHeaderComment(m_pFits,CREDITS1,m_lastError)) return false; if (!CFitsTools::primaryHeaderComment(m_pFits,CREDITS2,m_lastError)) return false; diff --git a/Common/Servers/Moon/src/MoonImpl.cpp b/Common/Servers/Moon/src/MoonImpl.cpp index f3408e6ffca1d777889133a7082dd48aa06b0b68..0d9c66e72fa334ce578faa545d337a24030cc707 100644 --- a/Common/Servers/Moon/src/MoonImpl.cpp +++ b/Common/Servers/Moon/src/MoonImpl.cpp @@ -39,7 +39,7 @@ MoonImpl::~MoonImpl() // initialization void MoonImpl::initialize() throw(ACSErr::ACSbaseExImpl) { - AUTO_TRACE("moonImpl::initilize()"); + AUTO_TRACE("moonImpl::initialize()"); ra_off = dec_off = 0.0; az_off = el_off = 0.0; m_offsetFrame=Antenna::ANT_HORIZONTAL; diff --git a/Common/Servers/Scheduler/include/Core_Operations.h b/Common/Servers/Scheduler/include/Core_Operations.h index 65d1699277d544075256a8b5f64c91e98843435b..741433dbbabde8e264595d3b983033ef851ab7cd 100644 --- a/Common/Servers/Scheduler/include/Core_Operations.h +++ b/Common/Servers/Scheduler/include/Core_Operations.h @@ -88,6 +88,24 @@ void _track(const char *targetName) throw (ManagementErrors::TelescopeSubScanErr void _moon() throw (ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl, ManagementErrors::CloseTelescopeScanErrorExImpl); +/** + * starts the tracking of the sun + */ +void _sun() throw (ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl, + ManagementErrors::CloseTelescopeScanErrorExImpl); + + +/** + * Starts a sidereal tracking of a source from equatorial coordinates + * @param planet of the source + * + */ + +void _planet(const char * planetName) throw (ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl, + ManagementErrors::CloseTelescopeScanErrorExImpl); + + + /** * Starts a sidereal tracking of a source from equatorial coordinates * @param targetName name of the source diff --git a/Common/Servers/Scheduler/include/Schedule.h b/Common/Servers/Scheduler/include/Schedule.h index aee7ce884b16681bc7ff9d71cae20f007b22faa8..1badc85c13d1b0d5244d8b39158837c72703e80c 100644 --- a/Common/Servers/Scheduler/include/Schedule.h +++ b/Common/Servers/Scheduler/include/Schedule.h @@ -24,7 +24,7 @@ #include "Configuration.h" #define _SCHED_NULLTARGET "NULL" -#define SEPARATOR '\t' +#define SEPARATORS std::vector{'\t', ' '} #define MAX_SCHED_NAME_LEN 37 /** @@ -64,6 +64,8 @@ public: void track(const char *targetName); void moon(); + void sun(); + void planet(const char * planetName); void sidereal(const char * targetName,const double& ra,const double& dec,const Antenna::TSystemEquinox& eq,const Antenna::TSections& section); void sidereal(const char * targetName,const Antenna::TCoordinateFrame& frame,double *parameters,const long& paramNumber, const Antenna::TSystemEquinox& eq); @@ -543,6 +545,16 @@ private: bool parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& errMsg,CSubScanBinder& binder); + /** + * Parse the list of parameters for moon tracking + * @param val line to parse + * @param otf structure containing the ORF parameters + * @param id numeral identifier of the scan + * @param errMsg error specification string in case of unsuccessful operation + * @return the result of the parse + */ + bool parseSun(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg); + /** * Parse the list of parameters for moon tracking * @param val line to parse @@ -552,6 +564,17 @@ private: * @return the result of the parse */ bool parseMoon(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg); + + /** + * Parse the list of parameters for moon tracking + * @param val line to parse + * @param otf structure containing the ORF parameters + * @param id numeral identifier of the scan + * @param errMsg error specification string in case of unsuccessful operation + * @return the result of the parse + */ + bool parsePlanet(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg); + /** * Parse the vRAD switch in order to configure a radial velocity diff --git a/Common/Servers/Scheduler/include/SchedulerImpl.h b/Common/Servers/Scheduler/include/SchedulerImpl.h index d39a3f33e9cd15b5034f9ef2b5f40e0c78462929..1fed74cffa7959f4d7e03b8613d6725587007256 100644 --- a/Common/Servers/Scheduler/include/SchedulerImpl.h +++ b/Common/Servers/Scheduler/include/SchedulerImpl.h @@ -398,6 +398,31 @@ public: */ virtual void moon() throw (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException); + /** + * It allows to immediately start a tracking of the sun. + * @throw CORBA::SystemExcpetion + * @throw ComponentErrors::ComponentErrorsEx + * @throw ManagementErrors::ManagementErrorsEx + */ + virtual void sun() throw (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException); + + + /** + * It allows to immediately start a tracking of a sidereal source, given its equatorial coordinates + * @param name or identifier of the planed + * @throw CORBA::SystemExcpetion + * @throw ComponentErrors::ComponentErrorsEx + * @throw ManagementErrors::ManagementErrorsEx + */ + + + + + + + virtual void planet(const char * name) throw (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException); + + /** * It allows to immediately start a tracking of a sidereal source, given its equatorial coordinates * @param targetName name or identifier of the source diff --git a/Common/Servers/Scheduler/src/Core.cpp b/Common/Servers/Scheduler/src/Core.cpp index a92646ba1dee41905bf25d6a249b771875f2db82..6ea312b86badbeb46a054c982b77504a9c7d07e0 100644 --- a/Common/Servers/Scheduler/src/Core.cpp +++ b/Common/Servers/Scheduler/src/Core.cpp @@ -150,6 +150,8 @@ void CCore::execute() throw(ComponentErrors::TimerErrorExImpl, ComponentErrors:: m_parser->add("latOTF", new function3 >, I >, I >(this, &CCore::_latOTF), 3); m_parser->add("skydipOTF", new function3 >, I >, I >(this, &CCore::_skydipOTF), 3); m_parser->add("moon", new function0(this, &CCore::_moon), 0); + m_parser->add("sun", new function0(this, &CCore::_sun), 0); + m_parser->add("planet", new function1 > (this, &CCore::_planet), 1); m_parser->add("sidereal", new function5, I >, I >, I >, I > >(this, &CCore::_sidereal), 5); m_parser->add("track", new function1 >(this, &CCore::_track), 1); m_parser->add("goTo", new function2 >, I > >(this, &CCore::_goTo), 2); diff --git a/Common/Servers/Scheduler/src/Core_Common.i b/Common/Servers/Scheduler/src/Core_Common.i index 66f3a740e8182024aa5c70f6c7f04d744bda63c9..a69488c9c98700a72ca232719d97d7ce92f34d59 100644 --- a/Common/Servers/Scheduler/src/Core_Common.i +++ b/Common/Servers/Scheduler/src/Core_Common.i @@ -36,6 +36,7 @@ bool CCore::checkScan(ACS::Time& ut,const Antenna::TTrackingParameters *const pr try { //antennaUT will stores the estimated start time from the antenna for all kind of subscans antennaAnswer=m_antennaBoss->checkScan(ut,*prim,*sec,minEl,maxEl,m_antennaRTime.out()); + ACS_LOG(LM_FULL_INFO,"CCore::checkScan()",(LM_DEBUG,"MIN EL %f :",(float)minEl)); ACS_LOG(LM_FULL_INFO,"CCore::checkScan()",(LM_DEBUG,"SLEWING_TIME %llu :",(unsigned long long)m_antennaRTime->slewingTime)); } catch (ComponentErrors::ComponentErrorsEx& ex) { diff --git a/Common/Servers/Scheduler/src/Core_Operations.i b/Common/Servers/Scheduler/src/Core_Operations.i index b693b3a1b43472cb26b67c16aae358d575b8f0ed..0368e1b6b541e13265f02474d3a126ec1023eefa 100644 --- a/Common/Servers/Scheduler/src/Core_Operations.i +++ b/Common/Servers/Scheduler/src/Core_Operations.i @@ -184,6 +184,42 @@ void CCore::_moon() throw (ManagementErrors::TelescopeSubScanErrorExImpl,Managem m_subScanEpoch=startTime; } +void CCore::_sun() throw (ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl, + ManagementErrors::CloseTelescopeScanErrorExImpl) +{ + baci::ThreadSyncGuard guard(&m_mutex); + ACS::Time startTime=0; // start asap + Antenna::TTrackingParameters primary,secondary; + MinorServo::MinorServoScan servo; + Receivers::TReceiversParameters receievers; + Management::TSubScanConfiguration subConf; + Schedule::CSubScanBinder binder(&primary,&secondary,&servo,&receievers,&subConf); + binder.sun(); + startTime=0; // it means start as soon as possible + startScan(startTime,&primary,&secondary,&servo,&receievers,subConf); //ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl + m_subScanEpoch=startTime; +} +void CCore::_planet(const char * planetName) throw (ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl, + ManagementErrors::CloseTelescopeScanErrorExImpl) +{ + baci::ThreadSyncGuard guard(&m_mutex); + ACS::Time startTime=0; // start asap + Antenna::TTrackingParameters primary,secondary; + MinorServo::MinorServoScan servo; + Receivers::TReceiversParameters receievers; + Management::TSubScanConfiguration subConf; + Schedule::CSubScanBinder binder(&primary,&secondary,&servo,&receievers,&subConf); + binder.planet(planetName); + startTime=0; // it means start as soon as possible + # + startScan(startTime,&primary,&secondary,&servo,&receievers,subConf); //ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl + + m_subScanEpoch=startTime; +} + + + + void CCore::_sidereal(const char * targetName,const double& ra,const double& dec,const Antenna::TSystemEquinox& eq,const Antenna::TSections& section) throw ( ManagementErrors::TelescopeSubScanErrorExImpl,ManagementErrors::TargetOrSubscanNotFeasibleExImpl,ManagementErrors::CloseTelescopeScanErrorExImpl) { diff --git a/Common/Servers/Scheduler/src/Makefile b/Common/Servers/Scheduler/src/Makefile index d1639108f2a37a4db5d4ee06a1419da42fccecf3..706a0f297808150385a7f95b2757476e0970b96c 100644 --- a/Common/Servers/Scheduler/src/Makefile +++ b/Common/Servers/Scheduler/src/Makefile @@ -38,13 +38,16 @@ RESTRICT_PERMS=_tp_agc # C programs (public and local) # ----------------------------- EXECUTABLES = scheduleChecker -EXECUTABLES_L = testSched testLSTtoUT +EXECUTABLES_L = testSched testSchedules testLSTtoUT # # testSched_OBJECTS = testSchedule Schedule SubScanBinder Schedule_ScanList Configuration testSched_LIBS = IRALibrary ComponentErrors +testSchedules_OBJECTS = testSchedules Schedule SubScanBinder Schedule_ScanList Configuration +testSchedules_LIBS = IRALibrary ComponentErrors boost_system boost_filesystem + testLSTtoUT_OBJECTS = testLST2UT testLSTtoUT_LIBS = IRALibrary ComponentErrors diff --git a/Common/Servers/Scheduler/src/Schedule.cpp b/Common/Servers/Scheduler/src/Schedule.cpp index 056b3673e4c013c6741e50fe2aa7f307f522f3ca..3d315dd025f836f331c4c9d1b1195f317b7336f7 100644 --- a/Common/Servers/Scheduler/src/Schedule.cpp +++ b/Common/Servers/Scheduler/src/Schedule.cpp @@ -23,7 +23,7 @@ using namespace Schedule; #define BACKENDLIST "BACKENDLIST:" #define MODE "MODE:" #define SCANTAG "SCANTAG:" -#define ELEVATIONLIMITS "ELEVATIONLIMITS" +#define ELEVATIONLIMITS "ELEVATIONLIMITS:" #define INITPROC "INITPROC:" #define SCAN_START "SC:" @@ -920,48 +920,48 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS { int start=0; IRA::CString ret; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { return false; } else { // token could be extracted ret.MakeUpper(); if (ret==PROJECT) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_projectName)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_projectName,false)) { errorMsg="cannot parse project name"; return false; } else return true; } else if (ret==OBSERVER) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_observer)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_observer,false)) { errorMsg="cannot parse observer name"; return false; } else return true; } else if (ret==SCANLIST) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_scanList)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_scanList,false)) { errorMsg="cannot parse scan list file name"; return false; } else return true; } else if (ret==PROCLIST) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_configList)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_configList,false)) { errorMsg="cannot parse procedure list file name"; return false; } else return true; } else if (ret==BACKENDLIST) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_backendList)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_backendList,false)) { errorMsg="cannot parse backend configurations file name"; return false; } else return true; } else if (ret==SCANLAYOUT) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_layoutFile)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_layoutFile,false)) { errorMsg="cannot parse scan layouts file name"; return false; } @@ -969,14 +969,14 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS } else if (ret==MODE) { IRA::CString mode,rep,startTime; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,mode)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,mode,false)) { errorMsg="cannot parse schedule mode"; return false; } else { m_modeDone=true; if (mode==LSTMODE) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,rep)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,rep,false)) { errorMsg="cannot parse repetitions number for LST mode"; return false; } @@ -989,7 +989,7 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS } } else if (mode==SEQMODE) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,startTime)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,startTime,false)) { m_mode=SEQ; //if it has not an extra argument the sequential is pure return true; } @@ -1011,11 +1011,11 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS } else if (ret==ELEVATIONLIMITS) { IRA::CString minEl,maxEl; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,minEl)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,minEl,false)) { errorMsg="elevation lower limit missing or not correct"; return false; } - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,maxEl)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,maxEl,false)) { errorMsg="elevation upper limit missing or not correct"; return false; } @@ -1039,7 +1039,7 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS } else if (ret==SCANTAG) { IRA::CString scanTag; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,scanTag)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,scanTag,false)) { errorMsg="cannot parse scan tag"; return false; } @@ -1049,7 +1049,7 @@ bool CSchedule::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS return true; } else if (ret==INITPROC) { - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,m_initProc)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,m_initProc,false)) { errorMsg="cannot parse schedule initialization procedure"; return false; } @@ -1080,7 +1080,7 @@ bool CSchedule::parseScans(const IRA::CString& line,const DWORD& lnNumber,IRA::C //ACS::Time ut; TRecord *p; start=0; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { errorMsg="schedule format error"; return false; } @@ -1088,7 +1088,7 @@ bool CSchedule::parseScans(const IRA::CString& line,const DWORD& lnNumber,IRA::C ret.MakeUpper(); if (ret==SCAN_START) { //process scan definition m_currentScanDef.valid=false; - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { // scan id + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { // scan id errorMsg="scan identifier cannot be found"; return false; } @@ -1104,14 +1104,14 @@ bool CSchedule::parseScans(const IRA::CString& line,const DWORD& lnNumber,IRA::C } m_currentScanDef.id=tempId; } - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { //suffix + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { //suffix errorMsg="scan suffix cannot be found"; return false; } else { m_currentScanDef.suffix=ret; } - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { //backend:datawriter + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { //backend:datawriter errorMsg="backend/datawriter cannot be found"; return false; } @@ -1131,7 +1131,7 @@ bool CSchedule::parseScans(const IRA::CString& line,const DWORD& lnNumber,IRA::C m_currentScanDef.writerInstance=_SCHED_NULLTARGET; } } - if (IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { //layout...not mandatory + if (IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { //layout...not mandatory if (m_layoutFile=="") { // if the layout file has not been given errorMsg="scan layout without providing the scan layouts file"; return false; diff --git a/Common/Servers/Scheduler/src/ScheduleChecker.cpp b/Common/Servers/Scheduler/src/ScheduleChecker.cpp index 928c03e6fcdb5f42ce4f142a2da91f63d370d135..5232866e4bb169fa8e129114b35097c0459bf3a7 100644 --- a/Common/Servers/Scheduler/src/ScheduleChecker.cpp +++ b/Common/Servers/Scheduler/src/ScheduleChecker.cpp @@ -3,6 +3,7 @@ #include "Schedule.h" #include #include +#include using namespace IRA; @@ -80,6 +81,13 @@ int main(int argc, char *argv[]) exit(-1); } if (sched.isComplete()) { + if(getpwuid(getuid())->pw_name != sched.getProjectName()) + { + CString err; + err.Format("Error found: Schedule PROJECT keyword does not match with active project!\n"); + printMessage((const char*)err); + exit(-1); + } CString msg; msg.Format("%u subscans were successfully parsed!\n",sched.getSubScansNumber()); printMessage((const char *)msg); diff --git a/Common/Servers/Scheduler/src/Schedule_ScanList.cpp b/Common/Servers/Scheduler/src/Schedule_ScanList.cpp index e9fe48bc9d32c8070b19586369bf69394521d112..7f538e62ce60cd703734352cbfd16b5ef864a538 100644 --- a/Common/Servers/Scheduler/src/Schedule_ScanList.cpp +++ b/Common/Servers/Scheduler/src/Schedule_ScanList.cpp @@ -13,6 +13,7 @@ #define SUN "SUN" #define MOON "MOON" #define SATELLITE "SATELLITE" +#define PLANET "PLANET" #define SOLARSYTEMBODY "SOLARSYTEMBODY" #define OTF "OTF" #define OTFC "OTFC" @@ -143,12 +144,12 @@ bool CScanList::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS IRA::CString ret; Management::TScanTypes type; // get the second item..... - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { errMsg="format error"; return false; } //...the scan type - if (!IRA::CIRATools::getNextToken(line,start,SEPARATOR,ret)) { + if (!IRA::CIRATools::getNextToken(line,start,SEPARATORS,ret,false)) { errMsg="could not read scan type"; return false; } @@ -198,6 +199,30 @@ bool CScanList::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS break; } case Management::MNG_SUN: { + DWORD id; + Antenna::TTrackingParameters *prim=new Antenna::TTrackingParameters; + if (!parseSun(line,prim,id,errMsg)) { + if (prim) delete prim; + return false; // errMsg already set by previous call + } + Antenna::TTrackingParameters *sec=new Antenna::TTrackingParameters; + resetTrackingParameters(sec); + TRecord *rec=new TRecord; + rec->id=id; + rec->type=type; + rec->primaryParameters=(void *)prim; + rec->secondaryParameters=(void *)sec; + // ************************************** + // Da modificare come MNG_PEAKER + CSubScanBinder binder(getConfiguration(),false); + rec->receieversParsmeters=(void *)binder.getReceivers(); + rec->servoParameters=(void *)binder.getServo(); + rec->subScanConfiguration=binder.getSubScanConfiguration(); + // ************************************** + + //rec->target=""; + rec->line=lnNumber; + m_schedule.push_back(rec); break; } case Management::MNG_MOON: { @@ -275,7 +300,34 @@ bool CScanList::parseLine(const IRA::CString& line,const DWORD& lnNumber,IRA::CS case Management::MNG_SATELLITE: { break; } - case Management::MNG_SOLARSYTEMBODY: { + case Management::MNG_PLANET: { + + DWORD id; + Antenna::TTrackingParameters *prim=new Antenna::TTrackingParameters; + if (!parsePlanet(line,prim,id,errMsg)) { + if (prim) delete prim; + return false; // errMsg already set by previous call + } + Antenna::TTrackingParameters *sec=new Antenna::TTrackingParameters; + resetTrackingParameters(sec); + TRecord *rec=new TRecord; + rec->id=id; + rec->type=type; + rec->primaryParameters=(void *)prim; + rec->secondaryParameters=(void *)sec; + // ************************************** + // Da modificare come MNG_PEAKER + CSubScanBinder binder(getConfiguration(),false); + rec->receieversParsmeters=(void *)binder.getReceivers(); + rec->servoParameters=(void *)binder.getServo(); + rec->subScanConfiguration=binder.getSubScanConfiguration(); + // ************************************** + + //rec->target=""; + rec->line=lnNumber; + m_schedule.push_back(rec); + break; + break; } case Management::MNG_OTF: { @@ -379,6 +431,147 @@ bool CScanList::parseMoon(const IRA::CString& val,Antenna::TTrackingParameters * return true; } +bool CScanList::parseSun(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg) +{ + char type[32],offFrame[32],lonOff[32],latOff[32]; + long out; + //double lonOff,latOff; + out=sscanf((const char *)val,"%u\t%s\t%s\t%s\t%s",&id,type,offFrame,lonOff,latOff); + if ((out!=2) && (out!=5)) { + errMsg="invalid sun scan definition"; + return false; + } + scan->targetName=CORBA::string_dup("Sun"); + scan->type=Antenna::ANT_SUN; + scan->paramNumber=0; + scan->secondary=false; + scan->VradFrame=Antenna::ANT_UNDEF_FRAME; + scan->VradDefinition=Antenna::ANT_UNDEF_DEF; + scan->RadialVelocity=0.0; + scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now + scan->enableCorrection=true; + if (out==5) { + if (strcmp(offFrame,OFFFRAMEEQ)==0) { + scan->offsetFrame=Antenna::ANT_EQUATORIAL; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid equatorial longitude offset"; + return false; //ra + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid equatorial latitude offset"; + return false; //dec + } + } + else if (strcmp(offFrame,OFFFRAMEHOR)==0) { + scan->offsetFrame=Antenna::ANT_HORIZONTAL; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid horizontal longitude offset"; + return false; //azimuth...since they are offsets negative values are valid + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid horizontal latitude offset"; + return false; //elevation + } + } + else if (strcmp(offFrame,OFFFRAMEGAL)==0) { + scan->offsetFrame=Antenna::ANT_GALACTIC; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid galactic longitude offset"; + return false; //longitude + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid galactic latitude offset"; + return false; //latitude + } + } + else { + return false; + } + scan->applyOffsets=true; + } + else { + scan->latitudeOffset=0.0; + scan->longitudeOffset=0.0; + scan->applyOffsets=false; + } + return true; +} + +bool CScanList::parsePlanet(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg) +{ + char type[32],offFrame[32],lonOff[32],latOff[32],planetName[32]; + long out; + //double lonOff,latOff; + out=sscanf((const char *)val,"%u\t%s\t%s\t%s\t%s\t%s",&id,type,planetName,offFrame,lonOff,latOff); + if ((out!=3) && (out!=6)) { + errMsg="invalid planet scan definition"; + return false; + } + scan->targetName=CORBA::string_dup(planetName); + scan->type=Antenna::ANT_SOLARSYSTEMBODY; + scan->paramNumber=0; + scan->secondary=false; + scan->VradFrame=Antenna::ANT_UNDEF_FRAME; + scan->VradDefinition=Antenna::ANT_UNDEF_DEF; + scan->RadialVelocity=0.0; + scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now + scan->enableCorrection=true; + if (out==6) { + + if (strcmp(offFrame,OFFFRAMEEQ)==0) { + scan->offsetFrame=Antenna::ANT_EQUATORIAL; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid equatorial longitude offset"; + return false; //ra + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid equatorial latitude offset"; + return false; //dec + } + } + else if (strcmp(offFrame,OFFFRAMEHOR)==0) { + scan->offsetFrame=Antenna::ANT_HORIZONTAL; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid horizontal longitude offset"; + return false; //azimuth...since they are offsets negative values are valid + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid horizontal latitude offset"; + return false; //elevation + } + } + else if (strcmp(offFrame,OFFFRAMEGAL)==0) { + scan->offsetFrame=Antenna::ANT_GALACTIC; + if (!IRA::CIRATools::offsetToRad(lonOff,scan->longitudeOffset)) { + errMsg="invalid galactic longitude offset"; + return false; //longitude + } + if (!IRA::CIRATools::offsetToRad(latOff,scan->latitudeOffset)) { + errMsg="invalid galactic latitude offset"; + return false; //latitude + } + } + else { + return false; + } + scan->applyOffsets=true; + } + else { + scan->latitudeOffset=0.0; + scan->longitudeOffset=0.0; + scan->applyOffsets=false; + } + return true; +} + + + + + + + + + // void CSubScanBinder::sidereal(const char * targetName,const double& ra,const double& dec,const Antenna::TSystemEquinox& eq,const Antenna::TSections& section) bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& errMsg,CSubScanBinder& binder) @@ -399,7 +592,7 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e Antenna::TSystemEquinox scanEquinox; // get the second item..... - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // id + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // id errMsg="cannot read scan identifier"; return false; } @@ -408,12 +601,12 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e errMsg="scan identifier cannot be zero"; return false; } - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // type + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // type errMsg="cannot read scan type"; return false; } //scan->type=Antenna::ANT_SIDEREAL; //already know it is a sidereal - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // name + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // name errMsg="cannot read source name"; return false; } @@ -433,7 +626,7 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e //scan->VradDefinition=Antenna::ANT_UNDEF_DEF; //scan->RadialVelocity=0.0; frame=Antenna::ANT_EQUATORIAL; - while (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { //get the next token...it represents the frame in which the coordinates are expressed + while (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { //get the next token...it represents the frame in which the coordinates are expressed bool ok=IRA::CIRATools::strToCoordinateFrame(token,frame); if ((frame==Antenna::ANT_EQUATORIAL) && (ok)) { if (frameOpen || offFrameOpen) { @@ -706,7 +899,7 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e IRA::CString token; Antenna::TCoordinateFrame frame; // get the second item..... - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // id + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // id errMsg="cannot read scan identifier"; return false; } @@ -715,12 +908,12 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e errMsg="scan identifier cannot be zero"; return false; } - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // type + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // type errMsg="cannot read scan type"; return false; } scan->type=Antenna::ANT_SIDEREAL; //already know it is a sidereal - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { // name + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { // name errMsg="cannot read source name"; return false; } @@ -739,7 +932,7 @@ bool CScanList::parseSidereal2(const IRA::CString& val,DWORD& id,IRA::CString& e scan->VradDefinition=Antenna::ANT_UNDEF_DEF; scan->RadialVelocity=0.0; frame=Antenna::ANT_EQUATORIAL; - while (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { //get the next token...it represents the frame in which the coordinates are expressed + while (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { //get the next token...it represents the frame in which the coordinates are expressed bool ok=IRA::CIRATools::strToCoordinateFrame(token,frame); if ((frame==Antenna::ANT_EQUATORIAL) && (ok)) { if (frameOpen || offFrameOpen) { @@ -993,14 +1186,14 @@ bool CScanList::parseOffsetSwitch(const IRA::CString& val,int& start, IRA::CString lontoken,lattoken,token; errMsg=""; res=false; - while (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { + while (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { if (strcmp(token,OFFFRAMEEQ)==0) { offsetFrame=Antenna::ANT_EQUATORIAL; - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lontoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lontoken,false)) { errMsg="not enough parameters for equatorial offset switch"; return false; } - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lattoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lattoken,false)) { errMsg="not enough parameters for equatorial offset switch"; return false; } @@ -1017,11 +1210,11 @@ bool CScanList::parseOffsetSwitch(const IRA::CString& val,int& start, } else if (strcmp(token,OFFFRAMEHOR)==0) { offsetFrame=Antenna::ANT_HORIZONTAL; - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lontoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lontoken,false)) { errMsg="not enough parameters for horizontal offset switch"; return false; } - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lattoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lattoken,false)) { errMsg="not enough parameters for horizontal offset switch"; return false; } @@ -1038,11 +1231,11 @@ bool CScanList::parseOffsetSwitch(const IRA::CString& val,int& start, } else if (strcmp(token,OFFFRAMEGAL)==0) { offsetFrame=Antenna::ANT_GALACTIC; - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lontoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lontoken,false)) { errMsg="not enough parameters for galactic offset switch"; return false; } - if (!IRA::CIRATools::getNextToken(val,start,SEPARATOR,lattoken)) { + if (!IRA::CIRATools::getNextToken(val,start,SEPARATORS,lattoken,false)) { errMsg="not enough parameters for galactic offset switch"; return false; } @@ -1067,7 +1260,7 @@ bool CScanList::parseVRADSwitch(const IRA::CString& val,int& start,double& vrad, IRA::CString token; errMsg=""; result=false; - while (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { + while (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { if (strcmp(token,RVEL)==0) { if (parseVRADSwitch(val,start,vrad,frame,ref,errMsg)) { result=true; @@ -1084,14 +1277,14 @@ bool CScanList::parseVRADSwitch(const IRA::CString& val,int& start,double& vrad, bool CScanList::parseVRADSwitch(const IRA::CString& val,int& start,double& vrad,Antenna::TReferenceFrame& frame,Antenna::TVradDefinition& ref,IRA::CString& errMsg) { IRA::CString token; - if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { + if (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { vrad=token.ToDouble(); } else { errMsg="not enough parameters for the radial velocity switch"; return false; } - if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { + if (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { if (!Antenna::Definitions::map(token,frame)) { errMsg="the reference frame of the radial velocity is incorrect"; return false; @@ -1101,7 +1294,7 @@ bool CScanList::parseVRADSwitch(const IRA::CString& val,int& start,double& vrad, errMsg="not enough parameters for the radial velocity switch"; return false; } - if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) { + if (IRA::CIRATools::getNextToken(val,start,SEPARATORS,token,false)) { if (!Antenna::Definitions::map(token,ref)) { errMsg="the radial velocity definition is incorrect"; return false; diff --git a/Common/Servers/Scheduler/src/SchedulerImpl.cpp b/Common/Servers/Scheduler/src/SchedulerImpl.cpp index 510057e466b7f2dc447b9798a380713ff539a6eb..ef6ba3cd6dd3dd909cdaca75d388a1547dc8b755 100644 --- a/Common/Servers/Scheduler/src/SchedulerImpl.cpp +++ b/Common/Servers/Scheduler/src/SchedulerImpl.cpp @@ -476,6 +476,41 @@ void SchedulerImpl::moon() throw (ComponentErrors::ComponentErrorsEx,ManagementE } } +void SchedulerImpl::sun() throw (ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException) +{ + try { + m_core->_sun(); + } + catch (ComponentErrors::ComponentErrorsExImpl& ex) { + ex.log(LM_DEBUG); + throw ex.getComponentErrorsEx(); + } + catch (ManagementErrors::ManagementErrorsExImpl& ex) { + ex.log(LM_DEBUG); + throw ex.getManagementErrorsEx(); + } +} + +void SchedulerImpl::planet(const char * name) throw ( + ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException) +{ + + try { + m_core->_planet(name); + } + catch (ComponentErrors::ComponentErrorsExImpl& ex) { + ex.log(LM_DEBUG); + throw ex.getComponentErrorsEx(); + } + catch (ManagementErrors::ManagementErrorsExImpl& ex) { + ex.log(LM_DEBUG); + throw ex.getManagementErrorsEx(); + } + + +} + + void SchedulerImpl::sidereal(const char * targetName,CORBA::Double ra,CORBA::Double dec,Antenna::TSystemEquinox eq,Antenna::TSections section) throw ( ComponentErrors::ComponentErrorsEx,ManagementErrors::ManagementErrorsEx,CORBA::SystemException) { diff --git a/Common/Servers/Scheduler/src/SubScanBinder.cpp b/Common/Servers/Scheduler/src/SubScanBinder.cpp index 0e9e7c1a2e6d40ba190f7997239c9e557c69c4e3..c5bab1e27200802f3bbd7fdf59f154d6724da6f1 100644 --- a/Common/Servers/Scheduler/src/SubScanBinder.cpp +++ b/Common/Servers/Scheduler/src/SubScanBinder.cpp @@ -326,6 +326,48 @@ void CSubScanBinder::moon() // The other subsystems can stay with defaults } +void CSubScanBinder::sun() +{ + m_secondary->type=Antenna::ANT_NONE; + m_secondary->secondary=false; + m_secondary->applyOffsets=false; + m_secondary->paramNumber=0; + m_secondary->enableCorrection=true; + m_primary->type=Antenna::ANT_SUN; + m_primary->secondary=false; + m_primary->targetName=CORBA::string_dup("Sun"); + m_primary->applyOffsets=false; + m_primary->section=Antenna::ACU_NEUTRAL; + m_primary->enableCorrection=true; + m_servo->is_empty_scan=true; + m_servo->axis_code=CORBA::string_dup(""); + m_servo->range=0; + m_servo->total_time=0; + m_subScanConf->signal=Management::MNG_SIGNAL_SIGNAL; + // The other subsystems can stay with defaults +} + +void CSubScanBinder::planet(const char * planetName) +{ + m_secondary->type=Antenna::ANT_NONE; + m_secondary->secondary=false; + m_secondary->applyOffsets=false; + m_secondary->paramNumber=0; + m_secondary->enableCorrection=true; + m_primary->type=Antenna::ANT_SOLARSYSTEMBODY; + m_primary->secondary=false; + m_primary->targetName=CORBA::string_dup(planetName); + m_primary->applyOffsets=false; + m_primary->section=Antenna::ACU_NEUTRAL; + m_primary->enableCorrection=true; + m_servo->is_empty_scan=true; + m_servo->axis_code=CORBA::string_dup(""); + m_servo->range=0; + m_servo->total_time=0; + m_subScanConf->signal=Management::MNG_SIGNAL_SIGNAL; + // The other subsystems can stay with defaults +} + void CSubScanBinder::track(const char *targetName) { m_secondary->type=Antenna::ANT_NONE; diff --git a/Common/Servers/Scheduler/src/testSchedule.cpp b/Common/Servers/Scheduler/src/testSchedule.cpp index e678e416e017ed32de6e5e3cd07ab318092f8c49..99cda2ee84fab1527d6b755c6713cb7f4f60d5d5 100644 --- a/Common/Servers/Scheduler/src/testSchedule.cpp +++ b/Common/Servers/Scheduler/src/testSchedule.cpp @@ -35,7 +35,7 @@ IRA::CString toDescription(const Antenna::TsubScanDescription& des) IRA::CString toType(const Management::TScanTypes& tp) { - if (tp==Management::MNG_SIDEREAL) return IRA::CString("SIDEREAL"); + if (tp==Management::MNG_SIDEREAL) return IRA::CString("SIDEREAL"); else if (tp==Management::MNG_SUN) return IRA::CString("SUN"); else if (tp==Management::MNG_MOON) return IRA::CString("MOON"); else if (tp==Management::MNG_SATELLITE) return IRA::CString("SATELLITE"); @@ -66,7 +66,10 @@ int main(int argc, char *argv[]) Management::TSubScanConfiguration *subScanConf; CSchedule::TRecord rec; ACS::stringSeq layoutDef; - CSchedule sched("../templates/","schedule.tmpl"); + std::string schedfile = "schedule.tmpl"; + if(argc > 1) + schedfile = std::string(argv[1]); + CSchedule sched("../templates/",schedfile.c_str()); //CSchedule sched("/archive/schedules/maintenance/","mbfitstest-CrossEQEQ.scd"); //CSchedule sched("/archive/schedules/","calibrationSeq.scd"); diff --git a/Common/Servers/Scheduler/src/testSchedules.cpp b/Common/Servers/Scheduler/src/testSchedules.cpp new file mode 100644 index 0000000000000000000000000000000000000000..62e88a391049e273a4cd7b0e8b4c756a938a436c --- /dev/null +++ b/Common/Servers/Scheduler/src/testSchedules.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include + +std::string exec(const std::string command) +{ + std::array buffer; + std::string result; + + std::unique_ptr pipe(popen(command.c_str(), "r"), pclose); + if(!pipe) + { + throw std::runtime_error("popen() failed!"); + } + while(fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) + { + result += buffer.data(); + } + return result; +} + +int main() +{ + std::string binpath = boost::filesystem::canonical("/proc/self/exe").parent_path().string(); + + std::string output_tab = exec(binpath + "/testSched"); + std::string output_spaces = exec(binpath + "/testSched schedule_ws.tmpl"); + if(output_tab != output_spaces) + { + std::cout << "testSched and testSchedSpaces have different outputs, FAILURE!" << std::endl; + return -1; + } + std::cout << "testSched and testSchedSpaces have the same output, OK!" << std::endl; + return 0; +} diff --git a/Common/Servers/Scheduler/templates/MapJupiter1x1.bck b/Common/Servers/Scheduler/templates/MapJupiter1x1.bck new file mode 100644 index 0000000000000000000000000000000000000000..bda5d9ea0b6493b555fe082c1d2f2f811199f4b2 --- /dev/null +++ b/Common/Servers/Scheduler/templates/MapJupiter1x1.bck @@ -0,0 +1,2 @@ +STD:BACKENDS/TotalPower { +} diff --git a/Common/Servers/Scheduler/templates/MapJupiter1x1.cfg b/Common/Servers/Scheduler/templates/MapJupiter1x1.cfg new file mode 100644 index 0000000000000000000000000000000000000000..9b46e6dbfee454b9e124c4de3bf39f8fea390452 --- /dev/null +++ b/Common/Servers/Scheduler/templates/MapJupiter1x1.cfg @@ -0,0 +1,13 @@ +INIT { + nop +} + +PRE { + waitOnsource + tsys + wait=5.000 +} + +POST { + wait=2.000 +} diff --git a/Common/Servers/Scheduler/templates/MapJupiter1x1.lis b/Common/Servers/Scheduler/templates/MapJupiter1x1.lis new file mode 100644 index 0000000000000000000000000000000000000000..8b53093580441b112620155b5f3db3f1fc8dbbb8 --- /dev/null +++ b/Common/Servers/Scheduler/templates/MapJupiter1x1.lis @@ -0,0 +1,208 @@ +#OTF columns labels +#ID type label Lon1 Lat1 Lon2 Lat2 frame sFrame geometry descr direction duration offsetFrame LonOffset LatOffset +1 PLANET JUPITER +2 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.493056d +3 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.479167d +4 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.465278d +5 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.451389d +6 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.437500d +7 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.423611d +8 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.409722d +9 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.395833d +10 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.381944d +11 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.368056d +12 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.354167d +13 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.340278d +14 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.326389d +15 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.312500d +16 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.298611d +17 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.284722d +18 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.270833d +19 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.256944d +20 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.243056d +21 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.229167d +22 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.215278d +23 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.201389d +24 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.187500d +25 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.173611d +26 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.159722d +27 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.145833d +28 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.131944d +29 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.118056d +30 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.104167d +31 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.0902778d +32 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.0763889d +33 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.0625000d +34 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.0486111d +35 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.0347222d +36 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d -0.0208333d +37 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d -0.00694444 +38 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.00694444d +39 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.0208333d +40 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.0347222d +41 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.0486111d +42 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.0625000d +43 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.0763889d +44 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.0902778d +45 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.104167d +46 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.118056d +47 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.131944d +48 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.145833d +49 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.159722d +50 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.173611d +51 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.187500d +52 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.201389d +53 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.215278d +54 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.229167d +55 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.243056d +56 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.256944d +57 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.270833d +58 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.284722d +59 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.298611d +60 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.312500d +61 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.326389d +62 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.340278d +63 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.354167d +64 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.368056d +65 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.381944d +66 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.395833d +67 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.409722d +68 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.423611d +69 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.437500d +70 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.451389d +71 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.465278d +72 OTFC 1 1.0d EQ EQ LAT INC 20.0 -EQOFFS 0.00000d 0.479167d +73 OTFC 1 1.0d EQ EQ LAT DEC 20.0 -EQOFFS 0.00000d 0.493056d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Common/Servers/Scheduler/templates/MapJupiter1x1.scd b/Common/Servers/Scheduler/templates/MapJupiter1x1.scd new file mode 100644 index 0000000000000000000000000000000000000000..6a4fe01334db4b43c4a3f3506f09968a59f23279 --- /dev/null +++ b/Common/Servers/Scheduler/templates/MapJupiter1x1.scd @@ -0,0 +1,85 @@ +PROJECT: S0000 +OBSERVER: ssss +SCANLIST: MapJupiter1x1.lis +PROCEDURELIST: MapJupiter1x1.cfg +BACKENDLIST: MapJupiter1x1.bck +MODE: SEQ +SCANTAG: 1 +INITPROC: INIT +#1x1 map done in equatorial frame over JUPITER. +#scan scanTag label backend scanLayout +#subScanTag duration IDSubScan preSubScan postSubScan +SC: 1 VirA7GHz_Map_bis STD:MANAGEMENT/FitsZilla +1_1 20.000000 2 NULL POST +1_2 20.000000 3 NULL POST +1_3 20.000000 4 NULL POST +1_4 20.000000 5 NULL POST +1_5 20.000000 6 NULL POST +1_6 20.000000 7 NULL POST +1_7 20.000000 8 NULL POST +1_8 20.000000 9 NULL POST +1_9 20.000000 10 NULL POST +1_10 20.000000 11 NULL POST +1_11 20.000000 12 NULL POST +1_12 20.000000 13 NULL POST +1_13 20.000000 14 NULL POST +1_14 20.000000 15 NULL POST +1_15 20.000000 16 NULL POST +1_16 20.000000 17 NULL POST +1_17 20.000000 18 NULL POST +1_18 20.000000 19 NULL POST +1_19 20.000000 20 NULL POST +1_20 20.000000 21 NULL POST +1_21 20.000000 22 NULL POST +1_22 20.000000 23 NULL POST +1_23 20.000000 24 NULL POST +1_24 20.000000 25 NULL POST +1_25 20.000000 26 NULL POST +1_26 20.000000 27 NULL POST +1_27 20.000000 28 NULL POST +1_28 20.000000 29 NULL POST +1_29 20.000000 30 NULL POST +1_30 20.000000 31 NULL POST +1_31 20.000000 32 NULL POST +1_32 20.000000 33 NULL POST +1_33 20.000000 34 NULL POST +1_34 20.000000 35 NULL POST +1_35 20.000000 36 NULL POST +1_36 20.000000 37 NULL POST +1_37 20.000000 38 NULL POST +1_38 20.000000 39 NULL POST +1_39 20.000000 40 NULL POST +1_40 20.000000 41 NULL POST +1_41 20.000000 42 NULL POST +1_42 20.000000 43 NULL POST +1_43 20.000000 44 NULL POST +1_44 20.000000 45 NULL POST +1_45 20.000000 46 NULL POST +1_46 20.000000 47 NULL POST +1_47 20.000000 48 NULL POST +1_48 20.000000 49 NULL POST +1_49 20.000000 50 NULL POST +1_50 20.000000 51 NULL POST +1_51 20.000000 52 NULL POST +1_52 20.000000 53 NULL POST +1_53 20.000000 54 NULL POST +1_54 20.000000 55 NULL POST +1_55 20.000000 56 NULL POST +1_56 20.000000 57 NULL POST +1_57 20.000000 58 NULL POST +1_58 20.000000 59 NULL POST +1_59 20.000000 60 NULL POST +1_60 20.000000 61 NULL POST +1_61 20.000000 62 NULL POST +1_62 20.000000 63 NULL POST +1_63 20.000000 64 NULL POST +1_64 20.000000 65 NULL POST +1_65 20.000000 66 NULL POST +1_66 20.000000 67 NULL POST +1_67 20.000000 68 NULL POST +1_68 20.000000 69 NULL POST +1_69 20.000000 70 NULL POST +1_70 20.000000 71 NULL POST +1_71 20.000000 72 NULL POST +1_72 20.000000 73 NULL POST + diff --git a/Common/Servers/Scheduler/templates/calib.lis b/Common/Servers/Scheduler/templates/calib.lis index 1fd87c8453c9761d76493caa59b299b81b90ed19..e280a61e13ab438c4b16d2ba01cfa1ccf243093a 100644 --- a/Common/Servers/Scheduler/templates/calib.lis +++ b/Common/Servers/Scheduler/templates/calib.lis @@ -1,4 +1,4 @@ -10 SIDEREAL 3c123 +10 PLNET JUPIrER 11 SIDEREAL 3c123 -HOROFFS 1.0d 0.0d 20 SIDEREAL 3c286 21 SIDEREAL 3c286 -HOROFFS 1.0d 0.0d diff --git a/Common/Servers/Scheduler/templates/schedule.tmpl b/Common/Servers/Scheduler/templates/schedule.tmpl index 9bb098c800e21c8f8ddab7e293aade4fa5cf6706..5ab342f9615b357c6cd0f54aa4018a6f691bf6b3 100644 --- a/Common/Servers/Scheduler/templates/schedule.tmpl +++ b/Common/Servers/Scheduler/templates/schedule.tmpl @@ -39,7 +39,7 @@ SCANTAG: 1024 INITPROC: INITALL #This is an optional field which allows to control which targets are observed or not based on elevation limits. The two values are degrees and are the lower and the upper limit #respectively. If the keyword is not provided the default values will be kept by the system -ELEVATIONLIMITS 15.0 80.0 +ELEVATIONLIMITS: 15.0 80.0 #The schedule itself, the fields are tab separated diff --git a/Common/Servers/Scheduler/templates/schedule_ws.tmpl b/Common/Servers/Scheduler/templates/schedule_ws.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..bf4a836738315138fd531ee9197b6785bf130c9a --- /dev/null +++ b/Common/Servers/Scheduler/templates/schedule_ws.tmpl @@ -0,0 +1,88 @@ +# A project string,it can be any combination of characters but spaces and blanks, it is not the project code which is used to compose the output +# file name but it can be used to distinguish between various activities during the project, for example A1245-Map and A1245-Calib. It is used +# to add a keyword in the file +PROJECT: skySurvey +# the name of the observer, can be any combination of characters but blanks +OBSERVER: AndreaOrlati +#the file that contains the parameters that defines the scans from the telescope positioning point of view. For +#example sidereal tracking or On the fly scan, and so on...... Every scan is enumerated +SCANLIST: scan.tmpl +#the file that contains the telescopes setups procedures (receiver, local oscillator, ....) that can be used during +#the observation. +PROCEDURELIST: config.tmpl +#file that contains the backend configurations that are required during the observation. This section is not +#mandatory provided that a NULL in the backend field of the schedule is given +BACKENDLIST: backend.tmpl +#file that contains extra information that define the scan to be passed to the the data recorder. This field is not mandatory. +SCANLAYOUT: layoutfile.tmpl +#This defines the schedule mode. +#In this example we have the LST based schedule. That means the various scans are +#performed based on LST mark. The telescope will be driven on the next scan that can be reached on time. If the target is not reachable the scan is skipped. +#The recording will start at exactly at the time mark given for the scan. The stop recording command will be issued at the time which is the result of scheduled start time plus +#the scheduled duration. +#The second parameter is the number of repetitions, it means the times the schedule is repeated. A -1 means +#repeat continuously. A zero or null is not allowed. +MODE: LST 1 +#in this mode the single scans are performed sequentially in the order they appear in the schedule. In that +#mode no timestamps are required. The target is checked top be above the horizon, if the test is failed the scan is skipped. The start to the acquisition is given when +#the telescope is on target. The stop time will be at effective start time plus the scheduled duration. In that mode the schedule is continuously run. +#The second argument, which is optional gives the start LST for the schedule. +#MODE: SEQ +#MODE: SEQ 21:15:36.00 +#this field is used to enumerate the scans of the schedule. The first scan will be marked with the number reported here. +# The identifier will be incremented every scan....and stored into the output file. If negative, or not given (this field is not mandatory) the +# enumeration capability is turned off. +SCANTAG: 1024 +#This procedure will be executed once at the start of the schedule. It could be NULL, in that case nothing is done. If not present it is considered to be +# NULL. The procedure must be defined in the PROCEDURELIST file. It is always executed in blocking mode, the schedule is started only when the procedure +# has been done. +INITPROC: INITALL +#This is an optional field which allows to control which targets are observed or not based on elevation limits. The two values are degrees and are the lower and the upper limit +#respectively. If the keyword is not provided the default values will be kept by the system +ELEVATIONLIMITS: 15.0 80.0 + + +#The schedule itself, the fields are tab separated +#the keyword SCAN identifies the beginning of a scan, a scan includes all the subscan enlisted before the next SCAN keyword or the end of the schedule. +#SCAN scan_id suffix backend:writer [layout] +#scan_id is progressive number (zero is not allowed) (must be unique in the schedule) that identifies the current scan. +#suffix this is the suffix of the output file. The final name of the file will be composed by the date and time of observation then the local sidereal time +# (if the schedule is LST) then the project name and at the end the suffix. +#backend this field reports about the definition (in BACKENDLIST file) to be used in the current scan. After the colon the scheduler +# expects to find the instance of the data receiver to be used. The provided name could be composed by any litteral or numerical character. +# There is reserved string that has special meanings. "NULL" means that the scan must be done with no acquisition. +#writer name of the writer instance in charge to store the data. There is reserved string that has special meanings. +# "NULL" means that the data coming from the backend are not to be stored. +#layout this is the label of the current layout to be used for the current scan. If provided the scan layout file must be given and the corresponding layout must +# exists in the file +#The subscan definition match the following pattern: +#subscan_id [startLST] duration scan PreScan PostScan +#subscan_id is the identifier of the subscan. The format must be scanid_subscanid, where the scanid and subscanid are integers, the former must match the id of the above +# scan, the former can be any positive number (a part from zero) that cannot be repeated twice inside the same scan. +#startLST if the schedule is a LST schedule this field stores the local sidereal time to start the current subscan, the format is hh:mm:ss.sss. The antenna is moved +# in the correct position in advance and the data acquisition is started. No time repetitions are allowed and +# the various times must be incrementally ordered. 00:00:00 could come after 23:59:59. +#duration number of seconds that the scan is supposed to perform data recording. After that period the data recording is stopped. +#scan the scan number (inside the file given in SCANLIST section) +#PreScan A name of a procedure that must be executed before the scan starts. It may be NULL in that case nothing is done. +# If not reported in the procedure list file the schedule is considered correct; the system will try to match the procedure with one of the system commands at +# runtime. The procedure can also be given a list of arguments. +# The default behavior is that the scheduler will wait for the procedure to finish before doing anything else. If this is not the desired approach a '@' must +# be appended to the procedure name,in that case the scheduler won't wait for the procedure completion. +#PostScan A name of a procedure that must be executed at the end of the scan. It may be NULL in that case nothing is done. It has to be reported in the procedure list file. +# The async/sync execution mode is identical to the prescan procedure. + +SC: 1 dr21 STD:MANAGEMENT/MBFits EQMAPLAYOUT +1_1 10:12:04.000 60.0 1 STANDARDPRESCAN@ STANDARDPOSTSCAN +1_2 10:12:25.000 100.0 12 NULL NULL +1_10 10:14:04.000 60.0 1 STANDARDPRESCAN@ STANDARDPOSTSCAN +1_11 10:16:29.000 60.0 1 NULL ENDSCAN=10.66@ + +SC: 2 mySource HIGH:MANAGEMENT/MBFits +2_1 10:30:14.000 300.0 4 STANDARDPRESCAN NULL +2_2 10:45:16.000 6.0 9 NULL NULL + +#id duration scan PreScan PostScan backend Writer +SC: 3 dr21 LOW::MANAGEMENT/FitsZilla +3_1 11:30:10.000 60.0 1 STANDARDPRESCAN NULL +3_2 11:36:22.200 60.0 1 STANDARDPRESCAN NULL diff --git a/Common/Servers/Skarab/src/CommandLine.cpp b/Common/Servers/Skarab/src/CommandLine.cpp index 245f499bc5199187f0b6f9967b95b5422152cf65..3569d1dbbb13dfa42cb5e13118a7519f5366368d 100644 --- a/Common/Servers/Skarab/src/CommandLine.cpp +++ b/Common/Servers/Skarab/src/CommandLine.cpp @@ -1108,6 +1108,18 @@ void CCommandLine::setEnabled(const ACS::longSeq& en) throw (BackendsErrors::Bac throw impl; } } + if ((m_recstr.Compare("CCB")==0) || (m_recstr.Compare("CCG")==0)) { + if (en[0] != 0) { + _EXCPT(ComponentErrors::ValueOutofRangeExImpl,impl,"CCommandLine::setEnabled()"); + impl.setValueName("feed"); + throw impl; + } + if (en[1] != 0) { + _EXCPT(ComponentErrors::ValueOutofRangeExImpl,impl,"CCommandLine::setEnabled()"); + impl.setValueName("feed"); + throw impl; + } + } if (en[0] == en[1]) { // central feed m_inputsNumber = 2; if (m_stokes == false) @@ -1136,7 +1148,7 @@ void CCommandLine::setEnabled(const ACS::longSeq& en) throw (BackendsErrors::Bac Message reply = sendBackendCommand(request); if (reply.is_success_reply()) { // TBD - ACS_LOG(LM_FULL_INFO,"CCommandLine::setEnabled()",(LM_NOTICE,"NODDING enabled")); + ACS_LOG(LM_FULL_INFO,"CCommandLine::setEnabled()",(LM_NOTICE,"FEEDS enabled")); } } else { @@ -1427,7 +1439,7 @@ void CCommandLine::fillChannelHeader(Backends::TSectionHeader *chHr,const long& chHr[index].frequency=m_frequency[i]; chHr[index].attenuation[0]=m_attenuation[i]; chHr[index].attenuation[1]=m_attenuation[i]; - chHr[index].sampleRate=/*m_sampleRate[i];*/m_commonSampleRate; + chHr[index].sampleRate=m_sampleRate[i]; if (m_stokes==true) { chHr[index].inputs=2; chHr[index].feed=m_feedNumber[2*i]; @@ -1809,8 +1821,12 @@ bool CCommandLine::initializeConfiguration(const IRA::CString & config) throw (C m_commonSampleRate=DEFAULT_SAMPLE_RATE; m_calPeriod=DEFAULT_DIODE_SWITCH_PERIOD; for (i=0;iSergio Poppi + * @remarks + + */ + +#ifndef __cplusplus +#error This is a C++ include file and cannot be used from plain C +#endif + + +#include +#include "SolarSystemBodyS.h" +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +// If THROUGH_GET is true get the exception by an exImpl method +#define THROW_EX(TYPE, NAME, MESSAGE, THROUGH_GET) \ +{ \ + string msg(MESSAGE); \ + ACS_SHORT_LOG((LM_ERROR, msg.c_str())); \ + TYPE::NAME##Impl exImpl(__FILE__, __LINE__, msg.c_str()); \ + if(THROUGH_GET) \ + throw exImpl.get##NAME(); \ + else \ + throw exImpl; \ +} + +#include "libastrowrapper.h" + + +class SolarSystemBodyImpl: public virtual acscomponent::ACSComponentImpl,public virtual POA_Antenna::SolarSystemBody + +{ +public: + + SolarSystemBodyImpl(const ACE_CString &CompName,maci::ContainerServices *containerServices); + + virtual ~SolarSystemBodyImpl(); + /** + * Called to give the component time to initialize itself. The component reads into + configuration files/parameters, builds up connection. + * Called before execute. It is implimented as a synchronous (blocking) call. + */ + + virtual void initialize() throw (ACSErr::ACSbaseExImpl); + /* + * Called after initialize() to tell the component that it has to be ready to + accept incoming function calls at any time. + * Must be implemented as a synchronous (blocking) call. + * In this class the default implementation only logs the COMPSTATE_OPERTIONAL + */ + virtual void execute() throw (ACSErr::ACSbaseExImpl); + + + /** + * Called by the container before destroying the server in a normal situation. This function takes charge of releasing all resources. + */ + virtual void cleanUp(); + + + /* + * Called by the container in the case of error or emergency situation. This function tries to free all the resources even though + * there is no warrenty that the function is completly executed before the component is destroyed + * */ + virtual void aboutToAbort(); + /* + * This method is used to retrive all the attribute of the component in one shot. + * @throw CORBA::SystemException + * @param att that's the pointer to the structure containing all the data. + */ + void getAttributes(Antenna::SolarSystemBodyAttributes_out att) throw (CORBA::SystemException); + + + void setBodyName(const char* bodyName) throw (CORBA::SystemException,AntennaErrors::AntennaErrorsEx) ; + + /* + * This method is used to apply new offsets to a givrn frame. Longitude is corrected for latitude cosine before use. + * @throw CORBA::SystemException + * @throw AntennaErrors::AntennaErrorsEx + * @param longitude new offset for the longitude in radians. + * @param latitude new offset for the latitude in radians. + * @param frame frame the offstes refer to, galactic frame not supported and an error is thrown. + */ + void setOffsets(CORBA::Double lon,CORBA::Double lat,Antenna::TCoordinateFrame frame) throw (CORBA::SystemException,AntennaErrors::AntennaErrorsEx); + + /* + * It used, given a timestamp, to retrive the apparent topocentric coordinates in one shot. + * @throw CORBA::SystemException + * @param time this parameter is used to pass the exact time the caller wants to know the topocentric coordinates. + * @param az that's the returned value in radians of the azimuth for the requested time. + * @param az that's the returned value in radians of the elevation for the requested time. + */ + void getHorizontalCoordinate(ACS::Time time, CORBA::Double_out az, CORBA::Double_out el) throw (CORBA::SystemException); + + /** + * This method is only for control software internal use. It used, given a timestamp, to retrive the apparent + * J2000 Equatorial coordiantes coordinates in one shot. + * @throw CORBA::SystemException + * @param timestamp this parameter is used to pass the exact time the caller wants to know the topocentric coordinates. + * @param ra that's the returned value in radians of the right ascension for the requested time. + * @param re that's the returned value in radians of the declination for the requested time. + */ + void getJ2000EquatorialCoordinate(ACS::Time time, CORBA::Double_out ra, CORBA::Double_out dec) throw (CORBA::SystemException); + + + + /** + * It used, given a timestamp, to retrieve the all apparent coordinates in all frames in one shot. + * @throw CORBA::SystemException + * @param time this parameter is used to pass the exact time the caller wants to know the horizontal coordinates. + * @param az that's the returned value in radians of the azimuth for the requested time. + * @param el that's the returned value in radians of the elevation for the requested time. + * @param ra that's the returned value in radians of the elevation for the requested time. + * @param dec that's the returned value in radians of the right ascension for the requested time. + * @param jepoch julian epoch the returned equatorial point refers to + * @param lon that's the returned value in radians of the galactic longitude for the requested time. + * @param lat that's the returned value in radians of the galactic latitude for the requested time. + */ + void getAllCoordinates(ACS::Time time,CORBA::Double_out az,CORBA::Double_out el,CORBA::Double_out ra,CORBA::Double_out dec,CORBA::Double_out jepoch, + CORBA::Double_out lon,CORBA::Double_out lat) throw (CORBA::SystemException); + + /* + * This method is used to check if the given coordinate at the given time belongs to the trajectory generated by this component with + * the tollerance of a tens of HPBW. If the given coordinate is the telescope coordinate we can say that the antenna is tracking. + * @throw CORBA::SystemException + * @param time that the time mark the given coordinate refers to. + * @param az that's the azimuth of the given coordinate (in radians) + * @param el that's the elevation of the given coordinate (in radians) + * @param HPBW that's the beam width at half power for the telescope. This parameter, given in radians, changes with + the frequency so it must be provided by the caller. + * @return true if the given point is in the generated trajectory. + */ + bool checkTracking(ACS::Time time,CORBA::Double az,CORBA::Double el,CORBA::Double HPBW) throw (CORBA::SystemException); + + /** + * This method is supposed to compute the flux of the moon. At present a 0.0 Jy is always returned. + * @throw CORBA::SystemException + * @param freq frequency observed + * @param fwhm fwhm + * @param flux computed flux (Jy) + */ + void computeFlux(CORBA::Double freq, CORBA::Double fwhm, CORBA::Double_out flux) throw (CORBA::SystemException); + /** + * This method is only for control software internal use. It used, given a timestamp, to body distance in AY. + * @throw CORBA::SystemException + * @param timestamp this parameter is used to pass the exact time the caller wants to know the topocentric coordinates. + * @param distance that's the returned distance at given time in AU + */ + + + + void getDistance(ACS::Time time,CORBA::Double_out distance) throw (CORBA::SystemException); + +private: + + IRA::CString m_bodyName; + int m_bodycode; + BACIMutex m_mutex; + + IRA::CSite m_site; + IRA::CSkySource m_source; + xephemlib::Site* m_sitex; // site class for libastro + xephemlib::SolarSystemBody* m_body_xephem; + // dummy CSkySource onj for coordinate conversion + double m_longitude; + double m_latitude; + double m_height; + + /* + * right ascension, declination, right ascension and declination offset + * azimuth, elevation, azimuth and elevation offset + */ + double m_ra, m_dec,m_ra_off, m_dec_off; + double m_az, m_el,m_az_off, m_el_off; + double m_glon, m_glat; + double m_ra2000,m_dec2000; + double m_dut1; + + double m_distance; + /* + * Currently used frame for the offsets + */ + Antenna::TCoordinateFrame m_offsetFrame; + double m_parallacticAngle; + /* + * This will contain the name of the component...... + */ + IRA::CString m_componentName; + + void BodyPosition(TIMEVALUE &time); + +}; + + + + +#endif /*SOLSYSBODYIMPL_H_*/ diff --git a/Common/Servers/SolarSystem/include/libastrowrapper.h b/Common/Servers/SolarSystem/include/libastrowrapper.h new file mode 100644 index 0000000000000000000000000000000000000000..90da0dea694856143393edd49562e05cc05c72dc --- /dev/null +++ b/Common/Servers/SolarSystem/include/libastrowrapper.h @@ -0,0 +1,104 @@ +/* + + C++ Wrapper for Xephem libastro. + + + +*/ + + + + +#ifndef _LIBRWAPPER +#define _LIBRWAPPER + +#include +#include +#include "astro.h" +#include "preferences.h" +#include +#include +#include +#include +#include + +namespace xephemlib +{ + + +class Site: public Now { + +public: + + Site(double mj, double lon, double lt, double height); + Site(); + + void setCoordinate(double lon, double lt, double height); + void setTime(double mj); + + void stampa(void); + double getMjd(); + + +private: + double m_lon,m_lat,m_height; + std::string name; + +}; + +class SolarSystemBody { + +public: + + + SolarSystemBody(PLCode code); + ~SolarSystemBody(){ delete obj;} + + static std::string getPlanetNameFromCode(PLCode code); + static PLCode getPlanetCodeFromName(std::string name); + void compute (Site* site); + SolarSystemBody(); + void setObject(PLCode code); + + + Obj* getObject(); + void report(); + static std::map planet; + void getCoordinates(double& ra, double& dec,double& az,double& el, double& range); + private: + + double _ra,_dec,_range,_az,_el; + PLCode _code; + + + +protected: + + Obj* obj; + + + +}; + +class Jupiter : public SolarSystemBody { + +public: + + Jupiter() ; + + + +}; + +} + + + + + + + + + + +#endif /*_LIBRWAPPER*/ diff --git a/Common/Servers/SolarSystem/src/Makefile b/Common/Servers/SolarSystem/src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b0c7cafc00e45339a6825f4c04e3fdccd13a146f --- /dev/null +++ b/Common/Servers/SolarSystem/src/Makefile @@ -0,0 +1,113 @@ +#******************************************************************************* +# PPPPPPPP +# +# "@(#) $Id$" +# +# Makefile of ........ +# +# who when what +# -------- -------- ---------------------------------------------- +# spoppi 03/05/17 created +# + +#******************************************************************************* +# This Makefile follows VLT Standards (see Makefile(5) for more). +#******************************************************************************* +# REMARKS +# None +#------------------------------------------------------------------------ + +# +# user definable C-compilation flags +#USER_CFLAGS = + +# +# additional include and library search paths +#USER_INC = +#USER_LIB = + +# +# MODULE CODE DESCRIPTION: +# ------------------------ +# As a general rule: public file are "cleaned" and "installed" +# local (_L) are not "installed". + +# +# C programs (public and local) +# ----------------------------- + EXECUTABLES = testastrolib +# EXECUTABLES_L = + + + +# +# special compilation flags for single c sources +#yyyyy_CFLAGS = + +# +# Includes (.h) files (public only) +# --------------------------------- +# INCLUDES = + +# +# Libraries (public and local) +# ---------------------------- +LIBRARIES = SolarSystemBodyImpl +LIBRARIES_L = + +# +# + +SolarSystemBodyImpl_OBJECTS = SolarSystemBodyImpl libastrowrapper +SolarSystemBodyImpl_LIBS = EphemGeneratorStubs SolarSystemBodyStubs baci maci IRALibrary \ + SlaLibrary ObservatoryStubs \ + ComponentErrors AntennaErrors \ + AntennaDefinitionsStubs ManagmentDefinitionsStubs \ + ManagementErrors astro + +testastrolib_OBJECTS = libastrowrapper mainastro +testastrolib_LIBS = astro +# +# Scripts (public and local) +# ---------------------------- +# +# list of all possible C-sources (used to create automatic dependencies) +# ------------------------------ +CSOURCENAMES = \ + $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ + $(foreach rtos, $(RTAI_MODULES) , $($(rtos)_OBJECTS)) \ + $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) + +# +#>>>>> END OF standard rules + +# +# INCLUDE STANDARDS +# ----------------- + +MAKEDIRTMP := $(shell searchFile include/acsMakefile) +ifneq ($(MAKEDIRTMP),\#error\#) + MAKEDIR := $(MAKEDIRTMP)/include + include $(MAKEDIR)/acsMakefile +endif + +# +# TARGETS +# ------- +all: do_all + @echo " . . . 'all' done" + +clean : clean_all + @echo " . . . clean done" + +clean_dist : clean_all clean_dist_all + @echo " . . . clean_dist done" + +man : do_man + @echo " . . . man page(s) done" + +install : install_all + @echo " . . . installation done" + + +#___oOo___ diff --git a/Common/Servers/SolarSystem/src/MyMake b/Common/Servers/SolarSystem/src/MyMake new file mode 100644 index 0000000000000000000000000000000000000000..825063c561aced40a1a028f12073ebb137fb0fe8 --- /dev/null +++ b/Common/Servers/SolarSystem/src/MyMake @@ -0,0 +1,22 @@ + +CC = c++ +CFLAGS= -O2 -Wall -lm +CFLAGS_TEST= -L/opt/gtest/lib -lgtest -lgtest_main -lpthread +DEPS= +INCLUDE= -I../libastro/ +HS = + +%.o: %.cpp $(DEPS) + $(CC) -c -o $@ $< $(CFLAGS) $(INCLUDE) + +myephem: testlibastro.o + $(CC) -o testlibastro testlibastro.o ../libastro/libastro.a + +debug: testlibastro.o + $(CC) -g -o testlibastro testlibastro.o ../libastro/libastro.a + +astrotest: mainastro.o libastrowrapper.o + $(CC) -g -o mainastro libastrowrapper.o mainastro.o ../libastro/libastro.a + +test: libastrowrapper.o test.o + $(CC) -o test -I$(INTROOT)/include libastrowrapper.o test.o ../libastro/libastro.a $(CFLAGS_TEST) diff --git a/Common/Servers/SolarSystem/src/SolarSystemBodyImpl.cpp b/Common/Servers/SolarSystem/src/SolarSystemBodyImpl.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f9ba45baf5cb1f40c38337242ef490e5f8d63dab --- /dev/null +++ b/Common/Servers/SolarSystem/src/SolarSystemBodyImpl.cpp @@ -0,0 +1,424 @@ +#include "SolarSystemBodyImpl.h" +//#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +//#include +//#include +#include +//#include +#include +#define R2D 57.29577951308232 + +using namespace ComponentErrors; +// using namespace baci; +using namespace IRA; + +using namespace baci; + + +SolarSystemBodyImpl::SolarSystemBodyImpl(const ACE_CString &CompName,maci::ContainerServices *containerServices) : + acscomponent::ACSComponentImpl(CompName, containerServices) +{ + AUTO_TRACE("SolarSystemBodyImpl::SolarSystemBodyImpl()"); + m_componentName=CString(CompName); + m_bodyName="Unset"; +} + +SolarSystemBodyImpl::~SolarSystemBodyImpl() +{ + AUTO_TRACE("SolarSystemBodyImpl::~SolarSystemBodyImpl()"); + +} + +void SolarSystemBodyImpl::initialize() throw(ACSErr::ACSbaseExImpl) +{ + AUTO_TRACE("SolarSystemBodyImpl::initialize()"); + + m_ra_off = m_dec_off = 0.0; + m_az_off = m_el_off = 0.0; + m_offsetFrame=Antenna::ANT_HORIZONTAL; + + + ACS_LOG(LM_FULL_INFO, "SolarSystemBodyImpl::initialize()", (LM_INFO,"COMPSTATE_INITIALIZING")); +} + +void SolarSystemBodyImpl::cleanUp() +{ + AUTO_TRACE("SolarSystemBodyImpl::cleanUp()"); + delete m_sitex; + delete m_body_xephem; + ACSComponentImpl::cleanUp(); +} + +void SolarSystemBodyImpl::aboutToAbort() +{ + AUTO_TRACE("SolarSystemBodyImpl::aboutToAbort()"); +} + +void SolarSystemBodyImpl::execute() throw (ACSErr::ACSbaseExImpl) +{ + AUTO_TRACE("SolarSystemBodyImpl::execute()"); + CError error; + Antenna::TSiteInformation_var site; + + + Antenna::Observatory_var observatory=Antenna::Observatory::_nil(); + try { + observatory=getContainerServices()->getComponent("ANTENNA/Observatory"); + } + catch (maciErrType::CannotGetComponentExImpl & ex){ + _ADD_BACKTRACE(ComponentErrors::CouldntGetComponentExImpl,Impl,ex,"SolarSystemBodyImpl::execute()"); + Impl.setComponentName("ANTENNA/Observatory"); + throw Impl; + } + + ACS_LOG(LM_FULL_INFO,"SolarSystemBodyImpl::execute()", (LM_INFO, (const char *)CString(m_componentName+"::OBSERVATORY_LOCATED"))); + try { + site=observatory->getSiteSummary(); + } + catch (CORBA::SystemException& ex) { + _EXCPT(ComponentErrors::CORBAProblemExImpl,_dummy, "SolarSystemBodyImpl::execute()"); + _dummy.setName(ex._name()); + _dummy.setMinor(ex.minor()); + throw _dummy; + } + m_site=CSite(site.out()); + m_source=IRA::CSkySource(); // dummy obj for coordinate conversion + + m_dut1=site->DUT1; + m_longitude=site->longitude; + m_latitude=site->latitude; + m_height=site->height; + // std::cout << "Site:" << site->longitude *R2D << " " << m_latitude ; + m_sitex= new xephemlib::Site(); + m_sitex-> setCoordinate(site->longitude,site->latitude,site->height); //coordinates in degrees. + m_body_xephem = new xephemlib::SolarSystemBody(); + + + try { + getContainerServices()->releaseComponent((const char*)observatory->name()); + } + catch (maciErrType::CannotReleaseComponentExImpl& ex) { + _ADD_BACKTRACE(ComponentErrors::CouldntReleaseComponentExImpl,Impl,ex,"SolarSystemBodyImpl::initialize()"); + Impl.setComponentName("ANTENNA/Observatory"); + throw Impl; + } + ACS_LOG(LM_FULL_INFO,"SolarSystemBodyImpl::execute()", (LM_INFO,"SITE_INITIALIZED")); +} + + + +void SolarSystemBodyImpl::getAttributes(Antenna::SolarSystemBodyAttributes_out att) throw (CORBA::SystemException) +{ + + AUTO_TRACE("SolarSystemBodyImpl::getAttributes()"); + + + baci::ThreadSyncGuard guard(&m_mutex); +TIMEVALUE now; + + IRA::CIRATools::getTime(now); + + BodyPosition(now); + + /* Returns the julian epoch of the date. + * @return the epoch which is the year with the fracional part of the year. + */ + double JulianEpoch; + + BodyPosition(now); + IRA::CDateTime currentTime(now,m_dut1); + JulianEpoch = currentTime.getJulianEpoch(); + + /* Getting the output field + */ + + att=new Antenna::SolarSystemBodyAttributes; + + att->sourceID=CORBA::string_dup(m_bodyName); + att->J2000RightAscension=slaDranrm(m_ra2000); + att->J2000Declination=IRA::CIRATools::latRangeRad(m_dec2000); + att-> rightAscension = slaDranrm(m_ra); + att-> declination = IRA::CIRATools::latRangeRad(m_dec) ; + att-> azimuth = slaDranrm(m_az); + att-> elevation = IRA::CIRATools::latRangeRad(m_el); + att-> julianEpoch = JulianEpoch; + att-> parallacticAngle = m_parallacticAngle; + att-> userAzimuthOffset = m_az_off; + att-> userElevationOffset = m_el_off; + att-> userRightAscensionOffset = m_ra_off; + att-> userDeclinationOffset = m_dec_off; + att->gLongitude=slaDranrm(m_glon); + att->gLatitude=IRA::CIRATools::latRangeRad(m_glat); + att->userLatitudeOffset=att->userLongitudeOffset=0.0; + att->axis=Management::MNG_TRACK; + att->distance=m_distance; + att->angularSize= att->radialVelocity=0; + att->vradFrame= Antenna::ANT_TOPOCEN ; + att->vradDefinition=Antenna::ANT_RADIO; + +} + +void SolarSystemBodyImpl::setOffsets(CORBA::Double lon,CORBA::Double lat,Antenna::TCoordinateFrame frame) throw (CORBA::SystemException,AntennaErrors::AntennaErrorsEx) +{ + AUTO_TRACE("SolarSystemBodyImpl::setOffsets()"); + if (frame==Antenna::ANT_HORIZONTAL) { + m_source.setHorizontalOffsets(lon,lat); + m_az_off=lon; + m_el_off=lat; + m_ra_off=0.0; + m_dec_off=0.0; + } + else if (frame==Antenna::ANT_EQUATORIAL) { + m_az_off=0.0; + m_el_off=0.0; + m_ra_off=lon; + m_dec_off=lat; + m_source.setEquatorialOffsets(lon,lat); + + } + else { + _EXCPT(AntennaErrors::OffsetFrameNotSupportedExImpl,impl,"SolarSystemBodyImpl::setOffsets()"); + throw impl.getAntennaErrorsEx(); + } + +} + +void SolarSystemBodyImpl::getJ2000EquatorialCoordinate(ACS::Time time, CORBA::Double_out ra2000, CORBA::Double_out dec2000) throw (CORBA::SystemException) + +{ + AUTO_TRACE("SolarSystemBodyImpl::getJ2000EquatorialCoordinate()"); + double _ra,_dec; + TIMEVALUE val(time); + BodyPosition(val); + + IRA::CDateTime ctime(val,m_dut1); + _ra =slaDranrm(m_ra2000); + _dec =IRA::CIRATools::latRangeRad(m_dec2000); + ra2000=_ra; + dec2000=_dec; + + +} + + +void SolarSystemBodyImpl::getHorizontalCoordinate(ACS::Time time, CORBA::Double_out az, CORBA::Double_out el) throw (CORBA::SystemException) + +{ + AUTO_TRACE("SolarSystemBodyImpl::getHorizontalCoordinate()"); + double azi,ele; + TIMEVALUE val(time); + IRA::CDateTime ctime(val,m_dut1); + baci::ThreadSyncGuard guard(&m_mutex); + BodyPosition(val); + m_source.process(ctime,m_site); + m_source.getApparentHorizontal(azi,ele); + az=azi; el=ele; + + + +} + +void SolarSystemBodyImpl::getAllCoordinates(ACS::Time time,CORBA::Double_out az,CORBA::Double_out el,CORBA::Double_out ra,CORBA::Double_out dec,CORBA::Double_out jepoch,CORBA::Double_out lon, + CORBA::Double_out lat) throw (CORBA::SystemException) +{ + + AUTO_TRACE("SolarSystemBodyImpl::getAllCoordinates()") + + TIMEVALUE val(time); + double azi,ele,rae,dece,lone,late,jepoche; + IRA::CDateTime ctime(val,m_dut1); + baci::ThreadSyncGuard guard(&m_mutex); + BodyPosition(val); + m_source.process(ctime,m_site); + m_source.getApparentHorizontal(azi,ele); + m_source.getApparentEquatorial(rae,dece,jepoche); + m_source.getApparentGalactic(lone,late); + az=azi; el=ele; + ra=rae; dec=dece; jepoch=jepoche; + lon=lone; lat=late; +} + + +bool SolarSystemBodyImpl::checkTracking(ACS::Time time,CORBA::Double az,CORBA::Double el,CORBA::Double HPBW) throw (CORBA::SystemException) +{ + AUTO_TRACE("SolarSystemBodyImpl::checkTracking()") + double computedAz,computedEl,azErr,elErr,skyErr; + TIMEVALUE val(time); + IRA::CDateTime refTime(val,m_dut1); + baci::ThreadSyncGuard guard(&m_mutex); // obtain access + m_source.process(refTime,m_site); + m_source.getApparentHorizontal(computedAz,computedEl); + elErr=computedEl-el; + azErr=(computedAz-az)*cos(el); + skyErr=sqrt(elErr*elErr+azErr*azErr); //total skyError + return skyErr<=HPBW*0.1; + +} + + +void SolarSystemBodyImpl::setBodyName(const char* bodyName) throw (CORBA::SystemException,AntennaErrors::AntennaErrorsEx) +{ + +/* +typedef enum { + MERCURY, + VENUS, + MARS, + JUPITER, + SATURN, + URANUS, + NEPTUNE, + PLUTO, + SUN, + MOON, + NOBJ // total number of basic objects +} PLCode; +*/ + + + AUTO_TRACE("SolarSystemBodyImpl::setBodyName()"); + m_bodyName=CString(bodyName); + m_bodyName.MakeUpper(); +// std::map plan; + + PLCode code; + + code=xephemlib::SolarSystemBody::getPlanetCodeFromName(bodyName); + CUSTOM_LOG(LM_FULL_INFO,"SolarSystemBodyImpl::setBodyName()", + (LM_INFO,"Solar System body name:%s",(const char *)m_bodyName)); + + + if (code!=NOBJ){ +// m_body_xephem = new xephemlib::SolarSystemBody(code); + try{ + m_body_xephem ->setObject(code); + } + + + catch (std::exception& e) + { + std::cout << e.what() << '\n'; + } + catch (...) + {std::cout << "except" << std::endl;} + + + + // std::cout << "Body name:" << bodyName < setTime(time_utc) ; + m_body_xephem->compute( m_sitex ); + // m_body_xephem->report(); + m_body_xephem->getCoordinates(ra,dec,az,el,range); + m_ra2000 = ra; + m_dec2000= dec; + m_distance=range; + m_source.setInputEquatorial(m_ra2000, m_dec2000, IRA::CSkySource::SS_J2000); + // IRA::CSkySource m_source; // dummy CSkySource onj for coordinate conversion + m_source.process(date,m_site); + m_source.getApparentEquatorial (ra,dec,eph); + m_source.getApparentHorizontal(az,el); + m_source.getApparentGalactic(lone,late); + m_source.apparentToHorizontal(date,m_site); + m_ra=ra; + m_dec=dec; + m_az=az; + m_el=el; + m_glon=lone; + m_glat=late; + + m_parallacticAngle=m_source.getParallacticAngle(); +} + +#include +MACI_DLL_SUPPORT_FUNCTIONS(SolarSystemBodyImpl) + + + diff --git a/Common/Servers/SolarSystem/src/libastrowrapper.cpp b/Common/Servers/SolarSystem/src/libastrowrapper.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e8f90406e09ea361981219c07d4531663f0b65de --- /dev/null +++ b/Common/Servers/SolarSystem/src/libastrowrapper.cpp @@ -0,0 +1,281 @@ +#include "libastrowrapper.h" + +namespace xephemlib { + + + +const char *planetnames[]={"Mercury","Venus","Mars","Jupiter","Saturn", + "Uranus","Neptune","Pluto","Sun","Moon","NOBJ"}; + + + + +Site::Site(double mj, double lon, double lt, double height) +{ + this->n_mjd=mj-15019.5; // xephem uses mjd 0 as 1899 12 31 at 12:00 + this->n_lat=lt; + this->n_lng=lon; + this->n_epoch=J2000; + // this->n_height=height; + +} + +Site::Site() + +{ + this->n_epoch=J2000; +} + +void Site::setCoordinate(double lon, double lt,double height) +{ + + this->n_lat=lt; + this->n_lng=lon; + // this->n_heigt=height; + +} + +void Site::setTime(double mj) +{ + + this->n_mjd=mj-15019.5; // xephem uses mjd 0 as 1899 12 31 at 12:00 + + + +} + + + + +void Site::stampa(void){ + + std::cout<< "mjd:"<< this->n_mjd <n_lng) << std::endl; + std::cout << "lat:"<< raddeg(this->n_lat) << std::endl; + + +} + +double Site::getMjd() +{ + + return this->n_mjd+15019.5; + +} + +SolarSystemBody::SolarSystemBody() +{ + obj=new Obj(); + + +}; + +void SolarSystemBody::setObject(PLCode code){ + + + +// obj=new Obj(); + _code=code; + + + // obj->any.co_type=PLANET; + strncpy(obj->any.co_name,planetnames[_code],10); +// obj-> + // pl.plo_code=code; +#ifdef DEBUG +// std::cout << "Code: " << code << std::endl; +// std::cout << "Name: " << planetnames[code] << std::endl; + // std::cout << "Name: " << obj->any.co_name << std::endl; +#endif + +// pref_set(PREF_EQUATORIAL,PREF_TOPO); + + // std::cout << "exit after pref_set: " << obj->any.co_name << std::endl; + +}; + +SolarSystemBody::SolarSystemBody(PLCode code) +{ + //obj=new Obj(); + + _code=code; + +// obj->any.co_type=PLANET; + // strncpy(obj->any.co_name,planetnames[_code],10); + // obj->pl.plo_code=code; +#ifdef DEBUG +// std::cout << "Code: " << code << std::endl; +// std::cout << "Name: " << planetnames[code] << std::endl; +// std::cout << "Name: " << obj->any.co_name << std::endl; +#endif + + // pref_set(PREF_EQUATORIAL,PREF_TOPO); + + + +} + +PLCode SolarSystemBody::getPlanetCodeFromName(std::string str) +{ + std::locale loc; + for (std::string::size_type i=0; i::iterator it=SolarSystemBody::planet.begin(); it!=SolarSystemBody::planet.end(); ++it) + { +#ifdef DEBUG + // std::cout << it->first << " => " << it->second << '\n'; +#endif + if (it->second == code) + name=it->first; + + } + + + + return name; + + + + +} + + +void SolarSystemBody::getCoordinates(double& ra, double& dec,double& az,double& el, double& range) +{ + ra=_ra; + dec=_dec; + az=_az; + el=_el; + range=_range; + + +}; + + +void SolarSystemBody::compute(Site* site){ + + Obj* obj=new Obj(); + + + + obj->any.co_type=PLANET; + strncpy(obj->any.co_name,planetnames[_code],10); + obj-> + pl.plo_code=_code; +#ifdef DEBUG +// std::cout << "Code: " << _code << std::endl; +// std::cout << "Name: " << planetnames[_code] << std::endl; +// std::cout << "Name: " << obj->any.co_name << std::endl; +#endif + pref_set(PREF_EQUATORIAL,PREF_TOPO); + + +// std::cout << "Compute " <any.co_ra; + _dec=obj->any.co_dec; + _az=obj->any.co_az; + _el=obj->any.co_alt; + _range=obj->anyss.so_edist; + delete obj; + +} + + +Obj* SolarSystemBody::getObject() +{ + return obj; + + +} + +void SolarSystemBody::report() +{ +/* Astrometric right ascension and declination of the target center with +respect to the observing site (coordinate origin) in the reference frame of +the planetary ephemeris (ICRF). Compensated for down-leg light-time delay +aberration.*/ + + + + std::cout << "Ra : " << _ra << std::endl; + std::cout << "Dec: " << _dec << std::endl; + std::cout << "Az : " << _az << std::endl; + std::cout << "El : " << _el << std::endl; + std::cout << "Range : " << _range << std::endl; + + + + +} + +std::mapSolarSystemBody::planet; //definition of static variable + + + bool createMap() // function to initialize static map +{ /* +typedef enum { + MERCURY, + VENUS, + MARS, + JUPITER, + SATURN, + URANUS, + NEPTUNE, + PLUTO, + SUN, + MOON, + NOBJ // total number of basic objects +} PLCode; +*/ + + SolarSystemBody::planet["MERCURY"]=MERCURY; + SolarSystemBody::planet["VENUS"]=VENUS ; + SolarSystemBody::planet["MARS"]=MARS ; + SolarSystemBody::planet["JUPITER"]=JUPITER; + SolarSystemBody::planet["SATURN"]=SATURN ; + SolarSystemBody::planet["URANUS"]=URANUS ; + SolarSystemBody::planet["NEPTUNE"]=NEPTUNE ; + SolarSystemBody::planet["PLUTO"]=PLUTO ; + SolarSystemBody::planet["SUN"]=SUN ; + SolarSystemBody::planet["MOON"]=MOON ; + SolarSystemBody::planet["NOBJ"]=NOBJ ; + return 0; +} + + +static bool _tmp=createMap(); // call to the function + +} + diff --git a/Common/Servers/SolarSystem/src/mainastro.cpp b/Common/Servers/SolarSystem/src/mainastro.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c25fbaa732bd9076c5d937b757fa046fa6f22f70 --- /dev/null +++ b/Common/Servers/SolarSystem/src/mainastro.cpp @@ -0,0 +1,22 @@ +#include "libastrowrapper.h" +#include +int main(int argc, char** argv) + +{ + + xephemlib::SolarSystemBody p = xephemlib::SolarSystemBody(MERCURY); + std::cout << "New SolarSystemBody done" << std::endl; + xephemlib::Site *site = new xephemlib::Site(); + site -> setCoordinate(degrad(9.5),degrad(39.5),600); + site -> setTime(59319.5) ; +// Site *site = new Site(59319.5,degrad(9.5),degrad(39.5),600); + + + p.compute(site); + p.report(); + std::cout < +#include + +class SolarSystemBodyTest : public ::testing::Test { + + + protected: + + + Site* site; + + SolarSystemBodyTest() + { + + } + + virtual void SetUp() { + + site = new Site(59393.5,degrad(9.5),degrad(39.5),600); + + } + + virtual void TearDown() { + } +}; + + + + + +// TEST_F(EphemTest,versionTest){ +// std::string toolkit_version; +// EXPECT_STREQ("CSPICE_N0065",solsys.spiceToolkitVersion().c_str()); +// +// } + + + +TEST_F(SolarSystemBodyTest,JupiterPosition){ + +// Site *site = new Site(59393.5,degrad(9.5),degrad(39.5),700); + + SolarSystemBody* p = new SolarSystemBody(JUPITER); + p->compute(this->site); + + EXPECT_NEAR( 334.167106906 ,raddeg(p->ra),2.7e-4); + EXPECT_NEAR( -11.764766054 ,raddeg(p->dec),2.7e-4); + EXPECT_NEAR( 4.39448666972074 ,p->range,2.7e-5); + + //334.16711 -11.76477 + + +} + +TEST_F(SolarSystemBodyTest,Sun){ + + Site *site = new Site(); + site -> setCoordinate(degrad(9.5),degrad(39.5),700); + site -> setTime(59393.5) + + + SolarSystemBody* p = new SolarSystemBody(SUN); + p->compute(site); + + EXPECT_NEAR( 96.800863628 ,raddeg(p->ra),2.7e-4); + EXPECT_NEAR( 23.287056282 ,raddeg(p->dec),2.7e-4); + EXPECT_NEAR( 1.01658809887528 ,p->range,2.7e-6); + + + + +} + + + +// Google Test can be run manually from the main() function +// or, it can be linked to the gtest_main library for an already +// set-up main() function primed to accept Google Test test cases. +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +} + +// Build command: g++ main.cpp -lgtest diff --git a/Common/Servers/SolarSystem/src/test_SolarSystemBody.py b/Common/Servers/SolarSystem/src/test_SolarSystemBody.py new file mode 100644 index 0000000000000000000000000000000000000000..4f5ef77a0383ad209c0a53f408cd8d70216d865f --- /dev/null +++ b/Common/Servers/SolarSystem/src/test_SolarSystemBody.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +#******************************************************************************* +# ALMA - Atacama Large Millimiter Array +# (c) Associated Universities Inc., 2002 +# (c) European Southern Observatory, 2002 +# Copyright by ESO (in the framework of the ALMA collaboration) +# and Cosylab 2002, All rights reserved +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# @(#) $Id: acspyexmplDynamicHelloWorld.py,v 1.10 2006/03/30 16:58:36 dfugate Exp $ + + +''' +DESCRIPTION +This client consists of an example which asks manager to create a dynamic +Hello World +component for it. This is done by changing some of the default parameters to the +getComponent method of the ContainerServices class. Once the reference to the newly +created component has been retrieved, a method is invoked to show that the +everything is working. + +WHAT CAN I GAIN FROM THIS EXAMPLE? +- PySimpleClient usage. +- Accessing (remote) components. +- Using PySimpleClient to create and reference dynamic components. +- Manipulating default parameters of ContainerServices methods. + +LINKS +- HelloWorld IDL Documentation +''' + +# Import command-line arguments +from sys import argv + +# Import the SimpleClient class +from Acspy.Clients.SimpleClient import PySimpleClient +import AntennaErrorsImpl +import AntennaErrors +import sys +import Antenna +from math import radians,degrees +from IRAPy import logger +import Acspy.Common.TimeHelper +import time +''' +Date__(UT)__HR:MN R.A.___(ICRF)___DEC R.A._(a-appar)_DEC. Azi____(a-app)___Elev +************************************************************************************** +2022-Jan-21 00:00:00.000 m 336.65825 -10.79656 336.94218 -10.68735 312.371754 -52.320793 + 2021-Apr-15 00:00 2459319.500000000 328.035447923 -13.662097629 327.791152902 -13.167532812 84.489404675 -27.482527702 5.49776328729022 -23.8801089 + 328.03548968344006, -13.662066250524141 + + 328.03548968344006, -13.66206625052414 +''' + + + +epoch = Acspy.Common.TimeHelper.TimeUtil() + +struct_time = time.strptime("2021-Apr-15 00:00", "%Y-%b-%d %H:%M") + +tm=time.mktime(struct_time) + + + +acstime=epoch.py2epoch(tm) + +print (acstime.value) +# Make an instance of the PySimpleClient +simpleClient = PySimpleClient() + +# Obtain a reference to a dynamic component using the ContainerServices +# getComponent method. +hwRef = simpleClient.getDynamicComponent(None, + "IDL:alma/Antenna/SolarSystemBody:1.0", + "SolarSystemBodyImpl",None) + +if hwRef != None: + simpleClient.getLogger().logInfo("Retrieved valid reference from manager.") + #Do something useful with the reference. + + try: + name='Neptuune' + hwRef.setBodyName(name) + except AntennaErrors.SourceNotFoundEx, ex: + newex=AntennaErrorsImpl.SourceNotFoundExImpl(ex) + logger.logError('source %s not found' % ex) + logger.logError(newex.log()) + simpleClient.disconnect() + sys.exit(-1) + except ValueError: + print('zzz') + sys.exit(-1) + sourceID = J2000RightAscension= J2000Declination= rightAscension= declination= julianEpoch= gLongitude= gLatitude= azimuth= elevation= parallacticAngle=0. + userAzimuthOffset=userElevationOffset= userRightAscensionOffset= userDeclinationOffset= userLongitudeOffset= userLatitudeOffset=axis=angularSize=0. + distance= radialVelocity= vradFrame= vradDefinition=0. +# hwRef.getAttributes(sourceID, J2000RightAscension, J2000Declination, rightAscension, declination, julianEpoch, gLongitude, gLatitude, azimuth, elevation, parallacticAngle, userAzimuthOffset, userElevationOffset, userRightAscensionOffset, +# userDeclinationOffset, userLongitudeOffset, userLatitudeOffset, axis, angularSize, distance, radialVelocity, vradFrame, vradDefinition) +#print(att) + +# az,el,ra,dec,l,lon,lat = hwRef.getAllCoordinates(acstime.value) + + ra,dec=hwRef.getJ2000EquatorialCoordinate(acstime.value) + +# print ("az,el",degrees(az),degrees(el)) + print ("ra,dec",degrees(ra),degrees(dec)) + att=hwRef.getAttributes() + dec2000=att.J2000Declination + ra2000=att.J2000RightAscension + print(degrees(ra2000),degrees(dec2000)) + simpleClient.getLogger().logInfo("Method of dynamic component successfully invoked. Have a nice day!") +else: + simpleClient.getLogger().logAlert("Bad reference retrieved from manager") + +simpleClient.disconnect() +print "The end __oOo__" + diff --git a/Common/Servers/SolarSystem/test/Makefile b/Common/Servers/SolarSystem/test/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0e616982f391f6d2b62b1331f94993eaebd0dfe6 --- /dev/null +++ b/Common/Servers/SolarSystem/test/Makefile @@ -0,0 +1,3 @@ +test: + python -m unittest discover -v + diff --git a/Common/Servers/SolarSystem/test/__init__.py b/Common/Servers/SolarSystem/test/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Common/Servers/SolarSystem/test/test_jupiter.py b/Common/Servers/SolarSystem/test/test_jupiter.py new file mode 100644 index 0000000000000000000000000000000000000000..1d6af1823bee19ce3831ce8938950bc0eedfe826 --- /dev/null +++ b/Common/Servers/SolarSystem/test/test_jupiter.py @@ -0,0 +1,54 @@ +import unittest +# Import command-line arguments +from sys import argv + +# Import the SimpleClient class +from Acspy.Clients.SimpleClient import PySimpleClient + +import Antenna +from math import radians,degrees + +import Acspy.Common.TimeHelper +import time + + +class JupiterPositionTest(unittest.TestCase): + def setUp(self): + epoch = Acspy.Common.TimeHelper.TimeUtil() + struct_time = time.strptime("2021-Apr-15 00:00", "%Y-%b-%d %H:%M") + tm=time.mktime(struct_time) + self.acstime=epoch.py2epoch(tm) + print(tm) + self.simpleClient = PySimpleClient() + self.hwRef = self.simpleClient.getDynamicComponent(None,"IDL:alma/Antenna/SolarSystemBody:1.0","SolarSystemBodyImpl",None) + self.hwRef.setBodyName('Jupiter') + + + + def test_equatorialJ2000(self): + ra,dec=self.hwRef.getJ2000EquatorialCoordinate(self.acstime.value) + time.sleep(1) + print(ra,dec) + + + self.assertAlmostEqual(degrees(ra), 328.035447280, places=4) + self.assertAlmostEqual(degrees(dec), -13.662097261, places=4) + + def test_equatorialApparent(self): + + az,el,ra,dec,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + self.assertAlmostEqual(degrees(ra), 328.315829715 , delta=1e-4) + self.assertAlmostEqual(degrees(dec), -13.564437853 , delta=1e-4) +# def test_horizontalApparent(self): +# az,el,ra,dec,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + self.assertAlmostEqual(degrees(az), 84.320777342 , delta=5e-4) + self.assertAlmostEqual(degrees(el), -28.325680692 , delta=5e-4) + + def tearDown(self): + print('closing') + self.simpleClient.disconnect() + +if __name__ == '__main__': + + unittest.main() + diff --git a/Common/Servers/SolarSystem/test/test_jupiter_distance.py b/Common/Servers/SolarSystem/test/test_jupiter_distance.py new file mode 100644 index 0000000000000000000000000000000000000000..25d7d943b571392b2e4dac657574d3e9063e3165 --- /dev/null +++ b/Common/Servers/SolarSystem/test/test_jupiter_distance.py @@ -0,0 +1,44 @@ +import unittest +# Import command-line arguments +from sys import argv + +# Import the SimpleClient class +from Acspy.Clients.SimpleClient import PySimpleClient + +import Antenna +from math import radians,degrees + +import Acspy.Common.TimeHelper +import time + + +class JupiterDistanceTest(unittest.TestCase): + def setUp(self): + epoch = Acspy.Common.TimeHelper.TimeUtil() + struct_time = time.strptime("2021-Apr-15 00:00", "%Y-%b-%d %H:%M") + tm=time.mktime(struct_time) + self.acstime=epoch.py2epoch(tm) + print(tm) + simpleClient = PySimpleClient() + self.hwRef = simpleClient.getDynamicComponent(None,"IDL:alma/Antenna/SolarSystemBody:1.0","SolarSystemBodyImpl",None) + self.hwRef.setBodyName('Jupiter') + + + + def test_jupiter_distance(self): + distance=self.hwRef.getDistance(self.acstime.value) + time.sleep(1) + + print('distance',distance) + + + self.assertAlmostEqual(distance, 5.49776341649024, delta=5e-5) + + + + + +if __name__ == '__main__': + + unittest.main() + diff --git a/Common/Servers/SolarSystem/test/test_offset.py b/Common/Servers/SolarSystem/test/test_offset.py new file mode 100644 index 0000000000000000000000000000000000000000..2815471c9fc3bebfc643ab3f8ba293be10bf456b --- /dev/null +++ b/Common/Servers/SolarSystem/test/test_offset.py @@ -0,0 +1,54 @@ +import unittest +# Import command-line arguments +from sys import argv + +# Import the SimpleClient class +from Acspy.Clients.SimpleClient import PySimpleClient + +import Antenna +from math import radians,degrees,cos + +import Acspy.Common.TimeHelper +import time + + +class SetOffsetTest(unittest.TestCase): + def setUp(self): + epoch = Acspy.Common.TimeHelper.TimeUtil() + struct_time = time.strptime("2021-Apr-15 00:00", "%Y-%b-%d %H:%M") + tm=time.mktime(struct_time) + self.acstime=epoch.py2epoch(tm) + print(tm) + simpleClient = PySimpleClient() + self.hwRef = simpleClient.getDynamicComponent(None,"IDL:alma/Antenna/SolarSystemBody:1.0","SolarSystemBodyImpl",None) + self.hwRef.setBodyName('Jupiter') + + + + + def test_equatorialOffset(self): + ra_ref=radians(328.315829715) + dec_ref=radians(-13.564437853) + ra_offs=radians(1) + dec_offs=radians(1) + + self.hwRef.setOffsets(ra_offs,dec_offs,Antenna.ANT_EQUATORIAL) + _,_,ra,dec,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + self.assertAlmostEqual(degrees(ra), degrees(ra_ref+ra_offs/cos(dec_ref+dec_offs)) , delta=1e-4) + self.assertAlmostEqual(degrees(dec), degrees(dec_ref+dec_offs) , delta=1e-4) + def test_horizontalOffset(self): + az_ref=radians(84.320777342) + el_ref=radians(-28.325680692 ) + az_offs=radians(1) + el_offs=radians(1) + self.hwRef.setOffsets(az_offs,el_offs,Antenna.ANT_HORIZONTAL) + az,el,_,_,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + self.assertAlmostEqual(degrees(az),degrees( az_ref+az_offs/cos(el_ref+el_offs)) , delta=5e-4) + self.assertAlmostEqual(degrees(el), degrees( el_ref+el_offs) , delta=5e-4) + + + +if __name__ == '__main__': + + unittest.main() + diff --git a/Common/Servers/SolarSystem/test/test_sun.py b/Common/Servers/SolarSystem/test/test_sun.py new file mode 100644 index 0000000000000000000000000000000000000000..abb7c833f09cb4dc16e518fa3bc34ea9370a88b8 --- /dev/null +++ b/Common/Servers/SolarSystem/test/test_sun.py @@ -0,0 +1,55 @@ +import unittest +# Import command-line arguments +from sys import argv + +# Import the SimpleClient class +from Acspy.Clients.SimpleClient import PySimpleClient + +import Antenna +from math import radians,degrees + +import Acspy.Common.TimeHelper +import time + + + +class SunPositionTest(unittest.TestCase): + def setUp(self): + epoch = Acspy.Common.TimeHelper.TimeUtil() + struct_time = time.strptime("2022-Jan-27 13:30", "%Y-%b-%d %H:%M") + tm=time.mktime(struct_time) + self.acstime=epoch.py2epoch(tm) + print(tm) + simpleClient = PySimpleClient() + self.hwRef = simpleClient.getDynamicComponent(None,"IDL:alma/Antenna/SolarSystemBody:1.0","SolarSystemBodyImpl",None) + self.hwRef.setBodyName('Sun') + + + + def test_equatorialJ2000(self): + ra,dec=self.hwRef.getJ2000EquatorialCoordinate(self.acstime.value) + time.sleep(1) + print(ra,dec) + + + self.assertAlmostEqual(degrees(ra), 309.681353589, delta=1e-4) + self.assertAlmostEqual(degrees(dec), -18.451737235, delta=1e-4) + + def test_equatorialApparent(self): + + az,el,ra,dec,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + print('type az',type(az)) + self.assertAlmostEqual(degrees(ra),309.986231168 , delta=1e-4) + self.assertAlmostEqual(degrees(dec),-18.376456126 , delta=1e-4) +# def test_horizontalApparent(self): +# az,el,ra,dec,l,lon,lat =self.hwRef.getAllCoordinates(self.acstime.value) + print ('az,el=',degrees(az),degrees(el)) + self.assertAlmostEqual(degrees(az), 210.403368369 , delta=5e-4) + self.assertAlmostEqual(degrees(el), 26.276295555 , delta=5e-4) + + + +if __name__ == '__main__': + + unittest.main() + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml index b731bc5f278daf3a47db7aefdc606f1714880e2c..bbe97f87218aa95d8c965208ed2e0a8b74dd8c33 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml index d431b18f6b0f02eceac39f08428002acb5942b0a..ee657b93e289fc20e3bc0df97d5454a02456f067 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml index baa2b0e943112c089c41f0dc9f6808298b9179fd..e7a13dad91adf29754eb665d5e1be106104a4006 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml index 87e72a6e096178f46aaf82131c4498ab5cca9126..43c71c39b7a9d5ab88aff85a21dd0d36325ec6ef 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml index 1a58647b4637ec07fbe54cb1ebec327aacadbebc..98d4e65e485b0d55bc4ac813bd04cdc124062d00 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml index 8109d4b9a2629ca93cd2305f924ec575f9315137..7b05fabe0dd006027f50ccbab9b7d3ed182f6bc1 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml index 890eed68d9e7e26867c2ee09bdde3d46b6d2ba5f..8335432c9154608d0055a056bbe0b1f4d1436ecb 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml index d5f96ee095b18ea605f8fe8b698941cb9c6d7bff..19ee8a30ddcb6bc73313f40b40cfe107ad89cca5 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml index 391b9704e8be075381090abfafbed5749687a275..39dfaf014de052ee660b7725c3bf8ba01068ae2d 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml index 87dd0151102f4af09c033de2f72696da6d15ce9e..203e82ba2112414c0a1b5a8ad7b4ba4aada56a53 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml index dd76e40df2d4550ca4cf04e6356cebc688a3c558..e7d0274524fd2666cf532d7d1f05c1747647977a 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml index a0616d64211a9cfb0e42b55b196523b364a85683..0f1f87771d413a9a8b8c1191991cfd3d0ef03418 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml index 956741b1d7a924b09a451d54a138cba128e790b0..853178ff1cf769d6fda32f6d01f47896e3232410 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml index e24bbd38d18e880b244716ff384d62efeb633dc5..937a69734a2db65e5b001e0567a5855e8d07ee0c 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml index f43bcfe8d19e711cb4b7fd47fd0afe134f1e15b9..1f21c92abc6b51f1395dc0997e6c8cbda6db3b53 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml index aa56f71c90351da01f1b2c09400c1edd1b30dba7..ed0f1c2087e81333c263ef25e36ff75857978168 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml index 2cacfccbb36bdef0b94cd0523e064978971e7894..a81d3a2782f02c622785bd569ed9086719c6b984 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml index e1fa8d036546df814e9e1e8ffad0cf89ae0bd497..1796ff38d36c0105c9bf90af69e81784e50538d7 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml index f6d0a4f64f45cb58b96b376ee5257fe24f407d6f..56affd4116ea3ad894212838d5cb01c9f2dce64a 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml index 104be2efe8c088edce5dead4a9f1159a8093fbde..a08378c74e409ec5e4ced9c035c5a574f72913a0 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml index 4dc436b3512fa1a2ebfaec800a7c290e280fd50c..8d88f2866ce65c225165941970fb1cd78939fa90 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml index c544bb661360565cd505581785bd365152c5b9f8..30b69e09717ef1d4c9f011ea07735adddced7cf1 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml index 6f4663cb466e951b55f84cacb7e4567c322fbbc8..98e722282e3848819e7a590abd814b7f13eee055 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml index 54f04d1e67cd39e0efaea8c8cad1b5f38e908978..28ddc74b238aa60065919292c5e67e66edc8c7e3 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml index 8cc2514a7f3226062cde47d94357e2e79ed2dd79..8fda36ea5ffdf0448552a63f74c3bd4b09927ba3 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml index 2930fd5495c85741b801bdcfd07e7b89b5b38b88..82cbb8b87b03796162646ff41190f4f42adb79af 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml index dec50ed50f574cf8036075cb36bbbb2c1adb7223..1ded634d5692fe6e50c92ebde3c7f807c553f6c9 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml index 2b7de7b3ee08c1ee4157ce3c8a58d9cf3eca2eb8..71a15facb77b3069041118a2dee022491ea27fc2 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml index 2b73886486035c77780a0b1edf0394e6dd507550..e781a84a912b372d8416564cc795bdb06671ad7c 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml index e5d2ec2f64e725304566fc1eab675425976ad07e..9498f04152b1570379218774d0eca8f3e3b3ec22 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml index 19ea4d0eaeb307cfc8b88294de1e3067d00b8524..bffcb99a366ef4070254259a1b6a06010659d027 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml index 7d473ed930c1e685095077cf428266b0c3651a1e..a9c92f964372eeab34524a33d8914b57345c3521 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml index 091eab441a42deb30b1c2e529aef9123b143b9df..1d4e0a1d4e62e92b80078e0947461ab243afb2e4 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml index 8849be343700805853ea8bf5658d6743784756a0..740115c05c0f263f6d2f56362fcc0f28fa46ac37 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml index 64f8ff2fb58f17ce90b8059f40d1a12d33c7324f..d361fefa6eac01c0c7972d39e7346632c6ff1d00 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml index 6f12e020f2d32014b21fe9fbdbd93e0456810fe4..00de5dd7bfa75ab1ff7abb619c0611581f6a37b8 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml index 1c80c6513fe4a73f53e5cda073660c4ce297e397..df5dc602bd1650f2b6227bc6dec2ad456f054793 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml index 3a726ace179f6aea921e52a1efaf543650633c22..d1107a5acbf7a4a3bb0786b905d3723034d42e01 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml index 8970cfae2c99a62a1abbe0af4df72421e97dd804..11a3dde612f3a3743b74f4e45e3ee3750f331787 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml index c5d8eb7b514d42cdc39c2c9db833dcf4a745d519..1041a83ae01b4f4a941157b9d742ec19fa0a5486 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml index aff7ae2c1cf4b4acd56ce4e95fc7e280fdaa42b4..3011f8e99f8b2cd63e820de327ddd3f3cdde15ec 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml index 88763b92a86e539e82c6f5cbf238f02c8a48dbfd..43b42d3a50c1f7b068b08f8ab245b0f70688e386 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml index 560436cc0d657aef0a6660116bb55700b3fc9978..8268c02cb43df1abf534340d4c63becd3d767d45 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml index 60e4181b678d561987f90158e42423fcec5c0cb0..8374e04d3fe27377c32f69fd6ac489bc8367e256 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml index 823f6d8f6fcc79f1ac18f4925268c9c91fbbdff6..a1106f3a3365f231c7da01b29baa18702cea2728 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml index 1a3f3c0ba44aa0e62a7c94ccd40c574613013b8c..e5358b3661f6f70cab55689375f4781521aad0f8 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml index 91b5036859d0d862bbc15010448b965eb159fcc9..4f25815dede79d4d31b4e7e164593088f37c7926 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml index 13e8c99919f830bd84622022deada1f2af86ff0f..2ca8a2c8dc5d01eb4fef55231ad88b4904f59f84 100644 --- a/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml +++ b/Medicina/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml b/Medicina/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml index 8dfd82ea8996f95f3e719def3d138252740cd2e3..749ef249b945a040e9d21d55c2fa3d230c6bfa89 100644 --- a/Medicina/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml +++ b/Medicina/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml @@ -11,7 +11,7 @@ ServerThreads="5"> - + - + - + - + - + - + - \ No newline at end of file + diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/include/MedicinaActiveSurfaceGUI.h b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/include/MedicinaActiveSurfaceGUI.h index 577e6de9e7d40c13a670fbbbdb187bb40229f45f..8968f6099018084b3d90b2deecc3c485524d060f 100644 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/include/MedicinaActiveSurfaceGUI.h +++ b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/include/MedicinaActiveSurfaceGUI.h @@ -1,10 +1,9 @@ /******************************************************************************** -** Form generated from reading ui file 'MedicinaActiveSurfaceGUI.ui' +** Form generated from reading UI file 'MedicinaActiveSurfaceGUI.ui' ** -** Created: Wed Dec 7 09:22:24 2022 -** by: Qt User Interface Compiler version 4.5.2 +** Created by: Qt User Interface Compiler version 4.8.7 ** -** WARNING! All changes made in this file will be lost when recompiling ui file! +** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ #ifndef MEDICINAACTIVESURFACEGUI_H @@ -17675,9 +17674,6 @@ public: buttonGroup1->setEnabled(false); buttonGroup1->setGeometry(QRect(970, 448, 288, 291)); CalibrateButton = new QPushButton(buttonGroup1); - QButtonGroup *buttonGroup = new QButtonGroup(MedicinaActiveSurfaceGUI); - buttonGroup->setObjectName(QString::fromUtf8("buttonGroup")); - buttonGroup->addButton(CalibrateButton); CalibrateButton->setObjectName(QString::fromUtf8("CalibrateButton")); CalibrateButton->setGeometry(QRect(192, 45, 90, 35)); QPalette palette321; @@ -17731,7 +17727,6 @@ public: palette321.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); CalibrateButton->setPalette(palette321); StopButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(StopButton); StopButton->setObjectName(QString::fromUtf8("StopButton")); StopButton->setGeometry(QRect(4, 5, 90, 35)); QPalette palette322; @@ -17785,7 +17780,6 @@ public: palette322.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); StopButton->setPalette(palette322); ResetButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(ResetButton); ResetButton->setObjectName(QString::fromUtf8("ResetButton")); ResetButton->setGeometry(QRect(98, 5, 90, 35)); QPalette palette323; @@ -17839,7 +17833,6 @@ public: palette323.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); ResetButton->setPalette(palette323); RefPosButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(RefPosButton); RefPosButton->setObjectName(QString::fromUtf8("RefPosButton")); RefPosButton->setGeometry(QRect(4, 45, 90, 35)); QPalette palette324; @@ -17893,7 +17886,6 @@ public: palette324.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); RefPosButton->setPalette(palette324); TopButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(TopButton); TopButton->setObjectName(QString::fromUtf8("TopButton")); TopButton->setGeometry(QRect(5, 125, 90, 35)); QPalette palette325; @@ -17947,7 +17939,6 @@ public: palette325.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); TopButton->setPalette(palette325); StowButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(StowButton); StowButton->setObjectName(QString::fromUtf8("StowButton")); StowButton->setGeometry(QRect(98, 45, 90, 35)); QPalette palette326; @@ -18001,7 +17992,6 @@ public: palette326.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); StowButton->setPalette(palette326); BottomButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(BottomButton); BottomButton->setObjectName(QString::fromUtf8("BottomButton")); BottomButton->setGeometry(QRect(98, 125, 90, 35)); QPalette palette327; @@ -18055,7 +18045,6 @@ public: palette327.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); BottomButton->setPalette(palette327); SetupButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(SetupButton); SetupButton->setObjectName(QString::fromUtf8("SetupButton")); SetupButton->setGeometry(QRect(192, 5, 90, 35)); QPalette palette328; @@ -18109,7 +18098,6 @@ public: palette328.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); SetupButton->setPalette(palette328); DownButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(DownButton); DownButton->setObjectName(QString::fromUtf8("DownButton")); DownButton->setGeometry(QRect(98, 85, 90, 35)); QPalette palette329; @@ -18163,7 +18151,6 @@ public: palette329.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); DownButton->setPalette(palette329); UpButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(UpButton); UpButton->setObjectName(QString::fromUtf8("UpButton")); UpButton->setGeometry(QRect(4, 85, 90, 35)); QPalette palette330; @@ -18217,7 +18204,6 @@ public: palette330.setBrush(QPalette::Disabled, QPalette::LinkVisited, brush10); UpButton->setPalette(palette330); MoveButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(MoveButton); MoveButton->setObjectName(QString::fromUtf8("MoveButton")); MoveButton->setGeometry(QRect(5, 165, 90, 35)); QPalette palette331; @@ -18279,7 +18265,6 @@ public: ActuatorMovelineEdit->setAlignment(Qt::AlignRight); ActuatorMovelineEdit->setReadOnly(false); CorrectionButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(CorrectionButton); CorrectionButton->setObjectName(QString::fromUtf8("CorrectionButton")); CorrectionButton->setGeometry(QRect(5, 205, 90, 35)); QPalette palette332; @@ -18339,7 +18324,6 @@ public: ActuatorCorrectionlineEdit->setAlignment(Qt::AlignRight); ActuatorCorrectionlineEdit->setReadOnly(false); UpdateButton = new QPushButton(buttonGroup1); - buttonGroup->addButton(UpdateButton); UpdateButton->setObjectName(QString::fromUtf8("UpdateButton")); UpdateButton->setGeometry(QRect(5, 245, 90, 35)); QPalette palette333; @@ -20676,7 +20660,6 @@ public: StatuslineEdit_2->setText(QString()); StatuslineEdit->setStyleSheet(QApplication::translate("MedicinaActiveSurfaceGUI", "background-color: rgb(0, 85, 255);", 0, QApplication::UnicodeUTF8)); StatuslineEdit->setText(QApplication::translate("MedicinaActiveSurfaceGUI", "STATUS", 0, QApplication::UnicodeUTF8)); - Q_UNUSED(MedicinaActiveSurfaceGUI); } // retranslateUi }; diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/Makefile b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/Makefile index f283919ff59f30c19cd7e511746de7c37ff6929f..0654fb0dca21ab264806be51990367ecc21efe57 100644 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/Makefile +++ b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/Makefile @@ -134,9 +134,9 @@ QT_COMPILE_FILES = $(subst .cpp,,$(QT_UI_FILES_MOC) $(QT_UI_FILES_EXTERN_MOC_H) # # -MedicinaActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) MedicinaActiveSurfaceGUIui MedicinaActiveSurfaceCore MedicinaActiveSurfaceClientEventLoop MedicinaActiveSurfaceGUIClient +MedicinaActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) MedicinaActiveSurfaceGUIui MedicinaActiveSurfaceCore MedicinaActiveSurfaceClientEventLoop MedicinaActiveSurfaceGUIClient MedicinaActiveSurfaceGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs MedicinaActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs -MedicinaActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) MedicinaActiveSurfaceManagementGUIui MedicinaActiveSurfaceCore MedicinaActiveSurfaceClientEventLoop MedicinaActiveSurfaceGUIClient +MedicinaActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) MedicinaActiveSurfaceGUIui MedicinaActiveSurfaceCore MedicinaActiveSurfaceClientEventLoop MedicinaActiveSurfaceGUIClient MedicinaActiveSurfaceManagementGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs MedicinaActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs $(PROG)_OBJECTS = $(PROG) diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceGUI.ui b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceGUI.ui index 13d9fe7fd0087ba81fab7d2110a2cfd9fa343f3e..3ffe3444d687fa08c22eb78b8b21baf191e345ef 100755 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceGUI.ui +++ b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceGUI.ui @@ -149211,9 +149211,6 @@ Calibration - - - @@ -149675,9 +149672,6 @@ Stop - - - @@ -150139,9 +150133,6 @@ Reset - - - @@ -150603,9 +150594,6 @@ RefPos - - - @@ -151067,9 +151055,6 @@ Top - - - @@ -151531,9 +151516,6 @@ Stow - - - @@ -151995,9 +151977,6 @@ Bottom - - - @@ -152459,9 +152438,6 @@ Setup - - - @@ -152923,9 +152899,6 @@ Down - - - @@ -153387,9 +153360,6 @@ Up - - - @@ -153851,9 +153821,6 @@ Move - - - @@ -154336,9 +154303,6 @@ Correction - - - @@ -154821,9 +154785,6 @@ Update - - - diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceManagementGUIui.cpp b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceManagementGUIui.cpp deleted file mode 120000 index 59e99f14ec17bacf4c478e1dcdddc4dde63cf524..0000000000000000000000000000000000000000 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/MedicinaActiveSurfaceManagementGUIui.cpp +++ /dev/null @@ -1 +0,0 @@ -MedicinaActiveSurfaceGUIui.cpp \ No newline at end of file diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceCore.cpp b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceCore.cpp index 3783a3dd1a4611ca1b3c6b95090eee7a07742ffc..007c3f222a19b08c2a3a7967aa516c527d67e245 100644 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceCore.cpp +++ b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceCore.cpp @@ -1,8 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'MedicinaActiveSurfaceCore.h' ** -** Created: Wed Dec 7 14:02:43 2022 -** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) +** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.7) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -10,8 +9,8 @@ #include "../include/MedicinaActiveSurfaceCore.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'MedicinaActiveSurfaceCore.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 61 -#error "This file was generated using the moc from 4.5.2. It" +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.7. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -20,13 +19,15 @@ QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_MedicinaActiveSurfaceCore[] = { // content: - 2, // revision + 6, // revision 0, // classname 0, 0, // classinfo - 12, 12, // methods + 12, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors + 0, // flags + 12, // signalCount // signals: signature, parameters, type, tag, flags 35, 31, 27, 26, 0x05, @@ -58,14 +59,57 @@ static const char qt_meta_stringdata_MedicinaActiveSurfaceCore[] = { "setGUIasProfileCode(int)\0" }; +void MedicinaActiveSurfaceCore::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + MedicinaActiveSurfaceCore *_t = static_cast(_o); + switch (_id) { + case 0: { int _r = _t->setGUIActuatorColor((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< bool(*)>(_a[3])),(*reinterpret_cast< bool(*)>(_a[4]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 1: { int _r = _t->setGUIAllActuators((*reinterpret_cast< bool(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 2: { int _r = _t->setGUIAllActuators(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 3: { int _r = _t->setGUIcircleORradius((*reinterpret_cast< bool(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 4: { int _r = _t->setGUIcircleORradius(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 5: { int _r = _t->setGUIActuator((*reinterpret_cast< bool(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 6: { int _r = _t->setGUIActuator(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 7: { int _r = _t->setGUIActuatorStatusEnblLabel(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 8: { int _r = _t->setGUIActuatorValues(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 9: { int _r = _t->setGUIActuatorStatusLabels(); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 10: { int _r = _t->setGUIasStatusCode((*reinterpret_cast< int(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + case 11: { int _r = _t->setGUIasProfileCode((*reinterpret_cast< int(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; + default: ; + } + } +} + +const QMetaObjectExtraData MedicinaActiveSurfaceCore::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + const QMetaObject MedicinaActiveSurfaceCore::staticMetaObject = { { &QThread::staticMetaObject, qt_meta_stringdata_MedicinaActiveSurfaceCore, - qt_meta_data_MedicinaActiveSurfaceCore, 0 } + qt_meta_data_MedicinaActiveSurfaceCore, &staticMetaObjectExtraData } }; +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &MedicinaActiveSurfaceCore::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + const QMetaObject *MedicinaActiveSurfaceCore::metaObject() const { - return &staticMetaObject; + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *MedicinaActiveSurfaceCore::qt_metacast(const char *_clname) @@ -82,33 +126,8 @@ int MedicinaActiveSurfaceCore::qt_metacall(QMetaObject::Call _c, int _id, void * if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { - switch (_id) { - case 0: { int _r = setGUIActuatorColor((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< bool(*)>(_a[3])),(*reinterpret_cast< bool(*)>(_a[4]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 1: { int _r = setGUIAllActuators((*reinterpret_cast< bool(*)>(_a[1]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 2: { int _r = setGUIAllActuators(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 3: { int _r = setGUIcircleORradius((*reinterpret_cast< bool(*)>(_a[1]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 4: { int _r = setGUIcircleORradius(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 5: { int _r = setGUIActuator((*reinterpret_cast< bool(*)>(_a[1]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 6: { int _r = setGUIActuator(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 7: { int _r = setGUIActuatorStatusEnblLabel(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 8: { int _r = setGUIActuatorValues(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 9: { int _r = setGUIActuatorStatusLabels(); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 10: { int _r = setGUIasStatusCode((*reinterpret_cast< int(*)>(_a[1]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - case 11: { int _r = setGUIasProfileCode((*reinterpret_cast< int(*)>(_a[1]))); - if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; - default: ; - } + if (_id < 12) + qt_static_metacall(this, _c, _id, _a); _id -= 12; } return _id; @@ -128,7 +147,7 @@ int MedicinaActiveSurfaceCore::setGUIAllActuators(bool _t1) { int _t0; void *_a[] = { const_cast(reinterpret_cast(&_t0)), const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 1, 2, _a); + QMetaObject::activate(this, &staticMetaObject, 1, _a); return _t0; } @@ -137,7 +156,7 @@ int MedicinaActiveSurfaceCore::setGUIcircleORradius(bool _t1) { int _t0; void *_a[] = { const_cast(reinterpret_cast(&_t0)), const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 3, 4, _a); + QMetaObject::activate(this, &staticMetaObject, 3, _a); return _t0; } @@ -146,7 +165,7 @@ int MedicinaActiveSurfaceCore::setGUIActuator(bool _t1) { int _t0; void *_a[] = { const_cast(reinterpret_cast(&_t0)), const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 5, 6, _a); + QMetaObject::activate(this, &staticMetaObject, 5, _a); return _t0; } diff --git a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceGUIui.cpp b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceGUIui.cpp index 3652a8c536a542afba84040795a28c1fc2b77bba..02756b88f7c053e4a009d07183d906366c026977 100644 --- a/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceGUIui.cpp +++ b/Medicina/Clients/MedicinaActiveSurfaceGUIClient/src/moc_MedicinaActiveSurfaceGUIui.cpp @@ -1,8 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'MedicinaActiveSurfaceGUIui.h' ** -** Created: Wed Dec 7 14:02:43 2022 -** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) +** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.7) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -10,8 +9,8 @@ #include "../include/MedicinaActiveSurfaceGUIui.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'MedicinaActiveSurfaceGUIui.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 61 -#error "This file was generated using the moc from 4.5.2. It" +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.7. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -20,13 +19,15 @@ QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_MedicinaActiveSurfaceGUI[] = { // content: - 2, // revision + 6, // revision 0, // classname 0, 0, // classinfo - 36, 12, // methods + 36, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors + 0, // flags + 0, // signalCount // slots: signature, parameters, type, tag, flags 26, 25, 25, 25, 0x0a, @@ -91,14 +92,69 @@ static const char qt_meta_stringdata_MedicinaActiveSurfaceGUI[] = { "changeGUIasProfileCode(int)\0" }; +void MedicinaActiveSurfaceGUI::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + MedicinaActiveSurfaceGUI *_t = static_cast(_o); + switch (_id) { + case 0: _t->Quit(); break; + case 1: _t->move(); break; + case 2: _t->correction(); break; + case 3: _t->update(); break; + case 4: _t->reset(); break; + case 5: _t->stop(); break; + case 6: _t->up(); break; + case 7: _t->down(); break; + case 8: _t->top(); break; + case 9: _t->bottom(); break; + case 10: _t->calibrate(); break; + case 11: _t->calVer(); break; + case 12: _t->stow(); break; + case 13: _t->setup(); break; + case 14: _t->refPos(); break; + case 15: _t->recoverUSD(); break; + case 16: _t->setupAS(); break; + case 17: _t->startAS(); break; + case 18: _t->stowAS(); break; + case 19: _t->stopAS(); break; + case 20: _t->setallactuators(); break; + case 21: _t->setradius(); break; + case 22: _t->setcircle(); break; + case 23: _t->setactuator(); break; + case 24: _t->changeGUIActuatorColor((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< bool(*)>(_a[3])),(*reinterpret_cast< bool(*)>(_a[4]))); break; + case 25: _t->changeGUIAllActuators((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 26: _t->changeGUIAllActuators(); break; + case 27: _t->changeGUIcircleORradius((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 28: _t->changeGUIcircleORradius(); break; + case 29: _t->changeGUIActuator((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 30: _t->changeGUIActuator(); break; + case 31: _t->changeGUIActuatorStatusEnblLabel(); break; + case 32: _t->changeGUIActuatorValues(); break; + case 33: _t->changeGUIActuatorStatusLabels(); break; + case 34: _t->changeGUIasStatusCode((*reinterpret_cast< int(*)>(_a[1]))); break; + case 35: _t->changeGUIasProfileCode((*reinterpret_cast< int(*)>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObjectExtraData MedicinaActiveSurfaceGUI::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + const QMetaObject MedicinaActiveSurfaceGUI::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_MedicinaActiveSurfaceGUI, - qt_meta_data_MedicinaActiveSurfaceGUI, 0 } + qt_meta_data_MedicinaActiveSurfaceGUI, &staticMetaObjectExtraData } }; +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &MedicinaActiveSurfaceGUI::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + const QMetaObject *MedicinaActiveSurfaceGUI::metaObject() const { - return &staticMetaObject; + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *MedicinaActiveSurfaceGUI::qt_metacast(const char *_clname) @@ -117,45 +173,8 @@ int MedicinaActiveSurfaceGUI::qt_metacall(QMetaObject::Call _c, int _id, void ** if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { - switch (_id) { - case 0: Quit(); break; - case 1: move(); break; - case 2: correction(); break; - case 3: update(); break; - case 4: reset(); break; - case 5: stop(); break; - case 6: up(); break; - case 7: down(); break; - case 8: top(); break; - case 9: bottom(); break; - case 10: calibrate(); break; - case 11: calVer(); break; - case 12: stow(); break; - case 13: setup(); break; - case 14: refPos(); break; - case 15: recoverUSD(); break; - case 16: setupAS(); break; - case 17: startAS(); break; - case 18: stowAS(); break; - case 19: stopAS(); break; - case 20: setallactuators(); break; - case 21: setradius(); break; - case 22: setcircle(); break; - case 23: setactuator(); break; - case 24: changeGUIActuatorColor((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< bool(*)>(_a[3])),(*reinterpret_cast< bool(*)>(_a[4]))); break; - case 25: changeGUIAllActuators((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 26: changeGUIAllActuators(); break; - case 27: changeGUIcircleORradius((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 28: changeGUIcircleORradius(); break; - case 29: changeGUIActuator((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 30: changeGUIActuator(); break; - case 31: changeGUIActuatorStatusEnblLabel(); break; - case 32: changeGUIActuatorValues(); break; - case 33: changeGUIActuatorStatusLabels(); break; - case 34: changeGUIasStatusCode((*reinterpret_cast< int(*)>(_a[1]))); break; - case 35: changeGUIasProfileCode((*reinterpret_cast< int(*)>(_a[1]))); break; - default: ; - } + if (_id < 36) + qt_static_metacall(this, _c, _id, _a); _id -= 36; } return _id; diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml index b731bc5f278daf3a47db7aefdc606f1714880e2c..bbe97f87218aa95d8c965208ed2e0a8b74dd8c33 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml index d431b18f6b0f02eceac39f08428002acb5942b0a..ee657b93e289fc20e3bc0df97d5454a02456f067 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml index baa2b0e943112c089c41f0dc9f6808298b9179fd..e7a13dad91adf29754eb665d5e1be106104a4006 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml index 87e72a6e096178f46aaf82131c4498ab5cca9126..43c71c39b7a9d5ab88aff85a21dd0d36325ec6ef 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml index 1a58647b4637ec07fbe54cb1ebec327aacadbebc..98d4e65e485b0d55bc4ac813bd04cdc124062d00 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml index 8109d4b9a2629ca93cd2305f924ec575f9315137..7b05fabe0dd006027f50ccbab9b7d3ed182f6bc1 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml index 890eed68d9e7e26867c2ee09bdde3d46b6d2ba5f..8335432c9154608d0055a056bbe0b1f4d1436ecb 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml index d5f96ee095b18ea605f8fe8b698941cb9c6d7bff..19ee8a30ddcb6bc73313f40b40cfe107ad89cca5 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml index 391b9704e8be075381090abfafbed5749687a275..39dfaf014de052ee660b7725c3bf8ba01068ae2d 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml index 87dd0151102f4af09c033de2f72696da6d15ce9e..203e82ba2112414c0a1b5a8ad7b4ba4aada56a53 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml index dd76e40df2d4550ca4cf04e6356cebc688a3c558..e7d0274524fd2666cf532d7d1f05c1747647977a 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml index a0616d64211a9cfb0e42b55b196523b364a85683..0f1f87771d413a9a8b8c1191991cfd3d0ef03418 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR01/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml index 1ffef9e34c0aacad5b37a79c973095016fbd970b..4bdf9f7557a5738141a167e3d824a6d5ea52b8f8 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml index ffa584111d689aa04ab31dacbe1c54ba2c9a935a..1556f12e89bd8e800b15400b787be4cc28a722ea 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer01" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml index f43bcfe8d19e711cb4b7fd47fd0afe134f1e15b9..1f21c92abc6b51f1395dc0997e6c8cbda6db3b53 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml index aa56f71c90351da01f1b2c09400c1edd1b30dba7..ed0f1c2087e81333c263ef25e36ff75857978168 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml index 2cacfccbb36bdef0b94cd0523e064978971e7894..a81d3a2782f02c622785bd569ed9086719c6b984 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml index e1fa8d036546df814e9e1e8ffad0cf89ae0bd497..1796ff38d36c0105c9bf90af69e81784e50538d7 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml index f6d0a4f64f45cb58b96b376ee5257fe24f407d6f..56affd4116ea3ad894212838d5cb01c9f2dce64a 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml index 104be2efe8c088edce5dead4a9f1159a8093fbde..a08378c74e409ec5e4ced9c035c5a574f72913a0 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml index 4dc436b3512fa1a2ebfaec800a7c290e280fd50c..8d88f2866ce65c225165941970fb1cd78939fa90 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml index c544bb661360565cd505581785bd365152c5b9f8..30b69e09717ef1d4c9f011ea07735adddced7cf1 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml index 6f4663cb466e951b55f84cacb7e4567c322fbbc8..98e722282e3848819e7a590abd814b7f13eee055 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml index 54f04d1e67cd39e0efaea8c8cad1b5f38e908978..28ddc74b238aa60065919292c5e67e66edc8c7e3 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR02/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer02" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml index 8cc2514a7f3226062cde47d94357e2e79ed2dd79..8fda36ea5ffdf0448552a63f74c3bd4b09927ba3 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml index 2930fd5495c85741b801bdcfd07e7b89b5b38b88..82cbb8b87b03796162646ff41190f4f42adb79af 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml index dec50ed50f574cf8036075cb36bbbb2c1adb7223..1ded634d5692fe6e50c92ebde3c7f807c553f6c9 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml index 2b7de7b3ee08c1ee4157ce3c8a58d9cf3eca2eb8..71a15facb77b3069041118a2dee022491ea27fc2 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml index 2b73886486035c77780a0b1edf0394e6dd507550..e781a84a912b372d8416564cc795bdb06671ad7c 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml index e5d2ec2f64e725304566fc1eab675425976ad07e..9498f04152b1570379218774d0eca8f3e3b3ec22 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml index 19ea4d0eaeb307cfc8b88294de1e3067d00b8524..bffcb99a366ef4070254259a1b6a06010659d027 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml index 7d473ed930c1e685095077cf428266b0c3651a1e..a9c92f964372eeab34524a33d8914b57345c3521 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml index 091eab441a42deb30b1c2e529aef9123b143b9df..1d4e0a1d4e62e92b80078e0947461ab243afb2e4 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml index 8849be343700805853ea8bf5658d6743784756a0..740115c05c0f263f6d2f56362fcc0f28fa46ac37 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml index 64f8ff2fb58f17ce90b8059f40d1a12d33c7324f..d361fefa6eac01c0c7972d39e7346632c6ff1d00 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml index 6f12e020f2d32014b21fe9fbdbd93e0456810fe4..00de5dd7bfa75ab1ff7abb619c0611581f6a37b8 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR03/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer03" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml index 1c80c6513fe4a73f53e5cda073660c4ce297e397..df5dc602bd1650f2b6227bc6dec2ad456f054793 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN01/LAN01.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN01" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml index 3a726ace179f6aea921e52a1efaf543650633c22..d1107a5acbf7a4a3bb0786b905d3723034d42e01 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN02/LAN02.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN02" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml index 8970cfae2c99a62a1abbe0af4df72421e97dd804..11a3dde612f3a3743b74f4e45e3ee3750f331787 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN03/LAN03.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN03" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml index c5d8eb7b514d42cdc39c2c9db833dcf4a745d519..1041a83ae01b4f4a941157b9d742ec19fa0a5486 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN04/LAN04.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN04" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml index aff7ae2c1cf4b4acd56ce4e95fc7e280fdaa42b4..3011f8e99f8b2cd63e820de327ddd3f3cdde15ec 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN05/LAN05.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN05" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml index 88763b92a86e539e82c6f5cbf238f02c8a48dbfd..43b42d3a50c1f7b068b08f8ab245b0f70688e386 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN06/LAN06.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN06" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml index 560436cc0d657aef0a6660116bb55700b3fc9978..8268c02cb43df1abf534340d4c63becd3d767d45 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN07/LAN07.xml @@ -4,12 +4,12 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN07" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD07" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml index 60e4181b678d561987f90158e42423fcec5c0cb0..8374e04d3fe27377c32f69fd6ac489bc8367e256 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN08/LAN08.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN08" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml index 823f6d8f6fcc79f1ac18f4925268c9c91fbbdff6..a1106f3a3365f231c7da01b29baa18702cea2728 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN09/LAN09.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN09" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml index 1a3f3c0ba44aa0e62a7c94ccd40c574613013b8c..e5358b3661f6f70cab55689375f4781521aad0f8 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN10/LAN10.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN10" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml index 91b5036859d0d862bbc15010448b965eb159fcc9..4f25815dede79d4d31b4e7e164593088f37c7926 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN11/LAN11.xml @@ -4,11 +4,11 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN11" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD01" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml index 13e8c99919f830bd84622022deada1f2af86ff0f..2ca8a2c8dc5d01eb4fef55231ad88b4904f59f84 100644 --- a/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml +++ b/Medicina/Configuration/CDB/MACI/Components/AS/SECTOR04/LAN12/LAN12.xml @@ -4,10 +4,10 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="LAN12" Code="lanImpl" Type="IDL:alma/ActiveSurface/lan:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"> - <_ Name="USD02" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD03" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD04" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD05" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> - <_ Name="USD06" Code="ActiveSurfaceUSDImpl" Type="IDL:alma/ActiveSurface/USD:1.0" Container="MedicinaActiveSurfaceContainer04" ImplLang="cpp"/> + + + + + diff --git a/Medicina/Configuration/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml b/Medicina/Configuration/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml index 8dfd82ea8996f95f3e719def3d138252740cd2e3..749ef249b945a040e9d21d55c2fa3d230c6bfa89 100644 --- a/Medicina/Configuration/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml +++ b/Medicina/Configuration/CDB/MACI/Containers/MedicinaActiveSurfaceContainer/MedicinaActiveSurfaceContainer.xml @@ -11,7 +11,7 @@ ServerThreads="5"> - + - + - + - + - + diff --git a/Noto/Clients/NotoActiveSurfaceGUIClient/src/Makefile b/Noto/Clients/NotoActiveSurfaceGUIClient/src/Makefile index 5e9a26bd3fa944f67fb53e403aa6e6afbcbbd7d4..c6e73aac9c2579a2900b74fae01e107cf51aaed3 100644 --- a/Noto/Clients/NotoActiveSurfaceGUIClient/src/Makefile +++ b/Noto/Clients/NotoActiveSurfaceGUIClient/src/Makefile @@ -134,9 +134,9 @@ QT_COMPILE_FILES = $(subst .cpp,,$(QT_UI_FILES_MOC) $(QT_UI_FILES_EXTERN_MOC_H) # # -NotoActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) NotoActiveSurfaceGUIui NotoActiveSurfaceCore NotoActiveSurfaceClientEventLoop NotoActiveSurfaceGUIClient +NotoActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) NotoActiveSurfaceGUIui NotoActiveSurfaceCore NotoActiveSurfaceClientEventLoop NotoActiveSurfaceGUIClient NotoActiveSurfaceGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs NotoActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs -NotoActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) NotoActiveSurfaceManagementGUIui NotoActiveSurfaceCore NotoActiveSurfaceClientEventLoop NotoActiveSurfaceGUIClient +NotoActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) NotoActiveSurfaceGUIui NotoActiveSurfaceCore NotoActiveSurfaceClientEventLoop NotoActiveSurfaceGUIClient NotoActiveSurfaceManagementGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs NotoActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs $(PROG)_OBJECTS = $(PROG) diff --git a/Noto/Clients/NotoActiveSurfaceGUIClient/src/NotoActiveSurfaceManagementGUIui.cpp b/Noto/Clients/NotoActiveSurfaceGUIClient/src/NotoActiveSurfaceManagementGUIui.cpp deleted file mode 120000 index 329c09c5c1fcb1fcb2b588f8eefe2bc159f1fabe..0000000000000000000000000000000000000000 --- a/Noto/Clients/NotoActiveSurfaceGUIClient/src/NotoActiveSurfaceManagementGUIui.cpp +++ /dev/null @@ -1 +0,0 @@ -NotoActiveSurfaceGUIui.cpp \ No newline at end of file diff --git a/Noto/Configuration/CDB/MACI/Components/BACKENDS/TotalPower/TotalPower.xml b/Noto/Configuration/CDB/MACI/Components/BACKENDS/TotalPower/TotalPower.xml index ba08992d614b5507532b531bcea213612ce8e82e..36c714432d32865ac008eabfb07b827ddf124821 100644 --- a/Noto/Configuration/CDB/MACI/Components/BACKENDS/TotalPower/TotalPower.xml +++ b/Noto/Configuration/CDB/MACI/Components/BACKENDS/TotalPower/TotalPower.xml @@ -12,6 +12,7 @@ Code="TotalPowerImpl" Type="IDL:alma/Backends/TotalPower:1.0" Container="TotalPowerContainer" + Default="true" KeepAliveTime="-1" ImplLang="cpp" /> diff --git a/Noto/Configuration/CDB/alma/BACKENDS/TotalPower/TotalPower.xml b/Noto/Configuration/CDB/alma/BACKENDS/TotalPower/TotalPower.xml index 05b5037dca74dac3d4729fcef2e949d28fcdc6cd..67ceeff705400045e54796ec71838affdd40ccec 100644 --- a/Noto/Configuration/CDB/alma/BACKENDS/TotalPower/TotalPower.xml +++ b/Noto/Configuration/CDB/alma/BACKENDS/TotalPower/TotalPower.xml @@ -18,7 +18,7 @@ RepetitionCacheTime="2000000" RepetitionExpireTime="5000000" DataPort="9001" - DataIPAddress="192.167.187.40" + DataIPAddress="192.167.187.17" DataLatency="3000000" SenderSleepTime="300000" SenderResponseTime="1000000" diff --git a/Noto/Configuration/CDB/alma/DataBlock/TotalPower/TotalPower.xml b/Noto/Configuration/CDB/alma/DataBlock/TotalPower/TotalPower.xml index bb03202f4621b5bdf9ef49270e9a7799c423b844..d0c6a31ee47c4d95da4da840ce6597a48a4bb6d3 100644 --- a/Noto/Configuration/CDB/alma/DataBlock/TotalPower/TotalPower.xml +++ b/Noto/Configuration/CDB/alma/DataBlock/TotalPower/TotalPower.xml @@ -80,7 +80,7 @@ 2 FALSE GREGORIAN - 3 + 9 730 1 0 1 diff --git a/Noto/Configuration/CDB/alma/Procedures/StationProcedures/StationProcedures.xml b/Noto/Configuration/CDB/alma/Procedures/StationProcedures/StationProcedures.xml index 95447e60d286546a9360acc346c666dc91707b48..239e801a7c75d67d6f4d5bc655e5f9f55f560ed2 100644 --- a/Noto/Configuration/CDB/alma/Procedures/StationProcedures/StationProcedures.xml +++ b/Noto/Configuration/CDB/alma/Procedures/StationProcedures/StationProcedures.xml @@ -88,7 +88,7 @@ ifdist=1,3,-1 ifdist=2,3,-1 ifdist=1,-1,10 - ifdist=2,-1,10 + ifdist=2,-1,11 @@ -121,8 +121,8 @@ calOff ifdist=1,2,-1 ifdist=2,2,-1 - ifdist=1,-1,44 - ifdist=2,-1,44 + ifdist=1,-1,22 + ifdist=2,-1,22 @@ -138,8 +138,8 @@ calOff ifdist=1,4,-1 ifdist=2,4,-1 - ifdist=1,-1,8 - ifdist=2,-1,8 + ifdist=1,-1,10 + ifdist=2,-1,10 @@ -155,7 +155,7 @@ calOff ifdist=1,5,-1 ifdist=2,3,-1 - ifdist=1,-1,8 + ifdist=1,-1,10 ifdist=2,-1,10 diff --git a/Noto/Configuration/CDB/alma/WEATHERSTATION/WeatherStation/WeatherStation.xml b/Noto/Configuration/CDB/alma/WEATHERSTATION/WeatherStation/WeatherStation.xml index 725206827b8ffc74e54db49649cfe2c0fbbafe59..22b444117633d07b15b3753ebc776332db99a1d6 100644 --- a/Noto/Configuration/CDB/alma/WEATHERSTATION/WeatherStation/WeatherStation.xml +++ b/Noto/Configuration/CDB/alma/WEATHERSTATION/WeatherStation/WeatherStation.xml @@ -6,7 +6,7 @@ xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - IPAddress="192.167.187.103" + IPAddress="192.167.187.244" port="22222" UpdatingThreadTime="10000000"> diff --git a/Noto/Outdated/CDB/MACI/.gitignore b/Noto/Outdated/CDB/MACI/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f83a0eb465b552b9b9a326c418a33f5458b82df7 --- /dev/null +++ b/Noto/Outdated/CDB/MACI/.gitignore @@ -0,0 +1 @@ +# This file only exists here in order to prevent the directory from being ignored by git if empty diff --git a/Noto/Outdated/CDB/alma/.gitignore b/Noto/Outdated/CDB/alma/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f83a0eb465b552b9b9a326c418a33f5458b82df7 --- /dev/null +++ b/Noto/Outdated/CDB/alma/.gitignore @@ -0,0 +1 @@ +# This file only exists here in order to prevent the directory from being ignored by git if empty diff --git a/Noto/Servers/NotoPyIfDistributor/src/_ifdist.py b/Noto/Servers/NotoPyIfDistributor/src/_ifdist.py index 0cf6da9202a54e92880378076e436af08b15c09a..72d40a4b24c20648baad75b2d047858fdd17537a 100644 --- a/Noto/Servers/NotoPyIfDistributor/src/_ifdist.py +++ b/Noto/Servers/NotoPyIfDistributor/src/_ifdist.py @@ -31,12 +31,12 @@ def send_command(ip, port, command): s.connect((ip,int(port))) except socket.error: return "Fail" - s.sendall(command) + s.sendall(command.encode()) time.sleep(0.1) response=s.recv(1024) s.close() - response=response.strip().split('\n') - return response + res=response.decode().strip().split('\n') + return res def cdb(xmlstr): root=ET.fromstring(xmlstr) diff --git a/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/CommandLine.py b/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/CommandLine.py index b9b6581983ec7be01cfec9a7a6e8ba9db671afb7..e534a5614c34c628a23381379dfd9cdb1198d19c 100644 --- a/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/CommandLine.py +++ b/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/CommandLine.py @@ -32,7 +32,7 @@ class CommandLine: def initialize(self): #raises an error..... - self.create() + return self.create() def configure(self,ip,port): ''' @@ -42,7 +42,7 @@ class CommandLine: self.ip=ip self.port=port #raises an error..... - self.connect() + return self.connect() def create(self): try: @@ -63,10 +63,17 @@ class CommandLine: def connect(self): try: if self.connected==False: + #print ("PRovo la connessione") self.sock.connect((self.ip,self.port)) + #print ("Conessione ok") self.connected=True - self.sock.sendall('*CLS\n;SYST:ERR?\n++read\n') + cmd="*CLS\n;SYST:ERR?\n++read\n" + #print ("mando stringa di inizializzazione") + self.sock.sendall(cmd.encode()) + #print ("mandata") msg=self.sock.recv(1024) + #print ("ricevuta risposta :") + #print (msg) except socket.error as msg: self.close() return False @@ -169,7 +176,7 @@ class CommandLine: msg="" if self.check(): try: - self.sock.sendall(cmd) + self.sock.sendall(cmd.encode()) except socket.error as msg: self.close() return False,msg @@ -181,7 +188,8 @@ class CommandLine: msg="" if self.check(): try: - self.sock.sendall(cmd+'\n++read\n') + buff=cmd+'\n++read\n' + self.sock.sendall(cmd.encode()) except socket.error as msg: self.close() return False,msg diff --git a/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/NotoLocalOscillator.py b/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/NotoLocalOscillator.py index 1770e98cc9d4bab2b86900a6cee5dfeaf56ba163..f2126f17b432b54c735e54ebbc5dc6627ce7409b 100644 --- a/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/NotoLocalOscillator.py +++ b/Noto/Servers/NotoPyLocalOscillator/src/NotoLocalOscillatorImpl/NotoLocalOscillator.py @@ -99,16 +99,12 @@ class NotoLocalOscillator(Receivers__POA.LocalOscillator, CharacteristicComponen except Exception: exc=ComponentErrorsImpl.CDBAccessExImpl() raise exc - try: - self.cl.initialize() - except CommandLineError as ex: + if not self.cl.initialize(): exc=ComponentErrorsImpl.SocketErrorExImpl() exc.setData('Reason',ex.__str__) raise exc - try: - self.cl.configure(IP,PORT) - except CommandLineError as ex: - msg="cannot connect to synthesiser, IP %s, error message is %s" %(IP,ex.__str__) + if not self.cl.configure(IP,PORT): + msg="cannot connect to synthesiser, IP %s, PORT %s" %(IP,PORT) exc=ComponentErrorsImpl.SocketErrorExImpl() exc.setData('Reason',msg) raise exc diff --git a/SRT/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml b/SRT/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml index ea6e644bae0deb3bda31587df813617694ef9b87..1ff19de19d6556079838d141ff69dc1e774feb13 100644 --- a/SRT/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml +++ b/SRT/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml @@ -18,4 +18,9 @@ Type="IDL:alma/Antenna/Moon:1.0" Container="AntennaContainer" ImplLang="cpp"/> + diff --git a/SRT/CDB/MACI/Containers/AntennaBossContainer/AntennaBossContainer.xml b/SRT/CDB/MACI/Containers/AntennaBossContainer/AntennaBossContainer.xml index b6cba55101bcf27a546f793603b02a26e8f08322..d1c9a83133213a952c4dd6f469fa4b996b6703de 100644 --- a/SRT/CDB/MACI/Containers/AntennaBossContainer/AntennaBossContainer.xml +++ b/SRT/CDB/MACI/Containers/AntennaBossContainer/AntennaBossContainer.xml @@ -10,7 +10,7 @@ UseIFR="true" ManagerRetry="10" ImplLang="cpp" - Recovery="false"> + Recovery="true"> @@ -18,8 +18,8 @@ - diff --git a/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer06/SRTActiveSurfaceContainer06.xml b/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer06/SRTActiveSurfaceContainer06.xml index 69ad936dfd37a48ae10820e5c4ae7649fd089470..f994d42ca724aae6430577b30f6cbfd32e7bddd0 100644 --- a/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer06/SRTActiveSurfaceContainer06.xml +++ b/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer06/SRTActiveSurfaceContainer06.xml @@ -1,11 +1,26 @@ - - - + + + + - + + + + diff --git a/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer07/SRTActiveSurfaceContainer07.xml b/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer07/SRTActiveSurfaceContainer07.xml index c2efb0e9b0262511cf4224a2c576b3ecaf4bae99..f994d42ca724aae6430577b30f6cbfd32e7bddd0 100644 --- a/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer07/SRTActiveSurfaceContainer07.xml +++ b/SRT/CDB/MACI/Containers/SRTActiveSurfaceContainer07/SRTActiveSurfaceContainer07.xml @@ -17,7 +17,7 @@ diff --git a/SRT/CDB/alma/ANTENNA/Boss/Boss.xml b/SRT/CDB/alma/ANTENNA/Boss/Boss.xml index a15766a833e1a56033cac7b6439c4e1322a781e3..78970db70474e5a6ab7ee301d0b0bd69b991f9b6 100644 --- a/SRT/CDB/alma/ANTENNA/Boss/Boss.xml +++ b/SRT/CDB/alma/ANTENNA/Boss/Boss.xml @@ -14,19 +14,19 @@ MinPointNumber="25" MaxPointNumber="250" GapTime="200000" - CoordinateIntegration="1000000" - CutOffElevation="70.0" - SkydipElevationRange="15.0 90.0" + CoordinateIntegration="1000000" + CutOffElevation="70.0" + SkydipElevationRange="15.0-90.0" MountInstance="ANTENNA/Mount" ObservatoryInterface="IDL:alma/Antenna/Observatory:1.0" PointingModelInstance="ANTENNA/PointingModel" RefractionInstance="ANTENNA/Refraction" - Sidereal="IDL:alma/Antenna/SkySource:1.0" - Sun="" - Moon="IDL:alma/Antenna/Moon:1.0" - Satellite="" - SolarSystemBody="" - Otf="IDL:alma/Antenna/OTF:1.0"> + Sidereal="IDL:alma/Antenna/SkySource:1.0" + Sun="IDL:alma/Antenna/SolarSystemBody:1.0" + Moon="IDL:alma/Antenna/Moon:1.0" + Satellite="" + SolarSystemBody="IDL:alma/Antenna/SolarSystemBody:1.0" + Otf="IDL:alma/Antenna/OTF:1.0"> diff --git a/SRT/CDB/alma/AS/Boss/Boss.xml b/SRT/CDB/alma/AS/Boss/Boss.xml index d2fdada51be8de2312fc26aefa3b63323352a3a6..0439cefcdcf1c3c5848f2ab613e127472f8101bd 100644 --- a/SRT/CDB/alma/AS/Boss/Boss.xml +++ b/SRT/CDB/alma/AS/Boss/Boss.xml @@ -9,4 +9,5 @@ - \ No newline at end of file + + diff --git a/SRT/CDB/alma/AS/LT_lut_20240917_2.txt b/SRT/CDB/alma/AS/LT_lut_20240917_2.txt new file mode 100644 index 0000000000000000000000000000000000000000..0096d74d6ef8982a4611bf418bcf57d921915cd9 --- /dev/null +++ b/SRT/CDB/alma/AS/LT_lut_20240917_2.txt @@ -0,0 +1,1116 @@ +2.136 1.633 -0.073 -0.996 -1.839 -2.895 -13.865 +4.214 3.170 0.400 -1.968 -3.217 -2.809 -13.865 +2.304 1.589 0.126 -1.226 -1.788 -2.646 -13.865 +2.336 1.895 0.157 -0.961 -1.018 -2.205 -13.865 +1.523 1.443 -0.112 -1.064 -0.742 -1.785 -13.865 +1.223 1.058 -0.153 -0.723 -0.943 -1.169 -13.865 +0.966 0.564 -0.244 -0.668 -1.075 -0.508 -13.865 +1.139 0.467 0.002 -0.166 -1.125 0.416 -13.865 +0.531 -0.388 0.010 -0.735 -0.671 0.733 -13.865 +0.684 -0.325 -0.001 -0.329 0.356 1.191 -13.865 +0.493 -0.331 0.034 -0.284 0.933 1.464 -13.865 +0.651 -0.281 0.134 -0.200 1.153 1.633 -13.865 +0.813 0.069 0.234 -0.059 0.961 1.589 -13.865 +0.640 -0.191 0.050 -0.219 0.685 1.305 -13.865 +0.768 0.085 0.129 -0.527 0.474 1.202 -13.865 +0.868 -0.029 0.191 -0.469 0.335 2.903 -13.865 +1.064 0.336 0.118 -0.370 -0.166 0.704 -13.865 +1.243 0.361 0.051 -0.721 -0.420 -0.243 -13.865 +1.696 0.589 0.167 -0.559 -0.737 -0.581 -13.865 +2.120 1.347 0.448 -0.411 -0.961 -1.322 -13.865 +2.229 1.237 0.287 -0.693 -1.085 -1.542 -13.865 +2.136 1.730 0.330 -0.835 -1.386 -2.381 -13.865 +1.875 1.615 -0.086 -1.383 -2.024 -2.879 -13.865 +2.319 1.920 0.193 -1.022 -1.896 -2.832 -13.865 +2.561 3.262 0.185 -1.470 -2.385 -3.886 -5.247 +4.737 4.860 0.575 -2.711 -5.013 -3.569 -5.247 +2.276 2.406 0.092 -1.030 -2.390 -3.140 -5.247 +2.296 1.946 0.329 -1.111 -1.636 -2.675 -5.247 +2.040 1.723 0.040 -0.773 -1.211 -2.286 -5.247 +1.792 1.128 -0.012 -0.809 -0.968 -1.535 -5.247 +1.303 0.745 0.106 -0.253 -0.395 -0.471 -5.247 +0.623 0.097 0.034 -0.770 -0.055 0.350 -5.247 +1.106 0.480 0.210 0.012 0.999 1.203 -5.247 +0.860 0.032 0.554 -0.067 1.902 1.928 -5.247 +1.101 -0.338 0.466 0.439 1.571 2.527 -5.247 +0.872 -0.324 0.469 0.569 1.267 2.701 -5.247 +0.724 -0.551 0.390 0.116 1.521 2.697 -5.247 +0.463 -0.946 0.104 -0.009 1.182 2.006 -5.247 +0.852 -0.609 0.209 0.069 0.928 2.075 -5.247 +0.581 0.120 0.105 -0.181 0.639 1.175 -5.247 +0.363 -0.302 0.233 -0.257 0.185 1.493 -5.247 +1.648 0.538 0.327 -0.126 -0.299 -0.050 -5.247 +2.082 0.876 -0.053 -0.815 -0.936 -1.445 -5.247 +2.915 0.322 0.297 -0.780 -1.220 0.189 -5.247 +2.305 1.616 0.187 -1.449 -2.142 -2.685 -5.247 +2.486 1.950 0.121 -0.975 -1.863 -3.294 -5.247 +2.833 2.429 0.331 -1.320 -2.130 -2.499 -5.247 +2.711 2.444 0.134 -1.387 -2.379 -3.930 -5.247 +2.624 3.215 0.327 -1.450 -2.252 -4.120 0.619 +3.062 3.404 0.217 -1.461 -2.640 -4.253 0.619 +3.532 3.872 0.468 -1.386 -2.586 -4.062 0.619 +6.036 6.138 0.430 -3.589 -5.988 -4.577 0.619 +3.376 3.813 0.460 -1.225 -2.499 -3.704 0.619 +2.645 2.648 0.166 -1.398 -2.422 -3.515 0.619 +2.654 2.984 0.443 -1.143 -1.501 -3.034 0.619 +2.571 2.613 0.066 -1.213 -1.137 -3.040 0.619 +2.464 2.562 0.384 -0.886 -1.399 -2.603 0.619 +3.629 2.934 0.983 -0.354 -0.983 -2.186 0.619 +2.462 2.019 0.551 -0.683 -0.788 -2.538 0.619 +1.896 1.504 0.190 -0.583 -0.779 -1.385 0.619 +1.715 1.467 0.488 -0.331 -0.137 -0.561 0.619 +1.126 0.735 0.032 -0.587 -0.216 -0.420 0.619 +1.339 0.807 0.256 -0.359 0.331 0.497 0.619 +1.235 0.491 0.376 0.195 0.847 1.300 0.619 +1.256 0.501 0.590 0.308 1.002 1.590 0.619 +1.083 0.448 0.430 0.263 1.257 1.387 0.619 +1.046 0.239 0.535 0.656 1.549 2.352 0.619 +0.801 -0.389 0.320 0.400 1.438 2.412 0.619 +0.791 -0.284 0.530 0.361 1.679 2.862 0.619 +0.713 -0.536 0.438 0.471 1.764 2.818 0.619 +0.976 -0.681 0.577 0.591 2.087 3.439 0.619 +0.602 -1.206 0.311 0.449 1.829 2.942 0.619 +0.746 -1.098 0.615 0.598 2.044 3.367 0.619 +0.229 -1.414 0.012 0.145 2.102 2.963 0.619 +0.425 -1.158 0.367 0.374 1.811 3.322 0.619 +0.993 -0.610 0.467 0.705 2.383 3.811 0.619 +1.169 -0.507 1.067 1.065 2.152 3.552 0.619 +0.322 -1.122 0.090 0.229 1.561 2.355 0.619 +0.439 -1.441 -0.129 -0.106 0.875 1.680 0.619 +0.450 -1.076 -0.096 -0.465 -0.963 1.690 0.619 +0.239 -0.950 -0.044 -0.184 0.324 2.511 0.619 +0.992 -0.041 0.380 0.049 0.656 0.184 0.619 +1.212 0.288 0.405 0.090 0.427 -0.043 0.619 +1.319 0.512 0.260 0.130 -0.132 0.123 0.619 +1.695 0.786 0.666 -0.113 -0.087 -0.316 0.619 +2.121 0.962 0.495 -0.161 -0.708 -0.689 0.619 +1.959 1.435 0.470 -0.475 -0.764 -1.595 0.619 +2.452 1.663 0.500 -0.934 -1.457 -2.708 0.619 +2.693 1.958 0.674 -0.514 -1.074 -2.221 0.619 +2.699 1.906 0.219 -1.428 -1.983 -2.325 0.619 +3.013 2.805 0.666 -0.688 -1.539 -2.565 0.619 +2.663 3.045 0.382 -1.139 -2.065 -3.269 0.619 +2.654 2.553 0.201 -1.405 -2.396 -3.873 0.619 +3.038 2.808 0.267 -1.666 -2.873 -4.313 0.619 +2.920 3.009 0.216 -1.577 -2.208 -4.394 0.619 +2.977 2.907 0.053 -1.878 -2.867 -4.474 0.619 +3.293 3.478 0.192 -1.869 -3.211 -5.034 5.121 +3.702 3.828 0.399 -1.588 -2.819 -4.915 5.121 +3.594 3.854 0.295 -1.625 -3.226 -4.718 5.121 +7.164 7.496 0.792 -3.552 -5.610 -4.981 5.121 +3.153 3.497 0.212 -1.612 -2.953 -4.574 5.121 +3.419 4.268 0.270 -1.275 -2.383 -3.972 5.121 +3.475 3.341 0.308 -1.340 -2.155 -3.640 5.121 +2.292 2.795 0.121 -1.585 -2.197 -3.981 5.121 +3.089 3.105 0.706 -0.770 -1.521 -2.943 5.121 +2.680 2.510 0.464 -1.012 -1.677 -2.890 5.121 +0.604 1.969 0.047 -0.939 -1.511 -2.268 5.121 +1.886 1.325 -0.157 -0.980 -1.165 -1.552 5.121 +1.130 1.622 0.071 -0.636 -0.655 -0.690 5.121 +1.285 0.889 0.187 -0.230 0.265 0.772 5.121 +1.142 0.585 0.217 0.034 0.393 0.749 5.121 +0.769 0.416 0.208 0.107 0.828 1.594 5.121 +1.016 0.115 0.539 0.453 1.468 2.122 5.121 +1.066 -0.006 0.690 0.718 1.721 2.770 5.121 +0.805 -0.763 0.592 0.405 1.688 2.700 5.121 +0.692 0.350 0.519 0.630 1.879 3.371 5.121 +0.953 -0.899 0.374 0.575 1.964 3.371 5.121 +0.411 -0.464 0.651 0.798 2.365 4.217 5.121 +0.339 -1.296 0.411 1.194 2.365 3.904 5.121 +0.680 -1.341 0.684 0.597 2.641 4.122 5.121 +0.574 -1.466 0.358 0.535 2.267 4.032 5.121 +0.281 -1.746 0.348 0.676 2.319 3.861 5.121 +0.437 -1.479 0.445 0.763 2.418 3.758 5.121 +0.624 -1.226 0.792 0.965 2.528 3.892 5.121 +0.166 -1.782 0.065 0.625 1.916 3.549 5.121 +0.154 -2.303 -0.156 0.002 1.280 2.748 5.121 +0.739 -1.045 0.184 0.601 1.053 2.828 5.121 +0.390 -1.423 0.266 0.562 1.245 2.236 5.121 +0.174 -1.590 -0.188 -0.398 0.484 1.076 5.121 +-0.027 -0.812 -0.085 0.280 0.487 1.091 5.121 +0.492 -0.683 -0.103 -0.438 -0.006 0.431 5.121 +1.091 -0.015 0.305 -0.199 0.114 0.114 5.121 +1.294 0.453 0.333 -0.246 -1.642 -0.366 5.121 +1.461 0.639 0.141 -0.711 -1.311 -1.490 5.121 +2.055 0.880 0.283 -0.836 -1.197 -2.051 5.121 +2.497 1.642 0.441 -0.721 -1.199 -2.430 5.121 +2.297 1.756 0.215 -1.279 -1.417 -3.038 5.121 +3.128 3.190 0.801 -0.776 -1.493 -2.911 5.121 +2.827 2.605 0.389 -1.353 -2.271 -3.507 5.121 +3.046 3.067 0.138 -1.585 -3.625 -4.046 5.121 +3.841 3.316 0.509 -1.438 -2.724 -4.148 5.121 +3.442 3.427 0.350 -1.711 -3.133 -4.971 5.121 +3.179 3.201 0.065 -2.098 -3.452 -5.246 5.121 +3.424 3.572 0.254 -1.528 -3.121 -4.992 5.121 +3.682 4.102 0.635 -1.427 -2.878 -4.953 7.938 +3.532 4.031 0.321 -1.734 -3.383 -5.165 7.938 +3.541 3.859 0.063 -2.109 -3.816 -5.492 7.938 +7.140 7.688 0.361 -3.426 -7.138 -5.577 7.938 +3.029 3.555 -0.123 -1.913 -3.865 -5.170 7.938 +2.792 3.425 0.035 -1.689 -2.871 -4.383 7.938 +2.499 2.783 0.167 -1.386 -2.374 -3.433 7.938 +2.032 2.567 -0.155 -1.588 -2.456 -3.468 7.938 +2.253 2.742 0.077 -1.141 -2.133 -3.081 7.938 +1.760 2.373 -0.112 -1.232 -2.281 -3.203 7.938 +2.132 1.845 -0.180 -1.411 -1.820 -2.568 7.938 +1.333 1.674 0.082 -0.714 -0.990 -1.046 7.938 +1.034 0.767 -0.019 -0.847 0.317 -0.461 7.938 +0.627 0.598 0.009 -0.354 0.039 0.164 7.938 +0.565 0.327 0.091 -0.196 0.422 0.566 7.938 +0.610 -0.187 0.062 -0.129 0.694 1.047 7.938 +0.651 0.016 0.221 0.188 1.044 1.467 7.938 +0.086 -0.867 0.022 -0.081 0.838 1.469 7.938 +0.618 -0.400 0.445 0.770 1.660 2.429 7.938 +0.324 -1.327 0.335 0.547 1.726 3.198 7.938 +0.725 -0.610 0.716 0.506 2.209 3.974 7.938 +1.453 -0.262 0.450 0.848 2.473 4.207 7.938 +0.307 -1.289 0.542 0.557 2.310 4.166 7.938 +0.229 -1.552 0.567 0.748 2.396 4.239 7.938 +0.568 -1.668 0.286 0.636 2.330 4.122 7.938 +0.294 -1.747 0.632 0.670 2.100 3.655 7.938 +0.056 -1.941 0.294 0.515 1.781 3.248 7.938 +-0.055 -2.066 -0.143 0.370 1.564 2.845 7.938 +0.185 -1.803 0.466 0.650 2.097 3.194 7.938 +-0.072 -1.663 -0.108 0.698 1.431 2.763 7.938 +-0.130 -1.987 -0.200 0.210 0.874 1.279 7.938 +0.019 -1.802 -0.089 -0.817 0.943 1.773 7.938 +-0.067 -1.329 -0.071 0.387 0.726 1.279 7.938 +0.182 -1.451 -0.202 -0.649 0.577 1.088 7.938 +0.506 -0.786 -0.028 -0.088 0.349 0.551 7.938 +-0.222 -0.527 0.075 -0.169 0.038 0.108 7.938 +1.318 0.284 0.209 -0.296 -0.370 -0.070 7.938 +1.417 0.604 0.133 -0.592 -0.993 -1.448 7.938 +2.240 1.467 0.614 -0.488 -1.191 -2.174 7.938 +2.316 1.598 0.262 -0.921 -1.793 -2.690 7.938 +1.973 1.670 0.308 -1.149 -1.876 -2.742 7.938 +2.319 2.154 0.321 -1.088 -1.873 -2.998 7.938 +2.431 2.325 -0.218 -1.305 -2.526 -3.223 7.938 +2.529 2.346 -0.136 -1.767 -3.096 -4.350 7.938 +3.489 3.462 0.476 -1.440 -3.014 -4.427 7.938 +3.547 3.445 0.170 -2.033 -3.603 -5.339 7.938 +3.459 3.501 0.082 -1.952 -3.354 -5.629 7.938 +3.342 4.140 0.328 -1.701 -3.255 -5.208 7.938 +3.327 3.828 0.291 -2.086 -3.446 -4.991 9.587 +3.118 3.659 0.033 -1.926 -3.573 -5.357 9.587 +3.488 4.188 0.317 -1.415 -2.955 -5.112 9.587 +5.831 6.749 -0.001 -4.096 -6.860 -5.288 9.587 +2.344 3.228 -0.086 -1.530 -2.814 -4.600 9.587 +2.447 3.171 0.168 -1.082 -2.307 -3.450 9.587 +2.059 3.027 0.131 -0.993 -1.776 -3.065 9.587 +1.848 2.911 0.136 -1.100 -1.809 -2.681 9.587 +1.882 2.540 0.105 -0.786 -1.527 -2.654 9.587 +1.619 2.115 -0.064 -1.116 -1.614 -2.794 9.587 +0.973 1.521 -0.123 -0.879 -1.027 -2.141 9.587 +1.045 1.449 0.157 -0.474 -0.481 -1.062 9.587 +0.648 0.780 -0.114 -0.523 -0.562 -0.635 9.587 +0.268 0.322 -0.036 -0.672 0.037 -0.435 9.587 +0.480 0.280 0.022 -0.703 0.413 0.465 9.587 +0.629 0.017 0.302 0.364 0.974 1.335 9.587 +0.145 -0.384 0.105 -0.036 1.149 1.339 9.587 +0.422 0.168 0.428 0.674 1.644 2.200 9.587 +0.155 -0.980 0.263 0.087 1.484 2.197 9.587 +0.635 -0.491 0.816 0.672 2.168 3.596 9.587 +0.867 -0.978 0.634 0.684 2.123 3.968 9.587 +0.542 -1.211 0.659 0.313 2.310 3.935 9.587 +0.227 -1.731 0.341 0.694 2.408 4.038 9.587 +0.459 -1.749 0.578 0.571 2.474 4.499 9.587 +0.615 -1.343 0.815 1.214 2.967 3.818 9.587 +0.346 -1.796 0.103 0.739 2.126 3.430 9.587 +-0.072 -2.109 0.150 0.334 1.643 2.852 9.587 +-0.282 -2.231 0.044 0.237 1.201 2.535 9.587 +-0.335 -2.314 -0.471 0.039 0.998 2.140 9.587 +-0.152 -1.894 0.153 0.837 1.690 2.392 9.587 +-0.425 -2.435 -0.558 -0.439 0.591 1.779 9.587 +-0.363 -2.102 -0.466 -0.173 0.482 1.500 9.587 +-0.379 -1.868 -0.489 -0.363 0.509 1.030 9.587 +-0.642 -1.308 -0.254 -0.188 0.355 0.185 9.587 +0.327 -0.787 0.312 0.176 0.877 0.204 9.587 +0.549 -0.335 0.189 0.015 0.171 0.220 9.587 +0.810 0.003 0.185 0.019 -0.278 -0.595 9.587 +1.073 0.295 0.248 -0.355 -0.744 -1.031 9.587 +1.772 1.109 0.480 -0.206 -0.733 -1.248 9.587 +1.757 1.312 0.311 -0.606 -1.473 -2.147 9.587 +2.199 1.952 0.608 -0.347 -1.258 -1.822 9.587 +1.927 2.275 0.358 -0.609 -1.468 -2.269 9.587 +2.108 2.281 0.431 -0.759 -1.792 -2.615 9.587 +2.367 2.456 0.128 -0.851 -2.398 -3.423 9.587 +2.757 2.922 0.398 -1.243 -2.563 -3.898 9.587 +3.229 3.327 0.210 -1.420 -3.162 -4.777 9.587 +3.267 3.686 0.380 -1.748 -3.264 -4.893 9.587 +3.217 3.733 0.209 -1.775 -3.187 -5.109 9.587 +3.216 3.682 0.184 -1.577 -3.080 -4.889 10.270 +2.776 3.409 -0.027 -1.872 -3.336 -4.816 10.270 +3.079 3.761 0.208 -1.550 -3.054 -4.694 10.270 +3.304 3.883 -0.025 -1.343 -3.297 -5.098 10.270 +5.139 6.228 -0.039 -4.149 -6.885 -4.898 10.270 +3.888 5.014 0.239 -2.037 -3.174 -4.754 10.270 +5.615 7.063 0.202 -3.102 -5.670 -4.366 10.270 +2.225 3.529 -0.419 -2.145 -3.545 -4.784 10.270 +1.801 3.120 -0.234 -1.431 -2.477 -3.889 10.270 +1.782 2.800 -0.140 -1.119 -2.155 -3.750 10.270 +1.729 2.673 -0.065 -0.912 -1.934 -3.244 10.270 +1.554 2.650 0.078 -0.742 -1.384 -3.468 10.270 +1.325 2.547 0.020 -0.624 -1.513 -2.261 10.270 +1.090 2.341 -0.483 -0.957 -1.786 -2.556 10.270 +1.284 2.152 0.011 -0.712 -0.604 -2.028 10.270 +0.767 1.633 -0.561 -1.196 -1.674 -3.123 10.270 +1.683 1.993 -0.143 -0.871 -1.263 -2.294 10.270 +2.006 3.143 0.474 -0.393 -0.846 -1.472 10.270 +1.128 1.904 -0.055 -0.757 -1.200 -2.258 10.270 +1.529 1.328 -0.363 -0.978 -1.357 -1.996 10.270 +0.893 1.524 -0.207 -0.470 -1.034 -1.865 10.270 +0.790 2.278 -0.049 -0.627 -0.626 -1.657 10.270 +0.839 1.214 0.005 -0.394 -0.541 -1.174 10.270 +0.712 0.911 0.045 0.690 -0.418 -0.507 10.270 +0.463 0.041 0.072 -0.162 -0.301 -0.281 10.270 +0.474 0.944 0.103 -0.056 -0.127 -0.048 10.270 +0.729 0.885 0.150 0.040 0.336 0.475 10.270 +0.898 1.225 0.260 1.076 0.378 0.867 10.270 +0.762 0.548 0.248 0.017 0.672 0.378 10.270 +0.544 0.204 0.265 0.215 0.649 2.746 10.270 +-0.231 -0.565 -0.138 -0.312 0.823 0.456 10.270 +-0.367 -0.724 -0.174 0.081 0.557 1.403 10.270 +0.113 -0.038 0.090 0.166 0.640 1.019 10.270 +-0.158 -0.551 0.156 0.036 1.427 1.071 10.270 +-0.289 -0.891 0.012 0.152 0.998 1.489 10.270 +0.115 -0.528 0.403 0.765 1.428 1.790 10.270 +0.294 -0.089 0.343 0.436 2.113 0.628 10.270 +0.068 -0.918 0.276 0.396 1.718 2.135 10.270 +0.057 -0.744 0.268 0.336 1.484 2.391 10.270 +-0.123 -1.266 0.105 0.040 1.255 2.876 10.270 +0.529 -0.890 0.689 1.051 2.143 3.745 10.270 +0.532 -0.955 0.705 0.995 2.286 3.747 10.270 +0.138 -1.512 0.452 0.610 2.085 3.447 10.270 +0.449 -1.114 0.448 0.774 2.357 3.613 10.270 +0.383 -1.022 0.591 1.036 2.677 4.044 10.270 +0.430 -1.626 0.317 0.399 2.138 3.383 10.270 +0.467 -1.302 0.750 0.882 2.845 4.448 10.270 +0.868 -1.129 0.588 0.744 2.687 4.195 10.270 +0.755 -1.511 0.719 1.048 2.504 3.963 10.270 +0.512 -1.799 0.664 0.736 2.306 3.350 10.270 +0.349 -1.525 0.450 0.805 2.414 3.003 10.270 +0.283 -1.581 0.274 0.774 2.208 2.842 10.270 +-0.021 -2.047 -0.140 0.356 1.512 2.592 10.270 +-0.291 -2.374 -0.297 0.072 1.191 2.196 10.270 +-0.544 -2.489 -0.226 0.059 1.096 1.914 10.270 +-0.614 -2.345 -0.231 0.128 0.995 1.871 10.270 +-0.638 -2.642 -0.470 -0.142 0.595 1.566 10.270 +-0.796 -2.700 -0.671 -0.116 0.896 1.368 10.270 +-0.887 -2.740 -0.669 -0.370 0.519 1.735 10.270 +-1.207 -2.991 -0.832 -0.374 0.471 0.999 10.270 +-0.399 -2.485 -0.784 -0.155 0.425 1.947 10.270 +-0.858 -2.408 -0.537 -0.057 0.343 0.862 10.270 +-0.865 -2.464 -0.631 -0.389 0.159 0.689 10.270 +-1.010 -2.225 -0.580 -0.315 0.139 0.535 10.270 +-0.648 -1.363 -0.188 0.196 0.623 -0.489 10.270 +-0.746 -2.289 -0.431 -0.239 0.059 0.819 10.270 +-0.379 -1.666 -0.346 -0.093 0.362 0.589 10.270 +-0.215 -1.445 -0.189 -0.083 0.071 0.543 10.270 +-0.040 -0.858 0.017 0.123 0.311 0.338 10.270 +-0.019 -0.816 0.063 0.023 0.102 0.125 10.270 +-0.006 -1.000 -0.238 -0.362 -0.249 -0.105 10.270 +2.243 0.932 2.389 1.334 1.440 0.739 10.270 +0.190 -0.329 -0.213 -0.175 -0.565 -0.273 10.270 +0.806 0.249 0.411 0.076 -0.116 -0.296 10.270 +0.398 0.280 -0.159 -0.433 -0.877 -1.224 10.270 +0.677 0.266 -0.128 -0.521 -0.946 -1.111 10.270 +1.152 0.872 0.443 -0.106 -0.575 -0.972 10.270 +1.382 0.992 0.173 -0.410 -0.872 -1.285 10.270 +1.344 1.255 0.332 -0.229 -0.860 -1.266 10.270 +1.536 1.401 0.228 -1.060 -1.046 -1.496 10.270 +1.176 1.011 0.068 -0.544 -1.240 -1.612 10.270 +0.836 0.893 -0.264 -1.279 -1.036 -2.038 10.270 +1.348 1.533 0.319 -0.491 -1.069 -1.589 10.270 +1.633 1.930 0.573 -0.605 -0.301 -1.573 10.270 +1.448 2.237 0.348 -0.117 -1.194 -1.755 10.270 +1.991 2.500 0.621 -0.193 -0.940 -2.276 10.270 +1.763 2.112 0.192 -0.626 -1.814 -2.548 10.270 +2.259 2.752 0.430 -0.757 -1.547 -2.645 10.270 +2.115 2.839 0.285 -1.047 -1.968 -3.205 10.270 +2.142 2.535 -0.132 -1.680 -2.935 -4.123 10.270 +2.431 2.831 0.105 -1.661 -2.270 -4.390 10.270 +2.833 3.015 0.004 -1.921 -3.363 -4.754 10.270 +2.967 3.208 0.146 -1.577 -3.092 -4.974 10.270 +2.895 3.371 0.057 -1.854 -3.015 -4.860 10.270 +2.958 3.421 0.145 -1.514 -3.161 -4.810 10.270 +3.245 3.746 0.179 -1.075 -3.188 -5.118 10.270 +3.134 3.412 0.189 -1.931 -3.030 -4.494 10.174 +3.016 2.821 -0.226 -1.825 -3.357 -4.659 10.174 +2.825 3.152 0.063 -1.560 -2.940 -4.980 10.174 +2.751 3.150 -0.113 -1.821 -3.125 -4.450 10.174 +4.675 5.500 -0.265 -4.139 -6.595 -4.659 10.174 +1.984 2.694 -0.419 -1.995 -3.473 -4.383 10.174 +4.147 6.142 -0.127 -2.952 -5.360 -3.779 10.174 +1.881 2.561 -0.150 -1.303 -2.320 -3.473 10.174 +1.616 2.404 -0.223 -1.134 -1.586 -3.028 10.174 +0.945 2.282 -0.362 -0.970 -1.703 -2.636 10.174 +0.972 2.091 -0.016 -0.384 -1.013 -1.988 10.174 +0.825 2.222 0.209 -0.147 -0.437 -1.003 10.174 +0.196 1.554 -0.412 -1.247 -0.884 -1.566 10.174 +0.961 1.851 0.159 -0.091 -0.134 -0.645 10.174 +0.578 1.816 -0.057 0.292 -0.414 -0.895 10.174 +0.487 0.826 -0.280 -0.715 -0.536 -1.424 10.174 +0.165 0.995 -0.784 -1.153 -1.199 -1.602 10.174 +0.667 1.408 -0.251 0.014 -0.835 -1.423 10.174 +0.783 1.541 -0.069 -0.332 -0.813 -1.291 10.174 +0.834 1.272 0.025 -0.242 -0.761 -0.890 10.174 +0.598 1.355 0.037 -0.006 -0.252 -0.578 10.174 +0.024 0.852 -0.090 -0.160 -0.490 -0.477 10.174 +0.399 1.270 0.034 -0.303 -0.098 -0.550 10.174 +0.197 0.575 -0.123 -0.060 -0.207 -0.445 10.174 +0.763 0.714 -0.039 0.588 -0.160 -0.652 10.174 +-0.170 0.920 -0.225 -0.083 0.110 -0.001 10.174 +-0.021 0.512 -0.167 -0.012 0.261 1.923 10.174 +0.290 0.441 0.102 0.259 0.701 0.193 10.174 +-0.075 0.125 -0.012 0.494 0.537 0.435 10.174 +-0.086 0.302 0.249 -0.067 1.019 0.486 10.174 +-0.433 -0.456 0.049 0.111 0.487 0.875 10.174 +0.229 -0.241 0.020 0.037 0.937 0.854 10.174 +-0.414 -0.598 0.175 0.273 0.767 1.014 10.174 +0.283 0.084 0.466 1.020 1.328 1.232 10.174 +-0.471 -0.849 0.309 0.686 1.265 0.860 10.174 +-0.008 -0.656 0.292 0.857 1.324 1.288 10.174 +-0.445 -1.163 -0.056 0.129 0.704 1.179 10.174 +0.147 -0.933 0.064 0.228 1.249 1.577 10.174 +-0.365 -1.017 0.190 0.260 1.216 1.690 10.174 +0.878 -0.401 0.632 0.906 1.599 2.653 10.174 +0.328 -1.096 0.424 0.235 1.507 3.948 10.174 +0.067 -1.083 0.401 0.759 1.925 4.025 10.174 +0.120 -0.811 0.402 1.201 2.274 3.617 10.174 +-0.064 -1.600 0.168 0.540 2.054 3.330 10.174 +0.871 -1.116 0.608 0.759 2.708 3.258 10.174 +0.271 -1.408 0.486 0.760 2.707 3.903 10.174 +0.250 -1.808 0.199 0.385 1.955 1.963 10.174 +0.398 -1.846 0.652 0.981 2.448 3.932 10.174 +0.387 -1.592 0.457 0.379 2.347 3.911 10.174 +0.468 -1.450 0.321 0.481 2.182 3.742 10.174 +0.307 -1.746 0.357 0.774 1.984 3.374 10.174 +-0.080 -1.993 0.274 0.254 1.730 2.657 10.174 +-0.034 -1.698 0.056 0.450 1.811 2.273 10.174 +-0.071 -1.918 -0.093 0.272 1.335 2.037 10.174 +-0.510 -2.442 -0.380 -0.053 0.846 1.659 10.174 +-0.851 -2.836 -0.652 -0.343 0.564 1.120 10.174 +-1.036 -2.701 -0.575 -0.107 0.593 1.125 10.174 +-1.067 -2.691 -0.863 -0.526 0.193 0.928 10.174 +-1.238 -3.048 -0.480 -0.227 0.702 0.972 10.174 +-1.115 -2.530 -0.724 -0.515 0.119 1.195 10.174 +-1.160 -2.581 -0.795 -0.247 -0.048 0.208 10.174 +-1.474 -2.751 -0.988 -0.773 -0.210 0.815 10.174 +-1.469 -2.449 -0.958 -0.275 -0.125 0.159 10.174 +-1.172 -3.167 -0.693 0.191 0.210 0.149 10.174 +-1.026 -2.006 -0.667 -0.298 0.050 0.182 10.174 +-1.069 -1.828 -0.372 -0.522 -0.179 0.581 10.174 +-1.110 -2.775 -0.605 -0.286 -0.592 0.613 10.174 +-1.210 -1.747 -0.510 -0.318 -0.270 0.027 10.174 +-0.551 -1.471 -0.315 -0.069 -0.104 -0.106 10.174 +-0.308 -0.874 -0.136 -0.524 -0.041 -0.271 10.174 +-0.108 -0.784 0.594 0.138 0.304 0.388 10.174 +13.121 13.467 2.070 14.011 13.573 8.356 10.174 +0.048 -0.243 0.288 0.080 -0.095 -0.099 10.174 +0.226 -0.313 -0.048 0.232 -0.163 -0.240 10.174 +0.361 0.107 -0.295 0.267 -0.190 -0.178 10.174 +0.519 0.445 0.335 0.293 -0.100 -0.299 10.174 +0.404 0.140 0.134 -0.058 -0.217 -0.615 10.174 +0.475 0.563 0.222 -0.022 -0.440 -0.706 10.174 +0.793 0.897 0.212 -0.117 -0.512 -0.503 10.174 +0.754 1.245 0.431 0.025 -0.436 -0.771 10.174 +1.160 1.304 0.436 0.075 0.650 -0.276 10.174 +1.037 1.063 0.354 0.434 -1.031 -0.788 10.174 +0.626 1.213 0.364 -0.738 -0.139 -0.506 10.174 +0.515 0.874 0.099 -0.291 -0.742 -0.685 10.174 +0.471 1.180 0.089 -0.197 -0.051 -0.682 10.174 +0.901 1.564 0.282 -0.300 -0.634 -0.882 10.174 +0.926 1.813 0.318 -0.374 -0.467 -1.260 10.174 +1.335 1.948 0.231 -0.532 -0.907 -1.490 10.174 +1.706 2.235 0.106 -0.916 -1.523 -2.032 10.174 +1.427 3.216 0.159 -1.893 -2.028 -2.882 10.174 +1.526 2.295 -0.031 -1.574 -2.647 -3.527 10.174 +2.384 2.729 0.040 -1.538 -2.683 -4.108 10.174 +2.483 2.855 0.203 -1.626 -2.874 -4.123 10.174 +2.647 3.081 0.081 -1.660 -3.042 -4.554 10.174 +2.671 2.795 -0.202 -1.881 -3.270 -4.897 10.174 +2.599 3.058 -0.128 -1.828 -3.237 -4.947 10.174 +2.529 2.586 -0.108 -1.698 -3.144 -4.397 9.410 +2.647 2.651 -0.116 -1.752 -3.066 -4.656 9.410 +2.286 2.316 -0.370 -1.599 -3.079 -4.146 9.410 +2.498 2.666 -0.178 -1.597 -3.104 -4.510 9.410 +3.817 4.381 -0.111 -3.507 -6.321 -3.940 9.410 +2.075 2.888 -0.333 -1.365 -2.772 -3.872 9.410 +3.314 4.574 -0.453 -2.365 -4.448 -3.112 9.410 +1.645 2.181 -0.212 -0.929 -1.905 -3.051 9.410 +1.218 1.910 -0.221 -0.387 -1.474 -2.100 9.410 +0.188 2.139 -0.581 -1.350 -1.379 -1.746 9.410 +0.098 1.603 -0.247 -0.127 -0.258 -0.617 9.410 +0.292 1.025 -0.194 0.017 -0.198 -0.330 9.410 +-0.181 1.301 -0.148 0.147 0.365 0.262 9.410 +-0.411 0.935 -0.371 -0.171 -0.213 -0.520 9.410 +-0.188 0.979 -0.298 -0.330 1.104 -0.265 9.410 +-0.062 1.047 -0.200 0.098 0.050 -0.298 9.410 +-0.099 1.320 -0.109 0.054 0.094 -0.152 9.410 +0.068 1.007 -0.588 -0.285 -0.506 -0.507 9.410 +0.280 1.041 0.161 0.550 -0.017 -0.356 9.410 +0.600 1.250 -0.046 0.078 -0.313 -0.586 9.410 +-0.969 0.178 -0.681 -0.298 -0.591 -0.962 9.410 +0.248 1.015 -0.098 0.102 -0.066 -0.428 9.410 +-0.032 0.544 -0.340 0.055 -0.178 0.132 9.410 +0.483 0.713 0.147 0.516 0.152 0.215 9.410 +-0.215 0.711 -0.048 0.153 0.156 1.585 9.410 +0.628 0.416 0.014 -0.224 0.347 0.117 9.410 +-0.144 0.152 -0.037 0.227 0.277 -0.478 9.410 +-0.080 0.372 0.057 0.473 0.361 0.165 9.410 +0.090 0.368 0.062 0.335 0.473 0.146 9.410 +-0.452 -0.158 -0.202 0.143 0.298 0.511 9.410 +-0.358 0.037 0.061 0.126 0.694 0.354 9.410 +-0.159 -0.211 0.235 0.453 0.705 0.638 9.410 +-0.237 0.240 -0.263 -0.680 0.661 0.077 9.410 +-0.729 -1.105 -0.406 0.144 0.236 -0.847 9.410 +-0.477 -0.722 -0.079 0.829 0.582 -0.051 9.410 +-0.904 -1.031 -0.423 -0.193 -0.004 0.293 9.410 +0.181 -0.937 -0.132 -0.015 0.329 1.207 9.410 +-0.349 -1.210 -0.589 -0.039 0.323 0.144 9.410 +-0.305 -0.841 0.101 0.240 1.038 0.839 9.410 +0.772 -0.717 0.211 -0.079 1.327 1.869 9.410 +0.663 -0.943 0.298 0.637 1.697 2.185 9.410 +0.660 -0.873 0.277 0.650 1.799 2.689 9.410 +0.299 -1.028 0.411 0.528 1.694 3.182 9.410 +0.744 -0.919 0.350 0.840 2.130 3.672 9.410 +0.349 -1.019 0.464 0.572 1.946 3.175 9.410 +0.801 -0.918 0.637 0.849 2.109 3.876 9.410 +0.953 -0.964 0.761 1.250 2.763 3.573 9.410 +0.173 -1.286 0.198 0.392 1.836 3.740 9.410 +0.174 -1.480 0.265 0.350 2.012 3.301 9.410 +0.304 -1.353 0.325 1.193 2.026 3.104 9.410 +-0.080 -1.746 0.179 0.306 1.823 2.843 9.410 +0.079 -1.723 0.112 0.357 1.639 2.774 9.410 +-0.307 -2.235 0.051 -0.037 1.221 2.398 9.410 +-0.509 -1.925 -0.195 0.033 1.301 1.842 9.410 +-0.230 -1.974 -0.394 -0.026 0.882 1.447 9.410 +-0.661 -2.426 -0.449 -0.171 0.482 1.076 9.410 +-1.140 -2.630 -1.033 -1.056 -0.439 0.204 9.410 +-1.332 -2.678 -0.986 -0.741 -0.111 -0.005 9.410 +-1.435 -2.192 -0.968 -0.776 -0.177 -0.110 9.410 +-1.209 -2.347 -0.904 -1.145 -0.752 -0.378 9.410 +-0.881 -2.206 -0.905 -0.955 -0.816 -0.746 9.410 +-1.552 -2.454 -1.072 -0.916 -0.538 -0.589 9.410 +-0.846 -1.727 -1.043 0.246 0.396 -0.676 9.410 +-1.513 -2.553 -0.830 -0.698 -0.654 -0.330 9.410 +-1.485 -2.322 -1.141 -0.811 -0.673 -0.992 9.410 +-0.602 -1.810 -0.549 -0.234 -0.171 0.032 9.410 +-1.393 -1.772 -0.853 -0.551 -0.624 -0.381 9.410 +-0.813 -1.383 -0.324 0.306 -0.092 0.124 9.410 +-0.835 -1.655 -0.387 -0.253 -0.174 -0.282 9.410 +-0.430 -0.911 -0.251 -0.276 0.096 -0.349 9.410 +-0.209 -0.612 -0.371 0.230 -0.133 -0.275 9.410 +-0.655 -1.172 0.745 0.359 0.917 -0.153 9.410 +-0.295 -0.524 -0.082 0.167 -0.068 0.015 9.410 +-0.316 -0.187 -0.570 0.047 -0.176 0.123 9.410 +-14.085 -13.855 -2.077 -12.968 -12.856 -12.639 9.410 +-0.294 -0.947 -0.672 -0.129 -0.417 -0.348 9.410 +-0.169 0.039 0.044 -0.041 -0.148 -0.150 9.410 +0.254 1.009 0.185 0.167 -0.020 0.010 9.410 +0.137 0.650 0.328 0.299 -0.056 -0.034 9.410 +0.963 1.399 0.339 0.241 0.041 0.317 9.410 +0.080 -0.394 0.136 0.253 0.123 0.158 9.410 +0.188 1.063 0.161 -0.026 0.070 0.285 9.410 +-0.073 0.674 0.119 0.305 -0.010 0.463 9.410 +-0.107 0.671 -0.021 -0.268 0.053 0.239 9.410 +-0.263 0.562 0.052 0.863 0.361 0.906 9.410 +-0.270 0.754 -0.068 -0.247 -0.310 0.103 9.410 +-0.018 0.896 -0.233 -0.515 -0.486 -0.265 9.410 +0.605 1.389 0.119 -0.501 -0.777 -0.883 9.410 +0.960 1.815 0.062 -0.707 -0.898 -1.365 9.410 +1.576 2.005 0.088 -1.191 -1.007 -2.302 9.410 +1.768 2.396 0.109 -1.164 -1.895 -2.554 9.410 +1.913 2.122 -0.197 -1.695 -2.702 -3.715 9.410 +2.356 3.080 0.353 -1.227 -2.420 -3.467 9.410 +2.527 2.661 0.022 -1.617 -3.001 -4.210 9.410 +1.741 2.275 -0.377 -2.427 -3.214 -4.599 9.410 +2.570 2.667 0.128 -1.393 -2.697 -3.711 9.410 +2.201 1.542 -0.423 -1.731 -2.901 -3.831 8.262 +2.161 2.073 -0.197 -1.619 -2.448 -3.906 8.262 +2.262 1.917 -0.373 -1.788 -2.931 -4.185 8.262 +1.947 1.954 -0.188 -1.368 -2.580 -3.710 8.262 +3.682 3.935 -0.097 -1.304 -4.626 -3.357 8.262 +1.519 1.868 -0.195 -1.098 -2.141 -2.926 8.262 +2.308 2.417 -1.023 -2.307 -3.739 -2.865 8.262 +1.177 1.039 -0.376 -0.766 -1.539 -2.157 8.262 +0.358 1.156 -0.408 -0.391 -1.100 -1.442 8.262 +-0.240 0.582 -0.390 -0.246 -0.547 -0.207 8.262 +-0.898 0.485 -0.499 -0.204 -0.168 -0.034 8.262 +-0.890 0.335 -0.154 0.664 0.737 0.652 8.262 +0.072 1.282 -0.116 1.745 2.087 1.546 8.262 +-0.671 0.663 0.029 0.300 1.127 1.112 8.262 +-0.427 0.676 -0.004 0.785 0.676 1.140 8.262 +-1.928 0.154 -0.417 0.203 0.442 -0.470 8.262 +-0.955 0.379 -0.358 0.295 0.251 -0.137 8.262 +-0.770 0.591 -0.165 0.411 0.071 0.141 8.262 +-0.782 1.233 -0.367 0.962 0.325 0.349 8.262 +-0.475 0.470 -0.169 0.120 0.316 0.250 8.262 +-0.247 0.367 -0.225 0.316 0.322 0.823 8.262 +-0.417 0.551 -0.002 0.687 0.577 0.390 8.262 +-0.298 0.685 -0.391 0.055 0.348 -0.124 8.262 +-0.035 0.935 -0.154 1.101 0.857 0.050 8.262 +-0.116 0.275 -0.100 0.977 0.292 -0.003 8.262 +-0.457 0.029 -0.226 0.205 0.134 -0.300 8.262 +-0.510 -0.094 -0.355 0.191 0.241 0.479 8.262 +-0.583 -0.070 -0.118 0.145 -0.020 -0.234 8.262 +-0.257 0.246 -0.103 0.019 0.638 -0.247 8.262 +-0.233 -0.034 0.036 0.213 0.665 -0.143 8.262 +-0.840 -0.434 -0.164 0.387 0.194 0.063 8.262 +-1.251 -0.287 -0.316 -0.066 0.208 -0.299 8.262 +-0.241 -0.423 -0.094 0.073 0.126 -0.377 8.262 +-1.091 -0.863 -0.338 0.230 0.217 -0.229 8.262 +-0.564 -0.421 -0.345 0.125 -0.321 -0.272 8.262 +-0.466 -1.297 -0.246 -0.495 -0.465 -0.747 8.262 +-0.725 -0.902 -0.509 0.035 0.158 -0.908 8.262 +-0.439 -0.865 -0.420 -0.442 0.507 -0.548 8.262 +-0.097 -0.628 -0.206 0.160 0.630 0.336 8.262 +0.428 -0.145 0.172 0.734 0.874 1.379 8.262 +0.149 -0.232 0.062 0.873 0.886 1.663 8.262 +0.422 -0.344 0.371 1.260 1.369 2.313 8.262 +0.554 -0.008 0.422 0.822 1.668 1.835 8.262 +0.266 -0.300 0.192 0.399 1.957 2.542 8.262 +0.347 -0.700 0.272 0.477 1.461 2.791 8.262 +0.474 -0.800 0.300 0.372 1.545 3.521 8.262 +0.369 -0.995 0.179 0.215 1.462 2.757 8.262 +0.014 -1.009 0.279 0.538 1.862 2.537 8.262 +0.282 -1.213 0.108 -0.640 1.251 2.719 8.262 +-0.022 -1.555 0.070 0.280 1.529 3.448 8.262 +-0.451 -1.689 -0.424 0.114 1.108 2.192 8.262 +-0.130 -1.619 -0.109 0.307 1.155 2.528 8.262 +-0.065 -1.487 -0.045 0.204 1.261 2.024 8.262 +-0.180 -1.800 -0.477 -0.507 0.612 1.824 8.262 +-0.617 -2.005 -0.580 -0.454 0.305 0.877 8.262 +-0.987 -2.027 -0.756 -0.166 0.051 0.345 8.262 +-1.320 -2.237 -1.050 -0.533 -0.444 -0.171 8.262 +-1.148 -1.758 -0.816 -0.706 -0.665 -1.038 8.262 +-2.098 -2.006 -1.096 -1.053 -0.977 -2.005 8.262 +-1.247 -2.028 -1.248 -1.364 -0.581 -1.744 8.262 +-1.311 -2.087 -0.981 -1.478 -1.594 -1.934 8.262 +-1.906 -2.145 -1.079 -1.056 -1.171 -1.795 8.262 +-1.340 -1.625 -0.735 -0.857 -0.462 -1.023 8.262 +-1.662 -1.888 -0.827 -0.519 -0.552 -0.803 8.262 +-1.228 -1.765 -0.865 -0.618 -0.743 -0.982 8.262 +-1.118 -1.366 -0.528 -0.374 -0.189 -0.436 8.262 +-0.922 -1.210 -0.397 -0.061 -0.208 -0.444 8.262 +-0.627 -0.689 -0.230 0.153 0.042 -0.262 8.262 +-1.078 -1.255 -0.481 -0.106 -0.448 -0.790 8.262 +-0.427 -0.836 -0.001 0.403 0.201 -0.101 8.262 +-0.545 -0.651 -0.084 0.451 0.237 0.093 8.262 +-0.909 -1.612 -0.026 0.156 0.060 -0.675 8.262 +-0.397 0.248 0.060 0.604 0.483 0.282 8.262 +0.035 0.023 0.318 0.913 0.755 0.358 8.262 +-0.686 -0.671 -0.817 0.345 -0.144 0.202 8.262 +0.066 0.211 0.398 0.813 0.945 0.785 8.262 +-0.034 -0.674 0.135 0.601 0.525 1.076 8.262 +-0.147 -0.050 0.330 0.575 0.442 0.832 8.262 +-0.224 0.403 0.238 0.566 0.529 1.021 8.262 +-0.651 -0.632 0.202 0.482 0.444 0.855 8.262 +0.013 0.175 0.202 0.583 0.847 1.312 8.262 +-0.755 -0.144 -0.005 0.414 0.569 1.020 8.262 +-0.797 0.024 0.036 0.401 0.915 1.607 8.262 +-0.829 0.249 0.248 0.842 1.514 1.879 8.262 +-1.271 -0.026 0.213 0.701 1.339 2.104 8.262 +-0.748 0.500 0.106 0.865 1.400 1.820 8.262 +-0.346 0.579 0.137 0.199 0.393 1.536 8.262 +-0.940 0.489 -0.240 -0.268 0.082 0.056 8.262 +0.455 0.855 -0.050 -0.339 -0.492 -0.487 8.262 +1.403 1.227 -0.061 -0.687 -1.177 -1.252 8.262 +1.367 1.444 -0.024 -0.925 -1.453 -1.768 8.262 +0.857 1.923 -0.509 -1.472 -2.598 -3.131 8.262 +1.565 1.789 -0.427 -1.509 -2.645 -3.357 8.262 +2.096 1.837 -0.205 -1.707 -2.607 -2.770 8.262 +2.272 2.056 -0.063 -1.437 -2.662 -3.542 8.262 +2.109 2.094 -0.318 -1.655 -2.735 -3.910 8.262 +1.992 1.458 -0.439 -1.551 -2.744 -3.743 6.741 +1.775 1.008 -0.489 -1.776 -2.900 -3.673 6.741 +1.408 0.981 -0.527 -1.731 -2.677 -3.487 6.741 +1.591 0.612 -0.479 -1.780 -2.915 -3.847 6.741 +3.325 2.429 -0.489 -2.285 -3.936 -1.946 6.741 +0.743 0.628 -0.772 -1.950 -2.456 -3.005 6.741 +1.606 1.103 -0.940 -1.714 -3.080 -1.942 6.741 +0.240 0.057 -0.760 -0.928 -1.515 -1.563 6.741 +-0.497 -0.283 -0.811 -0.978 -1.057 -1.011 6.741 +-0.952 -0.244 -0.659 0.047 -0.151 -0.156 6.741 +-1.266 -0.506 -0.733 0.290 0.158 1.144 6.741 +-1.562 -0.316 -0.179 0.928 1.261 2.131 6.741 +-1.782 -0.509 -0.149 0.881 1.656 2.794 6.741 +-1.799 -0.411 -0.191 1.660 1.569 2.032 6.741 +-1.632 -0.542 -0.224 0.751 1.270 1.581 6.741 +-1.619 -0.341 -0.468 0.383 0.694 0.381 6.741 +-1.170 -0.054 -0.049 0.833 1.223 1.543 6.741 +-1.285 -0.438 -0.372 0.354 0.567 0.226 6.741 +-1.796 -0.210 -0.186 0.763 1.653 1.219 6.741 +-1.035 -0.578 -0.430 0.464 0.372 1.216 6.741 +-0.533 0.151 0.038 0.870 0.843 1.278 6.741 +-0.681 0.130 -0.160 0.632 0.529 1.178 6.741 +-0.909 -0.290 -0.121 0.660 0.421 0.450 6.741 +0.048 0.584 -0.189 1.255 1.034 0.425 6.741 +-0.733 -0.071 -0.254 0.353 0.275 0.234 6.741 +-0.700 -0.225 -0.244 0.455 0.339 -0.067 6.741 +-0.066 0.984 0.741 1.289 0.937 0.288 6.741 +10.982 10.578 5.089 13.247 12.113 6.727 6.741 +-0.979 -0.421 -0.481 -0.227 -0.525 -0.642 6.741 +-0.349 0.068 -0.146 0.466 -0.181 -0.523 6.741 +-0.531 -0.161 -0.074 0.161 0.110 -0.832 6.741 +-0.802 0.088 -0.268 0.175 0.135 -0.515 6.741 +-0.717 -0.369 -0.341 0.313 -0.120 -1.152 6.741 +-0.848 -0.685 -0.389 -0.156 -0.311 -0.500 6.741 +-1.002 -1.124 -0.539 -0.696 -0.853 -1.366 6.741 +-0.990 -0.420 -0.661 -0.472 -0.761 -2.028 6.741 +-0.757 -1.268 -0.803 -1.236 -0.717 -2.345 6.741 +-0.200 -0.273 -0.499 -0.317 -0.610 -1.301 6.741 +-0.465 -0.338 -0.530 -0.398 -0.791 -0.122 6.741 +-0.285 -0.274 -0.337 -0.296 -0.180 -0.037 6.741 +0.144 -0.317 -0.278 -0.030 0.090 0.896 6.741 +0.356 0.019 0.409 0.704 1.307 1.203 6.741 +0.211 -0.271 0.167 1.255 1.303 1.715 6.741 +0.700 -0.314 0.469 1.255 1.616 2.471 6.741 +1.278 0.278 0.589 0.647 1.431 2.380 6.741 +0.277 -0.212 0.486 0.801 1.615 2.338 6.741 +1.152 -0.261 0.358 0.457 1.311 2.323 6.741 +1.484 -0.237 0.335 0.274 1.407 2.543 6.741 +-0.361 -1.219 -0.010 0.067 0.997 2.123 6.741 +-0.216 -0.801 -0.134 -0.219 1.127 2.039 6.741 +-0.064 -1.394 -0.274 -0.301 0.529 1.277 6.741 +-0.555 -1.312 -0.281 -0.524 0.723 0.734 6.741 +-0.506 -1.040 -0.225 0.146 0.631 1.393 6.741 +-0.367 -1.349 -0.514 -0.358 0.404 1.180 6.741 +-0.496 -1.189 -0.386 -0.689 0.057 0.269 6.741 +-1.322 -1.756 -0.820 -0.807 -0.487 -0.764 6.741 +-0.927 -0.952 -0.873 -0.633 -0.855 -1.263 6.741 +-1.244 -1.784 -1.150 -1.220 -1.540 -1.845 6.741 +-0.954 -1.519 -0.905 -1.204 -1.356 -2.207 6.741 +-0.883 -1.132 -0.941 -0.790 -1.548 -2.382 6.741 +-1.879 -2.551 -1.710 -2.059 -2.692 -3.058 6.741 +-1.993 -2.216 -1.473 -1.563 -1.808 -3.022 6.741 +-1.544 -1.460 -1.033 -0.402 -1.200 -1.913 6.741 +-1.682 -1.204 -1.048 -0.924 -1.166 -1.293 6.741 +-1.645 -1.414 -1.097 -0.819 -1.328 -1.820 6.741 +-0.656 -0.499 -0.237 0.173 -0.292 -1.280 6.741 +-0.705 -0.875 -0.561 -0.154 -0.627 -0.899 6.741 +-1.314 -1.292 -0.609 -0.243 -0.648 -1.086 6.741 +-0.949 -0.952 -0.256 0.171 -0.383 -0.847 6.741 +-0.693 -0.932 -0.133 0.308 -0.020 -0.156 6.741 +-0.693 -0.672 0.013 0.160 -0.146 -0.433 6.741 +9.838 10.099 5.821 11.953 11.369 5.582 6.741 +-0.385 -0.002 0.493 0.662 0.432 0.543 6.741 +-0.608 -0.414 -0.005 0.677 0.564 0.463 6.741 +-0.353 -0.122 0.382 0.939 0.564 0.900 6.741 +-0.832 -0.493 0.001 0.642 0.468 1.410 6.741 +-0.365 -0.091 0.176 0.463 0.886 1.447 6.741 +-0.524 -0.263 -0.126 0.973 0.778 1.816 6.741 +0.011 0.318 0.574 1.379 0.905 2.106 6.741 +-0.878 -0.463 -0.078 0.583 0.792 1.754 6.741 +-1.594 -0.908 -0.261 0.440 0.894 1.826 6.741 +-1.284 0.192 -0.028 0.603 1.058 2.176 6.741 +-1.620 -0.632 -0.047 0.803 1.688 2.480 6.741 +-1.610 -0.596 -0.106 0.787 1.622 2.916 6.741 +-1.005 -0.634 -0.245 1.303 2.099 3.515 6.741 +-3.183 -0.997 -0.128 0.745 1.167 2.863 6.741 +-1.006 -0.291 -0.096 0.430 1.389 1.705 6.741 +-0.537 0.153 -0.110 -0.064 0.208 1.198 6.741 +-0.136 -0.077 -0.291 -0.356 -0.367 0.164 6.741 +0.084 0.278 -0.550 -0.839 -0.665 -0.710 6.741 +0.572 0.814 -0.434 -1.039 -1.732 -1.445 6.741 +1.054 0.833 -0.451 -1.129 -2.123 -2.436 6.741 +1.312 0.882 -0.560 -1.271 -2.240 -2.506 6.741 +1.475 1.302 -0.390 -1.640 -2.937 -3.472 6.741 +1.411 0.731 -0.819 -1.991 -2.954 -3.552 6.741 +1.926 1.397 -0.456 -1.831 -2.779 -3.473 6.741 +1.689 0.611 -0.194 -1.148 -2.098 -2.462 4.839 +1.110 0.394 -0.337 -1.343 -2.221 -2.574 4.839 +1.453 0.375 -0.282 -1.430 -2.187 -2.616 4.839 +0.588 -0.295 -0.796 -1.704 -2.410 -2.713 4.839 +1.742 0.045 -0.317 -2.339 -3.494 -1.986 4.839 +0.143 -0.859 -0.894 -1.233 -1.553 -1.729 4.839 +0.403 -0.317 -0.491 -0.926 -1.369 -0.795 4.839 +0.354 -0.598 -0.480 -0.395 -0.397 0.102 4.839 +-1.098 -0.851 -0.707 -0.163 -0.032 0.665 4.839 +-1.643 -1.136 -0.535 0.196 0.922 1.950 4.839 +-2.106 -1.314 -0.726 0.694 1.067 2.327 4.839 +-2.029 -1.219 -0.246 1.306 2.158 3.725 4.839 +-0.626 0.448 -0.491 3.496 4.742 4.035 4.839 +-2.847 -1.811 -0.512 1.234 2.262 3.793 4.839 +-2.596 -1.559 -0.514 1.148 2.128 3.090 4.839 +-2.020 -1.173 -0.237 1.318 1.923 2.841 4.839 +-1.874 -1.134 -0.210 1.184 1.828 2.628 4.839 +-1.382 -0.729 -0.184 0.960 1.305 2.714 4.839 +-5.742 -4.033 -0.354 1.542 0.734 2.134 4.839 +-1.617 -0.897 -0.309 0.846 1.260 1.726 4.839 +-1.292 -1.199 -0.077 0.913 1.090 1.723 4.839 +-1.101 -0.427 0.013 1.095 1.277 1.191 4.839 +-0.878 -0.144 0.034 1.475 0.873 1.047 4.839 +0.089 0.545 -0.099 2.235 1.623 0.815 4.839 +-1.089 -0.416 -0.155 0.608 0.532 1.288 4.839 +-1.047 0.210 -0.129 0.711 0.329 0.532 4.839 +-1.466 0.054 -0.016 0.732 0.411 -0.476 4.839 +-0.680 0.212 0.339 0.827 0.428 -0.118 4.839 +-0.424 -0.021 -0.253 0.460 -0.060 -0.487 4.839 +-1.287 -0.529 -0.480 -0.090 -0.284 -1.063 4.839 +-1.151 -0.413 -0.651 -0.262 -1.103 -1.453 4.839 +-0.832 0.129 -0.468 0.659 0.014 -1.473 4.839 +-1.092 0.120 -0.379 -0.120 -0.769 -1.305 4.839 +-0.749 -0.324 -0.265 0.034 -0.535 -1.580 4.839 +-0.554 -0.019 -0.445 0.036 -1.036 -1.897 4.839 +-1.142 -0.478 -0.960 -1.124 -1.510 -3.102 4.839 +-0.272 0.592 -0.358 -0.675 -1.498 -2.747 4.839 +0.558 -0.203 -0.495 -0.144 -1.047 -2.044 4.839 +-0.391 0.096 -0.601 -0.467 -0.992 -1.481 4.839 +-0.361 0.023 -0.204 -0.106 -0.704 -0.092 4.839 +0.886 0.450 0.017 -0.161 0.143 0.223 4.839 +-0.155 -0.062 -0.467 0.335 0.082 0.028 4.839 +0.330 0.406 -0.181 0.237 0.370 0.964 4.839 +0.303 0.215 0.334 0.477 1.136 1.713 4.839 +0.682 0.460 0.498 0.490 1.681 1.936 4.839 +1.082 1.093 0.324 0.403 1.284 2.714 4.839 +1.120 0.975 0.763 0.767 1.260 2.259 4.839 +0.045 -0.306 0.611 0.437 1.308 2.091 4.839 +0.928 0.733 0.296 0.417 1.101 2.219 4.839 +-0.481 -0.658 -0.169 0.258 0.147 1.747 4.839 +-0.166 -0.190 -0.265 -0.515 0.286 1.209 4.839 +-0.130 -0.308 -0.099 -0.240 0.419 1.942 4.839 +0.453 0.408 0.277 0.191 0.922 1.551 4.839 +-0.561 -0.650 -0.532 -0.755 -0.131 0.311 4.839 +-0.829 -0.705 -0.737 -0.938 -0.765 -0.585 4.839 +-1.200 -0.807 -0.833 -0.949 -0.934 -1.195 4.839 +-0.639 -0.796 -0.874 -1.200 -1.398 -2.285 4.839 +-0.652 -1.068 -0.944 -1.063 -1.542 -2.387 4.839 +-1.213 -1.128 -1.136 -1.362 -2.080 -2.938 4.839 +-1.604 -1.420 -1.394 -1.508 -2.365 -3.681 4.839 +-1.432 -1.073 -1.197 -1.349 -2.318 -3.940 4.839 +-2.129 -1.168 -1.281 -1.250 -2.289 -3.621 4.839 +-1.649 -1.220 -1.112 -1.259 -2.064 -3.192 4.839 +-1.720 -0.995 -0.906 -0.342 -1.473 -2.548 4.839 +-0.979 -0.394 -0.466 -0.024 -1.053 -2.098 4.839 +-1.593 -0.902 -0.859 -0.574 -0.554 -1.853 4.839 +-0.536 0.047 -0.134 0.174 -0.448 -1.390 4.839 +-0.787 -0.300 -0.390 0.106 -0.582 -1.298 4.839 +-1.041 -0.755 -0.461 0.096 -0.539 -1.130 4.839 +-0.899 -0.650 -0.041 0.245 -0.250 -0.602 4.839 +-1.029 -0.329 -0.442 0.775 -0.073 -0.093 4.839 +-13.084 -11.733 -6.502 -9.981 -10.535 -5.617 4.839 +-0.597 -0.351 -0.223 0.810 0.545 0.583 4.839 +-0.393 0.186 0.793 1.176 1.176 1.389 4.839 +-1.152 -0.042 0.401 1.249 1.076 1.464 4.839 +-0.602 -0.365 0.476 1.316 1.383 1.513 4.839 +-1.507 -0.460 -0.002 1.178 1.939 2.216 4.839 +-11.786 -12.160 -4.904 -14.646 -14.961 0.835 4.839 +-1.461 -0.961 -0.196 1.041 1.481 2.818 4.839 +-1.600 -0.449 0.360 1.292 1.807 3.419 4.839 +-1.628 -0.717 0.330 1.477 2.222 3.599 4.839 +-1.769 -0.548 0.403 1.566 2.599 3.802 4.839 +-1.959 -1.005 0.147 1.515 2.697 4.112 4.839 +-2.254 -0.904 0.106 1.687 3.404 4.703 4.839 +-2.512 -1.366 -0.124 1.413 2.878 4.745 4.839 +-2.310 -1.475 -0.274 0.965 2.298 3.952 4.839 +-1.754 -0.975 -0.152 0.688 1.811 3.309 4.839 +-1.271 -0.958 -0.213 0.617 1.248 2.423 4.839 +-0.806 -0.606 -0.203 0.197 0.719 1.791 4.839 +-0.230 -0.284 -0.144 0.266 -0.117 0.840 4.839 +0.478 -0.119 -0.135 -0.502 -0.428 0.124 4.839 +0.148 -0.091 -0.595 -1.083 -1.239 -1.449 4.839 +1.102 0.237 -0.344 -1.196 -1.510 -1.679 4.839 +1.015 0.412 -0.159 -1.090 -1.589 -1.513 4.839 +1.572 0.740 -0.172 -1.253 -1.921 -2.274 4.839 +1.779 0.803 0.004 -0.935 -2.097 -2.024 4.839 +1.487 -0.338 -0.292 -1.251 -2.089 -1.812 2.659 +1.361 -0.348 -0.381 -0.925 -1.816 -2.057 2.659 +1.225 -0.543 -0.442 -1.410 -1.859 -1.358 2.659 +1.370 -0.440 -0.175 -0.780 -1.343 -1.345 2.659 +-0.890 -3.642 -0.414 -3.730 -4.459 -0.793 2.659 +0.501 -0.833 -0.150 -0.307 -0.901 -0.240 2.659 +-0.372 -2.287 -1.397 -0.844 -0.797 0.568 2.659 +-1.067 -1.529 -0.600 -0.299 -0.070 0.562 2.659 +-1.221 -1.736 -0.480 0.138 0.855 2.273 2.659 +-1.859 -1.918 -0.523 0.747 1.509 2.971 2.659 +-2.564 -2.435 -0.761 0.685 1.662 3.404 2.659 +-2.678 -2.454 -0.572 1.540 2.534 4.194 2.659 +-3.006 -2.389 -0.415 1.736 3.068 5.120 2.659 +-3.050 -2.387 -0.340 1.844 3.092 4.945 2.659 +-2.303 -2.159 -0.095 1.866 3.004 4.646 2.659 +-2.665 -2.168 -0.364 1.454 2.203 3.731 2.659 +-2.035 -1.604 -0.143 1.519 2.507 4.192 2.659 +-2.020 -1.454 -0.132 1.396 2.188 3.659 2.659 +-4.447 -3.767 -0.346 2.616 2.474 3.131 2.659 +-1.744 -1.063 -0.091 1.267 1.729 2.621 2.659 +-1.475 -1.158 0.099 1.351 1.920 2.198 2.659 +-1.539 -1.316 -0.297 1.048 1.219 1.847 2.659 +-0.900 -0.640 -0.021 1.085 1.094 0.929 2.659 +-0.392 0.200 -0.343 1.851 1.768 1.192 2.659 +-1.054 -0.634 -0.294 0.663 0.006 0.634 2.659 +-1.393 -0.683 -0.340 0.433 0.345 -0.029 2.659 +-1.181 -0.528 -0.311 0.382 0.096 0.018 2.659 +-1.083 -0.541 -0.383 0.064 -0.346 -0.898 2.659 +-0.973 -0.292 -0.419 -0.107 -0.571 -1.154 2.659 +-0.217 -0.197 -0.232 0.641 -0.521 -1.336 2.659 +-1.708 -0.878 -1.032 -0.237 -1.257 -1.952 2.659 +-0.705 0.527 -0.553 0.252 -0.820 -1.877 2.659 +-0.531 -0.027 -0.331 -0.136 -1.122 -2.302 2.659 +-0.550 0.528 -0.063 0.190 -0.841 -2.108 2.659 +-0.812 -0.147 -0.680 -0.554 -1.843 -2.954 2.659 +-0.046 0.385 -0.463 -0.381 -1.870 -3.826 2.659 +-0.195 0.236 -0.603 -0.930 -2.163 -2.899 2.659 +-0.415 0.379 -0.666 -0.741 -2.030 -1.803 2.659 +-0.302 0.327 -0.534 -0.665 -1.489 -2.498 2.659 +0.308 0.797 -0.265 -0.229 -1.108 -1.417 2.659 +-4.731 -3.859 -3.090 -4.974 -5.523 0.137 2.659 +1.025 1.227 0.047 -0.284 -0.033 -0.169 2.659 +0.589 1.029 -0.058 -0.116 -0.879 -0.309 2.659 +0.415 0.971 -0.129 -0.071 0.033 0.980 2.659 +1.195 1.540 0.264 0.034 0.003 0.964 2.659 +0.801 0.756 0.199 -0.126 0.515 1.144 2.659 +1.225 1.441 0.558 0.282 0.644 1.650 2.659 +0.969 1.919 0.382 0.322 0.943 2.296 2.659 +1.118 1.311 0.521 -0.110 0.358 1.833 2.659 +0.898 1.838 0.389 -0.135 0.646 2.159 2.659 +0.617 0.724 0.051 0.013 -0.078 1.294 2.659 +0.786 0.887 0.110 -0.281 0.000 0.933 2.659 +0.444 0.594 -0.197 -0.923 -0.482 0.703 2.659 +0.091 0.290 -0.340 -0.572 -0.303 -0.227 2.659 +-0.330 0.025 -0.838 -1.298 -1.560 -1.721 2.659 +-0.485 -0.092 -0.885 -1.299 -1.611 -1.742 2.659 +-0.267 0.062 -0.939 -1.236 -1.998 -2.490 2.659 +-0.878 -0.316 -1.086 -1.418 -2.381 -3.394 2.659 +-0.948 -0.382 -1.252 -1.437 -2.759 -3.756 2.659 +-1.312 -0.391 -1.107 -1.625 -2.918 -3.958 2.659 +-1.147 -0.316 -1.410 -1.028 -3.142 -4.666 2.659 +-1.562 -0.545 -1.613 -1.760 -3.231 -4.846 2.659 +-1.713 -0.736 -1.629 -1.757 -3.131 -4.689 2.659 +-1.689 -0.685 -1.195 -1.180 -1.882 -3.707 2.659 +-1.333 -0.461 -0.998 -0.814 -2.052 -3.375 2.659 +-1.217 -0.363 -0.657 -0.274 -1.334 -2.684 2.659 +-1.097 -0.042 -0.544 -0.232 -1.313 -2.168 2.659 +-0.941 -0.101 -0.341 0.042 -0.574 -1.965 2.659 +-0.346 0.110 -0.044 0.215 -0.363 -1.432 2.659 +-0.764 0.211 0.019 0.963 -0.142 -0.436 2.659 +-0.527 0.355 0.407 0.633 0.044 -0.026 2.659 +9.128 10.538 5.102 12.060 11.367 5.679 2.659 +-0.438 0.216 0.678 1.109 0.822 1.160 2.659 +-0.522 0.401 0.426 1.708 1.210 1.614 2.659 +-0.162 -0.030 0.734 1.647 1.824 2.305 2.659 +-4.210 -2.694 0.364 0.675 1.837 2.251 2.659 +-0.466 0.252 0.901 2.348 2.446 3.044 2.659 +-1.107 -0.688 0.215 2.178 2.283 3.128 2.659 +-0.879 -0.238 0.711 2.076 2.727 3.722 2.659 +-2.019 -1.193 0.059 1.365 2.237 3.689 2.659 +-2.253 -1.330 0.112 1.420 2.413 4.686 2.659 +-2.092 -1.534 0.118 1.559 2.828 4.462 2.659 +-2.407 -1.365 0.139 1.791 3.211 5.632 2.659 +-2.817 -1.738 -0.012 1.748 3.493 5.991 2.659 +-2.618 -1.602 0.163 1.920 3.717 5.811 2.659 +-2.655 -1.795 -0.203 1.450 2.841 5.003 2.659 +-1.896 -1.389 0.098 1.554 2.508 4.750 2.659 +-1.485 -1.426 0.100 1.095 2.223 3.953 2.659 +-0.875 -1.167 -0.098 0.743 1.469 3.378 2.659 +-0.140 -0.821 -0.028 0.547 0.792 1.852 2.659 +-0.046 -0.101 -0.157 -0.133 0.217 1.655 2.659 +0.506 -0.786 -0.311 -0.596 -0.489 0.034 2.659 +0.912 0.195 -0.031 -0.530 -0.623 -0.131 2.659 +1.400 -0.091 0.003 -0.866 -1.207 -1.019 2.659 +1.415 -0.439 -0.251 -0.912 -1.583 -1.384 2.659 +1.481 -0.357 -0.364 -1.210 -2.023 -1.894 2.659 +1.655 -0.940 -0.054 -1.097 -1.030 -1.035 0.121 +1.324 -1.431 -0.262 -0.791 -1.531 -0.980 0.121 +1.571 -1.379 -0.121 -0.596 -1.208 -0.455 0.121 +0.875 -1.114 -0.111 -0.697 -0.528 0.014 0.121 +-1.417 -5.440 -0.046 -2.605 -2.504 0.975 0.121 +0.362 -1.456 -0.077 0.386 0.208 1.132 0.121 +-1.109 -4.836 -0.729 0.376 1.151 2.188 0.121 +-0.896 -2.262 -0.094 0.562 1.206 2.972 0.121 +-1.280 -2.691 -0.259 0.971 1.853 3.987 0.121 +-2.311 -3.045 -0.269 1.487 2.492 4.483 0.121 +-2.475 -3.298 -0.413 1.685 2.897 4.961 0.121 +-2.843 -3.093 -0.337 1.973 3.359 5.799 0.121 +-3.417 -3.488 -0.354 2.122 3.887 6.565 0.121 +-3.494 -3.054 -0.014 2.855 4.248 6.657 0.121 +-3.255 -3.465 -0.285 1.778 3.665 6.315 0.121 +-3.770 -3.629 -0.704 1.579 2.913 5.029 0.121 +-3.154 -2.921 -0.051 2.106 3.301 5.528 0.121 +-2.616 -2.895 -0.212 1.949 2.862 4.934 0.121 +-8.340 -8.057 0.044 3.197 1.657 4.917 0.121 +-2.083 -1.959 -0.097 1.878 2.375 3.996 0.121 +-2.143 -1.825 -0.139 1.586 1.976 3.690 0.121 +-2.051 -1.924 -0.116 1.214 1.515 2.999 0.121 +-1.613 -1.288 -0.143 1.167 1.168 2.114 0.121 +-0.025 0.490 -0.350 2.296 2.346 1.794 0.121 +-1.169 -0.947 -0.312 0.887 0.596 0.998 0.121 +-1.311 -1.095 -0.327 0.654 0.058 0.481 0.121 +-1.039 -0.277 0.013 0.792 0.013 -0.108 0.121 +-1.271 -1.005 -0.518 -0.040 -0.594 -1.001 0.121 +-0.319 -0.264 -0.457 0.216 -0.736 -1.649 0.121 +-0.704 -0.133 -0.537 0.121 -0.977 -1.580 0.121 +-0.578 0.098 -0.418 -0.243 -1.186 -2.637 0.121 +0.473 1.163 -0.623 0.873 -0.296 -3.006 0.121 +-0.413 0.320 -0.522 -0.382 -1.646 -3.662 0.121 +-0.969 0.044 -0.786 -0.591 -1.767 -3.368 0.121 +-0.361 0.787 -0.617 -0.705 -2.325 -4.107 0.121 +-0.223 0.325 -0.930 -1.121 -2.939 -4.675 0.121 +0.278 1.282 -0.693 -1.040 -2.512 -3.857 0.121 +-0.287 0.750 -0.876 -1.019 -2.767 -4.067 0.121 +-0.537 0.304 -1.020 -1.300 -2.880 -3.820 0.121 +-0.274 0.891 -0.634 -0.997 -2.150 -2.675 0.121 +0.737 1.294 -0.668 -1.197 -2.086 -2.610 0.121 +0.708 1.839 0.013 -0.543 -1.187 -1.267 0.121 +1.187 2.537 0.206 -0.311 -0.800 -0.596 0.121 +1.415 1.916 0.377 0.030 -0.378 0.239 0.121 +1.413 1.974 0.052 -0.418 -0.476 0.254 0.121 +1.362 1.935 0.248 -0.003 -0.218 0.941 0.121 +1.586 2.219 0.255 -0.535 -0.353 0.925 0.121 +1.532 2.580 0.645 0.057 0.107 1.449 0.121 +2.250 2.484 0.688 0.075 0.092 1.648 0.121 +1.076 1.995 0.241 -0.226 -0.077 0.911 0.121 +1.504 2.215 0.112 -0.421 -0.555 0.285 0.121 +0.839 1.744 0.053 -0.634 -0.462 0.399 0.121 +0.976 1.633 -0.219 -0.843 -1.182 -0.742 0.121 +-0.146 0.851 -0.761 -1.354 -1.584 -1.854 0.121 +0.346 1.101 -0.562 -1.595 -2.002 -2.075 0.121 +-0.924 0.638 -1.103 -1.612 -2.541 -2.600 0.121 +-0.476 0.710 -1.057 -1.724 -3.275 -3.232 0.121 +-1.088 0.438 -1.408 -1.806 -3.156 -3.868 0.121 +-0.815 0.765 -1.275 -1.802 -3.345 -4.404 0.121 +-1.003 0.512 -1.315 -1.400 -3.262 -4.826 0.121 +-1.245 0.317 -1.475 -1.734 -3.723 -5.264 0.121 +-1.378 0.124 -1.450 -1.530 -3.638 -4.662 0.121 +-0.734 0.708 -1.387 -0.650 -2.859 -4.944 0.121 +-1.801 -0.031 -1.269 -0.875 -2.759 -4.275 0.121 +-1.409 0.705 -0.930 -0.870 -2.445 -4.303 0.121 +-1.237 0.339 -0.653 -0.373 -1.688 -3.305 0.121 +-0.754 0.555 -0.479 0.208 -1.461 -2.786 0.121 +-1.202 -0.234 -0.745 -0.267 -1.131 -2.578 0.121 +-1.051 0.192 -0.613 -0.083 -1.011 -2.256 0.121 +-0.523 0.582 0.298 0.968 -0.048 -1.105 0.121 +-0.933 -0.154 0.473 0.626 -0.252 -1.483 0.121 +11.482 11.469 3.018 11.586 11.551 7.965 0.121 +-0.695 0.799 1.462 1.433 1.574 0.723 0.121 +-0.572 0.032 0.433 1.723 1.221 1.745 0.121 +-0.556 0.436 0.740 1.876 2.118 2.571 0.121 +-5.452 -3.532 0.667 0.081 1.133 2.968 0.121 +-0.937 -0.062 0.524 2.144 2.588 3.384 0.121 +-1.105 -0.526 0.774 2.508 2.979 4.333 0.121 +-1.365 -0.512 0.789 2.781 3.576 5.444 0.121 +-2.110 -1.571 0.084 2.142 2.983 4.796 0.121 +-2.044 -1.295 0.488 1.888 4.133 6.060 0.121 +-2.681 -1.883 0.155 2.172 3.650 6.009 0.121 +-2.567 -1.602 0.414 2.473 4.469 7.059 0.121 +-3.092 -2.159 0.080 2.341 4.299 7.076 0.121 +-3.002 -2.246 0.265 2.326 4.536 6.744 0.121 +-2.532 -2.281 0.417 2.274 4.313 5.943 0.121 +-2.525 -2.591 0.197 1.685 3.795 5.613 0.121 +-2.119 -1.992 0.242 1.664 3.110 5.559 0.121 +-1.466 -1.951 0.014 1.289 2.434 4.410 0.121 +-0.896 -1.552 0.080 0.688 1.618 3.508 0.121 +-0.076 -1.185 0.235 1.092 1.355 3.109 0.121 +0.332 -0.833 0.146 0.204 0.596 1.911 0.121 +0.747 -1.171 0.106 -0.359 0.559 1.175 0.121 +1.005 -1.121 -0.117 -0.506 -0.748 -0.810 0.121 +1.560 -0.975 -0.013 -0.761 -1.014 -0.285 0.121 +1.436 -1.685 -0.262 -1.695 -1.518 -0.778 0.121 +-0.407 -1.430 0.465 1.325 2.218 1.502 -1.082 +-0.341 -1.132 0.483 1.871 2.631 1.574 -1.082 +-0.229 -1.097 0.696 1.374 2.459 1.596 -1.082 +-0.046 -0.423 0.641 1.903 2.559 1.510 -1.082 +-1.290 -3.087 -0.221 -1.023 0.337 0.269 -1.082 +-0.903 -3.943 -0.675 -0.235 0.180 1.382 -1.082 +-3.161 -8.476 -1.968 0.230 1.354 2.780 -1.082 +-2.337 -4.649 -1.136 0.128 1.025 3.312 -1.082 +-2.576 -4.428 -0.752 1.044 2.334 4.938 -1.082 +-2.979 -4.615 -0.688 1.508 2.872 6.127 -1.082 +-3.726 -5.117 -1.025 1.650 3.229 6.430 -1.082 +-3.977 -5.007 -0.667 2.263 4.009 7.081 -1.082 +-1.964 -2.267 -0.645 4.957 6.852 7.872 -1.082 +-4.857 -5.042 -0.840 2.122 4.457 7.985 -1.082 +-4.282 -4.275 -0.402 2.763 4.697 7.767 -1.082 +-4.406 -4.624 -0.718 1.997 3.974 7.031 -1.082 +-4.382 -4.658 -1.003 1.817 3.530 6.506 -1.082 +-3.825 -4.057 -0.112 2.500 3.892 6.656 -1.082 +-7.345 -8.108 1.010 5.389 4.948 7.080 -1.082 +-2.867 -3.120 -0.355 1.804 2.658 5.146 -1.082 +-2.630 -3.086 -0.441 1.464 2.082 4.341 -1.082 +-2.750 -2.846 -0.525 1.210 1.605 3.284 -1.082 +-1.828 -2.071 -0.103 1.218 1.462 3.146 -1.082 +-1.684 -1.784 -0.889 1.120 1.080 1.533 -1.082 +-1.258 -1.589 -0.421 0.763 0.406 1.258 -1.082 +-1.685 -1.318 -0.581 0.547 -0.100 0.346 -1.082 +-1.129 -0.820 -0.421 0.407 -0.328 -0.441 -1.082 +-1.379 -0.746 -0.746 -0.022 -1.044 -1.584 -1.082 +-1.080 -0.514 -0.755 -0.309 -1.521 -2.321 -1.082 +-1.339 -0.772 -1.046 -0.641 -1.851 -3.364 -1.082 +-0.612 0.019 -0.713 -0.441 -2.106 -3.563 -1.082 +0.269 1.386 -0.940 0.630 -0.756 -3.758 -1.082 +-0.805 0.205 -1.049 -1.102 -2.855 -4.446 -1.082 +-0.773 0.531 -0.988 -1.012 -2.746 -4.392 -1.082 +-0.984 0.382 -1.414 -1.451 -3.457 -5.773 -1.082 +-0.465 0.932 -1.121 -1.232 -3.500 -6.166 -1.082 +-0.136 1.380 -1.095 -1.597 -3.614 -5.506 -1.082 +-0.345 1.168 -1.209 -1.479 -3.549 -4.150 -1.082 +-0.361 1.274 -1.135 -1.655 -3.671 -4.897 -1.082 +0.344 1.816 -0.781 -1.282 -2.552 -3.235 -1.082 +0.594 1.951 -0.818 -1.659 -3.080 -3.837 -1.082 +0.463 2.063 -0.758 -1.400 -2.293 -2.617 -1.082 +0.646 1.520 -0.955 -1.604 -2.520 -2.248 -1.082 +1.323 2.663 -0.154 -0.710 -1.302 -0.901 -1.082 +1.919 3.262 0.281 -0.619 -1.074 -0.662 -1.082 +0.818 2.261 -0.621 -1.331 -1.661 -0.885 -1.082 +1.574 2.755 -0.236 -0.983 -1.446 -0.386 -1.082 +1.629 2.446 -0.136 -0.584 -0.801 0.017 -1.082 +1.498 2.451 -0.236 -0.871 -1.124 -0.400 -1.082 +1.406 2.327 -0.229 -0.610 -0.907 0.068 -1.082 +1.073 2.436 -0.464 -1.262 -1.627 -0.668 -1.082 +0.507 2.039 -0.763 -1.538 -2.019 -1.198 -1.082 +0.824 2.272 -0.773 -1.399 -2.139 -1.544 -1.082 +0.333 2.045 -1.009 -1.714 -2.553 -2.103 -1.082 +0.121 1.843 -1.131 -1.633 -2.730 -2.619 -1.082 +-0.178 1.373 -1.001 -1.189 -2.019 -2.055 -1.082 +-0.100 1.308 -0.907 -0.965 -2.198 -2.134 -1.082 +-1.098 0.674 -1.805 -1.984 -3.340 -3.176 -1.082 +-0.410 1.400 -1.102 -1.209 -2.735 -3.104 -1.082 +-1.431 0.658 -1.943 -2.018 -3.989 -4.644 -1.082 +-1.388 0.687 -1.910 -1.721 -3.457 -4.771 -1.082 +-1.144 0.912 -1.494 -1.175 -3.114 -4.146 -1.082 +-1.485 0.637 -2.009 -1.536 -3.737 -5.042 -1.082 +-2.024 0.073 -1.847 -1.482 -3.087 -3.893 -1.082 +-1.463 0.509 -1.566 -1.264 -2.961 -4.243 -1.082 +-1.798 0.296 -1.578 -0.933 -2.748 -4.238 -1.082 +-1.129 0.426 -1.076 -0.598 -1.857 -3.254 -1.082 +-1.105 0.715 -0.713 -0.031 -1.330 -2.514 -1.082 +-1.292 0.380 -0.785 -0.128 -1.514 -2.665 -1.082 +-1.350 0.335 -0.675 0.271 -0.965 -2.100 -1.082 +-1.910 -0.700 -0.781 -0.663 -1.786 -2.443 -1.082 +-0.070 0.614 -1.065 0.747 -0.103 1.444 -1.082 +7.153 6.366 -0.492 5.169 5.806 4.376 -1.082 +-2.612 -1.679 -0.827 0.411 -0.169 -0.791 -1.082 +-1.126 -0.083 -0.044 1.339 1.442 0.929 -1.082 +-7.309 -5.908 -0.249 -1.556 -2.141 1.112 -1.082 +-1.454 -0.738 0.032 1.840 2.533 2.357 -1.082 +-2.263 -1.470 -0.103 2.077 2.885 3.950 -1.082 +-4.078 -3.351 -1.498 0.729 1.836 3.437 -1.082 +-3.098 -2.476 -0.435 1.687 3.071 4.034 -1.082 +-2.601 -2.152 0.065 2.427 3.991 4.276 -1.082 +-2.981 -2.297 0.143 2.618 4.483 5.225 -1.082 +-3.362 -3.028 -0.170 2.560 4.612 5.459 -1.082 +-3.765 -3.355 -0.191 2.639 5.058 7.902 -1.082 +-2.918 -2.930 -0.108 2.180 4.124 4.237 -1.082 +-1.206 -1.778 -0.158 0.864 1.473 0.634 -1.082 +-2.111 -2.411 -0.116 1.552 2.869 2.672 -1.082 +-2.758 -3.584 -0.458 1.656 3.441 4.549 -1.082 +-2.732 -3.750 -0.698 0.913 2.436 5.249 -1.082 +-2.802 -3.551 -1.380 -0.817 -0.054 1.047 -1.082 +-0.798 -1.268 -0.126 0.317 0.294 -0.677 -1.082 +-0.520 -1.042 0.298 0.851 1.414 0.309 -1.082 +-0.892 -0.912 0.306 1.394 2.023 0.274 -1.082 +-0.557 -0.991 0.468 1.475 2.531 0.976 -1.082 +-0.690 -1.311 0.421 1.526 2.274 0.827 -1.082 +-0.492 -1.242 0.557 1.635 2.328 1.540 -1.082 +-0.251 1.187 -0.290 -0.003 -0.630 -0.414 9.410 +-0.492 1.110 -0.094 0.558 0.480 0.363 9.410 +-0.712 -0.735 -0.112 0.190 0.844 0.195 9.410 +-0.412 -0.927 -0.175 0.135 0.608 0.770 9.410 +-1.302 -2.279 -0.969 -0.690 -0.299 -0.510 9.410 +-1.260 -1.701 -0.690 0.098 0.123 -0.465 9.410 +-0.401 0.474 0.169 0.298 0.499 0.336 9.410 +-0.329 0.727 -0.218 -0.256 -0.251 0.087 9.410 +-2.849 -1.437 -0.674 0.697 1.929 3.277 6.741 +-0.303 -0.644 -0.582 -1.082 -1.697 -2.738 6.741 +-1.566 -1.480 -1.284 -1.582 -2.608 -3.972 6.741 +-2.539 -0.771 0.077 1.671 2.723 4.279 6.741 diff --git a/SRT/CDB/alma/BACKENDS/XBackends/XBackends.xml b/SRT/CDB/alma/BACKENDS/XBackends/XBackends.xml deleted file mode 100644 index 26474dca1229c17c9128e1344b5bb1a37815e5c1..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/BACKENDS/XBackends/XBackends.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - diff --git a/SRT/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml b/SRT/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml new file mode 100644 index 0000000000000000000000000000000000000000..5159bf12d7bab9574639f1ace0cfed60ea3c4556 --- /dev/null +++ b/SRT/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml @@ -0,0 +1,27 @@ + + + + + + LLP Primario + PPP Primario + PLP Primario + HHP Primario + XKP Primario + CCG Gregoriano1 + KKG Gregoriano2 + WWG Gregoriano3 + QQG Gregoriano4 + CTR Gregoriano5 + MISTRAL Gregoriano6 + CCB BWG1 + XB BWG3 + + diff --git a/SRT/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml b/SRT/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..d48dd3cd6e38e1d150000f4cefba902fd7c10b4e --- /dev/null +++ b/SRT/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml @@ -0,0 +1,29 @@ + + + + + + + + CCG ROTATION

-88.70659

+ + KKG ROTATION

-159.8899

+ + WWG ROTATION

90.971610

+ + QQG ROTATION

162.771

+ + CTR ROTATION

55.373967

+ + MISTRAL ROTATION

-51.821170

+ + + +
diff --git a/SRT/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml b/SRT/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml deleted file mode 100644 index 9481f7890788a154112c0b50bd231433a4a1be92..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - ROTATION -88.70659 - ROTATION -88.70659 - ROTATION -159.8899 - ROTATION -159.8899 - ROTATION 90.971610 - ROTATION 90.971610 - ROTATION 162.771 - ROTATION 162.771 - ROTATION 55.373967 - ROTATION 55.373967 - ROTATION -51.821170 - ROTATION -51.821170 - - - - - - - - diff --git a/SRT/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml b/SRT/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..296a8bdb4fd4aa6eafdda595a452e432b2feb0e5 --- /dev/null +++ b/SRT/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml @@ -0,0 +1,19 @@ + + + + + + + + CCBROTATION

44.95999544939037931

+ + XB ROTATION

135.003886290282340384

+ +
diff --git a/SRT/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml b/SRT/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml deleted file mode 100644 index cfc134bab0b4b1337494a3c065e16c4d6b63f8ae..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ROTATION 44.95999544939037931 - ROTATION 44.95999544939037931 - ROTATION 135.003886290282340384 - ROTATION 135.003886290282340384 - - diff --git a/SRT/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml b/SRT/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..b553b2235d73efb25dadc42a0adf2536ee7ea531 --- /dev/null +++ b/SRT/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml @@ -0,0 +1,35 @@ + + + + + + + + LLPTX

0

+ LLPTZ

0

+ LLPRTHETA

0

+ + PPPTX

0

+ PPPTZ

0

+ PPPRTHETA

0

+ + PLPTX

0

+ PLPTZ

0

+ PLPRTHETA

0

+ + HHPTX

0

+ HHPTZ

0

+ HHPRTHETA

0

+ + XKPTX

0

+ XKPTZ

0

+ XKPRTHETA

0

+ +
diff --git a/SRT/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml b/SRT/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml deleted file mode 100644 index 086b3785bfad3d4cf429fc8d5b6703514c07c6f6..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - diff --git a/SRT/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml b/SRT/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..23ce8bfe37a250a8e223b8e0adfb0e1fa397d7af --- /dev/null +++ b/SRT/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml @@ -0,0 +1,99 @@ + + + + + + + + CCG TX

-1.5

+ CCG TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ CCG TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ CCG RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ CCG RY

-0.036111111111111108

+ CCG RZ

0

+ + CCG_AS_OFFTX

-1.5

+ CCG_AS_OFFTY

28.256852219272844, -0.002707044952, -0.009870218853, 0.000031617958

+ CCG_AS_OFFTZ

9.530113849340003, -0.169826241752, 0.000419997047, 0.000003985237

+ CCG_AS_OFFRX

-0.011392527142374848, -0.0001426193499425, 0.000039508844799, -0.000000131010010

+ CCG_AS_OFFRY

-0.03611111111111111

+ CCG_AS_OFFRZ

0

+ + KKG TX

-1.5

+ KKG TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ KKG TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ KKG RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ KKG RY

-0.036111111111111108

+ KKG RZ

0

+ + KKG_AS_OFFTX

-1.5

+ KKG_AS_OFFTY

28.256852219272844, -0.002707044952, -0.009870218853, 0.000031617958

+ KKG_AS_OFFTZ

9.530113849340003, -0.169826241752, 0.000419997047, 0.000003985237

+ KKG_AS_OFFRX

-0.011392527142374848, -0.0001426193499425, 0.000039508844799, -0.000000131010010

+ KKG_AS_OFFRY

-0.03611111111111111

+ KKG_AS_OFFRZ

0

+ + WWG TX

0

+ WWG TY

0

+ WWG TZ

0

+ WWG RX

0

+ WWG RY

0

+ WWG RZ

0

+ + QQG TX

0

+ QQG TY

0

+ QQG TZ

0

+ QQG RX

0

+ QQG RY

0

+ QQG RZ

0

+ + CTR TX

0

+ CTR TY

0

+ CTR TZ

0

+ CTR RX

0

+ CTR RY

0

+ CTR RZ

0

+ + MISTRAL TX

-1.5

+ MISTRAL TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ MISTRAL TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ MISTRAL RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ MISTRAL RY

-0.036111111111111108

+ MISTRAL RZ

0

+ + CCB TX

-1.5

+ CCB TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ CCB TZ

91.5590595452, -16.4202062811, 1.16941963489, -0.040640240455, 0.000733782714288, -6.62393455442e-06, 2.36410838911e-08

+ CCB RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ CCB RY

-0.036111111111111108

+ CCB RZ

0

+ + CCB_AS_OFFTX

-1.5

+ CCB_AS_OFFTY

28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958

+ CCB_AS_OFFTZ

9.530113849340003,-0.169826241752,0.000419997047,0.000003985237

+ CCB_AS_OFFRX

-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010

+ CCB_AS_OFFRY

-0.03611111111111111

+ CCB_AS_OFFRZ

0

+ + XB TX

-1.5

+ XB TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ XB TZ

-38.3143893309, 4.30888128547, -0.18265795755, 0.00350049382452, -3.17057523513e-05, 1.11006707448e-07

+ XB RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ XB RY

-0.036111111111111108

+ XB RZ

0

+ + XB_AS_OFF TX

-1.5

+ XB_AS_OFF TY

28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958

+ XB_AS_OFF TZ

7.92754535681,-1.73279985542,0.147346047014,-0.00516934108597,7.69094654954e-05,-4.0697957632e-07

+ XB_AS_OFF RX

-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010

+ XB_AS_OFF RY

-0.03611111111111111

+ XB_AS_OFF RZ

0

+ +
diff --git a/SRT/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml b/SRT/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml deleted file mode 100644 index 0cabed4bb1d96c2b14934d348734095c81fcd5e3..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ91.5590595452,-16.4202062811,1.16941963489,-0.040640240455,0.000733782714288,-6.62393455442e-06,2.36410838911e-08 - RX-0.0055555555555569409,0.00014822163433269445,0.000027586713698,-0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ7.92754535681,-1.73279985542,0.147346047014,-0.00516934108597,7.69094654954e-05,-4.0697957632e-07 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-38.3143893309,4.30888128547,-0.18265795755,0.00350049382452,-3.17057523513e-05,1.11006707448e-07 - RX-0.0055555555555569409,0.00014822163433269445,0.000027586713698,-0.000000077732053 - RY-0.036111111111111108 - RZ0 - - diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml b/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml deleted file mode 100644 index 73548c4571ccef21a864d505510fdfad00d48ef1..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - -0LEFT310.03.40 -0LEFT330.03.87 -0LEFT350.04.31 -0LEFT380.04.81 -0LEFT410.05.64 - -0RIGHT310.03.53 -0RIGHT330.04.17 -0RIGHT350.04.71 -0RIGHT380.05.58 -0RIGHT410.06.33 - -1LEFT1300.01.73 -1LEFT1400.01.65 -1LEFT1500.01.89 -1LEFT1600.02.15 -1LEFT1700.01.97 -1LEFT1800.02.28 - -1RIGHT1300.01.50 -1RIGHT1400.01.39 -1RIGHT1500.01.59 -1RIGHT1600.01.60 -1RIGHT1700.01.88 -1RIGHT1800.02.11 - - diff --git a/SRT/CDB/alma/MINORSERVO/PFP/PFP.xml b/SRT/CDB/alma/MINORSERVO/PFP/PFP.xml deleted file mode 100644 index 5503ee2fd943b7591bda5e05d2c3a118a987e09c..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/MINORSERVO/PFP/PFP.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SRT/CDB/alma/RECEIVERS/LO1/LO1.xml b/SRT/CDB/alma/RECEIVERS/LO1/LO1.xml deleted file mode 100644 index 657c8defb11850cbaf795f4c53f915169f428216..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/RECEIVERS/LO1/LO1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/SRT/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml b/SRT/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml deleted file mode 100644 index d8351a7e5981de5e9ef51366e2de5962924c79b7..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/SRT/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml b/SRT/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml deleted file mode 100644 index d91a8cd087b868033ab0f7384f31a749be9ddacf..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/SRT/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml b/SRT/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml deleted file mode 100755 index 31ba32dd6067e54cdc8edd2845a3f3d26b9e85a2..0000000000000000000000000000000000000000 --- a/SRT/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceCore.h b/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceCore.h index 6a466ae0346564d96345998f55f8ef046286b76f..47fd52762ef29924c471720d25ba3d176d7b92fc 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceCore.h +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceCore.h @@ -73,7 +73,7 @@ class SRTActiveSurfaceCore : public QThread int ActuatorStatusCalLabelCode; signals: - int setGUIActuatorColor(int, int, bool, bool); + int setGUIActuatorColor(int, int, bool, bool, bool); int setGUIAllActuators(bool callfromfunction = false); int setGUIcircleORradius(bool callfromfunction = false); int setGUIActuator(bool callfromfunction = false); @@ -82,6 +82,7 @@ class SRTActiveSurfaceCore : public QThread int setGUIActuatorStatusLabels(); int setGUIasStatusCode(int); int setGUIasProfileCode(int); + int setGUIasLUTFileName(QString); private: ActiveSurface::SRTActiveSurfaceBoss_var tASBoss; diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceGUIui.h b/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceGUIui.h index c2c110cb9239c704a7567f03a6845e0a972cffe9..66c398444bc67ae9ded894fc1bf1b13fae5445df 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceGUIui.h +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/include/SRTActiveSurfaceGUIui.h @@ -45,7 +45,7 @@ class SRTActiveSurfaceGUI : public QWidget, public Ui_SRTActiveSurfaceGUI void setactuator(); private slots: - void changeGUIActuatorColor(int, int, bool, bool); + void changeGUIActuatorColor(int, int, bool, bool, bool); void changeGUIAllActuators(bool callfromfunction = false); void changeGUIcircleORradius(bool callfromfunction = false); void changeGUIActuator(bool callfromfunction = false); @@ -54,6 +54,7 @@ class SRTActiveSurfaceGUI : public QWidget, public Ui_SRTActiveSurfaceGUI void changeGUIActuatorStatusLabels(); void changeGUIasStatusCode(int); void changeGUIasProfileCode(int); + void changeGUIasLUTFileName(QString); private: SRTActiveSurfaceCore mySRTActiveSurfaceCore; diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/src/Makefile b/SRT/Clients/SRTActiveSurfaceGUIClient/src/Makefile index 24010f5d8923780160b04039cc9e1b18add1055c..3d5195e56be098f93dd2098ad713c6cef01d29a1 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/src/Makefile +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/src/Makefile @@ -134,9 +134,9 @@ QT_COMPILE_FILES = $(subst .cpp,,$(QT_UI_FILES_MOC) $(QT_UI_FILES_EXTERN_MOC_H) # # -SRTActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) SRTActiveSurfaceGUIui SRTActiveSurfaceCore SRTActiveSurfaceClientEventLoop SRTActiveSurfaceGUIClient +SRTActiveSurfaceGUIClient_OBJECTS = $(QT_COMPILE_FILES) SRTActiveSurfaceGUIui SRTActiveSurfaceCore SRTActiveSurfaceClientEventLoop SRTActiveSurfaceGUIClient SRTActiveSurfaceGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs SRTActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs -SRTActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) SRTActiveSurfaceManagementGUIui SRTActiveSurfaceCore SRTActiveSurfaceClientEventLoop SRTActiveSurfaceGUIClient +SRTActiveSurfaceManagementGUIClient_OBJECTS = $(QT_COMPILE_FILES) SRTActiveSurfaceGUIui SRTActiveSurfaceCore SRTActiveSurfaceClientEventLoop SRTActiveSurfaceGUIClient SRTActiveSurfaceManagementGUIClient_LIBS = IRALibrary ActiveSurfaceBossStubs SRTActiveSurfaceBossStubs ASErrors ComponentErrors ClientErrors ManagementErrors ManagmentDefinitionsStubs $(PROG)_OBJECTS = $(PROG) diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceCore.cpp b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceCore.cpp index 112f53d862afdc96f0d512472588f04ef8be1260..f3a3b578bd0e4b4b9e37d90ef3766e28aa41f1a8 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceCore.cpp +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceCore.cpp @@ -8,6 +8,7 @@ #include // mask pattern for status +#define UNAV 0xFF000000 #define MRUN 0x000080 #define CAMM 0x000100 #define ENBL 0x002000 @@ -58,6 +59,7 @@ void SRTActiveSurfaceCore::run(void) Management::ROTSystemStatus_var bossStatus_var; ActiveSurface::ROTASProfile_var asProfile_var; + ACS::ROstring_var asLUTFileName_var; while (monitor == true) { @@ -71,6 +73,9 @@ void SRTActiveSurfaceCore::run(void) asProfile_var = tASBoss->pprofile(); emit setGUIasProfileCode((int)asProfile_var->get_sync(completion.out())); + asLUTFileName_var = tASBoss->LUT_filename(); + emit setGUIasLUTFileName(QString(asLUTFileName_var->get_sync(completion.out()))); + ACS::longSeq_var asStatus; tASBoss->asStatus4GUIClient(asStatus); @@ -123,13 +128,23 @@ void SRTActiveSurfaceCore::run(void) CORBA::Long status = asStatus[actuator - 1]; - bool active; - if ((status & ENBL) == 0) - active = false; + bool active, statusColor; + + if(status == UNAV) + active = false; // red else + { active = true; - emit setGUIActuatorColor(i, l, active, true); + if((status & ENBL) == 0 || (status & CAL) == 0) + { + statusColor = true; // yellow + } + else + statusColor = false; // green + } + + emit setGUIActuatorColor(i, l, active, statusColor, true); } /*CIRATools::getTime(clock); @@ -149,7 +164,8 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) CORBA::Long acc_val; CORBA::Long delay_val; CORBA::Long status; - + bool active; + bool statusColor; /* ActuatorNumber_str = QString("%1_%2").arg(circle).arg(actuator); @@ -182,41 +198,51 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) try { tASBoss->usdStatus4GUIClient(circle, actuator, status); + active = true; + } + catch (ComponentErrors::ComponentNotActiveExImpl& ex) { + active = false; + ex.log(LM_DEBUG); } catch (ComponentErrors::ComponentErrorsExImpl& ex) { //clearactuatorslineedit(); + active = false; ex.log(LM_DEBUG); } catch (CORBA::SystemException& sysEx) { + active = false; _EXCPT(ClientErrors::CORBAProblemExImpl,impl,"SRTActiveSurfaceGUIClient::SRTActiveSurfaceCore::setactuator()"); impl.setName(sysEx._name()); impl.setMinor(sysEx.minor()); impl.log(); } catch (...) { + active = false; _EXCPT(ClientErrors::UnknownExImpl,impl,"SRTActiveSurfaceGUIClient::SRTActiveSurfaceCore::setactuator()"); impl.log(); } - if ((status & ENBL) == 0) { + if (active == true) + { + //if ((status & ENBL) == 0) { /*qApp->lock(); tGUI->ActuatorStatusEnblLabel->clear(); qApp->unlock(); qApp->lock(); tGUI->ActuatorStatusEnblLabel->setText("UNABLED"); qApp->unlock();*/ - ActuatorStatusEnblLabelCode = -1; - emit setGUIActuatorStatusEnblLabel(); - } - else { + //ActuatorStatusEnblLabelCode = -1; + //emit setGUIActuatorStatusEnblLabel(); + //} + //else { /*qApp->lock(); tGUI->ActuatorStatusEnblLabel->clear(); qApp->unlock(); qApp->lock(); tGUI->ActuatorStatusEnblLabel->setText("ENABLED"); qApp->unlock();*/ - ActuatorStatusEnblLabelCode = 1; - emit setGUIActuatorStatusEnblLabel(); + //ActuatorStatusEnblLabelCode = 1; + //emit setGUIActuatorStatusEnblLabel(); try { tASBoss->setActuator(circle, actuator, actPos_val, cmdPos_val, Fmin_val, Fmax_val, acc_val, delay_val); ActuatorActualPosition_str.setNum(actPos_val); @@ -256,7 +282,7 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) //ActuatorStatus_color.setRgb( 0, 170, 0 ); //setactuatorcolor(circle, actuator, ActuatorStatus_color); //theCircle = i; theActuator = l; - emit setGUIActuatorColor(circle, actuator, true, false); + //emit setGUIActuatorColor(circle, actuator, active, statusColor, false); //setactuatorstatuslabels(circle,actuator); //The status has been updated right before this if-else section, there is no need to ask it again @@ -272,7 +298,8 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) //tGUI->ActuatorStatusRunLabel->clear(); //tGUI->ActuatorStatusRunLabel->setText("RUNNING"); } - if ((status & ENBL) == 0) { + ActuatorStatusEnblLabelCode = 1; + /*if ((status & ENBL) == 0) { ActuatorStatusEnblLabelCode = -1; //tGUI->ActuatorStatusEnblLabel->clear(); //tGUI->ActuatorStatusEnblLabel->setText("UNABLED"); @@ -281,7 +308,7 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) ActuatorStatusEnblLabelCode = 1; //tGUI->ActuatorStatusEnblLabel->clear(); //tGUI->ActuatorStatusEnblLabel->setText("ENABLED"); - } + }*/ if ((status & CAMM) == 0) { ActuatorStatusCammLabelCode = -1; //tGUI->ActuatorStatusCammLabel->clear(); @@ -302,33 +329,53 @@ void SRTActiveSurfaceCore::setactuator(int circle, int actuator) //tGUI->ActuatorStatusLoopLabel->clear(); //tGUI->ActuatorStatusLoopLabel->setText("LOOP"); } - if ((status & CAL) == 0) { + if ((status & CAL) == 0) + { ActuatorStatusCalLabelCode = -1; + statusColor = true; //tGUI->ActuatorStatusCalLabel->clear(); //tGUI->ActuatorStatusCalLabel->setText("UNCALIBRATED"); + //printf("uncalibrated\n"); + //emit setGUIActuatorColor(circle, actuator, false, false); } else { ActuatorStatusCalLabelCode = 1; + statusColor = false; //tGUI->ActuatorStatusCalLabel->clear(); //tGUI->ActuatorStatusCalLabel->setText("CALIBRATED"); } - emit setGUIActuatorStatusLabels(); + //emit setGUIActuatorStatusLabels(); + //emit setGUIActuatorColor(circle, actuator, active, statusColor, false); } catch (ComponentErrors::ComponentErrorsExImpl& ex) { // clearactuatorslineedit(); + active = false; ex.log(LM_DEBUG); } catch (CORBA::SystemException& sysEx) { + active = false; _EXCPT(ClientErrors::CORBAProblemExImpl,impl,"SRTActiveSurfaceGUIClient::SRTActiveSurfaceCore::setActuator()"); impl.setName(sysEx._name()); impl.setMinor(sysEx.minor()); impl.log(); } catch (...) { + active = false; _EXCPT(ClientErrors::UnknownExImpl,impl,"SRTActiveSurfaceGUIClient::SRTActiveSurfaceCore::setActuator()"); impl.log(); } } + else { + active = false; + statusColor = true; + ActuatorStatusRunLabelCode = 0; + ActuatorStatusEnblLabelCode = -1; + ActuatorStatusCammLabelCode = 0; + ActuatorStatusLoopLabelCode = 0; + ActuatorStatusCalLabelCode = 0; + } + emit setGUIActuatorStatusLabels(); + emit setGUIActuatorColor(circle, actuator, active, statusColor, false); } diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUI.ui b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUI.ui index 561b9138c6ee630c74f2d0d3fead3018a4445fc6..6e7eb895f7b6b84311484b7f232d0d245770a0dc 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUI.ui +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUI.ui @@ -29,7 +29,7 @@ 970 - 15 + 50 130 30 @@ -48,7 +48,7 @@ 970 - 152 + 187 130 20 @@ -67,7 +67,7 @@ 970 - 225 + 260 130 20 @@ -89,7 +89,7 @@ 970 - 305 + 340 90 35 @@ -114,7 +114,7 @@ 1065 - 305 + 340 95 35 @@ -139,7 +139,7 @@ 1115 - 265 + 300 140 35 @@ -164,7 +164,7 @@ 970 - 265 + 300 140 35 @@ -189,7 +189,7 @@ 1165 - 305 + 340 90 35 @@ -211,7 +211,7 @@ 970 - 105 + 140 130 42 @@ -230,7 +230,7 @@ 970 - 60 + 95 130 42 @@ -249,7 +249,7 @@ 970 - 176 + 211 130 20 @@ -268,7 +268,7 @@ 970 - 200 + 235 130 20 @@ -287,7 +287,7 @@ 1120 - 15 + 50 135 30 @@ -312,7 +312,7 @@ 1120 - 60 + 95 30 20 @@ -331,7 +331,7 @@ 1120 - 82 + 117 30 20 @@ -350,7 +350,7 @@ 1120 - 106 + 141 30 20 @@ -369,7 +369,7 @@ 1120 - 127 + 162 30 20 @@ -388,7 +388,7 @@ 1153 - 60 + 95 100 20 @@ -407,7 +407,7 @@ 1153 - 82 + 117 100 20 @@ -426,7 +426,7 @@ 1154 - 106 + 141 100 20 @@ -445,7 +445,7 @@ 1154 - 127 + 162 100 20 @@ -464,7 +464,7 @@ 1120 - 152 + 187 135 20 @@ -483,7 +483,7 @@ 1120 - 176 + 211 135 20 @@ -502,7 +502,7 @@ 1120 - 200 + 235 135 20 @@ -521,7 +521,7 @@ 1120 - 225 + 260 135 20 @@ -543,7 +543,7 @@ 970 - 760 + 755 287 32 @@ -568883,9 +568883,6 @@ Calibration - - -
@@ -569347,9 +569344,6 @@ Stop - - - @@ -569811,9 +569805,6 @@ Reset - - - @@ -570275,9 +570266,6 @@ RefPos - - - @@ -570739,9 +570727,6 @@ Top - - - @@ -571203,9 +571188,6 @@ Stow - - - @@ -571667,9 +571649,6 @@ Bottom - - - @@ -572131,9 +572110,6 @@ Setup - - - @@ -572595,9 +572571,6 @@ Down - - - @@ -573059,9 +573032,6 @@ Up - - - @@ -573523,9 +573493,6 @@ Move - - - @@ -574008,9 +573975,6 @@ Correction - - - @@ -574493,9 +574457,6 @@ Update - - - @@ -574523,7 +574484,7 @@ 970 - 830 + 825 90 30 @@ -574983,8 +574944,8 @@ - 1164 - 830 + 1170 + 825 90 30 @@ -575444,8 +575405,8 @@ - 1067 - 830 + 1070 + 825 90 30 @@ -575905,9 +575866,9 @@ - 990 + 970 890 - 120 + 140 30 @@ -575930,10 +575891,10 @@ - 990 - 870 - 120 - 20 + 970 + 860 + 140 + 30 @@ -575955,8 +575916,8 @@ - 1104 - 792 + 1110 + 790 151 30 @@ -575992,7 +575953,7 @@ 970 - 792 + 790 131 30 @@ -576453,9 +576414,9 @@ 1120 - 870 - 120 - 20 + 860 + 140 + 30 @@ -576479,7 +576440,7 @@ 1120 890 - 120 + 140 30 @@ -576499,6 +576460,56 @@ true + + + + 970 + 10 + 131 + 30 + + + + LUT File + + + Qt::AlignCenter + + + false + + + + + + 1074 + 10 + 181 + 30 + + + + + Cantarell + 12 + + + + + + + 32767 + + + true + + + Qt::AlignHCenter + + + true + + diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUIui.cpp b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUIui.cpp index 9abe44d9e4345d506257285a7e5ea1d776c4ed85..2f3b92a9bf25201b7ab695c0ec3e8fd448d01b68 100644 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUIui.cpp +++ b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceGUIui.cpp @@ -12,7 +12,7 @@ SRTActiveSurfaceGUI::SRTActiveSurfaceGUI(QWidget *parent) : QWidget(parent) { setupUi(this); - QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIActuatorColor(int,int,bool,bool)), this, SLOT(changeGUIActuatorColor(int,int,bool,bool))); + QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIActuatorColor(int,int,bool,bool,bool)), this, SLOT(changeGUIActuatorColor(int,int,bool,bool,bool))); QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIAllActuators(bool)), this, SLOT(changeGUIAllActuators(bool))); QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIcircleORradius(bool)), this, SLOT(changeGUIcircleORradius(bool))); QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIActuator(bool)), this, SLOT(changeGUIActuator(bool))); @@ -21,6 +21,7 @@ SRTActiveSurfaceGUI::SRTActiveSurfaceGUI(QWidget *parent) : QWidget(parent) QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIActuatorStatusLabels()), this, SLOT(changeGUIActuatorStatusLabels())); QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIasStatusCode(int)), this, SLOT(changeGUIasStatusCode(int))); QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIasProfileCode(int)), this, SLOT(changeGUIasProfileCode(int))); + QObject::connect(&mySRTActiveSurfaceCore, SIGNAL(setGUIasLUTFileName(QString)), this, SLOT(changeGUIasLUTFileName(QString))); #ifdef MANAGEMENT buttonGroup1->setEnabled(true); @@ -526,7 +527,7 @@ void SRTActiveSurfaceGUI::recoverUSD() } } -void SRTActiveSurfaceGUI::changeGUIActuatorColor(int tcircle, int tactuator, bool active, bool fromRun) +void SRTActiveSurfaceGUI::changeGUIActuatorColor(int tcircle, int tactuator, bool active, bool statusColor, bool fromRun) { if (!fromRun) { @@ -542,13 +543,17 @@ void SRTActiveSurfaceGUI::changeGUIActuatorColor(int tcircle, int tactuator, boo QPushButton* ActuatorButton = this->findChild(ActuatorButtonName.str().c_str()); - if(active) + if(active == true && statusColor == false) // attivo e calibrato { - ActuatorButton->setStyleSheet("background-color: rgb(85, 255, 0)"); + ActuatorButton->setStyleSheet("background-color: rgb(85, 255, 0)"); // verde + } + else if (active == true && statusColor == true) // attivo e scalibrato + { + ActuatorButton->setStyleSheet("background-color: rgb(255, 255, 0)"); // giallo } else { - ActuatorButton->setStyleSheet("background-color: rgb(255, 0, 0)"); + ActuatorButton->setStyleSheet("background-color: rgb(255, 0, 0)"); // rosso } } @@ -712,10 +717,18 @@ void SRTActiveSurfaceGUI::changeGUIasProfileCode(int asProfileCode) ProfilelineEdit_2->setText(QApplication::translate("SRTActiveSurfaceGUI", asProfileString.c_str(), 0, QApplication::UnicodeUTF8)); } +void SRTActiveSurfaceGUI::changeGUIasLUTFileName(QString filename) +{ + LUTLabelFileName->setText(filename); +} + void SRTActiveSurfaceGUI::changeGUIActuatorStatusLabels() { ActuatorStatusRunLabel->clear(); switch (mySRTActiveSurfaceCore.ActuatorStatusRunLabelCode) { + case (0): + ActuatorStatusRunLabel->setText(""); + break; case (-1): ActuatorStatusRunLabel->setText("STOPPED"); break; @@ -736,6 +749,9 @@ void SRTActiveSurfaceGUI::changeGUIActuatorStatusLabels() ActuatorStatusCammLabel->clear(); switch (mySRTActiveSurfaceCore.ActuatorStatusCammLabelCode) { + case (0): + ActuatorStatusCammLabel->setText(""); + break; case (-1): ActuatorStatusCammLabel->setText("NO CAMM"); break; @@ -746,6 +762,9 @@ void SRTActiveSurfaceGUI::changeGUIActuatorStatusLabels() ActuatorStatusLoopLabel->clear(); switch (mySRTActiveSurfaceCore.ActuatorStatusLoopLabelCode) { + case (0): + ActuatorStatusLoopLabel->setText(""); + break; case (-1): ActuatorStatusLoopLabel->setText("NO LOOP"); break; @@ -756,6 +775,9 @@ void SRTActiveSurfaceGUI::changeGUIActuatorStatusLabels() ActuatorStatusCalLabel->clear(); switch (mySRTActiveSurfaceCore.ActuatorStatusCalLabelCode) { + case (0): + ActuatorStatusCalLabel->setText(""); + break; case (-1): ActuatorStatusCalLabel->setText("UNCALIBRATED"); break; diff --git a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceManagementGUIui.cpp b/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceManagementGUIui.cpp deleted file mode 120000 index 6736aa4aa4ac8bb79e96f7c873e9a86725e18da7..0000000000000000000000000000000000000000 --- a/SRT/Clients/SRTActiveSurfaceGUIClient/src/SRTActiveSurfaceManagementGUIui.cpp +++ /dev/null @@ -1 +0,0 @@ -SRTActiveSurfaceGUIui.cpp \ No newline at end of file diff --git a/SRT/Configuration/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml b/SRT/Configuration/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml index ea6e644bae0deb3bda31587df813617694ef9b87..1ff19de19d6556079838d141ff69dc1e774feb13 100644 --- a/SRT/Configuration/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml +++ b/SRT/Configuration/CDB/MACI/Components/ANTENNA/IncludeDynamic.xml @@ -18,4 +18,9 @@ Type="IDL:alma/Antenna/Moon:1.0" Container="AntennaContainer" ImplLang="cpp"/> + diff --git a/SRT/Configuration/CDB/MACI/Components/BACKENDS/NoiseGenerator/NoiseGenerator.xml b/SRT/Configuration/CDB/MACI/Components/BACKENDS/NoiseGenerator/NoiseGenerator.xml deleted file mode 100644 index 6f206ea786dcb141200aa7875ce7114c16fa11ee..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/MACI/Components/BACKENDS/NoiseGenerator/NoiseGenerator.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/ANTENNA/Boss/Boss.xml b/SRT/Configuration/CDB/alma/ANTENNA/Boss/Boss.xml index 918f7dde46379bb40fbda2d4050c1742e1af0ebc..44487b11daf66c3dc8c0058d78e6e5794752e9a4 100644 --- a/SRT/Configuration/CDB/alma/ANTENNA/Boss/Boss.xml +++ b/SRT/Configuration/CDB/alma/ANTENNA/Boss/Boss.xml @@ -22,10 +22,10 @@ PointingModelInstance="ANTENNA/PointingModel" RefractionInstance="ANTENNA/Refraction" Sidereal="IDL:alma/Antenna/SkySource:1.0" - Sun="" - Moon="IDL:alma/Antenna/Moon:1.0" - Satellite="" - SolarSystemBody="" + Sun="IDL:alma/Antenna/SolarSystemBody:1.0" + Moon="IDL:alma/Antenna/Moon:1.0" + Satellite="" + SolarSystemBody="IDL:alma/Antenna/SolarSystemBody:1.0" Otf="IDL:alma/Antenna/OTF:1.0"> diff --git a/SRT/Configuration/CDB/alma/AS/Boss/Boss.xml b/SRT/Configuration/CDB/alma/AS/Boss/Boss.xml index 3482c519340f8be5765444f5a750f48251fcaecb..770a0535e82afaea6107aac3c393eff944b9408a 100644 --- a/SRT/Configuration/CDB/alma/AS/Boss/Boss.xml +++ b/SRT/Configuration/CDB/alma/AS/Boss/Boss.xml @@ -4,4 +4,5 @@ + diff --git a/SRT/Configuration/CDB/alma/AS/LT_lut_20240917_2.txt b/SRT/Configuration/CDB/alma/AS/LT_lut_20240917_2.txt new file mode 100644 index 0000000000000000000000000000000000000000..0096d74d6ef8982a4611bf418bcf57d921915cd9 --- /dev/null +++ b/SRT/Configuration/CDB/alma/AS/LT_lut_20240917_2.txt @@ -0,0 +1,1116 @@ +2.136 1.633 -0.073 -0.996 -1.839 -2.895 -13.865 +4.214 3.170 0.400 -1.968 -3.217 -2.809 -13.865 +2.304 1.589 0.126 -1.226 -1.788 -2.646 -13.865 +2.336 1.895 0.157 -0.961 -1.018 -2.205 -13.865 +1.523 1.443 -0.112 -1.064 -0.742 -1.785 -13.865 +1.223 1.058 -0.153 -0.723 -0.943 -1.169 -13.865 +0.966 0.564 -0.244 -0.668 -1.075 -0.508 -13.865 +1.139 0.467 0.002 -0.166 -1.125 0.416 -13.865 +0.531 -0.388 0.010 -0.735 -0.671 0.733 -13.865 +0.684 -0.325 -0.001 -0.329 0.356 1.191 -13.865 +0.493 -0.331 0.034 -0.284 0.933 1.464 -13.865 +0.651 -0.281 0.134 -0.200 1.153 1.633 -13.865 +0.813 0.069 0.234 -0.059 0.961 1.589 -13.865 +0.640 -0.191 0.050 -0.219 0.685 1.305 -13.865 +0.768 0.085 0.129 -0.527 0.474 1.202 -13.865 +0.868 -0.029 0.191 -0.469 0.335 2.903 -13.865 +1.064 0.336 0.118 -0.370 -0.166 0.704 -13.865 +1.243 0.361 0.051 -0.721 -0.420 -0.243 -13.865 +1.696 0.589 0.167 -0.559 -0.737 -0.581 -13.865 +2.120 1.347 0.448 -0.411 -0.961 -1.322 -13.865 +2.229 1.237 0.287 -0.693 -1.085 -1.542 -13.865 +2.136 1.730 0.330 -0.835 -1.386 -2.381 -13.865 +1.875 1.615 -0.086 -1.383 -2.024 -2.879 -13.865 +2.319 1.920 0.193 -1.022 -1.896 -2.832 -13.865 +2.561 3.262 0.185 -1.470 -2.385 -3.886 -5.247 +4.737 4.860 0.575 -2.711 -5.013 -3.569 -5.247 +2.276 2.406 0.092 -1.030 -2.390 -3.140 -5.247 +2.296 1.946 0.329 -1.111 -1.636 -2.675 -5.247 +2.040 1.723 0.040 -0.773 -1.211 -2.286 -5.247 +1.792 1.128 -0.012 -0.809 -0.968 -1.535 -5.247 +1.303 0.745 0.106 -0.253 -0.395 -0.471 -5.247 +0.623 0.097 0.034 -0.770 -0.055 0.350 -5.247 +1.106 0.480 0.210 0.012 0.999 1.203 -5.247 +0.860 0.032 0.554 -0.067 1.902 1.928 -5.247 +1.101 -0.338 0.466 0.439 1.571 2.527 -5.247 +0.872 -0.324 0.469 0.569 1.267 2.701 -5.247 +0.724 -0.551 0.390 0.116 1.521 2.697 -5.247 +0.463 -0.946 0.104 -0.009 1.182 2.006 -5.247 +0.852 -0.609 0.209 0.069 0.928 2.075 -5.247 +0.581 0.120 0.105 -0.181 0.639 1.175 -5.247 +0.363 -0.302 0.233 -0.257 0.185 1.493 -5.247 +1.648 0.538 0.327 -0.126 -0.299 -0.050 -5.247 +2.082 0.876 -0.053 -0.815 -0.936 -1.445 -5.247 +2.915 0.322 0.297 -0.780 -1.220 0.189 -5.247 +2.305 1.616 0.187 -1.449 -2.142 -2.685 -5.247 +2.486 1.950 0.121 -0.975 -1.863 -3.294 -5.247 +2.833 2.429 0.331 -1.320 -2.130 -2.499 -5.247 +2.711 2.444 0.134 -1.387 -2.379 -3.930 -5.247 +2.624 3.215 0.327 -1.450 -2.252 -4.120 0.619 +3.062 3.404 0.217 -1.461 -2.640 -4.253 0.619 +3.532 3.872 0.468 -1.386 -2.586 -4.062 0.619 +6.036 6.138 0.430 -3.589 -5.988 -4.577 0.619 +3.376 3.813 0.460 -1.225 -2.499 -3.704 0.619 +2.645 2.648 0.166 -1.398 -2.422 -3.515 0.619 +2.654 2.984 0.443 -1.143 -1.501 -3.034 0.619 +2.571 2.613 0.066 -1.213 -1.137 -3.040 0.619 +2.464 2.562 0.384 -0.886 -1.399 -2.603 0.619 +3.629 2.934 0.983 -0.354 -0.983 -2.186 0.619 +2.462 2.019 0.551 -0.683 -0.788 -2.538 0.619 +1.896 1.504 0.190 -0.583 -0.779 -1.385 0.619 +1.715 1.467 0.488 -0.331 -0.137 -0.561 0.619 +1.126 0.735 0.032 -0.587 -0.216 -0.420 0.619 +1.339 0.807 0.256 -0.359 0.331 0.497 0.619 +1.235 0.491 0.376 0.195 0.847 1.300 0.619 +1.256 0.501 0.590 0.308 1.002 1.590 0.619 +1.083 0.448 0.430 0.263 1.257 1.387 0.619 +1.046 0.239 0.535 0.656 1.549 2.352 0.619 +0.801 -0.389 0.320 0.400 1.438 2.412 0.619 +0.791 -0.284 0.530 0.361 1.679 2.862 0.619 +0.713 -0.536 0.438 0.471 1.764 2.818 0.619 +0.976 -0.681 0.577 0.591 2.087 3.439 0.619 +0.602 -1.206 0.311 0.449 1.829 2.942 0.619 +0.746 -1.098 0.615 0.598 2.044 3.367 0.619 +0.229 -1.414 0.012 0.145 2.102 2.963 0.619 +0.425 -1.158 0.367 0.374 1.811 3.322 0.619 +0.993 -0.610 0.467 0.705 2.383 3.811 0.619 +1.169 -0.507 1.067 1.065 2.152 3.552 0.619 +0.322 -1.122 0.090 0.229 1.561 2.355 0.619 +0.439 -1.441 -0.129 -0.106 0.875 1.680 0.619 +0.450 -1.076 -0.096 -0.465 -0.963 1.690 0.619 +0.239 -0.950 -0.044 -0.184 0.324 2.511 0.619 +0.992 -0.041 0.380 0.049 0.656 0.184 0.619 +1.212 0.288 0.405 0.090 0.427 -0.043 0.619 +1.319 0.512 0.260 0.130 -0.132 0.123 0.619 +1.695 0.786 0.666 -0.113 -0.087 -0.316 0.619 +2.121 0.962 0.495 -0.161 -0.708 -0.689 0.619 +1.959 1.435 0.470 -0.475 -0.764 -1.595 0.619 +2.452 1.663 0.500 -0.934 -1.457 -2.708 0.619 +2.693 1.958 0.674 -0.514 -1.074 -2.221 0.619 +2.699 1.906 0.219 -1.428 -1.983 -2.325 0.619 +3.013 2.805 0.666 -0.688 -1.539 -2.565 0.619 +2.663 3.045 0.382 -1.139 -2.065 -3.269 0.619 +2.654 2.553 0.201 -1.405 -2.396 -3.873 0.619 +3.038 2.808 0.267 -1.666 -2.873 -4.313 0.619 +2.920 3.009 0.216 -1.577 -2.208 -4.394 0.619 +2.977 2.907 0.053 -1.878 -2.867 -4.474 0.619 +3.293 3.478 0.192 -1.869 -3.211 -5.034 5.121 +3.702 3.828 0.399 -1.588 -2.819 -4.915 5.121 +3.594 3.854 0.295 -1.625 -3.226 -4.718 5.121 +7.164 7.496 0.792 -3.552 -5.610 -4.981 5.121 +3.153 3.497 0.212 -1.612 -2.953 -4.574 5.121 +3.419 4.268 0.270 -1.275 -2.383 -3.972 5.121 +3.475 3.341 0.308 -1.340 -2.155 -3.640 5.121 +2.292 2.795 0.121 -1.585 -2.197 -3.981 5.121 +3.089 3.105 0.706 -0.770 -1.521 -2.943 5.121 +2.680 2.510 0.464 -1.012 -1.677 -2.890 5.121 +0.604 1.969 0.047 -0.939 -1.511 -2.268 5.121 +1.886 1.325 -0.157 -0.980 -1.165 -1.552 5.121 +1.130 1.622 0.071 -0.636 -0.655 -0.690 5.121 +1.285 0.889 0.187 -0.230 0.265 0.772 5.121 +1.142 0.585 0.217 0.034 0.393 0.749 5.121 +0.769 0.416 0.208 0.107 0.828 1.594 5.121 +1.016 0.115 0.539 0.453 1.468 2.122 5.121 +1.066 -0.006 0.690 0.718 1.721 2.770 5.121 +0.805 -0.763 0.592 0.405 1.688 2.700 5.121 +0.692 0.350 0.519 0.630 1.879 3.371 5.121 +0.953 -0.899 0.374 0.575 1.964 3.371 5.121 +0.411 -0.464 0.651 0.798 2.365 4.217 5.121 +0.339 -1.296 0.411 1.194 2.365 3.904 5.121 +0.680 -1.341 0.684 0.597 2.641 4.122 5.121 +0.574 -1.466 0.358 0.535 2.267 4.032 5.121 +0.281 -1.746 0.348 0.676 2.319 3.861 5.121 +0.437 -1.479 0.445 0.763 2.418 3.758 5.121 +0.624 -1.226 0.792 0.965 2.528 3.892 5.121 +0.166 -1.782 0.065 0.625 1.916 3.549 5.121 +0.154 -2.303 -0.156 0.002 1.280 2.748 5.121 +0.739 -1.045 0.184 0.601 1.053 2.828 5.121 +0.390 -1.423 0.266 0.562 1.245 2.236 5.121 +0.174 -1.590 -0.188 -0.398 0.484 1.076 5.121 +-0.027 -0.812 -0.085 0.280 0.487 1.091 5.121 +0.492 -0.683 -0.103 -0.438 -0.006 0.431 5.121 +1.091 -0.015 0.305 -0.199 0.114 0.114 5.121 +1.294 0.453 0.333 -0.246 -1.642 -0.366 5.121 +1.461 0.639 0.141 -0.711 -1.311 -1.490 5.121 +2.055 0.880 0.283 -0.836 -1.197 -2.051 5.121 +2.497 1.642 0.441 -0.721 -1.199 -2.430 5.121 +2.297 1.756 0.215 -1.279 -1.417 -3.038 5.121 +3.128 3.190 0.801 -0.776 -1.493 -2.911 5.121 +2.827 2.605 0.389 -1.353 -2.271 -3.507 5.121 +3.046 3.067 0.138 -1.585 -3.625 -4.046 5.121 +3.841 3.316 0.509 -1.438 -2.724 -4.148 5.121 +3.442 3.427 0.350 -1.711 -3.133 -4.971 5.121 +3.179 3.201 0.065 -2.098 -3.452 -5.246 5.121 +3.424 3.572 0.254 -1.528 -3.121 -4.992 5.121 +3.682 4.102 0.635 -1.427 -2.878 -4.953 7.938 +3.532 4.031 0.321 -1.734 -3.383 -5.165 7.938 +3.541 3.859 0.063 -2.109 -3.816 -5.492 7.938 +7.140 7.688 0.361 -3.426 -7.138 -5.577 7.938 +3.029 3.555 -0.123 -1.913 -3.865 -5.170 7.938 +2.792 3.425 0.035 -1.689 -2.871 -4.383 7.938 +2.499 2.783 0.167 -1.386 -2.374 -3.433 7.938 +2.032 2.567 -0.155 -1.588 -2.456 -3.468 7.938 +2.253 2.742 0.077 -1.141 -2.133 -3.081 7.938 +1.760 2.373 -0.112 -1.232 -2.281 -3.203 7.938 +2.132 1.845 -0.180 -1.411 -1.820 -2.568 7.938 +1.333 1.674 0.082 -0.714 -0.990 -1.046 7.938 +1.034 0.767 -0.019 -0.847 0.317 -0.461 7.938 +0.627 0.598 0.009 -0.354 0.039 0.164 7.938 +0.565 0.327 0.091 -0.196 0.422 0.566 7.938 +0.610 -0.187 0.062 -0.129 0.694 1.047 7.938 +0.651 0.016 0.221 0.188 1.044 1.467 7.938 +0.086 -0.867 0.022 -0.081 0.838 1.469 7.938 +0.618 -0.400 0.445 0.770 1.660 2.429 7.938 +0.324 -1.327 0.335 0.547 1.726 3.198 7.938 +0.725 -0.610 0.716 0.506 2.209 3.974 7.938 +1.453 -0.262 0.450 0.848 2.473 4.207 7.938 +0.307 -1.289 0.542 0.557 2.310 4.166 7.938 +0.229 -1.552 0.567 0.748 2.396 4.239 7.938 +0.568 -1.668 0.286 0.636 2.330 4.122 7.938 +0.294 -1.747 0.632 0.670 2.100 3.655 7.938 +0.056 -1.941 0.294 0.515 1.781 3.248 7.938 +-0.055 -2.066 -0.143 0.370 1.564 2.845 7.938 +0.185 -1.803 0.466 0.650 2.097 3.194 7.938 +-0.072 -1.663 -0.108 0.698 1.431 2.763 7.938 +-0.130 -1.987 -0.200 0.210 0.874 1.279 7.938 +0.019 -1.802 -0.089 -0.817 0.943 1.773 7.938 +-0.067 -1.329 -0.071 0.387 0.726 1.279 7.938 +0.182 -1.451 -0.202 -0.649 0.577 1.088 7.938 +0.506 -0.786 -0.028 -0.088 0.349 0.551 7.938 +-0.222 -0.527 0.075 -0.169 0.038 0.108 7.938 +1.318 0.284 0.209 -0.296 -0.370 -0.070 7.938 +1.417 0.604 0.133 -0.592 -0.993 -1.448 7.938 +2.240 1.467 0.614 -0.488 -1.191 -2.174 7.938 +2.316 1.598 0.262 -0.921 -1.793 -2.690 7.938 +1.973 1.670 0.308 -1.149 -1.876 -2.742 7.938 +2.319 2.154 0.321 -1.088 -1.873 -2.998 7.938 +2.431 2.325 -0.218 -1.305 -2.526 -3.223 7.938 +2.529 2.346 -0.136 -1.767 -3.096 -4.350 7.938 +3.489 3.462 0.476 -1.440 -3.014 -4.427 7.938 +3.547 3.445 0.170 -2.033 -3.603 -5.339 7.938 +3.459 3.501 0.082 -1.952 -3.354 -5.629 7.938 +3.342 4.140 0.328 -1.701 -3.255 -5.208 7.938 +3.327 3.828 0.291 -2.086 -3.446 -4.991 9.587 +3.118 3.659 0.033 -1.926 -3.573 -5.357 9.587 +3.488 4.188 0.317 -1.415 -2.955 -5.112 9.587 +5.831 6.749 -0.001 -4.096 -6.860 -5.288 9.587 +2.344 3.228 -0.086 -1.530 -2.814 -4.600 9.587 +2.447 3.171 0.168 -1.082 -2.307 -3.450 9.587 +2.059 3.027 0.131 -0.993 -1.776 -3.065 9.587 +1.848 2.911 0.136 -1.100 -1.809 -2.681 9.587 +1.882 2.540 0.105 -0.786 -1.527 -2.654 9.587 +1.619 2.115 -0.064 -1.116 -1.614 -2.794 9.587 +0.973 1.521 -0.123 -0.879 -1.027 -2.141 9.587 +1.045 1.449 0.157 -0.474 -0.481 -1.062 9.587 +0.648 0.780 -0.114 -0.523 -0.562 -0.635 9.587 +0.268 0.322 -0.036 -0.672 0.037 -0.435 9.587 +0.480 0.280 0.022 -0.703 0.413 0.465 9.587 +0.629 0.017 0.302 0.364 0.974 1.335 9.587 +0.145 -0.384 0.105 -0.036 1.149 1.339 9.587 +0.422 0.168 0.428 0.674 1.644 2.200 9.587 +0.155 -0.980 0.263 0.087 1.484 2.197 9.587 +0.635 -0.491 0.816 0.672 2.168 3.596 9.587 +0.867 -0.978 0.634 0.684 2.123 3.968 9.587 +0.542 -1.211 0.659 0.313 2.310 3.935 9.587 +0.227 -1.731 0.341 0.694 2.408 4.038 9.587 +0.459 -1.749 0.578 0.571 2.474 4.499 9.587 +0.615 -1.343 0.815 1.214 2.967 3.818 9.587 +0.346 -1.796 0.103 0.739 2.126 3.430 9.587 +-0.072 -2.109 0.150 0.334 1.643 2.852 9.587 +-0.282 -2.231 0.044 0.237 1.201 2.535 9.587 +-0.335 -2.314 -0.471 0.039 0.998 2.140 9.587 +-0.152 -1.894 0.153 0.837 1.690 2.392 9.587 +-0.425 -2.435 -0.558 -0.439 0.591 1.779 9.587 +-0.363 -2.102 -0.466 -0.173 0.482 1.500 9.587 +-0.379 -1.868 -0.489 -0.363 0.509 1.030 9.587 +-0.642 -1.308 -0.254 -0.188 0.355 0.185 9.587 +0.327 -0.787 0.312 0.176 0.877 0.204 9.587 +0.549 -0.335 0.189 0.015 0.171 0.220 9.587 +0.810 0.003 0.185 0.019 -0.278 -0.595 9.587 +1.073 0.295 0.248 -0.355 -0.744 -1.031 9.587 +1.772 1.109 0.480 -0.206 -0.733 -1.248 9.587 +1.757 1.312 0.311 -0.606 -1.473 -2.147 9.587 +2.199 1.952 0.608 -0.347 -1.258 -1.822 9.587 +1.927 2.275 0.358 -0.609 -1.468 -2.269 9.587 +2.108 2.281 0.431 -0.759 -1.792 -2.615 9.587 +2.367 2.456 0.128 -0.851 -2.398 -3.423 9.587 +2.757 2.922 0.398 -1.243 -2.563 -3.898 9.587 +3.229 3.327 0.210 -1.420 -3.162 -4.777 9.587 +3.267 3.686 0.380 -1.748 -3.264 -4.893 9.587 +3.217 3.733 0.209 -1.775 -3.187 -5.109 9.587 +3.216 3.682 0.184 -1.577 -3.080 -4.889 10.270 +2.776 3.409 -0.027 -1.872 -3.336 -4.816 10.270 +3.079 3.761 0.208 -1.550 -3.054 -4.694 10.270 +3.304 3.883 -0.025 -1.343 -3.297 -5.098 10.270 +5.139 6.228 -0.039 -4.149 -6.885 -4.898 10.270 +3.888 5.014 0.239 -2.037 -3.174 -4.754 10.270 +5.615 7.063 0.202 -3.102 -5.670 -4.366 10.270 +2.225 3.529 -0.419 -2.145 -3.545 -4.784 10.270 +1.801 3.120 -0.234 -1.431 -2.477 -3.889 10.270 +1.782 2.800 -0.140 -1.119 -2.155 -3.750 10.270 +1.729 2.673 -0.065 -0.912 -1.934 -3.244 10.270 +1.554 2.650 0.078 -0.742 -1.384 -3.468 10.270 +1.325 2.547 0.020 -0.624 -1.513 -2.261 10.270 +1.090 2.341 -0.483 -0.957 -1.786 -2.556 10.270 +1.284 2.152 0.011 -0.712 -0.604 -2.028 10.270 +0.767 1.633 -0.561 -1.196 -1.674 -3.123 10.270 +1.683 1.993 -0.143 -0.871 -1.263 -2.294 10.270 +2.006 3.143 0.474 -0.393 -0.846 -1.472 10.270 +1.128 1.904 -0.055 -0.757 -1.200 -2.258 10.270 +1.529 1.328 -0.363 -0.978 -1.357 -1.996 10.270 +0.893 1.524 -0.207 -0.470 -1.034 -1.865 10.270 +0.790 2.278 -0.049 -0.627 -0.626 -1.657 10.270 +0.839 1.214 0.005 -0.394 -0.541 -1.174 10.270 +0.712 0.911 0.045 0.690 -0.418 -0.507 10.270 +0.463 0.041 0.072 -0.162 -0.301 -0.281 10.270 +0.474 0.944 0.103 -0.056 -0.127 -0.048 10.270 +0.729 0.885 0.150 0.040 0.336 0.475 10.270 +0.898 1.225 0.260 1.076 0.378 0.867 10.270 +0.762 0.548 0.248 0.017 0.672 0.378 10.270 +0.544 0.204 0.265 0.215 0.649 2.746 10.270 +-0.231 -0.565 -0.138 -0.312 0.823 0.456 10.270 +-0.367 -0.724 -0.174 0.081 0.557 1.403 10.270 +0.113 -0.038 0.090 0.166 0.640 1.019 10.270 +-0.158 -0.551 0.156 0.036 1.427 1.071 10.270 +-0.289 -0.891 0.012 0.152 0.998 1.489 10.270 +0.115 -0.528 0.403 0.765 1.428 1.790 10.270 +0.294 -0.089 0.343 0.436 2.113 0.628 10.270 +0.068 -0.918 0.276 0.396 1.718 2.135 10.270 +0.057 -0.744 0.268 0.336 1.484 2.391 10.270 +-0.123 -1.266 0.105 0.040 1.255 2.876 10.270 +0.529 -0.890 0.689 1.051 2.143 3.745 10.270 +0.532 -0.955 0.705 0.995 2.286 3.747 10.270 +0.138 -1.512 0.452 0.610 2.085 3.447 10.270 +0.449 -1.114 0.448 0.774 2.357 3.613 10.270 +0.383 -1.022 0.591 1.036 2.677 4.044 10.270 +0.430 -1.626 0.317 0.399 2.138 3.383 10.270 +0.467 -1.302 0.750 0.882 2.845 4.448 10.270 +0.868 -1.129 0.588 0.744 2.687 4.195 10.270 +0.755 -1.511 0.719 1.048 2.504 3.963 10.270 +0.512 -1.799 0.664 0.736 2.306 3.350 10.270 +0.349 -1.525 0.450 0.805 2.414 3.003 10.270 +0.283 -1.581 0.274 0.774 2.208 2.842 10.270 +-0.021 -2.047 -0.140 0.356 1.512 2.592 10.270 +-0.291 -2.374 -0.297 0.072 1.191 2.196 10.270 +-0.544 -2.489 -0.226 0.059 1.096 1.914 10.270 +-0.614 -2.345 -0.231 0.128 0.995 1.871 10.270 +-0.638 -2.642 -0.470 -0.142 0.595 1.566 10.270 +-0.796 -2.700 -0.671 -0.116 0.896 1.368 10.270 +-0.887 -2.740 -0.669 -0.370 0.519 1.735 10.270 +-1.207 -2.991 -0.832 -0.374 0.471 0.999 10.270 +-0.399 -2.485 -0.784 -0.155 0.425 1.947 10.270 +-0.858 -2.408 -0.537 -0.057 0.343 0.862 10.270 +-0.865 -2.464 -0.631 -0.389 0.159 0.689 10.270 +-1.010 -2.225 -0.580 -0.315 0.139 0.535 10.270 +-0.648 -1.363 -0.188 0.196 0.623 -0.489 10.270 +-0.746 -2.289 -0.431 -0.239 0.059 0.819 10.270 +-0.379 -1.666 -0.346 -0.093 0.362 0.589 10.270 +-0.215 -1.445 -0.189 -0.083 0.071 0.543 10.270 +-0.040 -0.858 0.017 0.123 0.311 0.338 10.270 +-0.019 -0.816 0.063 0.023 0.102 0.125 10.270 +-0.006 -1.000 -0.238 -0.362 -0.249 -0.105 10.270 +2.243 0.932 2.389 1.334 1.440 0.739 10.270 +0.190 -0.329 -0.213 -0.175 -0.565 -0.273 10.270 +0.806 0.249 0.411 0.076 -0.116 -0.296 10.270 +0.398 0.280 -0.159 -0.433 -0.877 -1.224 10.270 +0.677 0.266 -0.128 -0.521 -0.946 -1.111 10.270 +1.152 0.872 0.443 -0.106 -0.575 -0.972 10.270 +1.382 0.992 0.173 -0.410 -0.872 -1.285 10.270 +1.344 1.255 0.332 -0.229 -0.860 -1.266 10.270 +1.536 1.401 0.228 -1.060 -1.046 -1.496 10.270 +1.176 1.011 0.068 -0.544 -1.240 -1.612 10.270 +0.836 0.893 -0.264 -1.279 -1.036 -2.038 10.270 +1.348 1.533 0.319 -0.491 -1.069 -1.589 10.270 +1.633 1.930 0.573 -0.605 -0.301 -1.573 10.270 +1.448 2.237 0.348 -0.117 -1.194 -1.755 10.270 +1.991 2.500 0.621 -0.193 -0.940 -2.276 10.270 +1.763 2.112 0.192 -0.626 -1.814 -2.548 10.270 +2.259 2.752 0.430 -0.757 -1.547 -2.645 10.270 +2.115 2.839 0.285 -1.047 -1.968 -3.205 10.270 +2.142 2.535 -0.132 -1.680 -2.935 -4.123 10.270 +2.431 2.831 0.105 -1.661 -2.270 -4.390 10.270 +2.833 3.015 0.004 -1.921 -3.363 -4.754 10.270 +2.967 3.208 0.146 -1.577 -3.092 -4.974 10.270 +2.895 3.371 0.057 -1.854 -3.015 -4.860 10.270 +2.958 3.421 0.145 -1.514 -3.161 -4.810 10.270 +3.245 3.746 0.179 -1.075 -3.188 -5.118 10.270 +3.134 3.412 0.189 -1.931 -3.030 -4.494 10.174 +3.016 2.821 -0.226 -1.825 -3.357 -4.659 10.174 +2.825 3.152 0.063 -1.560 -2.940 -4.980 10.174 +2.751 3.150 -0.113 -1.821 -3.125 -4.450 10.174 +4.675 5.500 -0.265 -4.139 -6.595 -4.659 10.174 +1.984 2.694 -0.419 -1.995 -3.473 -4.383 10.174 +4.147 6.142 -0.127 -2.952 -5.360 -3.779 10.174 +1.881 2.561 -0.150 -1.303 -2.320 -3.473 10.174 +1.616 2.404 -0.223 -1.134 -1.586 -3.028 10.174 +0.945 2.282 -0.362 -0.970 -1.703 -2.636 10.174 +0.972 2.091 -0.016 -0.384 -1.013 -1.988 10.174 +0.825 2.222 0.209 -0.147 -0.437 -1.003 10.174 +0.196 1.554 -0.412 -1.247 -0.884 -1.566 10.174 +0.961 1.851 0.159 -0.091 -0.134 -0.645 10.174 +0.578 1.816 -0.057 0.292 -0.414 -0.895 10.174 +0.487 0.826 -0.280 -0.715 -0.536 -1.424 10.174 +0.165 0.995 -0.784 -1.153 -1.199 -1.602 10.174 +0.667 1.408 -0.251 0.014 -0.835 -1.423 10.174 +0.783 1.541 -0.069 -0.332 -0.813 -1.291 10.174 +0.834 1.272 0.025 -0.242 -0.761 -0.890 10.174 +0.598 1.355 0.037 -0.006 -0.252 -0.578 10.174 +0.024 0.852 -0.090 -0.160 -0.490 -0.477 10.174 +0.399 1.270 0.034 -0.303 -0.098 -0.550 10.174 +0.197 0.575 -0.123 -0.060 -0.207 -0.445 10.174 +0.763 0.714 -0.039 0.588 -0.160 -0.652 10.174 +-0.170 0.920 -0.225 -0.083 0.110 -0.001 10.174 +-0.021 0.512 -0.167 -0.012 0.261 1.923 10.174 +0.290 0.441 0.102 0.259 0.701 0.193 10.174 +-0.075 0.125 -0.012 0.494 0.537 0.435 10.174 +-0.086 0.302 0.249 -0.067 1.019 0.486 10.174 +-0.433 -0.456 0.049 0.111 0.487 0.875 10.174 +0.229 -0.241 0.020 0.037 0.937 0.854 10.174 +-0.414 -0.598 0.175 0.273 0.767 1.014 10.174 +0.283 0.084 0.466 1.020 1.328 1.232 10.174 +-0.471 -0.849 0.309 0.686 1.265 0.860 10.174 +-0.008 -0.656 0.292 0.857 1.324 1.288 10.174 +-0.445 -1.163 -0.056 0.129 0.704 1.179 10.174 +0.147 -0.933 0.064 0.228 1.249 1.577 10.174 +-0.365 -1.017 0.190 0.260 1.216 1.690 10.174 +0.878 -0.401 0.632 0.906 1.599 2.653 10.174 +0.328 -1.096 0.424 0.235 1.507 3.948 10.174 +0.067 -1.083 0.401 0.759 1.925 4.025 10.174 +0.120 -0.811 0.402 1.201 2.274 3.617 10.174 +-0.064 -1.600 0.168 0.540 2.054 3.330 10.174 +0.871 -1.116 0.608 0.759 2.708 3.258 10.174 +0.271 -1.408 0.486 0.760 2.707 3.903 10.174 +0.250 -1.808 0.199 0.385 1.955 1.963 10.174 +0.398 -1.846 0.652 0.981 2.448 3.932 10.174 +0.387 -1.592 0.457 0.379 2.347 3.911 10.174 +0.468 -1.450 0.321 0.481 2.182 3.742 10.174 +0.307 -1.746 0.357 0.774 1.984 3.374 10.174 +-0.080 -1.993 0.274 0.254 1.730 2.657 10.174 +-0.034 -1.698 0.056 0.450 1.811 2.273 10.174 +-0.071 -1.918 -0.093 0.272 1.335 2.037 10.174 +-0.510 -2.442 -0.380 -0.053 0.846 1.659 10.174 +-0.851 -2.836 -0.652 -0.343 0.564 1.120 10.174 +-1.036 -2.701 -0.575 -0.107 0.593 1.125 10.174 +-1.067 -2.691 -0.863 -0.526 0.193 0.928 10.174 +-1.238 -3.048 -0.480 -0.227 0.702 0.972 10.174 +-1.115 -2.530 -0.724 -0.515 0.119 1.195 10.174 +-1.160 -2.581 -0.795 -0.247 -0.048 0.208 10.174 +-1.474 -2.751 -0.988 -0.773 -0.210 0.815 10.174 +-1.469 -2.449 -0.958 -0.275 -0.125 0.159 10.174 +-1.172 -3.167 -0.693 0.191 0.210 0.149 10.174 +-1.026 -2.006 -0.667 -0.298 0.050 0.182 10.174 +-1.069 -1.828 -0.372 -0.522 -0.179 0.581 10.174 +-1.110 -2.775 -0.605 -0.286 -0.592 0.613 10.174 +-1.210 -1.747 -0.510 -0.318 -0.270 0.027 10.174 +-0.551 -1.471 -0.315 -0.069 -0.104 -0.106 10.174 +-0.308 -0.874 -0.136 -0.524 -0.041 -0.271 10.174 +-0.108 -0.784 0.594 0.138 0.304 0.388 10.174 +13.121 13.467 2.070 14.011 13.573 8.356 10.174 +0.048 -0.243 0.288 0.080 -0.095 -0.099 10.174 +0.226 -0.313 -0.048 0.232 -0.163 -0.240 10.174 +0.361 0.107 -0.295 0.267 -0.190 -0.178 10.174 +0.519 0.445 0.335 0.293 -0.100 -0.299 10.174 +0.404 0.140 0.134 -0.058 -0.217 -0.615 10.174 +0.475 0.563 0.222 -0.022 -0.440 -0.706 10.174 +0.793 0.897 0.212 -0.117 -0.512 -0.503 10.174 +0.754 1.245 0.431 0.025 -0.436 -0.771 10.174 +1.160 1.304 0.436 0.075 0.650 -0.276 10.174 +1.037 1.063 0.354 0.434 -1.031 -0.788 10.174 +0.626 1.213 0.364 -0.738 -0.139 -0.506 10.174 +0.515 0.874 0.099 -0.291 -0.742 -0.685 10.174 +0.471 1.180 0.089 -0.197 -0.051 -0.682 10.174 +0.901 1.564 0.282 -0.300 -0.634 -0.882 10.174 +0.926 1.813 0.318 -0.374 -0.467 -1.260 10.174 +1.335 1.948 0.231 -0.532 -0.907 -1.490 10.174 +1.706 2.235 0.106 -0.916 -1.523 -2.032 10.174 +1.427 3.216 0.159 -1.893 -2.028 -2.882 10.174 +1.526 2.295 -0.031 -1.574 -2.647 -3.527 10.174 +2.384 2.729 0.040 -1.538 -2.683 -4.108 10.174 +2.483 2.855 0.203 -1.626 -2.874 -4.123 10.174 +2.647 3.081 0.081 -1.660 -3.042 -4.554 10.174 +2.671 2.795 -0.202 -1.881 -3.270 -4.897 10.174 +2.599 3.058 -0.128 -1.828 -3.237 -4.947 10.174 +2.529 2.586 -0.108 -1.698 -3.144 -4.397 9.410 +2.647 2.651 -0.116 -1.752 -3.066 -4.656 9.410 +2.286 2.316 -0.370 -1.599 -3.079 -4.146 9.410 +2.498 2.666 -0.178 -1.597 -3.104 -4.510 9.410 +3.817 4.381 -0.111 -3.507 -6.321 -3.940 9.410 +2.075 2.888 -0.333 -1.365 -2.772 -3.872 9.410 +3.314 4.574 -0.453 -2.365 -4.448 -3.112 9.410 +1.645 2.181 -0.212 -0.929 -1.905 -3.051 9.410 +1.218 1.910 -0.221 -0.387 -1.474 -2.100 9.410 +0.188 2.139 -0.581 -1.350 -1.379 -1.746 9.410 +0.098 1.603 -0.247 -0.127 -0.258 -0.617 9.410 +0.292 1.025 -0.194 0.017 -0.198 -0.330 9.410 +-0.181 1.301 -0.148 0.147 0.365 0.262 9.410 +-0.411 0.935 -0.371 -0.171 -0.213 -0.520 9.410 +-0.188 0.979 -0.298 -0.330 1.104 -0.265 9.410 +-0.062 1.047 -0.200 0.098 0.050 -0.298 9.410 +-0.099 1.320 -0.109 0.054 0.094 -0.152 9.410 +0.068 1.007 -0.588 -0.285 -0.506 -0.507 9.410 +0.280 1.041 0.161 0.550 -0.017 -0.356 9.410 +0.600 1.250 -0.046 0.078 -0.313 -0.586 9.410 +-0.969 0.178 -0.681 -0.298 -0.591 -0.962 9.410 +0.248 1.015 -0.098 0.102 -0.066 -0.428 9.410 +-0.032 0.544 -0.340 0.055 -0.178 0.132 9.410 +0.483 0.713 0.147 0.516 0.152 0.215 9.410 +-0.215 0.711 -0.048 0.153 0.156 1.585 9.410 +0.628 0.416 0.014 -0.224 0.347 0.117 9.410 +-0.144 0.152 -0.037 0.227 0.277 -0.478 9.410 +-0.080 0.372 0.057 0.473 0.361 0.165 9.410 +0.090 0.368 0.062 0.335 0.473 0.146 9.410 +-0.452 -0.158 -0.202 0.143 0.298 0.511 9.410 +-0.358 0.037 0.061 0.126 0.694 0.354 9.410 +-0.159 -0.211 0.235 0.453 0.705 0.638 9.410 +-0.237 0.240 -0.263 -0.680 0.661 0.077 9.410 +-0.729 -1.105 -0.406 0.144 0.236 -0.847 9.410 +-0.477 -0.722 -0.079 0.829 0.582 -0.051 9.410 +-0.904 -1.031 -0.423 -0.193 -0.004 0.293 9.410 +0.181 -0.937 -0.132 -0.015 0.329 1.207 9.410 +-0.349 -1.210 -0.589 -0.039 0.323 0.144 9.410 +-0.305 -0.841 0.101 0.240 1.038 0.839 9.410 +0.772 -0.717 0.211 -0.079 1.327 1.869 9.410 +0.663 -0.943 0.298 0.637 1.697 2.185 9.410 +0.660 -0.873 0.277 0.650 1.799 2.689 9.410 +0.299 -1.028 0.411 0.528 1.694 3.182 9.410 +0.744 -0.919 0.350 0.840 2.130 3.672 9.410 +0.349 -1.019 0.464 0.572 1.946 3.175 9.410 +0.801 -0.918 0.637 0.849 2.109 3.876 9.410 +0.953 -0.964 0.761 1.250 2.763 3.573 9.410 +0.173 -1.286 0.198 0.392 1.836 3.740 9.410 +0.174 -1.480 0.265 0.350 2.012 3.301 9.410 +0.304 -1.353 0.325 1.193 2.026 3.104 9.410 +-0.080 -1.746 0.179 0.306 1.823 2.843 9.410 +0.079 -1.723 0.112 0.357 1.639 2.774 9.410 +-0.307 -2.235 0.051 -0.037 1.221 2.398 9.410 +-0.509 -1.925 -0.195 0.033 1.301 1.842 9.410 +-0.230 -1.974 -0.394 -0.026 0.882 1.447 9.410 +-0.661 -2.426 -0.449 -0.171 0.482 1.076 9.410 +-1.140 -2.630 -1.033 -1.056 -0.439 0.204 9.410 +-1.332 -2.678 -0.986 -0.741 -0.111 -0.005 9.410 +-1.435 -2.192 -0.968 -0.776 -0.177 -0.110 9.410 +-1.209 -2.347 -0.904 -1.145 -0.752 -0.378 9.410 +-0.881 -2.206 -0.905 -0.955 -0.816 -0.746 9.410 +-1.552 -2.454 -1.072 -0.916 -0.538 -0.589 9.410 +-0.846 -1.727 -1.043 0.246 0.396 -0.676 9.410 +-1.513 -2.553 -0.830 -0.698 -0.654 -0.330 9.410 +-1.485 -2.322 -1.141 -0.811 -0.673 -0.992 9.410 +-0.602 -1.810 -0.549 -0.234 -0.171 0.032 9.410 +-1.393 -1.772 -0.853 -0.551 -0.624 -0.381 9.410 +-0.813 -1.383 -0.324 0.306 -0.092 0.124 9.410 +-0.835 -1.655 -0.387 -0.253 -0.174 -0.282 9.410 +-0.430 -0.911 -0.251 -0.276 0.096 -0.349 9.410 +-0.209 -0.612 -0.371 0.230 -0.133 -0.275 9.410 +-0.655 -1.172 0.745 0.359 0.917 -0.153 9.410 +-0.295 -0.524 -0.082 0.167 -0.068 0.015 9.410 +-0.316 -0.187 -0.570 0.047 -0.176 0.123 9.410 +-14.085 -13.855 -2.077 -12.968 -12.856 -12.639 9.410 +-0.294 -0.947 -0.672 -0.129 -0.417 -0.348 9.410 +-0.169 0.039 0.044 -0.041 -0.148 -0.150 9.410 +0.254 1.009 0.185 0.167 -0.020 0.010 9.410 +0.137 0.650 0.328 0.299 -0.056 -0.034 9.410 +0.963 1.399 0.339 0.241 0.041 0.317 9.410 +0.080 -0.394 0.136 0.253 0.123 0.158 9.410 +0.188 1.063 0.161 -0.026 0.070 0.285 9.410 +-0.073 0.674 0.119 0.305 -0.010 0.463 9.410 +-0.107 0.671 -0.021 -0.268 0.053 0.239 9.410 +-0.263 0.562 0.052 0.863 0.361 0.906 9.410 +-0.270 0.754 -0.068 -0.247 -0.310 0.103 9.410 +-0.018 0.896 -0.233 -0.515 -0.486 -0.265 9.410 +0.605 1.389 0.119 -0.501 -0.777 -0.883 9.410 +0.960 1.815 0.062 -0.707 -0.898 -1.365 9.410 +1.576 2.005 0.088 -1.191 -1.007 -2.302 9.410 +1.768 2.396 0.109 -1.164 -1.895 -2.554 9.410 +1.913 2.122 -0.197 -1.695 -2.702 -3.715 9.410 +2.356 3.080 0.353 -1.227 -2.420 -3.467 9.410 +2.527 2.661 0.022 -1.617 -3.001 -4.210 9.410 +1.741 2.275 -0.377 -2.427 -3.214 -4.599 9.410 +2.570 2.667 0.128 -1.393 -2.697 -3.711 9.410 +2.201 1.542 -0.423 -1.731 -2.901 -3.831 8.262 +2.161 2.073 -0.197 -1.619 -2.448 -3.906 8.262 +2.262 1.917 -0.373 -1.788 -2.931 -4.185 8.262 +1.947 1.954 -0.188 -1.368 -2.580 -3.710 8.262 +3.682 3.935 -0.097 -1.304 -4.626 -3.357 8.262 +1.519 1.868 -0.195 -1.098 -2.141 -2.926 8.262 +2.308 2.417 -1.023 -2.307 -3.739 -2.865 8.262 +1.177 1.039 -0.376 -0.766 -1.539 -2.157 8.262 +0.358 1.156 -0.408 -0.391 -1.100 -1.442 8.262 +-0.240 0.582 -0.390 -0.246 -0.547 -0.207 8.262 +-0.898 0.485 -0.499 -0.204 -0.168 -0.034 8.262 +-0.890 0.335 -0.154 0.664 0.737 0.652 8.262 +0.072 1.282 -0.116 1.745 2.087 1.546 8.262 +-0.671 0.663 0.029 0.300 1.127 1.112 8.262 +-0.427 0.676 -0.004 0.785 0.676 1.140 8.262 +-1.928 0.154 -0.417 0.203 0.442 -0.470 8.262 +-0.955 0.379 -0.358 0.295 0.251 -0.137 8.262 +-0.770 0.591 -0.165 0.411 0.071 0.141 8.262 +-0.782 1.233 -0.367 0.962 0.325 0.349 8.262 +-0.475 0.470 -0.169 0.120 0.316 0.250 8.262 +-0.247 0.367 -0.225 0.316 0.322 0.823 8.262 +-0.417 0.551 -0.002 0.687 0.577 0.390 8.262 +-0.298 0.685 -0.391 0.055 0.348 -0.124 8.262 +-0.035 0.935 -0.154 1.101 0.857 0.050 8.262 +-0.116 0.275 -0.100 0.977 0.292 -0.003 8.262 +-0.457 0.029 -0.226 0.205 0.134 -0.300 8.262 +-0.510 -0.094 -0.355 0.191 0.241 0.479 8.262 +-0.583 -0.070 -0.118 0.145 -0.020 -0.234 8.262 +-0.257 0.246 -0.103 0.019 0.638 -0.247 8.262 +-0.233 -0.034 0.036 0.213 0.665 -0.143 8.262 +-0.840 -0.434 -0.164 0.387 0.194 0.063 8.262 +-1.251 -0.287 -0.316 -0.066 0.208 -0.299 8.262 +-0.241 -0.423 -0.094 0.073 0.126 -0.377 8.262 +-1.091 -0.863 -0.338 0.230 0.217 -0.229 8.262 +-0.564 -0.421 -0.345 0.125 -0.321 -0.272 8.262 +-0.466 -1.297 -0.246 -0.495 -0.465 -0.747 8.262 +-0.725 -0.902 -0.509 0.035 0.158 -0.908 8.262 +-0.439 -0.865 -0.420 -0.442 0.507 -0.548 8.262 +-0.097 -0.628 -0.206 0.160 0.630 0.336 8.262 +0.428 -0.145 0.172 0.734 0.874 1.379 8.262 +0.149 -0.232 0.062 0.873 0.886 1.663 8.262 +0.422 -0.344 0.371 1.260 1.369 2.313 8.262 +0.554 -0.008 0.422 0.822 1.668 1.835 8.262 +0.266 -0.300 0.192 0.399 1.957 2.542 8.262 +0.347 -0.700 0.272 0.477 1.461 2.791 8.262 +0.474 -0.800 0.300 0.372 1.545 3.521 8.262 +0.369 -0.995 0.179 0.215 1.462 2.757 8.262 +0.014 -1.009 0.279 0.538 1.862 2.537 8.262 +0.282 -1.213 0.108 -0.640 1.251 2.719 8.262 +-0.022 -1.555 0.070 0.280 1.529 3.448 8.262 +-0.451 -1.689 -0.424 0.114 1.108 2.192 8.262 +-0.130 -1.619 -0.109 0.307 1.155 2.528 8.262 +-0.065 -1.487 -0.045 0.204 1.261 2.024 8.262 +-0.180 -1.800 -0.477 -0.507 0.612 1.824 8.262 +-0.617 -2.005 -0.580 -0.454 0.305 0.877 8.262 +-0.987 -2.027 -0.756 -0.166 0.051 0.345 8.262 +-1.320 -2.237 -1.050 -0.533 -0.444 -0.171 8.262 +-1.148 -1.758 -0.816 -0.706 -0.665 -1.038 8.262 +-2.098 -2.006 -1.096 -1.053 -0.977 -2.005 8.262 +-1.247 -2.028 -1.248 -1.364 -0.581 -1.744 8.262 +-1.311 -2.087 -0.981 -1.478 -1.594 -1.934 8.262 +-1.906 -2.145 -1.079 -1.056 -1.171 -1.795 8.262 +-1.340 -1.625 -0.735 -0.857 -0.462 -1.023 8.262 +-1.662 -1.888 -0.827 -0.519 -0.552 -0.803 8.262 +-1.228 -1.765 -0.865 -0.618 -0.743 -0.982 8.262 +-1.118 -1.366 -0.528 -0.374 -0.189 -0.436 8.262 +-0.922 -1.210 -0.397 -0.061 -0.208 -0.444 8.262 +-0.627 -0.689 -0.230 0.153 0.042 -0.262 8.262 +-1.078 -1.255 -0.481 -0.106 -0.448 -0.790 8.262 +-0.427 -0.836 -0.001 0.403 0.201 -0.101 8.262 +-0.545 -0.651 -0.084 0.451 0.237 0.093 8.262 +-0.909 -1.612 -0.026 0.156 0.060 -0.675 8.262 +-0.397 0.248 0.060 0.604 0.483 0.282 8.262 +0.035 0.023 0.318 0.913 0.755 0.358 8.262 +-0.686 -0.671 -0.817 0.345 -0.144 0.202 8.262 +0.066 0.211 0.398 0.813 0.945 0.785 8.262 +-0.034 -0.674 0.135 0.601 0.525 1.076 8.262 +-0.147 -0.050 0.330 0.575 0.442 0.832 8.262 +-0.224 0.403 0.238 0.566 0.529 1.021 8.262 +-0.651 -0.632 0.202 0.482 0.444 0.855 8.262 +0.013 0.175 0.202 0.583 0.847 1.312 8.262 +-0.755 -0.144 -0.005 0.414 0.569 1.020 8.262 +-0.797 0.024 0.036 0.401 0.915 1.607 8.262 +-0.829 0.249 0.248 0.842 1.514 1.879 8.262 +-1.271 -0.026 0.213 0.701 1.339 2.104 8.262 +-0.748 0.500 0.106 0.865 1.400 1.820 8.262 +-0.346 0.579 0.137 0.199 0.393 1.536 8.262 +-0.940 0.489 -0.240 -0.268 0.082 0.056 8.262 +0.455 0.855 -0.050 -0.339 -0.492 -0.487 8.262 +1.403 1.227 -0.061 -0.687 -1.177 -1.252 8.262 +1.367 1.444 -0.024 -0.925 -1.453 -1.768 8.262 +0.857 1.923 -0.509 -1.472 -2.598 -3.131 8.262 +1.565 1.789 -0.427 -1.509 -2.645 -3.357 8.262 +2.096 1.837 -0.205 -1.707 -2.607 -2.770 8.262 +2.272 2.056 -0.063 -1.437 -2.662 -3.542 8.262 +2.109 2.094 -0.318 -1.655 -2.735 -3.910 8.262 +1.992 1.458 -0.439 -1.551 -2.744 -3.743 6.741 +1.775 1.008 -0.489 -1.776 -2.900 -3.673 6.741 +1.408 0.981 -0.527 -1.731 -2.677 -3.487 6.741 +1.591 0.612 -0.479 -1.780 -2.915 -3.847 6.741 +3.325 2.429 -0.489 -2.285 -3.936 -1.946 6.741 +0.743 0.628 -0.772 -1.950 -2.456 -3.005 6.741 +1.606 1.103 -0.940 -1.714 -3.080 -1.942 6.741 +0.240 0.057 -0.760 -0.928 -1.515 -1.563 6.741 +-0.497 -0.283 -0.811 -0.978 -1.057 -1.011 6.741 +-0.952 -0.244 -0.659 0.047 -0.151 -0.156 6.741 +-1.266 -0.506 -0.733 0.290 0.158 1.144 6.741 +-1.562 -0.316 -0.179 0.928 1.261 2.131 6.741 +-1.782 -0.509 -0.149 0.881 1.656 2.794 6.741 +-1.799 -0.411 -0.191 1.660 1.569 2.032 6.741 +-1.632 -0.542 -0.224 0.751 1.270 1.581 6.741 +-1.619 -0.341 -0.468 0.383 0.694 0.381 6.741 +-1.170 -0.054 -0.049 0.833 1.223 1.543 6.741 +-1.285 -0.438 -0.372 0.354 0.567 0.226 6.741 +-1.796 -0.210 -0.186 0.763 1.653 1.219 6.741 +-1.035 -0.578 -0.430 0.464 0.372 1.216 6.741 +-0.533 0.151 0.038 0.870 0.843 1.278 6.741 +-0.681 0.130 -0.160 0.632 0.529 1.178 6.741 +-0.909 -0.290 -0.121 0.660 0.421 0.450 6.741 +0.048 0.584 -0.189 1.255 1.034 0.425 6.741 +-0.733 -0.071 -0.254 0.353 0.275 0.234 6.741 +-0.700 -0.225 -0.244 0.455 0.339 -0.067 6.741 +-0.066 0.984 0.741 1.289 0.937 0.288 6.741 +10.982 10.578 5.089 13.247 12.113 6.727 6.741 +-0.979 -0.421 -0.481 -0.227 -0.525 -0.642 6.741 +-0.349 0.068 -0.146 0.466 -0.181 -0.523 6.741 +-0.531 -0.161 -0.074 0.161 0.110 -0.832 6.741 +-0.802 0.088 -0.268 0.175 0.135 -0.515 6.741 +-0.717 -0.369 -0.341 0.313 -0.120 -1.152 6.741 +-0.848 -0.685 -0.389 -0.156 -0.311 -0.500 6.741 +-1.002 -1.124 -0.539 -0.696 -0.853 -1.366 6.741 +-0.990 -0.420 -0.661 -0.472 -0.761 -2.028 6.741 +-0.757 -1.268 -0.803 -1.236 -0.717 -2.345 6.741 +-0.200 -0.273 -0.499 -0.317 -0.610 -1.301 6.741 +-0.465 -0.338 -0.530 -0.398 -0.791 -0.122 6.741 +-0.285 -0.274 -0.337 -0.296 -0.180 -0.037 6.741 +0.144 -0.317 -0.278 -0.030 0.090 0.896 6.741 +0.356 0.019 0.409 0.704 1.307 1.203 6.741 +0.211 -0.271 0.167 1.255 1.303 1.715 6.741 +0.700 -0.314 0.469 1.255 1.616 2.471 6.741 +1.278 0.278 0.589 0.647 1.431 2.380 6.741 +0.277 -0.212 0.486 0.801 1.615 2.338 6.741 +1.152 -0.261 0.358 0.457 1.311 2.323 6.741 +1.484 -0.237 0.335 0.274 1.407 2.543 6.741 +-0.361 -1.219 -0.010 0.067 0.997 2.123 6.741 +-0.216 -0.801 -0.134 -0.219 1.127 2.039 6.741 +-0.064 -1.394 -0.274 -0.301 0.529 1.277 6.741 +-0.555 -1.312 -0.281 -0.524 0.723 0.734 6.741 +-0.506 -1.040 -0.225 0.146 0.631 1.393 6.741 +-0.367 -1.349 -0.514 -0.358 0.404 1.180 6.741 +-0.496 -1.189 -0.386 -0.689 0.057 0.269 6.741 +-1.322 -1.756 -0.820 -0.807 -0.487 -0.764 6.741 +-0.927 -0.952 -0.873 -0.633 -0.855 -1.263 6.741 +-1.244 -1.784 -1.150 -1.220 -1.540 -1.845 6.741 +-0.954 -1.519 -0.905 -1.204 -1.356 -2.207 6.741 +-0.883 -1.132 -0.941 -0.790 -1.548 -2.382 6.741 +-1.879 -2.551 -1.710 -2.059 -2.692 -3.058 6.741 +-1.993 -2.216 -1.473 -1.563 -1.808 -3.022 6.741 +-1.544 -1.460 -1.033 -0.402 -1.200 -1.913 6.741 +-1.682 -1.204 -1.048 -0.924 -1.166 -1.293 6.741 +-1.645 -1.414 -1.097 -0.819 -1.328 -1.820 6.741 +-0.656 -0.499 -0.237 0.173 -0.292 -1.280 6.741 +-0.705 -0.875 -0.561 -0.154 -0.627 -0.899 6.741 +-1.314 -1.292 -0.609 -0.243 -0.648 -1.086 6.741 +-0.949 -0.952 -0.256 0.171 -0.383 -0.847 6.741 +-0.693 -0.932 -0.133 0.308 -0.020 -0.156 6.741 +-0.693 -0.672 0.013 0.160 -0.146 -0.433 6.741 +9.838 10.099 5.821 11.953 11.369 5.582 6.741 +-0.385 -0.002 0.493 0.662 0.432 0.543 6.741 +-0.608 -0.414 -0.005 0.677 0.564 0.463 6.741 +-0.353 -0.122 0.382 0.939 0.564 0.900 6.741 +-0.832 -0.493 0.001 0.642 0.468 1.410 6.741 +-0.365 -0.091 0.176 0.463 0.886 1.447 6.741 +-0.524 -0.263 -0.126 0.973 0.778 1.816 6.741 +0.011 0.318 0.574 1.379 0.905 2.106 6.741 +-0.878 -0.463 -0.078 0.583 0.792 1.754 6.741 +-1.594 -0.908 -0.261 0.440 0.894 1.826 6.741 +-1.284 0.192 -0.028 0.603 1.058 2.176 6.741 +-1.620 -0.632 -0.047 0.803 1.688 2.480 6.741 +-1.610 -0.596 -0.106 0.787 1.622 2.916 6.741 +-1.005 -0.634 -0.245 1.303 2.099 3.515 6.741 +-3.183 -0.997 -0.128 0.745 1.167 2.863 6.741 +-1.006 -0.291 -0.096 0.430 1.389 1.705 6.741 +-0.537 0.153 -0.110 -0.064 0.208 1.198 6.741 +-0.136 -0.077 -0.291 -0.356 -0.367 0.164 6.741 +0.084 0.278 -0.550 -0.839 -0.665 -0.710 6.741 +0.572 0.814 -0.434 -1.039 -1.732 -1.445 6.741 +1.054 0.833 -0.451 -1.129 -2.123 -2.436 6.741 +1.312 0.882 -0.560 -1.271 -2.240 -2.506 6.741 +1.475 1.302 -0.390 -1.640 -2.937 -3.472 6.741 +1.411 0.731 -0.819 -1.991 -2.954 -3.552 6.741 +1.926 1.397 -0.456 -1.831 -2.779 -3.473 6.741 +1.689 0.611 -0.194 -1.148 -2.098 -2.462 4.839 +1.110 0.394 -0.337 -1.343 -2.221 -2.574 4.839 +1.453 0.375 -0.282 -1.430 -2.187 -2.616 4.839 +0.588 -0.295 -0.796 -1.704 -2.410 -2.713 4.839 +1.742 0.045 -0.317 -2.339 -3.494 -1.986 4.839 +0.143 -0.859 -0.894 -1.233 -1.553 -1.729 4.839 +0.403 -0.317 -0.491 -0.926 -1.369 -0.795 4.839 +0.354 -0.598 -0.480 -0.395 -0.397 0.102 4.839 +-1.098 -0.851 -0.707 -0.163 -0.032 0.665 4.839 +-1.643 -1.136 -0.535 0.196 0.922 1.950 4.839 +-2.106 -1.314 -0.726 0.694 1.067 2.327 4.839 +-2.029 -1.219 -0.246 1.306 2.158 3.725 4.839 +-0.626 0.448 -0.491 3.496 4.742 4.035 4.839 +-2.847 -1.811 -0.512 1.234 2.262 3.793 4.839 +-2.596 -1.559 -0.514 1.148 2.128 3.090 4.839 +-2.020 -1.173 -0.237 1.318 1.923 2.841 4.839 +-1.874 -1.134 -0.210 1.184 1.828 2.628 4.839 +-1.382 -0.729 -0.184 0.960 1.305 2.714 4.839 +-5.742 -4.033 -0.354 1.542 0.734 2.134 4.839 +-1.617 -0.897 -0.309 0.846 1.260 1.726 4.839 +-1.292 -1.199 -0.077 0.913 1.090 1.723 4.839 +-1.101 -0.427 0.013 1.095 1.277 1.191 4.839 +-0.878 -0.144 0.034 1.475 0.873 1.047 4.839 +0.089 0.545 -0.099 2.235 1.623 0.815 4.839 +-1.089 -0.416 -0.155 0.608 0.532 1.288 4.839 +-1.047 0.210 -0.129 0.711 0.329 0.532 4.839 +-1.466 0.054 -0.016 0.732 0.411 -0.476 4.839 +-0.680 0.212 0.339 0.827 0.428 -0.118 4.839 +-0.424 -0.021 -0.253 0.460 -0.060 -0.487 4.839 +-1.287 -0.529 -0.480 -0.090 -0.284 -1.063 4.839 +-1.151 -0.413 -0.651 -0.262 -1.103 -1.453 4.839 +-0.832 0.129 -0.468 0.659 0.014 -1.473 4.839 +-1.092 0.120 -0.379 -0.120 -0.769 -1.305 4.839 +-0.749 -0.324 -0.265 0.034 -0.535 -1.580 4.839 +-0.554 -0.019 -0.445 0.036 -1.036 -1.897 4.839 +-1.142 -0.478 -0.960 -1.124 -1.510 -3.102 4.839 +-0.272 0.592 -0.358 -0.675 -1.498 -2.747 4.839 +0.558 -0.203 -0.495 -0.144 -1.047 -2.044 4.839 +-0.391 0.096 -0.601 -0.467 -0.992 -1.481 4.839 +-0.361 0.023 -0.204 -0.106 -0.704 -0.092 4.839 +0.886 0.450 0.017 -0.161 0.143 0.223 4.839 +-0.155 -0.062 -0.467 0.335 0.082 0.028 4.839 +0.330 0.406 -0.181 0.237 0.370 0.964 4.839 +0.303 0.215 0.334 0.477 1.136 1.713 4.839 +0.682 0.460 0.498 0.490 1.681 1.936 4.839 +1.082 1.093 0.324 0.403 1.284 2.714 4.839 +1.120 0.975 0.763 0.767 1.260 2.259 4.839 +0.045 -0.306 0.611 0.437 1.308 2.091 4.839 +0.928 0.733 0.296 0.417 1.101 2.219 4.839 +-0.481 -0.658 -0.169 0.258 0.147 1.747 4.839 +-0.166 -0.190 -0.265 -0.515 0.286 1.209 4.839 +-0.130 -0.308 -0.099 -0.240 0.419 1.942 4.839 +0.453 0.408 0.277 0.191 0.922 1.551 4.839 +-0.561 -0.650 -0.532 -0.755 -0.131 0.311 4.839 +-0.829 -0.705 -0.737 -0.938 -0.765 -0.585 4.839 +-1.200 -0.807 -0.833 -0.949 -0.934 -1.195 4.839 +-0.639 -0.796 -0.874 -1.200 -1.398 -2.285 4.839 +-0.652 -1.068 -0.944 -1.063 -1.542 -2.387 4.839 +-1.213 -1.128 -1.136 -1.362 -2.080 -2.938 4.839 +-1.604 -1.420 -1.394 -1.508 -2.365 -3.681 4.839 +-1.432 -1.073 -1.197 -1.349 -2.318 -3.940 4.839 +-2.129 -1.168 -1.281 -1.250 -2.289 -3.621 4.839 +-1.649 -1.220 -1.112 -1.259 -2.064 -3.192 4.839 +-1.720 -0.995 -0.906 -0.342 -1.473 -2.548 4.839 +-0.979 -0.394 -0.466 -0.024 -1.053 -2.098 4.839 +-1.593 -0.902 -0.859 -0.574 -0.554 -1.853 4.839 +-0.536 0.047 -0.134 0.174 -0.448 -1.390 4.839 +-0.787 -0.300 -0.390 0.106 -0.582 -1.298 4.839 +-1.041 -0.755 -0.461 0.096 -0.539 -1.130 4.839 +-0.899 -0.650 -0.041 0.245 -0.250 -0.602 4.839 +-1.029 -0.329 -0.442 0.775 -0.073 -0.093 4.839 +-13.084 -11.733 -6.502 -9.981 -10.535 -5.617 4.839 +-0.597 -0.351 -0.223 0.810 0.545 0.583 4.839 +-0.393 0.186 0.793 1.176 1.176 1.389 4.839 +-1.152 -0.042 0.401 1.249 1.076 1.464 4.839 +-0.602 -0.365 0.476 1.316 1.383 1.513 4.839 +-1.507 -0.460 -0.002 1.178 1.939 2.216 4.839 +-11.786 -12.160 -4.904 -14.646 -14.961 0.835 4.839 +-1.461 -0.961 -0.196 1.041 1.481 2.818 4.839 +-1.600 -0.449 0.360 1.292 1.807 3.419 4.839 +-1.628 -0.717 0.330 1.477 2.222 3.599 4.839 +-1.769 -0.548 0.403 1.566 2.599 3.802 4.839 +-1.959 -1.005 0.147 1.515 2.697 4.112 4.839 +-2.254 -0.904 0.106 1.687 3.404 4.703 4.839 +-2.512 -1.366 -0.124 1.413 2.878 4.745 4.839 +-2.310 -1.475 -0.274 0.965 2.298 3.952 4.839 +-1.754 -0.975 -0.152 0.688 1.811 3.309 4.839 +-1.271 -0.958 -0.213 0.617 1.248 2.423 4.839 +-0.806 -0.606 -0.203 0.197 0.719 1.791 4.839 +-0.230 -0.284 -0.144 0.266 -0.117 0.840 4.839 +0.478 -0.119 -0.135 -0.502 -0.428 0.124 4.839 +0.148 -0.091 -0.595 -1.083 -1.239 -1.449 4.839 +1.102 0.237 -0.344 -1.196 -1.510 -1.679 4.839 +1.015 0.412 -0.159 -1.090 -1.589 -1.513 4.839 +1.572 0.740 -0.172 -1.253 -1.921 -2.274 4.839 +1.779 0.803 0.004 -0.935 -2.097 -2.024 4.839 +1.487 -0.338 -0.292 -1.251 -2.089 -1.812 2.659 +1.361 -0.348 -0.381 -0.925 -1.816 -2.057 2.659 +1.225 -0.543 -0.442 -1.410 -1.859 -1.358 2.659 +1.370 -0.440 -0.175 -0.780 -1.343 -1.345 2.659 +-0.890 -3.642 -0.414 -3.730 -4.459 -0.793 2.659 +0.501 -0.833 -0.150 -0.307 -0.901 -0.240 2.659 +-0.372 -2.287 -1.397 -0.844 -0.797 0.568 2.659 +-1.067 -1.529 -0.600 -0.299 -0.070 0.562 2.659 +-1.221 -1.736 -0.480 0.138 0.855 2.273 2.659 +-1.859 -1.918 -0.523 0.747 1.509 2.971 2.659 +-2.564 -2.435 -0.761 0.685 1.662 3.404 2.659 +-2.678 -2.454 -0.572 1.540 2.534 4.194 2.659 +-3.006 -2.389 -0.415 1.736 3.068 5.120 2.659 +-3.050 -2.387 -0.340 1.844 3.092 4.945 2.659 +-2.303 -2.159 -0.095 1.866 3.004 4.646 2.659 +-2.665 -2.168 -0.364 1.454 2.203 3.731 2.659 +-2.035 -1.604 -0.143 1.519 2.507 4.192 2.659 +-2.020 -1.454 -0.132 1.396 2.188 3.659 2.659 +-4.447 -3.767 -0.346 2.616 2.474 3.131 2.659 +-1.744 -1.063 -0.091 1.267 1.729 2.621 2.659 +-1.475 -1.158 0.099 1.351 1.920 2.198 2.659 +-1.539 -1.316 -0.297 1.048 1.219 1.847 2.659 +-0.900 -0.640 -0.021 1.085 1.094 0.929 2.659 +-0.392 0.200 -0.343 1.851 1.768 1.192 2.659 +-1.054 -0.634 -0.294 0.663 0.006 0.634 2.659 +-1.393 -0.683 -0.340 0.433 0.345 -0.029 2.659 +-1.181 -0.528 -0.311 0.382 0.096 0.018 2.659 +-1.083 -0.541 -0.383 0.064 -0.346 -0.898 2.659 +-0.973 -0.292 -0.419 -0.107 -0.571 -1.154 2.659 +-0.217 -0.197 -0.232 0.641 -0.521 -1.336 2.659 +-1.708 -0.878 -1.032 -0.237 -1.257 -1.952 2.659 +-0.705 0.527 -0.553 0.252 -0.820 -1.877 2.659 +-0.531 -0.027 -0.331 -0.136 -1.122 -2.302 2.659 +-0.550 0.528 -0.063 0.190 -0.841 -2.108 2.659 +-0.812 -0.147 -0.680 -0.554 -1.843 -2.954 2.659 +-0.046 0.385 -0.463 -0.381 -1.870 -3.826 2.659 +-0.195 0.236 -0.603 -0.930 -2.163 -2.899 2.659 +-0.415 0.379 -0.666 -0.741 -2.030 -1.803 2.659 +-0.302 0.327 -0.534 -0.665 -1.489 -2.498 2.659 +0.308 0.797 -0.265 -0.229 -1.108 -1.417 2.659 +-4.731 -3.859 -3.090 -4.974 -5.523 0.137 2.659 +1.025 1.227 0.047 -0.284 -0.033 -0.169 2.659 +0.589 1.029 -0.058 -0.116 -0.879 -0.309 2.659 +0.415 0.971 -0.129 -0.071 0.033 0.980 2.659 +1.195 1.540 0.264 0.034 0.003 0.964 2.659 +0.801 0.756 0.199 -0.126 0.515 1.144 2.659 +1.225 1.441 0.558 0.282 0.644 1.650 2.659 +0.969 1.919 0.382 0.322 0.943 2.296 2.659 +1.118 1.311 0.521 -0.110 0.358 1.833 2.659 +0.898 1.838 0.389 -0.135 0.646 2.159 2.659 +0.617 0.724 0.051 0.013 -0.078 1.294 2.659 +0.786 0.887 0.110 -0.281 0.000 0.933 2.659 +0.444 0.594 -0.197 -0.923 -0.482 0.703 2.659 +0.091 0.290 -0.340 -0.572 -0.303 -0.227 2.659 +-0.330 0.025 -0.838 -1.298 -1.560 -1.721 2.659 +-0.485 -0.092 -0.885 -1.299 -1.611 -1.742 2.659 +-0.267 0.062 -0.939 -1.236 -1.998 -2.490 2.659 +-0.878 -0.316 -1.086 -1.418 -2.381 -3.394 2.659 +-0.948 -0.382 -1.252 -1.437 -2.759 -3.756 2.659 +-1.312 -0.391 -1.107 -1.625 -2.918 -3.958 2.659 +-1.147 -0.316 -1.410 -1.028 -3.142 -4.666 2.659 +-1.562 -0.545 -1.613 -1.760 -3.231 -4.846 2.659 +-1.713 -0.736 -1.629 -1.757 -3.131 -4.689 2.659 +-1.689 -0.685 -1.195 -1.180 -1.882 -3.707 2.659 +-1.333 -0.461 -0.998 -0.814 -2.052 -3.375 2.659 +-1.217 -0.363 -0.657 -0.274 -1.334 -2.684 2.659 +-1.097 -0.042 -0.544 -0.232 -1.313 -2.168 2.659 +-0.941 -0.101 -0.341 0.042 -0.574 -1.965 2.659 +-0.346 0.110 -0.044 0.215 -0.363 -1.432 2.659 +-0.764 0.211 0.019 0.963 -0.142 -0.436 2.659 +-0.527 0.355 0.407 0.633 0.044 -0.026 2.659 +9.128 10.538 5.102 12.060 11.367 5.679 2.659 +-0.438 0.216 0.678 1.109 0.822 1.160 2.659 +-0.522 0.401 0.426 1.708 1.210 1.614 2.659 +-0.162 -0.030 0.734 1.647 1.824 2.305 2.659 +-4.210 -2.694 0.364 0.675 1.837 2.251 2.659 +-0.466 0.252 0.901 2.348 2.446 3.044 2.659 +-1.107 -0.688 0.215 2.178 2.283 3.128 2.659 +-0.879 -0.238 0.711 2.076 2.727 3.722 2.659 +-2.019 -1.193 0.059 1.365 2.237 3.689 2.659 +-2.253 -1.330 0.112 1.420 2.413 4.686 2.659 +-2.092 -1.534 0.118 1.559 2.828 4.462 2.659 +-2.407 -1.365 0.139 1.791 3.211 5.632 2.659 +-2.817 -1.738 -0.012 1.748 3.493 5.991 2.659 +-2.618 -1.602 0.163 1.920 3.717 5.811 2.659 +-2.655 -1.795 -0.203 1.450 2.841 5.003 2.659 +-1.896 -1.389 0.098 1.554 2.508 4.750 2.659 +-1.485 -1.426 0.100 1.095 2.223 3.953 2.659 +-0.875 -1.167 -0.098 0.743 1.469 3.378 2.659 +-0.140 -0.821 -0.028 0.547 0.792 1.852 2.659 +-0.046 -0.101 -0.157 -0.133 0.217 1.655 2.659 +0.506 -0.786 -0.311 -0.596 -0.489 0.034 2.659 +0.912 0.195 -0.031 -0.530 -0.623 -0.131 2.659 +1.400 -0.091 0.003 -0.866 -1.207 -1.019 2.659 +1.415 -0.439 -0.251 -0.912 -1.583 -1.384 2.659 +1.481 -0.357 -0.364 -1.210 -2.023 -1.894 2.659 +1.655 -0.940 -0.054 -1.097 -1.030 -1.035 0.121 +1.324 -1.431 -0.262 -0.791 -1.531 -0.980 0.121 +1.571 -1.379 -0.121 -0.596 -1.208 -0.455 0.121 +0.875 -1.114 -0.111 -0.697 -0.528 0.014 0.121 +-1.417 -5.440 -0.046 -2.605 -2.504 0.975 0.121 +0.362 -1.456 -0.077 0.386 0.208 1.132 0.121 +-1.109 -4.836 -0.729 0.376 1.151 2.188 0.121 +-0.896 -2.262 -0.094 0.562 1.206 2.972 0.121 +-1.280 -2.691 -0.259 0.971 1.853 3.987 0.121 +-2.311 -3.045 -0.269 1.487 2.492 4.483 0.121 +-2.475 -3.298 -0.413 1.685 2.897 4.961 0.121 +-2.843 -3.093 -0.337 1.973 3.359 5.799 0.121 +-3.417 -3.488 -0.354 2.122 3.887 6.565 0.121 +-3.494 -3.054 -0.014 2.855 4.248 6.657 0.121 +-3.255 -3.465 -0.285 1.778 3.665 6.315 0.121 +-3.770 -3.629 -0.704 1.579 2.913 5.029 0.121 +-3.154 -2.921 -0.051 2.106 3.301 5.528 0.121 +-2.616 -2.895 -0.212 1.949 2.862 4.934 0.121 +-8.340 -8.057 0.044 3.197 1.657 4.917 0.121 +-2.083 -1.959 -0.097 1.878 2.375 3.996 0.121 +-2.143 -1.825 -0.139 1.586 1.976 3.690 0.121 +-2.051 -1.924 -0.116 1.214 1.515 2.999 0.121 +-1.613 -1.288 -0.143 1.167 1.168 2.114 0.121 +-0.025 0.490 -0.350 2.296 2.346 1.794 0.121 +-1.169 -0.947 -0.312 0.887 0.596 0.998 0.121 +-1.311 -1.095 -0.327 0.654 0.058 0.481 0.121 +-1.039 -0.277 0.013 0.792 0.013 -0.108 0.121 +-1.271 -1.005 -0.518 -0.040 -0.594 -1.001 0.121 +-0.319 -0.264 -0.457 0.216 -0.736 -1.649 0.121 +-0.704 -0.133 -0.537 0.121 -0.977 -1.580 0.121 +-0.578 0.098 -0.418 -0.243 -1.186 -2.637 0.121 +0.473 1.163 -0.623 0.873 -0.296 -3.006 0.121 +-0.413 0.320 -0.522 -0.382 -1.646 -3.662 0.121 +-0.969 0.044 -0.786 -0.591 -1.767 -3.368 0.121 +-0.361 0.787 -0.617 -0.705 -2.325 -4.107 0.121 +-0.223 0.325 -0.930 -1.121 -2.939 -4.675 0.121 +0.278 1.282 -0.693 -1.040 -2.512 -3.857 0.121 +-0.287 0.750 -0.876 -1.019 -2.767 -4.067 0.121 +-0.537 0.304 -1.020 -1.300 -2.880 -3.820 0.121 +-0.274 0.891 -0.634 -0.997 -2.150 -2.675 0.121 +0.737 1.294 -0.668 -1.197 -2.086 -2.610 0.121 +0.708 1.839 0.013 -0.543 -1.187 -1.267 0.121 +1.187 2.537 0.206 -0.311 -0.800 -0.596 0.121 +1.415 1.916 0.377 0.030 -0.378 0.239 0.121 +1.413 1.974 0.052 -0.418 -0.476 0.254 0.121 +1.362 1.935 0.248 -0.003 -0.218 0.941 0.121 +1.586 2.219 0.255 -0.535 -0.353 0.925 0.121 +1.532 2.580 0.645 0.057 0.107 1.449 0.121 +2.250 2.484 0.688 0.075 0.092 1.648 0.121 +1.076 1.995 0.241 -0.226 -0.077 0.911 0.121 +1.504 2.215 0.112 -0.421 -0.555 0.285 0.121 +0.839 1.744 0.053 -0.634 -0.462 0.399 0.121 +0.976 1.633 -0.219 -0.843 -1.182 -0.742 0.121 +-0.146 0.851 -0.761 -1.354 -1.584 -1.854 0.121 +0.346 1.101 -0.562 -1.595 -2.002 -2.075 0.121 +-0.924 0.638 -1.103 -1.612 -2.541 -2.600 0.121 +-0.476 0.710 -1.057 -1.724 -3.275 -3.232 0.121 +-1.088 0.438 -1.408 -1.806 -3.156 -3.868 0.121 +-0.815 0.765 -1.275 -1.802 -3.345 -4.404 0.121 +-1.003 0.512 -1.315 -1.400 -3.262 -4.826 0.121 +-1.245 0.317 -1.475 -1.734 -3.723 -5.264 0.121 +-1.378 0.124 -1.450 -1.530 -3.638 -4.662 0.121 +-0.734 0.708 -1.387 -0.650 -2.859 -4.944 0.121 +-1.801 -0.031 -1.269 -0.875 -2.759 -4.275 0.121 +-1.409 0.705 -0.930 -0.870 -2.445 -4.303 0.121 +-1.237 0.339 -0.653 -0.373 -1.688 -3.305 0.121 +-0.754 0.555 -0.479 0.208 -1.461 -2.786 0.121 +-1.202 -0.234 -0.745 -0.267 -1.131 -2.578 0.121 +-1.051 0.192 -0.613 -0.083 -1.011 -2.256 0.121 +-0.523 0.582 0.298 0.968 -0.048 -1.105 0.121 +-0.933 -0.154 0.473 0.626 -0.252 -1.483 0.121 +11.482 11.469 3.018 11.586 11.551 7.965 0.121 +-0.695 0.799 1.462 1.433 1.574 0.723 0.121 +-0.572 0.032 0.433 1.723 1.221 1.745 0.121 +-0.556 0.436 0.740 1.876 2.118 2.571 0.121 +-5.452 -3.532 0.667 0.081 1.133 2.968 0.121 +-0.937 -0.062 0.524 2.144 2.588 3.384 0.121 +-1.105 -0.526 0.774 2.508 2.979 4.333 0.121 +-1.365 -0.512 0.789 2.781 3.576 5.444 0.121 +-2.110 -1.571 0.084 2.142 2.983 4.796 0.121 +-2.044 -1.295 0.488 1.888 4.133 6.060 0.121 +-2.681 -1.883 0.155 2.172 3.650 6.009 0.121 +-2.567 -1.602 0.414 2.473 4.469 7.059 0.121 +-3.092 -2.159 0.080 2.341 4.299 7.076 0.121 +-3.002 -2.246 0.265 2.326 4.536 6.744 0.121 +-2.532 -2.281 0.417 2.274 4.313 5.943 0.121 +-2.525 -2.591 0.197 1.685 3.795 5.613 0.121 +-2.119 -1.992 0.242 1.664 3.110 5.559 0.121 +-1.466 -1.951 0.014 1.289 2.434 4.410 0.121 +-0.896 -1.552 0.080 0.688 1.618 3.508 0.121 +-0.076 -1.185 0.235 1.092 1.355 3.109 0.121 +0.332 -0.833 0.146 0.204 0.596 1.911 0.121 +0.747 -1.171 0.106 -0.359 0.559 1.175 0.121 +1.005 -1.121 -0.117 -0.506 -0.748 -0.810 0.121 +1.560 -0.975 -0.013 -0.761 -1.014 -0.285 0.121 +1.436 -1.685 -0.262 -1.695 -1.518 -0.778 0.121 +-0.407 -1.430 0.465 1.325 2.218 1.502 -1.082 +-0.341 -1.132 0.483 1.871 2.631 1.574 -1.082 +-0.229 -1.097 0.696 1.374 2.459 1.596 -1.082 +-0.046 -0.423 0.641 1.903 2.559 1.510 -1.082 +-1.290 -3.087 -0.221 -1.023 0.337 0.269 -1.082 +-0.903 -3.943 -0.675 -0.235 0.180 1.382 -1.082 +-3.161 -8.476 -1.968 0.230 1.354 2.780 -1.082 +-2.337 -4.649 -1.136 0.128 1.025 3.312 -1.082 +-2.576 -4.428 -0.752 1.044 2.334 4.938 -1.082 +-2.979 -4.615 -0.688 1.508 2.872 6.127 -1.082 +-3.726 -5.117 -1.025 1.650 3.229 6.430 -1.082 +-3.977 -5.007 -0.667 2.263 4.009 7.081 -1.082 +-1.964 -2.267 -0.645 4.957 6.852 7.872 -1.082 +-4.857 -5.042 -0.840 2.122 4.457 7.985 -1.082 +-4.282 -4.275 -0.402 2.763 4.697 7.767 -1.082 +-4.406 -4.624 -0.718 1.997 3.974 7.031 -1.082 +-4.382 -4.658 -1.003 1.817 3.530 6.506 -1.082 +-3.825 -4.057 -0.112 2.500 3.892 6.656 -1.082 +-7.345 -8.108 1.010 5.389 4.948 7.080 -1.082 +-2.867 -3.120 -0.355 1.804 2.658 5.146 -1.082 +-2.630 -3.086 -0.441 1.464 2.082 4.341 -1.082 +-2.750 -2.846 -0.525 1.210 1.605 3.284 -1.082 +-1.828 -2.071 -0.103 1.218 1.462 3.146 -1.082 +-1.684 -1.784 -0.889 1.120 1.080 1.533 -1.082 +-1.258 -1.589 -0.421 0.763 0.406 1.258 -1.082 +-1.685 -1.318 -0.581 0.547 -0.100 0.346 -1.082 +-1.129 -0.820 -0.421 0.407 -0.328 -0.441 -1.082 +-1.379 -0.746 -0.746 -0.022 -1.044 -1.584 -1.082 +-1.080 -0.514 -0.755 -0.309 -1.521 -2.321 -1.082 +-1.339 -0.772 -1.046 -0.641 -1.851 -3.364 -1.082 +-0.612 0.019 -0.713 -0.441 -2.106 -3.563 -1.082 +0.269 1.386 -0.940 0.630 -0.756 -3.758 -1.082 +-0.805 0.205 -1.049 -1.102 -2.855 -4.446 -1.082 +-0.773 0.531 -0.988 -1.012 -2.746 -4.392 -1.082 +-0.984 0.382 -1.414 -1.451 -3.457 -5.773 -1.082 +-0.465 0.932 -1.121 -1.232 -3.500 -6.166 -1.082 +-0.136 1.380 -1.095 -1.597 -3.614 -5.506 -1.082 +-0.345 1.168 -1.209 -1.479 -3.549 -4.150 -1.082 +-0.361 1.274 -1.135 -1.655 -3.671 -4.897 -1.082 +0.344 1.816 -0.781 -1.282 -2.552 -3.235 -1.082 +0.594 1.951 -0.818 -1.659 -3.080 -3.837 -1.082 +0.463 2.063 -0.758 -1.400 -2.293 -2.617 -1.082 +0.646 1.520 -0.955 -1.604 -2.520 -2.248 -1.082 +1.323 2.663 -0.154 -0.710 -1.302 -0.901 -1.082 +1.919 3.262 0.281 -0.619 -1.074 -0.662 -1.082 +0.818 2.261 -0.621 -1.331 -1.661 -0.885 -1.082 +1.574 2.755 -0.236 -0.983 -1.446 -0.386 -1.082 +1.629 2.446 -0.136 -0.584 -0.801 0.017 -1.082 +1.498 2.451 -0.236 -0.871 -1.124 -0.400 -1.082 +1.406 2.327 -0.229 -0.610 -0.907 0.068 -1.082 +1.073 2.436 -0.464 -1.262 -1.627 -0.668 -1.082 +0.507 2.039 -0.763 -1.538 -2.019 -1.198 -1.082 +0.824 2.272 -0.773 -1.399 -2.139 -1.544 -1.082 +0.333 2.045 -1.009 -1.714 -2.553 -2.103 -1.082 +0.121 1.843 -1.131 -1.633 -2.730 -2.619 -1.082 +-0.178 1.373 -1.001 -1.189 -2.019 -2.055 -1.082 +-0.100 1.308 -0.907 -0.965 -2.198 -2.134 -1.082 +-1.098 0.674 -1.805 -1.984 -3.340 -3.176 -1.082 +-0.410 1.400 -1.102 -1.209 -2.735 -3.104 -1.082 +-1.431 0.658 -1.943 -2.018 -3.989 -4.644 -1.082 +-1.388 0.687 -1.910 -1.721 -3.457 -4.771 -1.082 +-1.144 0.912 -1.494 -1.175 -3.114 -4.146 -1.082 +-1.485 0.637 -2.009 -1.536 -3.737 -5.042 -1.082 +-2.024 0.073 -1.847 -1.482 -3.087 -3.893 -1.082 +-1.463 0.509 -1.566 -1.264 -2.961 -4.243 -1.082 +-1.798 0.296 -1.578 -0.933 -2.748 -4.238 -1.082 +-1.129 0.426 -1.076 -0.598 -1.857 -3.254 -1.082 +-1.105 0.715 -0.713 -0.031 -1.330 -2.514 -1.082 +-1.292 0.380 -0.785 -0.128 -1.514 -2.665 -1.082 +-1.350 0.335 -0.675 0.271 -0.965 -2.100 -1.082 +-1.910 -0.700 -0.781 -0.663 -1.786 -2.443 -1.082 +-0.070 0.614 -1.065 0.747 -0.103 1.444 -1.082 +7.153 6.366 -0.492 5.169 5.806 4.376 -1.082 +-2.612 -1.679 -0.827 0.411 -0.169 -0.791 -1.082 +-1.126 -0.083 -0.044 1.339 1.442 0.929 -1.082 +-7.309 -5.908 -0.249 -1.556 -2.141 1.112 -1.082 +-1.454 -0.738 0.032 1.840 2.533 2.357 -1.082 +-2.263 -1.470 -0.103 2.077 2.885 3.950 -1.082 +-4.078 -3.351 -1.498 0.729 1.836 3.437 -1.082 +-3.098 -2.476 -0.435 1.687 3.071 4.034 -1.082 +-2.601 -2.152 0.065 2.427 3.991 4.276 -1.082 +-2.981 -2.297 0.143 2.618 4.483 5.225 -1.082 +-3.362 -3.028 -0.170 2.560 4.612 5.459 -1.082 +-3.765 -3.355 -0.191 2.639 5.058 7.902 -1.082 +-2.918 -2.930 -0.108 2.180 4.124 4.237 -1.082 +-1.206 -1.778 -0.158 0.864 1.473 0.634 -1.082 +-2.111 -2.411 -0.116 1.552 2.869 2.672 -1.082 +-2.758 -3.584 -0.458 1.656 3.441 4.549 -1.082 +-2.732 -3.750 -0.698 0.913 2.436 5.249 -1.082 +-2.802 -3.551 -1.380 -0.817 -0.054 1.047 -1.082 +-0.798 -1.268 -0.126 0.317 0.294 -0.677 -1.082 +-0.520 -1.042 0.298 0.851 1.414 0.309 -1.082 +-0.892 -0.912 0.306 1.394 2.023 0.274 -1.082 +-0.557 -0.991 0.468 1.475 2.531 0.976 -1.082 +-0.690 -1.311 0.421 1.526 2.274 0.827 -1.082 +-0.492 -1.242 0.557 1.635 2.328 1.540 -1.082 +-0.251 1.187 -0.290 -0.003 -0.630 -0.414 9.410 +-0.492 1.110 -0.094 0.558 0.480 0.363 9.410 +-0.712 -0.735 -0.112 0.190 0.844 0.195 9.410 +-0.412 -0.927 -0.175 0.135 0.608 0.770 9.410 +-1.302 -2.279 -0.969 -0.690 -0.299 -0.510 9.410 +-1.260 -1.701 -0.690 0.098 0.123 -0.465 9.410 +-0.401 0.474 0.169 0.298 0.499 0.336 9.410 +-0.329 0.727 -0.218 -0.256 -0.251 0.087 9.410 +-2.849 -1.437 -0.674 0.697 1.929 3.277 6.741 +-0.303 -0.644 -0.582 -1.082 -1.697 -2.738 6.741 +-1.566 -1.480 -1.284 -1.582 -2.608 -3.972 6.741 +-2.539 -0.771 0.077 1.671 2.723 4.279 6.741 diff --git a/SRT/Configuration/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml b/SRT/Configuration/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml deleted file mode 100644 index 6f206ea786dcb141200aa7875ce7114c16fa11ee..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf0a20bd8cc8a9152cf4186fc04feb1ca0c45419 --- /dev/null +++ b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/Boss/Configurations/Configurations.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + CCG Gregoriano1 + KKG Gregoriano2 + WWG Gregoriano3 + QQG Gregoriano4 + CTR Gregoriano5 + MISTRAL Gregoriano6 + CABINET Gregoriano7 + CCB BWG1 + XB BWG3 + + diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..df460085464630ccb9eda6a22c6a22a7cb7ce20a --- /dev/null +++ b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/Coefficients/Coefficients.xml @@ -0,0 +1,31 @@ + + + + + + + + CCG ROTATION

-88.70659

+ + KKG ROTATION

-159.8899

+ + WWG ROTATION

90.971610

+ + QQG ROTATION

162.771

+ + CTR ROTATION

55.373967

+ + MISTRAL ROTATION

-51.821170

+ + CABINET ROTATION

40

+ + + +
diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml deleted file mode 100644 index c8cb3564cc04d1d6db172fee86be468475c5da2d..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/GFR/LookupTables/LookupTables.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - ROTATION -88.70659 - ROTATION -88.70659 - ROTATION -159.8899 - ROTATION -159.8899 - ROTATION 90.971610 - ROTATION 90.971610 - ROTATION 162.771 - ROTATION 162.771 - ROTATION 55.373967 - ROTATION 55.373967 - ROTATION -51.821170 - ROTATION -51.821170 - - ROTATION 40 - - - - - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..296a8bdb4fd4aa6eafdda595a452e432b2feb0e5 --- /dev/null +++ b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/Coefficients/Coefficients.xml @@ -0,0 +1,19 @@ + + + + + + + + CCBROTATION

44.95999544939037931

+ + XB ROTATION

135.003886290282340384

+ +
diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml deleted file mode 100644 index 2c09bec47bc4527da06d71157a2423d8f7697cd9..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/M3R/LookupTables/LookupTables.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ROTATION -44.95999544939037931 - ROTATION -44.95999544939037931 - ROTATION -135.003886290282340384 - ROTATION -135.003886290282340384 - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml deleted file mode 100644 index 086b3785bfad3d4cf429fc8d5b6703514c07c6f6..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/PFP/LookupTables/LookupTables.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - TX 0 - TZ 0 - RTHETA 0 - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..b7490f861b3d5410db1d9851c31919c4b829e29d --- /dev/null +++ b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/Coefficients/Coefficients.xml @@ -0,0 +1,99 @@ + + + + + + + + CCG TX

-1.5

+ CCG TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ CCG TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ CCG RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ CCG RY

-0.036111111111111108

+ CCG RZ

0

+ + CCG_AS_OFFTX

-1.5

+ CCG_AS_OFFTY

28.256852219272844, -0.002707044952, -0.009870218853, 0.000031617958

+ CCG_AS_OFFTZ

9.530113849340003, -0.169826241752, 0.000419997047, 0.000003985237

+ CCG_AS_OFFRX

-0.011392527142374848, -0.0001426193499425, 0.000039508844799, -0.000000131010010

+ CCG_AS_OFFRY

-0.03611111111111111

+ CCG_AS_OFFRZ

0

+ + KKG TX

-1.5

+ KKG TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ KKG TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ KKG RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ KKG RY

-0.036111111111111108

+ KKG RZ

0

+ + KKG_AS_OFFTX

-1.5

+ KKG_AS_OFFTY

28.256852219272844, -0.002707044952, -0.009870218853, 0.000031617958

+ KKG_AS_OFFTZ

9.530113849340003, -0.169826241752, 0.000419997047, 0.000003985237

+ KKG_AS_OFFRX

-0.011392527142374848, -0.0001426193499425, 0.000039508844799, -0.000000131010010

+ KKG_AS_OFFRY

-0.03611111111111111

+ KKG_AS_OFFRZ

0

+ + WWG TX

0

+ WWG TY

0

+ WWG TZ

0

+ WWG RX

0

+ WWG RY

0

+ WWG RZ

0

+ + QQG TX

0

+ QQG TY

0

+ QQG TZ

0

+ QQG RX

0

+ QQG RY

0

+ QQG RZ

0

+ + CTR TX

0

+ CTR TY

0

+ CTR TZ

0

+ CTR RX

0

+ CTR RY

0

+ CTR RZ

0

+ + MISTRAL TX

-1.5

+ MISTRAL TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ MISTRAL TZ

-15.6669651675, 1.9293068324, -0.0628990613, 0.0007771141, -0.0000032940

+ MISTRAL RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ MISTRAL RY

-0.036111111111111108

+ MISTRAL RZ

0

+ + CCB TX

-1.5

+ CCB TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ CCB TZ

91.5590595452, -16.4202062811, 1.16941963489, -0.040640240455, 0.000733782714288, -6.62393455442e-06, 2.36410838911e-08

+ CCB RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ CCB RY

-0.036111111111111108

+ CCB RZ

0

+ + CCB_AS_OFFTX

-1.5

+ CCB_AS_OFFTY

28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958

+ CCB_AS_OFFTZ

9.530113849340003,-0.169826241752,0.000419997047,0.000003985237

+ CCB_AS_OFFRX

-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010

+ CCB_AS_OFFRY

-0.03611111111111111

+ CCB_AS_OFFRZ

0

+ + XB TX

-1.5

+ XB TY

29.556666666666498, 0.263472663139432, -0.018206701940039, 0.000072373113855

+ XB TZ

-38.3143893309, 4.30888128547, -0.18265795755, 0.00350049382452, -3.17057523513e-05, 1.11006707448e-07

+ XB RX

-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053

+ XB RY

-0.036111111111111108

+ XB RZ

0

+ + XB_AS_OFF TX

-1.5

+ XB_AS_OFF TY

28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958

+ XB_AS_OFF TZ

7.92754535681,-1.73279985542,0.147346047014,-0.00516934108597,7.69094654954e-05,-4.0697957632e-07

+ XB_AS_OFF RX

-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010

+ XB_AS_OFF RY

-0.03611111111111111

+ XB_AS_OFF RZ

0

+ +
diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml b/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml deleted file mode 100644 index 0cabed4bb1d96c2b14934d348734095c81fcd5e3..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/SRP/LookupTables/LookupTables.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX0 - TY0 - TZ0 - RX0 - RY0 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-15.6669651675,1.9293068324,-0.0628990613,0.0007771141,-0.0000032940 - RX-0.0055555555555569409, 0.00014822163433269445, 0.000027586713698, -0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ9.530113849340003,-0.169826241752,0.000419997047,0.000003985237 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ91.5590595452,-16.4202062811,1.16941963489,-0.040640240455,0.000733782714288,-6.62393455442e-06,2.36410838911e-08 - RX-0.0055555555555569409,0.00014822163433269445,0.000027586713698,-0.000000077732053 - RY-0.036111111111111108 - RZ0 - - TX-1.5 - TY28.256852219272844,-0.002707044952,-0.009870218853,0.000031617958 - TZ7.92754535681,-1.73279985542,0.147346047014,-0.00516934108597,7.69094654954e-05,-4.0697957632e-07 - RX-0.011392527142374848,-0.0001426193499425,0.000039508844799,-0.000000131010010 - RY-0.03611111111111111 - RZ0 - - TX-1.5 - TY29.556666666666498,0.263472663139432,-0.018206701940039,0.000072373113855 - TZ-38.3143893309,4.30888128547,-0.18265795755,0.00350049382452,-3.17057523513e-05,1.11006707448e-07 - RX-0.0055555555555569409,0.00014822163433269445,0.000027586713698,-0.000000077732053 - RY-0.036111111111111108 - RZ0 - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml deleted file mode 100755 index 51fb4fa2cafdbb9a78e2dcef41b2e2bd2b72299f..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - LO-DEFAULT - - 0 - 1 - 2300.0 - - - - BW-NARROW - - 1 - 0 - - - 2 - 0 - - - - BW-MEDIUM - - 1 - 1 - - - 2 - 1 - - - - BW-WIDE - - 1 - 2 - - - 2 - 2 - - - - BW-UNFILTERED - - 1 - 3 - - - 2 - 3 - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml deleted file mode 100755 index 8225693801ead36594209f7e48eb7225f6646404..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - 0 - 0.0 - 0.0 - 1.0 - - - - 1 - 0.0 - 0.0 - 1.0 - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml deleted file mode 100755 index 84efd5a1446f29be76edf6ebee7b8df8281227bb..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml deleted file mode 100755 index 486dbda007ac7324e177a20f18ff996ea484b719..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml deleted file mode 100755 index 96c8bbfa36bc394a75720821e0d068d6fbb55cb6..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml deleted file mode 100755 index 27538375da82e77570c9af19b45f08cea613b781..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml deleted file mode 100755 index 3c1fed631fea6e05347fc513ca42666cb6d2c99c..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml deleted file mode 100755 index ee724029fcfb49c776905533f82eadf0be5b8958..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml deleted file mode 100755 index ef198849a977821f20f079e36f556e48723acbba..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml deleted file mode 100755 index 258a99af9ed8d42733d128c4eed6af58306cafd6..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml deleted file mode 100755 index 2e9b081ca3dff6f2daea7c3e2c0e8c9b8fe04bdc..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml deleted file mode 100755 index e54d1e4bff0d50c6fa446a6719d9475613461791..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml deleted file mode 100755 index 7a99b4df49112d7fa086dcab0f2058ea9f356316..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml deleted file mode 100755 index 1176a6c82f6947c1741268fe352c2a721bb38df4..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml deleted file mode 100755 index 3b1864465b965680cd146169159da7da08521b80..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml deleted file mode 100755 index bf0b3bb04c512e882a2f7a27ac56ae1ba472f951..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml deleted file mode 100755 index 11821495db3180d1a7a2af2bb9996df48867a59c..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml deleted file mode 100755 index 5bfd21a59c9a70d6c139d9342b8c06d2ec9af176..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml deleted file mode 100755 index 5cd5f7c22fe549c9704cad49090c73b9c99f1ae8..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml deleted file mode 100755 index e5644e90c91f5438da57ab791b807b7bf9b90d4b..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml deleted file mode 100755 index 193a868d77a53fbb3e1f36c081a15cefc2a9ce71..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml deleted file mode 100755 index 926adb8fdf9acd6d1384c74af8a9b664ba8b2177..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml deleted file mode 100755 index 0095de2700cef0f984f0ed866be0f34574dc66df..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml deleted file mode 100755 index bbf5eef3fbc9ca11b9e6652886f077b66b32abae..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml deleted file mode 100755 index aa0ed2acd1603fd59ae0ef213b263b20f717da99..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml deleted file mode 100755 index b0cf43e305e82096e2ace9938dab16f67ecbb014..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml deleted file mode 100755 index b759bdc87b88eacea1412f2389a6e56204364f52..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml deleted file mode 100755 index d6f9a64f28ea6c9c379da53fc968625654e80994..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml deleted file mode 100755 index 6d2ff7b6d1dc574b54b4168996d8694aec2b9a4f..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml deleted file mode 100755 index 92d133b129ac2687798f913392b039d381271fef..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml deleted file mode 100755 index efc49c516e23619f94cc5f97f91c005a0a4eba99..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml deleted file mode 100755 index 80d52142e74aafcaf627153972e278dc32241541..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml deleted file mode 100755 index ad7c48bd47a86db723039b6f02afaa01bd84d931..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml deleted file mode 100755 index 3efc4df4ce35f9d13faabe6b383109ca56a47805..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml deleted file mode 100755 index bcb5bc99d491ef3ce59750e57d359f8a80e9218f..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml deleted file mode 100755 index ba4961e9eab2be095a03723ba619ca8777377329..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml deleted file mode 100755 index 99547746c48ad2a508cd196536d611c029fb0e4b..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml deleted file mode 100755 index e0a0dae8a27ef596d98ef1571b83834139553114..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml deleted file mode 100755 index 4e7aeea44c7db0c3c16209b572835f5c9d2d5ecb..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml deleted file mode 100755 index 9319a10bf8a31214c7eadc58a1cc4d94c7d20758..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml deleted file mode 100755 index 725282b04341da66288c6bb378a9b7275fbffd3f..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml deleted file mode 100755 index 1d22139d7ac5324e2cc90a9cc9b29cd0cb66a338..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml deleted file mode 100755 index 8509452ae5bbbd9c9c936bd13837e43168ca467a..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml deleted file mode 100755 index 0ea4504a98085ce5f284f346dea255303da3d20a..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml deleted file mode 100755 index ca18f637b3f50e297af7bd31ec898dbc1bdf5606..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml deleted file mode 100755 index 0e9a1265eaeab62a35d141a32ed4d81fb497ed60..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml deleted file mode 100755 index 11ea5d8370d9ba536c11e4e530d9994a3ff69a69..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml deleted file mode 100755 index 0aebdfc9a45e48c21c4fbd47a0da95f0077aebdc..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml deleted file mode 100755 index 4759629e3f2c263e0fe8463890103e3e02b52155..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml deleted file mode 100755 index 35941cc4b610943b7973466948f2e1f2958fd852..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml deleted file mode 100755 index 5a71cc9bdd0f8ded9f6a3c44481e92f3a945d8a3..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml deleted file mode 100755 index 965f288f5df85f2a0c3e83a887d08b45772d7147..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml deleted file mode 100755 index 5246e2c67711fd176f755ea4ce54e4dd47ccf58f..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml deleted file mode 100755 index 49998121287b4441d9959a6da58fb09868c06a83..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml deleted file mode 100755 index e187d9c248aed0e6e9964e1be6403eccc14e22d7..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml deleted file mode 100755 index d92449d7ba3a884ecf6c45ac1d7be9e3a2f0917b..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml deleted file mode 100755 index 6cf6a3d80fa9743e0ecabd1a210f51928e2bc416..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml deleted file mode 100755 index 3da871496270a2fa9e935b1901ba6c6990bfbc86..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml deleted file mode 100755 index d529c01e75efe20a2460612e3b1b0c60689b1b43..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml deleted file mode 100755 index cd7f901ac9f79e70ef29ee5d89250455c7c2325a..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml deleted file mode 100755 index 298787cb00bfcfe864147a9692313f5dd2744309..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml deleted file mode 100755 index e9ba2b21fe35a0e8043dd35f90af2f392f622b38..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml deleted file mode 100755 index f3bb74695059d98aa020281e34da21e7fab72b30..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml deleted file mode 100755 index 888c4be953161cb69b1433e0f65a4d41e6472438..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml deleted file mode 100755 index b5677847cd2632cd1b3c4f98841975736fe15756..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml deleted file mode 100755 index 84b1cdb86f8567e65520d2843ac598e20b86953c..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml deleted file mode 100755 index a7b81c097a25911f44e14094bfc80a5f64a0a049..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml deleted file mode 100755 index 048c849e39ac82a332069bfa704964fd50f7d585..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml deleted file mode 100755 index ac82399fd7414d212d80f20a3faff3d0d0dcc9aa..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml deleted file mode 100755 index dad90916122568f82bd3f8e2412c2ff5a9297a65..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml deleted file mode 100755 index c3987d50a901872e7bf5bbeae84d5189047c917a..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml deleted file mode 100755 index 612d1e291593fdeacdef19340b52948faf31f078..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml deleted file mode 100755 index d3b3bfaecdec2f24ddefb45c9c979b9d33ab3d48..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml deleted file mode 100755 index 5d1c6d0eb503091d20627810d9bc88819f9a9625..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml deleted file mode 100755 index 88698ade96ff493a673a1eafbae6319fa4735511..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml deleted file mode 100755 index d7046bc611b49d6ce71107b6bae6deee4e79ab79..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml deleted file mode 100755 index b19421f85bc45af865c47a65068407d6178a88c9..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml deleted file mode 100755 index 58d03bb99c1e312589e097d7cba41cc5e742c88e..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py deleted file mode 100755 index 8b18f31819df7a7c5c3340d54613391249f6315c..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py +++ /dev/null @@ -1,208 +0,0 @@ -""" -This script makes for each mode its directory and .xml file (Python 3.3 or higher) - -Each mode is composed by 4 characters, that indicate respectively the: - - - P band polarization (*, L, C) - - P band filter ID (1, 2, 3): - * 1 -> all band filter, 305-410 no filter - * 2 -> 310-350 MHz - * 3 -> 305-410 MHz (band-pass filter) - - L band polarization (three character choices: *, L, C) - - L band filter ID (1, 2, 3, 4, 5): - * 1 -> all band filter, 1300-1800 no filter - * 2 -> 1320-1780 MHz - * 3 -> 1350-1450 MHz (VLBI) - * 4 -> 1300-1800 MHz (band-pass) - * 5 -> 1625-1715 MHz (VLBI) - -For instance, the code C1L2 means: - - - Circular polarization of the P band - - Filter n.1 of the P band - - Linear polarization of the L band - - Filter n.2 of the L band - -The * character means the corresponding value should not change. -For instance, the code *1** means: - - - Do not change the polarization of the P band - - Filter n.1 of the P band - - Do not change the polarization of the L band - - Do not change the filter of the L band - -It is possible to use only one receiver. In the case the observer want to -use the P band, the 2 characters of the mode related to the L band are "X". -For instance, if we want to use a P band in circular polarization, with the -filter n.2, the mode will be C2XX. -""" - -import os - -pband_filters = { - 1: (305.0, 410.0), # all band filter, 305-410 no filter - 2: (310.0, 350.0), # 310-350 MHz - 3: (305.0, 410.0) # 305-410 MHz (band-pass filter) -} - -lband_filters = { - 1: (1300.0, 1800.0), # all band filter, 1300-1800 no filter - 2: (1320.0, 1780.0), # 1320-1780 MHz - 3: (1350.0, 1450.0), # 1350-1450 MHz (VLBI) - 4: (1300.0, 1800.0), # 1300-1800 MHz (band-pass) - 5: (1625.0, 1715.0) # 1625-1715 MHz (VLBI) -} - -formatter = { - 'default_lo': 2324.0, - 'fixed_lo': 0.0, - 'lo_min': 0.0, - 'lo_max': 3000.0, - 'lpfilter_min': 0.0, - 'lpfilter_max': 1000.0, -} - - -for pband_pol in 'LC': - for lband_pol in 'LC': - for pid, pband in pband_filters.items(): - for lid, lband in lband_filters.items(): - code = "%s%s%s%s" %(pband_pol, pid, lband_pol, lid) - formatter['code'] = code - formatter['pband_pol'] = 'L R' if pband_pol == 'C' else 'H V' - formatter['lband_pol'] = 'L R' if lband_pol == 'C' else 'H V' - formatter['pband_rf_min'] = pband[0] - formatter['pband_rf_max'] = pband[1] - formatter['lband_rf_min'] = lband[0] - formatter['lband_rf_max'] = lband[1] - formatter['pband_filter_id'] = pid - formatter['lband_filter_id'] = lid - file_name = os.path.join(code, code + '.xml') - os.mkdir(code) - outfile = open(os.path.join(code, code + '.xml'), 'w') - text = """ - - - """.format_map(formatter) - lines = [line.lstrip() + '\n' for line in text.split('\n')] - outfile.writelines(lines) - - -pband_code = 'X' -for lband_pol in 'LC': - for lid, lband in lband_filters.items(): - code = "%s%s%s%s" %(pband_code, pband_code, lband_pol, lid) - formatter['code'] = code - formatter['pband_pol'] = 'L R' - formatter['lband_pol'] = 'L R' if lband_pol == 'C' else 'H V' - formatter['pband_rf_min'] = 305.0 - formatter['pband_rf_max'] = 410.0 - formatter['lband_rf_min'] = lband[0] - formatter['lband_rf_max'] = lband[1] - formatter['pband_filter_id'] = 1 - formatter['lband_filter_id'] = lid - file_name = os.path.join(code, code + '.xml') - os.mkdir(code) - outfile = open(os.path.join(code, code + '.xml'), 'w') - text = """ - - - """.format_map(formatter) - lines = [line.lstrip() + '\n' for line in text.split('\n')] - outfile.writelines(lines) - - -lband_code = 'X' -for pband_pol in 'LC': - for pid, pband in pband_filters.items(): - code = "%s%s%s%s" %(pband_pol, pid, lband_code, lband_code) - formatter['code'] = code - formatter['pband_pol'] = 'L R' if pband_pol == 'C' else 'H V' - formatter['lband_pol'] = 'L R' - formatter['pband_rf_min'] = pband[0] - formatter['pband_rf_max'] = pband[1] - formatter['lband_rf_min'] = 1300.0 - formatter['lband_rf_max'] = 1800.0 - formatter['pband_filter_id'] = pid - formatter['lband_filter_id'] = 1 - file_name = os.path.join(code, code + '.xml') - os.mkdir(code) - outfile = open(os.path.join(code, code + '.xml'), 'w') - text = """ - - - """.format_map(formatter) - lines = [line.lstrip() + '\n' for line in text.split('\n')] - outfile.writelines(lines) diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml deleted file mode 100644 index 83793c03b08e595c09a99dc0e3238bc358c32be2..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - -0.019.0 - -400.019.0 - -800.019.0 - -1200.019.0 - -1600.019.0 - -2000.019.0 - -2400.019.0 - - diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml b/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml deleted file mode 100755 index abcfab1de138cd614f5454aded841af1abfbd040..0000000000000000000000000000000000000000 --- a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -0300-13.0 -0350-15.0 -0410-17.0 - -11300-15.0 -11550-14.0 -11800-17.0 - - diff --git a/SRT/Interfaces/SRTActiveSurfaceInterface/config/CDB/schemas/SRTActiveSurfaceBoss.xsd b/SRT/Interfaces/SRTActiveSurfaceInterface/config/CDB/schemas/SRTActiveSurfaceBoss.xsd index 3907fddd48682039140565890d5fc25ab44dcd10..ee4bb987e14cb98fdb92d206b283227e4f0a86d2 100644 --- a/SRT/Interfaces/SRTActiveSurfaceInterface/config/CDB/schemas/SRTActiveSurfaceBoss.xsd +++ b/SRT/Interfaces/SRTActiveSurfaceInterface/config/CDB/schemas/SRTActiveSurfaceBoss.xsd @@ -30,6 +30,7 @@ + diff --git a/SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceBoss.midl b/SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceBoss.midl index 634d21e768054a5c1785ad247d55d61ac8e7b280..fd92b43e92306cfbbdc360947b7eb7c068e8acf7 100644 --- a/SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceBoss.midl +++ b/SRT/Interfaces/SRTActiveSurfaceInterface/idl/SRTActiveSurfaceBoss.midl @@ -66,6 +66,11 @@ module ActiveSurface { */ readonly attribute Management::ROTBoolean tracking; + /* + * This attribute shows the filename of the currently loaded lookup table + */ + readonly attribute ACS::ROstring LUT_filename; + /** * This method can be called in order to disable the component. That * means that the activesurface subsystem cannot be commanded any more via the diff --git a/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl b/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl index 293610d47f930eb15215b3ee2fd770418e66302c..b88d589425cfde7d01be5cb95193f67df5f9960b 100644 --- a/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl +++ b/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl @@ -135,10 +135,11 @@ module MinorServo /** * This method loads from the CDB the positioning coefficients related to the given configuration * @param configuration the string representing the name of the table from which the coefficients will be loaded + * @param as_off a boolean indicating whether the servo requires a _AS_OFF configuration * @throw ComponentErrors::ComponentErrorsEx when there is an error while trying to load the table for the given configuration * @return true if the servo is in use with the current configuration, false otherwise */ - boolean setup(in string configuration) raises (ComponentErrors::ComponentErrorsEx); + boolean setup(in string configuration, in boolean as_off) raises (ComponentErrors::ComponentErrorsEx); /** * This method calculates the servo coordinates for a given elevation diff --git a/SRT/Libraries/SRTMinorServoLibrary/include/SRTMinorServoContainers.h b/SRT/Libraries/SRTMinorServoLibrary/include/SRTMinorServoContainers.h index cae77edb364c453394e25fd0990fe57aa35fc462..e966f532dec770beeac0b78a168a79f29a287d71 100644 --- a/SRT/Libraries/SRTMinorServoLibrary/include/SRTMinorServoContainers.h +++ b/SRT/Libraries/SRTMinorServoLibrary/include/SRTMinorServoContainers.h @@ -70,31 +70,6 @@ namespace MinorServo double starting_elevation = 0; }; - /** - * This dictionary contains information regarding the possibile focal configurations. - * The key indicates the configuration as known by DISCOS. - * The value is a pair, the first element of the pair is the DISCOS enumeration for the relative Leonardo configuration, - * the second element of the pair indicates whether the configuration has a ASACTIVE twin configuraiton. - */ - using DiscosConfigurationNameTableType = std::map>; - const DiscosConfigurationNameTableType DiscosConfigurationNameTable = - { - //{"LLP", std::make_pair(CONFIGURATION_PRIMARY, false)}, - //{"PPP", std::make_pair(CONFIGURATION_PRIMARY, false)}, - //{"PLP", std::make_pair(CONFIGURATION_PRIMARY, false)}, - //{"HHP", std::make_pair(CONFIGURATION_PRIMARY, false)}, - //{"XKP", std::make_pair(CONFIGURATION_PRIMARY, false)}, - {"CCG", std::make_pair(CONFIGURATION_GREGORIAN1, true )}, - {"KKG", std::make_pair(CONFIGURATION_GREGORIAN2, true )}, - {"WWG", std::make_pair(CONFIGURATION_GREGORIAN3, true )}, - {"QQG", std::make_pair(CONFIGURATION_GREGORIAN4, true )}, - {"TRI", std::make_pair(CONFIGURATION_GREGORIAN5, true )}, - {"MISTRAL", std::make_pair(CONFIGURATION_GREGORIAN6, true )}, - {"CCB", std::make_pair(CONFIGURATION_BWG1, true )}, - {"XB", std::make_pair(CONFIGURATION_BWG3, true )}, - {"CABINET", std::make_pair(CONFIGURATION_GREGORIAN7, false)}, - }; - /** * This dictionary contains the Leonardo focal configurations DISCOS enumerations, alongside their name inside the Leonardo minor servo system. */ @@ -134,7 +109,7 @@ namespace MinorServo (CONFIGURATION_BWG3, 23) (CONFIGURATION_BWG4, 24); - using SRTMinorServoLookupTable = std::map>; + using SRTMinorServoCoefficientsTable = std::map>; /** * This class implements a queue of time tagged positions. it extends a simple std::map with some specific methods. diff --git a/SRT/Outdated/CDB/MACI/.gitignore b/SRT/Outdated/CDB/MACI/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f83a0eb465b552b9b9a326c418a33f5458b82df7 --- /dev/null +++ b/SRT/Outdated/CDB/MACI/.gitignore @@ -0,0 +1 @@ +# This file only exists here in order to prevent the directory from being ignored by git if empty diff --git a/SRT/Configuration/CDB/MACI/Components/BACKENDS/DXC2/DXC2.xml b/SRT/Outdated/CDB/MACI/Components/BACKENDS/DXC2/DXC2.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/BACKENDS/DXC2/DXC2.xml rename to SRT/Outdated/CDB/MACI/Components/BACKENDS/DXC2/DXC2.xml diff --git a/SRT/Configuration/CDB/MACI/Components/BACKENDS/Holography/Holography.xml b/SRT/Outdated/CDB/MACI/Components/BACKENDS/Holography/Holography.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/BACKENDS/Holography/Holography.xml rename to SRT/Outdated/CDB/MACI/Components/BACKENDS/Holography/Holography.xml diff --git a/Medicina/Configuration/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml b/SRT/Outdated/CDB/MACI/Components/BACKENDS/NoiseGenerator/NoiseGenerator.xml similarity index 100% rename from Medicina/Configuration/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml rename to SRT/Outdated/CDB/MACI/Components/BACKENDS/NoiseGenerator/NoiseGenerator.xml diff --git a/SRT/Configuration/CDB/MACI/Components/BACKENDS/XBackends/XBackends.xml b/SRT/Outdated/CDB/MACI/Components/BACKENDS/XBackends/XBackends.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/BACKENDS/XBackends/XBackends.xml rename to SRT/Outdated/CDB/MACI/Components/BACKENDS/XBackends/XBackends.xml diff --git a/SRT/Configuration/CDB/MACI/Components/MINORSERVO/PFP/PFP.xml b/SRT/Outdated/CDB/MACI/Components/MINORSERVO/PFP/PFP.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/MINORSERVO/PFP/PFP.xml rename to SRT/Outdated/CDB/MACI/Components/MINORSERVO/PFP/PFP.xml diff --git a/SRT/Configuration/CDB/MACI/Components/RECEIVERS/LO_LP/LO_LP.xml b/SRT/Outdated/CDB/MACI/Components/RECEIVERS/LO_LP/LO_LP.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/RECEIVERS/LO_LP/LO_LP.xml rename to SRT/Outdated/CDB/MACI/Components/RECEIVERS/LO_LP/LO_LP.xml diff --git a/SRT/CDB/MACI/Components/LO_SBAND/LO_SBAND.xml b/SRT/Outdated/CDB/MACI/Components/RECEIVERS/LO_SBAND/LO_SBAND.xml similarity index 100% rename from SRT/CDB/MACI/Components/LO_SBAND/LO_SBAND.xml rename to SRT/Outdated/CDB/MACI/Components/RECEIVERS/LO_SBAND/LO_SBAND.xml diff --git a/SRT/Configuration/CDB/MACI/Components/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml b/SRT/Outdated/CDB/MACI/Components/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml rename to SRT/Outdated/CDB/MACI/Components/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml diff --git a/SRT/Configuration/CDB/MACI/Components/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml b/SRT/Outdated/CDB/MACI/Components/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Components/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml rename to SRT/Outdated/CDB/MACI/Components/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/HolographyContainer/HolographyContainer.xml b/SRT/Outdated/CDB/MACI/Containers/HolographyContainer/HolographyContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/HolographyContainer/HolographyContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/HolographyContainer/HolographyContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/HolographyDXCContainer/HolographyDXCContainer.xml b/SRT/Outdated/CDB/MACI/Containers/HolographyDXCContainer/HolographyDXCContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/HolographyDXCContainer/HolographyDXCContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/HolographyDXCContainer/HolographyDXCContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/LocalOscillatorLPContainer/LocalOscillatorLPContainer.xml b/SRT/Outdated/CDB/MACI/Containers/LocalOscillatorLPContainer/LocalOscillatorLPContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/LocalOscillatorLPContainer/LocalOscillatorLPContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/LocalOscillatorLPContainer/LocalOscillatorLPContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/LocalOscillatorsContainer/LocalOscillatorsContainer.xml b/SRT/Outdated/CDB/MACI/Containers/LocalOscillatorsContainer/LocalOscillatorsContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/LocalOscillatorsContainer/LocalOscillatorsContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/LocalOscillatorsContainer/LocalOscillatorsContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/NoiseGeneratorContainer/NoiseGeneratorContainer.xml b/SRT/Outdated/CDB/MACI/Containers/NoiseGeneratorContainer/NoiseGeneratorContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/NoiseGeneratorContainer/NoiseGeneratorContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/NoiseGeneratorContainer/NoiseGeneratorContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/PyIFDistributorContainer/PyIFDistributorContainer.xml b/SRT/Outdated/CDB/MACI/Containers/PyIFDistributorContainer/PyIFDistributorContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/PyIFDistributorContainer/PyIFDistributorContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/PyIFDistributorContainer/PyIFDistributorContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/SRTLPBandContainer/SRTLPBandContainer.xml b/SRT/Outdated/CDB/MACI/Containers/SRTLPBandContainer/SRTLPBandContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/SRTLPBandContainer/SRTLPBandContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/SRTLPBandContainer/SRTLPBandContainer.xml diff --git a/SRT/Configuration/CDB/MACI/Containers/XContainer/XContainer.xml b/SRT/Outdated/CDB/MACI/Containers/XContainer/XContainer.xml similarity index 100% rename from SRT/Configuration/CDB/MACI/Containers/XContainer/XContainer.xml rename to SRT/Outdated/CDB/MACI/Containers/XContainer/XContainer.xml diff --git a/SRT/Outdated/CDB/alma/.gitignore b/SRT/Outdated/CDB/alma/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f83a0eb465b552b9b9a326c418a33f5458b82df7 --- /dev/null +++ b/SRT/Outdated/CDB/alma/.gitignore @@ -0,0 +1 @@ +# This file only exists here in order to prevent the directory from being ignored by git if empty diff --git a/SRT/CDB/alma/ANTENNA/BossSimulator/BossSimulator.xml b/SRT/Outdated/CDB/alma/ANTENNA/BossSimulator/BossSimulator.xml similarity index 100% rename from SRT/CDB/alma/ANTENNA/BossSimulator/BossSimulator.xml rename to SRT/Outdated/CDB/alma/ANTENNA/BossSimulator/BossSimulator.xml diff --git a/SRT/Configuration/CDB/alma/BACKENDS/DXC2/DXC2.xml b/SRT/Outdated/CDB/alma/BACKENDS/DXC2/DXC2.xml similarity index 100% rename from SRT/Configuration/CDB/alma/BACKENDS/DXC2/DXC2.xml rename to SRT/Outdated/CDB/alma/BACKENDS/DXC2/DXC2.xml diff --git a/SRT/Configuration/CDB/alma/BACKENDS/Holography/Holography.xml b/SRT/Outdated/CDB/alma/BACKENDS/Holography/Holography.xml similarity index 100% rename from SRT/Configuration/CDB/alma/BACKENDS/Holography/Holography.xml rename to SRT/Outdated/CDB/alma/BACKENDS/Holography/Holography.xml diff --git a/SRT/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml b/SRT/Outdated/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml similarity index 100% rename from SRT/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml rename to SRT/Outdated/CDB/alma/BACKENDS/NoiseGenerator/NoiseGenerator.xml diff --git a/SRT/Configuration/CDB/alma/BACKENDS/XBackends/XBackends.xml b/SRT/Outdated/CDB/alma/BACKENDS/XBackends/XBackends.xml similarity index 100% rename from SRT/Configuration/CDB/alma/BACKENDS/XBackends/XBackends.xml rename to SRT/Outdated/CDB/alma/BACKENDS/XBackends/XBackends.xml diff --git a/SRT/Outdated/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml b/SRT/Outdated/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml new file mode 100644 index 0000000000000000000000000000000000000000..b553b2235d73efb25dadc42a0adf2536ee7ea531 --- /dev/null +++ b/SRT/Outdated/CDB/alma/DataBlock/MinorServo/PFP/Coefficients/Coefficients.xml @@ -0,0 +1,35 @@ + + + + + + + + LLPTX

0

+ LLPTZ

0

+ LLPRTHETA

0

+ + PPPTX

0

+ PPPTZ

0

+ PPPRTHETA

0

+ + PLPTX

0

+ PLPTZ

0

+ PLPRTHETA

0

+ + HHPTX

0

+ HHPTZ

0

+ HHPRTHETA

0

+ + XKPTX

0

+ XKPTZ

0

+ XKPRTHETA

0

+ +
diff --git a/SRT/Configuration/CDB/alma/DataBlock/MinorServo/PFP/Properties/Properties.xml b/SRT/Outdated/CDB/alma/DataBlock/MinorServo/PFP/Properties/Properties.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/MinorServo/PFP/Properties/Properties.xml rename to SRT/Outdated/CDB/alma/DataBlock/MinorServo/PFP/Properties/Properties.xml diff --git a/SRT/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTIFDistributor/Configuration/Configuration.xml diff --git a/SRT/CDB/alma/DataBlock/SRTIFDistributor14/Mapping/Mapping.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTIFDistributor14/Mapping/Mapping.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTIFDistributor14/Mapping/Mapping.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTIFDistributor14/Mapping/Mapping.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Feeds/Feeds.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C1/C1C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C2/C1C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C3/C1C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C4/C1C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1C5/C1C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L1/C1L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L2/C1L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L3/C1L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L4/C1L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1L5/C1L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C1XX/C1XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C1/C2C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C2/C2C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C3/C2C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C4/C2C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2C5/C2C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L1/C2L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L2/C2L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L3/C2L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L4/C2L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2L5/C2L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C2XX/C2XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C1/C3C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C2/C3C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C3/C3C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C4/C3C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3C5/C3C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L1/C3L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L2/C3L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L3/C3L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L4/C3L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3L5/C3L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/C3XX/C3XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C1/L1C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C2/L1C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C3/L1C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C4/L1C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1C5/L1C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L1/L1L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L2/L1L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L3/L1L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L4/L1L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1L5/L1L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L1XX/L1XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C1/L2C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C2/L2C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C3/L2C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C4/L2C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2C5/L2C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L1/L2L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L2/L2L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L3/L2L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L4/L2L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2L5/L2L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L2XX/L2XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C1/L3C1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C2/L3C2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C3/L3C3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C4/L3C4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3C5/L3C5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L1/L3L1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L2/L3L2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L3/L3L3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L4/L3L4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3L5/L3L5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/L3XX/L3XX.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/SINGLEDISH/SINGLEDISH.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/SINGLEDISH/SINGLEDISH.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/SINGLEDISH/SINGLEDISH.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/SINGLEDISH/SINGLEDISH.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/VLBI/VLBI.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/VLBI/VLBI.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/VLBI/VLBI.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/VLBI/VLBI.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC1/XXC1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC2/XXC2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC3/XXC3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC4/XXC4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXC5/XXC5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL1/XXL1.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL2/XXL2.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL3/XXL3.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL4/XXL4.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/XXL5/XXL5.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Modes/make_modes.py diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/NoiseMark/NoiseMark.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Synthesizer/Synthesizer.xml diff --git a/SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml similarity index 100% rename from SRT/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTLPBandReceiver/Taper/Taper.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Feeds/Feeds.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Feeds/Feeds.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Feeds/Feeds.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Feeds/Feeds.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/MarkCoefficients/MarkCoefficients.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/MarkCoefficients/MarkCoefficients.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/MarkCoefficients/MarkCoefficients.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/MarkCoefficients/MarkCoefficients.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/SINGLEDISH/SINGLEDISH.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/SINGLEDISH/SINGLEDISH.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/SINGLEDISH/SINGLEDISH.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/SINGLEDISH/SINGLEDISH.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/VLBI/VLBI.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/VLBI/VLBI.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/VLBI/VLBI.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Modes/VLBI/VLBI.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Synthesizer/Synthesizer.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Synthesizer/Synthesizer.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Synthesizer/Synthesizer.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Synthesizer/Synthesizer.xml diff --git a/SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Taper/Taper.xml b/SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Taper/Taper.xml similarity index 100% rename from SRT/Configuration/CDB/alma/DataBlock/SRTSBandMFReceiver/Taper/Taper.xml rename to SRT/Outdated/CDB/alma/DataBlock/SRTSBandMFReceiver/Taper/Taper.xml diff --git a/SRT/Configuration/CDB/alma/RECEIVERS/LO1/LO1.xml b/SRT/Outdated/CDB/alma/RECEIVERS/LO1/LO1.xml similarity index 100% rename from SRT/Configuration/CDB/alma/RECEIVERS/LO1/LO1.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/LO1/LO1.xml diff --git a/SRT/Configuration/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml b/SRT/Outdated/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml similarity index 100% rename from SRT/Configuration/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/LO_LP/LO_LP.xml diff --git a/SRT/CDB/alma/RECEIVERS/LO_SBAND/LO_SBAND.xml b/SRT/Outdated/CDB/alma/RECEIVERS/LO_SBAND/LO_SBAND.xml similarity index 100% rename from SRT/CDB/alma/RECEIVERS/LO_SBAND/LO_SBAND.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/LO_SBAND/LO_SBAND.xml diff --git a/SRT/Configuration/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml b/SRT/Outdated/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml similarity index 100% rename from SRT/Configuration/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/SRTIFDistributor/SRTIFDistributor.xml diff --git a/SRT/CDB/alma/RECEIVERS/SRTIFDistributor14/SRTIFDistributor14.xml b/SRT/Outdated/CDB/alma/RECEIVERS/SRTIFDistributor14/SRTIFDistributor14.xml similarity index 100% rename from SRT/CDB/alma/RECEIVERS/SRTIFDistributor14/SRTIFDistributor14.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/SRTIFDistributor14/SRTIFDistributor14.xml diff --git a/SRT/Configuration/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml b/SRT/Outdated/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml similarity index 100% rename from SRT/Configuration/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/SRTLPBandReceiver/SRTLPBandReceiver.xml diff --git a/SRT/CDB/alma/RECEIVERS/SRTSBandMFReceiver/SRTSBandMFReceiver.xml b/SRT/Outdated/CDB/alma/RECEIVERS/SRTSBandMFReceiver/SRTSBandMFReceiver.xml similarity index 100% rename from SRT/CDB/alma/RECEIVERS/SRTSBandMFReceiver/SRTSBandMFReceiver.xml rename to SRT/Outdated/CDB/alma/RECEIVERS/SRTSBandMFReceiver/SRTSBandMFReceiver.xml diff --git a/SRT/CDB/alma/TestNamespace/Positioner/Positioner.xml b/SRT/Outdated/CDB/alma/TestNamespace/Positioner/Positioner.xml similarity index 100% rename from SRT/CDB/alma/TestNamespace/Positioner/Positioner.xml rename to SRT/Outdated/CDB/alma/TestNamespace/Positioner/Positioner.xml diff --git a/SRT/CDB/alma/TestNamespace/Positioner00/Positioner00.xml b/SRT/Outdated/CDB/alma/TestNamespace/Positioner00/Positioner00.xml similarity index 100% rename from SRT/CDB/alma/TestNamespace/Positioner00/Positioner00.xml rename to SRT/Outdated/CDB/alma/TestNamespace/Positioner00/Positioner00.xml diff --git a/SRT/CDB/alma/TestNamespace/Positioner01/Positioner01.xml b/SRT/Outdated/CDB/alma/TestNamespace/Positioner01/Positioner01.xml similarity index 100% rename from SRT/CDB/alma/TestNamespace/Positioner01/Positioner01.xml rename to SRT/Outdated/CDB/alma/TestNamespace/Positioner01/Positioner01.xml diff --git a/SRT/CDB/alma/TestNamespace/Positioner02/Positioner02.xml b/SRT/Outdated/CDB/alma/TestNamespace/Positioner02/Positioner02.xml similarity index 100% rename from SRT/CDB/alma/TestNamespace/Positioner02/Positioner02.xml rename to SRT/Outdated/CDB/alma/TestNamespace/Positioner02/Positioner02.xml diff --git a/SRT/CDB/alma/TestNamespace/Positioner03/Positioner03.xml b/SRT/Outdated/CDB/alma/TestNamespace/Positioner03/Positioner03.xml similarity index 100% rename from SRT/CDB/alma/TestNamespace/Positioner03/Positioner03.xml rename to SRT/Outdated/CDB/alma/TestNamespace/Positioner03/Positioner03.xml diff --git a/SRT/Servers/SRTActiveSurfaceBoss/include/DevIOLUT.h b/SRT/Servers/SRTActiveSurfaceBoss/include/DevIOLUT.h new file mode 100644 index 0000000000000000000000000000000000000000..8c83a47e8d439f49685760e4b59b27161d0a4659 --- /dev/null +++ b/SRT/Servers/SRTActiveSurfaceBoss/include/DevIOLUT.h @@ -0,0 +1,56 @@ +#ifndef _SRTACTIVESURFACEBOSSIMPLDEVIOLUT_H_ +#define _SRTACTIVESURFACEBOSSIMPLDEVIOLUT_H_ + +/****************************************************************************************/ +/* OAC Osservatorio Astronomico di Cagliari */ +/* $Id: DevIOLUT.h,v 1.0 2025-01-13 15:42:32 G. Carboni Exp $ */ +/* */ +/* This code is under GNU General Public Licence (GPL). */ +/* */ +/* Who when What */ +/* Giuseppe Carboni (giuseppe.carboni@inaf.it) 13/01/2025 Creation */ + +#include +#include + +using namespace baci; + +/** + * This class is derived from the template DevIO. + * @author Giuseppe Carboni, + * Osservatorio Astronomico di Cagliari, Italia
+ */ +class SRTActiveSurfaceBossImplDevIOLUT: public virtual DevIO +{ +public: + + SRTActiveSurfaceBossImplDevIOLUT(IRA::CSecureArea* core): m_core(core) { + AUTO_TRACE("SRTActiveSurfaceBossImplDevIOLUT::SRTActiveSurfaceBossImplDevIOLUT()"); + } + + ~SRTActiveSurfaceBossImplDevIOLUT() { + AUTO_TRACE("SRTActiveSurfaceBossImplDevIOLUT::~SRTActiveSurfaceBossImplDevIOLUT()"); + } + + bool initializeValue() + { + return false; + } + + ACE_CString read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) + { + CSecAreaResourceWrapper resource=m_core->Get(); + AUTO_TRACE("SRTActiveSurfaceBossImplDevIOLUT::read()"); + timestamp=getTimeStamp(); + return resource->getLUTfilename().c_str(); + } + + void write(const CORBA::Long& value, ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { + AUTO_TRACE("SRTActiveSurfaceBossImplDevIOLUT::write()"); + } + +private: + IRA::CSecureArea *m_core; +}; + +#endif /*DEVIOLUT_H_*/ diff --git a/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossCore.h b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossCore.h index 89494afaeefdafbb563e4d2fd3f8417d251664fb..1b3ceb2b94a07bd3102b391fa332111dc9b80b02 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossCore.h +++ b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossCore.h @@ -46,6 +46,7 @@ #define DELTAEL 15.0 // mask pattern for status +#define UNAV 0xFF000000 #define MRUN 0x000080 #define CAMM 0x000100 #define ENBL 0x002000 @@ -80,6 +81,7 @@ class CSRTActiveSurfaceBossCore { //friend class CSRTActiveSurfaceBossWatchingThread; friend class CSRTActiveSurfaceBossWorkingThread; friend class CSRTActiveSurfaceBossSectorThread; + friend class CSRTActiveSurfaceBossInitializationThread; public: /** * Constructor. Default Constructor. @@ -145,6 +147,8 @@ public: inline bool getTracking() const { return m_tracking; } + inline std::string getLUTfilename() const { return m_lut.substr(m_lut.find_last_of('/') + 1); } + /** * Sets the AutoUpdate flag to false, i.e. the component will not update automatically the surface. */ @@ -188,9 +192,6 @@ private: int actuatorcounter, circlecounter, totacts; ACS::doubleSeq actuatorsCorrections; - /** pointer to the component itself */ - acscomponent::ACSComponentImpl *m_thisIsMe; - /** * This represents the status of the whole Active Surface subsystem, it also includes and sammerizes the status of the boss component */ @@ -220,15 +221,17 @@ private: char *s_usdCorrections; - std::vector m_sector; - bool m_profileSetted; bool m_ASup; bool m_newlut; + bool m_initialized; + std::string m_lut; + + std::vector actuatorsInCircle; }; #endif /*SRTACTIVESURFACEBOSSCORE_H_*/ diff --git a/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossImpl.h b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossImpl.h index d2f2c7be7c67a7542a3331c94b304b8d4963f299..a7832376dad0b048a27b1424f6e5f4dd64995b71 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossImpl.h +++ b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossImpl.h @@ -30,11 +30,10 @@ #include #include "SRTActiveSurfaceBossCore.h" #include "SRTActiveSurfaceBossWorkingThread.h" -#include "SRTActiveSurfaceBossSectorThread.h" +#include "SRTActiveSurfaceBossInitializationThread.h" #include #define LOOPSTATUSTIME 10000000 // 1.0 second -#define SECTORTIME 1000000 // 0.1 seconds #define _SET_CDB(PROP,LVAL,ROUTINE) { \ maci::ContainerServices* cs=getContainerServices();\ @@ -129,6 +128,12 @@ class SRTActiveSurfaceBossImpl: public virtual CharacteristicComponentImpl, publ */ virtual Management::ROTBoolean_ptr tracking() throw (CORBA::SystemException); + /** + * Returns a reference to the tracking property implementation of IDL interface. + * @return pointer to read-only ACS::ROString property enabled + */ + virtual ACS::ROstring_ptr LUT_filename() throw (CORBA::SystemException); + /** * This method can be called in order to disable the automatic update of the surface. * @throw CORBA::SystemException @@ -213,7 +218,7 @@ class SRTActiveSurfaceBossImpl: public virtual CharacteristicComponentImpl, publ CSRTActiveSurfaceBossWorkingThread *m_workingThread; - std::vector m_sectorThread; + CSRTActiveSurfaceBossInitializationThread *m_initializationThread; SimpleParser::CParser *m_parser; @@ -222,6 +227,7 @@ class SRTActiveSurfaceBossImpl: public virtual CharacteristicComponentImpl, publ SmartPropertyPointer< ROEnumImpl > m_penabled; SmartPropertyPointer< ROEnumImpl > m_pprofile; SmartPropertyPointer< ROEnumImpl > m_ptracking; + SmartPropertyPointer m_pLUT_filename; IRA::CSecureArea *m_core; /* * diff --git a/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossInitializationThread.h b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossInitializationThread.h new file mode 100644 index 0000000000000000000000000000000000000000..274963ae03b82ef199ab9d95457ac21e2fc44f76 --- /dev/null +++ b/SRT/Servers/SRTActiveSurfaceBoss/include/SRTActiveSurfaceBossInitializationThread.h @@ -0,0 +1,65 @@ +#ifndef _SRTACTIVESURFACEBOSSINITIALIZATIONTHREAD_H_ +#define _SRTACTIVESURFACEBOSSINITIALIZATIONTHREAD_H_ + +/********************************************************************************************/ +/* OAC Osservatorio Astronomico di Cagliari */ +/* $Id: SRTActiveSurfaceBossInitializationThread.h,v 1.1 2010-07-26 12:36:49 c.migoni Exp $ */ +/* */ +/* This code is under GNU General Public Licence (GPL). */ +/* */ +/* Who When What */ +/* Giuseppe Carboni (giuseppe.carboni@inaf.it) 09/01/2025 Creation */ +/********************************************************************************************/ + +#include +#include +#include "SRTActiveSurfaceBossCore.h" +#include "SRTActiveSurfaceBossSectorThread.h" +#include + +#define SECTORTIME 1000000 // 0.1 seconds + +/** + * This class implements an initialization thread. This thread is in charge of setting up the active surface +*/ +class CSRTActiveSurfaceBossInitializationThread : public ACS::Thread +{ +public: + /** + * Constructor(). + * @param name thread name + * @param responseTime thread's heartbeat response time in 100ns unit. Default value is 1s. + * @param sleepTime thread's sleep time in 100ns unit. Default value is 100ms. + */ + CSRTActiveSurfaceBossInitializationThread(const ACE_CString& name, CSRTActiveSurfaceBossCore *param, + const ACS::TimeInterval& responseTime=ThreadBase::defaultResponseTime,const ACS::TimeInterval& sleepTime=ThreadBase::defaultSleepTime); + + /** + * Destructor. + */ + ~CSRTActiveSurfaceBossInitializationThread(); + + /** + * This method is executed once when the thread starts. + */ + virtual void onStart(); + + /** + * This method is executed once when the thread stops. + */ + virtual void onStop(); + + /** + * This method overrides the thread implementation class. + * The thread can be exited by calling ACS::ThreadBase::stop or ACS::ThreadBase::exit command. + */ + virtual void runLoop(); + +private: + CSRTActiveSurfaceBossCore *m_boss; + std::string m_thread_name; + ACS::Time timestart; + std::vector m_sectorThread; +}; + +#endif /*_SRTACTIVESURFACEBOSSINITIALIZATIONTHREAD_H_*/ diff --git a/SRT/Servers/SRTActiveSurfaceBoss/src/Makefile b/SRT/Servers/SRTActiveSurfaceBoss/src/Makefile index c9a65272d4efc7e61a4bad5962cef34f6cc73a9b..b55f8c3676f299ce4182eb58e2a21e98e93ae6e0 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/src/Makefile +++ b/SRT/Servers/SRTActiveSurfaceBoss/src/Makefile @@ -83,7 +83,7 @@ LIBRARIES = SRTActiveSurfaceBossImpl LIBRARIES_L = # # -SRTActiveSurfaceBossImpl_OBJECTS = SRTActiveSurfaceBossImpl SRTActiveSurfaceBossCore SRTActiveSurfaceBossWorkingThread SRTActiveSurfaceBossSectorThread +SRTActiveSurfaceBossImpl_OBJECTS = SRTActiveSurfaceBossImpl SRTActiveSurfaceBossCore SRTActiveSurfaceBossWorkingThread SRTActiveSurfaceBossInitializationThread SRTActiveSurfaceBossSectorThread SRTActiveSurfaceBossImpl_LIBS = lanStubs usdStubs ActiveSurfaceBossStubs SRTActiveSurfaceBossStubs AntennaDefinitionsStubs ManagmentDefinitionsStubs AntennaBossStubs ComponentErrors ASErrors ManagementErrors AntennaErrors IRALibrary ParserErrors DiscosVersion # diff --git a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossCore.cpp b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossCore.cpp index bfe1c7c69407ae14cc1cf174bb596d8b42f61123..a958afa13e292e86742b9c5e420b521c2cfcb064 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossCore.cpp +++ b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossCore.cpp @@ -2,11 +2,9 @@ #include #include -int actuatorsInCircle[] = {0,24,24,48,48,48,48,96,96,96,96,96,96,96,96,96,8,4}; - CSRTActiveSurfaceBossCore::CSRTActiveSurfaceBossCore(ContainerServices *service, acscomponent::ACSComponentImpl *me) : m_services(service), - m_thisIsMe(me) + actuatorsInCircle{0,24,24,48,48,48,48,96,96,96,96,96,96,96,96,96,8,4} { m_error_strings[ASErrors::NoError ] = "NoError"; m_error_strings[ASErrors::USDCalibrated ] = "USD calibrated"; @@ -43,14 +41,15 @@ void CSRTActiveSurfaceBossCore::initialize() { ACS_LOG(LM_FULL_INFO,"CSRTActiveSurfaceBossCore::initialize()",(LM_INFO,"CSRTActiveSurfaceBossCore::initialize")); + m_initialized = false; m_enable = false; m_tracking = false; m_status = Management::MNG_WARNING; + m_lut = USDTABLECORRECTIONS; AutoUpdate = false; actuatorcounter = circlecounter = totacts = 1; for(int i = 0; i < SECTORS; i++) { - m_sector.push_back(false); usdCounters.push_back(0); } m_profileSetted = false; @@ -1366,16 +1365,7 @@ void CSRTActiveSurfaceBossCore::asSetLUT(const char *newlut) void CSRTActiveSurfaceBossCore::setProfile(const ActiveSurface::TASProfile& newProfile) throw (ComponentErrors::ComponentErrorsExImpl) { - bool all_sectors = true; - for(unsigned int i = 0; i < SECTORS; i++) - { - if(!m_sector[i]) all_sectors = false; - } - - if (m_newlut == false) - m_lut = USDTABLECORRECTIONS; - - if(all_sectors) // USD tables has not been loaded yet + if(m_initialized) // USD tables has not been loaded yet { ifstream usdCorrections(m_lut); if(!usdCorrections) @@ -1640,7 +1630,8 @@ void CSRTActiveSurfaceBossCore::asStatus4GUIClient(ACS::longSeq& status) throw ( { for (int actuator = 1; actuator <= actuatorsInCircle[circle]; actuator++) { - int usdStatus = 0; + // Initialize the status word as component unavailable. If the component is available it will be overwritten + int usdStatus = UNAV; if(!CORBA::is_nil(usd[circle][actuator])) { diff --git a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossImpl.cpp b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossImpl.cpp index 54cb831db89bfef9ffe45aeb1ff8ae80b771f8c5..0be0e130bba3e6ad9bec2163e9144b859ec17d32 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossImpl.cpp +++ b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossImpl.cpp @@ -6,6 +6,7 @@ #include "DevIOEnable.h" #include "DevIOProfile.h" #include "DevIOTracking.h" +#include "DevIOLUT.h" static char const *rcsId="@(#) $Id: SRTActiveSurfaceBossImpl.cpp,v 1.2 2010-07-26 12:37:07 c.migoni Exp $"; static void *use_rcsId = ((void)&use_rcsId,(void *) &rcsId); @@ -58,6 +59,7 @@ SRTActiveSurfaceBossImpl::SRTActiveSurfaceBossImpl(const ACE_CString &CompName, m_penabled(this), m_pprofile(this), m_ptracking(this), + m_pLUT_filename(this), m_core(NULL) { AUTO_TRACE("SRTActiveSurfaceBossImpl::SRTActiveSurfaceBossImpl()"); @@ -86,6 +88,7 @@ void SRTActiveSurfaceBossImpl::initialize() throw (ACSErr::ACSbaseExImpl) (getContainerServices()->getName()+":pprofile",getComponent(),new SRTActiveSurfaceBossImplDevIOProfile(m_core),true); m_ptracking=new ROEnumImpl (getContainerServices()->getName()+":tracking",getComponent(),new SRTActiveSurfaceBossImplDevIOTracking(m_core),true); + m_pLUT_filename=new ROstring(getContainerServices()->getName()+":LUT_filename",getComponent(),new SRTActiveSurfaceBossImplDevIOLUT(m_core),true); // create the parser for command line execution m_parser = new SimpleParser::CParser(boss,10); @@ -125,25 +128,18 @@ void SRTActiveSurfaceBossImpl::initialize() throw (ACSErr::ACSbaseExImpl) _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"SRTActiveSurfaceBossImpl::initialize()"); } - for(int sector = 0; sector < SECTORS; sector++) + try { - std::stringstream threadName; - threadName << "SRTACTIVESURFACEBOSSSECTOR"; - threadName << sector+1; - try - { - CSRTActiveSurfaceBossSectorThread* sectorThread = getContainerServices()->getThreadManager()->create (threadName.str().c_str(), boss); - m_sectorThread.push_back(sectorThread); - } - catch (acsthreadErrType::acsthreadErrTypeExImpl& ex) - { - _ADD_BACKTRACE(ComponentErrors::ThreadErrorExImpl,_dummy,ex,"SRTActiveSurfaceBossImpl::initialize()"); - throw _dummy; - } - catch (...) - { - _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"SRTActiveSurfaceBossImpl::initialize()"); - } + m_initializationThread=getContainerServices()->getThreadManager()->create("SRTACTIVESURFACEBOSSINITTHREAD",boss); + } + catch (acsthreadErrType::acsthreadErrTypeExImpl& ex) + { + _ADD_BACKTRACE(ComponentErrors::ThreadErrorExImpl,_dummy,ex,"SRTActiveSurfaceBossImpl::initialize()"); + throw _dummy; + } + catch (...) + { + _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"SRTActiveSurfaceBossImpl::initialize()"); } // configure the parser..... @@ -170,12 +166,7 @@ void SRTActiveSurfaceBossImpl::execute() throw (ACSErr::ACSbaseExImpl) throw _dummy; } m_workingThread->resume(); - - for(unsigned int i = 0; i < m_sectorThread.size(); i++) - { - m_sectorThread[i]->setSleepTime(SECTORTIME); - m_sectorThread[i]->resume(); - } + m_initializationThread->resume(); ACS_LOG(LM_FULL_INFO,"SRTActiveSurfaceBossImpl::execute()",(LM_INFO,"SRTActiveSurfaceBossImpl::COMPSTATE_OPERATIONAL")); } @@ -188,13 +179,10 @@ void SRTActiveSurfaceBossImpl::cleanUp() m_workingThread->suspend(); getContainerServices()->getThreadManager()->destroy(m_workingThread); } - for(unsigned int i = 0; i < m_sectorThread.size(); i++) + if (m_initializationThread!=NULL) { - if(m_sectorThread[i] != NULL) - { - m_sectorThread[i]->suspend(); - getContainerServices()->getThreadManager()->destroy(m_sectorThread[i]); - } + m_initializationThread->suspend(); + getContainerServices()->getThreadManager()->destroy(m_initializationThread); } ACS_LOG(LM_FULL_INFO,"SRTActiveSurfaceBossImpl::cleanUp()",(LM_INFO,"SRTActiveSurfaceBossImpl::THREADS_TERMINATED")); if (m_parser!=NULL) delete m_parser; @@ -619,6 +607,7 @@ _PROPERTY_REFERENCE_CPP(SRTActiveSurfaceBossImpl,Management::ROTSystemStatus,m_p _PROPERTY_REFERENCE_CPP(SRTActiveSurfaceBossImpl,Management::ROTBoolean,m_penabled,enabled); _PROPERTY_REFERENCE_CPP(SRTActiveSurfaceBossImpl,ActiveSurface::ROTASProfile,m_pprofile,pprofile); _PROPERTY_REFERENCE_CPP(SRTActiveSurfaceBossImpl,Management::ROTBoolean,m_ptracking,tracking); +_PROPERTY_REFERENCE_CPP(SRTActiveSurfaceBossImpl,ACS::ROstring,m_pLUT_filename,LUT_filename); /* --------------- [ MACI DLL support functions ] -----------------*/ #include MACI_DLL_SUPPORT_FUNCTIONS(SRTActiveSurfaceBossImpl) diff --git a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossInitializationThread.cpp b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossInitializationThread.cpp new file mode 100644 index 0000000000000000000000000000000000000000..007a43ac869fc75c5d837f9af747af510c0e1010 --- /dev/null +++ b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossInitializationThread.cpp @@ -0,0 +1,97 @@ +#include "SRTActiveSurfaceBossInitializationThread.h" + +CSRTActiveSurfaceBossInitializationThread::CSRTActiveSurfaceBossInitializationThread(const ACE_CString& name, CSRTActiveSurfaceBossCore *param, + const ACS::TimeInterval& responseTime,const ACS::TimeInterval& sleepTime) : ACS::Thread(name,responseTime,sleepTime), m_boss(param) +{ + m_thread_name = "SRTActiveSurfaceBossInitializationThread"; + + this->setSleepTime(1000000); + + AUTO_TRACE(std::string(m_thread_name + "::CSRTActiveSurfaceBossInitializationThread()").c_str()); +} + +CSRTActiveSurfaceBossInitializationThread::~CSRTActiveSurfaceBossInitializationThread() +{ + for(unsigned int i = 0; i < m_sectorThread.size(); i++) + { + if(m_sectorThread[i] != NULL) + { + m_sectorThread[i]->suspend(); + m_boss->m_services->getThreadManager()->destroy(m_sectorThread[i]); + } + } + + AUTO_TRACE(std::string(m_thread_name + "::~CSRTActiveSurfaceBossInitializationThread()").c_str()); +} + +void CSRTActiveSurfaceBossInitializationThread::onStart() +{ + AUTO_TRACE(std::string(m_thread_name + "::onStart()").c_str()); + + for(int sector = 0; sector < SECTORS; sector++) + { + std::stringstream threadName; + threadName << "SRTACTIVESURFACEBOSSSECTOR"; + threadName << sector+1; + try + { + CSRTActiveSurfaceBossSectorThread* sectorThread = m_boss->m_services->getThreadManager()->create (threadName.str().c_str(), m_boss); + sectorThread->setSleepTime(SECTORTIME); + sectorThread->resume(); + m_sectorThread.push_back(sectorThread); + } + catch (acsthreadErrType::acsthreadErrTypeExImpl& ex) + { + _ADD_BACKTRACE(ComponentErrors::ThreadErrorExImpl,_dummy,ex,"SRTActiveSurfaceBossInitializationThread::onStart()"); + throw _dummy; + } + catch (...) + { + _THROW_EXCPT(ComponentErrors::UnexpectedExImpl,"SRTActiveSurfaceBossInitializationThread::onStart()"); + } + } + + TIMEVALUE now; + CIRATools::getTime(now); + this->timestart = now.value().value; +} + +void CSRTActiveSurfaceBossInitializationThread::onStop() +{ + m_boss->m_initialized = true; + + ACS_LOG(LM_FULL_INFO, std::string(m_thread_name + "::onStop()").c_str(), (LM_NOTICE, "ACTIVE SURFACE INITIALIZED")); + + AUTO_TRACE(std::string(m_thread_name + "::onStop()").c_str()); +} + +void CSRTActiveSurfaceBossInitializationThread::runLoop() +{ + for(unsigned int i = 0; i < m_sectorThread.size(); i++) + { + if(m_sectorThread[i]->isAlive()) + { + return; + } + } + + // Set CDB calibrate parameter to 0 where needed + for(int circle = 1; circle <= CIRCLES; circle++) + { + for(int actuator = 1; actuator <= m_boss->actuatorsInCircle[circle]; actuator++) + { + if(!CORBA::is_nil(m_boss->usd[circle][actuator])) + { + int usdStatus = 0; + m_boss->usd[circle][actuator]->getStatus(usdStatus); + + if(!(usdStatus & CAL)) + { + CIRATools::setDBValue(m_boss->m_services, "calibrate", (const long)0, "alma/", m_boss->usd[circle][actuator]->name()); + } + } + } + } + + this->setStopped(); +} diff --git a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossSectorThread.cpp b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossSectorThread.cpp index 0d35aed430aceec860c18b7059c8befa6d1e875b..5abef165e8619c8407c2c18456127516151bd159 100644 --- a/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossSectorThread.cpp +++ b/SRT/Servers/SRTActiveSurfaceBoss/src/SRTActiveSurfaceBossSectorThread.cpp @@ -83,7 +83,6 @@ void CSRTActiveSurfaceBossSectorThread::runLoop() } else { - m_boss->m_sector[m_sector] = true; this->setStopped(); } } diff --git a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoBoss.xsd b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoBoss.xsd index 153014681305e91ffdc45d26a51fb81befe48644..1456191e10b2f664060401fb11a5f7a085f2f535 100644 --- a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoBoss.xsd +++ b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoBoss.xsd @@ -18,6 +18,19 @@ + + + + + + + + + + + + + @@ -53,5 +66,6 @@ + diff --git a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoCoefficients.xsd b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoCoefficients.xsd new file mode 100644 index 0000000000000000000000000000000000000000..e51c87367cf7c9b8c305ebb7f05b6710e984eb11 --- /dev/null +++ b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoCoefficients.xsd @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoLookupTable.xsd b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoLookupTable.xsd deleted file mode 100644 index 4470ec709449f3e8ce3cec3c07a768e9cf3bdd50..0000000000000000000000000000000000000000 --- a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServoLookupTable.xsd +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossCore.h b/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossCore.h index b315443a8e4494e314afab5f6a2bf7eb86cdf7f2..240e5c831e29a1c4b40d12c966b72244232fba7b 100644 --- a/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossCore.h +++ b/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossCore.h @@ -286,6 +286,11 @@ private: */ void reset(bool force=false); + /** + * Method that loads the focal configurations names when the boss is started + */ + std::map loadConfigurations(); + /** * Method used to retrieve a configuration value from the CDB. * @param configuration the name of the value to be read from the CDB. @@ -443,6 +448,11 @@ private: */ std::map m_current_tracking_servos; + /** + * Map that contains the possible focal configurations + */ + const std::map m_DISCOS_2_LDO_configurations; + /** * Current scan parameters. */ diff --git a/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossImpl.h b/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossImpl.h index a22cceb6b1497b5646911dbb0f1c7e4aa41b3508..5321bf57dd13defec5f44b7bd97a4feb2f81c898 100644 --- a/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossImpl.h +++ b/SRT/Servers/SRTMinorServo/include/SRTMinorServoBossImpl.h @@ -106,8 +106,8 @@ public: virtual CORBA::Boolean isStarting(); /** - * Method that tells if the system is using ASACTIVE lookup tables or not. - * @return a CORBA::Boolean indicating if the system is configured to use ASACTIVE lookup tables or not. + * Method that tells if the system is using AS coefficients or not. + * @return a CORBA::Boolean indicating if the system is configured to use AS coefficients or not. */ virtual CORBA::Boolean isASConfiguration(); diff --git a/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h b/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h index a8254f7dd9ab1c695e448040681205cb3a5b6aa5..a664462c010fc810284a98ebaf5cbe5ea8f0a8fc 100644 --- a/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h +++ b/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h @@ -105,10 +105,11 @@ public: /** * Asks the servo system to load the commanded configuration table. * @param configuration_name the configuration the servo system should assume. + * @param as_off a boolean indicating whether the servo should use a _AS_OFF configuration * @throw ComponentErrors::ComponentErrorsEx when there is an error while trying to load the table for the given configuration. * @return true if the servo is in use with the current configuration, false otherwise */ - bool setup(const char* configuration_name = ""); + bool setup(const char* configuration_name = "", CORBA::Boolean as_off = false); /** * Asks the component to calculate the servo system position starting from the given elevation. @@ -524,7 +525,7 @@ private: /** * Table containing the coefficients for the positions calculations. */ - SRTMinorServoLookupTable m_current_lookup_table; + SRTMinorServoCoefficientsTable m_current_coefficients_table; /** * Configuration of the socket object. @@ -616,7 +617,7 @@ public: /** * Setup method definition. It simply calls the SRTBaseMinorServoImpl method. */ - bool setup(const char* configuration_name = "") { return SRTBaseMinorServoImpl::setup(configuration_name); } + bool setup(const char* configuration_name = "", CORBA::Boolean as_off = false) { return SRTBaseMinorServoImpl::setup(configuration_name, as_off); } /** * Declaration of all the other inherited methods. @@ -667,7 +668,7 @@ public: * @param configuration_name the configuration the servo system should assume. * @throw ComponentErrors::ComponentErrorsEx when there is an error while trying to load the table for the given configuration. */ - bool setup(const char* configuration_name = ""); + bool setup(const char* configuration_name = "", CORBA::Boolean as_off = false); /** * Declaration of all the other inherited methods. diff --git a/SRT/Servers/SRTMinorServo/src/Makefile b/SRT/Servers/SRTMinorServo/src/Makefile index a61ed3645ec6b06685e47ed1c313dc53d575ed67..141c676de6656bd3bba8aef79cacd265160390f9 100644 --- a/SRT/Servers/SRTMinorServo/src/Makefile +++ b/SRT/Servers/SRTMinorServo/src/Makefile @@ -13,7 +13,7 @@ PY_SCRIPTS = _cover _airBlade _servoReset # On-Line Database Files # ---------------------- -CDB_SCHEMAS = SRTMinorServoCommon SRTMinorServoBoss SRTMinorServo SRTMinorServoSocketConfiguration SRTMinorServoVBrainConfiguration SRTMinorServoProperties SRTMinorServoLookupTable +CDB_SCHEMAS = SRTMinorServoCommon SRTMinorServoBoss SRTMinorServo SRTMinorServoSocketConfiguration SRTMinorServoVBrainConfiguration SRTMinorServoProperties SRTMinorServoCoefficients # ---------------------------- # Libraries (public and local) diff --git a/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp b/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp index 8371127f0e03e6722fa62ea3332d7eca5a7d10f4..ce3eca5c2ced82f96efe2bb6eb92b2d84b9689c7 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp @@ -47,7 +47,7 @@ SRTBaseMinorServoImpl::SRTBaseMinorServoImpl(const ACE_CString& component_name, m_in_use_ptr(this), m_current_setup_ptr(this), m_error_code_ptr(this), - m_current_lookup_table(), + m_current_coefficients_table(), m_socket_configuration(SRTMinorServoSocketConfiguration::getInstance(container_services)), m_socket(SRTMinorServoSocket::getInstance(m_socket_configuration.m_ip_address, m_socket_configuration.m_port, m_socket_configuration.m_timeout)) { @@ -254,11 +254,11 @@ void SRTBaseMinorServoImpl::preset(const ACS::doubleSeq& virtual_coords) std::copy(coordinates.begin(), coordinates.end(), m_commanded_virtual_positions.begin()); } -bool SRTBaseMinorServoImpl::setup(const char* configuration_name) +bool SRTBaseMinorServoImpl::setup(const char* configuration_name, CORBA::Boolean as_off) { AUTO_TRACE(m_servo_name + "::setup()"); m_in_use.store(Management::MNG_FALSE); - m_current_lookup_table.clear(); + m_current_coefficients_table.clear(); m_current_setup = ""; std::string setup_name(configuration_name); @@ -269,17 +269,21 @@ bool SRTBaseMinorServoImpl::setup(const char* configuration_name) return false; } - IRA::CDBTable table(getContainerServices(), setup_name.c_str(), std::string("DataBlock/MinorServo/" + m_servo_name).c_str()); + IRA::CDBTable table(getContainerServices(), "configuration", std::string("DataBlock/MinorServo/" + m_servo_name).c_str()); IRA::CError error; error.Reset(); - if(!table.addField(error, "axis", IRA::CDataField::STRING)) + if(!table.addField(error, "n", IRA::CDataField::STRING)) + { + error.setExtra("Error adding field name", 0); + } + if(!table.addField(error, "a", IRA::CDataField::STRING)) { error.setExtra("Error adding field axis", 0); } - if(!table.addField(error, "coefficients", IRA::CDataField::STRING)) + if(!table.addField(error, "p", IRA::CDataField::STRING)) { - error.setExtra("Error adding field coefficients", 0); + error.setExtra("Error adding field polynomial", 0); } if(!error.isNoError()) { @@ -296,27 +300,52 @@ bool SRTBaseMinorServoImpl::setup(const char* configuration_name) throw ex.getComponentErrorsEx(); } - table.First(); - for(unsigned int i = 0; i < table.recordCount(); i++, table.Next()) + // We should try to retrieve the _AS_OFF configuration if requested. If is not found, fallback to the normal one + std::string config_name = setup_name; + if(as_off) + config_name += "_AS_OFF"; + + for(size_t j = 0; j < (as_off ? 2 : 1); j++) { - std::string axis = std::string(table["axis"]->asString()); + table.First(); + for(unsigned int i = 0; i < table.recordCount(); i++, table.Next()) + { + std::string name = std::string(table["n"]->asString()); + if(name != config_name) + continue; - std::vector coefficients; + std::string axis = std::string(table["a"]->asString()); - std::string coefficient_str; - std::stringstream stream(std::string(table["coefficients"]->asString())); + std::vector coefficients; - while(std::getline(stream, coefficient_str, ',')) - { - coefficients.push_back(std::stod(std::regex_replace(coefficient_str, std::regex("\\s+"), ""))); + std::string coefficient_str; + std::stringstream stream(std::string(table["p"]->asString())); + + while(std::getline(stream, coefficient_str, ',')) + { + coefficients.push_back(std::stod(std::regex_replace(coefficient_str, std::regex("\\s+"), ""))); + } + + m_current_coefficients_table[axis] = coefficients; } - m_current_lookup_table[axis] = coefficients; + if(m_current_coefficients_table.size() > 0) + { + // Configuration found, exit the loop + break; + } + else + { + // Reset the configuration name to the default one + config_name = setup_name; + } } table.closeTable(); - if(m_current_lookup_table.size() > 0) + if(m_current_coefficients_table.size() > 0) { + if(as_off) + setup_name += "_AS_OFF"; m_current_setup = setup_name; clearUserOffsets(); clearSystemOffsets(); @@ -344,7 +373,7 @@ ACS::doubleSeq* SRTBaseMinorServoImpl::calcCoordinates(double elevation) for(size_t axis = 0; axis < m_virtual_axes; axis++) { - std::vector coefficients = m_current_lookup_table.at(m_virtual_axes_names[axis]); + std::vector coefficients = m_current_coefficients_table.at(m_virtual_axes_names[axis]); double coordinate = 0; diff --git a/SRT/Servers/SRTMinorServo/src/SRTMinorServoBossCore.cpp b/SRT/Servers/SRTMinorServo/src/SRTMinorServoBossCore.cpp index 5e3aaeb2d5373743101b979e3a7d6e466ba5207e..a5c499f7496be690eaf251213e2ed7694ce6e44f 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTMinorServoBossCore.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTMinorServoBossCore.cpp @@ -38,7 +38,8 @@ SRTMinorServoBossCore::SRTMinorServoBossCore(SRTMinorServoBossImpl& component) : m_tracking_servos{ //{ "PFP", m_component.getContainerServices()->getComponent("MINORSERVO/PFP") }, { "SRP", m_component.getContainerServices()->getComponent("MINORSERVO/SRP") } - } + }, + m_DISCOS_2_LDO_configurations(loadConfigurations()) { AUTO_TRACE("SRTMinorServoBossCore::SRTMinorServoBossCore()"); @@ -196,17 +197,16 @@ void SRTMinorServoBossCore::setup(std::string commanded_setup) std::transform(commanded_setup.begin(), commanded_setup.end(), commanded_setup.begin(), ::toupper); - std::pair cmd_configuration; SRTMinorServoFocalConfiguration commanded_configuration; try { - cmd_configuration = DiscosConfigurationNameTable.at(commanded_setup); - commanded_configuration = cmd_configuration.first; + std::string LDO_configuration = m_DISCOS_2_LDO_configurations.at(commanded_setup); + commanded_configuration = LDOConfigurationNameTable.right.at(LDO_configuration); - if(m_as_configuration.load() == Management::MNG_TRUE && cmd_configuration.second) + if(m_as_configuration.load() == Management::MNG_FALSE) { - commanded_setup += "_ASACTIVE"; + commanded_setup += "_AS_OFF"; } } catch(std::out_of_range& oor) @@ -235,8 +235,6 @@ void SRTMinorServoBossCore::setup(std::string commanded_setup) } } - ACS_LOG(LM_FULL_INFO, "servoSetup", (LM_NOTICE, ("SETTING UP '" + commanded_setup + "' CONFIGURATION").c_str())); - m_commanded_configuration.store(commanded_configuration); m_commanded_setup = commanded_setup; @@ -336,8 +334,6 @@ void SRTMinorServoBossCore::park() return; } - ACS_LOG(LM_FULL_INFO, "servoPark", (LM_NOTICE, "PARKING")); - m_commanded_configuration.store(CONFIGURATION_PARK); m_commanded_setup = "Park"; @@ -504,7 +500,7 @@ void SRTMinorServoBossCore::setASConfiguration(std::string configuration) } // Should reload the correct setup if the system was already configured or was about to be - if(!m_commanded_setup.empty()) + if(!m_commanded_setup.empty() && m_motion_status.load() != MOTION_STATUS_PARKED) { configuration = m_commanded_setup.substr(0, m_commanded_setup.find("_")); try @@ -1460,6 +1456,49 @@ void SRTMinorServoBossCore::reset(bool force) m_error_code.store(ERROR_NO_ERROR); } +std::map SRTMinorServoBossCore::loadConfigurations() +{ + AUTO_TRACE("SRTMinorServoBossCore::loadConfigurations()"); + + IRA::CDBTable table(m_component.getContainerServices(), "configuration", std::string("DataBlock/MinorServo/Boss").c_str()); + IRA::CError error; + error.Reset(); + + if(!table.addField(error, "DISCOS", IRA::CDataField::STRING)) + { + error.setExtra("Error adding field DISCOS", 0); + } + if(!table.addField(error, "LDO", IRA::CDataField::STRING)) + { + error.setExtra("Error adding field LDO", 0); + } + if(!error.isNoError()) + { + _EXCPT_FROM_ERROR(ComponentErrors::IRALibraryResourceExImpl, ex, error); + ex.setCode(error.getErrorCode()); + ex.setDescription((const char *)error.getDescription()); + ex.log(LM_DEBUG); + throw ex.getComponentErrorsEx(); + } + if(!table.openTable(error)) + { + _EXCPT_FROM_ERROR(ComponentErrors::CDBAccessExImpl, ex, error); + ex.log(LM_DEBUG); + throw ex.getComponentErrorsEx(); + } + + std::map map; + + table.First(); + for(unsigned int i = 0; i < table.recordCount(); i++, table.Next()) + { + map[std::string(table["DISCOS"]->asString())] = std::string(table["LDO"]->asString()); + } + table.closeTable(); + + return map; +} + Management::TBoolean SRTMinorServoBossCore::getCDBConfiguration(std::string which_configuration) { AUTO_TRACE("SRTMinorServoBossCore::getCDBConfiguration()"); diff --git a/SRT/Servers/SRTMinorServo/src/SRTMinorServoParkThread.cpp b/SRT/Servers/SRTMinorServo/src/SRTMinorServoParkThread.cpp index 2e6dff7e242e9ca38e1622340a2a7fccdba8edf8..27bf305cccf4131a247b80f3ac4cb4c0f396e225 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTMinorServoParkThread.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTMinorServoParkThread.cpp @@ -22,14 +22,14 @@ void SRTMinorServoParkThread::onStart() m_status = 0; - ACS_LOG(LM_FULL_INFO, "SRTMinorServoParkThread::onStart()", (LM_NOTICE, "PARK THREAD STARTED")); + ACS_LOG(LM_FULL_INFO, "SRTMinorServoParkThread::onStart()", (LM_NOTICE, "Parking MinorServos...")); } void SRTMinorServoParkThread::onStop() { AUTO_TRACE("SRTMinorServoParkThread::onStop()"); - ACS_LOG(LM_FULL_INFO, "SRTMinorServoParkThread::onStop()", (LM_NOTICE, "PARK THREAD STOPPED")); + ACS_LOG(LM_FULL_INFO, "SRTMinorServoParkThread::onStop()", (LM_NOTICE, "MinorServos parked")); } void SRTMinorServoParkThread::runLoop() @@ -80,7 +80,7 @@ void SRTMinorServoParkThread::runLoop() { for(const auto& [name, servo] : m_core.m_servos) { - servo->setup(""); + servo->setup("", false); } m_core.m_actual_setup = m_core.m_commanded_setup; diff --git a/SRT/Servers/SRTMinorServo/src/SRTMinorServoScanThread.cpp b/SRT/Servers/SRTMinorServo/src/SRTMinorServoScanThread.cpp index d195b2bf1188f3d84834aa67cd284bc2a4047539..173981e0f423ead92baa7e0d71a1416e43924c65 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTMinorServoScanThread.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTMinorServoScanThread.cpp @@ -51,7 +51,7 @@ void SRTMinorServoScanThread::onStart() auto servo = m_core.m_tracking_servos.at(m_core.m_current_scan.servo_name); m_starting_coordinates = *servo->getAxesPositions(0); - ACS_LOG(LM_FULL_INFO, "SRTMinorServoScanThread::onStart()", (LM_NOTICE, + ACS_LOG(LM_FULL_INFO, "SRTMinorServoScanThread::onStart()", (LM_DEBUG, ("SCAN THREAD STARTED, SCANNING " + std::to_string((int)m_core.m_current_scan.scan_range) + "MM IN " + std::to_string((int)(m_core.m_current_scan.scan_duration / 10000000)) + " SECONDS ALONG " + m_core.m_current_scan.servo_name + " " + m_core.m_current_scan.axis_name + " AXIS").c_str() )); } @@ -60,7 +60,7 @@ void SRTMinorServoScanThread::onStop() { AUTO_TRACE("SRTMinorServoScanThread::onStop()"); - ACS_LOG(LM_FULL_INFO, "SRTMinorServoScanThread::onStop()", (LM_NOTICE, "SCAN THREAD STOPPED")); + ACS_LOG(LM_FULL_INFO, "SRTMinorServoScanThread::onStop()", (LM_DEBUG, "SCAN THREAD STOPPED")); m_core.m_scanning.store(Management::MNG_FALSE); diff --git a/SRT/Servers/SRTMinorServo/src/SRTMinorServoSetupThread.cpp b/SRT/Servers/SRTMinorServo/src/SRTMinorServoSetupThread.cpp index d782a86cb6cf867155dcd06a096caeb157af1c85..cd6c05ca4c70a1deba59c0b4bf86cbf5012adc8e 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTMinorServoSetupThread.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTMinorServoSetupThread.cpp @@ -27,15 +27,13 @@ void SRTMinorServoSetupThread::onStart() m_LDO_configuration = LDOConfigurationNameTable.left.at(commanded_configuration); m_gregorian_cover_position = commanded_configuration == CONFIGURATION_PRIMARY ? COVER_STATUS_CLOSED : COVER_STATUS_OPEN; - ACS_LOG(LM_FULL_INFO, "SRTMinorServoSetupThread::onStart()", (LM_NOTICE, ("SETUP THREAD STARTED WITH '" + m_core.m_commanded_setup + "' CONFIGURATION").c_str())); + ACS_LOG(LM_FULL_INFO, "SRTMinorServoSetupThread::onStart()", (LM_NOTICE, ("Setting up MinorServos with '" + m_core.m_commanded_setup + "' configuration").c_str())); } void SRTMinorServoSetupThread::onStop() { AUTO_TRACE("SRTMinorServoSetupThread::onStop()"); - ACS_LOG(LM_FULL_INFO, "SRTMinorServoSetupThread::onStop()", (LM_NOTICE, "SETUP THREAD STOPPED")); - if(m_core.m_motion_status.load() == MOTION_STATUS_TRACKING) { try @@ -47,6 +45,8 @@ void SRTMinorServoSetupThread::onStop() ACS_SHORT_LOG((LM_ERROR, ex.errorTrace.routine)); } } + + ACS_LOG(LM_FULL_INFO, "SRTMinorServoSetupThread::onStop()", (LM_NOTICE, "MinorServos configured")); } void SRTMinorServoSetupThread::runLoop() @@ -154,7 +154,7 @@ void SRTMinorServoSetupThread::runLoop() { try { - if(servo->setup(m_core.m_commanded_setup.c_str())) + if(servo->setup(m_core.m_commanded_setup.c_str(), m_core.m_as_configuration.load())) { m_core.m_current_servos[servo_name] = servo; try @@ -176,7 +176,7 @@ void SRTMinorServoSetupThread::runLoop() } } - if(m_core.m_commanded_setup.find("_ASACTIVE") == std::string::npos) + if(!m_core.m_as_configuration.load()) { // We commanded a configuration which does not use the active surface, therefore we need to send some slightly different coordinates with a preset command @@ -198,7 +198,7 @@ void SRTMinorServoSetupThread::runLoop() } else { - // _ASACTIVE configuration, jump directly to state 7 + // AS configuration, jump directly to state 7 m_status = 7; } diff --git a/SRT/Servers/SRTMinorServo/src/SRTMinorServoTrackingThread.cpp b/SRT/Servers/SRTMinorServo/src/SRTMinorServoTrackingThread.cpp index b45fb40e5dc34225da8fd5518ab8cfa5c212abdf..e59c1375093fe84417bea27942a03195b3ed4cb3 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTMinorServoTrackingThread.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTMinorServoTrackingThread.cpp @@ -22,16 +22,16 @@ void SRTMinorServoTrackingThread::onStart() m_point_id = 0; m_point_time = 0; - ACS_LOG(LM_FULL_INFO, "SRTMinorServoTrackingThread::onStart()", (LM_NOTICE, "TRACKING THREAD STARTED")); + ACS_LOG(LM_FULL_INFO, "SRTMinorServoTrackingThread::onStart()", (LM_DEBUG, "TRACKING THREAD STARTED")); } void SRTMinorServoTrackingThread::onStop() { AUTO_TRACE("SRTMinorServoTrackingThread::onStop()"); - ACS_LOG(LM_FULL_INFO, "SRTMinorServoTrackingThread::onStop()", (LM_NOTICE, "TRACKING THREAD STOPPED")); - m_core.m_elevation_tracking.store(Management::MNG_FALSE); + + ACS_LOG(LM_FULL_INFO, "SRTMinorServoTrackingThread::onStop()", (LM_DEBUG, "TRACKING THREAD STOPPED")); } void SRTMinorServoTrackingThread::runLoop() diff --git a/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp b/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp index ddad515e18b9f9179e73f77487d7b25b0612c2e5..925881a89c035f9acab68fbd919400d9492af788 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp @@ -122,9 +122,9 @@ bool SRTProgramTrackMinorServoImpl::status() return status; } -bool SRTProgramTrackMinorServoImpl::setup(const char* configuration_name) +bool SRTProgramTrackMinorServoImpl::setup(const char* configuration_name, CORBA::Boolean as_off) { - bool return_value = SRTBaseMinorServoImpl::setup(configuration_name); + bool return_value = SRTBaseMinorServoImpl::setup(configuration_name, as_off); m_tracking_queue.clear(); m_total_trajectory_points.store(0); diff --git a/SystemMake/Makefile b/SystemMake/Makefile index bede02f70f42fcffc2f2e921646f0beb5acd1d7d..af500c4ada6db37285cc8c6073dda8d66569bf11 100644 --- a/SystemMake/Makefile +++ b/SystemMake/Makefile @@ -30,9 +30,9 @@ COMMON_INTERFACES:=CommonInterface ManagmentInterface AntennaInterface Receivers WeatherStationInterface ActiveSurfaceInterface \ XBackendInterface COMMON_LIBRARIES:=SlaLibrary IRALibrary DiscosVersion TextWindowLibrary ParserLibrary \ - XarcosLibrary ModbusChannel ComponentProxy DiscosLocals \ + XarcosLibrary ModbusChannel ComponentProxy DiscosLocals XEphemAstroLib \ DiscosBackendProtocol PyTestingLibrary \ -COMMON_SERVERS:=AntennaBoss Observatory OTF PointingModel Refraction SkySource \ +COMMON_SERVERS:=AntennaBoss Observatory OTF PointingModel Refraction SkySource SolarSystem \ Moon FitsWriter Scheduler ReceiversBoss ExternalClients \ CalibrationTool TotalPower CustomLogger \ PyDewarPositioner Sardara Skarab PyLocalOscillator MFKBandBaseReceiver PyCalmux \