From e001c2a0253373bad3e2991c85c0c1d280fe4263 Mon Sep 17 00:00:00 2001
From: Duncan Meacher <duncan.meacher@ligo.org>
Date: Mon, 21 Nov 2016 18:41:01 -0800
Subject: [PATCH] Added Makefiles for O2

---
 gstlal-inspiral/share/O2/Makefile.O1_test_dag | 367 ++++++++
 .../share/O2/Makefile.O2_injection_gen        | 538 ++++++++++++
 .../share/O2/Makefile.O2_single_ifo_test_dag  | 248 ++++++
 .../share/O2/Makefile.offline_analysis_rules  |  29 -
 .../Makefile.ligosoftware_icc_gstreamer-1.0   | 783 ++++++++++++++++++
 5 files changed, 1936 insertions(+), 29 deletions(-)
 create mode 100644 gstlal-inspiral/share/O2/Makefile.O1_test_dag
 create mode 100644 gstlal-inspiral/share/O2/Makefile.O2_injection_gen
 create mode 100644 gstlal-inspiral/share/O2/Makefile.O2_single_ifo_test_dag
 delete mode 100644 gstlal-inspiral/share/O2/Makefile.offline_analysis_rules
 create mode 100644 gstlal-inspiral/share/O2/optimised/Makefile.ligosoftware_icc_gstreamer-1.0

