From 9bfcfb9432d2121aecd1ad3d75a66b1d94fc7101 Mon Sep 17 00:00:00 2001
From: Craig Cahillane <craig.cahillane@LIGO.ORG>
Date: Sat, 23 Aug 2014 01:23:48 +0000
Subject: [PATCH] Added make_triggers_sn.py and mdc_setup_sn.py.
 (condor_pp_sn.py is not yet complete)

git-svn-id: https://svn.ligo.caltech.edu/svn/bayeswave/branches/craig@157 c56465c9-8126-4a4f-9d7d-ac845eff4865
---
 burstinj/s6/make_cache.py       |  14 +--
 burstinj/s6/make_triggers.py    |   4 +-
 burstinj/s6/make_triggers_sn.py | 146 ++++++++++++++++++++++++++++
 condor/s6/mdc_setup.py          |  27 ++++--
 condor/s6/mdc_setup_sn.py       | 167 ++++++++++++++++++++++++++++++++
 postprocess/plot_waveform.py    |   1 -
 postprocess/s6/condor_pp.py     |   4 +-
 7 files changed, 341 insertions(+), 22 deletions(-)
 create mode 100644 burstinj/s6/make_triggers_sn.py
 create mode 100644 condor/s6/mdc_setup_sn.py

diff --git a/burstinj/s6/make_cache.py b/burstinj/s6/make_cache.py
index eb50bb36..9dec0e2f 100644
--- a/burstinj/s6/make_cache.py
+++ b/burstinj/s6/make_cache.py
@@ -9,22 +9,22 @@ from glob import glob
 # -- Cache file format
 # H H1_ER_C00_L1 1074903984 4 file://localhost/archive/frames/ER5/hoft/H1/H-H1_ER_C00_L1-10749/H-H1_ER_C00_L1-1074903984-4.gwf
 
-start = 961545615
-end = 971654415
+start = 870768590
+end = 871215434
 
 # ifo = 'GHLV'
 # frtype = 'BRST_S6'
 
 # basedir = '/archive/frames/S6/Burst-MDC/GHLV-BRST_S6'
-basedir = '/archive/frames/S6/Burst-MDC/GHLV-ELPTC_S6'
+basedir = '/home/stuver/SNMDCs/SN2007gr/GHLV-SN2007gr_piro5'
 
-sfour = 9615
-efour = 9716
+sfour = 8707
+efour = 8712
 
-outfile = open('elptc_s6.cache','w')
+outfile = open('sn2007piro5.cache','w')
 for four in range(sfour, efour+1):
     print "Starting directory " + str(four)
-    dirname = "{0}/GHLV-ELPTC_S6-{1}/".format(basedir, four)
+    dirname = "{0}/GHLV-SN2007gr_piro5-{1}/".format(basedir, four)
     filelist = glob(dirname + '*')
     
     for filename in filelist:
diff --git a/burstinj/s6/make_triggers.py b/burstinj/s6/make_triggers.py
index b6f26a3b..945d01ec 100644
--- a/burstinj/s6/make_triggers.py
+++ b/burstinj/s6/make_triggers.py
@@ -68,8 +68,8 @@ print "Found {0} loud WNB in good times".format(goodloudwnb.size)
 
         
 # -- Set how many triggers we want
-N = 100
-start = 21
+N = 20
+start = 0
 stop = start + N
 
 outfile = open('trigs_sg153.txt','w')
