Skip to content

Commit fdfa34f

Browse files
committed
added power law discrimination
1 parent caa600b commit fdfa34f

File tree

8 files changed

+51
-0
lines changed

8 files changed

+51
-0
lines changed

pychron/dvc/dvc.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,11 +866,14 @@ def save_icfactors(
866866
fits,
867867
refs,
868868
use_source_correction,
869+
use_discrimination,
869870
standard_ratios,
870871
reference_data,
871872
):
872873
if use_source_correction:
873874
ai.dump_source_correction_icfactors(refs)
875+
elif use_discrimination:
876+
ai.dump_disc_icfactors(refs)
874877
else:
875878
if fits and dets:
876879
self.info("Saving icfactors for {}".format(ai))

pychron/dvc/dvc_analysis.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,22 @@ def dump_icfactors(
607607

608608
self._dump(jd, path)
609609

610+
def dump_disc_icfactors(self, refs=None, standard_ratio=None):
611+
jd, path = self._get_json(ICFACTORS)
612+
for det, ticf in self.temporary_ic_factors.items():
613+
value = ticf["value"]
614+
v, e = nominal_value(value), std_dev(value)
615+
jd[det] = {
616+
"value": float(v),
617+
"error": float(e),
618+
"reviewed": True,
619+
"fit": 'discrimination power law',
620+
"standard_ratio": standard_ratio,
621+
"discrimination": True,
622+
"references": make_ref_list(refs),
623+
}
624+
self._dump(jd, path)
625+
610626
def dump_source_correction_icfactors(self, refs=None, standard_ratio=None):
611627
jd, path = self._get_json(ICFACTORS)
612628
for det, ticf in self.temporary_ic_factors.items():

pychron/options/icfactor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def _analysis_types_default(self):
3535
class ICFactorOptions(RatioSeriesOptions):
3636
aux_plot_klass = ICFactorAuxPlot
3737
delete_existing = Bool
38+
use_discrimination = Bool
3839
use_source_correction = Bool # this is experimental and should be removed? requested by WiscAr to correct for
3940
# source bias
4041
source_correction_kind = Enum("Exponential")

pychron/options/views/icfactor_views.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ def traits_view(self):
7272
Item("source_correction_kind", label="Kind"),
7373
label="Source",
7474
)
75+
76+
disc = BorderVGroup(
77+
Item("use_discrimination", label="Use Discrimination"),
78+
label="Discrimination",
79+
)
80+
7581
v = View(
7682
VGroup(
7783
Item(
@@ -90,6 +96,7 @@ def traits_view(self):
9096
"all other plots",
9197
),
9298
src,
99+
disc,
93100
)
94101
)
95102
return v

pychron/pipeline/nodes/fit.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ def _configure_hook(self):
210210
def _set_additional_options(self, state):
211211
state.delete_existing_icfactors = self.plotter_options.delete_existing
212212
state.use_source_correction = self.plotter_options.use_source_correction
213+
state.use_discrimination = self.plotter_options.use_discrimination
213214

214215
def _set_saveable(self, state):
215216
super(FitICFactorNode, self)._set_saveable(state)

pychron/pipeline/nodes/persist.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ def run(self, state):
224224

225225
if state.use_source_correction:
226226
msg = "source correction ic_factors"
227+
elif state.use_discrimination:
228+
msg = "discrimination ic_factors"
227229
else:
228230
msg = self.commit_message
229231
if not msg:
@@ -250,6 +252,7 @@ def _save_icfactors(self, ai, prog, i, n, state):
250252
state.saveable_fits,
251253
state.references,
252254
state.use_source_correction,
255+
state.use_discrimination,
253256
state.standard_ratios,
254257
state.reference_data,
255258
)

pychron/pipeline/plot/plotter/icfactor.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ def _set_interpolated_values(self, iso, fit, ans, p_uys, p_ues):
105105
ic = 1 / ufloat(v, e)
106106
beta = umath.log(ic) / umath.log(m40 / m36)
107107
ui.set_beta(n, beta, is_peak_hop)
108+
elif self.options.use_discrimination:
109+
# assumes 40/36 discrimination
110+
ui.set_discrimination(ufloat(v, e))
108111
else:
109112
if d == "rad40":
110113
iso = ui.get_isotope(name="Ar40")

pychron/processing/arar_age.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,23 @@ def set_sensitivity(self, sens):
339339
def set_temporary_uic_factor(self, k, refdet, uv):
340340
self.temporary_ic_factors[k] = uv
341341

342+
def set_discrimination(self, disc, is_peak_hop):
343+
# assume disc is a 4amu discrimination
344+
m40 = 39.9624
345+
m36 = 35.9675
346+
disc = disc/(m40-m36)
347+
for k, m in (("Ar40", m40), ("Ar39", 38.964),
348+
("Ar38", 37.9627), ("Ar37", 36.9668)):
349+
v = disc ** (m-m36)
350+
if is_peak_hop:
351+
iso = self.get_isotope(detector=k)
352+
else:
353+
iso = self.get_isotope(k)
354+
det = iso.detector
355+
356+
self.temporary_ic_factors[det] = {"reference_detector": k, "value": v}
357+
self.info("setting discrimination based ic factor={} to {}".format(det, v))
358+
342359
def set_beta(self, n, beta, is_peak_hop):
343360
"""
344361
this is a source discrimination correction and assumes detectors are already "perfectly" calibrated

0 commit comments

Comments
 (0)