Skip to content

Commit 6429a94

Browse files
committed
added transient efficency for des
added transient_efficency for des. set deaful
1 parent 599c15f commit 6429a94

File tree

7 files changed

+34
-8
lines changed

7 files changed

+34
-8
lines changed

src/sorcha/data/survey_setups/DES_config_file.ini

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,14 @@ visits_query = SELECT llcra, llcdec, lrcra, lrcdec, urcra, urcdec, ulcra, ulcdec
9393
[FADINGFUNCTION]
9494

9595
# Uses probability calculation from Bernardinelli et al (2022)
96-
# For DES, calculation is done per observation and so only need to turn fading function on with no parameters needed.
96+
# For DES, calculation is done per observation.
9797
# pointing sqlite database must include constants c and k. (can be seen in pointing_sql_query in the INPUT section.)
9898
fading_function_on = True
9999

100+
# overall transient efficiency for moving object detection. 0.95529 in Bernardinelli et al (2022).
101+
# if not specifed will default to 1 and be neglible
102+
self.des_transient_efficency = 0.95529
103+
100104

101105
[LINKINGFILTER]
102106
# For DES a single detection was considered a tracklet detection and

src/sorcha/des.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ def runDESSimulation(args, sconfigs, return_only=False):
330330
verboselog("Number of rows BEFORE applying fading function: " + str(len(observations.index)))
331331
observations = DESFadingFunctionFilter(
332332
observations,
333+
sconfigs.fadingfunction.des_transient_efficency,
333334
args._rngs,
334335
verbose=args.loglevel,
335336
)

src/sorcha/modules/DESDetectionProbability.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import numpy as np
2121

2222

23-
def DEScalcDetectionProbability(mag, limmag, c, k, c_sharp=0.9555):
23+
def DEScalcDetectionProbability(mag, limmag, c, k, c_sharp):
2424
"""
2525
Find the probability of a detection given a visual magnitude,
2626
limiting magnitude, a scaling factor c, transition sharpness k and a transient efficiency. Equation from
@@ -45,7 +45,7 @@ def DEScalcDetectionProbability(mag, limmag, c, k, c_sharp=0.9555):
4545
Returns
4646
----------
4747
P : float or array of floats
48-
Probability of detection.
48+
Probability of detection
4949
"""
5050

5151
P = c_sharp * (c / (1 + np.exp(k * (mag - limmag))))
@@ -55,6 +55,7 @@ def DEScalcDetectionProbability(mag, limmag, c, k, c_sharp=0.9555):
5555

5656
def DESDetectionProbability(
5757
eph_df,
58+
transient_efficiency,
5859
magnitude_name="PSFMag",
5960
limiting_magnitude_name="fiveSigmaDepth_mag",
6061
scaling_factor_name="c",
@@ -90,6 +91,9 @@ def DESDetectionProbability(
9091
eph_df column name for transition_sharpness
9192
DEfault: k
9293
94+
transient_efficiency: float
95+
overall transient efficiency for moving object detection
96+
9397
Returns
9498
----------
9599
: float or array of floats
@@ -102,4 +106,5 @@ def DESDetectionProbability(
102106
eph_df[limiting_magnitude_name],
103107
eph_df[scaling_factor_name],
104108
eph_df[transition_sharpness_name],
109+
transient_efficiency,
105110
)

src/sorcha/modules/DESFadingFunctionFilter.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
from .DESDetectionProbability import DESDetectionProbability
66

77

8-
def DESFadingFunctionFilter(observations, module_rngs, verbose=False):
8+
def DESFadingFunctionFilter(
9+
observations,
10+
transient_efficiency,
11+
module_rngs,
12+
verbose=False,
13+
):
914
"""
1015
Wrapper function for DESDetectionProbability and PPDropObservations.
1116
@@ -17,6 +22,8 @@ def DESFadingFunctionFilter(observations, module_rngs, verbose=False):
1722
observations : Pandas dataframe
1823
Dataframe of observations with a column containing the probability of detection.
1924
25+
transient_efficiency: float
26+
overall transient efficiency for moving object detection
2027
2128
module_rngs : PerModuleRNG
2229
A collection of random number generators (per module).
@@ -34,7 +41,7 @@ def DESFadingFunctionFilter(observations, module_rngs, verbose=False):
3441
verboselog = pplogger.info if verbose else lambda *a, **k: None
3542

3643
verboselog("Calculating probabilities of detections...")
37-
observations["detection_probability"] = DESDetectionProbability(observations)
44+
observations["detection_probability"] = DESDetectionProbability(observations, transient_efficiency)
3845

3946
verboselog("Dropping observations below detection threshold...")
4047
observations = PPDropObservations(observations, module_rngs, "detection_probability")

src/sorcha/utilities/sorchaConfigs.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,9 @@ class fadingfunctionConfigs:
454454
fading_function_peak_efficiency: float = None
455455
"""Peak efficiency for the fading function, called the 'fill factor' in Chesley and Veres (2017)."""
456456

457+
des_transient_efficency: float = None
458+
"""Overall transient efficiency for moving object detection"""
459+
457460
survey_name: str = None
458461

459462
def __post_init__(self):
@@ -477,6 +480,11 @@ def _validate_fadingfunction_configs_DES(self):
477480
"""
478481
check_key_exists(self.fading_function_on, "fadingfunction")
479482
self.fading_function_on = cast_as_bool(self.fading_function_on, "fading_function_on")
483+
if self.fading_function_on:
484+
if self.des_transient_efficency is not None:
485+
cast_as_float(self.des_transient_efficency, "des_transient_efficency")
486+
else:
487+
self.des_transient_efficency = 1 # won't impact detection efficency when 1
480488
check_key_doesnt_exist(
481489
self.fading_function_peak_efficiency, "fading_function_peak_efficiency", "but survey is DES."
482490
)

tests/sorcha/test_DESDetectionProbaility.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import pandas as pd
55
def test_DEScalcDetectionProbability():
66
mag, limmag, c, k = 20,23.1,0.90,4.55
7-
P = DEScalcDetectionProbability(mag,limmag,c,k)
7+
P = DEScalcDetectionProbability(mag,limmag,c,k,0.9555)
88

99
assert math.isclose(P, 0.8599493561841001,rel_tol=1e-10)
1010

1111
mag, limmag, c, k = 24,23.1,0.90,3.99
12-
P = DEScalcDetectionProbability(mag,limmag,c,k)
12+
P = DEScalcDetectionProbability(mag,limmag,c,k,0.9555)
1313

1414
assert math.isclose(P, 0.0230733144369,rel_tol=1e-10)
1515

@@ -24,7 +24,7 @@ def test_DESDectionProbability():
2424
"k":[4.55,3.99],
2525
}
2626
obs = pd.DataFrame(obs)
27-
P = DESDetectionProbability(obs)
27+
P = DESDetectionProbability(obs,0.9555)
2828

2929
assert math.isclose(P[0], 0.8599493561841001,rel_tol=1e-10)
3030

tests/sorcha/test_sorchaConfigs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"fading_function_width": 0.1,
6262
"fading_function_peak_efficiency": 1.0,
6363
"survey_name": "rubin_sim",
64+
"des_transient_efficency": None,
6465
}
6566

6667
correct_linkingfilter = {

0 commit comments

Comments
 (0)