def process(self, set):

    self.message('Processing channel %s' % set['channel'])

    # Setting the indir directory
    indir = '%s/scratch/%s/YieldTrees' % (
      Common.NeatDirectory, self.getParameter('input')
    )
    sampletype = self.getParameter('sample','yield')
    if sampletype == 'training':
      indir = '%s/scratch/%s/TrainingTrees' % (
        Common.NeatDirectory, self.getParameter('input')
      )
    elif sampletype == 'testing':
      indir = '%s/scratch/%s/TestingTrees' % (
        Common.NeatDirectory, self.getParameter('input')
      )
    elif sampletype != 'yield':
      raise ProcessorError('Unknown sample option %s (allowed options: training, testing and yield).' % sampletype)

    if self.isParameter('xcheck'):
      indir = '%s/scratch/%s/XCheckTrees/%s' % (
        Common.NeatDirectory, self.getParameter('input'), self.getParameter('xcheck')
      )
            
    # Setting the outdir directory
    outdir = '%s/scratch/%s/YieldHistograms' % (
      Common.NeatDirectory, self.getParameter('input')
    )
    if sampletype == 'training':
      outdir = '%s/scratch/%s/TrainingHistograms' % (
        Common.NeatDirectory, self.getParameter('input')
      )
    elif sampletype == 'testing':
      outdir = '%s/scratch/%s/TestingHistograms' % (
        Common.NeatDirectory, self.getParameter('input')
      )
      
    if self.isParameter('xcheck'):
      outdir = '%s/scratch/%s/XCheckHistograms/%s' % (
        Common.NeatDirectory, self.getParameter('input'), self.getParameter('xcheck')
      )
          
    # Check for output directory
    if not os.path.exists(outdir):
      os.makedirs(outdir)

    # File mode for writting histograms
    mode = 'recreate'
 
    # Create the list of sample
    samples = None
    if type(Common.YieldSignals) == list:
      samples = Common.YieldBackgrounds + Common.YieldSignals
      if len(Common.YieldSignals) > 1:
        samples = samples + [''.join(Common.YieldSignals)]
    else:
      samples = Common.YieldBackgrounds + [Common.YieldSignals]
    samples = samples + [Common.Data] 

    # Loop over all the samples with trees
    for systematic in Common.Systematics + ['']:
      for sample in samples:

        # No systematics for QCD and DATA
        if (sample in Common.NoSystematics) and systematic != '': continue

        # No systematics in case of xchecks
        if self.isParameter('xcheck') and systematic != '': continue

        self.message('Processing systematic %s samples %s.' % (systematic, sample))

        infile = '%s/%s.root' % (
          indir, Common.filename(set, sample, systematic)
        )        

        # Check in the input file exist
        if not os.path.isfile(infile):
          self.message('Warning missing input file %s skipping ...' % infile)
          continue
        
        # Create a topovar reader only for neat output
        topovars = TopovarReader([Common.NeatOutputName], infile)

        outfile = '%s/%s.root' % (
          outdir, Common.filename(set, sample, systematic)
        )        
        
        # Create a histogram producer
        histograms = HistogramWriter(outfile, mode)
        # Histogram booking (hardcoded not many options really)
        histograms.book('%s_400' % Common.NeatOutputName, 400, 0., 1.)
        histograms.book('%s_200' % Common.NeatOutputName, 200, 0., 1.)
        histograms.book('%s_100' % Common.NeatOutputName, 100, 0., 1.)
        histograms.book('%s_50' % Common.NeatOutputName, 50, 0., 1.)
        histograms.book('%s_25' % Common.NeatOutputName, 25, 0., 1.)
        
        # Loop over the tree producing histograms of neat output        
        for entry in xrange(topovars.getEntries()):
          if entry % 5000 == 0 and entry != 0:
            self.message('Reading %d events.' % entry)
          # Read one event
          event = topovars.read(entry)
          # Fill the histogram
          histograms.fill(getattr(event,Common.NeatOutputName), getattr(event,Common.EventWeight))
    def process(self, set):

        self.message('Processing channel %s' % set['channel'])

        # Setting the indir directory
        indir = '%s/scratch/%s/YieldTrees' % (Common.NeatDirectory,
                                              self.getParameter('input'))
        sampletype = self.getParameter('sample', 'yield')
        if sampletype == 'training':
            indir = '%s/scratch/%s/TrainingTrees' % (
                Common.NeatDirectory, self.getParameter('input'))
        elif sampletype == 'testing':
            indir = '%s/scratch/%s/TestingTrees' % (Common.NeatDirectory,
                                                    self.getParameter('input'))
        elif sampletype != 'yield':
            raise ProcessorError(
                'Unknown sample option %s (allowed options: training, testing and yield).'
                % sampletype)

        if self.isParameter('xcheck'):
            indir = '%s/scratch/%s/XCheckTrees/%s' % (
                Common.NeatDirectory, self.getParameter('input'),
                self.getParameter('xcheck'))

        # Setting the outdir directory
        outdir = '%s/scratch/%s/YieldHistograms' % (Common.NeatDirectory,
                                                    self.getParameter('input'))
        if sampletype == 'training':
            outdir = '%s/scratch/%s/TrainingHistograms' % (
                Common.NeatDirectory, self.getParameter('input'))
        elif sampletype == 'testing':
            outdir = '%s/scratch/%s/TestingHistograms' % (
                Common.NeatDirectory, self.getParameter('input'))

        if self.isParameter('xcheck'):
            outdir = '%s/scratch/%s/XCheckHistograms/%s' % (
                Common.NeatDirectory, self.getParameter('input'),
                self.getParameter('xcheck'))

        # Check for output directory
        if not os.path.exists(outdir):
            os.makedirs(outdir)

        # File mode for writting histograms
        mode = 'recreate'

        # Create the list of sample
        samples = None
        if type(Common.YieldSignals) == list:
            samples = Common.YieldBackgrounds + Common.YieldSignals
            if len(Common.YieldSignals) > 1:
                samples = samples + [''.join(Common.YieldSignals)]
        else:
            samples = Common.YieldBackgrounds + [Common.YieldSignals]
        samples = samples + [Common.Data]

        # Loop over all the samples with trees
        for systematic in Common.Systematics + ['']:
            for sample in samples:

                # No systematics for QCD and DATA
                if (sample in Common.NoSystematics) and systematic != '':
                    continue

                # No systematics in case of xchecks
                if self.isParameter('xcheck') and systematic != '': continue

                self.message('Processing systematic %s samples %s.' %
                             (systematic, sample))

                infile = '%s/%s.root' % (
                    indir, Common.filename(set, sample, systematic))

                # Check in the input file exist
                if not os.path.isfile(infile):
                    self.message('Warning missing input file %s skipping ...' %
                                 infile)
                    continue

                # Create a topovar reader only for neat output
                topovars = TopovarReader([Common.NeatOutputName], infile)

                outfile = '%s/%s.root' % (
                    outdir, Common.filename(set, sample, systematic))

                # Create a histogram producer
                histograms = HistogramWriter(outfile, mode)
                # Histogram booking (hardcoded not many options really)
                histograms.book('%s_400' % Common.NeatOutputName, 400, 0., 1.)
                histograms.book('%s_200' % Common.NeatOutputName, 200, 0., 1.)
                histograms.book('%s_100' % Common.NeatOutputName, 100, 0., 1.)
                histograms.book('%s_50' % Common.NeatOutputName, 50, 0., 1.)
                histograms.book('%s_25' % Common.NeatOutputName, 25, 0., 1.)

                # Loop over the tree producing histograms of neat output
                for entry in xrange(topovars.getEntries()):
                    if entry % 5000 == 0 and entry != 0:
                        self.message('Reading %d events.' % entry)
                    # Read one event
                    event = topovars.read(entry)
                    # Fill the histogram
                    histograms.fill(getattr(event, Common.NeatOutputName),
                                    getattr(event, Common.EventWeight))