[Chimera-users]
Dr .Julio Ortiz
ortiz at biochem.mpg.de
Wed Oct 13 09:05:22 PDT 2004
Dear Srs:
I am a new user of Chimera, and I really like it! I would like to know if some
of the developers could include a new format for density maps amongs those that
are readable in Chimera: EM format. That would increase its use in our group,
because now we need convert our density maps to mrc each time that we want to
use Chimera.
With my actual skills in programming, to write a plugin will take me like a
year, and I think that should be relative easy for someone with experience.
As attachment I am sending a text file with a procedure wrote in matlab to read
EM format files. The syntax should not be so different from python.
I could also provide you with test data.
Thank you very much for your help,
Dr. Julio Ortiz
--
Max-Planck Institut für Biochemie
Abteilung Molekulare Strukturbiologie
Am Klopferspitz 18
D-82152 Martinsried
Germany
Tel: +49 (89) 8578 2034
fax: +49 (89) 8578 2641
---------------------------------------------------------------------
This message was sent using https://webmail.biochem.mpg.de
If you encounter any problems please report to rz-linux at biochem.mpg.de
-------------- next part --------------
function [Data] = tom_emread(em_name,form,nr,area)
% TOM_EMREAD reads data in EM-file format
%
% Reads an EM-Image File (V-Format)
% a raw format with a 512 Byte Header.
% If no header was provided in EMWRITE
% the header information will be
% abandoned in EMREAD.
% That way data can be saved
% and loaded without providing a header
% but with compatible file-format to EM.
% The keyword 'subregion' followed by a 3D vector
% and a subregion 3D vector reads only a subregion
% from a 3D volume. Only supported for floats and int16
% in 3D.
%
%
% Structure of EM-Data Files:
% -Byte 1: Machine Coding: Machine: Value:
% OS-9 0
% VAX 1
% Convex 2
% SGI 3
% Sun 4 (not supported)
% Mac 5
% PC 6
% -Byte 2: General purpose. On OS-9 system: 0 old version 1 is new version
% -Byte 3: Not used in standard EM-format, if this byte is 1 the header is abandoned.
% -Byte 4: Data Type Coding: Image Type: No. of Bytes: Value:
% byte 1 1
% short 2 2
% long int 4 4
% float 4 5
% complex 8 8
% double 8 9
% -Three long integers (3x4 bytes) are image size in x, y, z Dimension
% -80 Characters as comment
% -40 long integers (4 x 40 bytes) are user defined parameters
% -256 Byte with userdata, first 20 chars username, 8 chars date (i.e.03/02/03)
% -Raw data following with the x variable as the fastest dimension, then y and z
%
% -The parameters are coded as follwing:
% No. | Name | Value | Factor | Comment
% 1 U Volt 1000 accelerating voltage
% 2 COE mm 1000 Cs of objective lense
% 3 APE mrad 1000 aperture
% 4 VE x 1 end magnification
% 5 VN 1000 1000 postmagnification of CCD (fixed value:1000!)
% 6 ET s 1000 exposure time in seconds
% 7 OBJ nm 1000 pixelsize in object-plane
% 8 EM 1 EM-Code:
% EM420=1;CM12=2;CM200=3;
% CM120/Biofilter=4;CM300=5;
% Polara=6;extern=0;
% 9 CCD µm 1000 physical pixelsize on CCD
% 10 L µm 1000 phys_pixel_size * nr_of_pixels
% 11 DF Angstr. 1 defocus, underfocus is neg.
% 12 FA Angstr. 1 astigmatism
% 13 PHI deg 1000 angle of astigmatism
% 14 DDF Angstr. 1 focusincr. for focus-series
% 15 CTS - 1000 counts per primary electron, sensitivity of CCD
% 16 C2 - 1000 intensity value of C2
% 17 EW eV 1 0 for no slit, x>0 for positive slitwidth
% 18 EO eV 1 energy offset from zero-loss
% 19 KW deg 1000 tiltangle
% 20 KR deg 1000 tiltaxis
% 21 - Angstr. 1
% 22 SC ASCII 1
% 23 - - -
% 24 - pixel 1 markerposition X
% 25 - pixel 1 markerposition Y
% 26 - Angstr. 1000 internal: resolution
% 27 - - - internal: density
% 28 - - - internal: contrast
% 29 - - - internal: unknown
% 30 SP - 1000 mass centre X
% 31 SP - 1000 mass centre Y
% 32 SP - 1000 mass centre Z
% 33 H - 1000 height
% 34 - - 1000 internal: unknown
% 35 D1 - 1000 width 'Dreistrahlbereich'
% 36 D2 - 1000 width 'Achrom. Ring'
% 37 - - 1 internal: lambda
% 38 - - 1 internal: delta theta
% 39 - - 1 internal: unknown
% 40 - - 1 internal: unknown
%
%
% Syntax:
% [Data] = tom_emread(em_name)
% Input:
% em_name: Filename
% Output:
% Data: Structure of Image Data
% Data.Value: Raw data of image, or stack
% Data.Header: Header information
%
% Example:
% i=tom_emread;
% a fileselect-box appears and the EM-file can be picked
%
% i=tom_emread('Proj.em');
%
% i=tom_emread('HPIEMV','subregion',[102 162 1],[23 29 0]);
% reads a subregion starting from position (102, 162,1) of an image
% and gives back an image of size (23,29). Alternative to read
% whole volume and reduce by
% redi=i.Value(102:124,162:190).
%
% i=tom_emread('TRIPODV','subregion',[14 17 19],[19 16 9]);
% reads a subregion starting from position (14,17,19) in the volume
% and gives back a volume of size (19,16,9). Alternative to read
% whole volume and reduce by redi=i.Value(14:33,17:33,19:28);
%
% See Also
% TOM_EMWRITE, TOM_EMHEADER, TOM_READEMHEADER
%
% 09/23/02 SN
% last change 12/03/04 FF - bug fixed: fclose OUTSIDE 'if's
%
% Copyright (c) 2004
% TOM toolbox for Electron Tomography
% Max-Planck-Institute for Biochemistry
% Dept. Molecular Structural Biology
% 82152 Martinsried, Germany
% http://www.biochem.mpg.de/tom
error(nargchk(0,4,nargin))
if nargin <1
form='standard'; nr=1;
[filename, pathname] = uigetfile({'*.em;*.vol';'*.*'}, 'Pick an EM-file');
if isequal(filename,0) | isequal(pathname,0) disp('No data loaded.'); return; end;
em_name=[pathname filename];
end;
if nargin <3 form='standard'; nr=1; end;
% if nargin <1 error(['Filename not specified (e.g. emread(''c:\Data.em'')']); end;
emtype=cellstr(['extern '; 'EM420 '; 'CM12 '; 'CM200 '; 'CM120/Biofilter'; 'CM300 '; 'Polara ']);
% EM420=1;CM12=2;CM200=3;
% CM120/Biofilter=4;CM300=5;
% Polara=6;extern=0;
% open the stream with the correct format !
fid = fopen(em_name,'r','ieee-be');
if fid==-1
error(['Cannot open: ' em_name ' file']);
end;
magic = fread(fid,[4],'char');
fclose(fid);
% reads the header
%
% description in 'The Structure of the EM-Data Files', Herr Hegerl
% and at the bottom of this file
% read the Header
if (magic(1)==3 | magic(1)==0 | magic(1)==5)
fid = fopen(em_name,'r','ieee-be'); % for SGI or OS-9 or Mac
else
fid = fopen(em_name,'r','ieee-le'); % for PC
end;
magic = fread(fid,[4],'char');
image_size = fread(fid,[3],'int32');
comment = char(fread(fid,[80],'char'));
parameter = fread(fid,[40],'int32');
fillup = char(fread(fid,[256],'char'));
% the size of the image
xdim = image_size(1);
ydim = image_size(2);
zdim = image_size(3);
if isequal(form,'standard')
Data_read=zeros(xdim,ydim,zdim);
if magic(4)==1
for lauf=1:zdim
Data_read(:,:,lauf) = fread(fid,[xdim,ydim],'char');
end;
elseif magic(4)==2
for lauf=1:zdim
Data_read(:,:,lauf) = fread(fid,[xdim,ydim],'int16');
end;
elseif magic(4)==4
for lauf=1:zdim
Data_read(:,:,lauf) = fread(fid,[xdim,ydim],'long');
end;
elseif magic(4)==5
for lauf=1:zdim
Data_read(:,:,lauf) = fread(fid,[xdim,ydim],'float');
end;
elseif magic(4)==8
for lauf=1:zdim
waitbar(lauf./zdim);
Data_read(:,:,lauf) = fread(fid,[xdim,ydim],'float64');
end;
else
disp('Sorry, i cannot read this as an EM-File !!!');
Data_read=[];
end;
elseif isequal(form,'subregion')
readsize_x=nr(1)+area(1);
readsize_y=nr(2)+area(2);
readsize_z=nr(3)+area(3);
if readsize_x>xdim | readsize_y>ydim | readsize_z>zdim
% error(['Subregion dimensions larger than volume dimensions.']);
area_intended(1)=area(1);
area_intended(2)=area(2);
area_intended(3)=area(3);
area(1)=xdim-nr(1);
area(2)=ydim-nr(2);
area(3)=zdim-nr(3);
end;
Data_read=zeros(area(1)+1,area(2)+1,area(3)+1);
Data_read_xy=zeros(area(1)+1,area(2)+1);
image_size(1)=area(1)+1;
image_size(2)=area(2)+1;
image_size(3)=area(3)+1;
ilaufx=0;
ilaufz=0;
if magic(4)==1
for lauf=nr(3):area(3)+1
tmp = fread(fid,[nr(2):nr(2)+area(2),nr(1):nr(1)+area(1)],'char');
Data_read(:,:,lauf) = tmp(nr(2):(nr(2)+area(2)),nr(1):(nr(1)+area(1)));
end;
elseif magic(4)==2
fseek_merker=0;
fseek(fid,2*(nr(1)-1),0);
fseek(fid,2*(xdim*(nr(2)-1)),0);
fseek(fid,2*(ydim*xdim*(nr(3)-1)),0);
for lauf=nr(3):nr(3)+area(3)
for laufy=nr(2):(nr(2)+area(2))
ilaufx=ilaufx+1;
tmp = fread(fid,[area(1)+1],'int16');
Data_read_xy(:,ilaufx)=tmp;
fseek(fid,2*(xdim-area(1)-1),0);
fseek_merker=fseek_merker+xdim;
end;
ilaufx=0;
ilaufz=ilaufz+1;
Data_read(:,:,ilaufz) = Data_read_xy;
fseek(fid,2*(ydim*xdim-fseek_merker),0);
fseek_merker=0;
end;
elseif magic(4)==4
for lauf=1:area(3)+1
tmp = fread(fid,[ydim,xdim],'long');
Data_read(:,:,lauf) = tmp(nr(2):(nr(2)+area(2)),nr(1):(nr(1)+area(1)));
end;
elseif magic(4)==5
fseek_merker=0;
fseek(fid,4*(nr(1)-1),0);
fseek(fid,4*(xdim*(nr(2)-1)),0);
fseek(fid,4*(ydim*xdim*(nr(3)-1)),0);
for lauf=nr(3):nr(3)+area(3)
for laufy=nr(2):(nr(2)+area(2))
ilaufx=ilaufx+1;
tmp = fread(fid,[area(1)+1],'float');
Data_read_xy(:,ilaufx)=tmp;
fseek(fid,4*(xdim-area(1)-1),0);
fseek_merker=fseek_merker+xdim;
end;
ilaufx=0;
ilaufz=ilaufz+1;
Data_read(:,:,ilaufz) = Data_read_xy;
fseek(fid,4*(ydim*xdim-fseek_merker),0);
fseek_merker=0;
end;
elseif magic(4)==8
for lauf=1:area(3)+1
tmp = fread(fid,[ydim,xdim],'float64');
Data_read(:,:,lauf) = tmp(nr(2):(nr(2)+area(2)),nr(1):(nr(1)+area(1)))';
end;
else
disp('Sorry, i cannot read this as an EM-File !!!');
Data_read=[];
end;
if readsize_x~=nr(1)+area(1) | readsize_y~=nr(2)+area(2) | readsize_z~=nr(3)+area(3)
Data_read_intended=zeros(area_intended(1)+1,area_intended(2)+1,area_intended(3)+1);
Data_read_intended=tom_paste(Data_read_intended,Data_read,[1 1]);
Data_read=Data_read_intended;
end;
end;
fclose(fid); % bug fixed FF
if parameter(8)<0 || parameter(8)>6 parameter(8)=0;end;
if findstr(em_name,'\')
filename=em_name(max(findstr(em_name,'\'))+1:size(em_name,2));
pathname=em_name(1:max(findstr(em_name,'\')));
else
filename=em_name;
pathname=[pwd '\'];
end
if magic(3)==1;
Data=Data_read;
else
EM=struct('Magic',magic,'Size',image_size,'Comment',comment,'Parameter',parameter,'Fillup',fillup);
Header=struct(...
'Voltage',parameter(1),...
'Cs',parameter(2)./1000,...
'Aperture',parameter(3),...
'Magnification',parameter(4),...
'Postmagnification',parameter(5)./1000,...
'Exposuretime',parameter(6)./1000,...
'Objectpixelsize',parameter(7)./1000,...
'Microscope',emtype(parameter(8)+1),...
'Pixelsize',parameter(9)./1000,...
'CCDArea',parameter(10)./1000,...
'Defocus',parameter(11),...
'Astigmatism',parameter(12),...
'AstigmatismAngle',parameter(13)./1000,...
'FocusIncrement',parameter(14)./1000,...
'CountsPerElectron',parameter(15)./1000,...
'Intensity',parameter(16)./1000,...
'EnergySlitwidth',parameter(17),...
'EnergyOffset',parameter(18),...
'Tiltangle',parameter(19)./1000,...
'Tiltaxis',parameter(20)./1000,...
'Marker_X',parameter(24),...
'Marker_Y',parameter(25),...
'Username',num2str(fillup(1:20)),...
'Date',num2str(fillup(21:28)),...
'Filename',filename,...
'Pathname',pathname,...
'Magic',magic,'Size',image_size,'Comment',comment,'Parameter',parameter,'Fillup',fillup,'EM',EM);
Data=struct('Value',Data_read,'Header',Header);
end;
clear Data_read;
clear tmp;
More information about the Chimera-users
mailing list