mirror of
https://github.com/gwm17/Mask.git
synced 2025-04-11 02:28:51 -04:00
80 lines
1.8 KiB
Python
Executable File
80 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import numpy as np
|
|
import struct
|
|
|
|
class MaskFileData :
|
|
def __init__(self, n):
|
|
self.Z = np.zeros(n, dtype=int)
|
|
self.A = np.zeros(n, dtype=int)
|
|
self.dFlag = np.zeros(n, dtype=bool)
|
|
self.E = np.zeros(n)
|
|
self.KE = np.zeros(n)
|
|
self.p = np.zeros(n)
|
|
self.theta = np.zeros(n)
|
|
self.phi = np.zeros(n)
|
|
|
|
class MaskFile:
|
|
int_size = 4
|
|
double_size = 8
|
|
bool_size = 1
|
|
|
|
def __init__(self, filename=""):
|
|
self.eofFlag = False
|
|
self.openFlag = False
|
|
if filename != "" :
|
|
self.Open(filename)
|
|
|
|
def Open(self, filename):
|
|
self.filename = filename
|
|
self.file = open(self.filename, mode="rb")
|
|
if self.file.closed :
|
|
self.openFlag = False
|
|
else:
|
|
self.openFlag = True
|
|
|
|
def ReadHeader(self):
|
|
data = self.file.read(2*self.int_size)
|
|
|
|
(self.nsamples, self.rxntype) = struct.unpack("ii", data)
|
|
self.datasize = (5*self.double_size+2*self.int_size+self.bool_size)
|
|
self.datastr = "=ii?ddddd"
|
|
|
|
if self.rxntype == 0:
|
|
self.N_nuclei = 3
|
|
elif self.rxntype == 1:
|
|
self.N_nuclei = 4
|
|
elif self.rxntype == 2:
|
|
self.N_nuclei = 6
|
|
elif self.rxntype == 3:
|
|
self.N_nuclei = 8
|
|
|
|
def ReadData(self):
|
|
data = MaskFileData(self.N_nuclei)
|
|
for i in range(self.N_nuclei):
|
|
buffer = self.file.read(self.datasize)
|
|
(data.Z[i], data.A[i], data.dFlag[i], data.E[i], data.KE[i], data.p[i], data.theta[i], data.phi[i]) = struct.unpack(self.datastr, buffer)
|
|
if buffer == "":
|
|
self.eofFlag = True
|
|
|
|
return data
|
|
|
|
def Close(self):
|
|
self.file.close()
|
|
|
|
def main() :
|
|
file = MaskFile(filename="/data1/gwm17/mask_tests/7Bedp_870keV_beam_50CD2.mask")
|
|
file.ReadHeader()
|
|
print("samples: ", file.nsamples, "rxntype:", file.rxntype, "datasize:", file.datasize)
|
|
count=0
|
|
for i in range(file.nsamples):
|
|
file.ReadData()
|
|
count += 1
|
|
|
|
print("count:",count)
|
|
print("eofFlag:",file.eofFlag)
|
|
|
|
file.Close()
|
|
|
|
if __name__ == '__main__':
|
|
main() |