#! /usr/bin/env python
import lighthisto
import logging
import sys

if sys.version_info[:3] < (2,4,0):
    print "rivet scripts require Python version >= 2.4.0... exiting"
    sys.exit(1)

import os, copy, re
from math import sqrt

## Try to load faster but non-standard cElementTree module
try:
    import xml.etree.cElementTree as ET
except ImportError:
    try:
        import cElementTree as ET
    except ImportError:
        try:
            import xml.etree.ElementTree as ET
        except:
            sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n")
            sys.exit(1)

# #############################################

def fillAbove(desthisto, sourcehistosbyptmin):
    for i,b in enumerate(desthisto.getBins()):
        ## Fill bins with pT-ordered histos (so that 'highest always wins')
        for ptmin, h in sorted(sourcehistosbyptmin.iteritems()):
            newb = h.getBin(i)
            if newb.xlow >= ptmin:
                b.val =  newb.val
                b.errplus =  newb.errplus
                b.errminus =  newb.errminus
                b._focus= newb._focus

def mergeByPt(hpath, sqrts):
    global inhistos
    global outhistos
    try:
        fillAbove(outhistos[hpath], inhistos[hpath][float(sqrts)])
    except:
        pass

def useOnePt(hpath, sqrts, ptmin):
    global inhistos
    global outhistos
    try:
       ## Find best pT_min match
        ptmins = inhistos[hpath][float(sqrts)].keys()
        closest_ptmin = None
        for ptm in ptmins:
            if closest_ptmin is None or \
                    abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)):
                closest_ptmin = ptm
        if closest_ptmin != float(ptmin):
            logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \
                                "using pTmin=%e instead" % closest_ptmin)
        outhistos[hpath] =  inhistos[hpath][float(sqrts)][closest_ptmin]
    except:
        pass

# #######################################

if __name__ == "__main__":
    import logging
    from optparse import OptionParser, OptionGroup
    parser = OptionParser(usage="%prog name")
    verbgroup = OptionGroup(parser, "Verbosity control")
    verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL",
                         default=logging.INFO, help="print debug (very verbose) messages")
    verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL",
                         default=logging.INFO, help="be very quiet")
    parser.add_option_group(verbgroup)
    (opts, args) = parser.parse_args()
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")


    ## Prefix used in dat file headers
    headerprefix = "# "


    ## Check args
    if len(args) < 1:
        logging.error("Must specify at least the name of the files")
        sys.exit(1)

aidafiles=["-Run-II-UE.aida"    ,"-Run-II-Jets-1.aida","-Run-II-Jets-2.aida",\
           "-Run-II-Jets-3.aida","-Run-II-Jets-4.aida","-Run-II-Jets-5.aida",\
           "-Run-II-Jets-6.aida","-Run-II-Jets-7.aida",\
           "-Run-I-UE.aida"    ,"-Run-I-Jets-1.aida","-Run-I-Jets-2.aida",\
           "-Run-I-Jets-3.aida","-Run-I-Jets-4.aida","-Run-I-Jets-5.aida",\
           "-630-UE.aida"      ,"-630-Jets-1.aida"  ,"-630-Jets-2.aida"  ,\
           "-630-Jets-3.aida"]

