示例#1
0
    def readIso(self, n):
        """Read detector det data structure"""
        #print "self.nisomers:", self.nisomers
        if self.nisomers < 0: return None
        f = open(self.file, "rb")
        fortran.skip(f)
        if self.evol:
            fortran.skip(f)

        for _ in range(n):
            fortran.skip(f)  # Detector Header & Data
            if self.evol:
                fortran.skip(f)  # TDecay
            fortran.skip(f)  # Detector data
            if self.nisomers:
                fortran.skip(f)  # Isomers header
                fortran.skip(f)  # Isomers data
        fortran.skip(f)
        if self.evol:
            fortran.skip(f)  # TDecay
        fortran.skip(f)  # Detector data
        isohead = fortran.read(f)  # Isomers header
        data = fortran.read(f)  # Isomers data
        #print "isohead:",len(isohead)
        #header = struct.unpack("=10xi", isohead)
        #print "isohead:",header[0]
        f.close()
        return (isohead, data)
示例#2
0
文件: Data.py 项目: kbat/mc-tools
	def readIso(self, n):
		"""Read detector det data structure"""
		#print "self.nisomers:", self.nisomers
		if self.nisomers < 0: return None
		f = open(self.file, "rb")
		fortran.skip(f)
		if self.evol:
			fortran.skip(f)

		for i in range(n):
			fortran.skip(f)		# Detector Header & Data
			if self.evol:
				fortran.skip(f) # TDecay
			fortran.skip(f)		# Detector data
			if self.nisomers:
				fortran.skip(f) # Isomers header
				fortran.skip(f) # Isomers data
		fortran.skip(f)
		if self.evol:
			fortran.skip(f) # TDecay
		fortran.skip(f)		# Detector data
		isohead = fortran.read(f) # Isomers header
		data = fortran.read(f)	  # Isomers data
		#print "isohead:",len(isohead)
		header = struct.unpack("=10xi", isohead)
		#print "isohead:",header[0]
		f.close()
		return (isohead, data)
示例#3
0
    def readHeader(self, filename):
        """ Reads the file header info
            Based on Data.Usrbdx
        """
        f = Data.Usrxxx.readHeader(self, filename)
        #        self.sayHeader()

        while True:
            data = fortran.read(f)
            if data is None: break
            size = len(data)
            #            print("size: ", size)

            if size == 14 and data.decode('utf8')[:10] == "STATISTICS":
                self.statpos = f.tell()
                for det in self.detector:
                    data = Data.unpackArray(fortran.read(f))
                    det.total = data[0]
                    det.totalerror = data[1]


#                    for j in range(6):
#                        fortran.skip(f)
                break

            if size != 50:
                raise IOError("Invalid USRTRACK/USRCOLL file %d " % size)

            header = struct.unpack("=i10siiififfif", data)

            det = Data.Detector()
            det.nb = header[0]
            det.name = header[1].decode(
                'utf8').strip()  # titutc - track/coll name
            det.type = header[
                2]  # itustc - type of binning: 1 - linear energy etc
            det.dist = header[3]  # idustc = distribution to be scored
            det.reg = header[4]  # nrustc = region
            det.volume = header[5]  # vusrtc = volume (cm**3) of the detector
            det.lowneu = header[6]  # llnutc = low energy neutron flag
            det.elow = header[7]  # etclow = minimum energy [GeV]
            det.ehigh = header[8]  # etchgh = maximum energy [GeV]
            det.ne = header[9]  # netcbn = number of energy intervals
            det.de = header[10]  # detcbn = energy bin width

            self.detector.append(det)

            if det.lowneu:
                data = fortran.read(f)
                det.ngroup = struct.unpack("=i", data[:4])[0]
                det.egroup = struct.unpack("=%df" % (det.ngroup + 1), data[4:])
                print("Low energy neutrons scored with %d groups" % det.ngroup)
            else:
                det.ngroup = 0
                det.egroup = []

            size = (det.ngroup + det.ne) * 4
            if size != fortran.skip(f):
                raise IOError("Invalid USRTRACK file")
        f.close()
示例#4
0
    def readHeader(self, filename):
        """ Reads the file header info 
            Based on Data.Usrbdx
        """
        f = Data.Usrxxx.readHeader(self, filename)
#        self.sayHeader()
        
        while True:
            data = fortran.read(f)
            if data is None: break
            size = len(data)
#            print("size: ", size)

            if size == 14 and data[:10] == "STATISTICS":
                self.statpos = f.tell()
                for det in self.detector:
                    data = Data.unpackArray(fortran.read(f))
                    det.total = data[0]
                    det.totalerror = data[1]
#                    for j in range(6):
#                        fortran.skip(f)
                break

            if size != 50: raise IOError("Invalid USRTRACK/USRCOLL file")

            header = struct.unpack("=i10siiififfif", data)

            det = Data.Detector()
            det.nb = header[0]
            det.name = header[1].strip() # titutc - track/coll name
            det.type = header[2] # itustc - type of binning: 1 - linear energy etc
            det.dist = header[3] # idustc = distribution to be scored
            det.reg  = header[4] # nrustc = region
            det.volume = header[5] # vusrtc = volume (cm**3) of the detector
            det.lowneu = header[6] # llnutc = low energy neutron flag
            det.elow = header[7] # etclow = minimum energy [GeV]
            det.ehigh = header[8] # etchgh = maximum energy [GeV]
            det.ne = header[9] # netcbn = number of energy intervals
            det.de = header[10] # detcbn = energy bin width

            self.detector.append(det)

            if det.lowneu:
                data = fortran.read(f)
                det.ngroup = struct.unpack("=i",data[:4])[0]
                det.egroup = struct.unpack("=%df"%(det.ngroup+1), data[4:])
                print("Low energy neutrons scored with %d groups" % det.ngroup)
            else:
		det.ngroup = 0
		det.egroup = []

	    size  = (det.ngroup+det.ne) * 4
	    if size != fortran.skip(f):
		raise IOError("Invalid USRTRACK file")
        f.close()
