// // $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. // //----------------------------------------------------------------------- // // Class: ModelData // // Filename: ModelData.cpp // // Author: Christopher W. Brown // // Date: October 2007 // //----------------------------------------------------------------------- // Modification History: // //----------------------------------------------------------------------- // Include Files: //----------------------------------------------------------------------- // #include "ConfigFile.h" #include "EventVar.h" #include "ModelData.h" //#include "AltReg.h" //#include "NonLinearity.h" #include #include #include // //----------------------------------------------------------------------- // Defines and Macros: //----------------------------------------------------------------------- // // //----------------------------------------------------------------------- // Global Variables: //----------------------------------------------------------------------- // // //----------------------------------------------------------------------- // Utility Routines: //----------------------------------------------------------------------- // using namespace std; ModelData::ModelData() //!< Default Constructor for ModelData Class { } ModelData::ModelData(Event &InEvent, Event &Stat, ConfigFile &cf, int iter) //!< Constructor for ModelData Class //!< Loads Initial ModelData Data from file { #ifdef LOGOUT cout << "In Constructor ModelData::ModelData(Event &, Event &, ConfigFile &)" << endl; #endif plotSimData = 0; logModelData = 0; //Initialize To Defaults //eventType = 0; band = 0; altRegType = 0; //numBands = 24; plotSimData = 0; logModelData = 0; setConfigParameters(cf, iter); //allSignals.setName("allSignals"); altRegTime.setName("Registered Time"); corrBandSignal.setName("corrBandSignal"); angleImpact.setName("angleImpact"); angleRefr.setName("angleRefr"); angleGeom.setName("angleGeom"); zImpact.setName("zImpact"); } ModelData::~ModelData() //!< Default Destructor for ModelData Class { #ifdef LOGOUT cout << "In Destructor ModelData::~ModelData()" << endl; #endif } void ModelData::readForwardModelData(Event& InEvent, Event& SD) //!< Reads Simulated Forward Model EventVars from Event Variable //!< Stores Information from CO2Sim in Model Class Object { #ifdef LOGOUT cout << "In Function ModelData::readForwardModelData(Event& InEvent, Event& SD, ConfigFile& CF)" << endl; #endif //Sets Model Data char eventVarName[50]; sprintf(eventVarName, "Band%02iRefracAngle", band+1); InEvent.getEventVar(eventVarName, angleRefr); //InEvent.getEventVar("Band13RefracAngle", angleRefr); angleRefr.setName("L1_SimulatedAngleRefr"); angleRefr.setUnits("Radians"); angleRefr.setDescription("Simulated Refraction Angle"); sprintf(eventVarName, "Band%02iAltitude", band+1); InEvent.getEventVar(eventVarName, zImpact); //InEvent.getEventVar("Band13Altitude", zImpact); zImpact.setName("L1_SimulatedTPZImpact"); zImpact.setUnits("Km"); zImpact.setDescription("Simulated Impact Altitude Z"); //if(altRegType != 3){ if(band < 25){ sprintf(eventVarName, "Band%02iTransmittance", band+1); InEvent.getEventVar(eventVarName, corrBandSignal); } else { corrBandSignal.resize(zImpact.size()); corrBandSignal.setValueConst(-1.e24); } corrBandSignal.setName("L1_SimulatedBandSignal"); corrBandSignal.setUnits("Transmission"); corrBandSignal.setDescription("Simulated Transmission"); altRegTime.resize(zImpact.size()); altRegTime.setValueConst(-1.e24); altRegTime.setUnits("Secs"); altRegTime.setName("L1_SimulatedTime"); altRegTime.setDescription("Simulated Event Time"); angleImpact.resize(zImpact.size()); //!< Impact Angle angleImpact.setValueConst(-1.e24); angleImpact.setUnits("Radians"); angleImpact.setName("L1_SimulatedAngleImpact"); angleImpact.setDescription("Calculated Model Impact Angle"); angleGeom.resize(zImpact.size()); //!< Geometric Angle angleGeom.setValueConst(-1.e24); angleGeom.setUnits("Radians"); angleGeom.setName("L1_SimulatedAngleGeom"); angleGeom.setDescription("Calculated Model Geometric Angle"); if(plotSimData){ char subtitle[128]; angleRefr.setAxisRange(-0.6, 0.6); zImpact.setAxisRange(0.0, 180.0); sprintf(subtitle, "Model Refraction Angle Band %i Input", band+1); zImpact.Plot("Altitude Registration",subtitle,angleRefr); if(altRegType != 3){ corrBandSignal.setAxisRange(); corrBandSignal.setName("Model Signal"); sprintf(subtitle, "Model Correction Band %i Input", band+1); corrBandSignal.Plot("Altitude Registration",subtitle,zImpact); zImpact.Plot("Altitude Registration",subtitle, corrBandSignal); } } return; } void ModelData::setConfigParameters(ConfigFile& C, int iter) //!< Reads Config File for Registration Parameters //!< Stores Information into ModelData Class Object Private Variables { #ifdef LOGOUT cout << "In Function ModelData::setConfigParameters(ConfigFile& C)" << endl; #endif vector temp; //Otherwise uses default Values used in Constructor try { //band = C.GetInt("AltitudeRegistration", "RegistrationBand"); temp = C.GetIntValues("AltitudeRegistration", "RegistrationBand"); band = temp[iter]; band--; } catch(...) { band = 12; cout << "Registration Band Set to Default Value: " << band << endl; } try { temp = C.GetIntValues("AltitudeRegistration", "AltRegType"); altRegType = temp[iter]; //altRegType = C.GetInt("AltitudeRegistration", "AltRegType"); } catch(...) { altRegType = 2; cout << "AltRegType Set to Default: " << altRegType << endl; } try { plotSimData = C.GetInt("AltitudeRegistration", "PlotModel"); } catch(...) { plotSimData = 0; } try { logModelData = C.GetInt("AltitudeRegistration", "LogCreateModelGrid"); } catch(...) { logModelData = 0; } //if(band >= numBands){ // band = 12; // cout << "Illegal Registration Band: " << band+1 << ". There are only " << numBands << " Bands. Right?" << endl; //} return; }