if args.output_folder != '':
            ensure_dir(args.output_folder)
            out_file_path = os.path.join(args.output_folder,
                                         os.path.basename(f) + ".hists")
        if (args.doNotOverwrite and os.path.isfile(out_file_path)): continue
        out_file = root_open(out_file_path, "RECREATE")
        tree = in_file.get(args.treename)
        if (args.hists != None and len(args.hists) > 0):
            out_file.cd()
            for hist in args.hists:
                in_file.Get(hist).Write()
        if args.copy_mbj_cutflow:
            cf = in_file.Get('cut_flow')
            cf2 = Hist(1, 0, 1, name='cutflow')
            cf2.Sumw2()
            cf2.SetEntries(cf.GetBinContent(1))
            cf2.SetBinContent(1, cf.GetBinContent(2))
            cf2.SetBinError(
                1,
                np.sqrt(cf.GetBinContent(1)) * cf.GetBinContent(2) /
                cf.GetBinContent(1))
            allDir = os.path.join(args.outdir, 'all')
            out_file.mkdir(allDir, recurse=True)
            try:
                out_file.cd(allDir)
            except:
                pass
            cf2.Write()

    else:
        out_file = root_open(f, "UPDATE")