diff --git a/burstinj/s6/make_triggers_sn.py b/burstinj/s6/make_triggers_sn.py
new file mode 100644
index 00000000..6da71883
--- /dev/null
+++ b/burstinj/s6/make_triggers_sn.py
@@ -0,0 +1,146 @@
+import numpy as np
+import sys
+import os
+import re
+
+# -- Helper function for removing triggers outside a trigger list
+def find_in_segs(triglist, segs):
+    indx = np.zeros(len(triglist), dtype=bool)
+    for n in range(len(triglist)):
+        gps = triglist[n]
+        indx[n] = np.any( np.logical_and( gps>(segs['start']+8), gps<(segs['stop']-4)) )
+    return indx
+
+def check_scale(scale):
+    if scale not in possibleScales:
+        print
+        print '**********************'
+        print 'Scale factor not found'
+        print '**********************'
+        print 'Cannot find scale = {0}'.format(scale)
+        print
+        print 'No trigger file created for this scale'
+        scale = 0
+    return scale
+
+# ********************** Directory containing detected supernova triggers *****************************
+
+superFile = '/home/craig.cahillane/bayeswave/branches/craig/supernova/SN2007gr_H1H2L1V1_piro5_rho=3.5/'
+
+# *****************************************************************************************************
+
+# *************** Get info from the Log ****************
+namestring = """
+ GravEn_SimID     SimHrss      SimEgwR2    GravEn_Ampl  Internal_x   Internal_phi   External_x   External_phi  External_psi  FrameGPS     EarthCtrGPS     SimName               SimHpHp      SimHcHc      SimHpHc    GEO      GEOctrGPS       GEOfPlus       GEOfCross       GEOtErr       GEOcErr H1       H1ctrGPS        H1fPlus        H1fCross        H1tErr        H1cErr H2       H2ctrGPS        H2fPlus        H2fCross        H2tErr        H2cErr L1       L1ctrGPS        L1fPlus        L1fCross        L1tErr        L1cErr V1       V1ctrGPS        V1fPlus        V1fCross        V1tErr        V1cErr
+"""
+
+namelist = namestring.split()
+data = np.recfromtxt('BurstMDC-SN2007gr_piro5-Log.txt', names=namelist)
+
+waveform = data['SimName']
+hrss = data['SimHrss']
+phi = data['External_phi']
+x = data['External_x']
+theta = np.arccos(x)
+dec = np.pi/2 - theta
+gps = data['EarthCtrGPS']
+
+#snWaveNames = ['piroM5.0eta0.3fac0.2-plus','piroM5.0eta0.6fac0.2-plus','piroM10.0eta0.3fac0.2-plus','piroM10.0eta0.6fac0.2-plus']
+
+scaleFiles = os.listdir(superFile)
+possibleScales = []
+first_reg =  re.compile(r'scale_factor_\d*\.?\d*')
+second_reg = re.compile(r'\d+\.?\d*')
+for scaleFile in scaleFiles:
+    temp = re.findall(first_reg, scaleFile)
+    if temp:
+        temp2 = re.findall(second_reg,scaleFile)
+        if temp2: # If temp is not empty
+            possibleScales.append(float(temp2[0]))
+
+scale = 0
+
+if len(sys.argv) > 2:
+    print 'Too many arguments: using first arg as scale factor'
+    try:
+        scale = float(sys.argv[1])
+    except ValueError:
+        print 'First argument is not a number'
+        print 'Please try again'
+
+if len(sys.argv) == 2:
+    try:
+        scale = float(sys.argv[1])
+    except ValueError:
+        print 'Argument is not a number'
+        print 'Please try again'
+    
+scale = check_scale(scale)
+
+while scale == 0:
+    print 'Possible Scale Factors (Normalized to 10 kPc)'
+    for num in possibleScales:
+        print num
+    try:
+        scale = float(raw_input('What scale factor would you like for the triggers? '))
+        scale = check_scale(scale)
+    except ValueError:
+        print 'Input is not a number'
+
+scaleint = int(scale)
+if abs(scaleint - scale)< 0.0000001:  # check if scale is an integer
+    scale = scaleint
+scale_file = os.path.join(superFile,'scale_factor_{0}'.format(scale))
+titlelist = ['GoodData','Detected']
+data2 = np.recfromtxt(scale_file,names=titlelist)
+sn_detected = data2['Detected']
+print
+print 'Supernovas detected:', len(sn_detected)
+
+if(len(gps) != len(sn_detected)):
+    print 'ERROR: Number of gps times does not match number of injected supernovae'
+    sys.exit()
+
+totalSnWaveNames = []  # Stores the injected waveform names
+snWaveNames = []       # Stores the names of the waveforms found by the CoherentWaveBurst search at the choosen scale
+gps_detected = []      # Stores the GPS times of detected supernovae
+waveform_detected = [] # Stores the associated waveform model of the supernovae
+for i in range(len(sn_detected)):
+    if waveform[i] not in totalSnWaveNames:
+        totalSnWaveNames.append(waveform[i])
+    if sn_detected[i] == 1:
+        gps_detected.append(gps[i])
+        waveform_detected.append(waveform[i])
+        if waveform[i] not in snWaveNames:
+            snWaveNames.append(waveform[i])
+
+missingSnWaveNames = [] # Stores the waveforms not found at this scale factor
+print len(gps_detected), len(waveform_detected)
+if totalSnWaveNames != snWaveNames:
+    for wavename in totalSnWaveNames:
+        if wavename not in snWaveNames:
+            missingSnWaveNames.append(wavename)
+    print 'The search pipeline did not locate waveform bursts of the type', missingSnWaveNames
+
+# Set path to trigger files, using scale factors as directory names
+curDir = os.path.abspath('.')
+print 'Current Directory:', curDir
+snDir = os.path.join(curDir,'sn_trigs/{0}'.format(scale))
+if not os.path.exists(snDir):
+    os.makedirs(snDir)
+
+# Set number of triggers in each trigger file
+N = 20
+
+for wave in snWaveNames:
+    total_trigs = 0
+    outfile = open( os.path.join( snDir,'trigs_{0}.txt'.format(wave) ) ,'w')
+    for i in range(len(waveform_detected)):
+        if wave == waveform_detected[i]:
+            total_trigs += 1
+            outfile.write('{0}\n'.format(gps_detected[i]))
+            #outfile.write('{0} {1}\n'.format(gps_detected[i],waveform_detected[i]))
+        if total_trigs == N:
+            outfile.close()
+            break
+    outfile.close()
diff --git a/condor/s6/mdc_setup.py b/condor/s6/mdc_setup.py
index b6c9a0b1..4bf3f5f6 100644
--- a/condor/s6/mdc_setup.py
+++ b/condor/s6/mdc_setup.py
@@ -1,4 +1,7 @@
 # -----------------------------------
