

/////////////////////////////////////////////////
// global variable predeclarations
////////////////////////////////////////////////

var pi = Math.PI;        // convenience operator for pi

var form = window.document.MScalc  ;  // define specific form on web page

var maxEdges = 46 ;   // number of pulse edges listable on screen
var Angles = new Array (maxEdges) ;  // array to hold all edges
var dAngles = new Array (maxEdges) ;  // special delta array to hold all edges

var maxHarms =88 ;  // number of harmonics listable on screen
var Harms = new Array (maxHarms );   // array to hold all harmonics

var a01= 0.53           ;   // fundamental amplitude stash

var zDist = 100     ; // zeroable distortion placeholder in percent 

var zHarms = 14  ;  // count of zeroable harmonics
var numPoints = 11 ; // decimal points of precision to screen ( from float conversion )

var maxQuantdeg = 20                           ;       // number of degreesof quantized "full scale" delay.
maxQuantrad = maxQuantdeg*pi/180      ;      // and quantized for radian use

var zHarms = 13  ;                           // set zeroable harmonics 3-5-7-...-27 for selected ms global placeholder
var msEdges = 14 ;                         // pulse edges for selected magic sinewave global placeholder               
var msPulses = 7 ;                          // number of pulses for selected magic sinewve global placeholder
var msPhase = 12.000*pi/180  ;        // radian carrier phase for selected magic sinewave placeholder
var msOffset = 6.000*pi/180;             // radian carrier zero offset for selected magic sinewave placeholder
var sinSum = 1.2345 ;                      // sum of sine fractions for selected magic sinewave placeholder
var nxnOrder = 14 ;                         // nxn equation to be solved for magic sinewave placeholder
var guessPow = 4 ;                        // placemarker for second guessing
var guessFract = 0.1 ; 

var eqns = [[2,2],[2,2],[2,2]] ;         // placemarker for later redefined eqns array

var eq0 = [2,2,2,2] ;                       // placemaker for later redefined eqn terms used for debug
var eq1 = [2,2,2,2] ; 
var eq2 = [2,2,2,2] ; 

var eqd = [2,2,2,2] ;

/////////////////////////////////////////////////////////
// screen to array transfer functions
////////////////////////////////////////////////////////

// obscure loops are used to try and maximize "n" independence.

// loadAngles fills the angles array from the screen values. Array angles are converted TO radians FROM degrees.

function loadAngles (form) { 

                                   for (jj = 0;  jj<msEdges/2  ;  jj++ ) {      
                                        
                                          curedg = "fp" + (jj + 1)  ;                                   // make fp0 through fp7
                                          Angles [jj*2]     =  form [curedg + "s" ]["value"] * pi/180 ;
                                          Angles [jj*2+1] =  form [curedg + "e" ]["value"] * pi/180 ;
                                                                                      } ;
                                     } ;

// storeAngles fills the screen values from the angles array. Array angles are converted FROM radians TO degrees.

 function storeAngles (form) { 

                          for (jj = 0;  jj<msEdges/2  ;  jj++ ) {      
                                        
                                 curedg = "fp" + (jj + 1)  ;   // make fp0 through fp7

                             form [curedg + "s"]["value"] = Angles [jj*2]     * 180/pi  ;  //start edge
                             form[curedg + "e"]["value"] = Angles [jj*2+1] * 180/pi  ;  // end edge   

                                                                           } ; 

                              exportDataA (this.form) ;      // update export of pulse angles     
                              exportDataD (this.form) ;      // update export of delay and width values
                                          } ;

   


// storeHarms returns the amplitude fa01 and the harmonic  fhxx values to the screen..

function storeHarms (form) {            

                   form.fa01.value =  fixFloat ((Harms[0]*4/pi), numPoints)     ;   // this is the absolute amplitude  Fourier scaled

                   for (ii = 1;  ii<maxHarms +1  ; ii++ )  {      

                          curHval=  ii*2+1                ;          // makes 3,5,7,9 ...
                          curHvals = curHval + ""     ;          // sneaky string converter with optional leading zero
                          if (curHval <10 ) {curHvals = "0" + curHvals}   ;
                          curHvals = "fh" + curHvals ;

                          form [curHvals]["value"]  = fixFloat (Harms[ii], numPoints) 
                                                                   }  ;

                        exportDataA (this.form) ;      // update export of pulse angles     
                        exportDataD (this.form) ;      // update export of delay and width values.

                                    } ;


////////////////////////////////////////////////////////////////////////
// harmonic and distortion calculation functions
///////////////////////////////////////////////////////////////////////

// findHarms calculates the harmonics from the angles. Harms[0] is the absolute amplitude. Harms[x] is the relative strength...
// NOTE: Harms[0] is RAW and UNSCALED. Final amplitude is Harms[0]*4/pi by Fourier scaling.

function findHarms (form) {

                             Harms[0] = 0   ;                                         // find absolute fundamental amplitude  
                             for (ii=0 ;  ii<msPulses; ii++ ) {
                                   Harms[0] +=  ( Math.cos ( Angles[ii*2] )  - Math.cos ( Angles[ii*2+1] ) )  }  ;
                                                                         
                             for (jj=1 ;  jj<(maxHarms+1); jj++ ) {                 // add individual relative harmonics to array

                                        harmMult = jj*2+1 ;            // generates 3,5,7,... sequence

                                         Harms[jj] = 0 ;      // start running total 

                                        for (kk=0 ;  kk<msPulses; kk++ ) {
                                                    Harms[jj] +=  ( Math.cos (harmMult* Angles[kk*2] )  -
                                                                          Math.cos (harmMult*  Angles[(kk*2)+1] ) )

                                                }  ;

                                                    Harms[jj] = Harms[jj] / ( harmMult  * Harms[0] ) ;   // normalize to fundamental

                                                                     }  ;       // for each harmonic array value
                                                                         
                                    } ; 


// findDist calculates and reports the distortion of the zeroed harmonics for this magic sinewave selection.

function findDist (form){

                            zDist = 0  ; // start distortion counter
                            for ( ii=1 ;  ii<(zHarms + 1)   ; ii++   ) {
                                   zDist += Harms[ii] * Harms [ii]  ;    // running sum of squares
                                                } ;
                            zDist = 100 * Math.sqrt(zDist)   ;  //square root of sum x100 for percent
                              form.fthd.value =    fixFloat ( zDist, numPoints )   ;     // and report to screen 
                                } ;


//////////////////////////////////////////////
// button activation functions
//////////////////////////////////////////////

// pickMagicSinewave set up the display highlights and establishes values for the different magic sinewave types

// Unimplemented prototype original magic sinewaves may be tricky because they involve an additional unknown.
// These do not seem to offer any obvious benefits over the better versions.

