// $Id$ //----------------------------------------------------------------------- // // (c) Copyright 2006 by GATS, Inc., // 11864 Canon Blvd, Suite 101, Newport News VA 23606 // // All Rights Reserved. No part of this software or publication may be // reproduced, stored in a retrieval system, or transmitted, in any form // or by any means, electronic, mechanical, photocopying, recording, or // otherwise without the prior written permission of GATS, Inc. // //----------------------------------------------------------------------- // // Module: TimeRegistration.cpp // // Author: Christopher W. Brown // // Date: 20060614 // //----------------------------------------------------------------------- //----------------------------------------------------------------------- // Include Files: //----------------------------------------------------------------------- #include "Event.h" #include "ConfigFile.h" #include "EventVar.h" #include "TimeRegistration.h" #include "Ephemeris.h" #include "Satellite.h" #include "GeneralFunctions.h" #include "Add83kmLatLon.h" #include #include #include #include using namespace std; //----------------------------------------------------------------------- // Defines and Macros: //----------------------------------------------------------------------- #define INTERP_ORDER 5 #define EPHEMSIZE 2*INTERP_ORDER+3 //Test Defines //#define TEST //----------------------------------------------------------------------- // Global Variables: //----------------------------------------------------------------------- //----------------------------------------------------------------------- // Utility Routines: //----------------------------------------------------------------------- int TimeRegistration(Event& L0, Event& L1, Event& Tmp, Event& SD, ConfigFile& cf) { char *auxDir, *ephVers, *sunVers; char ephemFileName[140]; char solarFileName[140]; double eventStartTime; int calDate[7]; auxDir = cf.GetStr("TimeRegistration", "Auxilliary_Directory"); ephVers = cf.GetStr("TimeRegistration", "Ephem_Version"); sunVers = cf.GetStr("TimeRegistration", "Solar_Version"); EventVar TReg_time("TReg_time", "Time Registration Detector Time", "Seconds"); EventVar TReg_timeJDN("TReg_timeJDN", "Time Registration Detector Time", "Days (JDN)"); int size, i; L0.getEventVar("L0_DetectorTimes", TReg_time); eventStartTime = L0.getEventStartTime(); size = TReg_time.size(); //InitializeEventVars(dataRegEVS); Tmp.addEventVar(TReg_time); cout << "Size: " << size << endl;; TReg_timeJDN = TReg_time/86400.00; TReg_timeJDN += UNIX_CONST + eventStartTime/86400.0; #ifdef TEST cout << "eventStartTime: " << setprecision(20) << eventStartTime << endl; cout << "Size: " << size << endl;; //cout << "TReg[490]: " << setprecision(20) << TReg_time[490] << " TRegJDN[490]: " << TReg_timeJDN[490] << endl; //cout << "TReg[491]: " << setprecision(20) << TReg_time[491] << " TRegJDN[491]: " << TReg_timeJDN[491] << endl; //cout << "TReg[492]: " << setprecision(20) << TReg_time[492] << " TRegJDN[492]: " << TReg_timeJDN[492] << endl; #endif // cout << "TReg: " << setprecision(20) << TReg_timeJDN[0] << " CalEphem: " << ephemFileName << endl; jdn2cal(TReg_timeJDN[0], calDate); sprintf(ephemFileName,"%sAIM_%04i%02i%02i_V%s.eph",auxDir,calDate[0],calDate[1],calDate[2],ephVers); sprintf(solarFileName,"%sAIM_%04i%02i_V%s.sol",auxDir,calDate[0],calDate[1],ephVers); TReg_timeJDN -= MJDN_CONST; Tmp.addEventVar(TReg_timeJDN); cout << "EphemFile: " << ephemFileName << endl; cout << "SolarFile: " << solarFileName << endl; L1.addLogEntry(string("EphemFile: ") + string(ephemFileName)); L1.addLogEntry(string("SolarFile: ") + string(solarFileName)); Satellite SOFIE(size); ifstream SOFIEfile (ephemFileName); ifstream SOLARfile (solarFileName); Ephemeris Sun(SOLARfile); //SOFIEfile.open(); cout << "Creating AIM Ephem . . ."; Ephemeris AIM(SOFIEfile); cout << "Done. " << endl; SOFIE.getEphemeris(AIM, TReg_timeJDN); //Sun.getEphemeris("Sun.txt"); SOFIE.getTPLocation(Sun); SOFIE.getViewingAngle(); SOFIE.calcCurvatureRadius(); SOFIE.calcSCRadius(); //Sun.calcSolarExtent(); SOFIE.calcDopplerShift(); SOFIE.calcSinkRate(); SOFIE.writeOutput(L1, Tmp); #ifdef TEST cout << "S: " << AIM.ephStart << endl; cout << "E: " << AIM.ephEnd << endl; cout << "C: " << AIM.coordSys << endl; cout << "N: " << AIM.numPts << endl; cout << "TS: " << AIM.timeStep << endl; for(i=127; i<130; i++){ cout << "T: " << AIM.stateVector[i].time << endl; cout << "X: " << AIM.stateVector[i].position[0] << " " << AIM.stateVector[i].position[1] << " " << AIM.stateVector[i].position[2] << endl; cout << "VX: " << AIM.stateVector[i].velocity[0] << " " << AIM.stateVector[i].velocity[1] << " " << AIM.stateVector[i].velocity[2] << endl; } for(i=0; i