// 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 one data line from the HITRAN database
#ifndef HITRANONEREC_H
#define HITRANONEREC_H

#include <QString>

class HitranOneRec
{
public:

    HitranOneRec();

    // Molecule number
    int getMolNum();
    void setMolNum(int newMolNum);

    // Isotopologue number
    int getIsoNum();
    void setIsoNum(int newIsoNum);

    // Vacuum wavenumber (cm-1)
    double getWn();
    void setWn(double newWn);

    // Line intensity (cm-1 / (molecule * cm^-2) at standard 296K)
    double getIntens();
    void setIntens(double newIntens);

    // Weighted square of the transition moment (Debye^2) for an electric dipole transition
    double getR();
    void setR(double newR);

    // Einstein A-coefficient (S^-1)
    double getA();
    void setA(double newA);

    // Air-broadening half-width
    double getAirHw();
    void setAirHw(double newAirHw);

    // Self-broadening half-width
    double getSelfHw();
    void setSelfHw(double newSelfHw);

    // Lower state energy (cm-1)
    double getLowE();
    void setLowE(double newLowE);

    // Temperature dependence exponent
    double getNAir();
    void setNAir(double newNAir);

    // Air pressure shift (cm^-1 * atm^-1) at 296K
    double getAirPShift();
    void setAirPShift(double newAirPShift);

    // Upper state global quanta
    QString getUpperV();
    void setUpperV(QString newUpperV);

    // Lower state global quanta
    QString getLowerV();
    void setLowerV(QString newLowerV);

    // Upper state local quanta
    QString getUpperQ();
    void setUpperQ(QString newUpperQ);

    // Lower state local quanta
    QString getLowerQ();
    void setLowerQ(QString newLowerQ);

    // Wavenumber uncertainty index
    int getIntUncWn();
    void setIntUncWn(int newIntUncWn);

    // Intensity uncertainty index
    int getIntUncIntens();
    void setIntUncIntens(int newIntUncIntens);

    // Air-broadening half-width uncertainty index
    int getIntUncAirHw();
    void setIntUncAirHw(int newIntUncAirHw);

    // Self-broadening half-width uncertainty index
    int getIntUncSelfHw();
    void setIntUncSelfHw(int newIntUncSelfHw);

    // Temperature dependent exponent uncertainty index
    int getIntUncNAir();
    void setIntUncNAir(int newIntUncNAir);

    // Air-pressure shift uncertainty index
    int getIntUncAirPShift();
    void setIntUncAirPShift(int newIntUncAirPShift);

    // Wavenumber uncertainty value
    double getDblUncWn();
    void setDblUncWn(double newDblUncWn);

    // Intensity uncertainty value
    double getDblUncIntens();
    void setDblUncIntens(double newDblUncIntens);

    // Air-broadening half-width uncertainty value
    double getDblUncAirHw();
    void setDblUncAirHw(double newDblUncAirHw);

    // Self-broadening half-width uncertainty value
    double getDblUncSelfHw();
    void setDblUncSelfHw(double newDblUncSelfHw);

    // Temperature dependent exponent uncertainty value
    double getDblUncNAir();
    void setDblUncNAir(double newDblUncNAir);

    // Air-pressure shift uncertainty value
    double getDblUncAirPShift();
    void setDblUncAirPShift(double newDblUncAirPShift);

    // Wavenumber uncertainty reference article number
    int getRefWn();
    void setRefWn(int newRefWn);

    // Intensity uncertainty reference article number
    int getRefIntens();
    void setRefIntens(int newRefWn);

    // Air-broadening half-width uncertainty reference article number
    int getRefAirHw();
    void setRefAirHw(int newRefAirHw);

    // Self-broadening half-width uncertainty reference article number
    int getRefSelfHw();
    void setRefSelfHw(int newREfSelfHw);

    // Temperature dependent exponent uncertainty reference article number
    int getRefNAir();
    void setRefNAir(int newRefNAir);

    // Air-pressure shift uncertainty reference article number
    int getRefAirPShift();
    void setRefAirPShift(int newRefAirPShift);

       // Availablility of programs and data for the case of line-mixing
    QString getLMix();
    void setLMix(QString newLMix);

    // Statistical weight of the upper state
    double getGUpper();
    void setGUpper(double newGUpper);

      // Statistical weight of the lower state
    double getGLower();
    void setGLower(double newGLower);

private:

    int molNum;  // Molecule number
    int isoNum;  // Isotopologue number
    double wn;       // Vacuum wavenumber (cm-1)
    double intens;   // Line intensity (cm-1 / (molecule * cm^-2) at standard 296K)
    double R;        // Weighted square of the transition moment (Debye^2) for an electric dipole transition
    double A;        // Einstein A-coefficient (S^-1)
    double airHw;    // Air-broadening half-width
    double selfHw;   // Self-broadening half-width
    double lowE;     // Lower state energy (cm-1)
    double nAir;     // Temperature dependence exponent
    double airPShift;  // Air pressure shift (cm^-1 * atm^-1) at 296K
    QString upperV;  // Upper state global quanta
    QString lowerV;  // Lower state global quanta
    QString upperQ;  // Upper state local quanta
    QString lowerQ;  // Lower state local quanta
    int intUncWn;      // Wavenumber uncertainty index
    int intUncIntens;  // Intensity uncertainty index
    int intUncAirHw;   // Air-broadening half-width uncertainty index
    int intUncSelfHw;  // Self-broadening half-width uncertainty index
    int intUncNAir;    // Temperature dependent exponent uncertainty index
    int intUncAirPShift;   // Air-pressure shift uncertainty index
    double dblUncWn;      // Wavenumber uncertainty value
    double dblUncIntens;  // Intensity uncertainty value
    double dblUncAirHw;   // Air-broadening half-width uncertainty value
    double dblUncSelfHw;  // Self-broadening half-width uncertainty value
    double dblUncNAir;    // Temperature dependent exponent uncertainty value
    double dblUncAirPShift;  // Air-pressure shift uncertainty value
    int refWn;      // Wavenumber uncertainty reference article number
    int refIntens;  // Intensity uncertainty reference article number
    int refAirHw;   // Air-broadening half-width uncertainty reference article number
    int refSelfHw;  // Self-broadening half-width uncertainty reference article number
    int refNAir;    // Temperature dependent exponent uncertainty reference article number
    int refAirPShift;  // Air-pressure shift uncertainty reference article number
    QString lMix;   // Availablility of programs and data for the case of line-mixing
    double gUpper;  // Statistical weight of the upper state
    double gLower;  // Statistical weight of the lower state

};

#endif // HITRANONEREC_H