示例#5
0
文件: Data.py 项目: kbat/mc-tools
	def readEvent(self, type=None):
		# Read header
		data = fortran.read(self.hnd)
		if data is None: return None
		if len(data) == 20:
			ndum, mdum, jdum, edum, wdum \
				= struct.unpack("=iiiff", data)
		else:
			raise IOError("Invalid MGREAD file")

		self.nevent += 1

		if ndum > 0:
			if type is None or type == 0:
				self.readTracking(ndum, mdum, jdum, edum, wdum)
			else:
				fortran.skip(self.hnd)
			return 0
		elif ndum == 0:
			if type is None or type == 1:
				self.readEnergy(mdum, jdum, edum, wdum)
			else:
				fortran.skip(self.hnd)
			return 1
		else:
			if type is None or type == 2:
				self.readSource(-ndum, mdum, jdum, edum, wdum)
			else:
				fortran.skip(self.hnd)
			return 2
示例#6
0
    def readEvent(self, typeid=None):
        # Read header
        data = fortran.read(self.hnd)
        if data is None: return None
        if len(data) == 20:
            ndum, mdum, jdum, edum, wdum \
             = struct.unpack("=iiiff", data)
        else:
            raise IOError("Invalid MGREAD file")

        self.nevent += 1

        if ndum > 0:
            if typeid is None or typeid == 0:
                self.readTracking(ndum, mdum, jdum, edum, wdum)
            else:
                fortran.skip(self.hnd)
            return 0
        elif ndum == 0:
            if typeid is None or typeid == 1:
                self.readEnergy(mdum, jdum, edum, wdum)
            else:
                fortran.skip(self.hnd)
            return 1
        else:
            if typeid is None or typeid == 2:
                self.readSource(-ndum, mdum, jdum, edum, wdum)
            else:
                fortran.skip(self.hnd)
            return 2
示例#7
0
文件: Data.py 项目: kbat/mc-tools
	def readStat(self, n):
		"""Read detector det statistical data"""
		if self.statpos < 0: return None
		f = open(self.file,"rb")
		f.seek(self.statpos)

		f.seek(self.statpos)
		if self.nisomers:
			nskip = 7*n
		else:
			nskip = 6*n
		for i in range(nskip):
			fortran.skip(f)	# Detector Data

		total = fortran.read(f)
		A     = fortran.read(f)
		errA  = fortran.read(f)
		Z     = fortran.read(f)
		errZ  = fortran.read(f)
		data  = fortran.read(f)
		if self.nisomers:
			iso = fortran.read(f)
		else:
			iso = None
		f.close()
		return (total, A, errA, Z, errZ, data, iso)
示例#8
0
    def readStat(self, n):
        """Read n(th) detector statistical data"""
        if self.statpos < 0: return None
        f = open(self.file, "rb")
        f.seek(self.statpos)

        f.seek(self.statpos)
        if self.nisomers:
            nskip = 7 * n
        else:
            nskip = 6 * n
        for _ in range(nskip):
            fortran.skip(f)  # Detector Data

        total = fortran.read(f)
        A = fortran.read(f)
        errA = fortran.read(f)
        Z = fortran.read(f)
        errZ = fortran.read(f)
        data = fortran.read(f)
        if self.nisomers:
            iso = fortran.read(f)
        else:
            iso = None
        f.close()
        return (total, A, errA, Z, errZ, data, iso)
示例#9
0
    def readStat(self, det,lowneu):
	""" Read detector # det statistical data """
	if self.statpos < 0: return None
	with open(self.file,"rb") as f:
	    f.seek(self.statpos)
	    for i in range(det+3): # check that 3 gives correct errors with 1 USRTRACK detector
	        fortran.skip(f)	# skip previous detectors
	    data = fortran.read(f)
	return data
示例#10
0
文件: Data.py 项目: kbat/mc-tools
	def readEnergy(self, icode, jtrack, etrack, wtrack):
		self.icode  = icode
		self.jtrack = jtrack
		self.etrack = etrack
		self.wtrack = wtrack
		data = fortran.read(self.hnd)
		if data is None: raise IOError("Invalid energy deposition event")
		self.data = struct.unpack("=4f", data)
		return icode
示例#11
0
 def readEnergy(self, icode, jtrack, etrack, wtrack):
     self.icode = icode
     self.jtrack = jtrack
     self.etrack = etrack
     self.wtrack = wtrack
     data = fortran.read(self.hnd)
     if data is None: raise IOError("Invalid energy deposition event")
     self.data = struct.unpack("=4f", data)
     return icode
示例#12
0
 def readData(self, n):
     """Read n(th) detector data structure"""
     f = open(self.file, "rb")
     fortran.skip(f)  # Skip header
     for _ in range(2 * n):
         fortran.skip(f)  # Detector Header & Data
     fortran.skip(f)  # Detector Header
     data = fortran.read(f)
     f.close()
     return data
示例#13
0
文件: Data.py 项目: kbat/mc-tools
	def readData(self, det):
		"""Read detector det data structure"""
		f = open(self.file,"rb")
		fortran.skip(f)	# Skip header
		for i in range(2*det):
			fortran.skip(f)	# Detector Header & Data
		fortran.skip(f)		# Detector Header
		data = fortran.read(f)
		f.close()
		return data
