32 DAG construction tools. 43 from ligo
import segments
44 from glue
import pipeline
47 __author__ =
"Kipp Cannon <kipp.cannon@ligo.org>, Chad Hanna <chad.hanna@ligo.org>" 49 __version__ =
"$Revision$" 62 which = subprocess.Popen([
'which',prog], stdout=subprocess.PIPE)
63 out = which.stdout.read().strip()
65 print >>sys.stderr,
"ERROR: could not find %s in your path, have you built the proper software and sourced the proper environment scripts?" % (prog,prog)
71 host = socket.getfqdn()
73 return os.environ[
'TMPDIR']
75 print "\n\n!!!! $TMPDIR NOT SET !!!!\n\n\tPLEASE email your admin to tell them to set $TMPDIR to be the place where a users temporary files should be\n" 77 if 'cit' in host
or 'caltech.edu' in host:
78 tmp =
'/usr1/' + os.environ[
'USER']
79 print "falling back to ", tmp
81 if 'phys.uwm.edu' in host:
82 tmp =
'/localscratch/' + os.environ[
'USER']
83 print "falling back to ", tmp
85 if 'aei.uni-hannover.de' in host:
86 tmp =
'/local/user/' + os.environ[
'USER']
87 print "falling back to ", tmp
89 if 'phy.syr.edu' in host:
90 tmp =
'/usr1/' + os.environ[
'USER']
91 print "falling back to ", tmp
94 raise KeyError(
"$TMPDIR is not set and I don't recognize this environment")
108 def __init__(self, name, logpath = log_path()):
110 fh, logfile = tempfile.mkstemp(dir = log_path(), prefix = self.
basename +
'.dag.log.')
112 pipeline.CondorDAG.__init__(self,logfile)
118 def add_node(self, node, retry = 0):
119 node.set_retry(retry)
121 node.add_macro(
"macroid", self.
node_id)
122 node.add_macro(
"macronodename", node.get_name())
123 pipeline.CondorDAG.add_node(self, node)
125 def write_cache(self):
135 A generic job class for gstlal stuff 137 def __init__(self, executable, tag_base):
142 self.add_condor_cmd(
'getenv',
'True')
144 self.set_sub_file(tag_base+
'.sub')
145 self.set_stdout_file(
'logs/'+tag_base+
'-$(macroid)-$(macronodename)-$(cluster)-$(process).out')
146 self.set_stderr_file(
'logs/'+tag_base+
'-$(macroid)-$(macronodename)-$(cluster)-$(process).err')
152 A generic node class for gstlal stuff 154 def __init__(self, job, dag, p_node=[]):
155 pipeline.CondorDAGNode.__init__(self, job)
170 def breakupseg(seg, maxextent, overlap):
172 raise ValueError,
"maxextent must be positive, not %s" % repr(maxextent)
175 if abs(seg) < maxextent:
176 return segments.segmentlist([seg])
179 maxextent = max(int(abs(seg) / (int(abs(seg)) // int(maxextent) + 1)), overlap)
180 maxextent = int(math.ceil(abs(seg) / math.ceil(abs(seg) / maxextent)))
183 seglist = segments.segmentlist()
187 if (seg[0] + maxextent + overlap) < end:
188 seglist.append(segments.segment(seg[0], seg[0] + maxextent + overlap))
189 seg = segments.segment(seglist[-1][1] - overlap, seg[1])
191 seglist.append(segments.segment(seg[0], end))
197 def breakupsegs(seglist, maxextent, overlap):
198 newseglist = segments.segmentlist()
199 for bigseg
in seglist:
200 newseglist.extend(breakupseg(bigseg, maxextent, overlap))
204 def breakupseglists(seglists, maxextent, overlap):
205 for instrument, seglist
in seglists.iteritems():
206 newseglist = segments.segmentlist()
207 for bigseg
in seglist:
208 newseglist.extend(breakupseg(bigseg, maxextent, overlap))
209 seglists[instrument] = newseglist