1 |
bortigno |
1.1 |
#!/usr/bin/env python
|
2 |
|
|
from optparse import OptionParser
|
3 |
|
|
from myutils import BetterConfigParser, parse_info
|
4 |
|
|
import sys
|
5 |
|
|
|
6 |
|
|
#CONFIGURE
|
7 |
|
|
argv = sys.argv
|
8 |
|
|
parser = OptionParser()
|
9 |
|
|
parser.add_option("-S","--samples", dest="samples", default='',
|
10 |
|
|
help="Sample to split. ( comma separated )")
|
11 |
|
|
parser.add_option("-C", "--config", dest="config", default=[], action="append",
|
12 |
|
|
help="configuration file")
|
13 |
|
|
parser.add_option("-M", "--max-events", dest='maxEvents', default=10000,
|
14 |
|
|
help="max number of events per file. Default 10000")
|
15 |
|
|
|
16 |
|
|
|
17 |
|
|
(opts, args) = parser.parse_args(argv)
|
18 |
|
|
if opts.config =="":
|
19 |
|
|
opts.config = "config"
|
20 |
|
|
config = BetterConfigParser()
|
21 |
|
|
config.read(opts.config)
|
22 |
|
|
|
23 |
|
|
import ROOT
|
24 |
|
|
ROOT.gROOT.SetBatch(True)
|
25 |
|
|
|
26 |
|
|
namelistIN=opts.samples
|
27 |
|
|
namelist=namelistIN.split(',')
|
28 |
|
|
samplesinfo=config.get('Directories','samplesinfo')
|
29 |
|
|
INpath=config.get('Directories','samplepath')+'/envW/sys/'
|
30 |
|
|
OUTpath=INpath # for the moemnt OUTpath = INpath ->> TO FIX
|
31 |
|
|
info = parse_info(samplesinfo,INpath)
|
32 |
|
|
|
33 |
|
|
|
34 |
|
|
for job in info:
|
35 |
|
|
if eval(job.active):
|
36 |
|
|
if job.name in namelist:
|
37 |
|
|
#get trees:
|
38 |
|
|
print INpath+'/'+job.prefix+job.identifier+'.root'
|
39 |
|
|
sourceFile = ROOT.TFile.Open(INpath+'/'+job.prefix+job.identifier+'.root','read')
|
40 |
|
|
Tree = sourceFile.Get('tree')
|
41 |
|
|
obj = ROOT.TObject
|
42 |
|
|
nentries = Tree.GetEntries()
|
43 |
|
|
print nentries
|
44 |
|
|
maxEvents = long(opts.maxEvents)
|
45 |
|
|
#get the number of files to be created
|
46 |
|
|
if(maxEvents > 0.):
|
47 |
|
|
number_of_files = (nentries/maxEvents)+1
|
48 |
|
|
else :
|
49 |
|
|
sys.exit('%ERROR: Max number of events per file null or negative.')
|
50 |
|
|
print 'Splitting in ' + str(number_of_files) +' files'
|
51 |
|
|
for i in range(number_of_files):
|
52 |
|
|
print i
|
53 |
|
|
#create the output file
|
54 |
|
|
print OUTpath+'/split/'+job.prefix+job.identifier+'_'+str(i)+'.root'
|
55 |
|
|
output = ROOT.TFile.Open(OUTpath+'/split/'+job.prefix+job.identifier+'_'+str(i)+'.root','recreate')
|
56 |
|
|
#copy the histograms in the new file
|
57 |
|
|
sourceFile.cd()
|
58 |
|
|
for key in ROOT.gDirectory.GetListOfKeys():
|
59 |
|
|
obj = key.ReadObj()
|
60 |
|
|
if obj.GetName() == 'tree':
|
61 |
|
|
continue
|
62 |
|
|
output.cd()
|
63 |
|
|
obj.Write(key.GetName())
|
64 |
|
|
#now split and copy the tree
|
65 |
|
|
output.cd()
|
66 |
|
|
outTree = Tree.CopyTree("","",maxEvents*(i+1),maxEvents*i)
|
67 |
|
|
outTree.AutoSave()
|
68 |
|
|
output.Write()
|
69 |
|
|
output.Close()
|
70 |
|
|
sourceFile.Close()
|
71 |
|
|
|