示例#14
0
文件: Data.py 项目: kbat/mc-tools
	def readStat(self, n):
		"""Read detector n statistical data"""
		if self.statpos < 0: return None
		f = open(self.file,"rb")
		f.seek(self.statpos)
		for i in range(n):
			fortran.skip(f)	# Detector Data
		data = fortran.read(f)
		f.close()
		return data
示例#15
0
 def readStat(self, n):
     """Read n(th) detector statistical data"""
     if self.statpos < 0: return None
     f = open(self.file, "rb")
     f.seek(self.statpos)
     for _ in range(n):
         fortran.skip(f)  # Detector Data
     data = fortran.read(f)
     f.close()
     return data
示例#16
0
 def readTracking(self, ntrack, mtrack, jtrack, etrack, wtrack):
     self.ntrack = ntrack
     self.mtrack = mtrack
     self.jtrack = jtrack
     self.etrack = etrack
     self.wtrack = wtrack
     data = fortran.read(self.hnd)
     if data is None: raise IOError("Invalid track event")
     fmt = "=%df" % (3 * (ntrack + 1) + mtrack + 1)
     self.data = struct.unpack(fmt, data)
     return ntrack
示例#17
0
文件: Data.py 项目: dvp2015/mc-tools
 def readData(self, n):
     """Read detector det data structure"""
     f = open(self.file, "rb")
     fortran.skip(f)
     for i in range(n):
         fortran.skip(f)  # Detector Header
         fortran.skip(f)  # Detector data
     fortran.skip(f)  # Detector Header
     data = fortran.read(f)  # Detector data
     f.close()
     return data
示例#18
0
 def readStat(self, det, lowneu):
     """ Read detector # det statistical data """
     if self.statpos < 0: return None
     with open(self.file, "rb") as f:
         f.seek(self.statpos)
         for i in range(
                 det + 3
         ):  # check that 3 gives correct errors with 1 USRTRACK detector
             fortran.skip(f)  # skip previous detectors
         data = fortran.read(f)
     return data
示例#19
0
文件: Data.py 项目: kbat/mc-tools
	def readTracking(self, ntrack, mtrack, jtrack, etrack, wtrack):
		self.ntrack = ntrack
		self.mtrack = mtrack
		self.jtrack = jtrack
		self.etrack = etrack
		self.wtrack = wtrack
		data = fortran.read(self.hnd)
		if data is None: raise IOError("Invalid track event")
		fmt = "=%df" % (3*(ntrack+1) + mtrack + 1)
		self.data = struct.unpack(fmt, data)
		return ntrack
示例#20
0
文件: Data.py 项目: kbat/mc-tools
	def readSource(self, ncase, npflka, nstmax, tkesum, weipri):
		self.ncase  = ncase
		self.npflka = npflka
		self.nstmax = nstmax
		self.tkesum = tkesum
		self.weipri = weipri

		data = fortran.read(self.hnd)
		if data is None: raise IOError("Invalid source event")
		fmt = "=" + ("i8f" * npflka)
		self.data = struct.unpack(fmt, data)
		return ncase
示例#21
0
    def readSource(self, ncase, npflka, nstmax, tkesum, weipri):
        self.ncase = ncase
        self.npflka = npflka
        self.nstmax = nstmax
        self.tkesum = tkesum
        self.weipri = weipri

        data = fortran.read(self.hnd)
        if data is None: raise IOError("Invalid source event")
        fmt = "=" + ("i8f" * npflka)
        self.data = struct.unpack(fmt, data)
        return ncase
示例#22
0
 def readData(self, det, lowneu):
     """Read detector det data structure"""
     f = open(self.file, "rb")
     fortran.skip(f)  # Skip header
     for i in range(2 * det):
         fortran.skip(f)  # Detector Header & Data
     fortran.skip(f)  # Detector Header
     if lowneu:
         fortran.skip(f)  # skip low enery neutron data
     data = fortran.read(f)
     f.close()
     return data
示例#23
0
文件: Data.py 项目: kbat/mc-tools
	def readData(self, n):
		"""Read detector n data structure"""
		f = open(self.file, "rb")
		fortran.skip(f)
		for i in range(n):
			fortran.skip(f)		# Detector Header
			if self.detector[i].lowneu: fortran.skip(f)	# Detector low enetry neutron groups
			fortran.skip(f)		# Detector data

		fortran.skip(f)		# Detector Header
		if self.detector[n].lowneu: fortran.skip(f)	# Detector low enetry neutron groups
		data = fortran.read(f)	# Detector data
		f.close()
		return data
示例#24
0
    def readData(self, n):
        """Read n(th) detector data structure"""
        f = open(self.file, "rb")
        fortran.skip(f)
        for i in range(n):
            fortran.skip(f)  # Detector Header
            if self.detector[i].lowneu:
                fortran.skip(f)  # Detector low enetry neutron groups
            fortran.skip(f)  # Detector data

        fortran.skip(f)  # Detector Header
        if self.detector[n].lowneu:
            fortran.skip(f)  # Detector low enetry neutron groups
        data = fortran.read(f)  # Detector data
        f.close()
        return data
示例#25
0
    def readHeader(self, filename):
        """Read header information, and return the file handle"""
        self.reset()
        self.file = filename
        f = open(self.file, "rb")

        # Read header
        data = fortran.read(f)
        if data is None: raise IOError("Invalid USRxxx file")
        size = len(data)
        over1b = 0
        if size == 116:
            (title, time, self.weight) = \
                    struct.unpack("=80s32sf", data)
            self.ncase = 1
            self.nbatch = 1
        elif size == 120:
            (title, time, self.weight, self.ncase) = \
                    struct.unpack("=80s32sfi", data)
            self.nbatch = 1
        elif size == 124:
            (title, time, self.weight,
             self.ncase, self.nbatch) = \
                    struct.unpack("=80s32sfii", data)
        elif size == 128:
            (title, time, self.weight,
             self.ncase, over1b, self.nbatch) = \
                    struct.unpack("=80s32sfiii", data)
        elif size == 136:  # FLUKA2021.2: LISFVR and LMSFVR variables added
            (title, time, self.weight,
             self.ncase, over1b, self.nbatch, lisfvr, lmsfvr) = \
                    struct.unpack("=80s32sfiiiii", data)
        else:
            raise IOError("Invalid USRxxx file")

        if over1b > 0:
            self.ncase = self.ncase + over1b * 1000000000

        self.title = title.strip().decode()
        self.time = time.strip().decode()

        return f
