- from Ganga.GPIDev.Adapters.ISplitter import ISplitter
- from Ganga.GPIDev.Schema import *
- from TbQuery import TbQuery
- from collections import defaultdict
- from Ganga.GPIDev.Base.Proxy import addProxy, stripProxy
-
- class TbDataset(ISplitter):
- _name = "TbDataset"
- _schema = Schema(Version(1,0), {
- 'filesPerJob' : SimpleItem(defvalue=1),
- 'maxFiles' : SimpleItem(defvalue=1),
- 'ignoremissing': SimpleItem(defvalue=False),
- 'Files' : SimpleItem(defvalue={}),
- 'AlignmentFiles' : SimpleItem(defvalue={}),
- 'PixelConfigFiles' : SimpleItem(defvalue={}),
- 'TimingConfigFiles' : SimpleItem(defvalue={}),
- 'Month' : SimpleItem(defvalue=""),
- 'run' : SimpleItem(defvalue=0),
- 'prefix' : SimpleItem(defvalue=""),
- 'AutoConfig' : SimpleItem(defvalue=True) })
- _exportmethods = [ 'split','optionsString' ]
-
- def split(self,job):
- from Ganga.GPIDev.Lib.Job import Job
-
- subjobs = []
- for run in self.Files.keys():
- j = addProxy(self.createSubjob(job))
- # j.splitter = None
- # j.merger = None
- jp = stripProxy(j)
- jp._splitter_data = self.optionsString(run)
- subjobs.append(jp)
-
- print "Submitting jobs for %d runs" %( len(subjobs))
- return subjobs
-
- def __construct__(self,args):
- if len( args ) == 0 : return
- self.Month = args[0]
- for r in args[1]:
- query = TbQuery()
- query.Month = self.Month
- query.Run = r
- print "Looking for %s/Run%d" %(self.Month, r )
- files = query.getFiles()
- if len(files) != 0 : self.Files[r] = []
- for f in files:
- self.Files[r].append(f)
-
- if self.AutoConfig:
- config_files = query.getConfiguration()
- alignment_file = ""
- for f in config_files:
- if f.find("Alignment") != -1:
- if alignment_file != "": alignment_file = f
- elif f.find("mille") != -1: alignment_file = f
- # elif f.find(self.prefix) != -1 : alignment_file = f
- elif f.find("PixelConfig") != -1:
- if r not in self.PixelConfigFiles.keys():
- self.PixelConfigFiles[r] = []
- self.PixelConfigFiles[r].append(f)
- elif f.find("TimingConfig") != -1: self.TimingConfigFiles[r] = f
- if alignment_file != "" : self.AlignmentFiles[r] = alignment_file
-
-
- def optionsString(self, run):
-
- files_for_this_run = self.Files[run]
- if len( files_for_this_run ) == 0 :
- return ""
- output = "from Configurables import TbDataSvc \n"
- output += "TbDataSvc().Input = ['" + files_for_this_run[0] +"'"
-
- for f in range(1, len(files_for_this_run)):
- output += ",'"+files_for_this_run[f]+"'"
- output += "]"
- # now add the configuration files ...
- if self.AutoConfig:
- pixel_config = []
- if run in self.PixelConfigFiles.keys() :
- pixel_config = self.PixelConfigFiles[run]
- output+= " \nTbDataSvc().PixelConfigFile += ['" + pixel_config[0] +"'"
- for f in range(1,len(pixel_config)):
- output += ",'"+pixel_config[f]+"'"
- output += "]"
- timing_config = ""
- if run in self.TimingConfigFiles.keys() :
- timing_config = self.TimingConfigFiles[run]
- output += " \nTbDataSvc().TimingConfigFile = '%s'" %(timing_config)
-
- alignment = ""
- if run in self.AlignmentFiles.keys() :
- alignment = self.AlignmentFiles[run]
- output += " \nTbDataSvc().AlignmentFile = '%s'" %(alignment)
-
- return output
-