src/Pulses/PulSinc.cc
/* These functions are meant to generate an array of propagators for a Sinc     
   pulse waveform.  Each step of the Sinc waveform will have a propagator Ui.
   For all of these function the Sinc waveform must be specified, that means
   that we need two of { pang, gamB1, tp } as well as the end node and number
   of pulse steps.  In addition, the function will require a static Hamiltonian
   (e.g. the isotropic Hamiltonian) and the operator for the spin component  */
These functions are meant to generate an array of propagators for a Sinc
pulse waveform.  Each step of the Sinc waveform will have a propagator Ui.
For all of these function the Sinc waveform must be specified, that means
that we need two of { pang, gamB1, tp } as well as the end node and number
of pulse steps.  In addition, the function will require a static Hamiltonian
and the operator for the spin component
These functions are meant to generate an array of propagators for a Sinc pulse waveform . Each step of the Sinc waveform will have a propagator Ui . For all of these function the Sinc waveform must be specified that means that we need two of { pang gamB1 tp } as well as the end node and number of pulse steps . In addition the function will require a static Hamiltonian and the operator for the spin component
void SincPulseUs(gen_op* Us, gen_op& H0, gen_op& Fxy,
                                     int N, double ang, double tp, int node)
  {
  double tdiv = tp/double(N);			
  double gamB1 = SincGamB1(ang, tp, N, node);	
  row_vector Sinc = SincVect(gamB1, N, node);	
  Fxy.Op_base(H0);				
  gen_op H;					
  for(int i=0; i<N; i++)			
    {						
    if(N-1-i < i) Us[i] = Us[N-1-i];		
    else					
      { 					
      H = H0 - Sinc.get(i)*Fxy;			
      Us[i] = prop(H, tdiv);			
      }
    }
  }
void SincPulseUs ( gen_op * Us , gen_op & H0 , gen_op & Fxy , int N , double ang , double tp , int node ) { double tdiv = tp / double ( N ) ; double gamB1 = SincGamB1 ( ang , tp , N , node ) ; row_vector Sinc = SincVect ( gamB1 , N , node ) ; Fxy . Op_base ( H0 ) ; gen_op H ; for ( int i = 0 ; i < N ; i ++ ) { if ( N - 1 - i < i ) Us [ i ] = Us [ N - 1 - i ] ; else { H = H0 - Sinc . get ( i ) * Fxy ; Us [ i ] = prop ( H , tdiv ) ; } } }
These functions are meant to generate an array of propagators for a Sinc
pulse waveform.
These functions are meant to generate an array of propagators for a Sinc pulse waveform .
// Input        Us      : Array of general operators //              H0      : Static Hamiltonian * //              Fxy     : RF-Field Hamiltonian * //              N       : Number of Sinc steps //              ang     : Pulse rotation angle (degrees) //              tp      : Sinc pulse length (sec) //              node 	: Sinc function end node // Output       void    : Propagators for a Sinc pulse //                        are put into array Us // Incremental prop. time // Get field strength // RF intensities (waveform) // Set Fxy basis for easy add // Scratch operator // Loop over Sinc steps // For latter times we use // symmetry to reuse the Hs // These are the first half // of the waveform. We must // calculate the H & U for // each of these pulse steps