## Get histos
inhistos = {}
outhistos={}
weights = {}
for f in aidafiles:
    file=args[0]+f
    if(file.find("Run-II-UE")>0) :
        sqrts=1960
        ptmin=0.
    elif(file.find("Run-II-Jets-1")>0) :
        sqrts=1960
        ptmin=36.
    elif(file.find("Run-II-Jets-2")>0) :
        sqrts=1960
        ptmin=55.
    elif(file.find("Run-II-Jets-3")>0) :
        sqrts=1960
        ptmin=75.
    elif(file.find("Run-II-Jets-4")>0) :
        sqrts=1960
        ptmin=100.
    elif(file.find("Run-II-Jets-5")>0) :
        sqrts=1960
        ptmin=125.
    elif(file.find("Run-II-Jets-6")>0) :
        ptmin=175.
        sqrts=1960
    elif(file.find("Run-II-Jets-7")>0) :
        sqrts=1960
        ptmin=265.
    elif(file.find("630-UE")>0) :
        sqrts=630
        ptmin=0.
    elif(file.find("630-Jets-1")>0) :
        sqrts=630
        ptmin=30.
    elif(file.find("630-Jets-2")>0) :
        sqrts=630
        ptmin=55.
    elif(file.find("630-Jets-3")>0) :
        sqrts=630
        ptmin=90.
    elif(file.find("Run-I-UE")>0) :
        sqrts=1800
        ptmin=0.
    elif(file.find("Run-I-Jets-1")>0) :
        sqrts=1800
        ptmin=30.
    elif(file.find("Run-I-Jets-2")>0) :
        sqrts=1800
        ptmin=55.
    elif(file.find("Run-I-Jets-3")>0) :
        sqrts=1800
        ptmin=80.
    elif(file.find("Run-I-Jets-4")>0) :
        sqrts=1800
        ptmin=105.
    elif(file.find("Run-I-Jets-5")>0) :
        sqrts=1800
        ptmin=175.

    if not os.access(file, os.R_OK):
        logging.error("%s can not be read" % file)
        break
    try:
        tree = ET.parse(file)
    except:
        logging.error("%s can not be parsed as XML" % file)
        break
    tree = ET.parse(file)
    ## Get histos from this AIDA file
    for dps in tree.findall("dataPointSet"):
        h = lighthisto.Histo.fromDPS(dps)
        # di-jet decorrelations
        # jet shapes
        if(h.fullPath().find("5992206")>0 or h.fullPath().find("6217184")>0 or
           h.fullPath().find("LEADINGJETS")>0 or h.fullPath().find("7662670")>0 or
           h.fullPath().find("7057202")>0 or h.fullPath().find("6450792")>0 or
           h.fullPath().find("7828950")>0 or h.fullPath().find("4751469")>0 or
           h.fullPath().find("5839831")>0 or h.fullPath().find("4563131")>0 or
           h.fullPath().find("4517016")>0 or h.fullPath().find("3618439")>0 or
           h.fullPath().find("8591881")>0) :
           if not inhistos.has_key(h.fullPath()):
               inhistos[h.fullPath()] = {}
           tmpE = inhistos[h.fullPath()]
           if not tmpE.has_key(sqrts):
               tmpE[sqrts] = {}
           tmpP = tmpE[sqrts]
           if not tmpP.has_key(ptmin):
               tmpP[ptmin] = h
           else:
                raise Exception("A set with ptmin = %s already exists" % ( ptmin))
        elif(h.fullPath().find("8233977")>0 or h.fullPath().find("NOTE_9936")>0 or
             h.fullPath().find("3905616")>0 or h.fullPath().find("3324664")>0 or
             h.fullPath().find("4796047")>0 or h.fullPath().find("1865951")>0 or
             h.fullPath().find("2089246")>0 or h.fullPath().find("3108457")>0 or
             h.fullPath().find("3349578")>0 or h.fullPath().find("3541940")>0 or
             h.fullPath().find("3214044")>0 or h.fullPath().find("2952106")>0 ) :
            outhistos[h.fullPath()] = h

aidafiles=["-Run-II-Jets-8.aida","-Run-II-Jets-9.aida","-Run-II-Jets-10.aida","-Run-II-Jets-11.aida",\
           "-Run-I-Jets-6.aida","-Run-I-Jets-7.aida","-Run-I-Jets-8.aida"]

