Author |
Topic  |
|
joss31
France
33 Posts |
Posted - 04/17/2014 : 05:36:04 AM
|
Hi everybody,
I started to use Labtalk on Origin 6.1 some weeks ago. And I need some help again. Thanks to other topic and information on internet I can import multiple ASCII, I can post them in different workbook i can take information from the header.
But now I need to take my workbook and plot it in a graph with in x col(3) and in y col(2).
My code looks like that :
type -a; //open the Script window getfile -m *.*; // prompt for multiple files worksheet -a 1; //add a Ycolumn & named it allstrtt like "allstarttime" worksheet -t 3 4; //change the 3rd column in Xcolumn
double TTIME0 = 0; //create a numeric double precision variable double TTIME1 = 0; //create a numeric double precision variable double TTIME2 = 0; //create a numeric double precision variable
for (ii = 1; ii <= count; ii ++) { getfile -g ii; // get the iith file into %A open -w %A; // This IMPORTS that file hfile=file.open(%A); // This OPENS the file for processing // Using substitution notation, get the second line of that text: %A = %[%Z,@2]; // Then you can get the part after the space: %B = %[%A,>' ']; // This is the triggertime value as a string
//If you need each of the time elements as numeric ttHours = %[%B,1:2]; // characters 1 and 2 ttMinutes = %[%B,4:5]; // characters 4 and 5 ttSeconds = %[%B,7:%[%B]]; // characters 7 to the length of %B Triggertime = (ttHours /24) *86400 + (ttMinutes /1440)*86400 + ttSeconds; //the Triggertime is in seconds if (ii <= (count-(count-1))) { TTIME0 = Triggertime; //the value of the first triggertime is saving in TTIME0 TTIME1 = 0; TTIME2 = 0; col(3)=%(%H,1)+TTIME2;
} else { TTIME0 = TTIME0; //save the value of TTIME0 during all the treatment TTIME1 = Triggertime; // save the triggertime of "µcoup'n'" in TTIME1 if ($(TTIME0) != $(TTIME1)) //Compare the value of TTIME0 & TTIME1 { TTIME2 = TTIME1-TTIME0; //TTIME2 is the difference between TTIME1 & TTIME0 TTIME0 = TTIME0; //save the value of TTIME0 during all the treatment col(3)=%(%H,1)+TTIME2; } col(3)=%(%H,1)+TTIME2; }; if (ii < count) { worksheet -d µcoup $(ii); //Duplicate the active workbook into a new workbook named µcoup$(ii) col(3)=0; }; else { }; };
So, if somebody can help me for the second time, it could be great but dont forget, I repeat I use an old version of origin (6.1) .
Thank you for you're attention. |
Edited by - joss31 on 04/28/2014 03:32:17 AM |
|
greg
USA
1379 Posts |
Posted - 04/17/2014 : 10:38:36 AM
|
I don't pretend to understand the logic of what you are doing, but if you want to use worksheet -p then you should select your data before running that. Also, "2" is not a valid PlotID and "template" should be a valid template name - like "SCATTER". Both problems seem to be ignored by 6.1.
Here is how to plot all the data in the worksheet: worksheet -s 0 0 0 0; worksheet -p 201 scatter; |
 |
|
joss31
France
33 Posts |
Posted - 04/18/2014 : 05:29:01 AM
|
I use "worksheet -p" because I didn't found another solution for plotting a graph. But if you have a better solution I'll don't say no. I want just plot the 2 last column of different woorksheet in the same graph it's possible, isn't it? |
Edited by - joss31 on 04/18/2014 09:07:51 AM |
 |
|
greg
USA
1379 Posts |
Posted - 04/18/2014 : 11:25:40 AM
|
Your version has all kinds of window management headaches which I won't go into, but IF you have created a plot window like:
window -t plot line MyGraph;
THEN when your imported worksheet is active you can get the Short Name of the last column with:
%A = wcol(wks.ncols);
AND add that to your graph:
window -o MyGraph { layer -i %A; layer -a; }
Another approach: AFTER all your worksheets have been loaded, execute:
window -t plot LINE MyGraph; document -e W { %A = wcol(wks.ncols); window -o MyGraph { layer -i %A; } } layer -a;
Check the LabTalk Help file for "window", "document" and "layer" commands, the "wcol" function and the "wks" object if you have any questions about the above script. |
 |
|
joss31
France
33 Posts |
Posted - 04/23/2014 : 09:44:26 AM
|
Hi, I've been tried your example but it's not exactly that I want.
see on the picture black's column's, that what I need for my graph. How can I put the in a graph? I tried the plotxy function but doesn't work. Have you got any ideas?

|
Edited by - joss31 on 04/24/2014 03:04:07 AM |
 |
|
greg
USA
1379 Posts |
Posted - 04/25/2014 : 4:31:00 PM
|
Your version does not have a plotxy X-Function (it doesn't have any X-Functions), but it does have the plotxy method of the layer object. As an example, if you already have an empty graph named Graph1, you can add curves like this: win -o Graph1 { layer.plotxy(ucoup1_C,ucoup1_B); // plot ucoup1C as X and ucoup1_B as Y layer.plotxy(ucoup2_C,ucoup2_B); // plot ucoup2C as X and ucoup2_B as Y layer -a; // Rescale the graph }
|
 |
|
joss31
France
33 Posts |
Posted - 04/28/2014 : 10:47:33 AM
|
thanks but for create my empty graph window i use that:
window -e Graph1;
I put your code after but it doesn't work I don't succed have you got an example with this methods?
window -o Graph1 { layer.plotxy(ucoup1_C,ucoup1_B); // plot ucoup1C as X and ucoup1_B as Y layer -a; // Rescale the graph };
|
Edited by - joss31 on 04/28/2014 10:48:03 AM |
 |
|
greg
USA
1379 Posts |
Posted - 04/28/2014 : 4:09:16 PM
|
// WARNING! Destructive script doc -s; doc -n;
// Some data col(1)=uniform(20); wo -a 1; col(3)=data(1,20); col(2)=sin(pi*18*col(3)/180); %M = %H; // Remember first worksheet;
// A graph win -t plot scatter; %N = %H; // remember graph name;
// More data win -t data; wo -a 1; col(3)=data(0,22,2.2); col(2)=cos(pi*15*col(3)/180); %O = %H; // remember this data
// Make the graph active win -a %N; layer.plotxy(%M_C,%M_B); layer.plotxy(%O_C,%O_B); set %O_B -c 2; layer -a;
|
 |
|
joss31
France
33 Posts |
Posted - 05/02/2014 : 07:52:09 AM
|
Thanks it works good! well done !
I use it like that but is it possible to change the color of the curve with an other methods? (for each curve that I add on this layer I plot this curve in a new color)
doc -s; doc -n; getfile -m *.*; // prompt for multiple files
double TTIME0 = 0; //create a numeric double precision variable double TTIME1 = 0; //create a numeric double precision variable double TTIME2 = 0; //create a numeric double precision variable for (ii = 1; ii <= count; ii ++) { getfile -g ii; // get the iith file into %A open -w %A; // This IMPORTS that file %P =HEAP%[%A, 50:53]%[%A, 74:76]; worksheet -c ALLSTRTIME; worksheet -c VALUE; worksheet -t 3 4; //change the 3rd column in Xcolumn //Using substitution notation, get the second line of that text: %A = %[%Z,@2]; //Then you can get the part after the space: %B = %[%A,>' ']; // This is the triggertime value as a string
//If you need each of the time elements as numeric ttHours = %[%B,1:2]; // characters 1 and 2 ttMinutes = %[%B,4:5]; // characters 4 and 5 ttSeconds = %[%B,7:%[%B]]; // characters 7 to the length of %B Triggertime = (ttHours /24) *86400 + (ttMinutes /1440)*86400 + ttSeconds; //the Triggertime is in seconds if (ii <= (count-(count-1))) { TTIME0 = Triggertime; //the value of the first triggertime is saving in TTIME0 TTIME1 = 0; TTIME2 = 0; col(3)=%(%H,1)+TTIME2; col(4)=col(2); win -r %H %P; %M = %H; //A graph win -t plot scatter; %N = %H; // remember graph name; } else { TTIME0 = TTIME0; //save the value of TTIME0 during all the treatment TTIME1 = Triggertime; // save the triggertime of "µcoup'n'" in TTIME1 if ($(TTIME0) != $(TTIME1)) //Compare the value of TTIME0 & TTIME1 { TTIME2 = TTIME1-TTIME0; //TTIME2 is the difference between TTIME1 & TTIME0 TTIME0 = TTIME0; //save the value of TTIME0 during all the treatment col(3)=%(%H,1)+TTIME2; col(4)=col(2); win -r %H %P; %M = %H; } col(4)=col(2); col(3)=%(%H,1)+TTIME2; win -r %H %P; %M = %H; }; win -a %N; layer.plotxy(%M_ALLSTRTIME,%M_VALUE); layer -a; // if (ii < count) { //worksheet -d ucoup $(ii); //Duplicate the active workbook into a new workbook named µcoup$(ii) window -t data; }; else { }; };
|
Edited by - joss31 on 05/02/2014 07:54:46 AM |
 |
|
greg
USA
1379 Posts |
Posted - 05/02/2014 : 08:38:03 AM
|
Look at the SET command in LabTalk Help: set %C -c 2; // Set active plot to red set data3_c -c 4; // set dataplot data3_c to blue
FYI: Your version does not have variable declaration, so: double TTIME0 = 0; does not work. This: TTIME0 = Triggertime; is what actually creates the variable. |
 |
|
joss31
France
33 Posts |
Posted - 05/02/2014 : 09:44:55 AM
|
ok thanks I've just find this command I'me going to use it. And now everything is good so thank you so much greg. |
Edited by - joss31 on 05/02/2014 10:03:15 AM |
 |
|
joss31
France
33 Posts |
Posted - 05/05/2014 : 05:28:28 AM
|
So this is my code doc -s; doc -n; getfile -m *.*; // Prompt for multiple files
for (ii = 1; ii <= count; ii ++) { getfile -g ii; // Get the iith file into %A open -w %A; // This IMPORTS that file hfile=file.open(%A); // This OPENS the file for processing %P =HEAP%[%A, 50:53]%[%A, 74:76];// Take the value of the heap and the number of the block store it in %P variable worksheet -c ALLSTRTIME; // Create new Ycolumn named ALLSTRTIME worksheet -c VALUE; worksheet -t 3 4; // Change the 3rd Ycolumn(ALLSTRTIME) in Xcolumn %A = %[%Z,@2];//Using substitution notation, get the second line of that text //Then you can get the part after the newtab %B = %[%A,>' ']; // This is the triggertime value as a string
//If you need each of the time elements as numeric ttHours = %[%B,1:2]; // Characters 1 and 2 ttMinutes = %[%B,4:5]; // Characters 4 and 5 ttSeconds = %[%B,7:%[%B]]; // Characters 7 to the length of %B Triggertime = (ttHours /24) *86400 + (ttMinutes /1440)*86400 + ttSeconds; // The Triggertime is in seconds if (ii <= (count-(count-1))) { TTIME0 = Triggertime; // The value of the first triggertime is saving in TTIME0 TTIME1 = 0;// Initialize the TTIME1 TTIME2 = 0; col(3)=%(%H,1)+TTIME2;// Add the TTIME2 & "starttime" column of the worksheet col(3)=col(1) in this case col(4)=col(2); win -r %H %P;// Rename the title of the worsheet by %P %M = %H; // Remember worksheet name and its columns(X1,X2,Y1,Y2) win -t plot scatter;// Create a graph %N = %H; // Remember graph name win -t plot scatter; %O = %H; } else { TTIME0 = TTIME0;// Save the value of TTIME0 during all the treatment TTIME1 = Triggertime;// Save the triggertime of "µcoup'n'" in TTIME1 if ($(TTIME0) != $(TTIME1))// Compare the value of TTIME0 & TTIME1 { TTIME2 = TTIME1-TTIME0;// TTIME2 is the difference between TTIME1 & TTIME0 TTIME0 = TTIME0; col(3)=%(%H,1)+TTIME2;// Add the TTIME2 & "starttime" column of the worksheet col(4)=col(2); win -r %H %P; %M = %H; %Q = %H;
} col(3)=%(%H,1)+TTIME2; col(4)=col(2); win -r %H %P; %M = %H; %Q = %H; }; win -a %N;// Active the graph name save in %N layer.plotxy(%M_ALLSTRTIME,%M_VALUE);// Plot the value of column ALLSTRTIME VALUE from the worsheet name save in %M layer -a;// Rescale the axis set %M_VALUE -c $(ii); // Set active plot to color ii
if (ii >(count-(count-1))) { win -a %O; layer.plotxy(%Q_STARTTIME,%Q_VALUE); layer -a; set %Q_VALUE -c $(ii)-1; }
if (ii < count) { window -t data; //create a newworksheet }; };
win -a %N;// Active the graph name save in %N label -xb Time(sec); // Rename axis x "Time(sec)" label -yl Voltage(mV);// Rename axis y "Voltage(mV)"
win -a %O; label -xb Time(sec); // Rename axis x "Time(sec)" label -yl Voltage(mV);// Rename axis y "Voltage(mV)"
So I import ascii data, I do calcul with value and I plot it in a graph with different color for each curve. Carefull there is just 24 color in labtalk. I search for change the "form" of the curve when all the color were plot
Thank you for everything Greg. |
Edited by - joss31 on 05/05/2014 05:34:23 AM |
 |
|
|
Topic  |
|
|
|