def Open(self): files = [] names = map( lambda ms: '_'.join( filter(None, (self.name, Mode.getName(ms[0]), Sample.getName(ms[1])))), self.modesample) for f in os.listdir('output'): if not f.endswith('.root'): continue if filter(lambda n: f.startswith(n), names): files.append('output/' + f) if len(files) > 1: self._close = 'delete _chain;' return '\n'.join(['', '_chain = new TChain("result");'] + ['_chain->Add("{0}");'.format(f) for f in files] + ['return _chain;', '']) elif len(files) == 1: self._close = '_file->Close();' return '\n'.join([ '', '_file = TFile::Open("{0}");'.format(files[0]), 'TTree* tree = (TTree*)_file->Get("result");', 'return tree;' '' ]) else: raise IndexError('Couldn\'t find files for ' + self.title)
def submit(self, **options): name = options.get('name', self.name) script = options.get('script', self.script) mail = options.get('mail', self.mail) successmail = options.get('successmail', self.successmail) hours = options.get('hours', self.hours) vmem = options.get('vmem', self.vmem) timestamp = datetime.now().strftime('%y%m%d_%H%M%S') cwd = getcwd() if not exists('log'): mkdir('log') settings = [] if mail: settings += ['-m', 'eas' if successmail else 'as', '-M', mail] if hours: settings += ['-l', 'h_rt="{0}:00:00"'.format(hours)] if vmem: settings += ['-l', 'h_vmem="{0}"'.format(vmem)] settings += ['job.sh', cwd, script] for m, s in set(map(lambda f: (f[1], f[2]), self.inputfiles.files)): chain = TChain(self.treename) map(lambda f: chain.Add(f[0]), list(self.inputfiles.iterate(mode=m, sample=s))) nentries = chain.GetEntries() nparts = max(1, nentries / 1500000) boundaries = (lambda l: zip(l, l[1:]))( [i * nentries / nparts for i in range(nparts + 1)]) for part, (upper, lower) in enumerate(boundaries): partl = 'part{0}'.format(part) command = ['condor_qsub -j y -o'] command.append('{0}/log/{1}.txt'.format( cwd, '_'.join( filter(None, (name, Mode.getName(m), Sample.getName(s), partl, timestamp))))) command += [ '-N', '.'.join( filter( None, (name, Mode.getName(m), Sample.getName(s), partl))) ] command += settings command.append(name) command += map(str, (m, s, part, upper, lower)) # print ' '.join(command) call(' '.join(command), shell=True)
def run(self, name=None, mode=None, sample=None, part=None, boundaries=None): if not exists('output'): mkdir('output') outputname = 'output/{0}.root'.format('_'.join( filter(None, (name, Mode.getName(mode), Sample.getName(sample), 'part{0}'.format(part) if part is not None else None)))) self.analyzer.writeOutput(outputname) self.analyzer.initialize() if part is None: for f, m, s, x, n in self.inputfiles.iterate(mode=mode, sample=sample): inputfile = TFile.Open(f) tree = inputfile.Get(self.treename) self.analyzer.process(tree, m, s, x, n) inputfile.Close() else: nentries = 0 for f, m, s, x, n in self.inputfiles.iterate(mode=mode, sample=sample): inputfile = TFile.Open(f) tree = inputfile.Get(self.treename) thisentries = tree.GetEntries() if nentries + thisentries > boundaries[ 0] and nentries < boundaries[1]: first = max(0, boundaries[0] - nentries) last = min(thisentries, boundaries[1] - nentries) self.analyzer.process(tree, m, s, x, n, boundaries=(first, last)) inputfile.Close() nentries += thisentries self.analyzer.finalize()