#! /usr/bin/env python

"""\
%prog yodafile [yodafile2]

Convert a YODA data file to another YODA file (for convenient tidying and filtering).
Like yodacnv, but allows output to stdout since the output format isn't auto-detected.
"""

import yoda, os, sys, optparse
from yoda.script_helpers import parse_x2y_args, filter_aos

parser = optparse.OptionParser(usage=__doc__)
parser.add_option("-m", "--match", dest="MATCH", metavar="PATT", default=None,
                  help="only write out histograms whose path matches this regex")
parser.add_option("-M", "--unmatch", dest="UNMATCH", metavar="PATT", default=None,
                  help="exclude histograms whose path matches this regex")
parser.add_option("--as-scatters", dest="AS_SCATTERS", action="store_true", default=False,
                  help="convert all input analysis objects to Scatter types")

opts, args = parser.parse_args()
in_out = parse_x2y_args(args, ".yoda", ".yoda")
if not in_out:
    sys.stderr.write("You must specify the YODA input and output file names\n")
    sys.exit(1)

for i, o in in_out:
    analysisobjects = yoda.readYODA(i)
    filter_aos(analysisobjects, opts.MATCH, opts.UNMATCH)
    if opts.AS_SCATTERS:
        analysisobjects = [ao.mkScatter() for ao in analysisobjects]
    yoda.writeYODA(analysisobjects, o)
