diff --git a/gstlal-inspiral/bin/gstlal_inspiral_create_p_of_ifos_given_horizon_dag b/gstlal-inspiral/bin/gstlal_inspiral_create_p_of_ifos_given_horizon_dag
new file mode 100644
index 0000000000000000000000000000000000000000..e68e77161e332fdf8078fc99965fb66213cfbf2e
--- /dev/null
+++ b/gstlal-inspiral/bin/gstlal_inspiral_create_p_of_ifos_given_horizon_dag
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2019 Leo Tsukdda
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+import os
+from gstlal import dagparts
+from gstlal.stats import inspiral_extrinsics, inspiral_lr
+import argparse
+
+parser = argparse.ArgumentParser(description = 'generate a dt dphi covariance matrix and tree data to replace share/inspiral_dtdphi_pdf.h5')
+parser.add_argument('--snr-thresh', type=float, default = inspiral_lr.LnLRDensity.snr_min, help = 'set the snr minimum to define found')
+# parser.add_argument('--output-file', default = 'p_of_instruments_given_H_d.h5', help = 'set the output hdf5 file. Default extparams.h5')
+parser.add_argument('--instruments', type=str, help='add instruments. Separate tham with comma, does not have to be alphabetical.', required = True)
+args = parser.parse_args()
+
+instruments = "".join(sorted(args.instruments.split(",")))
+
+try:
+	os.mkdir("logs")
+except:
+	pass
+dag = dagparts.DAG("p_of_I_%s" % instruments)
+
+margJob = dagparts.DAGJob("gstlal_inspiral_create_p_of_ifos_given_horizon", condor_commands = {"request_memory":"4GB", "want_graceful_removal":"True", "kill_sig":"15", "accounting_group":"ligo.prod.o3.cbc.uber.gstlaloffline"})
+addJob = dagparts.DAGJob("gstlal_inspiral_add_p_of_ifos_given_horizon", condor_commands = {"request_memory":"4GB", "want_graceful_removal":"True", "kill_sig":"15", "accounting_group":"ligo.prod.o3.cbc.uber.gstlaloffline"})
+
+
+num = 41
+margnodes = []
+for start in range(0, 41**(len(instruments) / 2 - 1), num):
+	stop = start + num
+	margnodes.append(dagparts.DAGNode(margJob, dag, parent_nodes = [], opts = {"start":str(start), "stop":str(stop), "instruments": args.instruments}, output_files = {"output-file":"%s/%s_p_of_instruments_given_H_d_%d_%d.h5" % (margJob.output_path, "".join(instruments), start, stop)}))
+
+addJob_input = []
+addJob_input.extend([n.output_files["output-file"] for n in margnodes])
+addnode = dagparts.DAGNode(addJob, dag, parent_nodes = margnodes, opts = {"": args.instruments}, input_files = {"": addJob_input})
+
+dag.write_sub_files()
+dag.write_dag()
+dag.write_script()
+dag.write_cache()
+