示例#26
0
    def readData(self, n):
        """Read n(th) detector data structure"""
        f = open(self.file, "rb")
        fortran.skip(f)
        if self.evol:
            fortran.skip(f)

        for _ in range(n):
            fortran.skip(f)  # Detector Header & Data
            if self.evol:
                fortran.skip(f)  # TDecay
            fortran.skip(f)  # Detector data
            if self.nisomers:
                fortran.skip(f)  # Isomers header
                fortran.skip(f)  # Isomers data

        fortran.skip(f)  # Detector Header & Data
        if self.evol:
            fortran.skip(f)  # TDecay
        data = fortran.read(f)  # Detector data
        f.close()
        return data
示例#27
0
文件: Data.py 项目: kbat/mc-tools
	def readData(self, n):
		"""Read detector det data structure"""
		f = open(self.file, "rb")
		fortran.skip(f)
		if self.evol:
			fortran.skip(f)

		for i in range(n):
			fortran.skip(f)		# Detector Header & Data
			if self.evol:
				fortran.skip(f)	# TDecay
			fortran.skip(f)		# Detector data
			if self.nisomers:
				fortran.skip(f)	# Isomers header
				fortran.skip(f)	# Isomers data

		fortran.skip(f)			# Detector Header & Data
		if self.evol:
			fortran.skip(f)		# TDecay
		data = fortran.read(f)		# Detector data
		f.close()
		return data
示例#28
0
文件: Data.py 项目: dvp2015/mc-tools
    def readHeader(self, filename):
        """Read header information, and return the file handle"""
        self.reset()
        self.file = filename
        f = open(self.file, "rb")

        # Read header
        data = fortran.read(f)
        if data is None: raise IOError("Invalid USRxxx file")
        size = len(data)
        over1b = 0
        if size == 116:
            (title, time, self.weight) = \
             struct.unpack("=80s32sf", data)
            self.ncase = 1
            self.nbatch = 1
        elif size == 120:
            (title, time, self.weight, self.ncase) = \
             struct.unpack("=80s32sfi", data)
            self.nbatch = 1
        elif size == 124:
            (title, time, self.weight,
             self.ncase, self.nbatch) = \
             struct.unpack("=80s32sfii", data)
        elif size == 128:
            (title, time, self.weight,
             self.ncase, over1b, self.nbatch) = \
             struct.unpack("=80s32sfiii", data)
        else:
            raise IOError("Invalid USRxxx file")

        if over1b > 0:
            self.ncase = long(self.ncase) + long(over1b) * 1000000000

        self.title = title.strip()
        self.time = time.strip()

        return f
示例#29
0
文件: Data.py 项目: kbat/mc-tools
	def readHeader(self, filename):
		"""Read header information, and return the file handle"""
		self.reset()
		self.file = filename
		f = open(self.file, "rb")

		# Read header
		data = fortran.read(f)
		if data is None: raise IOError("Invalid USRxxx file")
		size   = len(data)
		over1b = 0
		if   size == 116:
			(title, time, self.weight) = \
				struct.unpack("=80s32sf", data)
			self.ncase  = 1
			self.nbatch = 1
		elif size == 120:
			(title, time, self.weight, self.ncase) = \
				struct.unpack("=80s32sfi", data)
			self.nbatch = 1
		elif size == 124:
			(title, time, self.weight,
			 self.ncase, self.nbatch) = \
				struct.unpack("=80s32sfii", data)
		elif size == 128:
			(title, time, self.weight,
			 self.ncase, over1b, self.nbatch) = \
				struct.unpack("=80s32sfiii", data)
		else:
			raise IOError("Invalid USRxxx file")

		if over1b>0:
			self.ncase = long(self.ncase) + long(over1b)*1000000000

		self.title = title.strip()
		self.time  = time.strip()

		return f
示例#30
0
文件: Data.py 项目: dvp2015/mc-tools
    def readHeader(self, filename):
        """Read USRBIN detector information"""
        f = Usrxxx.readHeader(self, filename)

        for i in range(1000):
            # Header
            data = fortran.read(f)
            if data is None: break
            size = len(data)

            # Statistics are present?
            if size == 14 and data[:10] == "STATISTICS":
                self.statpos = f.tell()
                break
            if size != 86: raise IOError("Invalid USRBIN file")

            # Parse header
            header = struct.unpack("=i10siiffifffifffififff", data)

            bin = Detector()
            bin.nb = header[0]
            bin.name = header[1].strip()
            bin.type = header[2]
            bin.score = header[3]

            bin.xlow = float(bmath.format(header[4], 9, useD=False))
            bin.xhigh = float(bmath.format(header[5], 9, useD=False))
            bin.nx = header[6]
            if bin.nx > 0 and bin.type not in (2, 12, 8, 18):
                bin.dx = (bin.xhigh - bin.xlow) / float(bin.nx)
            else:
                bin.dx = float(bmath.format(header[7], 9, useD=False))

            if bin.type in (1, 11):
                bin.ylow = -math.pi
                bin.yhigh = math.pi
            else:
                bin.ylow = float(bmath.format(header[8], 9, useD=False))
                bin.yhigh = float(bmath.format(header[9], 9, useD=False))
            bin.ny = header[10]
            if bin.ny > 0 and bin.type not in (2, 12, 8, 18):
                bin.dy = (bin.yhigh - bin.ylow) / float(bin.ny)
            else:
                bin.dy = float(bmath.format(header[11], 9, useD=False))

            bin.zlow = float(bmath.format(header[12], 9, useD=False))
            bin.zhigh = float(bmath.format(header[13], 9, useD=False))
            bin.nz = header[14]
            if bin.nz > 0 and bin.type not in (2, 12):  # 8=special with z=real
                bin.dz = (bin.zhigh - bin.zlow) / float(bin.nz)
            else:
                bin.dz = float(bmath.format(header[15], 9, useD=False))

            bin.lntzer = header[16]
            bin.bk = header[17]
            bin.b2 = header[18]
            bin.tc = header[19]

            self.detector.append(bin)

            size = bin.nx * bin.ny * bin.nz * 4
            if fortran.skip(f) != size:
                raise IOError("Invalid USRBIN file")
        f.close()
