def remove_duplicate_grains(grain_data, qsyms, dist_thresh=0.01, misorient_thresh=0.1, comp_diff=0.1): total_grains = grain_data.shape[0] all_comp = grain_data[:, 1] grain_quats = rot.quatOfExpMap(grain_data[:, 3:6].T) dup_list = np.array([]) print 'Removing duplicate grains' for i in np.arange(total_grains - 1): cur_pos = grain_data[i, 3:6] other_pos = grain_data[(i + 1):, 3:6] xdist = cur_pos[0] - other_pos[:, 0] ydist = cur_pos[1] - other_pos[:, 1] zdist = cur_pos[2] - other_pos[:, 2] dist = np.sqrt(xdist**2. + ydist**2. + zdist**2.) if np.min(dist) < dist_thresh: q1 = sym.toFundamentalRegion(np.atleast_2d(grain_quats[:, i]).T, crysSym=qsyms) q2 = sym.toFundamentalRegion(np.atleast_2d( grain_quats[:, np.argmin(dist) + i + 1]).T, crysSym=qsyms) misorientation = rot.misorientation(q1, q2)[0] * 180. / np.pi if misorientation < misorient_thresh: dup_list = np.append(dup_list, np.argmin(dist) + i + 1) if (np.abs(all_comp[i] - all_comp[np.argmin(dist) + i + 1]) <= comp_diff): grain_data[ i, :] = (grain_data[i, :] + grain_data[np.argmin(dist) + i + 1, :]) / 2. elif ((all_comp[np.argmin(dist) + i + 1] - all_comp[i]) > 0): grain_data[i, :] = grain_data[np.argmin(dist) + i + 1, :] grain_data = np.delete(grain_data, dup_list, axis=0) print 'Removed %d Grains' % (len(dup_list)) grain_data[:, 0] = np.arange(grain_data.shape[0]) return grain_data, dup_list
def remove_duplicate_grains(grain_data,qsyms,dist_thresh=0.01,misorient_thresh=0.1,comp_diff=0.1): total_grains=grain_data.shape[0] all_comp=grain_data[:,1] grain_quats=rot.quatOfExpMap(grain_data[:,3:6].T) dup_list=np.array([]) print 'Removing duplicate grains' for i in np.arange(total_grains-1): cur_pos=grain_data[i,3:6] other_pos=grain_data[(i+1):,3:6] xdist=cur_pos[0]-other_pos[:,0] ydist=cur_pos[1]-other_pos[:,1] zdist=cur_pos[2]-other_pos[:,2] dist=np.sqrt(xdist**2.+ydist**2.+zdist**2.) if np.min(dist)<dist_thresh: q1=sym.toFundamentalRegion(np.atleast_2d(grain_quats[:,i]).T,crysSym=qsyms) q2=sym.toFundamentalRegion(np.atleast_2d(grain_quats[:,np.argmin(dist)+i+1]).T,crysSym=qsyms) misorientation=rot.misorientation(q1,q2)[0]*180./np.pi if misorientation < misorient_thresh: dup_list=np.append(dup_list,np.argmin(dist)+i+1) if (np.abs(all_comp[i] - all_comp[np.argmin(dist)+i+1]) <=comp_diff): grain_data[i,:]=(grain_data[i,:]+grain_data[np.argmin(dist)+i+1,:])/2. elif ( (all_comp[np.argmin(dist)+i+1]-all_comp[i]) >0): grain_data[i,:]=grain_data[np.argmin(dist)+i+1,:] grain_data=np.delete(grain_data,dup_list,axis=0) print 'Removed %d Grains' % (len(dup_list)) grain_data[:,0]=np.arange(grain_data.shape[0]) return grain_data,dup_list
mat_list = cpl.load(open(material_file_loc, 'r')) mat_idx = np.where([ mat_list[i].name == mat_name for i in range(len(mat_list)) ])[0] # grab plane data, and useful things hanging off of it pd = mat_list[mat_idx[0]].planeData qsyms = sym.quatOfLaueGroup(pd.getLaueGroup()) for w in range(0, len(test[0])): q2 = np.atleast_2d(q_mor[:, grain_map_g[test[0][w], test[1][w], test[2][w]]]).T q1 = np.atleast_2d(q_avg[:, grain_id]).T mis[test[0][w], test[1][w], test[2][w]] = rot.misorientation(q1, q2)[0] * 180. / np.pi # plt.imshow(confidence_map_g[20,:,:],cmap='gray') # plt.hold(True) # plt.imshow(mis[20,:,:], alpha = 0.5) # plt.colorbar() #============================================================================== # put back into the master mesh #============================================================================== print('put in master mesh') #fresh array empty_map_full = np.zeros(compiled_map.shape) #confidence_index_local = np.copy(empty_map_full) #grain_map_local = np.copy(empty_map_full) mis_local = np.copy(empty_map_full) compiled_map_local = np.copy(empty_map_full)
# rotmats_grain = [] # expmaps_grain = [] # Eulers_grain = np.zeros([len(no_load_scans),3]) quats_init = rot.quatOfExpMap(grain_data['scan21'][:, 3:6].T) expmaps_init = grain_data['scan21'][:, 3:6].T quats_final = rot.quatOfExpMap( (grain_data['scan%d' % no_load_scans[-1]][:, 3:6].T)) expmaps_final = grain_data['scan111'][:, 3:6].T grainlist = [] for i in range(ngrains): mis = rot.misorientation(quats_init[:, i:i + 1], quats_final[:, i:i + 1], (crystal_symmetry, ))[0] mis_deg = np.degrees(mis) if mis_deg > 0.05: grainlist.append(i) #%% rmats_init = rot.rotMatOfExpMap(np.array(expmaps_init)[:, grainlist]) rmats_final = rot.rotMatOfExpMap(np.array(expmaps_final)[:, grainlist]) # getting symmetry group directly here; could also grab from planeData object # qsym = symm.quatOfLaueGroup('d6h') plane_data = load_pdata( '/Users/rachellim/Documents/Research/CHESS_Jun17/2020-08-03/materials2.hexrd', 'ti7al') qsym = plane_data.getQSym() bmat = plane_data.latVecOps['B']
symmetry_symbol = 'd6h' #cubic high, d6h for hex high crystal_symmetry = sym.quatOfLaueGroup(symmetry_symbol) grain = 49 grain_id = int(grain_data['scan12'][grain, 0]) mis_ang = [] rotmats_grain = [] expmaps_grain = [] Eulers_grain = np.zeros([len(scanIDs), 3]) for i in range(len(scanIDs)): q108 = rot.quatOfExpMap(grain_data['scan%d' % scanIDs[i]][:, 3:6].T) expmaps_grain.append(grain_data['scan%d' % scanIDs[i]][grain, 3:6]) mis = rot.misorientation(quats_init[:, grain:grain + 1], q108[:, grain:grain + 1], (crystal_symmetry, ))[0] mis_ang.append(mis) # rotmats_grain.append(rot.rotMatOfExpMap(grain_data['scan%d'%no_load_scans[i]][grain,3:6].T)) # Eulers_grain[i,:] = rot.angles_from_rmat_zxz(rot.rotMatOfExpMap(expmaps_grain)) mis_ang_deg = np.degrees(np.array(mis_ang)) #%% rmats = rot.rotMatOfExpMap(np.array(expmaps_grain).T) # getting symmetry group directly here; could also grab from planeData object # qsym = symm.quatOfLaueGroup('d6h') plane_data = load_pdata( '/Users/rachellim/Documents/Research/CHESS_Jun17/2020-08-03/materials2.hexrd', 'ti7al') qsym = plane_data.getQSym()
delta_stress22 = np.diff(stress22) delta_stress33 = np.diff(stress33) delta_vonmises = np.diff(vonmises) delta_hydrostatic = np.diff(hydrostatic) #%% Calculate misorientation from initial orientation mis = np.zeros([ngrains, len(scanIDs)]) quats_init = rot.quatOfExpMap(grain_data['scan%d' % scanIDs[0]][:, 3:6].T) for i in range(len(scanIDs)): quats_this = rot.quatOfExpMap(grain_data['scan%d' % scanIDs[i]][:, 3:6].T) for j in range(len(quats_init.T)): mis[j, i] = np.degrees( rot.misorientation(quats_init[:, j:j + 1], quats_this[:, j:j + 1])[0]) #%% Stress reasonability check mean_stress11 = np.mean(stress11, axis=0) mean_stress22 = np.mean(stress22, axis=0) mean_stress33 = np.mean(stress33, axis=0) mean_vonmises = np.mean(vonmises, axis=0) mean_hydrostatic = np.mean(hydrostatic, axis=0) fig2 = plt.figure() plt.plot(mean_stress11, '.') plt.plot(mean_stress22, '.') plt.plot(mean_stress33, '.') plt.plot(mean_vonmises, '.') plt.plot(mean_hydrostatic, '.')