The Origin Forum
File Exchange
Try Origin for Free
The Origin Forum
Home | Profile | Register | Active Topics | Members | Search | FAQ | Send File to Tech support
 All Forums
 Origin Forum for Programming
 LabTalk Forum
 simultaneous column maths

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

Screensize:
UserName:
Password:
Anti-Spam Code:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkUpload FileInsert Image Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
coll@inia. Posted - 06/13/2004 : 12:32:13 PM
I would like to transform several columns of raw data in a worksheet simultaneoulsly.
A very common situation is substract a background value to all the data and/or to transform every data in several columns to normalize them and compare data with other experiments.
I can do that in every column one by one but it is time consuming and prone to errors. I can also do it by using the Tools/worksheet script, but I have to type the values for each data1_B,C,D,E,.. and so on.
I would like to have the script to be executed with a bottom after filling out a formula with the background values and constant values for that particular experiment. Then upon clicking in the bottom all the columns will be transformed by the formula, for instance (data1_B,C,D,E,.. - background) / constant1 * constant2.
Is there any possibilities to or an script to do that?
Thank you for your help, Dr.Coll
4   L A T E S T    R E P L I E S    (Newest First)
coll@inia. Posted - 06/25/2004 : 01:26:55 AM
Thank you Mike!, it works fine and it is simpler than my script! thank you again, julio
Mike Buess Posted - 06/24/2004 : 08:34:25 AM
In that case you need to address each cell individually which is much less efficient than operating on entire columns. I'd provide for both possibilities...

for(i=wks.c1;i<=wks.c2;i++) {
# Skip col if it has no selections
if(wks.isColSel(i)==0) continue;
# If entire col selected use vector math
if(wks.isColSel(i)==1) {%(%H,i)-=back; %(%H,i)/=div; %(%H,i)*=fac};
else {
for(j=wks.r1;j<=wks.r2;j++) {%(%H,i,j)-=back; %(%H,i,j)/=div; %(%H,i,j)*=fac};
};
};

Mike Buess
Origin WebRing Member

Edited by - Mike Buess on 06/24/2004 09:03:14 AM
coll@inia. Posted - 06/24/2004 : 03:56:35 AM
Thanks Mike for your reply.
Based on what you sent me I developed the following script:

//initialize variables
back=0;
div=1;
factor=1;

//show getnumber input window
getn (- back) back
(/ div) div
(* factor) factor
(restar back, dividir por div, multiplicar x factor);

//apply formula to selected columns
sel1=wks.c1;
sel2=wks.c2;

for(i=sel1;i<=sel2;i++) if(wks.iscolsel(i)!=0){%D=wks.col$(i).name$;
%H_%D-=back;
%H_%D/=div;
%H_%D*=factor}

It seems to work fine for whole columns and single columns, however I found out that when many columns are not completely selected (only a few rows), the script still calculates the values for the whole columns!.
It seems likely that I have to introduce in the script some information about the selected rows [i]. Could you please indicate me what changes in the above mentioned script are necesary to do that? In other words, I will need that the +, -, / or * operators will be applied not only to the columns selected but also and only to the selected rows of those columns.
Yhank you for your help, bye now, Dr.Coll
Mike Buess Posted - 06/13/2004 : 4:00:03 PM
There are many ways to do that but it would be difficult to incorporate an arbitrary formula into a script. If you just have a few possible formulae you could attach the following script to the Custom Routine or any other button. The script has an option for applying the formula to all Y columns (which I suspect you really want to do). If that's not what your want just enter a space-separated column list in the appropriate field.
%L=B C D E F;
i1=1; i2=0; i3=1
getn (background) background
(1st constant) constant1
(2nd constant) constant2
(formula #) i1;
(apply to all Y columns) i2:2h
(apply to these columns) %%L
(Enter choices);
%Z="";
if(i2) {
for(i=1;i<=wks.ncols;i++) {
if(wks.col$(i).type==1) {%A=wks.col$(i).name$; %Z=%Z %A};
};
};
else %Z=%L;
for(i=1;i>0;i++) {
%A=%[%Z,#i]; if(%A=="") break;
switch(i1) {
case 1:
%H_%A-=background;
%H_%A*=constant2/constant1;
break;
case 2:
- formula 2 commands -
break;
case 3:
- formula 3 commands -
break;
- more formulae -
};
};


Mike Buess
Origin WebRing Member

Edited by - Mike Buess on 06/14/2004 08:23:35 AM

The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000