def readIdxrefLp(pathToIdxrefLp, resultXDSIndexing=None): if resultXDSIndexing is None: resultXDSIndexing = {} if pathToIdxrefLp.exists(): with open(str(pathToIdxrefLp)) as f: listLines = f.readlines() indexLine = 0 doParseParameters = False doParseLattice = False while indexLine < len(listLines): if "DIFFRACTION PARAMETERS USED AT START OF INTEGRATION" in listLines[ indexLine]: doParseParameters = True doParseLattice = False elif "DETERMINATION OF LATTICE CHARACTER AND BRAVAIS LATTICE" in listLines[ indexLine]: doParseParameters = False doParseLattice = True if doParseParameters: if "MOSAICITY" in listLines[indexLine]: resultXDSIndexing['mosaicity'] = float( listLines[indexLine].split()[-1]) elif "DETECTOR COORDINATES (PIXELS) OF DIRECT BEAM" in listLines[ indexLine]: resultXDSIndexing['xBeam'] = float( listLines[indexLine].split()[-1]) resultXDSIndexing['yBeam'] = float( listLines[indexLine].split()[-2]) elif "CRYSTAL TO DETECTOR DISTANCE" in listLines[ indexLine]: resultXDSIndexing['distance'] = float( listLines[indexLine].split()[-1]) elif doParseLattice: if listLines[indexLine].startswith( " * ") and not listLines[indexLine + 1].startswith(" * "): listLine = listLines[indexLine].split() latticeCharacter = int(listLine[1]) bravaisLattice = listLine[2] spaceGroup = UtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice( bravaisLattice) spaceGroupNumber = UtilsSymmetry.getITNumberFromSpaceGroupName( spaceGroup) qualityOfFit = float(listLine[3]) resultXDSIndexing.update({ 'latticeCharacter': latticeCharacter, 'spaceGroupNumber': spaceGroupNumber, 'qualityOfFit': qualityOfFit, 'a': float(listLine[4]), 'b': float(listLine[5]), 'c': float(listLine[6]), 'alpha': float(listLine[7]), 'beta': float(listLine[8]), 'gamma': float(listLine[9]) }) indexLine += 1 return resultXDSIndexing
def test_getMinimumSymmetrySpaceGroupFromBravaisLattice(self): """ Testing retrieving the lowest symmetry space group from all Bravais Lattices """ listBravaisLattice = [ "aP", "mP", "mC", "mI", "oP", "oA", "oB", "oC", "oS", "oF", "oI", "tP", "tC", "tI", "tF", "hP", "hR", "cP", "cF", "cI", ] listSpaceGroup = [ "P1", "P2", "C2", "C2", "P222", "C222", "C222", "C222", "C222", "F222", "I222", "P4", "P4", "I4", "I4", "P3", "H3", "P23", "F23", "I23", ] for index in range(len(listBravaisLattice)): self.assertEqual( listSpaceGroup[index], UtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice( listBravaisLattice[index]), )
def parseLattice(indexLine, listLines, resultXDSIndexing): if listLines[indexLine].startswith( " * ") and not listLines[indexLine + 1].startswith(" * "): listLine = listLines[indexLine].split() latticeCharacter = int(listLine[1]) bravaisLattice = listLine[2] spaceGroup = UtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice( bravaisLattice) spaceGroupNumber = UtilsSymmetry.getITNumberFromSpaceGroupName( spaceGroup) qualityOfFit = float(listLine[3]) resultXDSIndexing.update({ "latticeCharacter": latticeCharacter, "spaceGroupNumber": spaceGroupNumber, "qualityOfFit": qualityOfFit, "a": float(listLine[4]), "b": float(listLine[5]), "c": float(listLine[6]), "alpha": float(listLine[7]), "beta": float(listLine[8]), "gamma": float(listLine[9]), })