emmap_1 = emmap1.copy() emmap_2 = emmap2.copy() #if a soft mask has to be applied to both maps if msk: print 'Applying soft mask' emmap1.fullMap = emmap1._soft_mask(c1) emmap2.fullMap = emmap2._soft_mask(c2) #print datetime.now().time() sc = ScoringFunctions() if flag_scale: print 'scaling' if refsc: print 'Using second model/map amplitudes as reference' # amplitude scaling independant of the grid emmap_1.fullMap,emmap_2.fullMap = sc._amplitude_match(emmap1,emmap2,0,0,sw,0,0,max(r1,r2),lpfiltb=flag_filt,lpfilta=False,ref=refsc) #resample scaled maps to the common grid if apix is None: spacing = max(r1,r2)*0.33 else: spacing = apix apix_ratio = emmap_1.apix/spacing diff1 = emmap_1._interpolate_to_grid1(grid_shape,spacing,new_ori,1) diff2 = emmap_2._interpolate_to_grid1(grid_shape,spacing,new_ori,1) # get mask inside contour for the initial maps emmap_1.fullMap = (emmap1.fullMap>c1)*1.0 emmap_2.fullMap = (emmap2.fullMap>c2)*1.0 mask1 = emmap_1._interpolate_to_grid1(grid_shape,spacing,new_ori,1,'zero') mask2 = emmap_2._interpolate_to_grid1(grid_shape,spacing,new_ori,1,'zero') mask1.fullMap = mask1.fullMap > 0.8
def genmap(session, map0 = None, map1 = None, rez1 = None, rez2 = None, c1 = None, c2 = None): """ Generate our new map.""" m0 = chimera_to_tempy_map(map0) m1 = chimera_to_tempy_map(map1) # What do we do with the contours? We may already have them? # TODO - pull contours from m0,m1 #MAIN CALCULATION #whether to shift density to positive values if c1 == None: c1 = map_contour(m0,t=1.5) if c2 == None: c2 = map_contour(m1,t=1.5) c1 = (c1 - m0.min()) c2 = (c2 - m1.min()) m0.fullMap = (m0.fullMap - m0.min()) m1.fullMap = (m1.fullMap - m1.min()) #find a common box to hold both maps spacing = max(m0.apix,m1.apix) grid_shape, new_ori = m0._alignment_box(m1,spacing) emmap_1 = m0.copy() emmap_2 = m1.copy() #resample scaled maps to the common grid spacing = max(rez1,rez2)*0.33 # Not sure we should do scaling here? sc = ScoringFunctions() emmap_1.fullMap,emmap_2.fullMap = sc._amplitude_match(m0,m1,0,0,0.02,0,0,max(rez1,rez2),lpfiltb=True,lpfilta=False,ref=False) apix_ratio = emmap_1.apix/spacing diff1 = emmap_1._interpolate_to_grid(grid_shape,spacing,new_ori,1) diff2 = emmap_2._interpolate_to_grid(grid_shape,spacing,new_ori,1) # get mask inside contour for the initial maps emmap_1.fullMap = (m0.fullMap>c1)*1.0 emmap_2.fullMap = (m1.fullMap>c2)*1.0 #interpolate masks into common grid mask1 = emmap_1._interpolate_to_grid(grid_shape,spacing,new_ori,1,'zero') mask2 = emmap_2._interpolate_to_grid(grid_shape,spacing,new_ori,1,'zero') mask1.fullMap = mask1.fullMap > 0.1 mask2.fullMap = mask2.fullMap > 0.1 #min of minimums in the two scaled maps min1 = diff1.min() min2 = diff2.min() min_scaled_maps = min(min1,min2) #shift to positive values diff1.fullMap = diff1.fullMap - min_scaled_maps diff2.fullMap = diff2.fullMap - min_scaled_maps #range of values in the scaled maps min1 = np.amin(diff1.fullMap[mask1.fullMap]) diffc1 = min1+0.10*(np.amax(diff1.fullMap)-min1) min2 = np.amin(diff2.fullMap[mask2.fullMap]) diffc2 = min2+0.10*(np.amax(diff2.fullMap)-min2) #calculate difference diff_map = diff1.copy() #calculate difference diff1.fullMap = (diff1.fullMap - diff2.fullMap) diff2.fullMap = (diff2.fullMap - diff_map.fullMap) diff1.fullMap = diff1.fullMap*(mask1.fullMap) diff2.fullMap = diff2.fullMap*(mask2.fullMap) #interpolate back to original grids #mask1 = diff1._interpolate_to_grid1(m0.fullMap.shape,m0.apix,m0.origin,1,'zero') mask1 = diff1._interpolate_to_grid(m0.fullMap.shape,m0.apix,m0.origin,1,'zero') mask2 = diff2._interpolate_to_grid(m1.fullMap.shape,m1.apix,m1.origin,1,'zero') # for assigning differences (see below), use positive differences mask1.fullMap = mask1.fullMap*(mask1.fullMap>0.) mask2.fullMap = mask2.fullMap*(mask2.fullMap>0.) nm0 = tempy_to_chimera_map(session, mask1) nm1 = tempy_to_chimera_map(session, mask2) session.models.add([nm0,nm1])