/** @file SolarSourceModeling.h @brief The SolarSourceModeling Class header file. @datecreated April 2, 2008 @version 1.0 @author - Kelly Teague - Greg Paxton @copyright (©) Copyright 2008 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. @see SolarSourceModeling @bug None known @todo None known @history */ #ifndef SOLARSOURCEMODELING_H_ #define SOLARSOURCEMODELING_H_ #include #include typedef std::vector > Vector2D; class SolarSourceModeling { public: SolarSourceModeling( const bool mode, const double balanceStart, const double balanceEnd, const std::vector elevationLockdown, const std::vector azimuthLockdown, const std::vector signal, const std::vector time, const double calibrationStart, const double calibrationEnd, const unsigned int offset ); /*!< @brief Constructor for the SolarSourceModeling object. */ inline void getCoefficients(double *a, double *b, double *c) {*a = _coefA; *b = _coefB; *c = _coefC; } ; /*!< @brief Method that records the a, b, and c model values in the passed in variables. */ double getIntensity(const double elevation, const double azimuth) const; /*!< @brief Method for retrieving model intensities from elevation and azimuth input data. */ virtual ~SolarSourceModeling(); /*!< @brief Destructor for the SolarSourceModeling object */ inline bool good(void) { return isTheDataOk; }; private: double centerElSolarCoordinates(double hiX, double loX); double centerAzSolarCoordinates(double hiY, double loY); double sum(std::vector data); double sumOfSquares(std::vector data); double sumCombined1d(std::vector xData, std::vector yData); double getMaxValue(std::vector data); void init(void); void validateDataValues(void); void setCalibrationData(); void getCruciformSubsetData(void); void setCalibrationTimes(void); void getCalibrationIndices(std::vector data); void setCoefficients(void); void getOffsetData(void); std::vector getCruciformStart(void); double* dot(double X[][3], double *Y); int getAzStart(void); void getCruciformSubsections(void); std::vector normalizeIntensity(void); int getIndexOfNearestIntensity(double x0, double y0, std::vector xData, std::vector yData); bool isTheDataOk; bool sunsetMode; unsigned int _offsetData; double _balStart, _balEnd, _calStart, _calEnd; std::vector _det; std::vector _t; double _coefA; double _coefB; double _coefC; std::vector _elLockdown; std::vector _azLockdown; //these are used for normalization of subsection data std::vector _azData1; std::vector _azData2; std::vector _azData3; std::vector _elData1; std::vector _elData2; std::vector _elData3; std::vector _intData1; std::vector _intData2; std::vector _intData3; double _relCalStartTime; double _relCalEndTime; int calibrationStartIndex; int calibrationEndIndex; }; #endif /*SOLARSOURCEMODELING_H_*/