function pickMagicSinewave (form) {      // done  by name to ease expansion
          sel = form.pickMS ;

          if (sel.options[sel.selectedIndex].value == "DF15")   {setupDf15 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "DF11")   {setupDf11 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "DF7")   {setupDf7 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "DF3")   {setupDf3 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "DF1")   {setupBef1 (this.form) }  ; // same

		  if (sel.options[sel.selectedIndex].value == "BEF23") {setupBef23 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF22") {setupBef22 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF21") {setupBef21 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF20") {setupBef20 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF19") {setupBef19 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF18") {setupBef18 (this.form) }  ;
		  if (sel.options[sel.selectedIndex].value == "BEF17") {setupBef17 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF16") {setupBef16 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF15") {setupBef15 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF14") {setupBef14 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF13") {setupBef13 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF12") {setupBef12 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF11") {setupBef11 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF10") {setupBef10 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF9") {setupBef9 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF8") {setupBef8 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF7") {setupBef7 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF6") {setupBef6 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF5") {setupBef5 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF4") {setupBef4 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF3") {setupBef3 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF2") {setupBef2 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BEF1") {setupBef1 (this.form) }  ;



		  if (sel.options[sel.selectedIndex].value == "BBE23") {setupBbe23 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE22") {setupBbe22 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE21") {setupBbe21 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE20") {setupBbe20 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE19") {setupBbe19 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE18") {setupBbe18 (this.form) }  ; 
		  if (sel.options[sel.selectedIndex].value == "BBE17") {setupBbe17 (this.form) }  ; 
          if (sel.options[sel.selectedIndex].value == "BBE16") {setupBbe16 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE15") {setupBbe15 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE14") {setupBbe14 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE13") {setupBbe13 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE12") {setupBbe12 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE11") {setupBbe11 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE10") {setupBbe10 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE9") {setupBbe9 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE8") {setupBbe8 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE7") {setupBbe7 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE6") {setupBbe6 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE5") {setupBbe5 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE4") {setupBbe4 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE3") {setupBbe3 (this.form) }  ;
          if (sel.options[sel.selectedIndex].value == "BBE2") {setupBbe2 (this.form) }  ;

                                    } ; 

// setAmplitude is automatically diverted by the pickMagicSinewave sub-functions 

// setAngles calculates and displays results from present on-form angle settings.

function setAngles (form ) { 
                                      loadAngles (this.form) ;            // read present angle array from form
                                      findHarms (this.form) ;              // calculate amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report zeroed distortion to form
                                      } ;

// imProve is automatically diverted by the pickMagicSinewaves sub-functions.
// instaCalc is automatically diverted by the pickMagicSinewaves sub-functions.
// deBug is an optional feature used for temporarily tests. It can be changed below

function deBug (form ) { 
           alert ("Optional feature not presently active.\nPlease make another selection") ;
                                 } ;

// quantization routines find distortions for given number of amplitude data bits.  qincr is passed to quantany

function adjQuant8  (form) {qincr = maxQuantrad /  256 ;     // set coarseness after radian adjustment
                                       quantany (form)} ;                             // adjust values

function adjQuant10 (form) {qincr = maxQuantrad / 1024 ; 
                                      quantany (form)} ; 

function adjQuant12 (form) {qincr =  maxQuantrad / 4096 ; 
                                     quantany (form)} ; 

function adjQuant16 (form) {qincr =  maxQuantrad / (256 * 256); 
                                     quantany (form) }; 

function adjQuant24 (form) {qincr = maxQuantrad  / (256 * 256 * 256); 
                                     quantany (form)} ; 



///////////////////////////////////////////////
// button service functions
//////////////////////////////////////////////


// these establish the global variables used for each sinewave type.  VARIES WITH N

// Beff7 sets up the parameters for a best efficiency, seven pulse per quadrant magic sinewave




function setupBef23 (form) {   prepDisplay ("cfh93", "cfh95","2-92", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 45  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 46 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 23 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/23.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;          // radian carrier zero offset for  sinewave
                                           nxnOrder = 46 ;                     // order of nxn equation to be solved
                                           
                                           guessPow = 4 ;                      // power of second guess correction
                                           guessFract = 0.0;                   // fraction of second guess correction
										  
										  
	harmSequence = [  1, 91,  3, 89,  5, 87,  7, 85,  9, 83,
                     11, 81, 13, 79, 15, 77, 17, 75, 19, 73,
					 21, 71, 23, 69, 25, 67, 27, 65, 29, 63,
					 31, 61, 33, 59, 35, 57, 37, 55, 39, 53,
					 41, 51, 43, 49, 45, 47 ] ;                                 // minimize Gauss-Jordan coefficient buildup

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;


function setupBef22 (form) {   prepDisplay ("cfh89", "cfh91","2-88", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 43  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 44 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 22 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/22.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 44 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.0;                  // fraction of second guess correction
										  
										  
	harmSequence = [  1, 87,  3, 85,  5, 83,  7, 81,  9, 79,
                     11, 77, 13, 75, 15, 73, 17, 71, 19, 69,
					 21, 67, 23, 65, 25, 63, 27, 61, 29, 59,
					 31, 57, 33, 55, 35, 53, 37, 51, 39, 49,
					 41, 47, 43, 45 ] ;                                       // minimize Gauss-Jordan coefficient buildup

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;



function setupBef21 (form) {   prepDisplay ("cfh85", "cfh87","2-84", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 41  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 42 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 21 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/21.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 42 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.0;                  // fraction of second guess correction
										  
										  
	harmSequence = [  1, 83,  3, 81,  5, 79,  7, 77,  9, 75,
                     11, 73, 13, 71, 15, 69, 17, 67, 19, 65,
					 21, 63, 23, 61, 25, 59, 27, 57, 29, 55,
					 31, 53, 33, 51, 35, 49, 37, 47, 39, 45,
					 41, 43 ] ;                                 // minimize Gauss-Jordan coefficient buildup

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;


function setupBef20 (form) {   prepDisplay ("cfh81", "cfh83","2-80", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 39  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 40 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 20 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/20.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 40 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.0;                  // fraction of second guess correction
										  
										  
	harmSequence = [  1, 79,  3, 77,  5, 75,  7, 73,  9, 71,
                     11, 69, 13, 67, 15, 65, 17, 63, 19, 61,
					 21, 59, 23, 57, 25, 55, 27, 53, 29, 51,
					 31, 49, 33, 47, 35, 45, 37, 43, 39, 41 ] ;    // minimize Gauss-Jordan coefficient buildup

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;







function setupBef19 (form) {   prepDisplay ("cfh77", "cfh79","2-76", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 37  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 38 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 19 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/19.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 38 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.0;                  // fraction of second guess correction
										  
										  
      harmSequence = [  1, 75,  3, 73,  5, 71,  7, 69, 
	                    9, 67, 11, 65, 13, 63, 15, 61,
					   17, 59, 19, 57, 21, 55, 23, 53,
					   25, 51, 27, 49, 29, 47, 31, 45,
					   33, 43, 35, 41, 37, 39 ] ;    // minimize Gauss-Jordan coefficient buildup

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;





function setupBef18 (form) {   prepDisplay ("cfh73", "cfh75","2-72", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 35  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 36 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 18 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/18.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 36 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.011;                  // fraction of second guess correction
										  
										  
			      harmSequence = [  1, 71,  3, 69,  5, 67,  7, 65,
				                    9, 63, 11, 61, 13, 59, 15, 57,
								   17, 55, 19, 53, 21, 51, 23, 49,
								   25, 47, 27, 45, 29, 43, 31, 41,
				                   33, 39, 35, 37 ] ;    // minimize Gauss-Jordan coefficient buildup							  
										  

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;







function setupBef17 (form) {   prepDisplay ("cfh69", "cfh71","2-68", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 33  ;                      // set zeroable harmonics 3-5-7-...-27 for thi
                                           msEdges = 34 ;                      // pulse edges for this magic sinewave 

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                                           msPulses = 17 ;                     // number of quadrant pulses for sinewve
                                           msPhase = (90/17.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 34 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.031;                  // fraction of second guess correction
										  
										  
															  
			      harmSequence = [  1, 67,  3, 65,  5, 63,  7, 61,
				                    9, 59, 11, 57, 13, 55, 15, 53,
								   17, 51, 19, 49, 21, 47, 23, 45, 
								   25, 43, 27, 41, 29, 39, 31, 37,
				                   33, 35 ] ;    // minimize Gauss-Jordan coefficient buildup						  
										  
										  

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;



function setupBef16 (form) {   prepDisplay ("cfh65", "cfh67","2-64", form) ;   // highlight display; fix dist value
                                           eraseAngs (form) ;
                                           zHarms = 31  ;                      // set zeroable harmonics 3-5-7-...-27 for this ms
                                           msEdges = 32 ;                      // pulse edges for this magic sinewave   

                                           Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
           
                                           msPulses = 16 ;                     // number of quadrant pulses for this magic sinewve
                                           msPhase = (90/16.5)*pi/180 ;        //  radian carrier phase for this sinewave
                                           msOffset = 0.000*pi/180  ;         // radian carrier zero offset for  sinewave
                                           nxnOrder = 32 ;                      // order of nxn equation to be solved
                                           
                                          guessPow = 4 ;                       // power of second guess correction
                                          guessFract = 0.021;                  // fraction of second guess correction
										  
										  
																		  
			 harmSequence = [  1, 63,  3, 61,  5, 59,  7, 57,
			                   9, 55, 11, 53, 13, 51, 15, 49,
							  17, 47, 19, 45, 21, 43, 23, 41,
							  25, 39, 27, 37, 29, 35, 31, 33 ] ;    // minimize Gauss-Jordan coefficient buildup								  		  

                                          setAmplitude = guessBeff ;          // divert amplitude setting guess function
                                          imProve = imProveBeff ;             // divert improve function

                                          }  ;












function setupBef15 (form) {   prepDisplay ("cfh61", "cfh63","2-60", form) ;     // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 29  ;                             // set zeroable harmonics 3-5-7-...-27
                               msEdges = 30 ;                             // pulse edges for this magic sinewave

                               Angles =  Array (msEdges) ;                // reset size of active Angles array  
                                          
                               msPulses = 15 ;                            // number of quadrant pulses for this magic sinewve
                               msPhase = (90/15.5)*pi/180 ;              //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;                // radian carrier zero offset for this magic sinewave
                               nxnOrder = 30 ;                           // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                            // power of second guess correction
                               guessFract = 0.013 ;                      // fraction of second guess correction

                               setAmplitude = guessBeff ;                // divert amplitude setting 
										  
		 harmSequence = [  1, 59,  3, 57,  5, 55,  7, 53,
		                   9, 51, 11, 49, 13, 47, 15, 45,
						  17, 43, 19, 41, 21, 39, 23, 37,
						  25, 35, 27, 33, 29, 31 ] ;                     // minimize Gauss-Jordan coefficient buildup					  
                                          imProve = imProveBeff ;                                // divert improve function

                                          }  ;

function setupBef14 (form) {   prepDisplay ("cfh57", "cfh59","2-56", form) ;  // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 27 ;                              // set zeroable harmonics 3-5-7-...-27 
                               msEdges = 28 ;                             // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;                // reset size of active Angles array  
                                          
                               msPulses = 14 ;                            // number of quadrant pulses for 
                               msPhase = (90/14.5)*pi/180 ;               //  radian carrier phase for this ms
                               msOffset = 0.000*pi/180  ;                 // radian carrier zero offset for this ms
                               nxnOrder = 28 ;                            // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                             // power of second guess correction
                               guessFract = 0.017 ;                       // fraction of second 
										  
										  
		 harmSequence = [  1, 55,  3, 53,  5, 51,  7, 49,
		                   9, 47, 11, 45, 13, 43, 15, 41,
						  17, 39, 19, 37, 21, 35, 23, 33,
						  25, 31, 27, 29 ] ;                     // minimize Gauss-Jordan coefficient buildup	

                               setAmplitude = guessBeff ;                 // divert amplitude setting guess function
                               imProve = imProveBeff ;                    // divert improve function

                                          }  ;


function setupBef13 (form) {   prepDisplay ("cfh53", "cfh55","2-52", form) ;     // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 25 ;                       // set zeroable harmonics 3-5-7-...-27 
                               msEdges = 26 ;                      // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;         // reset size of active Angles array  
                                          
                               msPulses = 13 ;                    // number of quadrant pulses for this magic sinewve
                               msPhase = (90/13.5)*pi/180 ;        //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;          // radian carrier zero offset for this magic sinewave
                               nxnOrder = 26 ;                     // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                      // power of second guess correction
                               guessFract = 0.019 ;                // fraction of second guess correction

		 harmSequence = [  1, 51,  3, 49,  5, 47,  7, 45,
		                   9, 43, 11, 41, 13, 39, 15, 37,
						  17, 35, 19, 33, 21, 31, 23, 29,
						  25, 27 ] ;                                // minimize Gauss-Jordan coefficient buildup	

                               setAmplitude = guessBeff ;          // divert amplitude setting guess function
                               imProve = imProveBeff ;              // divert improve function

                                          }  ;



function setupBef12 (form) {   prepDisplay ("cfh49", "cfh51","2-48", form) ;   // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 23 ;                       // set zeroable harmonics 3-5-7-...-27 for this ms
                               msEdges = 24 ;                      // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;         // reset size of active Angles array  
                               msPulses = 12 ;                     // number of quadrant pulses for this magic sinewve
                               msPhase = (90/12.5)*pi/180 ;        //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;          // radian carrier zero offset for this magic sinewave
                               nxnOrder = 24 ;                    // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                     // power of second guess correction
                               guessFract = 0.022 ;               // fraction of second guess correction

		 harmSequence = [  1, 47,  3, 45,  5, 43,  7, 41,
		                   9, 39, 11, 37, 13, 35, 15, 33,
						  17, 31, 19, 29, 21, 27, 23, 25 ] ;      // minimize Gauss-Jordan coefficient buildup

                               setAmplitude = guessBeff ;         // divert amplitude setting guess function
                               imProve = imProveBeff ;            // divert improve function

                                          }  ;


function setupBef11 (form) {   prepDisplay ("cfh45", "cfh47","2-44", form) ;     // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 21 ;                  // set zeroable harmonics 3-5-7-...-27 for this ms
                               msEdges = 22 ;                 // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;    // reset size of active Angles array  
                                          
                               msPulses = 11 ;                // number of quadrant pulses for this magic sinewve
                               msPhase = (90/11.5)*pi/180 ;   //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                               nxnOrder = 22 ;                // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                 // power of second guess correction
                               guessFract = 0.024 ;           // fraction of second guess correction

	  harmSequence = [  1, 43,  3, 41,  5, 39,  7, 37,
		                9, 35, 11, 33, 13, 31, 15, 29,
				       17, 27, 19, 25, 21, 23          ] ;    // minimize Gauss-Jordan coefficient buildup

                                setAmplitude = guessBeff ;    // divert amplitude setting guess function
                                imProve = imProveBeff ;       // divert improve function

                                          }  ;

function setupBef10 (form) {   prepDisplay ("cfh41", "cfh43","2-40", form) ;     // highlight display; fix dist value
                               eraseAngs (form) ;
                               zHarms = 19 ;                  // set zeroable harmonics 3-5-7-...-27 for this ms
                               msEdges = 20 ;                 // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;    // reset size of active Angles array  
                                          
                               msPulses = 10 ;                // number of quadrant pulses for this magic sinewve
                               msPhase = (90/10.5)*pi/180 ;   //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this ms
                               nxnOrder = 20 ;                // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                 // power of second guess correction
                               guessFract = 0.027 ;           // fraction of second guess correction

	  harmSequence = [  1, 39,  3, 37,  5, 35,  7, 33,
		                9, 31, 11, 29, 13, 27, 15, 25,
				       17, 23, 19, 21                     ] ;  // minimize Gauss-Jordan coefficient buildup

                               setAmplitude = guessBeff ;      // divert amplitude setting guess function
                               imProve = imProveBeff ;         // divert improve function

                                          }  ;

function setupBef9 (form) {   prepDisplay ("cfh37", "cfh39","2-36", form) ;     // highlight display; fix dist value
                              eraseAngs (form) ;
                              zHarms = 17 ;                     // set zeroable harmonics 3-5-7-...-27 for this ms
                              msEdges = 18 ;                    // pulse edges for this magic sinewave   

                              Angles =  Array (msEdges) ;       // reset size of active Angles array  
                              msPulses = 9 ;                    // number of quadrant pulses for this magic sinewve
                              msPhase = (90/9.5)*pi/180 ;       //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;        // radian carrier zero offset for this magic sinewave
                              nxnOrder = 18 ;                   // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                    // power of second guess correction
                              guessFract = 0.029 ;              // fraction of second guess correction

	  harmSequence = [  1, 35,  3, 33,  5, 31,  7, 29,
		                9, 27, 11, 25, 13, 23, 15, 21,
				       17, 19                          ] ;     // minimize Gauss-Jordan coefficient buildup

                               setAmplitude = guessBeff ;      // divert amplitude setting guess function
                               imProve = imProveBeff ;         // divert improve function

                                          }  ;


function setupBef8 (form) {   prepDisplay ("cfh33", "cfh35","2-32", form) ;     // highlight display; fix dist value
                              eraseAngs (form) ;
                              zHarms = 15 ;                        // set zeroable harmonics 3-5-7-...-27 for this ms
                              msEdges = 16 ;                       // pulse edges for this magic sinewave   

                              Angles =  Array (msEdges) ;          // reset size of active Angles array  
                              msPulses = 8;                        // number of quadrant pulses for this magic sinewve
                              msPhase = (90/8.5)*pi/180 ;          //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;           // radian carrier zero offset for this magic sinewave
                              nxnOrder = 16 ;                      // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                       // power of second guess correction
                              guessFract = 0.032 ;                 // fraction of second guess correction

	  harmSequence = [  1, 31,  3, 29,  5, 27,  7, 25,
		                9, 23, 11, 21, 13, 19, 15, 17  ] ;     // minimize Gauss-Jordan coefficient buildup

                              setAmplitude = guessBeff ;         // divert amplitude setting guess function
                              imProve = imProveBeff ;            // divert improve function

                                          }  ;



function setupBef7 (form) {   prepDisplay ("cfh29", "cfh31","2-28", form) ;     // highlight display; fix dist value
                              eraseAngs (form) ;
                              zHarms = 13  ;                    // set zeroable harmonics 3-5-7-...-27 for this ms
                              msEdges = 14 ;                    // pulse edges for this magic sinewave   

                              Angles =  Array (msEdges) ;       // reset size of active Angles array  
                                          
                              msPulses = 7 ;                    // number of quadrant pulses for this magic sinewve
                              msPhase = (90/7.5)*pi/180 ;       //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;        // radian carrier zero offset for this magic sinewave
                              nxnOrder = 14 ;                   // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                    // power of second guess correction
                              guessFract = 0.035 ;              // fraction of second guess correction

	  harmSequence = [  1, 27,  3, 25,  5, 23,  7, 21,
		                9, 19, 11, 17, 13, 15          ] ;     // minimize Gauss-Jordan coefficient buildup

                              setAmplitude = guessBeff ;       // divert amplitude setting guess function
                              imProve = imProveBeff ;          // divert improve function

                                          }  ;

function setupBef6 (form) {  
                              prepDisplay ("cfh25", "cfh27","2-24", form) ;     // highlight display; fix dist value
                              eraseAngs (form) ;

                              zHarms = 12  ;                 // set zeroable harmonics 3-5-7-...-27 for this ms
                              msEdges = 12 ;                 // pulse edges for this magic sinewave   

                              Angles =  Array (msEdges) ;    // reset size of active Angles array
                              zHarms = 11        ;           // count of zeroable harmonics
             
                              msPulses =6 ;                  // number of quadrant pulses for this magic sinewve
                              msPhase = (90/6.5)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                              nxnOrder = 12 ;                // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                 // power of second guess correction
                              guessFract = 0.035 ;           // fraction of second guess correction

                              setAmplitude = guessBeff ;     // divert amplitude setting 			  
										  
		    harmSequence = [1, 23, 3, 21, 5, 19, 7, 17, 9, 15, 11, 13] ;    // minimize Gauss-Jordan coefficient buildup								  
                              imProve = imProveBeff ;        // divert improve function

                                          }  ;


function setupBef5 (form) {  
                           prepDisplay ("cfh21", "cfh23","2-20", form) ;     // highlight display; fix dist value
                           eraseAngs (form) ;
                           ppQuarrant = 5 ;
                           zHarms = 10  ;                       // set zeroable harmonics 3-5-7-...-27 for this ms
                           msEdges = 10 ;                       // pulse edges for this magic sinewave   

                           Angles =  Array (msEdges) ;          // reset size of active Angles array
                           zHarms = 9    ;                      // count of zeroable harmonics
             
                           msPulses =5 ;                        // number of quadrant pulses for this magic sinewve
                           msPhase = (90/5.5)*pi/180 ;          //  radian carrier phase for this magic sinewave
                           msOffset = 0.000*pi/180  ;           // radian carrier zero offset for this magic sinewave
                           nxnOrder = 10 ;                      // order of nxn equation to be solved
                                           
                           guessPow = 4 ;                       // power of second guess correction
                           guessFract = 0.035 ;                 // fraction of second guess correction

		    harmSequence = [1, 19, 3, 17, 5, 15, 7, 13, 9, 11 ] ;    // minimize Gauss-Jordan coefficient buildup

                           setAmplitude = guessBeff ;           // divert amplitude setting guess function
                           imProve = imProveBeff ;              // divert improve function

                                          }  ;


function setupBef4 (form) {  
                            prepDisplay ("cfh17", "cfh19","2-16", form) ;     // highlight display; fix dist value
                            eraseAngs (form) ;
                            ppQuarrant = 4 ;
                            msEdges = 8 ;                   // pulse edges for this magic sinewave   

                            Angles =  Array (msEdges) ;     // reset size of active Angles array
                            zHarms = 7     ;                // set zeroable harmonics 3-5-7-...-27 for this ms
                            msPulses =4 ;                   // number of quadrant pulses for this magic sinewve
                            msPhase = (90/4.5)*pi/180 ;     //  radian carrier phase for this magic sinewave
                            msOffset = 0.000*pi/180  ;      // radian carrier zero offset for this magic sinewave
                            nxnOrder = 8 ;                  // order of nxn equation to be solved
                                           
                            guessPow = 4 ;                  // power of second guess correction
                            guessFract = 0.035 ;            // fraction of second guess correction

		    harmSequence = [1, 15, 3, 13, 5, 11, 7, 9 ] ;   // minimize Gauss-Jordan coefficient buildup

                            setAmplitude = guessBeff ;      // divert amplitude setting guess function
                            imProve = imProveBeff ;         // divert improve function

                                          }  ;


function setupBef3 (form) {  
                            prepDisplay ("cfh13", "cfh15","2-12", form) ;     // highlight display; fix dist value
                            eraseAngs (form) ;
                            ppQuarrant = 3 ;
                            msEdges = 6 ;                      // pulse edges for this magic sinewave   

                            Angles =  Array (msEdges) ;        // reset size of active Angles array
                            zHarms = 5        ;                // set zeroable harmonics 3-5-7-...-27 for this ms
                            msPulses =3 ;                      // number of quadrant pulses for this magic sinewve
                            msPhase = (90/3.5)*pi/180 ;        //  radian carrier phase for this magic sinewave
                            msOffset = 0.000*pi/180  ;         // radian carrier zero offset for this magic sinewave
                            nxnOrder = 6 ;                     // order of nxn equation to be solved
                                           
                            guessPow = 4 ;                     // power of second guess correction
                            guessFract = 0.035 ;               // fraction of second guess correction

		    harmSequence = [1, 11, 3, 9, 5, 7 ] ;   // minimize Gauss-Jordan coefficient buildup

                            setAmplitude = guessBeff ;          // divert amplitude setting guess function
                            imProve = imProveBeff ;             // divert improve function

                                          }  ;




function setupBef2 (form) {  
                           prepDisplay ("cfh09", "cfh11","2-8", form) ;     // highlight display; fix dist value
                           eraseAngs (form) ;

                           ppQuarrant = 2 ;
                           msEdges = 4 ;                  // pulse edges for this magic sinewave   

                           Angles =  Array (msEdges) ;    // reset size of active Angles array
                           zHarms = 3     ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                           msPulses =2 ;                  // number of quadrant pulses for this magic sinewve
                           msPhase = (90/2.5)*pi/180 ;    //  radian carrier phase for this magic sinewave
                           msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                           nxnOrder = 4 ;                 // order of nxn equation to be solved
                                           
                           guessPow = 4 ;                 // power of second guess correction
                           guessFract = 0.035 ;           // fraction of second guess correction

		    harmSequence = [1, 7, 3, 5  ] ;   // minimize Gauss-Jordan coefficient buildup

                           setAmplitude = guessBeff ;     // divert amplitude setting guess function
                           imProve = imProveBeff ;        // divert improve function

                                          }  ;



function setupBef1 (form) {  
                           prepDisplay ("cfh05", "cfh07","2-4", form) ;     // highlight display; fix dist value
                           eraseAngs (form) ;
                           ppQuarrant =1 ;
                           msEdges = 2 ;                 // pulse edges for this magic sinewave   

                           Angles =  Array (msEdges) ;   // reset size of active Angles array
                           zHarms = 1  ;                 // set zeroable harmonics 3-5-7-...-27 for this ms
                           msPulses =1 ;                 // number of quadrant pulses for this magic sinewve
                           msPhase = (90/1.5)*pi/180 ;   //  radian carrier phase for this magic sinewave
                           msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                           nxnOrder =2 ;                 // order of nxn equation to be solved
                                           
                           guessPow = 4 ;                // power of second guess correction
                           guessFract = 0.035 ;          // fraction of second guess correction

		    harmSequence = [1, 3 ] ;   // minimize Gauss-Jordan coefficient buildup

                           setAmplitude = guessBeff ;    // divert amplitude setting guess function
                           imProve = imProveBeff ;       // divert improve function

                                          }  ;




function setupDf15 (form) {   
                                         prepDisplay ("cfh47", "cfh49","2-46", form) ;     // highlight display; fix dist value
                                         eraseAngs (form) ;

                                         ppQuadrant = 15 ;                                // pulses per quadrant  
                                         msEdges = 30 ;                                            // pulse edges for this magic sinewave   
                                         Angles =  Array (msEdges) ;                         // reset size of active Angles array

                                         zHarms = 22                              ;              // set zeroable harmonics 3-5-7-...-27 for this ms

                                         msPulses =15 ;                                             // number of quadrant pulses for this magic sinewve
                                 //        msPhase = (90/16)*pi/180 ;                           //  radian carrier phase for this magic sinewave
                                  //       msOffset = (5)*pi/180  ;                            // radian carrier zero offset for this magic sinewave
                                         nxnOrder = 22 ;                                           // order of nxn equation to be solved

                                         setAmplitude = guessDf15 ;                            // divert amplitude setting guess function
                                         imProve = imProveDf15 ;                                // divert improve function

                                          }  ;


function setupDf11 (form) {   
                                         prepDisplay ("cfh35", "cfh37","2-34", form) ;     // highlight display; fix dist value
                                         eraseAngs (form) ;

                                         ppQuadrant =11 ;                                          // pulses per quadrant  
                                         msEdges = 22 ;                                            // pulse edges for this magic sinewave   
                                         Angles =  Array (msEdges) ;                         // reset size of active Angles array

                                         zHarms = 16                               ;              // set zeroable harmonics 3-5-7-...-27 for this ms

                                         msPulses =11 ;                                             // number of quadrant pulses for this magic sinewve
                               //          msPhase = (90/9)*pi/180 ;                           //  radian carrier phase for this magic sinewave
                                //         msOffset = (5)*pi/180  ;                              // radian carrier zero offset for this magic sinewave
                                         nxnOrder = 11 ;                                           // order of nxn equation to be solved

                                         setAmplitude = guessDf11 ;                            // divert amplitude setting guess function
                                         imProve = imProveDf11 ;                                // divert improve function

                                          }  ;


function setupDf7 (form) {   
                                         prepDisplay ("cfh23", "cfh25","2-22", form) ;     // highlight display; fix dist value
                                         eraseAngs (form) ;

                                         ppQuadrant = 7 ;                                  
                                           msEdges = 14 ;                                            // pulse edges for this magic sinewave   

                                           Angles =  Array (msEdges) ;                         // reset size of active Angles array
                                            zHarms = 10                               ;              // set zeroable harmonics 3-5-7-...-27 for this ms
             
                                           msPulses = 7 ;                                             // number of quadrant pulses for this magic sinewve
                                   //        msPhase = (90/6)*pi/180 ;                           //  radian carrier phase for this magic sinewave
                                   //        msOffset = 0.000*pi/180  ;                            // radian carrier zero offset for this magic sinewave
                                           nxnOrder = 6 ;                                           // order of nxn equation to be solved

                                          setAmplitude = guessDf7 ;                            // divert amplitude setting guess function
                                          imProve = imProveDf7 ;                                // divert improve function



                                          }  ;


function setupDf3 (form) {   
                                         prepDisplay ("cfh11", "cfh13","2-10", form) ;     // highlight display; fix dist value
                                         eraseAngs (form) ;

                                         msEdges = 6 ;                                            // pulse edges for this magic sinewave   
                                         Angles =  Array (msEdges) ;                         // reset size of active Angles array

                                         zHarms = 4                               ;              // set zeroable harmonics 3-5-7-...-27 for this ms

                                         msPulses =3 ;                                             // number of quadrant pulses for this magic sinewve
                                    //     msPhase = (90/3)*pi/180 ;                           //  radian carrier phase for this magic sinewave
                                   //      msOffset = (15)*pi/180  ;                            // radian carrier zero offset for this magic sinewave
                                         nxnOrder = 6 ;                                           // order of nxn equation to be solved

                                         setAmplitude = guessDf3 ;                            // divert amplitude setting guess function
                                         imProve = imProveDf3 ;                                // divert improve function
   
                                        }  ;



function setupBbe23 (form) {  prepDisplay ("cfh91", "cfh93","2-90", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuarrant = 23;                                  
                              msEdges = 46 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 44       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 23 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/23)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 45;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 89,  3, 87,  5, 85,  7, 83,  9, 81, 
	                 11, 79, 13, 77, 15, 75, 17, 73, 19, 71,
					 21, 69, 23, 67, 25, 65, 27, 63, 29, 61, 
					 31, 59, 33, 57, 35, 55, 37, 53, 39, 51,
					                     41, 49, 43, 47, 45    ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;







function setupBbe22 (form) {  prepDisplay ("cfh87", "cfh89","2-86", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuarrant = 22;                                  
                              msEdges = 44 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 42       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 22 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/22)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 43;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 85,  3, 83,  5, 81,  7, 79,  9, 77, 
	                 11, 75, 13, 73, 15, 71, 17, 69, 19, 67,
					 21, 65, 23, 63, 25, 61, 27, 59, 29, 57, 
					 31, 55, 33, 53, 35, 51, 37, 49, 39, 47,
					                             41, 45, 43    ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;

function setupBbe21 (form) {  prepDisplay ("cfh83", "cfh85","2-82", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 21;                                  
                              msEdges = 42 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 40       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 21 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/21)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 41;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 81,  3, 79,  5, 77,  7, 75,  9, 73, 
	                 11, 71, 13, 69, 15, 67, 17, 65, 19, 63,
					 21, 61, 23, 59, 25, 57, 27, 55, 29, 53, 
					 31, 51, 33, 49, 35, 47, 37, 45, 39, 43,
					                                     41    ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;



function setupBbe20 (form) {  prepDisplay ("cfh79", "cfh81","2-78", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 20;                                  
                              msEdges = 40 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 38       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 20 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/20)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 39;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 77,  3, 75,  5, 73,  7, 71,  9, 69, 
	                 11, 67, 13, 65, 15, 63, 17, 61, 19, 59,
					 21, 57, 23, 55, 25, 53, 27, 51, 29, 49, 
						 31, 47, 33, 45, 35, 43, 37, 41, 39   ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;

function setupBbe19 (form) {  prepDisplay ("cfh75", "cfh77","2-74", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 19;                                  
                              msEdges = 38 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 36       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 19 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/19)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 37;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 73,  3, 71,  5, 69,  7, 67,  9, 65, 
	                 11, 63, 13, 61, 15, 59, 17, 57, 19, 55,
					 21, 53, 23, 51, 25, 49, 27, 47, 29, 45, 
						         31, 43, 33, 41, 35, 39, 37   ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;

function setupBbe18 (form) {  prepDisplay ("cfh71", "cfh73","2-70", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 18;                                  
                              msEdges = 36 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 34       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 18 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/18)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 35;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 69,  3, 67,  5, 65,  7, 63,  9, 61, 
	                 11, 59, 13, 57, 15, 55, 17, 53, 19, 51,
					 21, 49, 23, 47, 25, 45, 27, 43, 29, 41, 
						                 31, 39, 33, 37, 35   ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;


function setupBbe17 (form) {  prepDisplay ("cfh67", "cfh69","2-66", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 17;                                  
                              msEdges = 34 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 32       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 17 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/17)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 33 ;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 65,  3, 63,  5, 61,  7, 59,  9, 57, 
	                 11, 55, 13, 53, 15, 51, 17, 49, 19, 47,
					 21, 45, 23, 43, 25, 41, 27, 39, 29, 37, 
						                         31, 35, 33   ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;


function setupBbe16 (form) {  prepDisplay ("cfh63", "cfh65","2-62", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 16;                                  
                              msEdges = 32 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 30       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 16 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/16)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 31 ;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 61,  3, 59,  5, 57,  7, 55,  9, 53, 
	                 11, 51, 13, 49, 15, 47, 17, 45, 19, 43,
					 21, 41, 23, 39, 25, 37, 27, 35, 29, 33, 
					                                     31   ] ;   // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;




function setupBbe15 (form) {  prepDisplay ("cfh59", "cfh61","2-58", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 15;                                  
                              msEdges = 30 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 28       ;           // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 15 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/15)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 29 ;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 57,  3, 55,  5, 53,  7, 51,  9, 49, 
	                 11, 47, 13, 45, 15, 43, 17, 41, 19, 39,
					     21, 37, 23, 35, 25, 33, 27, 31, 29   ] ;     // minimize Gauss-Jordan coefficient build

                              setAmplitude = guessBbe ;    // divert amplitude setting guess function
                              imProve = imProveBbe ;                                // divert improve function

                                      }      ;


function setupBbe14 (form) {  prepDisplay ("cfh55", "cfh57","2-54", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 14;                                  
                              msEdges = 28 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 26  ;                // set zeroable harmonics 3-5-7-...-27 for this ms
             
                               msPulses = 14 ;              // number of quadrant pulses for this magic sinewve
                               msPhase = (90/14)*pi/180 ;   //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;   // radian carrier zero offset for this magic sinewave
                               nxnOrder = 27 ;              // order of nxn equation to be solved
                                           
                               guessPow = 4 ;               // power of second guess correction
                               guessFract = 0.02 ;          // fraction of second guess correction

    harmSequence = [  1, 53,  3, 51,  5, 49,  7, 47,  9, 45, 
	                 11, 43, 13, 41, 15, 39, 17, 37, 19, 35,
					             21, 33, 23, 31, 25, 29, 27   ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;    // divert amplitude setting guess function
                               imProve = imProveBbe ;       // divert improve function

                                      }      ;

function setupBbe13 (form) { prepDisplay ("cfh51", "cfh53","2-50", form) ;     // highlight display; fix dist value

                             eraseAngs (form) ;
                             ppQuadrant = 13;              // pulse edges for this magic sinewave   
                             Angles =  Array (msEdges) ;   // reset size of active Angles array
                             zHarms = 24   ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                             msPulses = 13 ;               // number of quadrant pulses for this magic sinewve
                             msPhase = (90/13)*pi/180 ;    //  radian carrier phase for this magic sinewave
                             msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                             nxnOrder = 25 ;               // order of nxn equation to be solved
                                           
                             guessPow = 4 ;                // power of second guess correction
                             guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 49,  3, 47,  5, 45,  7, 43,  9, 41, 
	                 11, 39, 13, 37, 15, 35, 17, 33, 19, 31,
					                     21, 29, 23, 27, 25   ] ;     // minimize Gauss-Jordan coefficient build

                             setAmplitude = guessBbe ;     // divert amplitude setting guess function
                             imProve = imProveBbe ;        // divert improve function

                                      }      ;

function setupBbe12 (form) {  prepDisplay ("cfh47", "cfh49","2-46", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 12 ;                                  
                              msEdges = 24 ;                // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;   // reset size of active Angles array
                              zHarms = 22  ;                // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 12 ;               // number of quadrant pulses for this magic sinewve
                              msPhase = (90/12)*pi/180 ;    //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                              nxnOrder = 23 ;               // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                // power of second guess correction
                              guessFract = 0.02 ;           // fraction of second guess correction

    harmSequence = [  1, 45,  3, 43,  5, 41,  7, 39,  9, 37, 
	                 11, 35, 13, 33, 15, 31, 17, 29, 19, 27,
					                             21, 25, 23   ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;    // divert amplitude setting guess function
                               imProve = imProveBbe ;       // divert improve function

                                      }      ;

function setupBbe11 (form) {  prepDisplay ("cfh43", "cfh45","2-42", form) ;     // highlight display; fix dist value

                              eraseAngs (form) ;
                              ppQuadrant = 11 ;                                  
                              msEdges = 22 ;                 // pulse edges for this magic sinewave   
                              Angles =  Array (msEdges) ;    // reset size of active Angles array
                              zHarms = 20    ;               // set zeroable harmonics 3-5-7-...-27 for this ms
             
                              msPulses = 11 ;                // number of quadrant pulses for this magic sinewve
                              msPhase = (90/11)*pi/180 ;     //  radian carrier phase for this magic sinewave
                              msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                              nxnOrder = 21 ;                // order of nxn equation to be solved
                                           
                              guessPow = 4 ;                 // power of second guess correction
                              guessFract = 0.022 ;           // fraction of second guess correction

    harmSequence = [  1, 41,  3, 39,  5, 37,  7, 35,  9, 33, 
	                 11, 31, 13, 29, 15, 27, 17, 25, 19, 23,
					                                     21   ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;     // divert amplitude setting guess function
                                imProve = imProveBbe ;       // divert improve function

                                      }      ;

function setupBbe10 (form) {    prepDisplay ("cfh39", "cfh41","2-38", form) ;     // highlight display; fix dist value

                                eraseAngs (form) ;
                                ppQuadrant = 10 ;                                  
                                msEdges = 20 ;                // pulse edges for this magic sinewave   

                                Angles =  Array (msEdges) ;   // reset size of active Angles array
                                zHarms = 18   ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                                msPulses = 10 ;               // number of quadrant pulses for this magic sinewve
                                msPhase = (90/10)*pi/180 ;    //  radian carrier phase for this magic sinewave
                                msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                                nxnOrder = 19 ;               // order of nxn equation to be solved
                                           
                                guessPow = 4 ;                // power of second guess correction
                                guessFract = 0.022 ;          // fraction of second guess correction

    harmSequence = [  1, 37,  3, 35,  5, 33,  7, 31,  9, 29, 
	                     11, 27, 13, 25, 15, 23, 17, 21, 19   ] ;     // minimize Gauss-Jordan coefficient build

                                setAmplitude = guessBbe ;     // divert amplitude setting guess function
                                imProve = imProveBbe ;        // divert improve function

                                      }      ;


function setupBbe9 (form) {    prepDisplay ("cfh35", "cfh37","2-34", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 9 ;                                  
                               msEdges = 18 ;                 // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;    // reset size of active Angles array
                               zHarms = 16    ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                               msPulses =9 ;                  // number of quadrant pulses for this magic sinewve
                               msPhase = (90/9)*pi/180 ;      //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                               nxnOrder = 17 ;                // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                 // power of second guess correction
                               guessFract = 0.025 ;           // fraction of second guess correction

    harmSequence = [  1, 33,  3, 31,  5, 29,  7, 27,  9, 25, 
	                             11, 23, 13, 21, 15, 19, 17   ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;      // divert amplitude setting guess function
                               imProve = imProveBbe ;         // divert improve function

                                      }      ;



function setupBbe8 (form) {    prepDisplay ("cfh31", "cfh33","2-30", form) ;     // highlight display; fix dist value

                                eraseAngs (form) ;
                                ppQuadrant = 8 ;                                  
                                msEdges = 16 ;                   // pulse edges for this magic sinewave   

                                Angles =  Array (msEdges) ;      // reset size of active Angles array
                                zHarms = 14      ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                                msPulses =8 ;                    // number of quadrant pulses for this magic sinewve
                                msPhase = (90/8)*pi/180 ;        //  radian carrier phase for this magic sinewave
                                msOffset = 0.000*pi/180  ;       // radian carrier zero offset for this magic sinewave
                                nxnOrder = 15 ;                  // order of nxn equation to be solved
                                           
                                guessPow = 4 ;                  // power of second guess correction
                                guessFract = 0.025 ;            // fraction of second guess correction

    harmSequence = [  1, 29,  3, 27,  5, 25,  7, 23,  9, 21, 
	                                     11, 19, 13, 17, 15  ] ;     // minimize Gauss-Jordan coefficient build

                                setAmplitude = guessBbe ;        // divert amplitude setting guess function
                                imProve = imProveBbe ;           // divert improve function

                                      }      ;



function setupBbe7 (form) {    prepDisplay ("cfh27", "cfh29","2-26", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 7 ;                                  
                               msEdges = 14 ;                 // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;    // reset size of active Angles array
                               zHarms = 12     ;              // set zeroable harmonics 3-5-7-...-27 for this ms
                               msPulses = 7 ;                 // number of quadrant pulses for this magic sinewve
                               msPhase = (90/7)*pi/180 ;      //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;     // radian carrier zero offset for this magic sinewave
                               nxnOrder = 13 ;                // order of nxn equation to be solved
                                           
                               guessPow = 4 ;                 // power of second guess correction
                               guessFract = 0.025 ;           // fraction of second guess correction

    harmSequence = [  1,  25,  3, 23,  5, 21,  7, 19,  9, 17, 
	                                              11, 15, 13  ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;      // divert amplitude setting guess function
                               imProve = imProveBbe ;         // divert improve function

                                      }      ;


function setupBbe6 (form) {    prepDisplay ("cfh23", "cfh25","2-22", form) ;     // highlight display; fix dist value

                                eraseAngs (form) ;
                                ppQuadrant = 6 ;                                  
                                msEdges = 12 ;                // pulse edges for this magic sinewave   

                                Angles =  Array (msEdges) ;   // reset size of active Angles array
                                zHarms = 10        ;          // set zeroable harmonics 3-5-7-...-27 for this ms
                                msPulses = 6 ;                // number of quadrant pulses for this magic sinewve
                                msPhase = (90/6)*pi/180 ;     //  radian carrier phase for this magic sinewave
                                msOffset = 0.000*pi/180  ;    // radian carrier zero offset for this magic sinewave
                                nxnOrder = 11 ;               // order of nxn equation to be solved
                                           
                                // guessPow = 4 ;             // power of second guess correction
                                // guessFract = 0.035 ;       // fraction of second guess correction

	  harmSequence = [  1, 21,  3, 19,  5, 17,  7, 15, 9, 13, 11    ] ;     // minimize Gauss-Jordan coefficient build
						

                                 setAmplitude = guessBbe ;       // divert amplitude setting guess function
                                  imProve = imProveBbe ;         // divert improve function

                                      }      ;



function setupBbe5 (form) {    prepDisplay ("cfh19", "cfh21","2-18", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 5 ;                                  
                               msEdges = 10 ;                  // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;     // reset size of active Angles array
                               zHarms = 8           ;          // set zeroable harmonics 3-5-7-...-27 for this ms
                               msPulses = 5 ;                  // number of quadrant pulses for this magic sinewve
                               msPhase = (90/5)*pi/180 ;       //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;      // radian carrier zero offset for this magic sinewave
                               nxnOrder = 9 ;                  // order of nxn equation to be solved
                                          
                               // guessPow = 4 ;               // power of second guess correction
                               // guessFract = 0.035 ;         // fraction of second guess correction

	  harmSequence = [  1, 17,  3, 15,  5, 13,  7, 11, 9,    ] ;     // minimize Gauss-Jordan coefficient build

                               setAmplitude = guessBbe ;       // divert amplitude setting guess function
                               imProve = imProveBbe ;          // divert improve function

                                      }      ;


function setupBbe4 (form) {    prepDisplay ("cfh15", "cfh17","2-14", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 4 ;                                  
                               msEdges = 8 ;                   // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;     // reset size of active Angles array
                               zHarms = 6      ;               // set zeroable harmonics 3-5-7-...-27 for this ms
             
                               msPulses = 4 ;                  // number of quadrant pulses for this magic sinewve
                               msPhase = (90/4)*pi/180 ;       //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;      // radian carrier zero offset for this magic sinewave
                               nxnOrder = 7 ;                  // order of nxn equation to be solved
                                           
                               // guessPow = 4 ;               // power of second guess correction
                               // guessFract = 0.035 ;         // fraction of second guess correction
							   
	     harmSequence = [  1, 13,  3, 11,  5, 9,  7    ] ;     // minimize Gauss-Jordan coefficient build
		 
                               setAmplitude = guessBbe ;       // divert amplitude setting guess function
                               imProve = imProveBbe ;          // divert improve function

                                      }      ;



function setupBbe3 (form) {    prepDisplay ("cfh11", "cfh13","2-10", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 3 ;                                  
                               msEdges = 6 ;                     // pulse edges for this magic sinewave   

                               Angles =  Array (msEdges) ;      // reset size of active Angles array
                               zHarms =4        ;               // set zeroable harmonics 3-5-7-...-27 for this ms
                               msPulses = 3 ;                   // number of quadrant pulses for this magic sinewve
                               msPhase = (90/3)*pi/180 ;        //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;       // radian carrier zero offset for this magic sinewave
                               nxnOrder = 5 ;                   // order of nxn equation to be solved
                                           
                               // guessPow = 4 ;                // power of second guess correction
                               // guessFract = 0.035 ;          // fraction of second guess correction
						   
	     harmSequence = [  1, 9, 3, 7,  5   ] ;     // minimize Gauss-Jordan coefficient build
		 
                               setAmplitude = guessBbe ;        // divert amplitude setting guess function
                               imProve = imProveBbe ;           // divert improve function

                                      }      ;




function setupBbe2 (form) {    prepDisplay ("cfh07", "cfh09","2-6", form) ;     // highlight display; fix dist value

                               eraseAngs (form) ;
                               ppQuadrant = 2 ;                                  
                               msEdges = 4 ;                     // pulse edges for this magic sinewave   
                               Angles =  Array (msEdges) ;       // reset size of active Angles array
                               zHarms =2           ;             // set zeroable harmonics 3-5-7-...-27 for this ms
             
                               msPulses = 2 ;                    // number of quadrant pulses for this magic sinewve
                               msPhase = (90/2)*pi/180 ;         //  radian carrier phase for this magic sinewave
                               msOffset = 0.000*pi/180  ;        // radian carrier zero offset for this magic sinewave
                               nxnOrder = 3 ;                    // order of nxn equation to be solved
                                           
                               // guessPow = 4 ;                 // power of second guess correction
                               // guessFract = 0.035 ;           // fraction of second guess correction

	     harmSequence = [  1, 3, 5   ] ;     // minimize Gauss-Jordan coefficient build
		 
                               setAmplitude = guessBbe ;         // divert amplitude setting guess function
                               imProve = imProveBbe ;            // divert improve function

                                      }      ;





// prepDisplay erases and rehighlights first uncrontrolled harmonic pair and resets controlled distortion

function prepDisplay ( unrejHarm1, unrejHarm2, repDist, form ) {  // can loop this later  seems resistant to   ---[""][""] =



       document.getElementById('cfh05').style.backgroundColor = "#CCFFFF";   // reset any older highlights
       document.getElementById('cfh07').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh09').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh11').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh13').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh15').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh17').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh19').style.backgroundColor = "#CCFFFF";
        
       document.getElementById('cfh21').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh23').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh25').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh27').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh29').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh31').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh33').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh35').style.backgroundColor = "#CCFFFF";
  
       document.getElementById('cfh37').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh39').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh41').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh43').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh45').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh47').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh49').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh51').style.backgroundColor = "#CCFFFF";

       document.getElementById('cfh53').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh55').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh57').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh59').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh61').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh63').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh65').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh67').style.backgroundColor = "#CCFFFF";
             
       document.getElementById('cfh69').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh71').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh73').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh75').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh77').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh79').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh81').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh83').style.backgroundColor = "#CCFFFF";

       document.getElementById('cfh85').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh87').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh89').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh91').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh93').style.backgroundColor = "#CCFFFF";
       document.getElementById('cfh95').style.backgroundColor = "#CCFFFF";


       eval ( "document.getElementById('" + unrejHarm1 + "').style.backgroundColor = '#66FFCC'" ) ;
       eval ( "document.getElementById('" + unrejHarm2 + "').style.backgroundColor = '#66FFCC'" ) ;


           //     eval (  unrejHarm1 + ".bgColor='#66FFCC'") ; // set new highlights
           //     eval (  unrejHarm2 + ".bgColor='#66FFCC'") ; 
  
               form.fzthd.value = repDist ;      // set zeroed distortion range
    
                                                                                                    } ;

// eraseAngs erases unused angles for lower count magic sinewave

function eraseAngs (form) { 

                             for (jj = 0;  jj<maxEdges/2  ;  jj++ ) {      
                                        
                                curedg = "fp" + (jj + 1)                                ;   // make fp0 through fp7
                                form [curedg + "s"]["value"] =  "     -  -  -  -  -     "   ;  //start edge
                                form [curedg + "e"]["value"] =  "     -  -  -  -  -     "  ;  // end edge   
                                                                              } ; 
                                    } ; 



// quantANY adjusts the start and end angles based on allowable discrete values of qincr. 
// This is only an approximation for estimating scale and range.

 function quantany (form) {  

                                      loadAngles (this.form) ;            // read present angle array from form

                                      for (ii=0 ; ii<msEdges; ii++) {  // edge position quantization revision loop 
                                            Angles[ii] = qincr * ( Math.round (Angles[ii] /qincr ))  
                                                                               } ;
                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form
                                 }     

// fixPow and fixAmp update power on amplitude and vice versa

function fixPow ( ) {form.fp00.value = (Math.round (1000000 * (Math.pow(form.fa00.value,2)))) / 1000000}

function fixAmp ( ) {form.fa00.value = (Math.round (1000000 * (Math.sqrt(form.fp00.value)))) / 1000000}


// formatting to stop floating point changes. Rebuilds right and left of decimal point, then combines

function fixFloat (curNum, decPlaces) { 
                 var str = "" + Math.round (eval (curNum) * Math.pow (10, decPlaces))  ; 
                if (curNum >= 0){signStr = ""} else { str = str.slice (1)      ; 
                signStr = "-"}
                while (str.length <= decPlaces ) {str = "0" + str} 
                var decpoint = str.length - decPlaces ; 
                return signStr + str.substring(0,decpoint) + "." + str.substring (decpoint,str.length) ; 
                                                      } ;

////////////////////////////////////////
// angle export functions
////////////////////////////////////////

// Export Data creates a text are pair with pulses as widths. 
// exportDataA gives absolute angle values. exportDataB gives individual pulse and delay widths.

function exportDataA  (form)   {   // by angle values   currently rounds to ten decimal places to eliminate .9999 effect

                     glotz1 = eval (      ( Math.round ( 100*10000* form.fa01.value)    )  /10000  )  ;  // 100 gets from .53 to 53
                     expas =  "\n /angs"  +      glotz1 +  " [  % angle-position pairs \n  "   

                        for (ii=0; ii<msPulses; ii++) {
                        
                                      roundangs =  Math.round (10000000000 * (Angles[ii*2]*180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p" + ( ii+1) + "s \n  "

                                      roundangs =  Math.round (10000000000 * (Angles[ii*2+1]*180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p" +(ii+1)  + "e \n  "
                                                                } ;

                    expas = expas + " ] store" ;    // end PostScript array
                   form.ExportA.value = expas  ;

                                           } ;



function exportDataD  (form)   {   // by angle values   currently rounds to ten decimal places to eliminate .9999 effect

                     glotz1 = eval (      ( Math.round ( 100*10000* form.fa01.value)    )  /10000  )  ;  // 100 gets from .53 to 53
                     expas =  "\n /angs"  +      glotz1 +  " [  % delay-width pairs \n  "   

                                      roundangs =  Math.round (10000000000 * (Angles[0]*180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p1 predelay \n  "


                        for (ii=1; ii<msPulses; ii++) {
                        
                       
                                      roundangs =  Math.round (10000000000 *( (Angles[ii*2-1] - Angles[ii*2-2]) *180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p" + ( ii) + " width \n  "

                                      roundangs =  Math.round (10000000000 *( (Angles[ii*2] - Angles[ii*2-1]) *180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p" + ( ii+1) + " predelay \n  "

                                                                } ;

                                      roundangs =  Math.round (10000000000 *( (Angles[ii*2-1] - Angles[ii*2-2]) *180/pi))/10000000000 ;
                                      expas = expas + roundangs +      " %  p" + ( ii) + " width \n  "  ; 

        roundangs =  Math.round (10000000000 *(    ((90*pi/180) - (Angles[ii*2-1])) *180/pi)           )/10000000000 ;


                                      expas = expas + roundangs +      " %  -- postdelay \n  " ;


                    expas = expas + " ] store" ;    // end PostScript array
                    form.ExportD.value = expas  ;

                                           } ;
										   
										   
										   
										   
										   
										   
										   
										   
										   


//////////////////////////////////////////////
// initial guess functions
/////////////////////////////////////////////

// guessBeff7 guesses the initial amplitudes for Best Efficiency magic sinewaves

function guessBeff ( ) {

         sinSum = 0                                                                                // start sinSum calculation
         for (ii= 1 ; ii<msPulses + 1; ii++ ) {
                 sinSum = sinSum + ( Math.sin ( msOffset + (ii*msPhase) )) *  ( Math.sin ( msOffset + (ii*msPhase) )) ;
                     // build running sinSum squared total    
                                                    } ; 

 
                          for (ii= 0 ; ii<msPulses+1; ii++) {                                 // begin guessing loop

                     nrgFract = form["fa00"]["value"] *pi/4 *   ( Math.sin ( msOffset + (ii*msPhase) )) * 
                     ( Math.sin ( msOffset + (ii*msPhase) )) /sinSum ;   

               Angles [(ii-1)*2]     = Math.acos (  Math.cos ( ( msOffset + (ii*msPhase) )) + nrgFract/2 ) ;   // pulse start angle
               Angles [(ii-1)*2+1] = Math.acos (  Math.cos ( ( msOffset + (ii*msPhase) ))  - nrgFract/2 ) ;  // pulse end angle

                                                                        } ;

                                      secondGuess (form)          // attempt to improve high guesses

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form


                      } ;


// second Guess attempts to improve high guesses by slightly lowering all but the highest angle
//  reduce all but last angle by   (normalized angle) * (guessFract) *( amplitude^guessPow)


function secondGuess (form) {

                                       for (ii=0; ii<Angles.length -2 ; ii++ )  {

                        Angles [ii]  -=  Angles [ii] * (2/pi) * guessFract  *  Math.pow (form["fa00"]["value"] , guessPow)                         

                                                                   } ;

                                    } ; 


// guessBbe  guesses the initial amplitudes for ridged Best Efficiency magic sinewaves. IT IS PRESENTLY HARDWIRED
// FOR Bbe7 SEVEN PULSE PER QUADRANT


function guessBbe ( ) {

                         sinSum = 0                                                                                // start sinSum calculation
                         for (ii= 1 ; ii<msPulses + 1; ii++ ) {
                         sinSum = sinSum + ( Math.sin ( msOffset + (ii*msPhase) )) *  ( Math.sin ( msOffset + (ii*msPhase) )) ;
                         // build running sinSum squared total       this includes 90 degrees
                                                    } ;  
                            sinSum -= 0.5 ;   // do not use half of the 90 degree contribution

 

                                          for (ii= 0 ; ii<msPulses+1; ii++) {                                 // begin guessing loop

                     nrgFract = form["fa00"]["value"] *pi/4 *   ( Math.sin ( msOffset + (ii*msPhase) )) * 
                     ( Math.sin ( msOffset + (ii*msPhase) )) /sinSum ;   

               Angles [(ii-1)*2]     = Math.acos (  Math.cos ( ( msOffset + (ii*msPhase) )) + nrgFract/2 ) ;   // pulse start angle
               Angles [(ii-1)*2+1] = Math.acos (  Math.cos ( ( msOffset + (ii*msPhase) ))  - nrgFract/2 ) ;  // pulse end angle

                                                                        } ;   
                   
                   Angles [(ii-1)*2-1] = 90*pi/180   ; // overwrite brdiged value to 90 degrees



 // alert (Angles) ;


/*
  alert (  Angles[0]*180/pi + "\n" +
            Angles[1]*180/pi + "\n\n" + 

            Angles[2]*180/pi + "\n" +
            Angles[3]*180/pi + "\n\n" +  

            Angles[4]*180/pi + "\n" +
            Angles[5]*180/pi + "\n\n" + 

            Angles[6]*180/pi + "\n" +
            Angles[7]*180/pi + "\n\n" +  

            Angles[8]*180/pi + "\n" +
            Angles[9]*180/pi + "\n\n" + 

            Angles[10]*180/pi + "\n" +
            Angles[11]*180/pi + "\n\n" +  

            Angles[12]*180/pi + "\n" +
            Angles[13]*180/pi + "\n\n" 

                      ) ;

*/
                                       secondGuess (form)          // attempt to improve high guesses

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                   } ;








// guessDf15 is presently "hard wired" and n dependent

// carrier angles are    3.75, 11.25, 18.75, 26.25,   
//                            33.75, 41.25, 48.75, 56.25, 
//                            63.75, 71.25, 78.75, 86.25,  

// independent edges are   p8s,   p8e,  p9s,  p9e, p10s, p10e, p11s,
//                                   p12s, p12e, p13s, p13e, p14e, p14e, p15s, p15e

//  dependent edges are    p1s,   p1e,   p2s,   p2e,   p3s,  p3e,   p4s , p4e, 
//                                    p5s,   p5e,   p6s,   p6e,   p7s,  p7e,    and p11e

// dependence relationships are ( from http://www.tinaja.com/glib/deltams1.pdf ) ...

// p11e = 120 - p12s ---> Angles[12] = 120d - Angles[22]

// p7e = p15e - 60 --->   Angles[13] =  Angles[29] - 60d
// p7s =  60 - p8s  -->    Angles[12] = 60d - Angles[14]

// p6e =  60 - p8e  -->    Angles[11] = 60d - Angles[15]
// p6s = p15s - 60 --->   Angles[10] =  Angles[28] - 60d

// p5e = p14e - 60 --->   Angles[9] =  Angles[27] - 60d
// p5s =  60 - p9s  -->    Angles[8] = 60d - Angles[16]

// p4e =  60 - p9e  -->    Angles[7] = 60d - Angles[17]
// p4s = p14s - 60 --->   Angles[6] =  Angles[26] - 60d

// p3e = p13e - 60 --->   Angles[5] =  Angles[25] - 60d
// p3s =  60 - p10s  -->    Angles[4] = 60d - Angles[18]

// p2e =  60 - p10e  -->    Angles[3] = 60d - Angles[19]
// p2s = p13s - 60 --->   Angles[2] =  Angles[24] - 60d

// p1e = p12e - 60 --->   Angles[1] =  Angles[23] - 60d
// p1s =  60 - p11s  -->    Angles[0] = 60d - Angles[20]



function guessDf15 ( ) {

         sinSum =    Math.sin ( (    3.75 * pi/180)* (   3.75 * pi/180) ) +   // find total sin squared energy
                           Math.sin (  ( 11.25 * pi/180)* ( 11.25 * pi/180) ) +
                           Math.sin (  ( 18.75 * pi/180)* ( 18.75 * pi/180) ) +
                           Math.sin (  ( 26.25 * pi/180)* ( 26.25 * pi/180) ) +

                           Math.sin (  ( 33.75 * pi/180)* ( 33.75 * pi/180) ) +  
                           Math.sin (  ( 41.25 * pi/180)* ( 41.25 * pi/180) ) +
                           Math.sin (  ( 48.75 * pi/180)* ( 48.75 * pi/180) ) +
                           Math.sin (  ( 56.25 * pi/180)* ( 56.25 * pi/180) ) +

                           Math.sin (  ( 63.75 * pi/180)* ( 63.75 * pi/180) ) +  
                           Math.sin (  ( 71.25 * pi/180)* ( 71.25 * pi/180) ) +
                           Math.sin (  ( 78.75 * pi/180)* ( 78.75 * pi/180) ) +
                           Math.sin (  ( 86.25 * pi/180)* ( 86.25 * pi/180) )        ;


                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (86.25 * pi/180)* (86.25 * pi/180) ) )/sinSum )  ; 
                 Angles[29] =  Math.acos (  Math.cos ( ( 86.25*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[28] =  Math.acos (  Math.cos ( ( 86.25*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (78.75 * pi/180)* (78.75 * pi/180) ) )/sinSum )  ; 
                 Angles[27] =  Math.acos (  Math.cos ( ( 78.75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[26] =  Math.acos (  Math.cos ( ( 78.75*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (71.25 * pi/180)* (71.25 * pi/180) ) )/sinSum )  ; 
                 Angles[25] =  Math.acos (  Math.cos ( ( 71.25*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[24] =  Math.acos (  Math.cos ( ( 71.25*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                   nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (63.75 * pi/180)* (53.75 * pi/180) ) )/sinSum )  ; 
                 Angles[23] =  Math.acos (  Math.cos ( ( 63.75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[22] =  Math.acos (  Math.cos ( ( 63.75*pi/180))  + nrgFract/2 ) ;  // pulse end  angle


                 nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (56.25 * pi/180)* (56.25 * pi/180) ) )/sinSum )  ;
                 Angles[21] =  (120*pi/180) - Angles [22] ;     // p11e is dependent on p12s  
                 Angles[20] =  Math.acos ( Math.cos ( Angles[21] )   + nrgFract      ) ;  // pulse start angle


                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (48.75 * pi/180)* (48.75 * pi/180) ) )/sinSum )  ; 
                 Angles[19] =  Math.acos (  Math.cos ( (48.75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[18] =  Math.acos (  Math.cos ( ( 48.75*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (41.35 * pi/180)* (41.25 * pi/180) ) )/sinSum )  ; 
                 Angles[17] =  Math.acos (  Math.cos ( ( 41.25*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[16] =  Math.acos (  Math.cos ( ( 41.25*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (33.75 * pi/180)* (33.75 * pi/180) ) )/sinSum )  ; 
                 Angles[15] =  Math.acos (  Math.cos ( (33.75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[14] =  Math.acos (  Math.cos ( ( 33.75*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                 Angles[13] =    Angles[29] - ( 60*pi/180) ;   // dependent p3e
                 Angles[12] =    60*(pi/180) - Angles[14]  ;    // dependent p3s

                Angles [11] =      60*(pi/180) - Angles[15] ;   // dependent p4e
                Angles [10] =      Angles[28] - (60*pi/180) ;  // dependent p4s

                 Angles[9] =    Angles[27] - ( 60*pi/180) ;   // dependent p3e
                 Angles[8] =    60*(pi/180) - Angles[16]  ;    // dependent p3s

                Angles [7] =      60*(pi/180) - Angles[17] ;   // dependent p4e
                Angles [6] =      Angles[26] - (60*pi/180) ;  // dependent p4s

                 Angles[5] =    Angles[25] - ( 60*pi/180) ;   // dependent p3e
                 Angles[4] =    60*(pi/180) - Angles[18]  ;    // dependent p3s

                Angles [3] =      60*(pi/180) - Angles[19] ;   // dependent p2e
                Angles [2] =      Angles[24] - (60*pi/180) ;  // dependent p2s

                 Angles[1] =    Angles[23] - ( 60*pi/180) ;   // dependent p1e
                 Angles[0] =    60*(pi/180) - Angles[20]  ;    // dependent p1s


                                                                                    // no second guessing yet 

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                    } ; // end guess Df15


function guessDf11 ( ) {

         sinSum =    Math.sin ( (  5 * pi/180)* (  5 * pi/180) ) +   // find total sin squared energy
                           Math.sin (  ( 15 * pi/180)* ( 15 * pi/180) ) +
                           Math.sin (  ( 25 * pi/180)* ( 25 * pi/180) ) +
                           Math.sin (  ( 35 * pi/180)* ( 35 * pi/180) ) +
                           Math.sin (  ( 45 * pi/180)* ( 45 * pi/180) ) +
                           Math.sin (  ( 55 * pi/180)* ( 55 * pi/180) ) +
                           Math.sin (  ( 65 * pi/180)* ( 65 * pi/180) ) +
                           Math.sin (  ( 75 * pi/180)* ( 75 * pi/180) ) +
                           Math.sin (  ( 85 * pi/180)* ( 85 * pi/180) )    ; 

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (85 * pi/180)* (85 * pi/180) ) )/sinSum )  ; 
                 Angles[21] =  Math.acos (  Math.cos ( ( 85*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[20] =  Math.acos (  Math.cos ( ( 85*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (75 * pi/180)* (75 * pi/180) ) )/sinSum )  ; 
                 Angles[19] =  Math.acos (  Math.cos ( ( 75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[18] =  Math.acos (  Math.cos ( ( 75*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                 nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (65 * pi/180)* (65 * pi/180) ) )/sinSum )  ; 
                 Angles[17] =  Math.acos (  Math.cos ( ( 65*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[16] =  Math.acos (  Math.cos ( ( 65*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                 nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (55 * pi/180)* (55 * pi/180) ) )/sinSum )  ;
                 Angles[15] =  (120*pi/180) - Angles [16] ;     // p8e is dependent on p9s  
                 Angles[14] =  Math.acos ( Math.cos ( Angles[15] )   + nrgFract      ) ;  // pulse start angle

                 nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (45 * pi/180)* (45 * pi/180) ) )/sinSum )  ; 
                 Angles[13] =  Math.acos (  Math.cos ( ( 45*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[12] =  Math.acos (  Math.cos ( ( 45*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                 nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (35 * pi/180)* (35 * pi/180) ) )/sinSum )  ; 
                 Angles[11] =  Math.acos (  Math.cos ( ( 35*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                 Angles[10] =  Math.acos (  Math.cos ( ( 35*pi/180))  + nrgFract/2 ) ;  // pulse end  angle

                 Angles[9] =        Angles[21] - ( 60*pi/180) ;  // dependent p5e
                 Angles[8] =       60*(pi/180) - Angles[10]  ;    // dependent p5s

                 Angles[7] =        60*(pi/180) - Angles[11]  ;  // dependent p4e
                 Angles[6] =        Angles[20] -  60*(pi/180)   ;    // dependent p4s

                 Angles[5] =        Angles[19] - ( 60*pi/180) ;  // dependent p3e 
                 Angles[4] =       60*(pi/180) - Angles[12]  ;    // dependent 3s

                 Angles[3] =      60*(pi/180) - Angles[13] ;   // dependent p2e
                 Angles[2] =      Angles[18] - (60*pi/180) ;  // dependent p2s

                 Angles[1] =   Angles[17] - ( 60*pi/180) ;  // dependent p1e
                 Angles[0] =   60*(pi/180) - Angles[14]  ;    // dependent p1s


                                                                                    // no second guessing yet 

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                    } ; // end guess Df11



// guessDf7is presently "hard wired" and n dependent

// carrier angles are 7.5, 22,5, 37.5, 52.5, 67.5, and 82.5
// independent edges are p7e, p7s, p6e, p6s, p5s, p4e, and p4s.
//   dependent edges are p6e, p3e, p3s, p2e, p2s, p1e, and p1s

// dependence relationships are ( from http://www.tinaja.com/glib/deltams1.pdf ) ...

//                p5e = 120 - p6s  --->   Angles{9] = 120r - Angles[10}
//                p3e = p7e - 60    --->  Angles[5] = Angles[13] - 60r
//                p3s = 60 - p4s   --->  Angles [4] = 60r - Angles[6]
//                p2e = 60 - p4e   ---> Angles [3] = 60r - Angles [7]
//                p2s = p7s - 60  --->  Angles{2] = Angles[12] -60r
//                p1e = p6e - 60  --->   Angles[1] = Angles[11] - 60r
//                p1s = 60 - p5s  --->  Angles[0] = 60r - Angles[8] ;           

function guessDf7 ( ) {      ;

         sinSum =    Math.sin ( (  7.5 * pi/180)* (  7.5 * pi/180) ) +   // find total sin squared energy
                           Math.sin ( (22.5 * pi/180)* (22.5 * pi/180) ) +
                           Math.sin ( (37.5 * pi/180)* (37.5 * pi/180) ) +
                           Math.sin ( (52.5 * pi/180)* (52.5 * pi/180) ) +
                           Math.sin ( (67.5 * pi/180)* (67.5 * pi/180) ) +
                           Math.sin ( (82.5 * pi/180)* (82.5 * pi/180) )    ;
 
                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (82.5 * pi/180)* (82.5 * pi/180) ) )/sinSum )  ; 
                  Angles[13] =  Math.acos (  Math.cos ( ( 82.5*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                  Angles[12] =  Math.acos (  Math.cos ( ( 82.5*pi/180)) + nrgFract/2 ) ;  // pulse start angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (67.5 * pi/180)* (67.5 * pi/180) ) )/sinSum ) ; 
                  Angles[11] =  Math.acos (  Math.cos ( ( 67.5*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                  Angles[10] =  Math.acos (  Math.cos ( ( 67.5*pi/180)) + nrgFract/2 ) ;  // pulse start angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (52.5 * pi/180)* (52.5 * pi/180) ) )/sinSum ) ; 
                  Angles[9] =  (120*pi/180) - Angles [10] ;     // p5e is dependent on p6s  
                  Angles[8]   =  Math.acos (  Math.cos ( Angles[9])  + nrgFract ) ;  // pulse start  angle  FULL nrgFract
   
                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (37.5 * pi/180)* (37.5 * pi/180) ) )/sinSum ) ; 
                  Angles[7] =  Math.acos (  Math.cos ( ( 37.5*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                  Angles[6] =  Math.acos (  Math.cos ( ( 37.5*pi/180)) + nrgFract/2 ) ;  // pulse start angle

                  Angles[5] = Angles[13] - (60*pi/180) ;     // dependent p3e
                  Angles[4] = 60*pi/180 - Angles[6] ;        // dependent p3s

                  Angles[3] = 60*(pi/180) - Angles[7]  ;      // dependent p2e
                  Angles[2] = Angles[12] - (60*pi/180) ;     // dependent p2s

                  Angles[1] = Angles[11] - (60*pi/180) ;     // dependent p1e
                  Angles[0] =   60*(pi/180) - Angles[8]  ;    // dependent p1s


                                   //  Secondguess7d ()       ;                                       //try second guessing

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                    } ; // end guess Def7


// Secondguess7d makes only a minor improvement so far -- not connected

fudge7 = -0.29*pi/180 ;

fudge7 = 0 ;

function Secondguess7d () {  

        Angles[0]  += Math.sin ( Angles[0] )*fudge7     ;         // this is fixte 0.53 amplitude adjustment only!     
        Angles[1]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[2]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[3]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[4]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[5]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[6]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[7]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[8]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[9]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[10]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[11]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[12]  += Math.sin ( Angles[0] )*fudge7     ; 
        Angles[13]  += Math.sin ( Angles[0] )*fudge7     ; 
 

                                      }  ;






// guessDf3is presently "hard wired" and n dependent

// carrier angles are 15, 45, and 75
// independent edges are p2s, p3s, p3e
//  dependent edges are p1s, p1e, and p2e

// dependence relationships are ( from http://www.tinaja.com/glib/deltams1.pdf ) ...

// p2e = 120 - p3s ---> Angles[3] = 120d - Angles[4]
// p1e = p3e - 60 --->  Angles[1] = Angles[5] - 60d
// p1s = 60 - p2s  -->  Angles[0] = 60d - Angles[2]
    
function guessDf3 ( ) {

         sinSum =    Math.sin ( (  15 * pi/180)* (  15 * pi/180) ) +   // find total sin squared energy
                           Math.sin (  ( 45 * pi/180)* ( 45 * pi/180) ) +
                           Math.sin ( ( 75 * pi/180)* ( 75 * pi/180) )
   ;
                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (75 * pi/180)* (75 * pi/180) ) )/sinSum )  ; 
                  Angles[5] =  Math.acos (  Math.cos ( ( 75*pi/180))  - nrgFract/2 ) ;  // pulse end  angle
                  Angles[4] =  Math.acos (  Math.cos ( ( 75*pi/180)) + nrgFract/2 ) ;  // pulse start angle

                  nrgFract = form["fa00"]["value"] *pi/4 * (    ( Math.sin ( (45 * pi/180)* (45 * pi/180) ) )/sinSum ) ; 
                  Angles[3] =  (120*pi/180) - Angles [4] ;     // p2e is dependent on p6s  
                  Angles[2] =  Math.acos ( Math.cos ( Angles[3] )   + nrgFract      ) ;  // pulse start angle

                  Angles[1] = Angles[5] - (60*pi/180) ;     // dependent p1e
                  Angles[0] =   60*(pi/180) - Angles[2]  ;    // dependent p1s

                                                                                    // no second guessing yet 

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                    } ; // end guess Def3












//////////////////////////////////////////////
// improve  functions
/////////////////////////////////////////////

// imProveBeff calculates an improved guess for  Best Efficiency magic sinewaves. 
// Array generation is kept dynamic and local to allow n independence on sinewave changes.


function imProveBeff () {  

                                eqns = Array (nxnOrder)  ;                     // attempt to create redefined? two dimensional array of n and n+1
                                 for  ( ii=0; ii<Angles.length; ii++)
                                 {eqns[ii] = Array ( Angles.length) } ;

                                 rTerm = form["fa00"]["value"]  *pi/4  ;              //get amplitude 
    
                                 for (ii= 0; ii<nxnOrder; ii++) {                      // loop for each equation line


                             
							 //    iixx = 0 ;	 
							 //    if (ii>0){iixx = Angles.length - ii} ;    // highest harm first for Gauss
                             //      nn = 2*iixx + 1  ;                                       // generates   1,3,5....
									  
								    nn = 1 ;                                 // fundamental first
								
								   if (ii>0) {nn =  harmSequence [ii] } ;    // minimize coeff buildup	
				

                                            for (jj= 0;jj<Angles.length ;jj++) {                                                                  // loop for each array term
											
										jjx = Angles.length - jj -1 ;	
											
											
                                               eqns[ii][jj]  = -Math.pow(-1,  jjx   )   * Math.sin(nn*Angles[jjx])    ;
                                                                               }        ;  // term loop


                                             rr = rTerm    ;                                            // right side summing 


        
		   
		   
		   // moved nn from left to right to normalize for possible better high nxn

                                              for (mm=0 ; mm<Angles.length; mm++) {
                                                      rr += -Math.pow(-1,  mm   )* Math.cos(nn *   Angles[mm]              ) ;

                                                                                                    } ;   // loop build right side

                                               eqns[ii][jj] = rr  /nn                           ;   // and add to array

                                              rTerm = 0 ;                         ;  // reset rTerm to zero for harmonics
                                                                                  }     ;  // line loop


                  



                                    solveGaussJordan()  ;
									
									
									
			// need to reverse sequence here...						
									


                             for (ii=0; ii<Angles.length; ii++) {                 // update Angles by adding solved errors
							 
							 
							            iix = Angles.length - ii -1 ;
							 
							 
                                                 Angles[ii] += eqns[iix][Angles.length] ;  
                                                                          } ; 

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                         } ;      // end entire imProveBeff
   


// imProveDef15 calculates an improved guess for  Delta Friendly 15 magic sinewaves. 
// Some of it is presently hard wired and case specific.

function imProveDf15 ( form) { 
                                     eqns = Array (nxnOrder)  ;      // redefined two dimensional array of n and n+1
                                     Angles15todAngles15(form)  ;      // find delta angles from main angles
                                     makeD15eqns(form)         ;      // create equations specific to delta15
                                     solveGaussJordan()        ;     // solve Gauss Jordan for x
                                     for (ii=0; ii<dAngles.length; ii++) {       // updatedAangles by adding errors
                                           dAngles[ii] -= eqns[ii][dAngles.length]      ;  
                                          } ; 

                                     dAngles15toAngles15 (form) ;     // move delta angles to main angles
                                     storeAngles (this.form) ;       // store revised angle array to  form
                                     findHarms (this.form) ;          // calculate revised amplitude and harmonics
                                     storeHarms (this.form) ;        // store amplitude and harmonics to form
                                     findDist (this.form) ;              // calculate and report revised zeroed distortion to form
                                   } ;

// imProveDef11 calculates an improved guess for  Delta Friendly 11 magic sinewaves. 
// Some of it is presently hard wired and case specific.

function imProveDf11 ( ) { 
                                     eqns = Array (nxnOrder)  ;      // redefined two dimensional array of n and n+1
                                     Angles11todAngles11(form)  ;  // find delta angles from main angles
                                     makeD11eqns(form)         ;      // create equations specific to delta11


//alert (eqns) ;
                                     solveGaussJordan()        ;     // solve Gauss Jordan for x

//alert (eqns) ;


                                     for (ii=0; ii<dAngles.length; ii++) {       // updatedAangles by adding errors
                                          dAngles[ii] -= eqns[ii][dAngles.length]      ;  
                                          } ; 

                                     dAngles11toAngles11 (form) ;     // move delta angles to main angles
                                     storeAngles (this.form) ;       // store revised angle array to  form
                                     findHarms (this.form) ;          // calculate revised amplitude and harmonics
                                     storeHarms (this.form) ;        // store amplitude and harmonics to form
                                     findDist (this.form) ;              // calculate and report revised zeroed distortion to form
                                   } ;


// imProveDef7 calculates an improved guess for  Delta Friendly 7 magic sinewaves. 
// Some of it is presently hard wired and case specific.

function imProveDf7 ( ) { 
                                     eqns = Array (nxnOrder)  ;      // redefined two dimensional array of n and n+1
                                     Angles7todAngles7(form)  ;      // find delta angles from main angles
                                     makeD7eqns(form)         ;      // create equations specific to delta7
                                     solveGaussJordan()        ;     // solve Gauss Jordan for x

                                      for (ii=0; ii<dAngles.length; ii++) {       // updatedAangles by adding errors
                                           dAngles[ii] -= eqns[ii][dAngles.length]      ;  
                                          } ; 

                                     dAngles7toAngles7 (form) ;     // move delta angles to main angles
                                     storeAngles (this.form) ;       // store revised angle array to  form
                                     findHarms (this.form) ;          // calculate revised amplitude and harmonics
                                     storeHarms (this.form) ;        // store amplitude and harmonics to form
                                     findDist (this.form) ;              // calculate and report revised zeroed distortion to form
                                   } ;

// imProveDef3 calculates an improved guess for  Delta Friendly37 magic sinewaves. 
// Some of it is presently hard wired and case specific.

function imProveDf3 ( ) { 
                                     eqns = Array (nxnOrder)  ;      // redefined two dimensional array of n and n+1
                                     Angles3todAngles3(form)  ;      // find delta angles from main angles
                                     makeD3eqns(form)         ;      // create equations specific to delta7
                                     solveGaussJordan()        ;     // solve Gauss Jordan for x

                                      for (ii=0; ii<dAngles.length; ii++) {       // updatedAangles by adding errors
                                           dAngles[ii] -= eqns[ii][dAngles.length]      ;  
                                          } ; 

                                     dAngles3toAngles3 (form) ;     // move delta angles to main angles
                                     storeAngles (this.form) ;       // store revised angle array to  form
                                     findHarms (this.form) ;          // calculate revised amplitude and harmonics
                                     storeHarms (this.form) ;        // store amplitude and harmonics to form
                                     findDist (this.form) ;              // calculate and report revised zeroed distortion to form
                                   } ;


// imProveBbe calculates an improved guess for Bridged Best Efficiency magic sinewaves. 



function imProveBbe ( ) { 
                            eqns = Array (nxnOrder)  ;      // create redefined 2D array of n and n+1
                                                            // alert (Angles) ;

                             for  ( ii=0; ii<Angles.length-1; ii++)
                             {eqns[ii] = Array ( Angles.length-1) } ;   // changed to -1  why?

                             rTerm = form["fa00"]["value"]  *pi/4  ;    //get amplitude 
    
                               for (ii= 0; ii<nxnOrder; ii++) {        // loop for each equation line

                          //      nn = 2*ii + 1  ;                       // generates   1,3,5....
						           nn = 1 ;
								   
								   
								   if (ii>0) {nn =  harmSequence [ii] } ;   // attempt to minimize coeff buildup       
						  
						  

                                   for (jj= 0;jj<Angles.length-1 ;jj++) {     // loop for each array term
								   
								            jjx = Angles.length - jj -2 ;	// reverse sequence
								       
								   
                                   eqns[ii][jj]  = -Math.pow(-1,  jjx   ) *nn  * Math.sin(nn*Angles[jjx])    ;
                                                                               }        ;  // term loop

                                             rr = rTerm    ;         // right side summing 

                                              for (mm=0 ; mm<Angles.length-1; mm++) {
                                                      rr += -Math.pow(-1,  mm   )* Math.cos(nn *   Angles[mm]              ) ;
                                                                              } ;   // loop build right side

                                               eqns[ii][jj] = rr                ;   // and add to array

                                              rTerm = 0 ;                       ;  // reset rTerm to zero for harmonics
                                                                                 }     ;  // line loop
// alert (eqns[0]) ;

                                    solveGaussJordan()  ;
// alert (eqns) ; 

                             for (ii=0; ii<Angles.length-1; ii++) {                 // update Angles by adding solved errors
							 
							           iix = Angles.length - ii -2 ;
                                       Angles[ii] += eqns[iix][Angles.length - 1] ;  
												 
									//	 Angles[ii] += eqns[ii][Angles.length-1] ;   // still needs fixed		 
												 
												 			  
                                                                          } ; 
// alert (Angles) ;

                                      storeAngles (this.form) ;           // store revised angle array to  form
                                      findHarms (this.form) ;             // calculate revised amplitude and harmonics
                                      storeHarms (this.form) ;           // store amplitude and harmonics to form
                                      findDist (this.form) ;                 // calculate and report revised zeroed distortion to form

                                         } ;      // end entire imProveBeff
   






///////////////////////////////////////////////////////////
//// service routines for delta improvement
///////////////////////////////////////////////////////////

/*   // temp hold
// format is [ f(p6s),     f(p6e),   f(p7s),    f(p7e),  f(p10s), f(p10e),  f(p11s),        f(p12s),
//                 f(p12e), f(p13s), f(p13e),  f(p14s),  f(p14e), f(p15s),  f(p15e),  
*/



// Angles15todAngles15 sets up the special angles for a delta11...

// format is [   f(p8s),    f(p8e),    f(p9s),     f(p9e),  f(p10s),  f(p10e),  fp(11s)               fp(12s) 
//                 f(p12e),  f(p13s),  f(p13e),   f(p14s),  f(p14e),  f(p15s),  f(p15e),                                            ]

function Angles15todAngles15 (form)  { 

                 dAngles = [                                              // see xplorimProved7 for derivations
                                    Angles[14] - (30*pi/180) ,
                                    Angles[15] - (30*pi/180) ,
                                    Angles[16] - (30*pi/180) ,
                                    Angles[17] - (30*pi/180) ,
                                    Angles[18] - (30*pi/180) ,
                                    Angles[19] - (30*pi/180) ,
                                    Angles[20] - (30*pi/180) ,

                                    Angles[22] + (30*pi/180) ,      // special because of mixed edges

                                    Angles[23] - (30*pi/180) ,
                                    Angles[24] - (30*pi/180) ,
                                    Angles[25] - (30*pi/180) ,
                                    Angles[26] - (30*pi/180) ,
                                    Angles[27] - (30*pi/180) ,
                                    Angles[28] - (30*pi/180) ,
                                    Angles[29] - (30*pi/180)  
                               ] ; 
                                       } ; 


// Angles11todAngles11 sets up the special angles for a delta11...

// format is [ f(p6s),     f(p6e),   f(p7s),    f(p7e),    f(p8s),          fp(9s) 
//                 f(p9e),  f(p10s),  f(p10e),   f(p11s),  f(p11e),                                             ]

function Angles11todAngles11 (form)  { 

                 dAngles = [                                              // see xplorimProved7 for derivations
                                    Angles[10] - (30*pi/180) ,
                                    Angles[11] - (30*pi/180) ,
                                    Angles[12] - (30*pi/180) ,
                                    Angles[13] - (30*pi/180) ,
                                    Angles[14] - (30*pi/180) ,

                                    Angles[16] + (30*pi/180) ,      // special because of mixed edges

                                    Angles[17] - (30*pi/180) ,
                                    Angles[18] - (30*pi/180) ,
                                    Angles[19] - (30*pi/180) ,
                                    Angles[20] - (30*pi/180) ,
                                    Angles[21] - (30*pi/180)  
                               ] ; 
                                       } ; 


// Angles7todAngles7 sets up the special angles for a delta 7...
// format is [ f(p4s), f(p4e), f(p5s), f(p6s), f(p6e), f(p7s), f(p7e) ]

function Angles7todAngles7 (form)  { 

                 dAngles = [                                              // see xplorimProved7 for derivations
                                    Angles[6] - (30*pi/180) ,
                                    Angles[7] - (30*pi/180) ,
                                    Angles[8] - (30*pi/180) ,

                                    Angles[10] + (30*pi/180) ,      // special because of mixed edges

                                    Angles[11] - (30*pi/180) ,
                                    Angles[12] - (30*pi/180) ,
                                    Angles[13] - (30*pi/180) 

                               ] ; 
                                       } ; 

// Angles3todAngles sets up the special angles for a delta 7...
// format is [ f(p2s), f(p3s), f(p3e), ]

function Angles3todAngles3 (form)  { 

                 dAngles = [                                              // see xplorimProved7 for derivations
                                    Angles[2] - (30*pi/180) ,
                                    Angles[4] + (30*pi/180) ,        // special because of mixed edges
                                    Angles[5] - (30*pi/180) 
                                 ] ; 

                  // alert (dAngles) ;
                                       } ; 


 // dAngles15toAngles15 converts special delta7 angles back into main angles...
       
function dAngles15toAngles15 (form)  { 

                          Angles[14] = dAngles[0] + (30*pi/180)  ; // independent angles
                          Angles[15] = dAngles[1] + (30*pi/180)  ;
                          Angles[16] = dAngles[2] + (30*pi/180)  ;
                          Angles[17] = dAngles[3] + (30*pi/180)  ;
                          Angles[18] = dAngles[4] + (30*pi/180)  ;
                          Angles[19] = dAngles[5] + (30*pi/180)  ;
                          Angles[20] = dAngles[6] + (30*pi/180)  ;

                          Angles[22] = dAngles[7] - (30*pi/180)  ; // special because mixed edges
           
                          Angles[23] = dAngles[8] + (30*pi/180)  ;
                          Angles[24] = dAngles[9] + (30*pi/180)  ;
                          Angles[25] = dAngles[10] + (30*pi/180)  ;
                          Angles[26] = dAngles[11] + (30*pi/180)  ;
                          Angles[27] = dAngles[12] + (30*pi/180)  ;
                          Angles[28] = dAngles[13] + (30*pi/180)  ;
                          Angles[29] = dAngles[14] + (30*pi/180)  ;

                          Angles[21] = (120*pi/180) - Angles [22] ;   // p11e is dependent on p12s 
 
                          Angles[13]  =  Angles[29] - ( 60*pi/180) ;    // dependent p7e
                          Angles[12]  =  60*(pi/180) - Angles[14]  ;    // dependent p7s
                          Angles[11]  =  60*(pi/180) - Angles[15]  ;    // dependent p6e
                          Angles[10]  =  Angles[28] -  (60*pi/180) ;    // dependent p6s
                          Angles[9]  =  Angles[27] - ( 60*pi/180) ;    // dependent p5e
                          Angles[8]  =  60*(pi/180) - Angles[16]  ;    // dependent p5s
                          Angles[7]  =  60*(pi/180) - Angles[17]  ;    // dependent p4e
                          Angles[6]  =  Angles[26] -  (60*pi/180) ;    // dependent p4s
                          Angles[5]  =  Angles[25] - ( 60*pi/180) ;    // dependent p3e 
                          Angles[4]  =  60*(pi/180) - Angles[18]  ;    // dependent 3s
                          Angles[3]  =  60*(pi/180) - Angles[19] ;     // dependent p2e
                          Angles[2]  = Angles[24] - (60*pi/180)  ;     // dependent p2s
                          Angles[1]  = Angles[23] - ( 60*pi/180) ;     // dependent p1
                          Angles[0]  = 60*(pi/180) - Angles[20]  ;     // dependent p1s
                                        } ;


 // dAngles11toAngles11 converts special delta11 angles back into main angles...
       
function dAngles11toAngles11 (form)  { 

                          Angles[10] = dAngles[0] + (30*pi/180)  ; // independent angles
                          Angles[11] = dAngles[1] + (30*pi/180)  ;
                          Angles[12] = dAngles[2] + (30*pi/180)  ;
                          Angles[13] = dAngles[3] + (30*pi/180)  ;
                          Angles[14] = dAngles[4] + (30*pi/180)  ;

                          Angles[16] = dAngles[5] - (30*pi/180)   ;   // special because of mixed edges

                          Angles[17] = dAngles[6] + (30*pi/180)  ;
                          Angles[18] = dAngles[7] + (30*pi/180)  ;
                          Angles[19] = dAngles[8] + (30*pi/180)  ;
                          Angles[20] = dAngles[9] + (30*pi/180)  ;
                          Angles[21] = dAngles[10] + (30*pi/180)  ;

                          Angles[15] = (120*pi/180) - Angles [16] ;   // p8e is dependent on p9s 
 
                          Angles[9]  =  Angles[21] - ( 60*pi/180) ;    // dependent p5e
                          Angles[8]  =  60*(pi/180) - Angles[10]  ;    // dependent p5s
                          Angles[7]  =  60*(pi/180) - Angles[11]  ;    // dependent p4e
                          Angles[6]  =  Angles[20] -  (60*pi/180) ;    // dependent p4s
                          Angles[5]  =  Angles[19] - ( 60*pi/180) ;    // dependent p3e 
                          Angles[4]  =  60*(pi/180) - Angles[12]  ;    // dependent 3s
                          Angles[3]  =  60*(pi/180) - Angles[13] ;     // dependent p2e
                          Angles[2]  = Angles[18] - (60*pi/180)  ;    // dependent p2s
                          Angles[1]  = Angles[17] - ( 60*pi/180) ;    // dependent p1e
                          Angles[0]  = 60*(pi/180) - Angles[14]  ;    // dependent p1s

                                        } ;

 // dAngles7toAngles7 converts special delta7 angles back into main angles...
       
function dAngles7toAngles7 (form)  { 

                                   Angles[6] = dAngles[0] + (30*pi/180) ;   // independent angles
                                   Angles[7] = dAngles[1] + (30*pi/180) ;
                                   Angles[8] = dAngles[2] + (30*pi/180) ;
                                   Angles[10] = dAngles[3] - (30*pi/180) ;  // special because of mixed edges
                                   Angles[11] = dAngles[4] + (30*pi/180) ;
                                   Angles[12] = dAngles[5] + (30*pi/180) ;
                                   Angles[13] = dAngles[6] + (30*pi/180) ;

                                   Angles[0] = (60*pi/180) - Angles[8]   ;     // dependent angles
                                   Angles[1] = Angles[11] - (60*pi/180)  ; 
                                   Angles[2] = Angles[12] - (60*pi/180)  ; 
                                   Angles[3] = (60*pi/180) - Angles[7]   ; 
                                   Angles[4] = (60*pi/180) - Angles[6]   ; 
                                   Angles[5] = Angles[13] - (60*pi/180)  ;
                                   Angles[9] = (120*pi/180) - Angles[10]   ;     // special because of mixed edges 

                                       } ; 



 // dAngles3toAngles3 converts special delta3 angles back into main angles...
       
function dAngles3toAngles3 (form)  { 

                                   Angles[2] = dAngles[0] + (30*pi/180) ;   // independent angles
                                   Angles[4] = dAngles[1] - (30*pi/180) ;  // special because of mixed edge
                                   Angles[5] = dAngles[2] + (30*pi/180) ;

                                  Angles[1] = Angles[5] - (60*pi/180) ;        // dependent angles
                                  Angles[3] = (120*pi/180) - Angles[4] ;     // special because of mixed edges
                                  Angles[0] = (60*pi/180) -Angles[2]    ;       

                                              } ; 


 // makeD15eqns builds up the 15x15 eqns array to be solved for an improved result...
// Some of the equation terms are negatives; this is permitted by Gaussian reduction and simplifies generation.

harmList15 = [ 1,5,7,11,13,17,19,23,25,29,31,35,37,41,43] ;   // list of non triad harmonics  can be shared by lower

  function makeD15eqns (form) {
        
                 rdTerm =  this.form["fa00"]["value"] *pi/4 ;    // get target amplitude

          for (ii=0; ii<ppQuadrant; ii ++) {

                kk = harmList15[ii]              ;    // find harmonic ratio
                        
                document["eq" + ii] =

                    [                                                                                // build equation sequence  (+ - + + - + - )

                            0 + Math.sin(kk*dAngles[0]) ,
                            0 - Math.sin(kk*dAngles[1]) ,
                            0 + Math.sin(kk*dAngles[2]) ,
                            0 - Math.sin(kk*dAngles[3]) ,
                            0 + Math.sin(kk*dAngles[4]) ,
                            0 - Math.sin(kk*dAngles[5]) ,
                            0 + Math.sin(kk*dAngles[6]) ,

                            0  + Math.sin(kk*dAngles[7]) ,

                            0 - Math.sin(kk*dAngles[8]) ,
                            0 + Math.sin(kk*dAngles[9]) ,
                            0 - Math.sin(kk*dAngles[10]) ,
                            0 + Math.sin(kk*dAngles[11]) ,
                            0 - Math.sin(kk*dAngles[12]) ,
                            0 + Math.sin(kk*dAngles[13]) ,
                            0 - Math.sin(kk*dAngles[14]) ,

                                  (     rdTerm / (2*Math.sin(60*pi/180))        -            // build error term  sequence  (- + - - + - + )
                            0 - Math.cos(kk*dAngles[0])  +
                            0 + Math.cos(kk*dAngles[1])  +
                            0 - Math.cos(kk*dAngles[2])  +
                            0 + Math.cos(kk*dAngles[3])  +
                            0 - Math.cos(kk*dAngles[4])  +
                            0 + Math.cos(kk*dAngles[5])  +
                            0 - Math.cos(kk*dAngles[6])  +

                            0 - Math.cos(kk*dAngles[7])  +

                            0 + Math.cos(kk*dAngles[8])  +
                            0 - Math.cos(kk*dAngles[9])  +
                            0 + Math.cos(kk*dAngles[10])  +
                            0 - Math.cos(kk*dAngles[11])  +
                            0 + Math.cos(kk*dAngles[12])  +
                            0 - Math.cos(kk*dAngles[13])  +
                            0 + Math.cos(kk*dAngles[14])   
                                     ) /kk      
 
                           ] ;

                       rdTerm = 0       ;   // zero out harmonics
  

                             }  ;   // end for loop



                          eqns =      [        // assemble 2D array of specific length     
           document.eq0 ,
           document.eq1, 
           document.eq2, 
           document.eq3, 
           document.eq4, 
           document.eq5, 
           document.eq6,
           document.eq7, 
           document.eq8,
           document.eq9, 
           document.eq10, 
           document.eq11,
           document.eq12, 
           document.eq13, 
           document.eq14   ] ;  // NO trailing comma!

                                          } ;   // end makeD15eqns proc



 // makeD11eqns builds up the 11x11 eqns array to be solved for an improved result...

  function makeD11eqns (form) {
        

                 rdTerm =  this.form["fa00"]["value"] *pi/4 ;    // get target amplitude

          for (ii=0; ii<ppQuadrant; ii ++) {

                kk = harmList15[ii]              ;    // find harmonic ratio
                        
                document["eq" + ii] =

                    [                                                                                // build equation sequence  (+ - + + - + - )

                            0 + Math.sin(kk*dAngles[0]) ,
                            0 - Math.sin(kk*dAngles[1]) ,
                            0 + Math.sin(kk*dAngles[2]) ,
                            0 - Math.sin(kk*dAngles[3]) ,
                            0 + Math.sin(kk*dAngles[4]) ,


                            0  + Math.sin(kk*dAngles[5]) ,

                            0 - Math.sin(kk*dAngles[6]) ,
                            0 + Math.sin(kk*dAngles[7]) ,
                            0 - Math.sin(kk*dAngles[8]) ,
                            0 + Math.sin(kk*dAngles[9]) ,
                            0 - Math.sin(kk*dAngles[10]) ,


                                  (     rdTerm / (2*Math.sin(60*pi/180))        -            // build error term  sequence  (- + - - + - + )
                            0 - Math.cos(kk*dAngles[0])  +
                            0 + Math.cos(kk*dAngles[1])  +
                            0 - Math.cos(kk*dAngles[2])  +
                            0 + Math.cos(kk*dAngles[3])  +
                            0 - Math.cos(kk*dAngles[4])  +


                            0 - Math.cos(kk*dAngles[5])  +

                            0 + Math.cos(kk*dAngles[6])  +
                            0 - Math.cos(kk*dAngles[7])  +
                            0 + Math.cos(kk*dAngles[8])  +
                            0 - Math.cos(kk*dAngles[9])  +
                            0 + Math.cos(kk*dAngles[10])  
      
                                     ) /kk      
 
                           ] ;

                       rdTerm = 0       ;   // zero out harmonics
  

                             }  ;   // end for loop



                          eqns =      [        // assemble 2D array of specific length     
           document.eq0 ,
           document.eq1, 
           document.eq2, 
           document.eq3, 
           document.eq4, 
           document.eq5, 
           document.eq6,
           document.eq7, 
           document.eq8,
           document.eq9, 
           document.eq10     ] ;   // NO trailing comma!


                                          } ;   // end makeD11eqns proc



 // makeD7eqns builds up the 7x7 eqns array to be solved for an improved result...

  function makeD7eqns (form) {
        

                 rdTerm =  this.form["fa00"]["value"] *pi/4 ;    // get target amplitude

          for (ii=0; ii<ppQuadrant; ii ++) {

                kk = harmList15[ii]              ;    // find harmonic ratio
                        
                document["eq" + ii] =

                    [                                                                                // build equation sequence  (+ - + + - + - )

                            0 + Math.sin(kk*dAngles[0]) ,
                            0 - Math.sin(kk*dAngles[1]) ,
                            0 + Math.sin(kk*dAngles[2]) ,

                            0  + Math.sin(kk*dAngles[3]) ,

                            0 - Math.sin(kk*dAngles[4]) ,
                            0 + Math.sin(kk*dAngles[5]) ,
                            0 - Math.sin(kk*dAngles[6]) ,


                                  (     rdTerm / (2*Math.sin(60*pi/180))        -            // build error term  sequence  (- + - - + - + )
                            0 - Math.cos(kk*dAngles[0])  +
                            0 + Math.cos(kk*dAngles[1])  +
                            0 - Math.cos(kk*dAngles[2])  +

                            0 - Math.cos(kk*dAngles[3])  +

                            0 + Math.cos(kk*dAngles[4])  +
                            0 - Math.cos(kk*dAngles[5])  +
                            0 + Math.cos(kk*dAngles[6])  
      
                                     ) /kk      
 
                           ] ;

                       rdTerm = 0       ;   // zero out harmonics
  

                             }  ;   // end for loop



                          eqns =      [        // assemble 2D array of specific length     
           document.eq0 ,
           document.eq1, 
           document.eq2, 
           document.eq3, 
           document.eq4, 
           document.eq5, 
           document.eq6           ] ;   // NO trailing comma!

                                          } ;   // end makeD7eqns proc





 // makeD3eqns builds up the 3x3 eqns array to be solved for an improved result...

  function makeD3eqns (form) {
        

                 rdTerm =  this.form["fa00"]["value"] *pi/4 ;    // get target amplitude

          for (ii=0; ii<ppQuadrant; ii ++) {

                kk = harmList15[ii]              ;    // find harmonic ratio
                        
                document["eq" + ii] =

                    [                                                                                // build equation sequence  (+ - + + - + - )

                            0 + Math.sin(kk*dAngles[0]) ,
                            0  + Math.sin(kk*dAngles[1]) ,
                            0 - Math.sin(kk*dAngles[2]) ,

                                  (     rdTerm / (2*Math.sin(60*pi/180))        -            // build error term  sequence  (- + - - + - + )
                            0 - Math.cos(kk*dAngles[0])  +
                            0 - Math.cos(kk*dAngles[1])  +
                            0 + Math.cos(kk*dAngles[2]) 
                                     ) /kk      
 
                           ] ;

                       rdTerm = 0       ;   // zero out harmonics
  

                             }  ;   // end for loop



                          eqns =      [        // assemble 2D array of specific length     
           document.eq0 ,
           document.eq1, 
           document.eq2          ] ;   // NO trailing comma!

                                          } ;   // end makeD3eqns proc



/////////////////////////////////////////////
// instacalc functions
/////////////////////////////////////////////


// instaCals presently just does a guess    followed by six improvements  
// It can later be sped up by eliminating the intermediate rewites.

function instaCalc (form)  { setAmplitude  ()   ; 
                                         imProve ( )          ;
                                         imProve ( )          ;
                                         imProve ( )          ;
                                         imProve ( )          ;
                                         imProve ( )          ;
                                         imProve ( )          ;
                                       } ; 

///////////////////////////////////////////////
//Gauss-Jordan nxn eqn solvers
///////////////////////////////////////////////

// main Gauss-Jordan proc modifies eqns [ eq0, eq1, eq2 ... ]  to produce eqns with unity diagonals and zero elsewhere
// to allow solution by inspection.

      function solveGaussJordan() {        ;
	  
	      
		 
		    form.ExportX.value = eqns  ;
		 
		 
	  
	  
         gjNsize = eqns.length ;
         for (var iii = 0; iii <=(gjNsize-1); iii++){
         normaLize ( eqns[iii],iii ) ;
             for (var jjj = iii; jjj <=(gjNsize-2); jjj++) {
             subScaled (eqns[iii],eqns[(jjj+1)],iii)} } ;
         normaLize ( eqns [(gjNsize-1)],(gjNsize-1) ) ;
		 
		 
		 
		 form.ExportY.value = eqns  ;
		 
		 
		 
         jorDanify ()
		 
	form.ExportZ.value = eqns  ;
		 
		 
		                } ;

// Gauss-Jordan support subs...

        function normaLize (bb,cc) { xx = bb[cc] ;
            for (var ii = 0; ii <= gjNsize; ii++)
                  { bb[ii] = (bb[ii]/xx) } } ;

        function subScaled (aa,bb,cc) { xx = bb[cc] ;
            for (var ii = cc; ii <=gjNsize; ii++)
                  { bb[ii] -= aa[ii] *xx } } ;

       function jorDanify() {
            for (var i3 = (gjNsize-1); i3 >=1; i3--)   {
                 zz = eqns[i3][gjNsize] ;
                for (var i4 = (i3-1); i4 >=0 ; i4--){
                    eqns[i4][gjNsize] -= eqns [i4][i3]*zz
                    eqns[i4][i3] = 0 }
                                                                   } ;
                                      }  ;

// optional 4x4 test routine should return 4,3,2,1...

function testGJ () {

             eq0 = [ 4, 3, -2, 1 , 22 ]
             eq1 = [ 2, 1, -2, 2,  9 ]
             eq2 = [ 1,-1, 1, 5 ,  8 ]
             eq3 = [ 3, 1, 3, 1 , 22 ]

             eqns = [ eq0, eq1, eq2, eq3] ;
             solveGaussJordan () ;

            alert (eqns) ;
                           } ;

//////////////////////////////////////////////////
//// exploration and derivation area
/////////////////////////////////////////////////


// Some notes on deriving the delta equations.  Seven independent edges are p4s, p4e, p5s, p6s, p6e, p7s, p7e.
// start edges are positive, end edges are negative.

// Because of Gaussian reduction, negative equations are equal to their positive equivalents. This greatly simplifies
// certain expressions.

//  p3s = 60 - p4s   --->  Angles [4] = 60r - Angles[6]   fundamental  terms are  + [ cos (60 - p4s) + cos(p4s) ] 
// cos60*cos(p4s)  + sin60*sin(p4s) + cos(p4s) =                                 + [  0.866* sin(p4s) + 1.5* cos(p4s) ]  = p4sx term 

//  p2e = 60 - p4e   ---> Angles [3] = 60r - Angles [7]  fundamental terms are  -(cos(60-p4e) - cos(p4e)              
// -(cos(60)*cos(p4e) + sin(60)*sin(p4e) -cos(p4e)  =                              - [ 0.866* sin(p4e) + 1.5* cos(p4e) ] = p4ex term 

// p1s = 60 - p5s  --->  Angles[0] = 60r - Angles[8] ; fundamental terms are  + [cos (60 - p5s) + cos(p5s) ]
// cos60*cos(p5s)  + sin60*sin(p5s) + cos(p5s) =                                 + [  0.866* sin(p5s) + 1.5* cos(p5s) ]  = p5sx term 



// p5e = 120 - p6s  --->  want p6s[10] - p5e[9] ---> cos(p6s) - cos (120 - p6s)
// cos(p6s) - [ cos(120)cos(p6s) + sin(120)sin(p6s) ] --> cos(p6s) - [-0.5cos(p6s) + 0.866sin(p6s) ] -->
// 1.5 cos(p6s) -0.866sin(p6s) --->   



//   p1e = p6e - 60  --->   Angles[1] = Angles[11] - 60r fundamental terms are -cos(p6e - 60)   -cos(p6e) 
// -[cos(p6e)*cos(60) + sin(p6e)*sin(60)] - cos(p6e)  =                          - [ 0.866*sin(p6e) + 1.5* cos(p6e) ] = p6ex term

//  p2s = p7s - 60  --->  Angles{2] = Angles[12] -60r fundmental terms are + cos(p7s - 60) + cos(p7s)
//  cos(p7s)cos(60) + sin(p7s)sin(60) + cos(p7s) =                              + [ 0.866*sin(p7s) + 1.5 * cos(p7s) ] = p7sx term

//  p3e = p7e - 60    --->  Angles[5] = Angles[13] - 60r fundamental terms are  - [ cos(p7e - 60) - cos(p7e) ]
// -[cos(60)*cos(p7e) + sin(60)*sin(p7e)]  - cos(p7e)                            - [0.866*sin(p7e) + 1.5 *cos(p7e) ]  =  p7ex term 


// Extreme serendipity shows  [0.866*sin(p7e) + 1.5 *cos(p7e) ] is apparently p7ex =  (p7e + 60 degrees)*(sin(60))   valid in first quadrant.
// The reverse transform  would be p7e = (p7ex - 60 degrees)/(sin(60)) .  

// third and other triad harmonics will self-zero l as individual term pairs...

// for instance,   cos (3*p4s) + cos(3*(p3s) =  cos (3*p4s) + cos(3*(60 - p4s))  = cos (3*p4s) + cos(180 - 3*p4s)) =
//  cos (3*p4s)+  [cos(180)cos(3*4ps) + sin(180)sin(3*4ps) = cos (3*p4s)+  [-1*)cos(3*4ps) + 0*sin(3*4ps) = 0


// find the fifth order equation paired terms...

// typical for the paired edge cases...

//   cos (5*p4s) + cos(5*(p3s) =  cos (5*p4s) + cos(5*(60 - p4s))  = cos (5*p4s) + cos(300 - 3*p4s)) =
// cos (5*p4s)+  [cos(300)cos(5*4ps) + sin(300)sin(5*4ps)] =   cos (5*p4s)+  [cos(-60)cos(5*4ps) + sin(-60)sin(5*4ps)]
// cos (5*p4s)+  0.5*)cos(5*4ps) + 0.866*sin(5*4ps) = 1.5*cos (5*p4s) - 0.866*sin(5*4ps)
// vector transforms to  - [  cos (5*(p4s + 30) * 2 * sin(60) ]   
 
// for the crossed edge case...

// p5e = 120 - p6s
//   cos (5*p6s) - cos(5*(p5e) =  cos (5*p6s) - [ cos(5*(120 - p6s) ]  =  cos (5*p6s) - [ cos(600 - 5*p6s) ] =  cos (5*p6s) - [ cos(-120 - 5*p6s) ] = 
// cos (5*p6s) - [ cos(-120)cos(5*p6s) + sin(-120)sin(5*p6s) ] =  cos (5*p6s) - [ -0.5*cos(5*p6s) - 0.866 sin(5*p6s) ] =
// 1.5*cos(5*4ps) + 0.866* sin(5*6ps) vector transforms to 
// vector transforms to  + [  cos (5*(p4s + 30) * 2 * sin(60) ]  

// bottom line...

// leading or trailing edge pairs radian transform as

//                          Angles[10] = dAngles[0] + (30*pi/180)  ; // when[10] and [0] are paired, etc
//                          Angles[11] = dAngles[1] + (30*pi/180)  ;
//                          Angles[12] = dAngles[2] + (30*pi/180)  ;
//                          Angles[13] = dAngles[3] + (30*pi/180)  ;
//                          Angles[14] = dAngles[4] + (30*pi/180)  ;

// crossed edge pairs radian transform as...

//                          Angles[16] = dAngles[5] - (30*pi/180)   ;  // special because of mixed edges

// These relationships follow from summing the two angles together and then using the trig
// identity of cos (a+b) = cos(a)cos(b) - sin(a)sin(b), simplifying, and finding the cosine equivalent angle.

// They also appear to be the vector sum of the two angles involved.


////////////////////////////////////////////
//// test and trial area 
///////////////////////////////////////////

// last uncommented deBug in list is the active one.

function deBug () {

  alert ("Debug is not currently active.") ;

                        } ; 


// end test area
//////////////////////////////////


