Ejemplo n.º 1
0
	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)
Ejemplo n.º 2
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)
Ejemplo n.º 3
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
Ejemplo n.º 4
0
	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
Ejemplo n.º 5
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
Ejemplo n.º 6
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
Ejemplo n.º 7
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()
Ejemplo n.º 8
0
 def readData(self, n):
     """Read n(th) detector data structure"""
     f = open(self.file, "rb")
     fortran.skip(f)
     for _ 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
Ejemplo n.º 9
0
	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
Ejemplo n.º 10
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
Ejemplo n.º 11
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
Ejemplo n.º 12
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()
Ejemplo n.º 13
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
Ejemplo n.º 14
0
	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
Ejemplo n.º 15
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 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)
Ejemplo n.º 16
0
	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
Ejemplo n.º 17
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
Ejemplo n.º 18
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()
Ejemplo n.º 19
0
	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()
Ejemplo n.º 20
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()
Ejemplo n.º 21
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)
Ejemplo n.º 22
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
Ejemplo n.º 23
0
	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()
Ejemplo n.º 24
0
	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
Ejemplo n.º 25
0
	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()
Ejemplo n.º 26
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()
Ejemplo n.º 27
0
    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()