// bytran -|- spectral calculations for portable devices using the HITRAN database
//
// Developed by Dzianis Pliutau (Denis Plutov) and Kostya Roslyakov
// www.bytran.org | bytran@bytran.org
// Copyright (c) 2016 Dzianis Pliutau
// Distributed under the MIT license
//
// The MIT License (MIT)
// Copyright (c) 2016 Dzianis Pliutau
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



// Object containing parameters for a single slant path layer
#ifndef ONESLANTLAYER_H
#define ONESLANTLAYER_H

#include "oneatmmodel.h"

class OneSlantLayer
{
public:

    OneSlantLayer();

    // Getting and setting the total pressure for a layer
    double getTotalPress();
    void setTotalPress(double newTotalPress);

    // Getting and setting the temperature within a layer
    double getTemp();
    void setTemp(double newTemp);

    // Getting and setting the density within a layer
    double getDensity();
    void setDensity(double newDensity);

    // Getting and setting the partial pressure
    QVector<double> *getPartPressArray();
    void setPartPressArray(QVector<double> *newPartPressArray);
    double getPartPress(int molIndex);
    void setPartPress(int molIndex,  double partPressValue);
    void resizePartPress(int newSize);

    // Methods to get and set the slant path layer path value
    double getPathLength();
    void setPathLength(double newPathLength);

    // Method to get and set the slant path layer refractive index value
    double getRefrIndexValue();
    void setRefrIndexValue(double newRefrIndex);

private:

    // Path length within a current layer (in meters)
    double pathLength;

    // Value of the index of refraction for a given layer
    double refrIndex;

    // Object with the partial pressure, total pressure and temperature (based on the atmospehric model values)
    OneAtmModel layerAtmParams;

    // Total pressure within a layer (in millibar)
    double totalPress;

    // Temperature within a layer (in Kelvin)
    double temp;

    // Density within a layer (the default units as in AFGL)
    double density;

    // Partial pressure values for different molecules within the same layer
    QVector <double> partPress;

};

#endif // ONESLANTLAYER_H
