29 DAG construction tools.
40 from glue
import segments
41 from glue
import pipeline
44 __author__ =
"Kipp Cannon <kipp.cannon@ligo.org>, Chad Hanna <chad.hanna@ligo.org>"
46 __version__ =
"$Revision$"
59 which = subprocess.Popen([
'which',prog], stdout=subprocess.PIPE)
60 out = which.stdout.read().strip()
62 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)
68 host = socket.getfqdn()
70 return os.environ[
'TMPDIR']
72 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"
74 if 'cit' in host
or 'caltech.edu' in host:
75 tmp =
'/usr1/' + os.environ[
'USER']
76 print "falling back to ", tmp
78 if 'phys.uwm.edu' in host:
79 tmp =
'/localscratch/' + os.environ[
'USER']
80 print "falling back to ", tmp
82 if 'aei.uni-hannover.de' in host:
83 tmp =
'/local/user/' + os.environ[
'USER']
84 print "falling back to ", tmp
86 if 'phy.syr.edu' in host:
87 tmp =
'/usr1/' + os.environ[
'USER']
88 print "falling back to ", tmp
91 raise KeyError(
"$TMPDIR is not set and I don't recognize this environment")
105 def __init__(self, name, logpath = log_path()):
107 fh, logfile = tempfile.mkstemp(dir = log_path(), prefix = self.
basename +
'.dag.log.')
109 pipeline.CondorDAG.__init__(self,logfile)
115 def add_node(self, node, retry = 0):
116 node.set_retry(retry)
118 node.add_macro(
"macroid", self.
node_id)
119 node.add_macro(
"macronodename", node.get_name())
120 pipeline.CondorDAG.add_node(self, node)
122 def write_cache(self):
132 A generic job class for gstlal stuff
134 def __init__(self, executable, tag_base):
139 self.add_condor_cmd(
'getenv',
'True')
141 self.set_sub_file(tag_base+
'.sub')
142 self.set_stdout_file(
'logs/'+tag_base+
'-$(macroid)-$(macronodename)-$(cluster)-$(process).out')
143 self.set_stderr_file(
'logs/'+tag_base+
'-$(macroid)-$(macronodename)-$(cluster)-$(process).err')
149 A generic node class for gstlal stuff
151 def __init__(self, job, dag, p_node=[]):
152 pipeline.CondorDAGNode.__init__(self, job)
167 def breakupseg(seg, maxextent, overlap):
169 raise ValueError,
"maxextent must be positive, not %s" % repr(maxextent)
172 if abs(seg) < maxextent:
173 return segments.segmentlist([seg])
176 maxextent = max(int(abs(seg) / (int(abs(seg)) // int(maxextent) + 1)), overlap)
177 maxextent = int(math.ceil(abs(seg) / math.ceil(abs(seg) / maxextent)))
180 seglist = segments.segmentlist()
184 if (seg[0] + maxextent + overlap) < end:
185 seglist.append(segments.segment(seg[0], seg[0] + maxextent + overlap))
186 seg = segments.segment(seglist[-1][1] - overlap, seg[1])
188 seglist.append(segments.segment(seg[0], end))
194 def breakupsegs(seglist, maxextent, overlap):
195 newseglist = segments.segmentlist()
196 for bigseg
in seglist:
197 newseglist.extend(breakupseg(bigseg, maxextent, overlap))
201 def breakupseglists(seglists, maxextent, overlap):
202 for instrument, seglist
in seglists.iteritems():
203 newseglist = segments.segmentlist()
204 for bigseg
in seglist:
205 newseglist.extend(breakupseg(bigseg, maxextent, overlap))
206 seglists[instrument] = newseglist