/*************************************************************************** * (C) Copyright 2006 by GATS, Inc. * 11864 Canon Blvd., STE 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. * *************************************************************************** * * Class: CO2Reg.h * * Filename: CO2Reg.h * * Description: CO2Reg has member functions to store signals, * calculate refraction errors, and write altitude * corrected output * @author C.W.Brown * (757)952-1048 * (757)873-5920 * * ***************************************************************************/ #ifndef CO2REG_H #define CO2REG_H #include #include #include //#include #include "Event.h" #include "EventVar.h" #include "ConfigFile.h" #include "AltReg.h" #include "ModelData.h" #include "NonLinearity.h" //#include "Ephemeris.h" //#include "GeneralFunctions.h" using namespace std; //typedef vector Vec; class CO2Reg:public AltReg{ private: /* char* fovFileName; double convCriteria; //!< Determines if Registration Converged int maxIterations; //!< Maximum Iterations Before Giving Up (Default = 10) double zOffset; //!< Registration Offset From Initial Z double timeOffset; //!< Registration Offset From Ephem Time double saveTimeOffset; //!< Registration Offset From Ephem Time double currConverge; //!< Convergence Evaluation of Current Registration Iteration double saveConverge; //!< Convergence Evaluation of Last Registration Iteration //double altRange[2]; //!< Altitude Range of Registration Process //double gridRange[2]; //!< Altitude Range of Gridded Output int logDebug; //!< Boolean for Debug Logging int logGriddedRefraction; //!< Boolean for Logging Refraction Angles int logModelData; int plotDebug; //!< Boolean for Plotting Debug Algorithms (BULK) int plotGridData; //!< Boolean for Plotting Data ... 0 = No int plotSimData; //!< Boolean for Plotting Data ... 0 = No int plotInputParams; int plotFunctions; int plotNonLinearity; int plotLockdownFunc; int plotRefrReg; int plotModelCalcIt; int plotModelCalcFinal; int plotDifferences; int plotDifferencesIt; int plotCorrectionBand; int plotAllBands; int plotZImpact; int plotGeomAngles; int plotConvolve; int plotSLDC; int plotSunSensor; int doConvolution; int doNonLinearCorr; int doSmoothLockdown; int presetGrid; //!< Bool for Grid Range being set in Config File int presetRange; //!< Bool for Registration Range being set in Config File double initTimeOffset; //!< Boolean for Plotting Data ... 0 = No double deltaTime; //!< Time Offset From Last Iteration double dRMS; //!< RMS difference from iteration to iteration double rmsSolution; //!< RMS difference from latest iteration double meanSolution; //!< RMS difference from latest iteration double MAXFINALTIMEOFFSET; //!< Maximum Final Time Offset double maxTimeOffset; //!< Time Offset From Last Iteration double minTimeOffset; //!< Time Offset From Last Iteration double maxRefrAlt; //!< Refraction Registration Max Altitude to Start int refrRegNum; //!< Number of Refraction Registration Sets to Calculate int minLockIndex; //!< Min Lockdown Index to use int maxLockIndex; //!< Max Lockdown Index to use int minAltIndex; //!< Min Altitude Index to use int maxAltIndex; //!< Max Altitude Index to use vector altRange; //!< Altitude Range of Registration Process vector gridRange; //!< Altitude Range of Gridded Output EventVar z37; //!< Final Z values for various Registration Methods EventVar AltReg_RefractionRMS; //!< Final QA values for various Registration Methods EventVar AltReg_RefractionMean; //!< Final QA values for various Registration Methods EventVar b37; //!< Final Z values for various Registration Methods EventVar m37; //!< Final Z values for various Registration Methods EventVar altRegTime; //!< Time of Signals EventVar refAngTime; //!< Refraction Angle on Refraction Angle Time EventVar corrBandSignal; //!< Band Signal or Transmission EventVar angleImpact; //!< Impact Angle EventVar angleImpactEdge; //!< Impact Angle at Edge From Model Iteration //EventVar angleImpactEdgeLower; //!< Impact Angle at Edge From Model Iteration //EventVar angleImpactComposite; //!< Impact Angle at Edge From Model Iteration EventVar angleRefr; //!< Refraction Angle EventVar angleRefrSolar; //!< Refraction Angle on Solar Tracker Time EventVar angleGeom; //!< Geometric Angle EventVar angleGeomEdge; //!< Geometric Angle Edge //EventVar angleGeo2; //!< Permanent Store Geometric Angle EventVar zGeom; //!< Geometric Altitude EventVar zImpact; //!< Impact Altitude EventVar zImpactEdgeTop; //!< Impact Altitude Top Edge EventVar zImpactEdgeBottom; //!< Impact Altitude Bottom Edge EventVar lockdownAngle; //!< Lockdown Angle to FOV EventVar lockdownAngleAz; //!< Lockdown Angle to FOV EventVar fpaSolarExtent; //!< FPA Solar Extent EventVar exoSolarExtent; //!< Exoatmospheric Solar Extent EventVar normSolarExtent; //!< FPA Normalized Solar Extent EventVar solarHighEdgeEl; //!< Solar High Elevation Edge EventVar solarHighEdgeAz; //!< Solar High Azimuthal Edge EventVar solarLowEdgeEl; //!< Solar Low Elevation Edge EventVar solarLowEdgeAz; //!< Solar Low Azimuthal Edge //EventVar losVectorSun(); //!< EventVar radiusSC; //!< Spacecraft Radius EventVar radiusSC_Shifted; //!< Time Shifted Spacecraft Radius EventVar radiusC; //!< Permanent Store of Spacecraft Radius EventVar doppler; //!< Doppler Shift //EventVarVect losSun; //!< Line Of Sight Vector to Sun EventVar modelSignal; EventVar signalExo; EventVar attenSetting; EventVarVect allSignals; EventVarVect plotLockdownIt; //EventVarVect plotSCRadiusIt; EventVarVect plotZImpactIt; EventVarVect plotCBSignalIt; EventVarVect plotAnglesIt; //EventVar sunSensorTime; //EventVar sunSensorOffsets; //EventVar sunSensorExoValues; //EventVarVect sunSensorValues; //EventVarVect plotAltitudesIt; //void setGriddedIndices(EventVar&, int&, int&); //void setGriddedIndices(EventVar&, int&, int&, int&, int&); //void gridCenterSums(Event &); //void setConfigParameters(ConfigFile&, int); //!< Reads Config File for Registration Parameters //!< Stores Information into AltReg Class Object Private Variables //int getShift(int); //&, vector&, int&, int&); void invertVector(vector&); void normalize(vector&); void initializeCO2Reg(); void finalizeCO2Reg(int, int); void setZOffset(int, int); void writeMetrics(Event&); /* void plotDiff(); void plotInitialSunSensor(EventVarVect&); void plotGriddedSunSensor(Event&, int); void gridData(EventVar, EventVar,EventVar&,int, int); void gridAltitude(EventVar&, int, int); void logGridData(EventVar, EventVar); */ public: int regValidityFlag; //!< Registration Validity Flag -- Used To Pass Over Registration Rather Than THROW exception CO2Reg(); //!< default constructor - Constructs an empty EphemerisClass object CO2Reg(Event&, Event&, ConfigFile&, int); //!< Constructs an empty AltReg object //!< This constructor will be used with the Solar Ephem Object ~CO2Reg(); //!< default destructor //void readForwardModelData(Event&, Event&, ConfigFile&); //!< Reads Simulated Forward Model EventVars from Event Variable //!< Stores Information from CO2Sim in AltReg Class Object //!< Input(s): //!< Event with EventVars SimSig, SimAlt, SimRef //!< Stored Output(s): AltReg.signal[] //!< AltReg.zAltitude[] //!< AltReg.angleRef[] //!< AltReg.timeOffset = 0 //!< AltReg.signalExo //!< AltReg.convergence = 0 //void readGeometricData(Event&, Event&, ConfigFile&); //!< Reads Geometric EventVars from Event Variable //!< Reads Config File for Registration Parameters //!< Stores Information from TimeReg and SigCorr in AltReg Class Object void initializeParams(); void initializeNames(); void readAttenSettings(Event&); //!< Reads Attenuator Setting EventVars from Event Variable //!< Attenuator Setting In Level 0 Event void calcImpactData(ModelData&); //); //, EventVar, double, double); //!< Adds Refraction Angle and Z to AltReg Object void shiftSCRad(EventVar&); //!< Adds zComparison Vector to AltReg Object void addNonlinearity(); //!< Adds Non-linearity to Modeled Transmissions void convertSignals2Model(ModelData&); //!< Interpolates Model Signals Onto Observed Altitude Grid (Thus Time Grid) void doPressureRegistration(Event&, ModelData&); //!< Iterate Time to Match Model Signals with Observed void compareSignals(int&, int&); //!< Compare and Get RMS void setTimeOffset(); //!< Calculate New TimeOffset based on Newton Method void calcRMS(int, int); //!< Get RMS between indices void getComparisonRange(int&, int&); //