diff --git a/gstlal-inspiral/share/O2/Makefile.O1_test_dag b/gstlal-inspiral/share/O2/Makefile.O1_test_dag
new file mode 100644
index 0000000000..540fcf01c6
--- /dev/null
+++ b/gstlal-inspiral/share/O2/Makefile.O1_test_dag
@@ -0,0 +1,367 @@
+# condor commands
+# Set the accounting tag from https://ldas-gridmon.ligo.caltech.edu/ldg_accounting/user
+ACCOUNTING_TAG=ligo.dev.o2.cbc.bbh.gstlaloffline
+GROUP_USER=duncan.meacher
+#CONDOR_COMMANDS:=--condor-command=accounting_group=$(ACCOUNTING_TAG) --condor-command=accounting_group_user=$(GROUP_USER)
+# Set requiremetn to run on Haswell, Broadwell, and Skylake nodes on cit
+CONDOR_COMMANDS:=--condor-command=accounting_group=$(ACCOUNTING_TAG) --condor-command=accounting_group_user=$(GROUP_USER) --condor-command='Requirements = regexp("Intel.*v[3-5]", TARGET.cpuinfo_model_name)'
+
+############################
+# Template bank parameters #
+############################
+
+# Note that these can can change if you modify the template bank program.
+# Waveform approximant
+APPROXIMANT = TaylorF2
+# Minimum component mass for the template bank
+MIN_MASS = 1.0
+# Maximum component mass for the template bank
+MAX_MASS = 2.0
+# Minimum total mass for the template bank
+MIN_TOTAL_MASS = 2.0
+# Maximum total mass for the template bank
+MAX_TOTAL_MASS = 4.0
+# Maximum symmetric mass ratio for the template bank
+MAX_ETA = 0.25
+# Minimum symmetric mass ratio for the template bank
+MIN_ETA = 0.2222
+# Low frequency cut off for the template bank placement
+LOW_FREQUENCY_CUTOFF = 30.0
+# High pass frequency to condition the data before measuring the psd for template placement
+HIGH_PASS_FREQ = 20.0
+# Highest frequency at which to compute the metric
+HIGH_FREQUENCY_CUTOFF = 1024.0
+# The sample rate at which to compute the template bank
+SAMPLE_RATE = 4096
+# The minimal match of the template bank; determines how much SNR is retained for signals "in between the bank points"
+MM = 0.975
+# The start time for reading the data for the bank
+#BANKSTART = 1126051317
+BANKSTART = 1127000000
+# The stop time for reading the data for the bank (Bank start + 2048s)
+#BANKSTOP = 1126053365
+BANKSTOP = 1127002048
+
+# Controls the number of templates in each SVD sub bank
+NUM_SPLIT_TEMPLATES = 180
+# Number of bins of chi to uniformly bin templates into
+NUM_CHI_BINS = 20
+# Controls the overlap from sub bank to sub bank - helps mitigate edge effects
+# in the SVD.  Redundant templates will be removed
+OVERLAP = 30
+MCHIRP_SPLIT = 1.73
+# The approximant that you wish to filter with for BANK_MCHIRP1 and BANK_MCHIRP2, respectively.
+APPROXIMANT1 = 0.00:$(MCHIRP_SPLIT):TaylorF2
+APPROXIMANT2 = $(MCHIRP_SPLIT):1000.0:SEOBNRv4_ROM
+
+#########################
+# Triggering parameters #
+#########################
+
+# The detectors to analyze
+IFOS = H1 L1 
+# The GPS start time for analysis (O1)
+START = 1127000000
+# The GPS end time for analysis (O1, start + 100000s)
+STOP = 1128000000
+# A user tag for the run
+TAG = test_dag
+# Run number
+RUN = run2_161121
+# A web directory for output
+# cit & uwm
+WEBDIR = ~/public_html/testing/$(TAG)/$(START)-$(STOP)-test_dag-$(RUN)
+# Atlas
+#WEBDIR = ~/WWW/LSC/testing/$(TAG)/$(START)-$(STOP)-test_dag-$(RUN)
+# The number of sub banks to process in parallel for each gstlal_inspiral job
+NUMBANKS = 5
+# The control peak time for the composite detection statistic.  If set to 0 the
+# statistic is disabled
+PEAK = 0
+# The length of autocorrelation chi-squared in sample points
+AC_LENGTH = 351
+# The minimum number of samples to include in a given time slice
+SAMPLES_MIN = 512
+# The maximum number of samples to include in the 256 Hz or above time slices
+SAMPLES_MAX_256 = 512
+
+#############################
+# additional options, e.g., #
+#############################
+
+#ADDITIONAL_DAG_OPTIONS = "--samples-min $(SAMPLES_MIN) --samples-max-256 $(SAMPLES_MAX_256) --blind-injections BNS-MDC1-WIDE.xml"
+ADDITIONAL_DAG_OPTIONS:=--samples-min $(SAMPLES_MIN) --samples-max-256 $(SAMPLES_MAX_256)
+
+##############
+# Injections #
+##############
+
+# Change as appropriate, whitespace is important
+MCHIRP_INJECTIONS := 0.5:100.0:1_injections.xml
+# Maximum injection distance in Mpc
+INJ_MAX_DIST = 500
+# Minimum component mass 1 for injections
+INJ_MIN_MASS1 = 1.35
+# Maximum component mass 1 for injections
+INJ_MAX_MASS1 = 1.45
+# Minimum component mass 2 for injections
+INJ_MIN_MASS2 = 1.35
+# Maximum component mass 2 for injections
+INJ_MAX_MASS2 = 1.45
+# Mean component mass 1 for injections
+INJ_MEAN_MASS1 = 1.4
+# Mean component mass 2 for injections
+INJ_MEAN_MASS2 = 1.4
+# Standard dev component mass 1 for injections
+INJ_STD_MASS1 = 0.01
+# Standard dev component mass 2 for injections
+INJ_STD_MASS2 = 0.01
+# Minimum total mass for injections
+INJ_MIN_TOTAL_MASS = 2.7
+# Maximum total mass for injections
+INJ_MAX_TOTAL_MASS = 2.9
+# minimum frequency for injections. NOTE this should be lower than the intended filtering frequency
+INJ_FLOW = 25
+# Injection distances
+INJ_MIN_DIST = 20000
+INJ_MAX_DIST = 180000
+
+# GSTLAL_SEGMENTS Options
+SEG_SERVER=https://segments.ligo.org
+LIGO_SEGMENTS="$*:DCS-ANALYSIS_READY_C02:1"
+SEGMENT_TRIM = 16
+SEGMENT_MIN_LENGTH = 512
+
+#GSTLAL VETO Options
+
+# Vetoes file names
+# Obtain veto definer from here: https://code.pycbc.phy.syr.edu/detchar/veto-definitions/tree/master/cbc/ER8
+#VETODEF = $(HOME)/local/src/gstlal/gstlal-inspiral/share/O1/H1L1-CBC_VETO_DEFINER_C02_O1_1126051217-11203200.xml
+VETODEF = H1L1-CBC_VETO_DEFINER_C02_O1_1126051217-11203200.xml
+vetoes_suffix := _vetoes.xml
+VETOES_FILES  := $(addsuffix $(vetoes_suffix),$(IFOS))
+
+LIGO_VETOES="$*:DMT-INJECTION"
+
+###############################
+# Segment and frame type info #
+###############################
+
+# The LIGO frame types
+HANFORD_FRAME_TYPE='H1_HOFT_C02'
+LIVINGSTON_FRAME_TYPE='L1_HOFT_C02'
+
+# The Channel names. FIXME sadly you have to change the CHANNEL_NAMES string if
+# you want to analyze a different set of IFOS
+H1_CHANNEL=DCS-CALIB_STRAIN_C02
+L1_CHANNEL=DCS-CALIB_STRAIN_C02
+CHANNEL_NAMES:=--channel-name=H1=$(H1_CHANNEL) --channel-name=L1=$(L1_CHANNEL)
+
+#######################################################
+# Set ranges and times for reference likelihood files #
+# #######################################################
+
+# NOTE needed to make 10000s duration to get sufficient zero lag triggers
+H1PRIORSTART=$(shell python -c "print $(shell lalapps_tconvert)-15000")
+H1PRIORSTOP=$(shell python -c "print $(shell lalapps_tconvert)-5000")
+L1PRIORSTART=$(shell python -c "print $(shell lalapps_tconvert)-10000")
+L1PRIORSTOP=$(shell python -c "print $(shell lalapps_tconvert)")
+H1PRIORRANGE=60
+L1PRIORRANGE=60
+
+###################################################################################
+# Get some basic definitions.  NOTE this comes from the share directory probably. #
+###################################################################################
+
+include Makefile.offline_analysis_rules_O2
+
+############
+# Workflow #
+############
+
+all : dag
+
+## Making the master template bank
+H1-TMPLTBANK-$(START)-2048.xml: H1_frame.cache
+	lalapps_tmpltbank \
+		--disable-compute-moments \
+		--grid-spacing Hexagonal \
+		--dynamic-range-exponent 69.0 \
+		--enable-high-pass $(HIGH_PASS_FREQ) \
+		--high-pass-order 8 \
+		--strain-high-pass-order 8 \
+		--minimum-mass $(MIN_MASS) \
+		--maximum-mass $(MAX_MASS) \
+		--min-total-mass $(MIN_TOTAL_MASS) \
+		--max-total-mass $(MAX_TOTAL_MASS) \
+		--max-eta $(MAX_ETA) \
+		--min-eta $(MIN_ETA) \
+		--gps-start-time $(BANKSTART) \
+		--gps-end-time $(BANKSTOP) \
+		--calibrated-data real_8 \
+		--channel-name H1:DCS-CALIB_STRAIN_C02 \
+		--space Tau0Tau3 \
+		--number-of-segments 15 \
+		--minimal-match $(MM) \
+		--high-pass-attenuation 0.1 \
+		--min-high-freq-cutoff ERD \
+		--segment-length 1048576 \
+		--low-frequency-cutoff $(LOW_FREQUENCY_CUTOFF) \
+		--pad-data 8 \
+		--num-freq-cutoffs 1 \
+		--sample-rate $(SAMPLE_RATE) \
+		--high-frequency-cutoff $(HIGH_FREQUENCY_CUTOFF) \
+		--resample-filter ldas \
+		--strain-high-pass-atten 0.1 \
+		--strain-high-pass-freq $(HIGH_PASS_FREQ) \
+		--frame-cache H1_frame.cache \
+		--max-high-freq-cutoff ERD \
+		--approximant $(APPROXIMANT) \
+		--order twoPN \
+		--spectrum-type median \
+		--verbose
+
+%_split_bank.cache : H1-TMPLTBANK-$(START)-2048.xml
+	mkdir -p $*_split_bank
+	gstlal_bank_splitter \
+		--f-low $(LOW_FREQUENCY_CUTOFF) \
+		--group-by-chi $(NUM_CHI_BINS) \
+		--output-path $*_split_bank \
+		--approximant $(APPROXIMANT1) \
+		--approximant $(APPROXIMANT2) \
+		--output-cache $@ \
+		--overlap $(OVERLAP) \
+		--instrument $* \
+		--n $(NUM_SPLIT_TEMPLATES) \
+		--sort-by mchirp \
+		--max-f-final $(HIGH_FREQUENCY_CUTOFF) \
+		$<
+
+plots :
+	mkdir plots
+
+$(WEBDIR) : $(MAKEFILE_LIST)
+	mkdir -p $(WEBDIR)/OPEN-BOX
+	cp $(MAKEFILE_LIST) $@
+
+tisi.xml : inj_tisi.xml
+	lalapps_gen_timeslides --instrument=H1=0:0:0 --instrument=L1=25.13274:25.13274:25.13274 bg_tisi.xml
+	ligolw_add --output $@ bg_tisi.xml $<
+
+inj_tisi.xml :
+	lalapps_gen_timeslides --instrument=H1=0:0:0 --instrument=L1=0:0:0 $@
+
+dag : segments.xml.gz vetoes.xml.gz frame.cache inj_tisi.xml tisi.xml plots $(WEBDIR) $(INJECTIONS) $(BANK_CACHE_FILES) reference_likelihood_file.xml.gz
+	gstlal_inspiral_pipe \
+		--data-source frames \
+		--gps-start-time $(START) \
+		--gps-end-time $(STOP) \
+		--frame-cache frame.cache \
+		--frame-segments-file segments.xml.gz \
+		--vetoes vetoes.xml.gz \
+		--frame-segments-name datasegments  \
+		--control-peak-time $(PEAK) \
+		--num-banks $(NUMBANKS) \
+		--fir-stride 1 \
+		--web-dir $(WEBDIR) \
+		--time-slide-file tisi.xml \
+		--inj-time-slide-file inj_tisi.xml $(INJECTION_LIST) \
+		--bank-cache $(BANK_CACHE_STRING) \
+		--tolerance 0.9999 \
+		--overlap $(OVERLAP) \
+		--flow $(LOW_FREQUENCY_CUTOFF) \
+		$(CHANNEL_NAMES) \
+		--autocorrelation-length $(AC_LENGTH) \
+		--ht-gate-threshold-linear 0.8:12.0-45.0:100.0 \
+		$(ADDITIONAL_DAG_OPTIONS) \
+		$(CONDOR_COMMANDS) \
+		--singles-threshold 100.0 \
+		--request-cpu 2 \
+		--request-memory 7GB \
+		--min-log-L 4. \
+		--min-instruments 1 \
+		--reference-likelihood-file reference_likelihood_file.xml.gz
+	sed -i '1s/^/JOBSTATE_LOG logs\/trigger_pipe.jobstate.log\n/' trigger_pipe.dag
+
+H1_frame.cache:
+	# FIXME force the observatory column to actually be instrument
+	gw_data_find -o H -t $(HANFORD_FRAME_TYPE) -l  -s $(START) -e $(STOP) --url-type file | awk '{ print $$1" $*_"$$2" "$$3" "$$4" "$$5}' > $@
+
+L1_frame.cache:
+	# FIXME force the observatory column to actually be instrument
+	gw_data_find -o L -t $(LIVINGSTON_FRAME_TYPE) -l  -s $(START) -e $(STOP) --url-type file | awk '{ print $$1" $*_"$$2" "$$3" "$$4" "$$5}' > $@
+
+frame.cache: $(FRAME_CACHE_FILES)
+	cat $(FRAME_CACHE_FILES) > frame.cache
+	#FIXME: since these frame types were made incorrectly, make sure ligolw_path_to_cache
+	#       reads ifo names properly
+	sed -i s/H\ $(LIGO_FRAME_TYPE)/H\ H1_$(LIGO_FRAME_TYPE)/g frame.cache
+	sed -i s/L\ $(LIGO_FRAME_TYPE)/L\ L1_$(LIGO_FRAME_TYPE)/g frame.cache
+
+%_segmentspadded.xml:
+	ligolw_segment_query_dqsegdb --segment-url=${SEG_SERVER} -q --gps-start-time ${START} --gps-end-time ${STOP} --include-segments=$(LIGO_SEGMENTS) --result-name=datasegments > $@
+
+segments.xml.gz: $(SEGMENTS_FILES) frame.cache
+	# These segments come from the MDC set	
+	ligolw_add --output segdb.xml $(SEGMENTS_FILES)
+	ligolw_cut --delete-column segment:segment_def_cdb --delete-column segment:creator_db --delete-column segment_definer:insertion_time segdb.xml
+	gstlal_cache_to_segments frame.cache nogaps.xml
+	gstlal_segments_operations --segment-file1 segdb.xml --segment-file2 nogaps.xml --intersection --output-file $@
+	gstlal_segments_trim --trim $(SEGMENT_TRIM) --gps-start-time $(START) --gps-end-time $(STOP) --min-length $(SEGMENT_MIN_LENGTH) --output $@ $@
+
+%_vetoes.xml: $(VETODEF)
+	ligolw_segments_from_cats_dqsegdb --segment-url=$(SEG_SERVER) --veto-file=$(VETODEF) --gps-start-time $(START) --gps-end-time $(STOP) --cumulative-categories
+	gstlal_segments_operations --union --segment-file1 $*-VETOTIME_CAT3-*.xml --segment-name1 VETO_CAT3_CUMULATIVE --segment-file2 $*-VETOTIME_CAT3-*.xml --segment-name2 VETO_CAT3_CUMULATIVE  --output-file $@ --output-segment-name vetoes
+
+vetoes.xml.gz: $(VETOES_FILES)
+	ligolw_add --output $@ $(VETOES_FILES)
+	ligolw_cut --delete-column segment:segment_def_cdb --delete-column segment:creator_db --delete-column segment_definer:insertion_time $@
+	gzip $@
+
+reference_likelihood_file.xml.gz:
+	gstlal_ll_inspiral_create_prior_diststats \
+		--segment-and-horizon=H1:$(H1PRIORSTART):$(H1PRIORSTOP):$(H1PRIORRANGE) \
+		--segment-and-horizon=L1:$(L1PRIORSTART):$(L1PRIORSTOP):$(L1PRIORRANGE) \
+		--write-likelihood-basename $@ \
+		--num-templates 1000 \
+		--min-instruments 1 \
+		--verbose
+
+1_injections.xml :
+	lalapps_inspinj \
+		--m-distr gaussian \
+		--min-mass1 $(INJ_MIN_MASS1) \
+		--max-mass1 $(INJ_MAX_MASS1) \
+		--min-mass2 $(INJ_MIN_MASS2) \
+		--max-mass2 $(INJ_MAX_MASS2) \
+		--min-mtotal $(INJ_MIN_TOTAL_MASS) \
+		--max-mtotal $(INJ_MAX_TOTAL_MASS) \
+		--mean-mass1 $(INJ_MEAN_MASS1) \
+		--mean-mass2 $(INJ_MEAN_MASS2) \
+		--stdev-mass1 $(INJ_STD_MASS1) \
+		--stdev-mass2 $(INJ_STD_MASS2) \
+		--gps-start-time $(START) \
+		--gps-end-time $(STOP) \
+		--disable-spin \
+		--d-distr uniform \
+		--i-distr uniform \
+		--min-distance $(INJ_MIN_DIST) \
+		--max-distance $(INJ_MAX_DIST) \
+		--waveform TaylorT4threePointFivePN \
+		--l-distr random \
+		--f-lower $(INJ_FLOW) \
+		--time-step 20 \
+		--t-distr uniform \
+		--time-interval 3 \
+		--seed 51056 \
+		--output $@
+
+clean:
+	-rm -rvf *.sub *.dag* *.cache *.sh logs *.sqlite plots *.html Images *.css *.js
+	-rm -rvf lalapps_run_sqlite/ ligolw_* gstlal_*
+	-rm -vf segments.xml.gz tisi.xml H1-*.xml H1_*.xml L1-*.xml L1_*xml V1-*.xml V1_*xml ?_injections.xml ????-*_split_bank-*.xml vetoes.xml.gz
+	-rm -vf *marginalized*.xml.gz *-ALL_LLOID*.xml.gz
+	-rm -vf tisi0.xml tisi1.xml
+	-rm -rf *_split_bank*
+	-rm -rf nogaps.xml segdb.xml
+	-rm -rf bank_aligned_spin.xml.gz
diff --git a/gstlal-inspiral/share/O2/Makefile.O2_injection_gen b/gstlal-inspiral/share/O2/Makefile.O2_injection_gen
new file mode 100644
index 0000000000..54e10e319f
--- /dev/null
+++ b/gstlal-inspiral/share/O2/Makefile.O2_injection_gen
@@ -0,0 +1,538 @@
+
+#ER10
+#START = 1161957376
+#STOP = 1162957376 # 1000000 seconds
+
+# O1 chunk 1
+START = 1126051217
+STOP = 1127271617
+
+# One injection every 100s with 25s window
+TIME_STEP = 100
+TIME_INT = 1
+
+# 100 / 13 ~ 7 (7.7)
+DT = 7 # Must be int
+
+START_01 = $(shell echo $$(( $(START) + $(DT) )) )
+START_02 = $(shell echo $$(( $(START_01) + $(DT) )) )
+START_03 = $(shell echo $$(( $(START_02) + $(DT) )) )
+START_04 = $(shell echo $$(( $(START_03) + $(DT) )) )
+START_05 = $(shell echo $$(( $(START_04) + $(DT) )) )
+START_06 = $(shell echo $$(( $(START_05) + $(DT) )) )
+START_07 = $(shell echo $$(( $(START_06) + $(DT) )) )
+START_08 = $(shell echo $$(( $(START_07) + $(DT) )) )
+START_09 = $(shell echo $$(( $(START_08) + $(DT) )) )
+START_10 = $(shell echo $$(( $(START_09) + $(DT) )) )
+START_11 = $(shell echo $$(( $(START_10) + $(DT) )) )
+START_12 = $(shell echo $$(( $(START_11) + $(DT) )) )
+START_13 = $(shell echo $$(( $(START_12) + $(DT) )) )
+
+# all-injections (except imbh for distance)
+# Choose injections according to the (1.4-1.4) chirp-weighted distance. Inject uniformly between 30 and 300 Mpc
+MIN_DIST = 5000  # 5 Mpc
+MAX_DIST = 300000 # 300 Mpc
+
+# IMBH distance
+MIN_DIST_IMBH = 30000  # 30 Mpc
+MAX_DIST_IMBH = 7500000 # 7.5 Gpc
+
+# Injection generation starts at 15Hz
+F_LOWER = 15
+
+# Random seed is needed in all cases, but must be unique
+SEED_01 = 72338
+SEED_02 = 92456
+SEED_03 = 98247
+SEED_04 = 32582
+SEED_05 = 84522
+SEED_06 = 24529
+SEED_07 = 52780
+SEED_08 = 90245
+SEED_09 = 52872
+SEED_10 = 14083
+SEED_11 = 28452
+SEED_12 = 20137
+SEED_13 = 23509
+
+# BNS 1
+# bns-injection-1
+BNS_INJECTION_1 = bns_inj_1.xml
+BNS_WF_1 = SpinTaylorT2threePointFivePN
+
+# BNS 2
+# bns-injection-2
+BNS_INJECTION_2 = bns_inj_2.xml
+BNS_WF_2 = SpinTaylorT4threePointFivePN
+
+# NSBH 1
+# nsbh-template-bank-aligned-injections
+NSBH_INJECTION_1 = nsbh_inj_1.xml
+NSBH_WF_1 = SEOBNRv4pseudoFourPN
+
+# NSBH 2
+# nsbh-aligned-other-imr-injections
+NSBH_INJECTION_2 = nsbh_inj_2.xml
+NSBH_WF_2 = IMRPhenomDpseudoFourPN
+
+# NSBH 3
+# nsbh-precessing-inspiral-only-injections
+NSBH_INJECTION_3 = nsbh_inj_3.xml
+NSBH_WF_3 = SpinTaylorT4threePointFivePN
+
+# NSBH 4
+# nsbh-imr-precessing-approxone-injections
+NSBH_INJECTION_4 = nsbh_inj_4.xml
+NSBH_WF_4 = SEOBNRv3_optpseudoFourPN
+
+# BBH 1
+# bbh-aligned-injections
+BBH_INJECTION_1 = bbh_inj_1.xml
+BBH_WF_1 = SEOBNRv4pseudoFourPN
+
+# BBH 2
+# bbh-aligned-otherapprox-injections
+BBH_INJECTION_2 = bbh_inj_2.xml
+BBH_WF_2 = IMRPhenomDpseudoFourPN
+
+# BBH 3
+# bbh-precessing-injections
+BBH_INJECTION_3 = bbh_inj_3.xml
+BBH_WF_3 = SEOBNRv3_optpseudoFourPN
+
+# IMBH 1
+# imbh-aligned-injections
+IMBH_INJECTION_1 = imbh_inj_1.xml
+IMBH_WF_1 = SEOBNRv4pseudoFourPN
+
+# IMBH 2
+# imbh-aligned-otherapprox-injections
+IMBH_INJECTION_2 = imbh_inj_2.xml
+IMBH_WF_2 = IMRPhenomDpseudoFourPN
+
+# IMBH 3
+# imbh-precessing-injections
+IMBH_INJECTION_3 = imbh_inj_3.xml
+IMBH_WF_3 = SEOBNRv3_optpseudoFourPN
+
+# IMBH 4
+# imbh-higherordermode-injections
+IMBH_INJECTION_4 = imbh_inj_4.xml
+IMBH_WF_4 = EOBNRv2HMpseudoFourPN
+
+all : split
+
+split : $(BNS_INJECTION_1) $(BNS_INJECTION_2) $(NSBH_INJECTION_1) $(NSBH_INJECTION_2) $(NSBH_INJECTION_3) $(NSBH_INJECTION_4) $(BBH_INJECTION_1) $(BBH_INJECTION_2) $(BBH_INJECTION_3) $(IMBH_INJECTION_1) $(IMBH_INJECTION_2) $(IMBH_INJECTION_3) $(IMBH_INJECTION_4)
+	gstlal_inspiral_split_injections $^ -r 0.065
+
+# BNS 1
+$(BNS_INJECTION_1) :
+	lalapps_inspinj \
+		--m-distr componentMass \
+		--min-mass1 1 \
+		--max-mass1 3 \
+		--min-mass2 1 \
+		--max-mass2 3 \
+		--min-mtotal 2 \
+		--max-mtotal 6 \
+		--gps-start-time $(START_01) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--min-spin1 0 \
+		--max-spin1 0.4 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(BNS_WF_1) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection startend \
+		--seed $(SEED_01) \
+		--output $@
+
+# BNS 2
+$(BNS_INJECTION_2) :
+	lalapps_inspinj \
+		--m-distr componentMass \
+		--min-mass1 1 \
+		--max-mass1 3 \
+		--min-mass2 1 \
+		--max-mass2 3 \
+		--min-mtotal 2 \
+		--max-mtotal 6 \
+		--gps-start-time $(START_02) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--min-spin1 0 \
+		--max-spin1 0.4 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(BNS_WF_2) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection startend \
+		--seed $(SEED_02) \
+		--output $@
+
+# NSBH 1
+$(NSBH_INJECTION_1) :
+	lalapps_inspinj \
+		--m-distr    componentMass \
+		--min-mass1  2 \
+		--max-mass1  97 \
+		--min-mass2  1 \
+		--max-mass2  3 \
+		--min-mtotal 3 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_03) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.998 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(NSBH_WF_1) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_03) \
+		--output $@
+
+# NSBH 2
+$(NSBH_INJECTION_2) :
+	lalapps_inspinj \
+		--m-distr    componentMass \
+		--min-mass1  2 \
+		--max-mass1  97 \
+		--min-mass2  1 \
+		--max-mass2  3 \
+		--min-mtotal 3 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_04) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.85 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(NSBH_WF_2) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_04) \
+		--output $@
+ 
+# NSBH 3
+$(NSBH_INJECTION_3) :
+	lalapps_inspinj \
+		--m-distr    componentMass \
+		--min-mass1  2 \
+		--max-mass1  16 \
+		--min-mass2  1 \
+		--max-mass2  3 \
+		--min-mtotal 3 \
+		--max-mtotal 19 \
+		--gps-start-time $(START_05) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--min-spin1 0 \
+		--max-spin1 0.998 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(NSBH_WF_3) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection startend \
+		--seed $(SEED_05) \
+		--output $@
+
+# NSBH 4
+$(NSBH_INJECTION_4) :
+	lalapps_inspinj \
+		--m-distr    componentMass \
+		--min-mass1  2 \
+		--max-mass1  97 \
+		--min-mass2  1 \
+		--max-mass2  3 \
+		--min-mtotal 3 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_06) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.9899 \
+		--min-spin2 0 \
+		--max-spin2 0.4 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(NSBH_WF_4) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_06) \
+		--output $@
+
+# BBH 1
+$(BBH_INJECTION_1) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  2 \
+		--max-mass1  98 \
+		--min-mass2  2 \
+		--max-mass2  98 \
+		--min-mtotal 4 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_07) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.998 \
+		--min-spin2 0 \
+		--max-spin2 0.998 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(BBH_WF_1) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_07) \
+		--output $@
+
+# BBH 2
+$(BBH_INJECTION_2) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  2 \
+		--max-mass1  98 \
+		--min-mass2  2 \
+		--max-mass2  98 \
+		--min-mtotal 4 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_08) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.85 \
+		--min-spin2 0 \
+		--max-spin2 0.85 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(BBH_WF_2) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_08) \
+		--output $@
+
+# BBH 3
+$(BBH_INJECTION_3) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  2 \
+		--max-mass1  98 \
+		--min-mass2  2 \
+		--max-mass2  98 \
+		--min-mtotal 4 \
+		--max-mtotal 100 \
+		--gps-start-time $(START_09) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.9899 \
+		--min-spin2 0 \
+		--max-spin2 0.9899 \
+		--dchirp-distr uniform \
+		--min-distance $(MIN_DIST) \
+		--max-distance $(MAX_DIST) \
+		--waveform $(BBH_WF_3) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_09) \
+		--output $@
+
+# IMBH 1
+$(IMBH_INJECTION_1) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  50 \
+		--max-mass1  550 \
+		--min-mass2  50 \
+		--max-mass2  550 \
+		--min-mtotal 100 \
+		--max-mtotal 600 \
+		--gps-start-time $(START_10) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.998 \
+		--min-spin2 0 \
+		--max-spin2 0.998 \
+		--d-distr uniform \
+		--min-distance $(MIN_DIST_IMBH) \
+		--max-distance $(MAX_DIST_IMBH) \
+		--waveform $(IMBH_WF_1) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_10) \
+		--output $@
+
+# IMBH 2
+$(IMBH_INJECTION_2) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  50 \
+		--max-mass1  550 \
+		--min-mass2  50 \
+		--max-mass2  550 \
+		--min-mtotal 100 \
+		--max-mtotal 600 \
+		--gps-start-time $(START_11) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.85 \
+		--min-spin2 0 \
+		--max-spin2 0.85 \
+		--d-distr uniform \
+		--min-distance $(MIN_DIST_IMBH) \
+		--max-distance $(MAX_DIST_IMBH) \
+		--waveform $(IMBH_WF_2) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_11) \
+		--output $@
+
+# IMBH 3
+$(IMBH_INJECTION_3) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  50 \
+		--max-mass1  550 \
+		--min-mass2  50 \
+		--max-mass2  550 \
+		--min-mtotal 100 \
+		--max-mtotal 600 \
+		--gps-start-time $(START_12) \
+		--gps-end-time $(STOP) \
+		--enable-spin \
+		--aligned \
+		--min-spin1 0 \
+		--max-spin1 0.9899 \
+		--min-spin2 0 \
+		--max-spin2 0.9899 \
+		--d-distr uniform \
+		--min-distance $(MIN_DIST_IMBH) \
+		--max-distance $(MAX_DIST_IMBH) \
+		--waveform $(IMBH_WF_3) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_12) \
+		--output $@
+
+# IMBH 4
+$(IMBH_INJECTION_4) :
+	lalapps_inspinj \
+		--m-distr    totalMass \
+		--min-mass1  50 \
+		--max-mass1  550 \
+		--min-mass2  50 \
+		--max-mass2  550 \
+		--min-mtotal 100 \
+		--max-mtotal 600 \
+		--gps-start-time $(START_13) \
+		--gps-end-time $(STOP) \
+		--disable-spin \
+		--d-distr uniform \
+		--min-distance $(MIN_DIST_IMBH) \
+		--max-distance $(MAX_DIST_IMBH) \
+		--waveform $(IMBH_WF_3) \
+		--f-lower $(F_LOWER) \
+		--i-distr uniform \
+		--l-distr random \
+		--t-distr uniform \
+		--time-step $(TIME_STEP) \
+		--time-interval $(TIME_INT) \
+		--taper-injection start \
+		--seed $(SEED_13) \
+		--output $@
+
+clean :
+	rm $(BNS_INJECTION_1) $(BNS_INJECTION_2) $(NSBH_INJECTION_1) $(NSBH_INJECTION_2) $(NSBH_INJECTION_3) $(NSBH_INJECTION_4) $(BBH_INJECTION_1) $(BBH_INJECTION_2) $(BBH_INJECTION_3) $(IMBH_INJECTION_1) $(IMBH_INJECTION_2) $(IMBH_INJECTION_3) $(IMBH_INJECTION_4)
+
diff --git a/gstlal-inspiral/share/O2/Makefile.O2_single_ifo_test_dag b/gstlal-inspiral/share/O2/Makefile.O2_single_ifo_test_dag
new file mode 100644
index 0000000000..2aa55c468d
--- /dev/null
+++ b/gstlal-inspiral/share/O2/Makefile.O2_single_ifo_test_dag
@@ -0,0 +1,248 @@
+# condor commands
+# Set the accounting tag from https://ldas-gridmon.ligo.caltech.edu/ldg_accounting/user
+ACCOUNTING_TAG=ligo.dev.o2.cbc.bbh.gstlaloffline
+GROUP_USER=duncan.meacher
+#CONDOR_COMMANDS:=--condor-command=accounting_group=$(ACCOUNTING_TAG) --condor-command=accounting_group_user=$(GROUP_USER)
+CONDOR_COMMANDS:=--condor-command=accounting_group=$(ACCOUNTING_TAG) --condor-command=accounting_group_user=$(GROUP_USER) --condor-command='Requirements=TARGET.cpuinfo_vendor_id=="GenuineIntel"'
+
+############################
+# Template bank parameters #
+############################
+
+# The filtering start frequency
+LOW_FREQUENCY_CUTOFF = 15.0
+# The maximum frequency to filter to
+HIGH_FREQUENCY_CUTOFF = 1024.0
+# Controls the number of templates in each SVD sub bank
+NUM_SPLIT_TEMPLATES = 500
+# Number of bins of chi to uniformly bin templates into
+NUM_CHI_BINS = 20
+# Controls the overlap from sub bank to sub bank - helps mitigate edge effects
+# in the SVD.  Redundant templates will be removed
+OVERLAP = 50
+BANKORIGIN = /home/gstlalcbctest/engineering/10/bank/gstlal_bank.xml.gz
+# The location of the original full bank is on Atlas: /home/tito/er8/bank/H1L1-UBERBANK_MAXM100_NS0p05_ER8HMPSD-1126033217-223200.xml.gz
+MCHIRP_SPLIT = 1.73
+# The approximant that you wish to filter with for BANK_MCHIRP1 and BANK_MCHIRP2, respectively.
+APPROXIMANT1 = 0.00:$(MCHIRP_SPLIT):TaylorF2
+APPROXIMANT2 = $(MCHIRP_SPLIT):1000.0:SEOBNRv4_ROM
+
+#########################
+# Triggering parameters #
+#########################
+
+# The detectors to analyze
+IFOS = H1 L1 
+# The GPS start time for analysis (O1)
+START = 1126051217
+# The GPS end time for analysis (O1, start + 100000s)
+STOP = 1127271617
+# A user tag for the run
+TAG = test_dag
+# Run number
+RUN = run1
+# A web directory for output
+WEBDIR = /home/gstlalcbc/public_html/testing/ER10/O1_chunk1_run1_161117
+# The number of sub banks to process in parallel for each gstlal_inspiral job
+NUMBANKS = 5
+# The control peak time for the composite detection statistic.  If set to 0 the
+# statistic is disabled
+PEAK = 0
+# The length of autocorrelation chi-squared in sample points
+AC_LENGTH = 351
+# The minimum number of samples to include in a given time slice
+SAMPLES_MIN = 2048
+# The maximum number of samples to include in the 256 Hz or above time slices
+SAMPLES_MAX_256 = 2048
+
+#############################
+# additional options, e.g., #
+#############################
+
+#ADDITIONAL_DAG_OPTIONS = "--samples-min $(SAMPLES_MIN) --samples-max-256 $(SAMPLES_MAX_256) --blind-injections BNS-MDC1-WIDE.xml"
+ADDITIONAL_DAG_OPTIONS:=--samples-min $(SAMPLES_MIN) --samples-max-256 $(SAMPLES_MAX_256)
+
+##############
+# Injections #
+##############
+
+# The seed is the string before the suffix _injections.xml
+# Change as appropriate, whitespace is important
+#INJECTIONS := 1_injections.xml
+MCHIRP_INJECTIONS := 0.57:13.14:split_injections_0000.xml 5.00:521.90:split_injections_0001.xml
+
+# GSTLAL_SEGMENTS Options
+SEG_SERVER=https://segments.ligo.org
+LIGO_SEGMENTS="$*:DCS-ANALYSIS_READY_C02:1"
+SEGMENT_TRIM = 16
+SEGMENT_MIN_LENGTH = 512
+
+#GSTLAL VETO Options
+
+# Vetoes file names
+# Obtain veto definer from here: https://code.pycbc.phy.syr.edu/detchar/veto-definitions/tree/master/cbc/ER8
+VETODEF = H1L1-CBC_VETO_DEFINER_C02_O1_1126051217-11203200.xml
+vetoes_suffix := _vetoes.xml
+VETOES_FILES  := $(addsuffix $(vetoes_suffix),$(IFOS))
+
+LIGO_VETOES="$*:DMT-INJECTION"
+
+###############################
+# Segment and frame type info #
+###############################
+
+# The LIGO frame types
+HANFORD_FRAME_TYPE='H1_HOFT_C02'
+LIVINGSTON_FRAME_TYPE='L1_HOFT_C02'
+
+# The Channel names. FIXME sadly you have to change the CHANNEL_NAMES string if
+# you want to analyze a different set of IFOS
+H1_CHANNEL=DCS-CALIB_STRAIN_C02
+L1_CHANNEL=DCS-CALIB_STRAIN_C02
+CHANNEL_NAMES:=--channel-name=H1=$(H1_CHANNEL) --channel-name=L1=$(L1_CHANNEL)
+
+#######################################################
+# Set ranges and times for reference likelihood files #
+#######################################################
+
+# NOTE needed to make 10000s duration to get sufficient zero lag triggers
+H1PRIORSTART=$(shell python -c "print $(shell lalapps_tconvert)-15000")
+H1PRIORSTOP=$(shell python -c "print $(shell lalapps_tconvert)-5000")
+L1PRIORSTART=$(shell python -c "print $(shell lalapps_tconvert)-10000")
+L1PRIORSTOP=$(shell python -c "print $(shell lalapps_tconvert)")
+H1PRIORRANGE=60
+L1PRIORRANGE=60
+
+
+###################################################################################
+# Get some basic definitions.  NOTE this comes from the share directory probably. #
+###################################################################################
+
+include Makefile.offline_analysis_rules
+
+############
+# Workflow #
+############
+
+all : dag
+
+BANK = $(notdir $(BANKORIGIN))
+
+$(BANK):
+	gsiscp ldas-grid.ligo.caltech.edu:/home/gstlalcbctest/engineering/10/bank/gstlal_bank.xml.gz $@
+
+%_split_bank.cache : $(BANK)
+	mkdir -p $*_split_bank
+	gstlal_bank_splitter \
+		--f-low $(LOW_FREQUENCY_CUTOFF) \
+		--group-by-chi $(NUM_CHI_BINS) \
+		--output-path $*_split_bank \
+		--approximant $(APPROXIMANT1) \
+		--approximant $(APPROXIMANT2) \
+		--output-cache $@ \
+		--overlap $(OVERLAP) \
+		--instrument $* \
+		--n $(NUM_SPLIT_TEMPLATES) \
+		--sort-by mchirp \
+		--max-f-final $(HIGH_FREQUENCY_CUTOFF) \
+		$(BANK)
+
+plots :
+	mkdir plots
+
+$(WEBDIR) : $(MAKEFILE_LIST)
+	mkdir -p $(WEBDIR)/OPEN-BOX
+	cp $(MAKEFILE_LIST) $@
+
+tisi.xml : inj_tisi.xml
+	lalapps_gen_timeslides --instrument=H1=0:0:0 --instrument=L1=25.13274:25.13274:25.13274 bg_tisi.xml
+	ligolw_add --output $@ bg_tisi.xml $<
+
+inj_tisi.xml :
+	lalapps_gen_timeslides --instrument=H1=0:0:0 --instrument=L1=0:0:0 $@
+
+dag : segments.xml.gz vetoes.xml.gz frame.cache inj_tisi.xml tisi.xml plots $(WEBDIR) $(INJECTIONS) $(BANK_CACHE_FILES) reference_likelihood_file.xml.gz
+	gstlal_inspiral_pipe \
+		--data-source frames \
+		--gps-start-time $(START) \
+		--gps-end-time $(STOP) \
+		--frame-cache frame.cache \
+		--frame-segments-file segments.xml.gz \
+		--vetoes vetoes.xml.gz \
+		--frame-segments-name datasegments  \
+		--control-peak-time $(PEAK) \
+		--num-banks $(NUMBANKS) \
+		--fir-stride 1 \
+		--web-dir $(WEBDIR) \
+		--time-slide-file tisi.xml \
+		--inj-time-slide-file inj_tisi.xml $(INJECTION_LIST) \
+		--bank-cache $(BANK_CACHE_STRING) \
+		--tolerance 0.9999 \
+		--overlap $(OVERLAP) \
+		--flow $(LOW_FREQUENCY_CUTOFF) \
+		$(CHANNEL_NAMES) \
+		--autocorrelation-length $(AC_LENGTH) \
+		--ht-gate-threshold-linear 0.8:12.0-45.0:100.0 \
+		$(ADDITIONAL_DAG_OPTIONS) \
+		$(CONDOR_COMMANDS) \
+		--singles-threshold 100.0 \
+		--request-cpu 2 \
+		--request-memory 7GB \
+		--min-log-L 2. \
+		--min-instruments 1 \
+		--reference-likelihood-file reference_likelihood_file.xml.gz
+	sed -i '1s/^/JOBSTATE_LOG logs\/trigger_pipe.jobstate.log\n/' trigger_pipe.dag
+
+H1_frame.cache:
+	# FIXME force the observatory column to actually be instrument
+	gw_data_find -o H -t $(HANFORD_FRAME_TYPE) -l  -s $(START) -e $(STOP) --url-type file | awk '{ print $$1" $*_"$$2" "$$3" "$$4" "$$5}' > $@
+
+L1_frame.cache:
+	# FIXME force the observatory column to actually be instrument
+	gw_data_find -o L -t $(LIVINGSTON_FRAME_TYPE) -l  -s $(START) -e $(STOP) --url-type file | awk '{ print $$1" $*_"$$2" "$$3" "$$4" "$$5}' > $@
+
+frame.cache: $(FRAME_CACHE_FILES)
+	cat $(FRAME_CACHE_FILES) > frame.cache
+	#FIXME: since these frame types were made incorrectly, make sure ligolw_path_to_cache
+	#       reads ifo names properly
+	sed -i s/H\ $(LIGO_FRAME_TYPE)/H\ H1_$(LIGO_FRAME_TYPE)/g frame.cache
+	sed -i s/L\ $(LIGO_FRAME_TYPE)/L\ L1_$(LIGO_FRAME_TYPE)/g frame.cache
+
+%_segmentspadded.xml:
+	ligolw_segment_query_dqsegdb --segment-url=${SEG_SERVER} -q --gps-start-time ${START} --gps-end-time ${STOP} --include-segments=$(LIGO_SEGMENTS) --result-name=datasegments > $@
+
+segments.xml.gz: $(SEGMENTS_FILES) frame.cache
+	# These segments come from the MDC set	
+	ligolw_add --output segdb.xml $(SEGMENTS_FILES)
+	ligolw_cut --delete-column segment:segment_def_cdb --delete-column segment:creator_db --delete-column segment_definer:insertion_time segdb.xml
+	gstlal_cache_to_segments frame.cache nogaps.xml
+	gstlal_segments_operations --segment-file1 segdb.xml --segment-file2 nogaps.xml --intersection --output-file $@
+	gstlal_segments_trim --trim $(SEGMENT_TRIM) --gps-start-time $(START) --gps-end-time $(STOP) --min-length $(SEGMENT_MIN_LENGTH) --output $@ $@
+
+%_vetoes.xml: $(VETODEF)
+	ligolw_segments_from_cats_dqsegdb --segment-url=$(SEG_SERVER) --veto-file=$(VETODEF) --gps-start-time $(START) --gps-end-time $(STOP) --cumulative-categories
+	gstlal_segments_operations --union --segment-file1 $*-VETOTIME_CAT3-*.xml --segment-name1 VETO_CAT3_CUMULATIVE --segment-file2 $*-VETOTIME_CAT3-*.xml --segment-name2 VETO_CAT3_CUMULATIVE  --output-file $@ --output-segment-name vetoes
+
+vetoes.xml.gz: $(VETOES_FILES)
+	ligolw_add --output $@ $(VETOES_FILES)
+	ligolw_cut --delete-column segment:segment_def_cdb --delete-column segment:creator_db --delete-column segment_definer:insertion_time $@
+	gzip $@
+
+reference_likelihood_file.xml.gz:
+	gstlal_ll_inspiral_create_prior_diststats \
+		--segment-and-horizon=H1:$(H1PRIORSTART):$(H1PRIORSTOP):$(H1PRIORRANGE) \
+		--segment-and-horizon=L1:$(L1PRIORSTART):$(L1PRIORSTOP):$(L1PRIORRANGE) \
+		--write-likelihood-basename $@ \
+		--num-templates 1000 \
+		--min-instruments 1 \
+		--verbose
+
+clean:
+	-rm -rvf *.sub *.dag* *.cache *.sh logs *.sqlite plots *.html Images *.css *.js
+	-rm -rvf lalapps_run_sqlite/ ligolw_* gstlal_*
+	-rm -vf segments.xml.gz tisi.xml H1-*.xml H1_*.xml L1-*.xml L1_*xml V1-*.xml V1_*xml ?_injections.xml ????-*_split_bank-*.xml vetoes.xml.gz
+	-rm -vf *marginalized*.xml.gz *-ALL_LLOID*.xml.gz
+	-rm -vf tisi0.xml tisi1.xml
+	-rm -rf *_split_bank*
+	-rm -rf nogaps.xml segdb.xml
+	-rm -rf bank_aligned_spin.xml.gz
diff --git a/gstlal-inspiral/share/O2/Makefile.offline_analysis_rules b/gstlal-inspiral/share/O2/Makefile.offline_analysis_rules
deleted file mode 100644
index f4eb4ba7ab..0000000000
--- a/gstlal-inspiral/share/O2/Makefile.offline_analysis_rules
+++ /dev/null
@@ -1,29 +0,0 @@
-# Misc useful definitions
-empty:=
-space:= $(empty) $(empty)
-comma:= ,
-
-# the point of this is to build the string e.g. H1=../bank/H1_bank.cache,L1=../bank/L1_bank.cache
-BANK_CACHE_PREFIX = $(empty)
-BANK_CACHE_SUFFIX = _split_bank.cache
-BANK_CACHE_FILES = $(addsuffix $(BANK_CACHE_SUFFIX),$(IFOS))
-BANK_CACHE_STRING:= $(addprefix $(BANK_CACHE_PREFIX),$(IFOS))
-BANK_CACHE_STRING:= $(addprefix =,$(BANK_CACHE_STRING))
-BANK_CACHE_STRING:= $(addsuffix $(BANK_CACHE_SUFFIX),$(BANK_CACHE_STRING))
-BANK_CACHE_STRING:= $(join $(IFOS),$(BANK_CACHE_STRING))
-BANK_CACHE_STRING:= $(strip $(BANK_CACHE_STRING))
-BANK_CACHE_STRING:= $(subst $(space),$(comma),$(BANK_CACHE_STRING))
-
-# Segments file names
-segments_suffix := _segmentspadded.xml
-SEGMENTS_FILES  := $(addsuffix $(segments_suffix),$(IFOS))
-
-# Frame cache file names
-frame_suffix      := _frame.cache
-FRAME_CACHE_FILES := $(addsuffix $(frame_suffix),$(IFOS))
-
-# Injection file names
-injections:=--injections $(space)
-far_injections:=--far-injections $(space)
-INJECTION_LIST := $(subst $(space), $(injections), $(INJECTIONS))
-FAR_INJECTION_LIST := $(subst $(space), $(far_injections), $(FAR_INJECTIONS))
diff --git a/gstlal-inspiral/share/O2/optimised/Makefile.ligosoftware_icc_gstreamer-1.0 b/gstlal-inspiral/share/O2/optimised/Makefile.ligosoftware_icc_gstreamer-1.0
new file mode 100644
index 0000000000..0bf4aabfa4
--- /dev/null
+++ b/gstlal-inspiral/share/O2/optimised/Makefile.ligosoftware_icc_gstreamer-1.0
@@ -0,0 +1,783 @@
+#SHELL := /bin/bash
+#
+# Before running, replace albert.einstein with your ligo.org credentials and
+# run: make env.sh, then source the resulting environment file and run: make
+#
+# example command:
+# time make logs/gstlal.txt -f Makefile.ligosoftware_icc_deb8_gstreamer-1.0 1> make.out 2> make.err
+
+# albert.einstein for git checkout
+USER=duncan.meacher
+
+# Set directories and paths
+SRC_DIR:=${PWD}/src
+TAR_DIR:=tarball
+LOGS_DIR:=logs
+PATCH_DIR:=${PWD}/patches
+GSTLAL_REPO:=${PWD}/git/gstlal
+LALSUITE_REPO:=${PWD}/git/lalsuite
+INSTALL_DIR:=${LAL_PATH}
+
+# Set to build from git (0 = repo, 1 = git)
+LALSUITE_GIT=0
+GSTLAL_GIT=1
+
+# Set package release versions
+GSTLALINSPIRAL=gstlal-inspiral-1.1.0
+GSTLALCALIBRATION=gstlal-calibration-1.0.6
+GSTLALUGLY=gstlal-ugly-1.1.0
+GSTLAL=gstlal-1.1.0
+DOXYGEN=doxygen-1.8.9.1
+PYLAL=pylal-0.12.0
+GLUE=glue-1.53.0
+LALAPPS=lalapps-6.20.0
+LALSTOCHASTIC=lalstochastic-1.1.19
+LALINFERENCE=lalinference-1.8.0
+LALPULSAR=lalpulsar-1.15.0
+LALINSPIRAL=lalinspiral-1.7.6
+LALDETCHAR=laldetchar-0.3.4
+LALBURST=lalburst-1.4.3
+LALSIMULATION=lalsimulation-1.6.1
+LALMETAIO=lalmetaio-1.3.0
+LALFRAME=lalframe-1.4.2
+LAL=lal-6.17.0
+GDS=gds-2.17.11
+LDASTOOLSFRAMECPP=ldas-tools-framecpp-2.5.4
+LDASTOOLSAL=ldas-tools-al-2.5.6
+SWIG=swig-3.0.7
+METAIO=metaio-8.4.0
+LIBFRAME=libframe-8.30
+OPROFILE=oprofile-1.1.0
+GSTPYTHON=gst-python-1.4.0
+GSTPLUGINSGOOD=gst-plugins-good-1.4.5
+GSTPLUGINSBASE=gst-plugins-base-1.4.5
+GSTREAMER=gstreamer-1.4.5
+GSL=gsl-1.16
+ORC=orc-0.4.25
+FFTW=fftw-3.3.5
+
+# Specify target/dependancy files
+GSTINSPIRAL_TARGET=$(INSTALL_DIR)/lib/libgstlalinspiral.so
+GSTLALCALIB_TARGET=$(INSTALL_DIR)/bin/gstlal_compute_strain
+GSTLALUGLY_TARGET=$(INSTALL_DIR)/lib/gstreamer-1.0/libgstnds.so
+GSTLAL_TARGET=$(INSTALL_DIR)/lib/libgstlal.so
+DOXYGEN_TARGET=$(INSTALL_DIR)/bin/doxygen
+PYLAL_TARGET=$(INSTALL_DIR)/etc/pylal-user-env.sh
+GLUE_TARGET=$(INSTALL_DIR)/bin/dmtdq_seg_insert
+LALAPPS_TARGET=$(INSTALL_DIR)/bin/lalapps_psinject
+LALSTOCH_TARGET=$(INSTALL_DIR)/lib/liblalstochastic.so
+LALINFER_TARGET=$(INSTALL_DIR)/lib/liblalinference.so
+LALPULSAR_TARGET=$(INSTALL_DIR)/lib/liblalpulsar.so
+LALINSPIRAL_TARGET=$(INSTALL_DIR)/lib/liblalinspiral.so
+LALDETCHAR_TARGET=$(INSTALL_DIR)/lib/liblaldetchar.so
+LALBURST_TARGET=$(INSTALL_DIR)/lib/liblalburst.so
+LALSIM_TARGET=$(INSTALL_DIR)/lib/liblalsimulation.so
+LALMETAIO_TARGET=$(INSTALL_DIR)/lib/liblalmetaio.so
+LALFRAME_TARGET=$(INSTALL_DIR)/lib/liblalframe.so
+LAL_TARGET=$(INSTALL_DIR)/lib/liblal.so
+GDS_TARGET=$(INSTALL_DIR)/lib/libwpipe.so
+LDASTOOLSFRAMECPP_TARGET=$(INSTALL_DIR)/lib/libframecpp.so
+LDASTOOLSAL_TARGET=$(INSTALL_DIR)/lib/libldastoolsal.so
+SWIG_TARGET=$(INSTALL_DIR)/bin/swig
+METAIO_TARGET=$(INSTALL_DIR)/lib/libmetaio.so
+LIBFRAME_TARGET=$(INSTALL_DIR)/lib/libFrame.so
+OPROFILE_TARGET=$(INSTALL_DIR)/lib/oprofile/libopagent.so
+GSTPYTHON_TARGET=$(INSTALL_DIR)/lib/gstreamer-1.0/libgstpythonplugin.so
+GSTGOOD_TARGET=$(INSTALL_DIR)/lib/gstreamer-1.0/libgstpng.so
+GSTBASE_TARGET=$(INSTALL_DIR)/lib/libgstapp-1.0.so
+GSTREAMER_TARGET=$(INSTALL_DIR)/lib/libgstreamer-1.0.so
+GSL_2_TARGET=$(INSTALL_DIR)/lib/pkgconfig/gsl.pc.orig
+GSL_1_TARGET=$(INSTALL_DIR)/lib/libgsl.so
+ORC_TARGET=$(INSTALL_DIR)/lib/liborc-0.4.so
+FFTW_TARGET=$(INSTALL_DIR)/lib/libfftw3.so
+# tarballs
+GSTLALINSPIRAL_TAR_TARGET=$(TAR_DIR)/$(GSTLALINSPIRAL).tar.gz
+GSTLALCALIB_TAR_TARGET=$(TAR_DIR)/$(GSTLALCALIBRATION).tar.gz
+GSTLALUGLY_TAR_TARGET=$(TAR_DIR)/$(GSTLALUGLY).tar.gz
+GSTLAL_TAR_TARGET=$(TAR_DIR)/$(GSTLAL).tar.gz
+DOXYGEN_TAR_TARGET=$(TAR_DIR)/$(DOXYGEN).src.tar.gz
+PYLAL_TAR_TARGET=$(TAR_DIR)/$(PYLAL).tar.gz
+GLUE_TAR_TARGET=$(TAR_DIR)/$(GLUE).tar.gz
+LALAPPS_TAR_TARGET=$(TAR_DIR)/$(LALAPPS).tar.xz
+LALSTOCH_TAR_TARGET=$(TAR_DIR)/$(LALSTOCHASTIC).tar.xz
+LALINFER_TAR_TARGET=$(TAR_DIR)/$(LALINFERENCE).tar.xz
+LALPULSAR_TAR_TARGET=$(TAR_DIR)/$(LALPULSAR).tar.xz
+LALINSPIRAL_TAR_TARGET=$(TAR_DIR)/$(LALINSPIRAL).tar.xz
+LALDETCHAR_TAR_TARGET=$(TAR_DIR)/$(LALDETCHAR).tar.xz
+LALBURST_TAR_TARGET=$(TAR_DIR)/$(LALBURST).tar.xz
+LALSIM_TAR_TARGET=$(TAR_DIR)/$(LALSIMULATION).tar.xz
+LALMETAIO_TAR_TARGET=$(TAR_DIR)/$(LALMETAIO).tar.xz
+LALFRAME_TAR_TARGET=$(TAR_DIR)/$(LALFRAME).tar.xz
+LAL_TAR_TARGET=$(TAR_DIR)/$(LAL).tar.xz
+GDS_TAR_TARGET=$(TAR_DIR)/$(GDS).tar.gz
+LDASTOOLSFRAMECPP_TAR_TARGET=$(TAR_DIR)/$(LDASTOOLSFRAMECPP).tar.gz
+LDASTOOLSAL_TAR_TARGET=$(TAR_DIR)/$(LDASTOOLSAL).tar.gz
+SWIG_TAR_TARGET=$(TAR_DIR)/$(SWIG).tar.gz
+METAIO_TAR_TARGET=$(TAR_DIR)/$(METAIO).tar.gz
+LIBFRAME_TAR_TARGET=$(TAR_DIR)/$(LIBFRAME).tar.gz
+OPROFILE_TAR_TARGET=$(TAR_DIR)/$(OPROFILE).tar.gz
+GSTPYTHON_TAR_TARGET=$(TAR_DIR)/$(GSTPYTHON).tar.xz
+GSTGOOD_TAR_TARGET=$(TAR_DIR)/$(GSTPLUGINSGOOD).tar.xz
+GSTBASE_TAR_TARGET=$(TAR_DIR)/$(GSTPLUGINSBASE).tar.xz
+GSTREAMER_TAR_TARGET=$(TAR_DIR)/$(GSTREAMER).tar.xz
+GSL_TAR_TARGET=$(TAR_DIR)/$(GSL).tar.gz
+ORC_TAR_TARGET=$(TAR_DIR)/$(ORC).tar.xz
+FFTW_TAR_TARGET=$(TAR_DIR)/$(FFTW).tar.gz
+# git repos
+GSTLAL_GIT_TARGET=$(GSTLAL_REPO)/TODO.md
+LALSUITE_GIT_TARGET=$(LALSUITE_REPO)/lal/README
+
+# Specify how many processors to run on
+CORES:=$(shell echo `nproc --all`"-2" | bc -l)
+
+# Determine cluster
+CLUSTER:=$(shell hostname -d)
+
+ICC_CIT:=/ldcg/intel/2016u1/bin/compilervars.sh
+ICC_UWM:=/opt/intel/bin/compilervars.sh
+ICC_ATLAS:=/opt/intel/2015/intel.sh
+
+all : $(GSTINSPIRAL_TARGET) $(LOGS_DIR)/gstlal.txt
+
+#####################
+# Environment setup #
+#####################
+
+env.sh :
+	@echo 'unset GST_PLUGIN_PATH PYTHONPATH' > $@
+	@echo 'unset LD_LIBRARY_PATH LIBRARY_PATH LD_PRELOAD' >> $@
+	@echo 'LAL_PATH=${PWD}/opt' >> $@
+	@echo 'export CFLAGS="-O3 -march=native -lfftw3 -lfftw3f -lfftw3_threads -lfftw3f_threads -lmkl_core -lmkl_intel_lp64 -lmkl_sequential -lm -lpthread -Wno-write-strings -lirc -limf -Wl,-rpath,${PWD}/opt/lib"' >> $@
+	@if [ ${CLUSTER} = "ligo.caltech.edu" ] ; then \
+		echo "source ${ICC_CIT} intel64" >> $@ ; \
+		echo 'LDFLAGS_INTEL="-L${MKLROOT}/lib/intel64"' >> $@ ; \
+	elif [ ${CLUSTER} = "nemo.uwm.edu" ] ; then \
+		echo "source ${ICC_UWM} intel64" >> $@ ; \
+		echo 'LDFLAGS_INTEL="-L/opt/intel/composer_xe_2015.5.223/mkl/lib/intel64"' >> $@ ; \
+	elif [ ${CLUSTER} = "atlas.local" ] ; then \
+		echo "source ${ICC_ATLAS} intel64" >> $@ ; \
+		echo 'LDFLAGS_INTEL="-L/opt/intel/2015/lib/intel64 -L/opt/intel/2015/mkl/lib/intel64"' >> $@ ; \
+	fi
+	@echo 'export LD_LIBRARY_PATH=$${LAL_PATH}/lib:$${LD_LIBRARY_PATH}' >> $@
+	@echo 'export CC="icc"' >> $@
+	@echo 'export CXX="icpc"' >> $@
+	@echo '# Force explicit linking of optimized FFTW libraries:' >> $@
+	@echo 'LDFLAGS="$${LDFLAGS_INTEL} -L${PWD}/opt/lib "' >> $@
+	@echo '# These are environment variables that do get exported' >> $@
+	@echo 'PATH=$${LAL_PATH}/bin:$${PATH}' >> $@
+	@echo 'PKG_CONFIG_PATH=$${LAL_PATH}/lib/pkgconfig:$${LAL_PATH}/lib64/pkgconfig:$${PKG_CONFIG_PATH}' >> $@
+	@echo 'PYTHONPATH=$${LAL_PATH}/lib/python2.7/site-packages:$${LAL_PATH}/lib64/python2.7/site-packages' >> $@
+	@echo 'LAL_DATA_PATH=/home/cbc/ROM_data' >> $@
+	@echo 'GST_PLUGIN_PATH=$${LAL_PATH}/lib/gstreamer-1.0' >> $@
+	@echo 'export PATH PKG_CONFIG_PATH PYTHONPATH GST_PLUGIN_PATH LAL_PATH LDFLAGS LDFLAGS_INTEL LAL_DATA_PATH' >> $@
+
+#@echo '#export LD_PRELOAD="$${LAL_PATH}/lib/libfftw3.so:$${LAL_PATH}/lib/libfftw3f.so:$${LAL_PATH}/lib/libfftw3_threads.so:$${LAL_PATH}/lib/libfftw3f_threads.so"' >> $@
+#@echo 'LAL_DATA_PATH=$${LAL_PATH}/share/lalsimulation' >> $@
+
+#####################
+# Check time stamps #
+#####################
+
+check :
+	@if [ -f logs/all.txt ] ; then rm logs/all.txt ; fi ;
+	@cat logs/* | uniq > logs/all.txt
+	@if [ -f logs/gstlal.txt ] ; then ls logs/gstlal.txt >> logs/all.txt ; fi ;
+	@ls -ltrh $$(cat logs/all.txt)
+
+###########
+# Install #
+###########
+
+# gstlal (all)
+logs/gstlal.txt : $(LOGS_DIR)/doxygen.txt $(GSTLAL_TARGET) $(GSTLALUGLY_TARGET) $(GSTLALCALIB_TARGET) $(GSTINSPIRAL_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+# gstlal-inspiral
+$(GSTINSPIRAL_TARGET) : $(GSTLALCALIB_TARGET)
+	echo gstlal-inspiral 1>&2
+	if [ "${GSTLAL_GIT}" = "1" ]; then \
+		cd $(GSTLAL_REPO)/gstlal-inspiral && echo | ./00init.sh ; \
+		cd $(GSTLAL_REPO)/gstlal-inspiral && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(GSTLAL_REPO)/gstlal-inspiral && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(GSTLALINSPIRAL).tar.gz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALINSPIRAL) && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALINSPIRAL) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# gstlal-calibration
+$(GSTLALCALIB_TARGET) : $(GSTLALUGLY_TARGET)
+	echo gstlal-calibration 1>&2
+	if [ "${GSTLAL_GIT}" = "1" ]; then \
+		cd $(GSTLAL_REPO)/gstlal-calibration && echo | ./00init.sh ; \
+		cd $(GSTLAL_REPO)/gstlal-calibration && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(GSTLAL_REPO)/gstlal-calibration && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(GSTLALCALIBRATION).tar.gz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALCALIBRATION) && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALCALIBRATION) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# gstlal-ugly
+$(GSTLALUGLY_TARGET) : $(GSTLAL_TARGET)
+	echo gstlal-ugly 1>&2
+	if [ "${GSTLAL_GIT}" = "1" ]; then \
+		cd $(GSTLAL_REPO)/gstlal-ugly && echo | ./00init.sh ; \
+		cd $(GSTLAL_REPO)/gstlal-ugly && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(GSTLAL_REPO)/gstlal-ugly && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(GSTLALUGLY).tar.gz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALUGLY) && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLALUGLY) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# gstlal
+$(GSTLAL_TARGET) : $(DOXYGEN_TARGET) $(GSTLAL_GIT_TARGET)
+	echo gstlal 1>&2
+	if [ "${GSTLAL_GIT}" = "1" ]; then \
+		cd $(GSTLAL_REPO)/gstlal && echo | ./00init.sh ; \
+		cd $(GSTLAL_REPO)/gstlal && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(GSTLAL_REPO)/gstlal && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(GSTLAL).tar.gz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLAL) && ./configure --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(GSTLAL) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# doxygen
+logs/doxygen.txt : $(LOGS_DIR)/lalsuite.txt $(DOXYGEN_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(DOXYGEN_TARGET) : $(GLUE_TARGET) $(PYLAL_TARGET)
+	echo $(DOXYGEN) 1>&2
+	tar -xf $(TAR_DIR)/$(DOXYGEN).src.tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(DOXYGEN) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(DOXYGEN) && make -j$(CORES) && make install -j$(CORES)
+
+# lalsuite
+logs/lalsuite.txt : $(LOGS_DIR)/gds.txt $(LAL_TARGET) $(LALFRAME_TARGET) $(LALMETAIO_TARGET) $(LALSIM_TARGET) $(LALBURST_TARGET) $(LALDETCHAR_TARGET) $(LALINSPIRAL_TARGET) $(LALPULSAR_TARGET) $(LALINFER_TARGET) $(LALSTOCH_TARGET) $(LALAPPS_TARGET) $(GLUE_TARGET) $(PYLAL_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+# pylal
+$(PYLAL_TARGET) : $(GLUE_TARGET)
+	echo $(PYLAL) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" cd $(LALSUITE_REPO)/pylal && python setup.py install --prefix=$(INSTALL_DIR) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(PYLAL).tar.gz -C $(SRC_DIR) ; \
+		CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" cd $(SRC_DIR)/$(PYLAL) && python setup.py install --prefix=$(INSTALL_DIR) ; \
+	fi ;
+
+# glue
+$(GLUE_TARGET) : $(LALAPPS_TARGET)
+	echo $(GLUE) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/glue && python setup.py install --prefix=$(INSTALL_DIR) ; \
+	else \
+		tar -xzf $(TAR_DIR)/$(GLUE).tar.gz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(GLUE) && python setup.py install --prefix=$(INSTALL_DIR) ; \
+	fi ;
+
+# lalapps
+## FIXME --enable-gcc-flags set to no on lalapps configure as work around to avoid warnings stopping install process
+## FIXME: Commenting out the explicit linking to gslcblas
+## Not sure what causes the warnings
+$(LALAPPS_TARGET) : $(LALSTOCH_TARGET)
+	echo $(LALAPPS) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalapps && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalapps && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalapps && ./configure --enable-gcc-flags=no --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalapps && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALAPPS).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALAPPS) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALAPPS) && ./configure --enable-gcc-flags=no --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALAPPS) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalstochastic
+$(LALSTOCH_TARGET) : $(LALINFER_TARGET)
+	echo $(LALSTOCHASTIC) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalapps && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalstochastic && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalstochastic && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalstochastic && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALSTOCHASTIC).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALSTOCHASTIC) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALSTOCHASTIC) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALSTOCHASTIC) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalinference
+$(LALINFER_TARGET) : $(LALPULSAR_TARGET)
+	echo $(LALINFERENCE) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalapps && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalinference && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalinference && ./configure --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR)  CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(LALSUITE_REPO)/lalinference && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALINFERENCE).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALINFERENCE) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALINFERENCE) && ./configure --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR)  CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(SRC_DIR)/$(LALINFERENCE) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalpulsar
+$(LALPULSAR_TARGET) : $(LALINSPIRAL_TARGET)
+	echo $(LALPULSAR) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalapps && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalpulsar && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalpulsar && ./configure --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR)  CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(LALSUITE_REPO)/lalpulsar && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALPULSAR).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALPULSAR) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALPULSAR) && ./configure --enable-swig-python --disable-lalxml --prefix=$(INSTALL_DIR)  CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(SRC_DIR)/$(LALPULSAR) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalinspiral
+$(LALINSPIRAL_TARGET) : $(LALDETCHAR_TARGET)
+	echo $(LALINSPIRAL) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalinspiral && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalinspiral && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalinspiral && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalinspiral && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALINSPIRAL).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALINSPIRAL) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALINSPIRAL) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALINSPIRAL) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# laldetchar
+$(LALDETCHAR_TARGET) : $(LALBURST_TARGET)
+	echo $(LALDETCHAR) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/laldetchar && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/laldetchar && ./00boot ; \
+		cd $(LALSUITE_REPO)/laldetchar && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/laldetchar && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALDETCHAR).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALDETCHAR) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALDETCHAR) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALDETCHAR) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalburst
+$(LALBURST_TARGET) : $(LALSIM_TARGET)
+	echo $(LALBURST) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalburst && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalburst && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalburst && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalburst && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALBURST).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALBURST) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALBURST) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALBURST) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalsimulation
+$(LALSIM_TARGET) : $(LALMETAIO_TARGET)
+	echo $(LALSIMULATION) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalsimulation && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalsimulation && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalsimulation && ./configure --disable-openmp --enable-swig-python --prefix=$(INSTALL_DIR) CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(LALSUITE_REPO)/lalsimulation && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALSIMULATION).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALSIMULATION) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALSIMULATION) && ./configure --disable-openmp --enable-swig-python --prefix=$(INSTALL_DIR) CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native" ; \
+		cd $(SRC_DIR)/$(LALSIMULATION) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalmetaio
+$(LALMETAIO_TARGET) : $(LALFRAME_TARGET)
+	echo $(LALMETAIO) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalmetaio && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalmetaio && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalmetaio && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalmetaio && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALMETAIO).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALMETAIO) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALMETAIO) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALMETAIO) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lalframe
+$(LALFRAME_TARGET) : $(LAL_TARGET)
+	echo $(LALFRAME) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lalframe && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lalframe && ./00boot ; \
+		cd $(LALSUITE_REPO)/lalframe && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lalframe && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LALFRAME).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LALFRAME) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LALFRAME) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LALFRAME) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# lal
+$(LAL_TARGET) : $(OPROFILE_TARGET) $(LIBFRAME_TARGET) $(METAIO_TARGET) $(SWIG_TARGET) $(LDASTOOLSAL_TARGET)  $(LDASTOOLSFRAMECPP_TARGET) $(GDS_TARGET)
+	echo $(LAL) 1>&2
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		cd $(LALSUITE_REPO)/lal && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac ; \
+		cd $(LALSUITE_REPO)/lal && ./00boot ; \
+		cd $(LALSUITE_REPO)/lal && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(LALSUITE_REPO)/lal && make -j$(CORES) && make install -j$(CORES) ; \
+	else \
+		tar -xf $(TAR_DIR)/$(LAL).tar.xz -C $(SRC_DIR) ; \
+		cd $(SRC_DIR)/$(LAL) && sed -i -e 's@AC_CHECK_LIB(\[gslcblas\]@#AC_CHECK_LIB(\[gslcblas\]@g' configure.ac && autoreconf ; \
+		cd $(SRC_DIR)/$(LAL) && ./configure --enable-swig-python --prefix=$(INSTALL_DIR) ; \
+		cd $(SRC_DIR)/$(LAL) && make -j$(CORES) && make install -j$(CORES) ; \
+	fi ;
+
+# gds
+logs/gds.txt : $(LOGS_DIR)/ldas-tools-framecpp.txt $(GDS_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(GDS_TARGET) : $(LDASTOOLSFRAMECPP_TARGET)
+	echo $(GDS) 1>&2
+	tar -xzf $(TAR_DIR)/$(GDS).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GDS) && ./configure --enable-online --prefix=$(INSTALL_DIR) CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native -lfftw3_threads -lfftw3f_threads" LDFLAGS=""
+	cd $(SRC_DIR)/$(GDS) && make && make install
+
+# ldas-tools-framecpp
+logs/ldas-tools-framecpp.txt : $(LOGS_DIR)/ldas-tools-al.txt $(LDASTOOLSFRAMECPP_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(LDASTOOLSFRAMECPP_TARGET) : $(LDASTOOLSAL_TARGET)
+	echo $(LDASTOOLSFRAMECPP) 1>&2
+	tar -xf $(TAR_DIR)/$(LDASTOOLSFRAMECPP).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(LDASTOOLSFRAMECPP) && ./configure --prefix=$(INSTALL_DIR) --without-doxygen CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native"
+	cd $(SRC_DIR)/$(LDASTOOLSFRAMECPP) && make DESTDIR=/ -j$(CORES) && make install DESTDIR=/ -j$(CORES)
+
+# ldas-tools-al
+logs/ldas-tools-al.txt : $(LOGS_DIR)/swig.txt $(LDASTOOLSAL_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(LDASTOOLSAL_TARGET) : $(SWIG_TARGET)
+	echo $(LDASTOOLSAL) 1>&2
+	tar -xf $(TAR_DIR)/$(LDASTOOLSAL).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(LDASTOOLSAL) && ./configure --prefix=$(INSTALL_DIR) --without-doxygen CC="gcc" CXX="g++" CFLAGS="-fPIC -O3 -march=native"
+	cd $(SRC_DIR)/$(LDASTOOLSAL) && make -j$(CORES) && make install -j$(CORES)
+
+# swig
+logs/swig.txt : $(LOGS_DIR)/metaio.txt $(SWIG_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(SWIG_TARGET) : $(METAIO_TARGET)
+	echo $(SWIG) 1>&2
+	tar -xf $(TAR_DIR)/$(SWIG).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(SWIG) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(SWIG) && make -j$(CORES) && make install -j$(CORES)
+
+# metaio
+logs/metaio.txt : $(LOGS_DIR)/libframe.txt $(METAIO_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(METAIO_TARGET) : $(LIBFRAME_TARGET)
+	echo $(METAIO) 1>&2
+	tar -xf $(TAR_DIR)/$(METAIO).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(METAIO) && ./configure --prefix=$(INSTALL_DIR) --with-matlab=no
+	cd $(SRC_DIR)/$(METAIO) && make -j$(CORES) && make install -j$(CORES)
+	# Needed with-matlab option for intel_haswell test
+
+# libframe
+logs/libframe.txt : $(LOGS_DIR)/oprofile.txt $(LIBFRAME_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(LIBFRAME_TARGET) : $(OPROFILE_TARGET)
+	echo $(LIBFRAME) 1>&2
+	tar -xf $(TAR_DIR)/$(LIBFRAME).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(LIBFRAME) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(LIBFRAME) && make -j$(CORES) && make install -j$(CORES)
+
+# oprofile
+logs/oprofile.txt : $(LOGS_DIR)/gstreamer.txt $(OPROFILE_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(OPROFILE_TARGET) : $(GSTPYTHON_TARGET)
+	echo $(OPROFILE) 1>&2
+	tar -xf $(TAR_DIR)/$(OPROFILE).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(OPROFILE)/ && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(OPROFILE)/ && make -j$(CORES) && make install -j$(CORES)
+
+# gstreamer (all)
+logs/gstreamer.txt : $(LOGS_DIR)/gsl.txt $(GSTREAMER_TARGET) $(GSTBASE_TARGET) $(GSTGOOD_TARGET) $(GSTPYTHON_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+# gstreamer plugin python
+$(GSTPYTHON_TARGET) : $(GSTGOOD_TARGET)
+	echo $(GSTPYTHON) 1>&2
+	mkdir -p $(INSTALL_DIR)/lib64/python2.7/site-packages/gi/overrides
+	tar -xf $(TAR_DIR)/$(GSTPYTHON).tar.xz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GSTPYTHON) && ./configure --prefix=$(INSTALL_DIR) --exec-prefix=$(INSTALL_DIR) --with-libpython-dir=/usr/lib --with-pygi-overrides-dir=$(INSTALL_DIR)/lib/python2.7/site-packages/gi/overrides
+	cd $(SRC_DIR)/$(GSTPYTHON) && make -j$(CORES) && make install -j$(CORES)
+
+# gstreamer plugin good
+$(GSTGOOD_TARGET) : $(GSTBASE_TARGET)
+	echo $(GSTPLUGINSGOOD) 1>&2
+	tar -xf $(TAR_DIR)/$(GSTPLUGINSGOOD).tar.xz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GSTPLUGINSGOOD) && ./configure --disable-gst_v4l2 --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(GSTPLUGINSGOOD) && make -j$(CORES) && make install -j$(CORES)
+
+# gstreamer plugin base
+$(GSTBASE_TARGET) : $(GSTREAMER_TARGET)
+	echo $(GSTPLUGINSBASE) 1>&2
+	tar -xf $(TAR_DIR)/$(GSTPLUGINSBASE).tar.xz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GSTPLUGINSBASE) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(GSTPLUGINSBASE) && make -j$(CORES) && make install -j$(CORES)
+
+# gstreamer
+$(GSTREAMER_TARGET) : $(GSL_1_TARGET) $(GSL_2_TARGET)
+	echo $(GSTREAMER) 1>&2
+	tar -xf $(TAR_DIR)/$(GSTREAMER).tar.xz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GSTREAMER) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(GSTREAMER) && make -j$(CORES) && make install -j$(CORES)
+
+# GSL
+logs/gsl.txt : $(LOGS_DIR)/orc.txt $(GSL_1_TARGET) $(GSL_2_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+## FIXME Hack to make gsl default to atlas for blas
+$(GSL_2_TARGET) : $(GSL_1_TARGET)
+	cp $(INSTALL_DIR)/lib/pkgconfig/gsl.pc $@
+	sed 's/-lgslcblas/ -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm/' $@ > $(INSTALL_DIR)/lib/pkgconfig/gsl.pc
+
+$(GSL_1_TARGET) : $(ORC_TARGET)
+	echo $(GSL) 1>&2
+	tar -xf $(TAR_DIR)/$(GSL).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(GSL) && ./configure --prefix=$(INSTALL_DIR) CFLAGS="${CFLAGS}" CC="icc" CXX="icpc" GSL_CBLAS_LIB='-lmkl_intel_ilp64 -lmkl_core -lmkl_sequential'
+	cd $(SRC_DIR)/$(GSL) && make -j$(CORES) && make install -j$(CORES)
+
+# ORC
+logs/orc.txt : $(LOGS_DIR)/fftw.txt $(ORC_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(ORC_TARGET) : $(FFTW_TARGET)
+	echo $(ORC) 1>&2
+	tar -xf $(TAR_DIR)/$(ORC).tar.xz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(ORC) && ./configure --prefix=$(INSTALL_DIR)
+	cd $(SRC_DIR)/$(ORC) && make -j$(CORES) && make install -j$(CORES)
+
+# fftw
+logs/fftw.txt : $(LOGS_DIR)/patch.txt $(FFTW_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+# ./configure, make, make install run twice to install single and double precission libs
+$(FFTW_TARGET) : $(LOGS_DIR)/patch.txt
+	echo $(FFTW) 1>&2
+	tar -xzf $(TAR_DIR)/$(FFTW).tar.gz -C $(SRC_DIR)
+	cd $(SRC_DIR)/$(FFTW) && \
+		./configure CFLAGS="-O3 -march=native -lmkl_core -lmkl_intel_lp64 -lmkl_sequential -lm -lpthread -Wno-write-strings -lirc -limf -Wl,-rpath,${PWD}/opt/lib" LDFLAGS="${LDFLAGS_INTEL}" --enable-shared --enable-sse --enable-sse2 --enable-avx --enable-float --enable-avx --enable-fma --enable-avx2 --enable-threads --prefix=$(INSTALL_DIR) && \
+		make -j$(CORES) && make install -j$(CORES) && make clean && \
+		./configure CFLAGS="-O3 -march=native -lmkl_core -lmkl_intel_lp64 -lmkl_sequential -lm -lpthread -Wno-write-strings -lirc -limf -Wl,-rpath,${PWD}/opt/lib" LDFLAGS="${LDFLAGS_INTEL}" --enable-shared --enable-sse2 --enable-avx --enable-avx --enable-fma --enable-avx2 --enable-threads --prefix=$(INSTALL_DIR) && \
+		make -j$(CORES) && make install -j$(CORES)
+
+#########################
+# Download the software #
+#########################
+
+# patches
+logs/patch.txt : $(LOGS_DIR)/tar.txt
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+#tarballs
+logs/tar.txt : $(FFTW_TAR_TARGET) $(ORC_TAR_TARGET) $(GSL_TAR_TARGET) $(GSTREAMER_TAR_TARGET) $(GSTBASE_TAR_TARGET) $(GSTGOOD_TAR_TARGET) $(GSTPYTHON_TAR_TARGET) $(OPROFILE_TAR_TARGET) $(LIBFRAME_TAR_TARGET) $(METAIO_TAR_TARGET) $(SWIG_TAR_TARGET) $(LDASTOOLSAL_TAR_TARGET) $(LDASTOOLSFRAMECPP_TAR_TARGET) $(GDS_TAR_TARGET) $(LAL_TAR_TARGET) $(LALFRAME_TAR_TARGET) $(LALMETAIO_TAR_TARGET) $(LALSIM_TAR_TARGET) $(LALBURST_TAR_TARGET) $(LALDETCHAR_TAR_TARGET) $(LALINSPIRAL_TAR_TARGET) $(LALPULSAR_TAR_TARGET) $(LALINFER_TAR_TARGET) $(LALSTOCH_TAR_TARGET) $(LALAPPS_TAR_TARGET) $(GLUE_TAR_TARGET) $(PYLAL_TAR_TARGET) $(DOXYGEN_TAR_TARGET) $(GSTLAL_TAR_TARGET) $(GSTLALUGLY_TAR_TARGET) $(GSTLALCALIB_TAR_TARGET) $(GSTLALINSPIRAL_TAR_TARGET)
+	echo $^ | sed -e "s@ @\n@g" > $@
+
+$(GSTLALINSPIRAL_TAR_TARGET) : $(GSTLALCALIB_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GSTLALINSPIRAL).tar.gz --directory-prefix=$(TAR_DIR)  -nc
+
+$(GSTLALCALIB_TAR_TARGET) : $(GSTLALUGLY_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GSTLALCALIBRATION).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTLALUGLY_TAR_TARGET) : $(GSTLAL_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GSTLALUGLY).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTLAL_TAR_TARGET) : $(DOXYGEN_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GSTLAL).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(DOXYGEN_TAR_TARGET) : $(PYLAL_TAR_TARGET)
+	wget --no-check-certificate ftp://ftp.stack.nl/pub/users/dimitri/$(DOXYGEN).src.tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(PYLAL_TAR_TARGET) : $(GLUE_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(PYLAL).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(GLUE_TAR_TARGET) : $(LALAPPS_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GLUE).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALAPPS_TAR_TARGET) : $(LALSTOCH_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALAPPS).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALSTOCH_TAR_TARGET) : $(LALINFER_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALSTOCHASTIC).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALINFER_TAR_TARGET) : $(LALPULSAR_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALINFERENCE).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALPULSAR_TAR_TARGET) : $(LALINSPIRAL_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALPULSAR).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALINSPIRAL_TAR_TARGET) : $(LALDETCHAR_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALINSPIRAL).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALDETCHAR_TAR_TARGET) : $(LALBURST_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALDETCHAR).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALBURST_TAR_TARGET) : $(LALSIM_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALBURST).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALSIM_TAR_TARGET) : $(LALMETAIO_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALSIMULATION).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALMETAIO_TAR_TARGET) : $(LALFRAME_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALMETAIO).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LALFRAME_TAR_TARGET) : $(LAL_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LALFRAME).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(LAL_TAR_TARGET) : $(GDS_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/lalsuite/$(LAL).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(GDS_TAR_TARGET) : $(LDASTOOLSFRAMECPP_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(GDS).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(LDASTOOLSFRAMECPP_TAR_TARGET) : $(LDASTOOLSAL_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(LDASTOOLSFRAMECPP).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(LDASTOOLSAL_TAR_TARGET) : $(SWIG_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(LDASTOOLSAL).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(SWIG_TAR_TARGET) : $(METAIO_TAR_TARGET)
+	wget --no-check-certificate http://downloads.sourceforge.net/project/swig/swig/$(SWIG)/$(SWIG).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(METAIO_TAR_TARGET) : $(LIBFRAME_TAR_TARGET)
+	wget --no-check-certificate https://www.lsc-group.phys.uwm.edu/daswg/download/software/source/$(METAIO).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(LIBFRAME_TAR_TARGET) : $(OPROFILE_TAR_TARGET)
+	wget --no-check-certificate http://lappweb.in2p3.fr/virgo/FrameL/$(LIBFRAME).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(OPROFILE_TAR_TARGET) : $(GSTPYTHON_TAR_TARGET)
+	wget --no-check-certificate http://prdownloads.sourceforge.net/oprofile/$(OPROFILE).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTPYTHON_TAR_TARGET) : $(GSTGOOD_TAR_TARGET)
+	wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-python/$(GSTPYTHON).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTGOOD_TAR_TARGET) : $(GSTBASE_TAR_TARGET)
+	wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-plugins-good/$(GSTPLUGINSGOOD).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTBASE_TAR_TARGET) : $(GSTREAMER_TAR_TARGET)
+	wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-plugins-base/$(GSTPLUGINSBASE).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSTREAMER_TAR_TARGET) : $(GSL_TAR_TARGET)
+	wget --no-check-certificate http://gstreamer.freedesktop.org/src/gstreamer/$(GSTREAMER).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(GSL_TAR_TARGET) : $(ORC_TAR_TARGET)
+	wget --no-check-certificate http://ftp.gnu.org/gnu/gsl/$(GSL).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+$(ORC_TAR_TARGET) : $(FFTW_TAR_TARGET)
+	wget --no-check-certificate http://gstreamer.freedesktop.org/src/orc/$(ORC).tar.xz --directory-prefix=$(TAR_DIR) -nc
+
+$(FFTW_TAR_TARGET) : $(LOGS_DIR)
+	wget --no-check-certificate http://www.fftw.org/$(FFTW).tar.gz --directory-prefix=$(TAR_DIR) -nc
+
+# git repos
+git-pull :
+	if [ -f $(LALSUITE_TARGET) ] ; then \
+		ecp-cookie-init LIGO.ORG https://versions.ligo.org/git $(USER) ; \
+		cd $(LALSUITE_REPO) && git clean -dxf && git pull --rebase ; \
+	fi ;
+	if [ -f $(GSTLAL_TARGET) ] ; then \
+		cd $(GSTLAL_REPO) && git clean -dxf && git pull --rebase ; \
+	fi ;
+
+$(LOGS_DIR) :
+	mkdir -p $(SRC_DIR) $(INSTALL_DIR) $(PATCH_DIR) $(LOGS_DIR) $(TAR_DIR)
+	if [ "${GSTLAL_GIT}" = "1" ]; then \
+		if [ -f $@ ] ; then \
+			echo "Gstlal git repo exists" ; \
+		else \
+			mkdir -p $(GSTLAL_REPO) ; \
+			ecp-cookie-init LIGO.ORG https://versions.ligo.org/git $(USER) ; \
+			git clone https://versions.ligo.org/git/gstlal.git $(GSTLAL_REPO) ; \
+		fi ; \
+	fi ;
+	if [ "${LALSUITE_GIT}" = "1" ]; then \
+		if [ -f $@ ] ; then \
+			echo "Lalsuite git repo exists" ; \
+		else \
+			mkdir -p $(LALSUITE_REPO) ; \
+			ecp-cookie-init LIGO.ORG https://versions.ligo.org/git $(USER) ; \
+			git clone https://versions.ligo.org/git/lalsuite.git $(LALSUITE_REPO) ; \
+		fi ; \
+	fi ;
+
+############
+# Clean up #
+############
+
+clean-all :
+	rm -rvf $(SRC_DIR) $(INSTALL_DIR) $(PATCH_DIR) $(TAR_DIR) $(LOGS_DIR)
+	rm -rvf opt git
+	rm -rf *.txt
+
+clean-install :
+	rm -rf opt/* logs/* src/*
+
+clean-gstlal :
+	rm -rf logs/gstlal.txt $(GSTLAL_TARGET) $(GSTLALUGLY_TARGET) $(GSTLALCALIB_TARGET) $(GSTLALINSPIRAL_TARGET)
+
+clean-doxygen :
+	rm -rf logs/doxygen.txt $(DOXYGEN_TARGET)
+
+clean-lalsuite :
+	rm -rf logs/lalsuite.txt $(LAL_TARGET) $(LALFRAME_TARGET) $(LALMETAIO_TARGET) $(LALSIM_TARGET) $(LALBURST_TARGET) $(LALDETCHAR_TARGET) $(LALINSPIRAL_TARGET) $(LALPULSAR_TARGET) $(LALINFER_TARGET) $(LALSTOCH_TARGET) $(LALAPPS_TARGET) $(GLUE_TARGET) $(PYLAL_TARGET)
+
+clean-gds :
+	rm -rf logs/gds.txt $(GDS_TARGET)
+
+clean-ldas-tools-framecpp :
+	rm -rf logs/ldas-tools-framecpp.txt $(LDASTOOLSFRAMECPP_TARGET)
+
+clean-ldas-tools-al :
+	rm -rf logs/ldas-tools-al.txt $(LDASTOOLSAL_TARGET)
+
+clean-swig :
+	rm -rf logs/swig.txt $(SWIG_TARGET)
+
+clean-metaio :
+	rm -rf logs/metaio.txt $(METAIO_TARGET)
+
+clean-libframe :
+	rm -rf logs/libframe.txt $(LIBFRAME_TARGET)
+
+clean-oprofile :
+	rm -rf logs/oprofile.txt $(OPROFILE_TARGET)
+
+clean-gstreamer :
+	rm -rf logs/gstreamer.txt $(GSTREAMER_TARGET) $(GSTBASE_TARGET) $(GSTGOOD_TARGET) $(GSTPYTHON_TARGET)
+
+clean-gsl :
+	rm -rf logs/gsl.txt $(GSL_1_TARGET) $(GSL_2_TARGET)
+
+clean-orc :
+	rm -rf logs/orc.txt $(ORC_TARGET)
+
+clean-fftw :
+	rm -rf logs/fftw.txt $(FFTW_TARGET)
-- 
GitLab