Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
                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']
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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, '.')