示例#31
0
文件: Data.py 项目: kbat/mc-tools
	def readHeader(self, filename):
		"""Read USRBIN detector information"""
		f = Usrxxx.readHeader(self, filename)

		for i in range(1000):
			# Header
			data = fortran.read(f)
			if data is None: break
			size = len(data)

			# Statistics are present?
			if size == 14 and data[:10] == "STATISTICS":
				self.statpos = f.tell()
				break
			if size != 86: raise IOError("Invalid USRBIN file")

			# Parse header
			header = struct.unpack("=i10siiffifffifffififff", data)

			bin = Detector()
			bin.nb	  = header[ 0]
			bin.name  = header[ 1].strip()
			bin.type  = header[ 2]
			bin.score = header[ 3]

			bin.xlow  = float(bmath.format(header[ 4],9,useD=False))
			bin.xhigh = float(bmath.format(header[ 5],9,useD=False))
			bin.nx	  = header[ 6]
			if bin.nx > 0 and bin.type not in (2,12,8,18):
				bin.dx = (bin.xhigh-bin.xlow) / float(bin.nx)
			else:
				bin.dx = float(bmath.format(header[ 7],9,useD=False))

			if bin.type in (1,11):
				bin.ylow  = -math.pi
				bin.yhigh =  math.pi
			else:
				bin.ylow  = float(bmath.format(header[ 8],9,useD=False))
				bin.yhigh = float(bmath.format(header[ 9],9,useD=False))
			bin.ny	  = header[10]
			if bin.ny > 0 and bin.type not in (2,12,8,18):
				bin.dy = (bin.yhigh-bin.ylow) / float(bin.ny)
			else:
				bin.dy = float(bmath.format(header[11],9,useD=False))

			bin.zlow  = float(bmath.format(header[12],9,useD=False))
			bin.zhigh = float(bmath.format(header[13],9,useD=False))
			bin.nz	  = header[14]
			if bin.nz > 0 and bin.type not in (2,12):	# 8=special with z=real
				bin.dz = (bin.zhigh-bin.zlow) / float(bin.nz)
			else:
				bin.dz = float(bmath.format(header[15],9,useD=False))

			bin.lntzer= header[16]
			bin.bk	  = header[17]
			bin.b2	  = header[18]
			bin.tc	  = header[19]

			self.detector.append(bin)

			size  = bin.nx * bin.ny * bin.nz * 4
			if fortran.skip(f) != size:
				raise IOError("Invalid USRBIN file")
		f.close()
示例#32
0
def main():
    """ Converts ustsuw output into a ROOT TH1F histogram """

    parser = argparse.ArgumentParser(
        description=main.__doc__,
        epilog="Homepage: https://github.com/kbat/mc-tools")
    parser.add_argument('eventdat',
                        type=str,
                        nargs='*',
                        help='list of eventdat files')
    parser.add_argument('-o',
                        dest='root',
                        type=str,
                        help='output ROOT file name',
                        default="")
    parser.add_argument('-v',
                        '--verbose',
                        action='store_true',
                        default=False,
                        dest='verbose',
                        help='print what is being done')
    parser.add_argument('-f',
                        '--force',
                        action='store_true',
                        default=False,
                        dest='overwrite',
                        help='overwrite the output ROOT file')

    args = parser.parse_args()

    for f in args.eventdat:
        if not os.path.isfile(f):
            print("eventdat2root: File %s does not exist." % f,
                  file=sys.stderr)
            return 1

    if not args.overwrite and os.path.isfile(args.root):
        sys.exit("%s exists. Use '-f' to overwrite it." % args.root)

    first = True
    for eventdat in args.eventdat:
        with open(eventdat, 'rb') as f:
            print(eventdat)
            while True:
                data = fortran.read(f)
                if data is None:
                    break
                size = len(data)
                print("\nsize:", size)

                if first:
                    first = False

                    title, time, nregs, nsco, dist = struct.unpack(
                        "=80s32siii", data)

                    print("title:", title)
                    print("time:", time)
                    print("number of regions:", nregs)
                    print("number of scoring distributions:", nsco)
                    print("distribution:", dist)

                    DATA = array('f', nsco * nregs * [0.0])

                    fout = ROOT.TFile(args.root, "recreate", title)
                    T = ROOT.TTree("EVENTDAT", time)
                    T.Branch("DATA", DATA, "d%d[%d]/F" % (dist, nsco * nregs))
                elif size == 12:
                    pass
                elif size == 48:
                    pass
                elif size == 8:
                    pass
                elif size == nregs * nsco * 4:
                    val = struct.unpack("%df" % nregs * nsco, data)
                    for i, v in enumerate(val):
                        DATA[i] = v
                    T.Fill()

    T.Write()
    fout.Close()