+# Customized for my directory
+# August 13, 2014, Craig Cahillane
+# -----------------------------------
 # Example Condor setup script for BWB
 # 2014, Jonah Kanner
 # ----------------------------------
@@ -9,29 +12,33 @@ import subprocess
 # ------------------
 # -- Set paramters
 # ------------------
-topdir = '/home/jkanner/baysewave/PEC/mdc_v2'
+topdir = '/home/craig.cahillane/bayeswave/PEC/sn2007'
 # topdir = '/home/jkanner/baysewave/test'
-mdcdir = '/home/jkanner/baysewave/svn/trunk/burstinj/s6'
-waveformList = ['sg153']
-scaleList = ['0.3']
-mdccache = '/home/jkanner/baysewave/svn/trunk/burstinj/s6/brst_s6.cache'
-mdclog = '/home/jkanner/baysewave/svn/trunk/burstinj/s6/BurstMDC-BRST_S6-Log.txt'
-bwb = '/home/jkanner/baysewave/svn/branches/condor_compile/src/BayesWaveBurst'
+mdcdir = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6'
+waveformList = ['piro5']
+scaleList = ['0.075','0.15','0.3','1']
+#scaleList = Marak's Supernova scale factor file
+mdccache = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/sn2007piro5.cache'
+mdclog = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/BurstMDC-SN2007_piro5-Log.txt'
+bwb = '/home/craig.cahillane/bayeswave/branches/craig/src/BayesWaveBurst'
 ifoList = ['H1', 'L1']
-frtypeList = ['H1_LDAS_C02_L2', 'L1_LDAS_C02_L2']
+frtypeList = ['H1_RDS_C03_L2', 'L1_RDS_C03_L2']
+#frtypeList = ['H1_LDAS_C02_L2', 'L1_LDAS_C02_L2']
 
 bwbargsfmt = """--ifo H1 --H1-flow 40 --H1-channel H1:LDAS-STRAIN \
        --ifo L1 --L1-flow 40 --L1-channel L1:LDAS-STRAIN \
        --H1-cache {wavedir}/H1.cache \
        --L1-cache {wavedir}/L1.cache \
-       --trigtime {gps} --srate 1024 --seglen 4 \
+       --trigtime {gps} --srate 4096 --seglen 4 \ 
        --bayesLine --PSDstart {gps} --PSDlength 4 \
-       --Niter 2000000 --NCmin 15  \
+       --Niter 2000 --NCmin 25 --NCmax 25 \
        --bayesLine --gnuplot \
        --MDC-channel [H1:GW-H,L1:GW-H]   \
        --MDC-cache [{cachefile},{cachefile}] \
        --MDC-prefactor {scale} \
+       --noAdaptTemperature --tempSpacing 1.5 --clusterProposal \
 """
+#Niter = 2000000, srate = 1024
 
 # -- Alternate parameters
 # waveformList = ['sg153', 'lwnb', 'qwnb']
