Igor does not recognize decimal numbers from my data?!?
researcher2
I am quite new to Igor and work at the moment on a procedure to first extract the important data from a longer list (which works fine so far) and then in a second step use x, y, and z coordinates to calculate the angle between two planesspanned by three points from the data lisz.
The input data has the format as shown here exemplarily for one line:
ATOM 1 N LYS A 4 -9.695 26.582 2.543 1 20.62 N
As you can see it is a mixture of numbers and strings, seperated by tabs, of which I load each in a seperate wave.
My problem is, that I cannot manage to use the decimal x,y,z-coordinates for further calculations, because Igor does not identifies them as numbers, irrespective of loading the data as text oder numeric wave.
I also tried to use the "str2num" command, but this always gives me a "NaN" answer.
Do you have any suggestions how I can either load the original data or modify the waves in a way to be able to use the coordinates in a mathematical transformation?
Thanks a lot!
If you are attempting to load this data from a file using the LoadWave operation, you need to use "Load Delimited Text", and you need to specify space as a delimiter character. For details, execute:
January 14, 2016 at 10:58 am - Permalink
Hello hrodstein,
thanks for your reply. I load the data via "Load delimited text" and end up with each column in a seperate wave, as planned. I can also work with the waves containing strings, for example to delete lines in all 11 waves that contain data I am not interested in.
The problem starts when I want wo calculate using the x,y,z coordinates (entries 7-9 in the data example), because Igor does not recognizes them as numbers and I also cannot transfer them to numbers via "str2num". I also tried to load only those waves with the coordinates seperately as numerical waves, but the result is the same.
January 14, 2016 at 11:39 am - Permalink
When you use "Load Delimited Text", Igor should load the numbers into numeric waves. You can check if waves are numeric or text using Data->Browse Waves. If waves that should be numeric are text instead then something went wrong.
If your file really is tab-delimited, "Load Delimited Text" should load the numbers in the file as numeric waves. I recommend that you try this in a new experiment so as to avoid confusion caused by waves that you have already loaded.
You should use Data->Load Waves->Load Waves and choose Delimited Text from the popup menu. Don't use Data->Load Waves->Load Delimited Text as this is a shortcut that does not provide all options.
If you are still does not able to get Igor to load the numbers as numeric waves, zip your data file or a representative section of it starting from the beginning and including any header lines plus some data lines. Post the zip file here. And specify the exact LoadWaves command that you are using and what kind of waves are created as indicated in the Browse Waves dialog.
January 14, 2016 at 12:15 pm - Permalink
If I implement for exmaple "print xcoord[1]" or "print xoord_l[1]" into my procedure, it either gives me an error (1. case) or replies nothing (2. case): But at least I know now, that I maybe didn´t define the waves within the procedure in the proper way and that the problem is not due to the data(format) in the waves, so I can now work on this in more detail.
EDIT: Found my mistake, defined it as text wave in the function. Thanks again for your fast help.
January 14, 2016 at 12:32 pm - Permalink
Fortunately, Igor can read this type of file as well, but it takes a bit more work. Below is a sort of fast and loose procedure for reading PDB files - it doesn't really read all the columns, but shows basically how to do it. I'm not doing anything with the PDB header info, I take that out in a text editor.
String columnInfo = "" // This only works for rows starting with "ATOM"
columnInfo+="C=1,W=6,N=keyword;" //"ATOM" name column
columnInfo+="C=1,W=6,N='_skip_';" // Atom number (last column unspecified)
columnInfo+="C=1,W=5,N='_skip_';" // Atom name; last character is "alt Loc"
columnInfo+="C=1,W=3,N='_skip_';" // Residue name; starts at column 18
columnInfo+="C=1,W=2,N='_skip_';" // Chain identifier in column 22 (21=?)
columnInfo+="C=1,W=4,N='_skip_';" // Residue sequence number
columnInfo+="C=1,W=4,N='_skip_';" // Blank stuff
columnInfo+="C=1,W=8,N=xval;" // Should start at column 31
columnInfo+="C=1,W=8,N=yval;"
columnInfo+="C=1,W=8,N=zval;"
columnInfo+="C=1,W=6,N='_skip_';" // Occupancy
columnInfo+="C=1,W=6,N='_skip_';" // Temperature info
columnInfo+="C=1,W=11,N='_skip_';" // Element symbol (col 77,78)
columnInfo+="C=1,W=2,N='_skip_';" // Charge (col 79,80)
LoadWave/A/O/F={14,8,0}/K=0/B=columnInfo
Wave xval, yval, zval
Wave/T keyword
Variable count=numpnts(keyword)-1
do
if (strsearch(keyword[count], "ATOM", 0) <0 )
DeletePoints count, 1, keyword, xval, yval, zval
endif
count-=1
while (count >= 0 )
KillWaves keyword
End
January 19, 2016 at 07:33 am - Permalink