示例#33
0
    def readHeader(self, filename):
        """Read USRBIN detector information"""
        f = super().readHeader(filename)

        for _ in range(1000):
            # Header
            data = fortran.read(f)
            if data is None: break
            size = len(data)

            # Statistics are present?
            if size == 14 and data[:10] == b"STATISTICS":
                self.statpos = f.tell()
                break
            elif size != 86:
                raise IOError("Invalid USRBIN file")

            # Parse header
            header = struct.unpack("=i10siiffifffifffififff", data)

            usrbin = Detector()
            usrbin.nb = header[0]
            usrbin.name = header[1].strip().decode()
            usrbin.type = header[2]
            usrbin.score = header[3]

            usrbin.xlow = float(bmath.format(header[4], 9))
            usrbin.xhigh = float(bmath.format(header[5], 9))
            usrbin.nx = header[6]
            if usrbin.nx > 0 and usrbin.type not in (2, 12, 8, 18):
                usrbin.dx = (usrbin.xhigh - usrbin.xlow) / float(usrbin.nx)
            else:
                usrbin.dx = float(bmath.format(header[7], 9))

            usrbin.ylow = float(bmath.format(header[8], 9))
            usrbin.yhigh = float(bmath.format(header[9], 9))
            if usrbin.type in (1, 11):
                # Round to pi if needed
                if abs(usrbin.ylow + math.pi) < 1e-6:
                    usrbin.ylow = -math.pi
                if abs(usrbin.yhigh - math.pi) < 1e-6:
                    usrbin.yhigh = math.pi
                elif abs(usrbin.yhigh - math.pi * 2) < 1e-6:
                    usrbin.yhigh = 2 * math.pi
            usrbin.ny = header[10]
            if usrbin.ny > 0 and usrbin.type not in (2, 12, 8, 18):
                usrbin.dy = (usrbin.yhigh - usrbin.ylow) / float(usrbin.ny)
            else:
                usrbin.dy = float(bmath.format(header[11], 9))

            usrbin.zlow = float(bmath.format(header[12], 9))
            usrbin.zhigh = float(bmath.format(header[13], 9))
            usrbin.nz = header[14]
            if usrbin.nz > 0 and usrbin.type not in (
                    2, 12):  # 8=special with z=real
                usrbin.dz = (usrbin.zhigh - usrbin.zlow) / float(usrbin.nz)
            else:
                usrbin.dz = float(bmath.format(header[15], 9))

            usrbin.lntzer = header[16]
            usrbin.bk = header[17]
            usrbin.b2 = header[18]
            usrbin.tc = header[19]

            self.detector.append(usrbin)

            size = usrbin.nx * usrbin.ny * usrbin.nz * 4
            if fortran.skip(f) != size:
                raise IOError("Invalid USRBIN file")
        f.close()
示例#34
0
def main():
    """ Converts ustsuw output into a ROOT TH1F histogram """

    parser = argparse.ArgumentParser(description=main.__doc__,
                                     epilog="Homepage: https://github.com/kbat/mc-tools")
    parser.add_argument('eventdat', type=str, nargs='*', help='list of eventdat files')
    parser.add_argument('-o', dest='root', type=str, help='output ROOT file name', default="")
    parser.add_argument('-v', '--verbose', action='store_true', default=False, dest='verbose', help='print what is being done')
    parser.add_argument('-f', '--force', action='store_true', default=False, dest='overwrite', help='overwrite the output ROOT file')

    
    args = parser.parse_args()

    for f in args.eventdat:
        if not os.path.isfile(f):
            print("eventdat2root: File %s does not exist." % f, file=sys.stderr)
            return 1

    if not args.overwrite and os.path.isfile(args.root):
        sys.exit("%s exists. Use '-f' to overwrite it." % args.root)

    first = True
    for eventdat in args.eventdat:
        with open(eventdat, 'rb') as f:
            print(eventdat)
            while True:
                data = fortran.read(f)
                if data is None:
                    break
                size = len(data)
                print("\nsize:",size)
                
                if first:
                    first = False

                    title, time, nregs, nsco, dist = struct.unpack("=80s32siii", data)

                    print("title:", title)
                    print("time:", time)
                    print("number of regions:",nregs)
                    print("number of scoring distributions:", nsco)
                    print("distribution:",dist)

                    DATA = array('f', nsco*nregs*[0.0])
                    
                    fout = ROOT.TFile(args.root, "recreate", title)
                    T = ROOT.TTree("EVENTDAT", time)
                    T.Branch("DATA", DATA, "d%d[%d]/F" % (dist,nsco*nregs))
                elif size == 12:
                    pass
                elif size == 48:
                    pass
                elif size == 8:
                    pass
                elif size == nregs*nsco*4:
                    val = struct.unpack("%df" % nregs*nsco, data)
                    for i,v in enumerate(val):
                        DATA[i] = v
                    T.Fill()
            
    T.Write()
    fout.Close()