diff --git a/condor/s6/mdc_setup_sn.py b/condor/s6/mdc_setup_sn.py
new file mode 100644
index 00000000..48018844
--- /dev/null
+++ b/condor/s6/mdc_setup_sn.py
@@ -0,0 +1,167 @@
+# -----------------------------------
+# Customized for my directory
+# August 13, 2014, Craig Cahillane
+# -----------------------------------
+# Example Condor setup script for BWB
+# 2014, Jonah Kanner
+# ----------------------------------
+import os
+import numpy as np
+import subprocess
+import glob
+import sys
+
+# ------------------
+# -- Set paramters
+# ------------------
+topdir = '/home/craig.cahillane/bayeswave/PEC/sn2007'
+# topdir = '/home/jkanner/baysewave/test'
+mdcdir = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/sn_trigs'
+#waveformList = ['piroM5.0eta0.3fac0.2-plus','piroM5.0eta0.6fac0.2-plus','piroM10.0eta0.3fac0.2-plus','piroM10.0eta0.6fac0.2-plus']
+#scaleList = ['0.075','0.15','0.3','1']
+#scaleList = Marak's Supernova scale factor file
+mdccache = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/sn2007piro5.cache'
+mdclog = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/BurstMDC-SN2007_piro5-Log.txt'
+bwb = '/home/craig.cahillane/bayeswave/branches/craig/src/BayesWaveBurst'
+ifoList = ['H1', 'L1']
+frtypeList = ['H1_RDS_C03_L2', 'L1_RDS_C03_L2']
+#frtypeList = ['H1_LDAS_C02_L2', 'L1_LDAS_C02_L2']
+channelname = 'LSC-STRAIN'
+#channelname = 'LDAS-STRAIN'
+
+bwbargsfmt = """--ifo H1 --H1-flow 40 --H1-channel H1:{channel} \
+       --ifo L1 --L1-flow 40 --L1-channel L1:{channel} \
+       --H1-cache {wavedir}/H1.cache \
+       --L1-cache {wavedir}/L1.cache \
+       --trigtime {gps} --srate 4096 --seglen 4 \ 
+       --bayesLine --PSDstart {gps} --PSDlength 4 \
+       --Niter 2000 --NCmin 25 --NCmax 25 \
+       --bayesLine --gnuplot \
+       --MDC-channel [H1:GW-H,L1:GW-H]   \
+       --MDC-cache [{cachefile},{cachefile}] \
+       --MDC-prefactor {scale} \
+       --noAdaptTemperature --tempSpacing 1.5 --clusterProposal \
+"""
+#Numbers for sg153, lwnb:  Niter = 2000000, srate = 1024
+
+# -- Alternate parameters
+# waveformList = ['sg153', 'lwnb', 'qwnb']
+# mdccache = '/home/jkanner/baysewave/svn/trunk/burstinj/s6/brst_s6.cache'
+# scaleList = ['0.15', '0.3', '0.6', '1.2']
+# topdir = '/home/jkanner/baysewave/test'
+
+# ---------------------------------
+# -- Define templates for run files
+# ---------------------------------
+submit_str = """
+executable={bwb}
+universe=standard
+arguments={bwbargs}
+output={top}/condorOut.txt
+error={top}/condorError.txt
+log={top}/condorLog.txt
+notification=never
+should_transfer_files=YES
+when_to_transfer_output = ON_EXIT
+stream_error=True
+stream_output=True
+queue 1
+"""
+
+# --------------
+# Fill scaleList
+# --------------
+scaleList = os.listdir(mdcdir)
+
+# -_-_-_-_-_-_-_-_-
+# Fill waveformList
+# _-_-_-_-_-_-_-_-_
+waveformList={}
+for scale in scaleList:
+    tempdir = os.path.join(mdcdir,scale)
+    waveformList[scale] = os.listdir(tempdir)
+
+# -----------------
+# Begin Main Script
+# -----------------
+dagfile = open( os.path.join(topdir, 'submit_all.sh'), 'w')
+
+for scale in scaleList:
+    scaledir = os.path.join(topdir,scale)
+    if not os.path.exists(scaledir): 
+        os.makedirs(scaledir)
+    for waveform in waveformList[scale]:
+        trigfile = os.path.join(mdcdir,'{0}/{1}'.format(scale,waveform))
+        trigList = np.loadtxt(trigfile)
+        wavedir = os.path.join(scaledir,waveform)
+        if not os.path.exists(wavedir):
+            os.makedirs(wavedir)
+        # ------------------------------------------------
+        # Call LIGO Data find for whole waveform directory
+        # ------------------------------------------------
+        start = int(trigList.min()) - 50
+        end   = int(trigList.max()) + 50
+        for ifo, frtype in zip(ifoList,frtypeList):
+            cachefilefmt = os.path.join(wavedir, '{0}.cache')
+            ldfcmd = "ligo_data_find --observatory {o} --type {frtype} -s {start} -e {end} --lal-cache | grep file > {cachefile}".format(o=ifo[0], frtype=frtype, cachefile = cachefilefmt.format(ifo), start=start, end=end)
+            print "Calling LIGO data find ..."
+            print ldfcmd
+            subprocess.call(ldfcmd, shell=True)
+        
+        for trig in trigList:
+            trig = str(trig)
+            trigdir = os.path.join(wavedir, 'job_'+trig)
+            if not os.path.exists(trigdir): os.makedirs(trigdir)
+            
+            bwbargs = bwbargsfmt.format(channel=channelname, gps=trig, wavedir=wavedir, cachefile=mdccache, scale=scale) 
+            submitname = os.path.join(trigdir, 'submit.txt')
+            submitfile = open( submitname, 'w' )
+            submitfile.write(submit_str.format(top=trigdir, bwb=bwb, bwbargs=bwbargs))
+            submitfile.close()
+            
+            dagfile.write("cd {0}\n".format(trigdir))
+            dagfile.write("condor_submit submit.txt\n\n")
+
+dagfile.close()       
+        
+
+
+#for waveform in waveformList:
+#    trigfile = os.path.join(mdcdir, 'trigs_{0}.txt'.format(waveform))
+#    trigList = np.loadtxt(trigfile)
+#    wavedir = os.path.join(topdir, waveform)
+#    if not os.path.exists(wavedir): os.makedirs(wavedir)
+#
+#    # ------------------------------------------------
+#    # Call LIGO Data find for whole waveform directory
+#    # ------------------------------------------------
+#    start = int(trigList.min()) - 50
+#    end   = int(trigList.max()) + 50
+#    for ifo, frtype in zip(ifoList,frtypeList):
+#        cachefilefmt = os.path.join(wavedir, '{0}.cache')
+#        ldfcmd = "ligo_data_find --observatory {o} --type {frtype} -s {start} -e {end} --lal-cache | grep file > {cachefile}".format(o=ifo[0], frtype=frtype, cachefile = cachefilefmt.format(ifo), start=start, end=end)
+#        print "Calling LIGO data find ..."
+#        print ldfcmd
+#        subprocess.call(ldfcmd, shell=True)
+#
+#    for scale in scaleList:
+#        scaledir = os.path.join(wavedir, scale)
+#        if not os.path.exists(scaledir): os.makedirs(scaledir)
+#        
+#        for trig in trigList:
+#            trig = str(trig)
+#            trigdir = os.path.join(scaledir, 'job_'+trig)
+#            if not os.path.exists(trigdir): os.makedirs(trigdir)
+#            
+#            bwbargs = bwbargsfmt.format(gps=trig, wavedir=wavedir, cachefile=mdccache, scale=scale) 
+#            submitname = os.path.join(trigdir, 'submit.txt')
+#            submitfile = open( submitname, 'w' )
+#            submitfile.write(submit_str.format(top=trigdir, bwb=bwb, bwbargs=bwbargs))
+#            submitfile.close()
+#            
+#            dagfile.write("cd {0}\n".format(trigdir))
+#            dagfile.write("condor_submit submit.txt\n\n")
+#
+#dagfile.close()
+print "... I'm afraid I can't do that."
+print "... Just kidding, I'm done."
diff --git a/postprocess/plot_waveform.py b/postprocess/plot_waveform.py
index ea199965..a99ceaf0 100644
--- a/postprocess/plot_waveform.py
+++ b/postprocess/plot_waveform.py
@@ -8,7 +8,6 @@ import argparse
 import os
 import pwd
 
