<commit_before>/*//////////////////////////////////////////////////////////////////
////       SKIRT -- an advanced radiative transfer code         ////
////       © Astronomical Observatory, Ghent University         ////
///////////////////////////////////////////////////////////////// */

#ifndef FULLINSTRUMENT_HPP
#define FULLINSTRUMENT_HPP

#include "ArrayTable.hpp"
#include "SingleFrameInstrument.hpp"

////////////////////////////////////////////////////////////////////

/** A FullInstrument object represents an advanced instrument that records individual contributions
    to the flux from various sources, including the components of the Stokes vector for polarized
    radiation. For each type of flux contribution being recorded, a FullInstrument object holds two
    array data members: a simple 1D array (the F-array) that stores the integrated flux at every
    wavelength index, and a 3D array (the f-array) corresponding to the surface brightness in every
    pixel, at every wavelength index. The instrument dynamically adapts to the characteristics of
    the simulation it is part of. For example, if there is no dust system, only the direct stellar
    flux is recorded (since there is nothing else). If dust emission is turned off in the dust
    system, the thermal radiation emitted by dust is not recorded (since it will be zero).
    Similarly, if none of the dust mixtures in the dust sytem support polarization, the components
    of the Stokes vector are not recorded. These adjustments save memory and processing time where
    appropriate.

    Specifically, this instrument separately records the contributions to the total flux
    \f$F_\lambda^{\text{tot}}\f$ due to the direct stellar radiation
    \f$F_\lambda^{*,\text{dir}}\f$, the scattered stellar radiation \f$F_\lambda^{*,\text{sca}}\f$,
    the direct dust radiation \f$F_\lambda^{\text{dust},\text{dir}}\f$, and the scattered dust
    radiation \f$F_\lambda^{\text{dust},\text{sca}}\f$, with obviously \f[ F_\lambda^{\text{tot}} =
    F_\lambda^{*,\text{dir}} + F_\lambda^{*,\text{sca}} + F_\lambda^{\text{dust},\text{dir}} +
    F_\lambda^{\text{dust},\text{sca}}. \f] The instrument also stores the flux from the object as
    it would be seen without any dust attenuation, i.e. the transparent view of the system.
    Furthermore, the contributions from individual scattering levels (stellar radiation only)
    up to a certain maximum level \f$N_{\text{max}}\f$ can be recorded separately. By
    default, the maximum level is set to zero, effectively disabling this feature. Finally, the
    instrument also records the values corresponding to each of the elements of the Stokes vector,
    i.e. \f$Q_\lambda^{\text{tot}}\f$, \f$U_\lambda^{\text{tot}}\f$, and
    \f$V_\lambda^{\text{tot}}\f$. Note that these Stokes "flux" values can be negative. */
class FullInstrument : public SingleFrameInstrument
{
    Q_OBJECT
    Q_CLASSINFO("Title", "an advanced instrument that records individual contributions to the flux")

    Q_CLASSINFO("Property", "scatteringLevels")
    Q_CLASSINFO("Title", "the number of scattering levels to be recorded individually")
    Q_CLASSINFO("MinValue", "0")
    Q_CLASSINFO("MaxValue", "25")
    Q_CLASSINFO("Default", "0")

    //============= Construction - Setup - Destruction =============<commit_msg>Increases the maximum number of individual scattering images in FullInstrument to 100<commit_after>/*//////////////////////////////////////////////////////////////////
////       SKIRT -- an advanced radiative transfer code         ////
////       © Astronomical Observatory, Ghent University         ////
///////////////////////////////////////////////////////////////// */

#ifndef FULLINSTRUMENT_HPP
#define FULLINSTRUMENT_HPP

#include "ArrayTable.hpp"
#include "SingleFrameInstrument.hpp"

////////////////////////////////////////////////////////////////////

/** A FullInstrument object represents an advanced instrument that records individual contributions
    to the flux from various sources, including the components of the Stokes vector for polarized
    radiation. For each type of flux contribution being recorded, a FullInstrument object holds two
    array data members: a simple 1D array (the F-array) that stores the integrated flux at every
    wavelength index, and a 3D array (the f-array) corresponding to the surface brightness in every
    pixel, at every wavelength index. The instrument dynamically adapts to the characteristics of
    the simulation it is part of. For example, if there is no dust system, only the direct stellar
    flux is recorded (since there is nothing else). If dust emission is turned off in the dust
    system, the thermal radiation emitted by dust is not recorded (since it will be zero).
    Similarly, if none of the dust mixtures in the dust sytem support polarization, the components
    of the Stokes vector are not recorded. These adjustments save memory and processing time where
    appropriate.

    Specifically, this instrument separately records the contributions to the total flux
    \f$F_\lambda^{\text{tot}}\f$ due to the direct stellar radiation
    \f$F_\lambda^{*,\text{dir}}\f$, the scattered stellar radiation \f$F_\lambda^{*,\text{sca}}\f$,
    the direct dust radiation \f$F_\lambda^{\text{dust},\text{dir}}\f$, and the scattered dust
    radiation \f$F_\lambda^{\text{dust},\text{sca}}\f$, with obviously \f[ F_\lambda^{\text{tot}} =
    F_\lambda^{*,\text{dir}} + F_\lambda^{*,\text{sca}} + F_\lambda^{\text{dust},\text{dir}} +
    F_\lambda^{\text{dust},\text{sca}}. \f] The instrument also stores the flux from the object as
    it would be seen without any dust attenuation, i.e. the transparent view of the system.
    Furthermore, the contributions from individual scattering levels (stellar radiation only)
    up to a certain maximum level \f$N_{\text{max}}\f$ can be recorded separately. By
    default, the maximum level is set to zero, effectively disabling this feature. Finally, the
    instrument also records the values corresponding to each of the elements of the Stokes vector,
    i.e. \f$Q_\lambda^{\text{tot}}\f$, \f$U_\lambda^{\text{tot}}\f$, and
    \f$V_\lambda^{\text{tot}}\f$. Note that these Stokes "flux" values can be negative. */
class FullInstrument : public SingleFrameInstrument
{
    Q_OBJECT
    Q_CLASSINFO("Title", "an advanced instrument that records individual contributions to the flux")

    Q_CLASSINFO("Property", "scatteringLevels")
    Q_CLASSINFO("Title", "the number of scattering levels to be recorded individually")
    Q_CLASSINFO("MinValue", "0")
    Q_CLASSINFO("MaxValue", "100")
    Q_CLASSINFO("Default", "0")

    //============= Construction - Setup - Destruction =============
{'fraction_non_alphanumeric': 0.15794932582604831, 'fraction_numerical': 0.002370721588383464, 'mean_word_length': 2.9940828402366866, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1525788', 'n_tokens_mistral': 1690, 'n_tokens_neox': 1608, 'n_words': 723}