def test_XML_errors(): fileString = "" fileString += "<?xml version='1.0'?>" fileString += "<Instrument Initialized='False' Author='Jakob Lass' Date ='16/03/18' position='0.0,0.0,0.0'>" fileString += "<Wedge position='0.0,0.0,0.0' concept='ManyToMany'>" fileString += "<FlatAnalyser direction='0.707,0.0,0.707' d_spacing='3.35' mosaicity='60' width='0.05' height='0.1'></FlatAnalyser>" fileString += "<TubeDetector1D position='1.198,0.0580,0.71' direction='0.998,0.04841,0.0' pixels='456' length='0.883' diameter='0.02' split='57, 114, 171, 228, 285, 342, 399'></TubeDetector1D>" fileString += "</Wedge>" fileString += "</Instrument>" temp_file = 'Tempfile.xml' f = open(temp_file, 'w') f.write(fileString) f.close() try: Instr = Instrument(fileName=temp_file) del Instr assert False except ValueError: assert True fileString = "" fileString += "<?xml version='1.0'?>" fileString += "<Instrument Initialized='False' Author='Jakob Lass' Date ='16/03/18' position='0.0,0.0,0.0'>" fileString += "<Wedge position='0.0,0.0,0.0' concept='ManyToMany'>" fileString += "<FlatAnalyser position='0.0580,0.71' direction='0.707,0.0,0.707' d_spacing='3.35' mosaicity='60' width='0.05' height='0.1'></FlatAnalyser>" fileString += "<TubeDetector1D position='1.198,0.0580,0.71' direction='0.998,0.04841,0.0' pixels='456' length='0.883' diameter='0.02' split='57, 114, 171, 228, 285, 342, 399'></TubeDetector1D>" fileString += "</Wedge>" fileString += "</Instrument>" f = open(temp_file, 'w') f.write(fileString) f.close() try: Instr = Instrument(fileName=temp_file) assert False except AttributeError: assert True fileString = "" fileString += "<?xml version='1.0'?>" fileString += "<Instrument Initialized='False' Author='Jakob Lass' Date ='16/03/18' position='0.0,0.0,0.0'>" fileString += "<FlatAnalyser position='0.0,0.0,0.0' concept='ManyToMany'>" fileString += "<FlatAnalyser position='0.0580,0.71' direction='0.707,0.0,0.707' d_spacing='3.35' mosaicity='60' width='0.05' height='0.1'></FlatAnalyser>" fileString += "<TubeDetector1D position='1.198,0.0580,0.71' direction='0.998,0.04841,0.0' pixels='456' length='0.883' diameter='0.02' split='57, 114, 171, 228, 285, 342, 399'></TubeDetector1D>" fileString += "</FlatAnalyser>" fileString += "</Instrument>" f = open(temp_file, 'w') f.write(fileString) f.close() try: Instr = Instrument(fileName=temp_file) assert False except ValueError: assert True os.remove(temp_file)
def test_instrument_create_xml(): Instr = Instrument() filename = 'temp' Instr.generateCAMEAXML(filename) Instr2 = Instrument(fileName=filename + '.xml') os.remove(filename + '.xml') assert (len(Instr2.wedges) == 8)
def test_Instrument_init(): Instr = Instrument() assert (np.all(Instr.position == (0, 0, 0))) Det = Detector.Detector(position=(1.0, 1, 0), direction=(1, 0, 0)) Ana = Analyser.Analyser(position=(0.5, 0, 0), direction=(1, 0, 1)) wedge = Wedge.Wedge(detectors=[Det, Det], analysers=Ana) Instr.wedges = [wedge, wedge] assert (Instr.settings['Initialized'] == False)
def test_Instrument_warnings(): Instr = Instrument() wedge = Wedge.Wedge(position=(0.5, 0, 0)) Instr.wedges = wedge with warnings.catch_warnings( record=True ) as w: # From https://docs.python.org/3.1/library/warnings.html # Cause all warnings to always be triggered. warnings.simplefilter("always") # Trigger a warning. Instr.wedges = wedge # Verify some things assert len(w) == 1 assert issubclass(w[0].category, UserWarning) assert 'The list of wedges is not empty! Appending new wedges(s)' in str( w[0].message)
def test_Instrument_saveload(): import os Instr = Instrument(position=(0, 1, 0)) Instr2 = Instrument() wedge = Wedge.Wedge(position=(0.5, 0, 0)) Det = Detector.TubeDetector1D(position=(1.0, 1, 0), direction=(1, 0, 0)) Ana = Analyser.FlatAnalyser(position=(0.5, 0, 0), direction=(1, 0, 1)) wedge.append([Det, Ana]) Instr.append(wedge) tempFile = 'temp.bin' Instr.save(tempFile) Instr2.load(tempFile) os.remove(tempFile) assert (Instr == Instr2)
def test_parseXML(): # Improve this test! tempFileName = '__temp__.xml' Instr = Instrument() Instr.settings['Author'] = 'Jakob Lass' wedge = Wedge.Wedge(position=(0.5, 0, 0)) Det = Detector.TubeDetector1D(position=(1.0, 1, 0), direction=(1, 0, 0)) Ana = Analyser.FlatAnalyser(position=(0.5, 0, 0), direction=(1, 0, 1)) wedge.append([Det, Ana]) Instr.append([wedge, wedge]) Instr.append(wedge) Instr.saveXML(tempFileName) InstrLoaded = Instrument(fileName=tempFileName) os.remove(tempFileName) assert (Instr == InstrLoaded)
def test_Instrument_append(): Instr = Instrument() wedge = Wedge.Wedge(position=(0.5, 0, 0)) Instr.append([wedge, wedge]) Instr.append(wedge) assert (len(Instr.wedges) == 3)
def test_Instrument_plot(): Instr = Instrument() wedge = Wedge.Wedge(position=(0.5, 0, 0)) Det = Detector.TubeDetector1D(position=(1.0, 1, 0), direction=(1, 0, 0)) Ana = Analyser.FlatAnalyser(position=(0.5, 0, 0), direction=(1, 0, 1)) wedge.append([Det, Ana]) Instr.append(wedge) plt.ioff() fig = plt.figure() ax = fig.gca(projection='3d') Instr.plot(ax)
def test_Normalization_tables(quick): Instr = Instrument(fileName=os.path.join('Data', 'CAMEA_Updated.xml')) Instr.initialize() NF = os.path.join(dataPath, 'camea2018n000038.hdf') #AF = 'TestData/1024/A4Normalization.h5' try: Instr.generateCalibration(Vanadiumdatafile=NF, savelocation=os.path.join(dataPath, ''), plot=False, tables=[]) # No binning specified assert False except AttributeError: assert True try: Instr.generateCalibration(Vanadiumdatafile=NF, savelocation=os.path.join(dataPath, ''), plot=False, tables=['Nothing?']) # Wrong binning assert False except AttributeError: assert True if not quick == True: Instr.generateCalibration(Vanadiumdatafile=NF, savelocation=os.path.join(dataPath, ''), plot=False, tables=[1, 3, 8]) else: Instr.generateCalibration(Vanadiumdatafile=NF, savelocation=os.path.join(dataPath, ''), plot=False, tables=[1])
def test_Instrument_error(): try: Instr = Instrument(fileName='wrongDummyFile.bin') assert False except ValueError: assert True Instr = Instrument() Ana = Analyser.FlatAnalyser(position=(0.5, 0, 0), direction=(1, 0, 1)) try: Instr.wedges = Ana assert False except AttributeError: assert True try: Instr.wedges = [Ana, Ana] assert False except AttributeError: assert True try: Instr.append("Wrong object type") assert False except AttributeError: assert True try: Instr.append(["List of", 3.0, "wrong objects"]) assert False except AttributeError: assert True try: Instr.settings = {'Name', 'New dictionary'} assert False except NotImplementedError: return True
def test_instrument_string_dummy(): # Todo: Improve test! Instr = Instrument() string = str(Instr) del string assert True
def test_Instrument_Initialization(): Instr = Instrument() wedge = Wedge.Wedge(position=(0.5, 0, 0), concept='ManyToMany') pixels = 33 split = [12] Det = Detector.TubeDetector1D(position=(1.0, 1, 0), direction=(1, 0, 0), pixels=pixels, split=split) Ana = Analyser.FlatAnalyser(position=(0.5, 0, 0), direction=(1, 0, 1)) wedge.append([Det, Det, Ana, Ana, Ana]) try: Instr.initialize() assert False except ValueError: assert True try: print(Instr.A4) assert False except RuntimeError: assert True try: print(Instr.Ef) assert False except RuntimeError: assert True Instr.append(wedge) try: Instr.initialize() assert False except ValueError: assert True Instr.wedges[0].detectors[0].split = [0, 12, 20, pixels] Instr.initialize() assert (len(Instr.A4) == 1) assert (len(Instr.A4[0]) == 2) assert (len(Instr.A4[0][0]) == pixels) assert (len(Instr.A4) == len(Instr.Ef)) assert (len(Instr.A4[0]) == len(Instr.Ef[0])) assert (len(Instr.A4[0][0]) == len(Instr.Ef[0][0])) assert (Instr.settings['Initialized'] == True) try: Instr.A4 = [] assert False except NotImplementedError: assert True try: Instr.Ef = [] assert False except NotImplementedError: assert True
def test_Instrument_Setting(): Instr = Instrument() Instr.settings['SettingVersion'] = 1.0 assert (Instr.settings['SettingVersion'] == 1.0)