Passing data as a buffer reference (fast)

This example demonstrates how SCANs can be created by supplying a list of value pairs. This is by far the fastest method because the data is not transfered one by one. Instead the buffer is passed to Spectra by a single call. Spectra is then cutting it into records, which are delimited by \n. Each record contains 2 numbers that are separated by blanks. The first of the numbers is decoded as an x-value the second as the corresponding y-value. The number of points of the newly created SCAN is just the number of records.

#!/usr/bin/perl -w 

use Spectra; 
use GQE; 
use POSIX; 

#
# delete everything
#
Spectra::delete();
#
# create the buffer
#
my $buffer = ' ' x 100000;
$buffer = ""; 
#
# fill the buffer with a list of value pairs, each record is
# terminated by '\n'
#
foreach my $i ( 1 .. 8192)
{
    my $sin = POSIX::sin( $i/800);
    $buffer .= "$i $sin\n";
}

$sin = SCAN->create( name => "Sinus", 
		     title => "Sinus",
		     data_ptr => \$buffer) or die " Failed to create Sinus "; 
#
$sin->set( "at" => "(1,2,2)");
#
# find window limits and display
#
Spectra::autoscale();
Spectra::display();
Spectra::keyw();