10
11
12 parser = argparse.ArgumentParser(description="Make simple plots of an LHE file")
13 parser.add_argument('inputFiles', help='Comma-separated list of input files to sum in plots')
14 args = vars(parser.parse_args(sys.argv[1:]))
15
16
17 inputfilenames = []
18 for a
in args[
'inputFiles'].
split(
','):
19 inputfilenames+=glob.glob(a)
20 if len(inputfilenames)==0:
21 print(
'You must specify at least one input file')
22 return 1
23
24
25 import ROOT
26 ROOT.gROOT.SetBatch(True)
27 ROOT.gErrorIgnoreLevel = ROOT.kError
28
29
30
31 e_init_0 = ROOT.TH1D('e_init_0','',100,0,2000)
32 e_init_1 = ROOT.TH1D('e_init_1','',100,0,2000)
33 pdg_init = ROOT.TH1D('pdg_init','',25,0,25)
34
35 pt_hard_0 = ROOT.TH1D('pt_hard_0','',100,0,1000)
36 pt_hard_1 = ROOT.TH1D('pt_hard_1','',100,0,1000)
37
38 pt_extra_0 = ROOT.TH1D('pt_extra_0','',100,0,1000)
39 pt_extra_1 = ROOT.TH1D('pt_extra_1','',100,0,1000)
40 pt_extra_2 = ROOT.TH1D('pt_extra_2','',100,0,1000)
41 pt_extra_3 = ROOT.TH1D('pt_extra_3','',100,0,1000)
42 pt_extra_4 = ROOT.TH1D('pt_extra_4','',100,0,1000)
43 pt_extra_5 = ROOT.TH1D('pt_extra_5','',100,0,1000)
44 pdg_extras = ROOT.TH1D('pdg_extras','',100,0,1000)
45
46 multip = ROOT.TH1D('mult','',20,0,20)
47 weights = ROOT.TH1D('weights','',100,0,1000)
48
49 histograms = [e_init_0,e_init_1,pdg_init,pt_hard_0,pt_hard_1,pt_extra_0,pt_extra_1,pt_extra_2,pt_extra_3,pt_extra_4,pt_extra_5,pdg_extras,multip,weights]
50
51
52 for inputfilename in inputfilenames:
53
54 with open(inputfilename,'r') as inputfile:
55 event = False
56 npartons = -1
57 extras = 0
58 for line in inputfile:
59
60 if 'ktdurham' in line and '=' in line:
61
62 print ('Matching cut:',float(line.split()[0]))
63 continue
64
65 if len(line.split(
'#')[0].
strip())==0:
66 continue
67
68 if not event and '<event>' not in line:
69 continue
70
71 if not event and '<event>' in line:
72 event = True
73 continue
74
75 if '<' in line or '>' in line:
76 event = False
77 npartons = -1
78 continue
79
80 if npartons<0:
81 npartons = int(line.split()[0])
82 multip.Fill(npartons-2)
83 weight = float(line.split()[2])
84 weights.Fill(weight)
85 extras = npartons-4
86 continue
87
88 if npartons>extras+2:
89 if npartons>extras+3:
90 e_init_0.Fill( float(line.split()[9]) )
91 else:
92 e_init_1.Fill( float(line.split()[9]) )
93 pdg_init.Fill( abs(int(line.split()[0])) )
94 npartons -= 1
95 continue
96 momentum_x = float(line.split()[6])
97 momentum_y = float(line.split()[7])
98 pt = math.sqrt(momentum_x*momentum_x+momentum_y*momentum_y)
99
100 if npartons>extras:
101 if npartons>extras+1:
102 pt_hard_0.Fill(pt)
103 else:
104 pt_hard_1.Fill(pt)
105 npartons -= 1
106 continue
107
108 if extras==npartons:
109 pt_extra_0.Fill(pt)
110 elif extras-1==npartons:
111 pt_extra_1.Fill(pt)
112 elif extras-2==npartons:
113 pt_extra_2.Fill(pt)
114 elif extras-3==npartons:
115 pt_extra_3.Fill(pt)
116 elif extras-4==npartons:
117 pt_extra_4.Fill(pt)
118 elif extras-5==npartons:
119 pt_extra_5.Fill(pt)
120 pdg_extras.Fill( abs(int(line.split()[0])) )
121 npartons-=1
122
123
124
125
126 output_hists = ROOT.TFile.Open('output_hists.root','RECREATE')
127 output_hists.cd()
128 for h in histograms:
129 h.Write(h.GetName())
130 output_hists.Close()
131
132 return 0
133
void print(char *figname, TCanvas *c1)
std::vector< std::string > split(const std::string &s, const std::string &t=":")