Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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()