def initialize_experiment(cfg): """takes a yml configuration file as input""" # make experiment ws = expt.Experiment() cwd = cfg.working_dir materials_fname = cfg.material.definitions material_name = cfg.material.active detector_fname = cfg.instrument.detector.parameters_old # load materials ws.loadMaterialList(os.path.join(cwd, materials_fname)) ws.activeMaterial = material_name logger.info("setting active material to '%s'", material_name) pd = ws.activeMaterial.planeData # detector data try: reader = ReadGE(cfg.image_series.omegaseries) except IOError: logger.info("raw data not found, skipping reader init") reader = None try: ws.loadDetector(os.path.join(cwd, detector_fname)) detector = ws.detector except IOError: logger.info( "old detector par file not found, skipping; \nalthough you may need this for find-orientations" ) detector = None return pd, reader, detector
def initialize_experiment(cfg): """takes a yml configuration file as input""" # make experiment ws = expt.Experiment() cwd = cfg.working_dir materials_fname = cfg.material.definitions material_name = cfg.material.active detector_fname = cfg.instrument.detector.parameters_old # load materials ws.loadMaterialList(os.path.join(cwd, materials_fname)) ws.activeMaterial = material_name logger.info("setting active material to '%s'", material_name) pd = ws.activeMaterial.planeData image_start = cfg.image_series.images.start dark = cfg.image_series.dark flip = cfg.image_series.flip # detector data try: reader = ReadGE( [(f, image_start) for f in cfg.image_series.files], np.radians(cfg.image_series.omega.start), np.radians(cfg.image_series.omega.step), subtractDark=dark is not None, # TODO: get rid of this dark=dark, doFlip=flip is not None, flipArg=flip, # TODO: flip=flip ) except IOError: logger.info("raw data not found, skipping reader init") reader = None try: ws.loadDetector(os.path.join(cwd, detector_fname)) detector = ws.detector except IOError: logger.info( "old detector par file not found, skipping; \nalthough you may need this for find-orientations" ) detector = None return pd, reader, detector
def initialize_experiment(cfg_file): """ """ parser = SafeConfigParser() parser.read(cfg_file) hexrd_root = parser.get('base', 'hexrd_root') # make experiment ws = expt.Experiment(cfgFile=os.path.join(hexrd_root, "hexrd/data/materials.cfg"), matFile=os.path.join(hexrd_root, "hexrd/data/all_materials.cfg")) working_dir = parser.get('base', 'working_dir') materials_fname = parser.get('material', 'materials_fname') material_name = parser.get('material', 'material_name') detector_fname = parser.get('detector', 'parfile_name') # MATERIALS ws.loadMaterialList(os.path.join(working_dir, materials_fname)) ws.activeMaterial = material_name print "setting active material to '%s'" % (material_name) pd = ws.activeMaterial.planeData image_dir = parser.get('reader', 'image_dir') # number of files ASSUMING SEQUENTIAL SCAN NUMBERS file_start = parser.getint('reader', 'file_start') file_stop = parser.getint('reader', 'file_stop') file_suffix = parser.get('reader', 'file_suffix') nfiles = file_stop - file_start + 1 zpad_str = '%0' + parser.get('reader', 'file_zpad') + 'd' # int fileInfo = [] for i in [file_start + i for i in range(nfiles)]: if file_suffix == '': image_filename = parser.get('reader', 'file_root') + '_' + zpad_str % (i) else: image_filename = parser.get( 'reader', 'file_root') + '_' + zpad_str % (i) + '.' + file_suffix fileInfo.append( (os.path.join(image_dir, image_filename), parser.getint('reader', 'nempty'))) ome_start = parser.getfloat('reader', 'ome_start') * d2r ome_delta = parser.getfloat('reader', 'ome_delta') * d2r darkName = parser.get('reader', 'dark') if darkName.strip() == '': dark = None subtractDark = False else: # dark = os.path.join(image_dir, darkName) dark = darkName subtractDark = True doFlip = parser.getboolean('reader', 'doFlip') flipArg = parser.get('reader', 'flipArg') # make frame reader reader = ReadGE(fileInfo, ome_start, ome_delta, subtractDark=subtractDark, dark=dark, doFlip=doFlip, flipArg=flipArg) # DETECTOR ws.loadDetector(os.path.join(working_dir, detector_fname)) return pd, reader, ws.detector
def get_diffraction_angles(self): cfg = self.cfg logger = self.logger detector = self.detector # Number of cores for multiprocessing num_cores = cfg.multiprocessing # Initialize a new heXRD experiment ws = expt.Experiment() cwd = cfg.working_dir materials_fname = cfg.material.definitions material_name = cfg.material.active detector_fname = cfg.instrument.detector.parameters_old # load materials ws.loadMaterialList(os.path.join(cwd, materials_fname)) mat_name_list = ws.matNames # Create an array of all the essential parameters to be # sent to parallel diffraction angle calculation routine fwd_model_input = [] for xyz_i, mat_name_i, quat_i, defgrad_i in zip( self.ms_grid, self.ms_material_ids, self.ms_quaternions, self.ms_lat_defgrads): # Set chi tilt if detector.chiTilt is not None: chi = detector.chiTilt else: chi = 0.0 # Obtain all symmetric hkls for the material ws.activeMaterial = mat_name_i.strip() #material_name hkls = ws.activeMaterial.planeData.getSymHKLs() hkls = np.transpose(np.hstack(hkls)) # Rotational matrix from the orientation/quaternion rmat_c = rot.rotMatOfQuat(quat_i) # bmat bmat = ws.activeMaterial.planeData.latVecOps['B'] wavelength = ws.activeMaterial.planeData.wavelength # Create a dictionary of inputs to be sent to the MP worker fwd_model_input.append({ 'chi': chi, 'hkls': hkls, 'rmat_c': rmat_c, 'bmat': bmat, 'wavelength': wavelength, 'defgrad_i': defgrad_i }) # Now we have the data, run eta, twoth, omega calculations in parallel logger.info( "Starting virtual diffraction calculations using %i processors", num_cores) synth_angles_MP_output = Parallel(n_jobs=num_cores, verbose=5)( delayed(get_diffraction_angles_MP)(fwd_model_input_i) for fwd_model_input_i in fwd_model_input) synth_angles = np.vstack(synth_angles_MP_output) self.synth_angles = synth_angles return synth_angles