-
 # -------------------------------------------------
 # Define helper function to extract median waveform
 # -------------------------------------------------
diff --git a/postprocess/s6/condor_pp.py b/postprocess/s6/condor_pp.py
index a3d35602..f1be19ff 100644
--- a/postprocess/s6/condor_pp.py
+++ b/postprocess/s6/condor_pp.py
@@ -3,7 +3,7 @@ import glob
 import os
 
 # -- Parameters
-mdclog = '/home/jkanner/baysewave/svn/trunk/burstinj/s6/BurstMDC-BRST_S6-Log.txt'
+mdclog = '/home/craig.cahillane/bayeswave/branches/craig/burstinj/s6/BurstMDC-BRST_S6-Log.txt'
 
 runfile = open('run_pp.sh', 'w')
 dirlist = glob.glob('*/job*')
@@ -18,7 +18,7 @@ for directory in dirlist:
     doitfile.write("""#! /bin/sh
 cd {directory}
 source /home/jkanner/.bashrc.mine
-python /home/jkanner/baysewave/svn/trunk/postprocess/skymap/skyview.py --mdc {mdclog}
+python /home/craig.cahillane/bayeswave/branches/craig/postprocess/plot_waveform.py --mdc=True
 """.format(directory=directory, mdclog=mdclog))
     doitfile.close()
     
-- 
GitLab