1
1
#!/usr/bin/env python3
2
2
3
3
import sys , argparse , struct
4
+ import numpy as np
4
5
from os import path
5
- # from mctools import fluka
6
6
from math import sqrt
7
7
from mctools .fluka .flair import fortran
8
8
import ROOT
9
9
ROOT .PyConfig .IgnoreCommandLineOptions = True
10
10
11
11
class DETECT :
12
12
def __init__ (self , fname ):
13
- print (fname )
14
13
self .f = open (fname , 'rb' )
15
14
16
15
data = fortran .read (self .f )
@@ -19,28 +18,42 @@ def __init__(self, fname):
19
18
self .runtit = self .runtit .decode ('utf-8' ).strip ()
20
19
self .runtim = self .runtim .decode ('utf-8' ).strip ()
21
20
assert self .runtim == "******** Sum file ********"
21
+ self .nps = self .nctot + 1.0e9 * self .mctot
22
22
23
23
def __del__ (self ):
24
24
self .f .close ()
25
25
26
+ def reset (self ):
27
+ self .chname = None
28
+ self .nbin = None
29
+
30
+ self .ebins = []
31
+ self .val = []
32
+ self .err = []
33
+
26
34
def read (self ):
35
+ self .reset ()
36
+
27
37
data = fortran .read (self .f )
28
38
if data is None :
29
39
return False
30
40
size = len (data )
31
- ndet ,chname ,nbin ,emin ,ebin ,ecut = struct .unpack ("=i10si3f" , data )
32
- chname = chname .decode ('utf-8' ).strip ()
33
- print (ndet ,chname ,nbin ,emin ,ebin ,ecut )
41
+ ndet ,self .chname ,self .nbin ,emin ,ebin ,self .ecut = struct .unpack ("=i10si3f" , data )
42
+ self .chname = self .chname .decode ('utf-8' ).strip ()
34
43
35
44
data = fortran .read (self .f )
36
45
size = len (data )
37
- iv = struct .unpack ("=%ii" % nbin , data )
38
- for i in range (nbin ):
39
- ebnmin = emin + i * ebin
40
- ebnmax = emin + (i + 1 ) * ebin
41
- weibin = iv [i ] / (self .nctot + 1e9 * self .mctot )
46
+ iv = struct .unpack ("=%ii" % self .nbin , data )
47
+
48
+ for i in range (self .nbin + 1 ):
49
+ self .ebins .append (emin + i * ebin )
50
+
51
+ for i in range (self .nbin ):
52
+ weibin = iv [i ] / self .nps
42
53
weierr = 1.0 / sqrt (max (iv [i ],1 ))
43
- print (ebnmin ,ebnmax ,weibin ,weierr * 100 )
54
+ self .val .append (weibin )
55
+ self .err .append (weierr * weibin )
56
+
44
57
return True
45
58
46
59
def main ():
@@ -65,9 +78,17 @@ def main():
65
78
else :
66
79
rootFileName = args .root
67
80
81
+ fout = ROOT .TFile (rootFileName , "recreate" )
82
+
68
83
d = DETECT (args .detsuw )
69
84
while d .read ():
70
- pass
85
+ h = ROOT .TH1F (d .chname , "nps = %g #bullet E_{cut} = %g GeV;Energy [GeV];Counts/primary" % (d .nps , d .ecut ), d .nbin , np .array (d .ebins ))
86
+ for i in range (d .nbin ):
87
+ h .SetBinContent (i + 1 , d .val [i ])
88
+ h .SetBinError (i + 1 , d .err [i ])
89
+ h .Write ()
90
+
91
+ fout .Close ()
71
92
72
93
73
94
if __name__ == "__main__" :
0 commit comments