TargetList

The target list modules take catalog data from a StarCatalog object and, using additional information and methods from Completeness, OpticalSystem, and ZodiacalLight objects, generate an input target list for a survey simulation. The basic functionality is fully implemented by the TargetList prototype, with other implementations focused on special cases, such as the KnownRVPlanetsTargetList. The end result is an object analogous to the StarCatalog, with target attributes stored in equally sized numpy.ndarrays. Fig. 31 shows the initialization of the TargetList prototype.

        flowchart TB
    subgraph TLinit["<pre>TargetList.__init__</pre>"]
    direction TB

    subgraph submods[Instantiate submodules]
        direction LR
        SM1[StarCatalog]---
        SM2[OpticalSystem]---
        SM3[ZodiacalLight]---
        SM4[PostProcessing]---
        SM5[Completeness]
        linkStyle 0 stroke-width:0px
        linkStyle 1 stroke-width:0px
        linkStyle 2 stroke-width:0px
        linkStyle 3 stroke-width:0px
    end  
    B0([" "])---B1([Assign reserved keywords to attributes and copy to: <pre>self._outspec</pre>])-->submods
    style B0 fill:none,stroke-width:0px
    linkStyle 4 stroke-width:0px

    subgraph detmode[Identify detection mode]
        B3{<pre>int_WA</pre> is None}
        B3 -- True --> B4{"<pre>detmode[OWA]</pre>is infinite"}
        B4 -- True --> B5("<pre>int_WA = 2*detmode[IWA]</pre>")
        B4 -- False --> B6("<pre>int_WA = 1/2 * (detmode[IWA] + 
        detmode[OWA])</pre>")
        B5 & B6-->B7([Assign <pre>int_WA</pre> and <pre>int_dMag</pre> as array attributes])
        B3 --> False -->B7
    end
    submods-->detmode
    detmode--> B8[["<pre>self.set_catalog_attributes()</pre> Populates catalog_atts and required_catalog_atts"]]
    B8-->B9[["<pre>self.populate_target_list()</pre>Copies catalog_atts from StarCatalog"]]
    B9-->B10(["<pre>if self.popStars is not None()</pre>Remove all targets in popStars"])
    
    subgraph fillphot["<pre>self.fillPhotometryVals()</pre>"]
        direction TB

        subgraph foreachtarg["For Each Target"]
            direction LR
            B12{"Spectral type 
            can be determined"}
            B12 -- False --> B13{"<pre>self.fillPhotometry</pre> is True 
            and type can be determined
            from other data"}
            B13 -- True --> B14{"Target is 
            White dwarf 
            or subdwarf"}
            B13 -- False --> B15([Drop Target])
            B12 -- True --> B14
            B14 -- True --> B15
            B14 -- False --> B16([Keep Target])
        end
        B11([" "])---foreachtarg
        style B11 fill:none,stroke-width:0px
        linkStyle 23 stroke-width:0px

        subgraph fillphot2["<pre>if self.fillPhotometry is True</pre>"]
            direction LR
            B17(["Fill as many missing values as possible for <pre>MV, L, BC, Vmag, Bmag, BV</pre>"])-->
            B18(["<pre> if self.fillMissingBandMags is True</pre> Fill as many other band mags as possible"])
        end
        foreachtarg-->fillphot2
    end
    B10 --> fillphot
    fillphot-->B19[["<pre>self.nan_filter()</pre> Remove targets with NaN in any required_catalog_atts"]]

    subgraph othercalcs["Fill Other Target Properties as Needed"]
        direction LR
        B20[["<pre>self.stellar_Teff()</pre>"]]---
        B21[["<pre>self.stellar_mass()</pre>"]]---
        B22[["<pre>self.stellar_diameter()</pre>"]]---
        B23[["<pre>self.gen_inclinations()</pre>Generate system plane inclination"]]
        linkStyle 28 stroke-width:0px
        linkStyle 29 stroke-width:0px
        linkStyle 30 stroke-width:0px
    end  
    B19-->othercalcs

    subgraph calcsatandcutoff["<pre>self.calc_saturation_and_intCutoff_vals()</pre>Calculate saturation and intCutoff delta mags and completeness values"]
        direction LR 
        B240([" "])
        style B240 fill:none,stroke-width:0px
        subgraph calcsatsub1[" "]
        direction TB
        B24a[["<pre>self.OpticalSystem.calc_saturation_dMag()</pre>"]]-->
        B24b[["<pre>self.Completeness.comp_calc()"]]
        end
        style calcsatsub1 fill:none,stroke-width:0px

        subgraph calcsatsub2[" "]
        direction TB
        B24c[["<pre>self.OpticalSystem.calc_dMag_per_intTime(intCutoff)</pre>"]]-->
        B24d[["<pre>self.Completeness.comp_calc()"]]
        end
        style calcsatsub2 fill:none,stroke-width:0px
        calcsatsub1  --- calcsatsub2
        
    end
    othercalcs-->calcsatandcutoff
    linkStyle 34 stroke-width:0px
    
    subgraph compcalcs["Completeness Calculations"]
        direction LR
        B25[["<pre>self.Completeness.target_completeness()</pre>Calculate completeness for each target"]]---
        B26[["<pre> self.Completeness.gen_update()</pre>Generate dynamic completeness data"]]
        linkStyle 36 stroke-width:0px
    end  
    calcsatandcutoff-->compcalcs
    compcalcs--> B27[["<pre> self.filter_target_list()</pre>Apply any other requested filtering"]]



    end







    

Fig. 31 TargetList Prototype __init__.

After parsing keyword inputs and instantiating objects of StarCatalog, OpticalSystem, PostProcessing, ZodiacalLight, and Completeness, the prototype TargetList initialization calls populate_target_list(), which makes StarCatalog attribute property arrays attributes of the TargetList object, fills in missing photometric data (if the fillPhotometry keyword input is set to True), and assigns each target system additional, computed attributes:

  • The true and approximate stellar mass (attributes MsEst and MsTrue , respectively) is calculated in stellar_mass(). The estimated mass is based on the Mass-Luminosity relationship defined by the user, defaulting to [Henry1993].

  • The inclination of the target system’s orbital plane (attribute I), calculated in gen_inclinations(). This is used only if the commonSystemInclinations keyword input to the SimulatedUniverse is set to True. The inclinations are sinusoidally distributed, within the bounds set by the PlanetPopulation attribute Irange.

  • The \(\Delta\textrm{mag}\) and completeness values associated with the integration cutoff time set in the OpticalSystem and the saturation integration time (i.e., the point at which these values stop changing). For optical systems where there is no fundamental noise floor (i.e., where SNR can always be increased with additional integration time) the saturation \(\Delta\textrm{mag}\) is effectively infinite, but the saturation completeness is limited to the maximum obscurational completeness for that system (see [Brown2005] for details). These values, along with the user-selectable \(\Delta\textrm{mag}_\textrm{int}\) and \(WA_\textrm{int}\) are calculated in calc_saturation_and_intCutoff_vals(), which calls helper methods calc_saturation_dMag() and calc_intCutoff_dMag().

  • The single-visit Completeness (attribute int_comp) based on \(\Delta\textrm{mag}_\textrm{int}\).

Finally, the whole target list is filtered by filter_target_list(), based on filters selected by input keywords. The default filter set removes binary stars (or stars with close companions), systems where obscurational completeness is zero (i.e., all planets are inside the IWA or outside the OWA), and systems for which the integration cutoff completeness is less than the minComp input value.

Mass-Luminosity Relationship

The Mass Luminsoity Relationship (MLR) gives us an estimate for the mass of stars, which becomes extremely important for later caclulations. When the mass is not given by the catalog, we can estimate it using a variety of different models pre-programmed. Henry1993 is the default model, however there are more options and the ability to framework to add new models is in place.

The first calculation is of the ‘Estimated’ mass, which is the approximate stellar mass according to the model. We impose the standard deviation error described in the publication onto this value to create the ‘True’ mass.

All graphs shown below are using the HWO mission stars catalog with filtering to test the frameworks.

  • Henry 1993 - This is a great generalist and will output reliable data. The ‘true’ mass is equal to the estimated mass of each star plus a randomly generated Gaussian value with mean 0 and standard deviation of 7% (the error associated with the fit in that publication). (See [Henry1993] for details.)

    _images/henry1993chart.png
  • Fernandes 2021 - This model is much more up to date, but should only be used for FGK stars. Not reliable on other spectral classes. If your catalog only includes these stars or other stars are filtered out at this point, this model is highly suggested. Erorr is described in publication as 3%. (See [Fernandes2021] for details.)

    _images/fernandes2021chart.png
  • Henry 1993 + 1999 - This includes the paper from Henry 1999, where the caculations for lower mass stars are considered as well. Best generalist when working with a large variety of masses, especially into M dwarf territory. (See [Henry1999] for details.)

    _images/henry1993%2B1999chart.png
  • Fang 2010 - Great generalist, includes more specific data with a slightly smaller error. Good for all main sequence stars. (See [Fang2010] for details.)

    _images/fang2010chart.png