#!/usr/bin/perl
# 
# Make some nice plots showing sine curves adding out of phase
#   to illustrate diffraction gratings
#
# MWR 5/14/2007


$twopi = 6.2831853;

# make a graph showing two waves which are offset by some small amount degrees

    # graph of two waves meeting in phase
    $data = sprintf "cosine_addition_%02d.dat", 0;
    $title = "";
    $cmdfile = sprintf "make_addition_plot.gnu";
    $psfile = sprintf "make_addition_plot.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 1.1  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data_next' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.4  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;


# now show the waves AND their sum -- offset zero 

    $data = sprintf "cosine_addition_%02d.dat", 0;
    $title = "";
    $cmdfile = sprintf "make_addition_plot_b.gnu";
    $psfile = sprintf "make_addition_plot_b.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 1.1  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.4  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$4) ";
    printf CMDFILE "     with points t '' pt 6 lt 3 ps 0.8  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;


 # graph of two waves meeting out of phase
    $data = sprintf "cosine_addition_%02d.dat", 2;
    $title = "";
    $cmdfile = sprintf "make_addition_plot_a.gnu";
    $psfile = sprintf "make_addition_plot_a.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 1.1  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data_next' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.4  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;




# now show the waves AND their sum -- offset 1/10 of a wavelength

    $data = sprintf "cosine_addition_%02d.dat", 1;
    $title = "";
    $cmdfile = sprintf "make_addition_plot_c.gnu";
    $psfile = sprintf "make_addition_plot_c.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 0.9  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.8  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$4) ";
    printf CMDFILE "     with points t '' pt 6 lt 3 ps 0.8  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;


# now show the waves AND their sum -- offset 2/10 of a wavelength

    $data = sprintf "cosine_addition_%02d.dat", 2;
    $title = "";
    $cmdfile = sprintf "make_addition_plot_d.gnu";
    $psfile = sprintf "make_addition_plot_d.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 0.9  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.8  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$4) ";
    printf CMDFILE "     with points t '' pt 6 lt 3 ps 0.8  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;

   

# now show the waves AND their sum -- offset 4/10 of a wavelength

    $data = sprintf "cosine_addition_%02d.dat", 4;
    $title = "";
    $cmdfile = sprintf "make_addition_plot_e.gnu";
    $psfile = sprintf "make_addition_plot_e.ps";
    open(CMDFILE, ">$cmdfile") || die("can't open $cmdfile");
    printf CMDFILE "set output '$psfile' \n";
    printf CMDFILE "set term postscript color \n";
    printf CMDFILE "set grid \n";
    printf CMDFILE "set key top left \n";
    printf CMDFILE "set xlabel 'Distance wave has travelled (wavelengths)' \n";
    printf CMDFILE "set ylabel 'Amplitude of wave'  \n";
    printf CMDFILE "set title '$title'  \n";
    printf CMDFILE "plot [-1.5:1.5][-2.2:2.2] ";
    #printf CMDFILE " '$data_next' using (\$1/$twopi):(\$2) ";
    #printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.6  ";
    #printf CMDFILE " , ";
    printf CMDFILE " '$data' using (\$1/$twopi):(\$2) ";
    printf CMDFILE "     with points t '' pt 6 lt -1 ps 0.9  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$3) ";
    printf CMDFILE "     with points t '' pt 5 lt 1 ps 0.8  ";
    printf CMDFILE " , ";
    printf CMDFILE " '$data' using ((\$1/$twopi)):(\$4) ";
    printf CMDFILE "     with points t '' pt 6 lt 3 ps 0.8  ";
    #printf CMDFILE " 'center.dat' using (\$1):(\$2) t '' with lines lt -1  ";
    printf CMDFILE " \n";
    
    printf CMDFILE "quit \n";
    close(CMDFILE);
    
    $cmd = "gnuplot $cmdfile ";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;
    $giffile = $psfile;
    $giffile =~ s/.ps/.gif/;
    $cmd = "convert -rotate 90 $psfile $giffile";
    printf "cmd is ..$cmd.. \n";
    $ret = `$cmd`;

   
   
   
    

exit 0;