示例#35
0
文件: Data.py 项目: kbat/mc-tools
	def readHeader(self, filename):
		"""Read residual nuclei detector information"""
		f = Usrxxx.readHeader(self, filename)
		self.nisomers = 0
		if self.ncase <= 0:
			self.evol = True
			self.ncase = -self.ncase

			data = fortran.read(f)
			nir = (len(data)-4)//8
			self.irrdt = struct.unpack("=i%df"%(2*nir), data)
		else:
			self.evol  = False
			self.irrdt = None

		for i in range(1000):
			# Header
			data = fortran.read(f)
			if data is None: break
			size = len(data)
			self.irrdt = None

			# Statistics are present?
			if size == 14 and data[:8] ==	"ISOMERS:":
				self.nisomers = struct.unpack("=10xi",data)[0]
				data = fortran.read(f)
				data = fortran.read(f)
				size = len(data)

			if size == 14 and data[:10] == "STATISTICS":
				self.statpos = f.tell()
				break

			if size != 38:
				raise IOError("Invalid RESNUCLEi file header size=%d"%(size))

			# Parse header
			header = struct.unpack("=i10siif3i", data)

			det = Detector()
			det.nb	   = header[ 0]
			det.name   = header[ 1].strip()
			det.type   = header[ 2]
			det.region = header[ 3]
			det.volume = header[ 4]
			det.mhigh  = header[ 5]
			det.zhigh  = header[ 6]
			det.nmzmin = header[ 7]

			self.detector.append(det)

			if self.evol:
				data = fortran.read(f)
				self.tdecay = struct.unpack("=f", data)
			else:
				self.tdecay = 0.0

			size  = det.zhigh * det.mhigh * 4
			if size != fortran.skip(f):
				raise IOError("Invalid RESNUCLEi file")

		f.close()
示例#36
0
    def readHeader(self, filename):
        """Read boundary crossing detector information"""
        f = super().readHeader(filename)

        for _ in range(1000):
            # Header
            data = fortran.read(f)
            if data is None: break
            size = len(data)

            # Statistics are present?
            if size == 14:
                # In statistics
                #   1: total, error
                #   2: N,NG,Elow (array with Emaxi)
                #   3: Differential integrated over solid angle
                #   4: -//- errors
                #   5: Cumulative integrated over solid angle
                #   6: -//- errors
                #   7: Double differential data
                self.statpos = f.tell()
                for det in self.detector:
                    data = unpackArray(fortran.read(f))
                    det.total = data[0]
                    det.totalerror = data[1]
                    for j in range(6):
                        fortran.skip(f)
                break
            elif size != 78:
                raise IOError("Invalid USRBDX file")

            # Parse header
            header = struct.unpack("=i10siiiifiiiffifffif", data)

            det = Detector()
            det.nb = header[0]  # mx
            det.name = header[1].strip().decode()  # titusx
            det.type = header[2]  # itusbx
            det.dist = header[3]  # idusbx
            det.reg1 = header[4]  # nr1usx
            det.reg2 = header[5]  # nr2usx
            det.area = header[6]  # ausbdx
            det.twoway = header[7]  # lwusbx
            det.fluence = header[8]  # lfusbx
            det.lowneu = header[9]  # llnusx
            det.elow = header[10]  # ebxlow
            det.ehigh = header[11]  # ebxhgh
            det.ne = header[12]  # nebxbn
            det.de = header[13]  # debxbn
            det.alow = header[14]  # abxlow
            det.ahigh = header[15]  # abxhgh
            det.na = header[16]  # nabxbn
            det.da = header[17]  # dabxbn

            self.detector.append(det)

            if det.lowneu:
                data = fortran.read(f)
                det.ngroup = struct.unpack("=i", data[:4])[0]
                det.egroup = struct.unpack("=%df" % (det.ngroup + 1), data[4:])
            else:
                det.ngroup = 0
                det.egroup = []

            size = (det.ngroup + det.ne) * det.na * 4
            if size != fortran.skip(f):
                raise IOError("Invalid USRBDX file")
        f.close()
示例#37
0
    def readHeader(self, filename):
        """Read residual nuclei detector information"""
        f = super().readHeader(filename)
        self.nisomers = 0
        if self.ncase <= 0:
            self.evol = True
            self.ncase = -self.ncase

            data = fortran.read(f)
            nir = (len(data) - 4) // 8
            self.irrdt = struct.unpack("=i%df" % (2 * nir), data)
        else:
            self.evol = False
            self.irrdt = None

        for _ in range(1000):
            # Header
            data = fortran.read(f)
            if data is None: break
            size = len(data)
            self.irrdt = None

            # Statistics are present?
            if size == 14:
                if data[:8] == b"ISOMERS:":
                    self.nisomers = struct.unpack("=10xi", data)[0]
                    data = fortran.read(f)
                    data = fortran.read(f)
                    size = len(data)
                if data[:10] == b"STATISTICS":
                    self.statpos = f.tell()
                    break
            elif size != 38:
                raise IOError("Invalid RESNUCLEi file header size=%d" % (size))

            # Parse header
            header = struct.unpack("=i10siif3i", data)

            det = Detector()
            det.nb = header[0]
            det.name = header[1].strip().decode()
            det.type = header[2]
            det.region = header[3]
            det.volume = header[4]
            det.mhigh = header[5]
            det.zhigh = header[6]
            det.nmzmin = header[7]

            self.detector.append(det)

            if self.evol:
                data = fortran.read(f)
                self.tdecay = struct.unpack("=f", data)
            else:
                self.tdecay = 0.0

            size = det.zhigh * det.mhigh * 4
            if size != fortran.skip(f):
                raise IOError("Invalid RESNUCLEi file")

        f.close()
