Add test cases for full reduction with and w/o slicing (data to be stored in "test_data" folder)

This commit is contained in:
2024-03-04 17:39:10 +01:00
parent 363710c95c
commit 8300e842dc
7 changed files with 108 additions and 31 deletions
+1
View File
@@ -1,5 +1,6 @@
*~
*.bak
*.log
__py_cache__
raw
.idea
-1
View File
@@ -180,7 +180,6 @@ def command_line_options():
autoscale=clas.autoscale,
thetaRange=clas.thetaRange,
thetaRangeR=clas.thetaRangeR,
lambdaRange=clas.lambdaRange,
fileIdentifier=clas.fileIdentifier,
scale=clas.scale,
subtract=clas.subtract,
+1 -3
View File
@@ -76,7 +76,7 @@ class AmorData:
#-------------------------------------------------------------------------------------------------
def path_generator(self, number):
fileName = f'amor{self.reader_config.year}n{number:06d}.hdf'
if os.path.exists(f'{self.reader_config.dataPath}/{fileName}'):
if os.path.exists(os.path.join(self.reader_config.dataPath,fileName)):
path = self.reader_config.dataPath
elif os.path.exists(fileName):
path = '.'
@@ -149,8 +149,6 @@ class AmorData:
if self.config.sampleModel:
model = self.config.sampleModel
else:
model = None
# assembling orso header information
self.header.owner = fileio.Person(
+2 -4
View File
@@ -12,13 +12,12 @@ class ReaderConfig:
@dataclass
class ExperimentConfig:
sampleModel: str
chopperPhase: float
yRange: Tuple[float, float]
lambdaRange: Tuple[float, float]
qzRange: Tuple[float, float]
sampleModel: Optional[str] = None
chopperPhaseOffset: float = 0.0
mu: Optional[float] = None
nu: Optional[float] = None
@@ -28,14 +27,13 @@ class ExperimentConfig:
@dataclass
class ReductionConfig:
qResolution: float
autoscale: Tuple[bool, bool]
thetaRange: Tuple[float, float]
thetaRangeR: Tuple[float, float]
lambdaRange: Tuple[float, float]
fileIdentifier: list = field(default_factory=lambda: ["0"])
scale: list = field(default_factory=lambda: [1]) #per file scaling; if less elements than files use the last one
autoscale: Optional[Tuple[bool, bool]] = None
subtract: Optional[str] = None
normalisationFileIdentifier: Optional[list] = None
timeSlize: Optional[list] = None
+22 -23
View File
@@ -210,18 +210,16 @@ class AmorReduction:
logging.warning(f' time slize {ti:4d}, done')
def save_Rqz(self):
logging.warning(f' {self.reader_config.dataPath}/{self.output_config.outputName}.Rqz.ort')
fname = os.path.join(self.reader_config.dataPath, f'{self.output_config.outputName}.Rqz.ort')
logging.warning(f' {fname}')
theSecondLine = f' {self.header.experiment.title} | {self.header.experiment.start_date} | sample {self.header.sample.name} | R(q_z)'
fileio.save_orso(self.datasetsRqz, f'{self.reader_config.dataPath}/{self.output_config.outputName}.Rqz.ort',
data_separator='\n',
comment=theSecondLine)
fileio.save_orso(self.datasetsRqz, fname, data_separator='\n', comment=theSecondLine)
def save_Rtl(self):
logging.warning(f' {self.reader_config.dataPath}/{self.output_config.outputName}.Rlt.ort')
fname = os.path.join(self.reader_config.dataPath, f'{self.output_config.outputName}.Rlt.ort')
logging.warning(f' {fname}')
theSecondLine = f' {self.header.experiment.title} | {self.header.experiment.start_date} | sample {self.header.sample.name} | R(lambda, theta)'
fileio.save_orso(self.datasetsRlt, f'{self.reader_config.dataPath}/{self.output_config.outputName}.Rlt.ort',
data_separator='\n',
comment=theSecondLine)
fileio.save_orso(self.datasetsRlt, fname, data_separator='\n', comment=theSecondLine)
def autoscale(self, q_q, R_q, dR_q, pR_q=[], pdR_q=[]):
autoscale = self.reduction_config.autoscale
@@ -278,12 +276,13 @@ class AmorReduction:
return q_q[1:], R_q, dR_q, dq_q
def loadRqz(self, name):
if os.path.exists(f'{self.reader_config.dataPath}/{name}'):
fileName = f'{self.reader_config.dataPath}/{name}'
elif os.path.exists(f'{self.reader_config.dataPath}/{name}.Rqz.ort'):
fileName = f'{self.reader_config.dataPath}/{name}.Rqz.ort'
fname = os.path.join(self.reader_config.dataPath, name)
if os.path.exists(fname):
fileName = fname
elif os.path.exists(f'{fname}.Rqz.ort'):
fileName = f'{fname}.Rqz.ort'
else:
sys.exit(f'### the background file \'{self.reader_config.dataPath}/{name}\' does not exist! => stopping')
sys.exit(f'### the background file \'{fname}\' does not exist! => stopping')
q_q, Sq_q, dS_q = np.loadtxt(fileName, usecols=(0, 1, 2), comments='#', unpack=True)
@@ -295,14 +294,14 @@ class AmorReduction:
name = str(normalisation_list[0])
for i in range(1, len(normalisation_list), 1):
name = f'{name}_{normalisation_list[i]}'
if os.path.exists(f'{dataPath}/{name}.norm'):
logging.info(f'# normalisation matrix: found and using {dataPath}/{name}.norm')
n_path = os.path.join(dataPath, f'{name}.norm')
if os.path.exists(n_path):
logging.info(f'# normalisation matrix: found and using {n_path}')
self.norm_lz = np.loadtxt(f'{dataPath}/{name}.norm')
fh = open(f'{dataPath}/{name}.norm', 'r')
fh.readline()
self.normFileList = fh.readline().split('[')[1].split(']')[0].replace('\'', '').split(', ')
self.normAngle = float(fh.readline().split('= ')[1])
fh.close()
with open(n_path, 'r') as fh:
fh.readline()
self.normFileList = fh.readline().split('[')[1].split(']')[0].replace('\'', '').split(', ')
self.normAngle = float(fh.readline().split('= ')[1])
for i, entry in enumerate(self.normFileList):
self.normFileList[i] = entry.split('/')[-1]
self.header.measurement_additional_files = self.normFileList
@@ -362,9 +361,9 @@ class AmorReduction:
t0 = fromHDF.nu - fromHDF.mu
mask_lz = np.logical_and(mask_lz, np.where(theta_lz-t0 >= self.reduction_config.thetaRangeR[0], True, False))
mask_lz = np.logical_and(mask_lz, np.where(theta_lz-t0 <= self.reduction_config.thetaRangeR[1], True, False))
if self.reduction_config.lambdaRange[1]<15:
mask_lz = np.logical_and(mask_lz, np.where(lamda_lz >= self.reduction_config.lambdaRange[0], True, False))
mask_lz = np.logical_and(mask_lz, np.where(lamda_lz <= self.reduction_config.lambdaRange[1], True, False))
if self.experiment_config.lambdaRange[1]<15:
mask_lz = np.logical_and(mask_lz, np.where(lamda_lz >= self.experiment_config.lambdaRange[0], True, False))
mask_lz = np.logical_and(mask_lz, np.where(lamda_lz <= self.experiment_config.lambdaRange[1], True, False))
# gravity correction
#theta_lz += np.rad2deg( np.arctan( 3.07e-10 * (fromHDF.detectorDistance + detXdist_e) * lamda_lz**2 ) )
View File
+82
View File
@@ -0,0 +1,82 @@
import os
from unittest import TestCase
from libeos import options, reduction, logconfig
logconfig.setup_logging()
logconfig.update_loglevel(True, False)
class FullAmorTest(TestCase):
def setUp(self):
self.reader_config = options.ReaderConfig(
year=2023,
dataPath=os.path.join('..', "test_data"))
def tearDown(self):
for fi in ['test.Rqz.ort', '614.norm']:
try:
os.unlink(os.path.join(self.reader_config.dataPath, fi))
except FileNotFoundError:
pass
def test_time_slicing(self):
experiment_config = options.ExperimentConfig(
chopperPhase=-13.5,
chopperPhaseOffset=-5,
yRange=(11., 41.),
lambdaRange=(2., 15.),
qzRange=(0.005, 0.30),
offSpecular=False,
mu=0,
nu=0,
muOffset=0.0,
sampleModel='air | 10 H2O | D2O'
)
reduction_config = options.ReductionConfig(
qResolution=0.01,
thetaRange=(-12., 12.),
thetaRangeR=(-12., 12.),
fileIdentifier=["610"],
scale=[1],
normalisationFileIdentifier=[],
timeSlize=[300.0]
)
output_config = options.OutputConfig(
outputFormats=["Rqz.ort"],
outputName='test'
)
config=options.EOSConfig(self.reader_config, experiment_config, reduction_config, output_config)
reducer = reduction.AmorReduction(config)
reducer.reduce()
def test_noslicing(self):
experiment_config = options.ExperimentConfig(
chopperPhase=-13.5,
chopperPhaseOffset=-5,
yRange=(11., 41.),
lambdaRange=(2., 15.),
qzRange=(0.005, 0.30),
offSpecular=False,
mu=0,
nu=0,
muOffset=0.0
)
reduction_config = options.ReductionConfig(
qResolution=0.01,
thetaRange=(-12., 12.),
thetaRangeR=(-12., 12.),
fileIdentifier=["610", "611", "608,612-613", "609"],
scale=[1],
normalisationFileIdentifier=["614"],
autoscale=(0.005, 0.008)
)
output_config = options.OutputConfig(
outputFormats=["Rqz.ort"],
outputName='test'
)
config=options.EOSConfig(self.reader_config, experiment_config, reduction_config, output_config)
reducer = reduction.AmorReduction(config)
reducer.reduce()
# run second time to reuse norm file
reducer = reduction.AmorReduction(config)
reducer.reduce()