diff --git a/gstlal-inspiral/python/stats/inspiral_lr.py b/gstlal-inspiral/python/stats/inspiral_lr.py index ce46e2aaebc6479ca02b2badd3f360d46279be25..a6a4b332f4896520b7548b18f44e7cc3000d1e55 100644 --- a/gstlal-inspiral/python/stats/inspiral_lr.py +++ b/gstlal-inspiral/python/stats/inspiral_lr.py @@ -293,9 +293,9 @@ class LnLRDensity(snglcoinc.LnLRDensity): class LnSignalDensity(LnLRDensity): def __init__(self, *args, **kwargs): population_model_file = kwargs.pop("population_model_file", None) + dtdphi_file = kwargs.pop("dtdphi_file", None) self.horizon_factors = kwargs.pop("horizon_factors", None) super(LnSignalDensity, self).__init__(*args, **kwargs) - # install SNR, chi^2 PDF (one for all instruments) self.densities = { "snr_chi": inspiral_extrinsics.NumeratorSNRCHIPDF(self.snr_chi_binning) @@ -305,11 +305,12 @@ class LnSignalDensity(LnLRDensity): # network self.horizon_history = horizonhistory.HorizonHistories((instrument, horizonhistory.NearestLeafTree()) for instrument in self.instruments) self.population_model_file = population_model_file - + self.dtdphi_file = dtdphi_file # source population model # FIXME: introduce a mechanism for selecting the file self.population_model = inspiral_intrinsics.SourcePopulationModel(self.template_ids, filename = self.population_model_file) - self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments) + if self.dtdphi_file is not None: + self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments, self.dtdphi_file) def set_horizon_factors(self, horizon_factors): self.horizon_factors = horizon_factors @@ -382,6 +383,10 @@ class LnSignalDensity(LnLRDensity): raise ValueError("incompatible mass model file names") if self.population_model_file is None and other.population_model_file is not None: self.population_model_file = other.population_model_file + if self.dtdphi_file is not None and other.dtdphi_file is not None and other.dtdphi_file != self.dtdphi_file: + raise ValueError("incompatible dtdphi files") + if self.dtdphi_file is None and other.dtdphi_file is not None: + self.dtdphi_file = other.dtdphi_file if self.horizon_factors is not None and other.horizon_factors is not None and other.horizon_factors != self.horizon_factors: # require that the horizon factors be the same within 1% for k in self.horizon_factors: @@ -399,6 +404,7 @@ class LnSignalDensity(LnLRDensity): new = super(LnSignalDensity, self).copy() new.horizon_history = self.horizon_history.copy() new.population_model_file = self.population_model_file + new.dtdphi_file = self.dtdphi_file # okay to use references because read-only data new.population_model = self.population_model new.InspiralExtrinsics = self.InspiralExtrinsics @@ -547,6 +553,7 @@ class LnSignalDensity(LnLRDensity): xml.appendChild(self.horizon_history.to_xml(u"horizon_history")) xml.appendChild(ligolw_param.Param.from_pyvalue(u"population_model_file", self.population_model_file)) xml.appendChild(ligolw_param.Param.from_pyvalue(u"horizon_factors", json.dumps(self.horizon_factors) if self.horizon_factors is not None else None)) + xml.appendChild(ligolw_param.Param.from_pyvalue(u"dtdphi_file", self.dtdphi_file)) return xml @classmethod @@ -555,6 +562,7 @@ class LnSignalDensity(LnLRDensity): self = super(LnSignalDensity, cls).from_xml(xml, name) self.horizon_history = horizonhistory.HorizonHistories.from_xml(xml, u"horizon_history") self.population_model_file = ligolw_param.get_pyvalue(xml, u"population_model_file") + self.dtdphi_file = ligolw_param.get_pyvalue(xml, u"dtdphi_file") self.horizon_factors = ligolw_param.get_pyvalue(xml, u"horizon_factors") if self.horizon_factors is not None: # FIXME, how do we properly decode the json, I assume something in ligolw can do this? @@ -563,7 +571,8 @@ class LnSignalDensity(LnLRDensity): self.horizon_factors = dict((int(k), v) for k, v in self.horizon_factors.items()) assert set(self.template_ids) == set(self.horizon_factors) self.population_model = inspiral_intrinsics.SourcePopulationModel(self.template_ids, filename = self.population_model_file) - self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments) + if self.dtdphi_file is not None: + self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments, self.dtdphi_file) return self