source: trunk/examples/advanced/Tiara/source/py_modules/extractShelve.py @ 807

Last change on this file since 807 was 807, checked in by garnier, 16 years ago

update

File size: 3.2 KB
Line 
1# $Id: extractShelve.py,v 1.3 2003/07/04 13:26:31 dressel Exp $
2# -------------------------------------------------------------------
3# GEANT4 tag $Name:  $
4# -------------------------------------------------------------------
5#
6import string
7import math
8import os
9import shelve
10import string
11import detector
12
13
14
15# some functions for calculating the FOM
16
17def getR2(measure):
18    "Error squared of a measure."
19    v =  measure.variance
20    m2 = math.pow(measure.mean, 2)
21    n = measure.entries
22
23    r2 = 1e+10
24    if n>0 and m2 > 0:
25        r2 = v/m2/n
26   
27    return r2
28
29def getFOMbyName(shelveName, tallyName, bin):
30    "FOM by shelve name, tally name and bin of energy region"
31    she = shelve.open (shelveName, "r")
32    measure = she[tallyName].measures[bin]
33    R2= getR2(measure)
34    T = she["runTime"]
35    return 1./(T*R2)
36
37def getFOM(aShelve, tallyName, bin):
38    "FOM given a shelve, tally name and energy bin."
39    measure = aShelve[tallyName].measures[bin]
40    R2= getR2(measure)
41    T = aShelve["runTime"]
42    return 1./(T*R2)
43
44
45
46
47
48
49
50
51
52
53# functions to retrive information from the shelve
54
55def infoShelve(file):
56    "Print information stored in a shelve."
57    she = shelve.open(file, "r")
58    print file
59    for k in she.keys():
60        value = she[k]
61        if value.__class__.__module__ == "__builtin__" :
62            print "   ", k, ":", value
63           
64def lsShelve(path):
65    "List shelve information  found in and under the given path. "
66    if os.path.isfile(path):
67        if string.find(path,".shelve") > -1:
68            infoShelve(path)
69    else:
70        if os.path.isdir(path):
71            files = os.listdir(path)
72            for file in files:
73                f=path + "/" + file
74                lsShelve(f)
75               
76
77
78def getFluxInRegion(she, dist="00", detType="ring", region=1):
79    "Get the flux in a detector."
80    tally = she["detector_" + dist + "Tally"]
81    m = tally.measures[region]
82    rawFlux = m.sum
83    mean = m.mean
84    var = m.getVariance()
85    n = m.entries
86    errRel = -1.
87    if n>0 and var >0 and mean > 0:
88        errRel = math.sqrt(var/n)/mean
89    nPeakNeutrons = she["generatorTally"].measures[1].sum
90    scale = detector.detScale(nPeakNeutrons, she["energy"], 0)
91    return rawFlux * scale / detector.DetectorVolume[detType][dist], errRel
92
93
94
95def getFluxes(she, detType = "ring"):
96    "Get all fluxes and FOM in a shelve."
97    fluxName = "flux_" + she["energy"]+"_"+\
98               she["shieldWidth"]
99    keys = she.keys()
100    fluxes = {}
101    for k in keys:
102        if string.find(k,"detector_") > -1:
103            sp = string.split(k,"detector_")
104            sp = string.split(sp[1],"Tally")
105            dist = sp[0]
106            fluxNameD = fluxName + "_" + dist
107            for i in range(1,3):
108                fom = getFOM(she, k, i)
109                f = fluxNameD + "_" + "%(i)d" % vars()
110                flux, errRel = getFluxInRegion(she, dist, detType, i)
111                errRel*=100
112                sFlux = '%1.2E' % (flux)
113                sErrRel = '%1.0f' % (errRel)
114                if errRel < 10.0:
115                    sErrRel = '%1.1f' % (errRel)
116                print f, sFlux, ", errRel:", sErrRel, "   FOM:", fom
117#                fluxes[f] =  sFlux
118    return fluxes
Note: See TracBrowser for help on using the repository browser.