for f in aidafiles:
    file=args[0]+f
    if(file.find("Run-II-Jets-8")>0) :
        sqrts=1960
        ptmin=0.150
    elif(file.find("Run-II-Jets-9")>0) :
        sqrts=1960
        ptmin=0.400
    elif(file.find("Run-II-Jets-10")>0) :
        sqrts=1960
        ptmin=0.600
    elif(file.find("Run-II-Jets-11")>0) :
        sqrts=1960
        ptmin=1.000
    elif(file.find("Run-I-Jets-6")>0) :
        sqrts=1800
        ptmin=0.150
    elif(file.find("Run-I-Jets-7")>0) :
        sqrts=1800
        ptmin=0.5
    elif(file.find("Run-I-Jets-8")>0) :
        sqrts=1800
        ptmin=0.8
    if not os.access(file, os.R_OK):
        logging.error("%s can not be read" % file)
        break
    try:
        tree = ET.parse(file)
    except:
        logging.error("%s can not be parsed as XML" % file)
        break
    tree = ET.parse(file)
    ## Get histos from this AIDA file
    for dps in tree.findall("dataPointSet"):
        h = lighthisto.Histo.fromDPS(dps)
        if(h.fullPath().find("8566488")>0 or h.fullPath().find("8320160")>0) :
           if not inhistos.has_key(h.fullPath()):
               inhistos[h.fullPath()] = {}
           tmpE = inhistos[h.fullPath()]
           if not tmpE.has_key(sqrts):
               tmpE[sqrts] = {}
           tmpP = tmpE[sqrts]
           if not tmpP.has_key(ptmin):
               tmpP[ptmin] = h
           else:
                raise Exception("A set with ptmin = %s already exists" % ( ptmin))
        elif(h.fullPath().find("8093652")>0 or h.fullPath().find("3418421")>0 or 
             h.fullPath().find("4266730")>0) :
           if not inhistos.has_key(h.fullPath()):
               inhistos[h.fullPath()] = {}
           tmpE = inhistos[h.fullPath()]
           if not tmpE.has_key(sqrts):
               tmpE[sqrts] = {}
           tmpP = tmpE[sqrts]
           if not tmpP.has_key(1000.*ptmin):
               tmpP[1000.*ptmin] = h
           else:
                raise Exception("A set with ptmin = %s already exists" % ( 1000.*ptmin))

## Make empty output histos if needed
for hpath,hsets in inhistos.iteritems():
    if( (hpath.find("6217184")>0 and hpath.find("d13-x01-y01")>0 ) or
        hpath.find("LEADINGJETS")>0 or hpath.find("7662670")>0 or
        hpath.find("7057202")>0 or hpath.find("6450792")>0 or
        hpath.find("7828950")>0 or hpath.find("8566488")>0 or
        hpath.find("8320160")>0 or hpath.find("8093652")>0 or
        hpath.find("4751469")>0 or hpath.find("5839831")>0 or
        hpath.find("4563131")>0 or hpath.find("4517016")>0 or
        hpath.find("3618439")>0 or hpath.find("4266730")>0 or
        hpath.find("3418421")>0 or hpath.find("8591881")>0) :
        workhisto = copy.deepcopy(hsets.values()[0].values()[0])
        outhistos[hpath] = workhisto
        ## Empty the bin set for histos which we're going to merge
        for b in outhistos[hpath]:
            b.val = 0
            b.errplus = 0
            b.errminus = 0
            b._focus= None


## Field analysis
logging.info("Processing CDF_2001_S4751469")
## Angular distributions in different pT bins
useOnePt("/CDF_2001_S4751469/d01-x01-y01", "1800", "0")
useOnePt("/CDF_2001_S4751469/d01-x01-y02", "1800", "0")
useOnePt("/CDF_2001_S4751469/d01-x01-y03", "1800", "30")
useOnePt("/CDF_2001_S4751469/d02-x01-y01", "1800", "0")
useOnePt("/CDF_2001_S4751469/d02-x01-y02", "1800", "0")
useOnePt("/CDF_2001_S4751469/d02-x01-y03", "1800", "30")
## Number, profile in pT_lead (True?)
useOnePt("/CDF_2001_S4751469/d03-x01-y01", "1800", "0")
useOnePt("/CDF_2001_S4751469/d03-x01-y02", "1800", "0")
useOnePt("/CDF_2001_S4751469/d03-x01-y03", "1800", "0")
#mergeByPt("/CDF_2001_S4751469/d04-x01-y01", "1800")
#mergeByPt("/CDF_2001_S4751469/d04-x01-y02", "1800")
#mergeByPt("/CDF_2001_S4751469/d04-x01-y03", "1800")
useOnePt("/CDF_2001_S4751469/d04-x01-y01", "1800", "30")
useOnePt("/CDF_2001_S4751469/d04-x01-y02", "1800", "30")
useOnePt("/CDF_2001_S4751469/d04-x01-y03", "1800", "30")
## pT sums, profile in pT_lead (True?)
useOnePt("/CDF_2001_S4751469/d05-x01-y01", "1800",  "0")
useOnePt("/CDF_2001_S4751469/d05-x01-y02", "1800",  "0")
useOnePt("/CDF_2001_S4751469/d05-x01-y03", "1800",  "0")
# mergeByPt("/CDF_2001_S4751469/d06-x01-y01", "1800")
# mergeByPt("/CDF_2001_S4751469/d06-x01-y02", "1800")
# mergeByPt("/CDF_2001_S4751469/d06-x01-y03", "1800")
useOnePt("/CDF_2001_S4751469/d06-x01-y01", "1800", "30")
useOnePt("/CDF_2001_S4751469/d06-x01-y02", "1800", "30")
useOnePt("/CDF_2001_S4751469/d06-x01-y03", "1800", "30")
## pT distributions (use a specific pT cut run?)
useOnePt("/CDF_2001_S4751469/d07-x01-y01", "1800", "0")
useOnePt("/CDF_2001_S4751469/d07-x01-y02", "1800", "0")
useOnePt("/CDF_2001_S4751469/d07-x01-y03", "1800", "30")