示例#38
0
def main():
    """ Converts PLOTGEOM output into a ROOT TMuiltiGraph object """

    parser = argparse.ArgumentParser(description=main.__doc__,
                                     epilog="Homepage: https://github.com/kbat/mc-tools")
    parser.add_argument('plotgeom', type=str, nargs='*', help='list of plotgeom files')
    parser.add_argument('-o', dest='root', type=str, help='output ROOT file name', default="")
    parser.add_argument('-v', '--verbose', action='store_true', default=False, dest='verbose', help='print what is being done')
    parser.add_argument('-f', '--force', action='store_true', default=False, dest='overwrite', help='overwrite the output ROOT file')


    args = parser.parse_args()

    for f in args.plotgeom:
        if not os.path.isfile(f):
            sys.exit("plotgeom2root: File %s does not exist." % f)

    wlength = 0
    title = ""
    for plotgeom in args.plotgeom:
        if args.root == "":
            rootFileName = "%s%s" % (plotgeom,".root")
        else:
            rootFileName = args.root

        if not args.overwrite and os.path.isfile(rootFileName):
            sys.exit("%s exists. Use '-f' to overwrite it." % rootFileName)

        with open(plotgeom, 'rb') as f:
            data = fortran.read(f)
            size = len(data)
            if size != 80:
                sys.exit("Format error [title]")
            title = struct.unpack("=80s", data)[0].decode('utf-8').strip()
            if args.verbose:
                print(title)

            data = fortran.read(f)
            size = len(data)
            if size != 14*4:
                print("Format error [basis]")
            X0,Y0,Z0,X1,Y1,Z1,TYX,TYY,TYZ,TXX,TXY,TXZ,XAXLEN,YAXLEN = struct.unpack("=14f", data) # http://www.fluka.org/fluka.php?id=man_onl&sub=63
            if not args.verbose:
                print("Bottom left corner:",X0,Y0,Z0)
                print("Top right corner:",X1,Y1,Z1)
                print("Direction cosines of the x-axis:",TXX,TXY,TXZ)
                print("Direction cosines of the y-axis:",TYX,TYY,TYZ)
                print("x and y axis length:",XAXLEN,YAXLEN)
#                print(X0,Y0,Z0,X1,Y1,Z1,TYX,TYY,TYZ,TXX,TXY,TXZ,XAXLEN,YAXLEN)

            for i in range(1):
                data = fortran.read(f)
                size = len(data)
                if args.verbose:
                    print("size: ",size)
                if size==8:
                    NWORMS,dummy = struct.unpack("=2i", data)
                    if args.verbose:
                        print("NWORMS:",NWORMS,dummy)
#                elif size==12: # this is never called
#                    NWORMS,dummy,dummy1 = struct.unpack("=3i", data)
#                    print(NWORMS,dummy,dummy1)

            i = 0
            fout = ROOT.TFile(rootFileName, "recreate", plotgeom)
            mg = ROOT.TMultiGraph("mg", title)
            while True:
                i = i + 1
                data = fortran.read(f)
                if data is None:
                    break
                size = len(data)
                if args.verbose:
                    print("\nsize:",size)

                if size == 12:
                    windex,dummy,wlength = struct.unpack("=3i",data)
                    if args.verbose:
                        print(windex,dummy,wlength)
                elif size==8:
                    tmp = struct.unpack("=2i", data)
                    if args.verbose:
                        print("size8:",tmp)
##                    break
                elif size==24:
                    tmp = struct.unpack("=3i3f", data)
                    if args.verbose:
                        print("size24:",tmp)
                else:
                    if args.verbose:
                        print("a",wlength)
                    coord = struct.unpack("=%df" % (wlength*2),data) # pairs of x,y
                    if args.verbose:
                        print(coord[:10])
                    x = list(map(lambda x:x+Y0, coord[::2])) #[x+Y0 for x in coord[::2]]
                    y = list(map(lambda y:y+X0, coord[1::2]))
                    g = ROOT.TGraph(len(x), array('f', x), array('f', y))
                    g.SetName("g%d" % i)
                    mg.Add(g)

        mg.Write()
        fout.Close()
示例#39
0
文件: Data.py 项目: kbat/mc-tools
	def readHeader(self, filename):
		"""Read boundary crossing detector information"""
		f = Usrxxx.readHeader(self, filename)

		for i in range(1000):
			# Header
			data = fortran.read(f)
			if data is None: break
			size = len(data)

			# Statistics are present?
			if size == 14:
				# In statistics
				#   1: total, error
				#   2: N,NG,Elow (array with Emaxi)
				#   3: Differential integrated over solid angle
				#   4: -//- errors
				#   5: Cumulative integrated over solid angle
				#   6: -//- errors
				#   7: Double differential data
				self.statpos = f.tell()
				for det in self.detector:
					data = unpackArray(fortran.read(f))
					det.total = data[0]
					det.totalerror = data[1]
					for j in range(6):
						fortran.skip(f)
				break
			if size != 78: raise IOError("Invalid USRBDX file")

			# Parse header
			header = struct.unpack("=i10siiiifiiiffifffif", data)

			det = Detector()
			det.nb	    = header[ 0]		# mx
			det.name    = header[ 1].strip()	# titusx
			det.type    = header[ 2]		# itusbx
			det.dist    = header[ 3]		# idusbx
			det.reg1    = header[ 4]		# nr1usx
			det.reg2    = header[ 5]		# nr2usx
			det.area    = header[ 6]		# ausbdx
			det.twoway  = header[ 7]		# lwusbx
			det.fluence = header[ 8]		# lfusbx
			det.lowneu  = header[ 9]		# llnusx
			det.elow    = header[10]		# ebxlow
			det.ehigh   = header[11]		# ebxhgh 
			det.ne	    = header[12]		# nebxbn
			det.de	    = header[13]		# debxbn
			det.alow    = header[14]		# abxlow
			det.ahigh   = header[15]		# abxhgh
			det.na	    = header[16]		# nabxbn
			det.da	    = header[17]		# dabxbn

			self.detector.append(det)

			if det.lowneu:
				data = fortran.read(f)
				det.ngroup = struct.unpack("=i",data[:4])[0]
				det.egroup = struct.unpack("=%df"%(det.ngroup+1), data[4:])
			else:
				det.ngroup = 0
				det.egroup = []

			size  = (det.ngroup+det.ne) * det.na * 4
			if size != fortran.skip(f):
				raise IOError("Invalid USRBDX file")
		f.close()