# TaskName.py # # David Adams # May 2009 # # Describe a prodsys task name. # # Convention appears to be that task names are fields separated with ".": # 1 - project, e.g. mc08 # 2 - dataset number # 3 - process name, e.g. J1_pythia_jetjet # 4 - xform type: evgen, simul, recon, merge, ... # 5 - underscore-separated tags, e.g. e403_s538_r635 # # For input tasks it is apparently allowed to insert the data type between the # last two fields, e.g. HITS ################################################################################ class TaskName: def __init__(self, in_tname, dbg =False): self.name = None if isinstance(in_tname, TaskName): tname = in_tname.name else: tname = in_tname words = tname.split(".") types = ["evgen", "simul", "digit", "recon", "merge"] self.nfield = len(words) if len(words) != 5 and len(words) != 6: if dbg: print "Task name has wrong # fields" return try: dsnumber = int(words[1]) except: if dbg: print "Task name has non-integer daaset number: " + words[1] return type = words[3] if not type in types: if dbg: print "Task name has invalid type: " + type return self.name = tname self.project = words[0] self.dsword = words[1] self.dsnumber = dsnumber self.process = words[2] self.type = type self.tag_string = words[self.nfield-1] self.tags = self.tag_string.split("_") self.data_type = None if self.nfield == 6: self.data_type = words[4] def copy(this): obj = TaskName(self.name) return obj # Return the name of task created if this task is processed with given tag. # The project for the new task may alos be specified. def add_tag(self, tag, project =None): lasttag = self.tags[len(self.tags)-1] chlasttag = lasttag[0] chtag = tag[0] if chtag == "s": type = "simul" elif chtag == "r": if chlasttag == "r": type = "merge" else: type = "recon" elif chtag == "t": type = "merge" else: return None if project == None: newproj = self.project else: newproj = project newname = newproj + "." + self.dsword + "." + self.process + "." newname += type + "." + self.tag_string + "_" + tag return TaskName(newname) def is_valid(self): return self.name def __str__(self): return self.name # Return the last tag. def last_tag(self): if len(self.tags) == 0: return "" return self.tags[len(self.tags)-1] ################################################################################