## Acosta analysis
logging.info("Processing CDF_2004_S5839831")
## Mean pT, profile in ET_lead
mergeByPt("/CDF_2004_S5839831/d01-x01-y01", "1800")
mergeByPt("/CDF_2004_S5839831/d01-x01-y02", "1800")
## pT_max,min, profiles in ET_lead
mergeByPt("/CDF_2004_S5839831/d02-x01-y01", "1800")
mergeByPt("/CDF_2004_S5839831/d02-x01-y02", "1800")
mergeByPt("/CDF_2004_S5839831/d02-x01-y03", "1800")
## pT distributions (want to use a specific pT cut run)
useOnePt("/CDF_2004_S5839831/d03-x01-y01", "1800", "30")
useOnePt("/CDF_2004_S5839831/d03-x01-y02", "1800", "80")
useOnePt("/CDF_2004_S5839831/d03-x01-y03", "1800", "105")
useOnePt("/CDF_2004_S5839831/d03-x01-y04", "1800", "105")
useOnePt("/CDF_2004_S5839831/d03-x01-y05", "1800", "175")
## N_max,min, profiles in ET_lead
mergeByPt("/CDF_2004_S5839831/d04-x01-y01", "1800")
mergeByPt("/CDF_2004_S5839831/d04-x01-y02", "1800")
## Min bias dbs (want to use min bias pT cut)
useOnePt("/CDF_2004_S5839831/d05-x01-y01", "1800", "0")
useOnePt("/CDF_2004_S5839831/d06-x01-y01", "1800", "0")
## Swiss Cheese, profile in ET_lead
mergeByPt("/CDF_2004_S5839831/d07-x01-y01", "1800")
mergeByPt("/CDF_2004_S5839831/d07-x01-y02", "1800")
## pT_max,min, profiles in ET_lead
mergeByPt("/CDF_2004_S5839831/d08-x01-y01", "630")
mergeByPt("/CDF_2004_S5839831/d08-x01-y02", "630")
mergeByPt("/CDF_2004_S5839831/d08-x01-y03", "630")
## Swiss Cheese, profile in ET_lead
mergeByPt("/CDF_2004_S5839831/d09-x01-y01", "630")
mergeByPt("/CDF_2004_S5839831/d09-x01-y02", "630")
## Min bias dbs (want to use min bias pT cut)
useOnePt("/CDF_2004_S5839831/d10-x01-y01", "630", "0")
useOnePt("/CDF_2004_S5839831/d11-x01-y01", "630", "0")

## CDF jet shape analysis
logging.info("Processing CDF_2005_S6217184")
useOnePt("/CDF_2005_S6217184/d01-x01-y01", "1960", "36" )
useOnePt("/CDF_2005_S6217184/d01-x01-y02", "1960", "36" )
useOnePt("/CDF_2005_S6217184/d01-x01-y03", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d02-x01-y01", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d02-x01-y02", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d02-x01-y03", "1960", "75" )
useOnePt("/CDF_2005_S6217184/d03-x01-y01", "1960", "75" )
useOnePt("/CDF_2005_S6217184/d03-x01-y02", "1960", "100")
useOnePt("/CDF_2005_S6217184/d03-x01-y03", "1960", "100")
useOnePt("/CDF_2005_S6217184/d04-x01-y01", "1960", "125")
useOnePt("/CDF_2005_S6217184/d04-x01-y02", "1960", "125")
useOnePt("/CDF_2005_S6217184/d04-x01-y03", "1960", "175")
useOnePt("/CDF_2005_S6217184/d05-x01-y01", "1960", "175")
useOnePt("/CDF_2005_S6217184/d05-x01-y02", "1960", "175")
useOnePt("/CDF_2005_S6217184/d05-x01-y03", "1960", "175")
useOnePt("/CDF_2005_S6217184/d06-x01-y01", "1960", "265")
useOnePt("/CDF_2005_S6217184/d06-x01-y02", "1960", "265")
useOnePt("/CDF_2005_S6217184/d06-x01-y03", "1960", "265")
useOnePt("/CDF_2005_S6217184/d07-x01-y01", "1960", "36" )
useOnePt("/CDF_2005_S6217184/d07-x01-y02", "1960", "36" )
useOnePt("/CDF_2005_S6217184/d07-x01-y03", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d08-x01-y01", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d08-x01-y02", "1960", "55" )
useOnePt("/CDF_2005_S6217184/d08-x01-y03", "1960", "75" )
useOnePt("/CDF_2005_S6217184/d09-x01-y01", "1960", "75" )
useOnePt("/CDF_2005_S6217184/d09-x01-y02", "1960", "100")
useOnePt("/CDF_2005_S6217184/d09-x01-y03", "1960", "100")
useOnePt("/CDF_2005_S6217184/d10-x01-y01", "1960", "125")
useOnePt("/CDF_2005_S6217184/d10-x01-y02", "1960", "125")
useOnePt("/CDF_2005_S6217184/d10-x01-y03", "1960", "175")
useOnePt("/CDF_2005_S6217184/d11-x01-y01", "1960", "175")
useOnePt("/CDF_2005_S6217184/d11-x01-y02", "1960", "175")
useOnePt("/CDF_2005_S6217184/d11-x01-y03", "1960", "175")
useOnePt("/CDF_2005_S6217184/d12-x01-y01", "1960", "265")
useOnePt("/CDF_2005_S6217184/d12-x01-y02", "1960", "265")
useOnePt("/CDF_2005_S6217184/d12-x01-y03", "1960", "265")
mergeByPt("/CDF_2005_S6217184/d13-x01-y01", "1960")

#     ## CDF dijet mass spectrum
mergeByPt("/CDF_2008_S8093652/d01-x01-y01", "1960")

## Rick Field Run-II Leading Jets analysis
logging.info("Processing CDF_2008_LEADINGJETS")
## charged particle density
mergeByPt("/CDF_2008_LEADINGJETS/d01-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d02-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d03-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d04-x01-y01", "1960")
## pT sum density
mergeByPt("/CDF_2008_LEADINGJETS/d05-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d06-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d07-x01-y01", "1960")
mergeByPt("/CDF_2008_LEADINGJETS/d08-x01-y01", "1960")
## mean pT
mergeByPt("/CDF_2008_LEADINGJETS/d09-x01-y01", "1960")

## newer version
logging.info("Processing CDF_2010_S8591881_QCD")
mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y01", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y02", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y03", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y01", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y02", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y03", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y01", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y02", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y03", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y01", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y02", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y03", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d14-x01-y01", "1960")
mergeByPt("/CDF_2010_S8591881_QCD/d15-x01-y01", "1960")



## D0 dijet correlation analysis
logging.info("Processing D0_2004_S5992206")
useOnePt("/D0_2004_S5992206/d01-x02-y01", "1960", "75")
useOnePt("/D0_2004_S5992206/d02-x02-y01", "1960", "100")
useOnePt("/D0_2004_S5992206/d03-x02-y01", "1960", "125")
useOnePt("/D0_2004_S5992206/d04-x02-y01", "1960", "175")

## D0 incl jet cross-section analysis
logging.info("Processing D0_2008_S7662670")
mergeByPt("/D0_2008_S7662670/d01-x01-y01", "1960")
mergeByPt("/D0_2008_S7662670/d02-x01-y01", "1960")
mergeByPt("/D0_2008_S7662670/d03-x01-y01", "1960")
mergeByPt("/D0_2008_S7662670/d04-x01-y01", "1960")
mergeByPt("/D0_2008_S7662670/d05-x01-y01", "1960")
mergeByPt("/D0_2008_S7662670/d06-x01-y01", "1960")

mergeByPt("/D0_2010_S8566488/d01-x01-y01", "1960")
mergeByPt("/D0_2010_S8566488/d02-x01-y01", "1960")
mergeByPt("/D0_2010_S8566488/d03-x01-y01", "1960")
mergeByPt("/D0_2010_S8566488/d04-x01-y01", "1960")
mergeByPt("/D0_2010_S8566488/d05-x01-y01", "1960")
mergeByPt("/D0_2010_S8566488/d06-x01-y01", "1960")

# CDF jet cross section

mergeByPt("/CDF_2001_S4563131/d01-x01-y01", "1800")

mergeByPt("/CDF_2001_S4517016/d01-x01-y01", "1800")
mergeByPt("/CDF_2001_S4517016/d02-x01-y01", "1800")
mergeByPt("/CDF_2001_S4517016/d03-x01-y01", "1800")
mergeByPt("/CDF_2001_S4517016/d04-x01-y01", "1800")


useOnePt("/CDF_1998_S3618439/d01-x01-y01", "1800","105")
useOnePt("/CDF_1998_S3618439/d01-x01-y02", "1800","105")

mergeByPt("/CDF_2008_S7828950/d01-x01-y01", "1960")
mergeByPt("/CDF_2008_S7828950/d02-x01-y01", "1960")
mergeByPt("/CDF_2008_S7828950/d03-x01-y01", "1960")
mergeByPt("/CDF_2008_S7828950/d04-x01-y01", "1960")
mergeByPt("/CDF_2008_S7828950/d05-x01-y01", "1960")

mergeByPt("/CDF_2007_S7057202/d01-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d02-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d03-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d04-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d05-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d06-x01-y01", "1960")
mergeByPt("/CDF_2007_S7057202/d07-x01-y01", "1960")

mergeByPt("/CDF_2006_S6450792/d01-x01-y01", "1960")

mergeByPt("/CDF_2000_S4266730/d01-x01-y01", "1800")


useOnePt("/CDF_1996_S3418421/d01-x01-y01","1800","150")
useOnePt("/CDF_1996_S3418421/d01-x01-y02","1800","150")
useOnePt("/CDF_1996_S3418421/d01-x01-y03","1800","150")
useOnePt("/CDF_1996_S3418421/d01-x01-y04","1800","500")
useOnePt("/CDF_1996_S3418421/d01-x01-y05","1800","500")
mergeByPt("/CDF_1996_S3418421/d02-x01-y01","1800")

useOnePt("/D0_2009_S8320160/d01-x01-y01", "1960", "0.15" )
useOnePt("/D0_2009_S8320160/d02-x01-y01", "1960", "0.15" )
useOnePt("/D0_2009_S8320160/d03-x01-y01", "1960", "0.4" )
useOnePt("/D0_2009_S8320160/d04-x01-y01", "1960", "0.4" )
useOnePt("/D0_2009_S8320160/d05-x01-y01", "1960", "0.6" )
useOnePt("/D0_2009_S8320160/d06-x01-y01", "1960", "0.6" )
useOnePt("/D0_2009_S8320160/d07-x01-y01", "1960", "0.6" )
useOnePt("/D0_2009_S8320160/d08-x01-y01", "1960", "0.6" )
useOnePt("/D0_2009_S8320160/d09-x01-y01", "1960", "1.0" )
useOnePt("/D0_2009_S8320160/d10-x01-y01", "1960", "1.0" )

# Choose output file
name = args[0]+"-Jets.aida"
out = open(name, "w")
## Write out merged histos
out.write('<?xml version="1.0" encoding="ISO-8859-1" ?>\n')
out.write('<!DOCTYPE aida SYSTEM "http://aida.freehep.org/schemas/3.3/aida.dtd">\n')
out.write('<aida version="3.3">\n')
out.write('  <implementation version="1.1" package="FreeHEP"/>\n')
for hpath, h in sorted(outhistos.iteritems()):
    logging.debug("hpath = %s" % hpath)
    out.write(h.asAIDA() + "\n\n")
out.write('</aida>\n')

sys.exit(0)
