Abstract:
An imaging system includes determination of a first range of values of an imaging parameter, determination of a cost function expressing a difference between a first pulse profile and a second pulse profile, the second pulse profile generated based on respective values of each of a set of pulse parameters, identification of first coefficient values of each function of a set of functions which substantially minimize the cost function over the first range of values of the imaging parameter, where each of the set of functions determines a value of a respective one of the set of pulse parameters based on a value of the imaging parameter, and storage of the first coefficient values of each function of the set of functions in association with the first range of values.

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
       [0001]    This application is related to, and claims benefit to and priority of, U.S. Patent Application Ser. No. 62/074,719, filed on Nov. 4, 2014, the contents of which are hereby incorporated by reference in their entirety for all purposes. 
     
    
     BACKGROUND 
       [0002]    Magnetic resonance imaging (MRI) uses the nuclear magnetic resonance (NMR) phenomenon to produce images of patient anatomy. According to MRI techniques, a substance (e.g., human tissue) is subjected to a main polarizing magnetic field, causing the individual magnetic moments of the nuclear spins in the tissue to process about the polarizing field in random order at their characteristic Larmor frequency, in an attempt to align with the field. A net magnetic moment M z  is produced in the direction of the polarizing field, and the randomly-oriented magnetic components in the perpendicular plane (the x-y plane) cancel out one another. 
         [0003]    The substance is then subjected to an excitation field (e.g., created by emission of a radiofrequency (RF) pulse) which is in the x-y plane and near the Larmor frequency, causing the net aligned magnetic moment M z  to rotate into the x-y plane so as to produce a net transverse magnetic moment M t , which is rotating, or spinning, in the x-y plane at the Larmor frequency. The excitation field is terminated and signals are emitted by the excited spins as they return to their pre-excitation field state. The emitted signals are detected, digitized and processed to reconstruct an image using one of many well-known MR reconstruction techniques. 
         [0004]    An RF pulse may be emitted as a magnetization preparation step in order to enhance or suppress signals from certain tissue so as to generate desired levels of contrast in the resulting image. For example, an inversion, or saturation, pulse is used in non-contrast-enhanced angiography to suppress venous blood in order to highlight the arterial system. 
         [0005]    Systems providing high main magnetic field strengths are increasingly available, with the promise of obtaining images exhibiting ever-higher resolution or Signal-to-Noise ratios. However, emitted RF fields are substantially inhomogeneous at high main magnetic field strengths due to, for example, RF penetration issues and RF coil design issues. The effectiveness of standard RF pulses to selectively enhance or suppress signals is therefore compromised at higher main magnetic field strengths, resulting in degraded image contrast and quality. 
         [0006]    In order to address this inhomogeneity, standard RF pulses are conventionally replaced with adiabatic equivalents, such as the hyperbolic secant inversion pulse. Alternative adiabatic equivalents include numerically-optimized adiabatic pulses such as frequency offset corrected inversion (FOCI) pulses, which provide improved slice profiles and tissue suppression at lower RF amplitudes. Unfortunately, the adiabatic performance of an adiabatic pulse is sensitive to changes in its defining pulse parameters such as duration, frequency sweep, slice thickness, etc. Accordingly, an adiabatic pulse which has been numerically-optimized with respect to particular pulse parameters may not function as intended if one or more of those parameters is changed. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0007]      FIG. 1  is a block diagram of an MRI system according to some embodiments. 
           [0008]      FIG. 2  is a flow diagram of a process to determine functions of a pulse family according to some embodiments. 
           [0009]      FIG. 3  illustrates a cost function according to some embodiments. 
           [0010]      FIG. 4  is a tabular representation of a pulse family definition data table according to some embodiments. 
           [0011]      FIG. 5  is a tabular representation of a pulse family functions data table according to some embodiments. 
           [0012]      FIG. 6  is a tabular representation of a pulse family functions data table according to some embodiments. 
           [0013]      FIG. 7  illustrates linear functions of a pulse family according to some embodiments. 
           [0014]      FIG. 8  is a flow diagram of a process to determine functions of a pulse family according to some embodiments. 
           [0015]      FIG. 9  is a flow diagram of a process to generate a pulse based on functions of a pulse family according to some embodiments. 
       
    
    
     DETAILED DESCRIPTION 
       [0016]    The following description is provided to enable any person in the art to make and use the described embodiments. Various modifications, however, will remain readily apparent to those in the art. 
         [0017]      FIG. 1  illustrates MRI system  1  according to some embodiments. MRI system  1  includes MRI chassis  2 , which defines bore  3  in which patient  4  is disposed. MRI chassis  2  includes polarizing main magnet  5 , gradient coils  6  and RF coil  7  arranged about bore  3 . According to some embodiments, polarizing main magnet  5  generates the uniform main magnetic field (B 0 ) mentioned above and RF coil  7  emits the excitation field (B 1 ). 
         [0018]    Gradient coils  6  produce magnetic field gradients G x , G y , and G z  which are used for position-encoding NMR signals. The magnetic field gradients G x , G y , and G z  distort the main magnetic field in a predictable way so that the Larmor frequency of nuclei within the main magnetic field varies as a function of position. Accordingly, an excitation field B 1  which is near a particular Larmor frequency will tip the net aligned moment M z  of those nuclei located at field positions which correspond to the particular Larmor frequency, and signals will be emitted only by those nuclei after the excitation field B 1  is terminated. 
         [0019]    Gradient coils  6  may consist of three windings, for example, each of which is supplied with current by an amplifier  8   a - 8   c  in order to generate a linear gradient field in its respective Cartesian direction (i.e., x, y, or z). Each amplifier  8   a - 8   c  includes a digital-analog converter  9   a - 9   c  which is controlled by a sequence controller  10  to generate desired gradient pulses at proper times. 
         [0020]    Sequence controller  10  also controls the generation of RF pulses by RF system  11 . RF system  11  is responsive to a scan prescription and direction from sequence controller  10  to produce RF pulses of the desired frequency, phase, and pulse amplitude waveform. The generated RF pulses may be applied to the whole of RF coil  7  or to one or more local coils or coil arrays. RF coil  7  converts the RF pulses emitted by RF amplifier  12 , via multiplexer  13 , into a magnetic alternating field in order to excite the nuclei and align the nuclear spins of the object to be examined or the region of the object to be examined. As mentioned above, RF pulses may be emitted in a magnetization preparation step in order to enhance or suppress certain signals. 
         [0021]    The RF pulses to be produced by RF system  11  are represented digitally as complex numbers. Sequence controller  10  supplies these numbers in real and imaginary parts to digital-analog converters  14   a - 14   b  in RF system  11  to create corresponding analog pulse sequences. Transmission channel  15  modulates the pulse sequences with a radio-frequency carrier signal having a base frequency corresponding to the resonance frequency of the nuclear spins in the volume to be imaged. 
         [0022]    RF coil  7  both emits radio-frequency pulses as described above and scans the alternating field which is produced as a result of processing nuclear spins, i.e. the nuclear spin echo signals. The received signals are received by multiplexer  13 , amplified by RF amplifier  16  and demodulated in receiving channel  17  of RF system  11  in a phase-sensitive manner. Analog-digital converters  18   a  and  18   b  convert the demodulated signals into a real part and an imaginary part. 
         [0023]    Computing system  20  receives the real and imaginary parts and reconstructs an image therefrom according to known techniques. System  20  may comprise any general-purpose or dedicated computing system. Accordingly, system  20  includes one or more processing units  21  (e.g., processors, processor cores, execution threads, etc.) configured to execute processor-executable program code to cause system  20  to operate as described herein, and storage device  22  for storing the program code. Storage device  22  may comprise one or more fixed disks, solid-state random access memory, and/or removable media (e.g., a thumb drive) mounted in a corresponding interface (e.g., a USB port). 
         [0024]    Storage device  22  stores program code of control program  23 . One or more processing units  21  may execute control program  23  to cause system  20  to perform any one or more of the processes described herein. For example, one or more processing units  21  may execute control program  23  to cause system  20  to determine parameter functions of a pulse family and/or to generate an RF pulse based on the functions of a pulse family as described herein. Family definitions  26  may define pulse families based on values of particular pulse parameters and family functions  27  may specify, for each of a plurality of pulse families, pulse parameter function coefficients. Family definitions  26  and family functions  27  will be described in further detail below. 
         [0025]    One or more processing units  21  may execute control program  23  to cause system  20  to receive the real and imaginary parts of a received RF signal via MR system interface  24  and reconstruct an image therefrom according to known techniques. Such an image may be stored among acquired images  28  of storage device  22 . 
         [0026]    One or more processing units  21  may also execute control program  23  to provide instructions to sequence controller  10  via MR system interface  24 . For example, sequence controller  10  may be instructed to initiate the desired pulse sequences and corresponding scanning. In particular, sequence controller  10  may be instructed to control the switching of magnetic field gradients via amplifiers  8   a - 8   c  at appropriate times, the transmission of radio-frequency pulses having a specified phase and amplitude at specified times via RF system  11  and RF amplifier  12 , and the reception of the resulting magnetic resonance signals. 
         [0027]    Acquired images  28  may be provided to terminal  30  via UI interface  25  of system  20 . UI interface  25  may also receive input from terminal  30 , which may be used to provide commands to control program  23  in order to control sequence controller  10  and/or other elements of system  1 . The commands may specify pulse parameter values which are used by system  20  to determine a corresponding pulse family. Terminal  30  may simply comprise a display device and an input device coupled to system  20 . In some embodiments, terminal  30  is a separate computing device such as, but not limited to, a desktop computer, a laptop computer, a tablet computer, and a smartphone. 
         [0028]    Each element of system  1  may include other elements which are necessary for the operation thereof, as well as additional elements for providing functions other than those described herein. Storage device  22  may also store data and other program code for providing additional functionality and/or which are necessary for operation of system  20 , such as device drivers, operating system files, etc. 
         [0029]      FIG. 2  is a flowchart of process  200  according to some embodiments. Process  200  may be executed in some embodiments to determine a function for each parameter of an adiabatic pulse. Each of the determined functions is a function of another imaging parameter (e.g., slice thickness). The determined functions may be used to efficiently provide values for each parameter of an effective adiabatic pulse based on the other imaging parameter, across a range of values of the other imaging parameter. 
         [0030]    In some embodiments, various hardware elements of system  1  (e.g., one or more processors) execute program code to perform process  200 . Process  200  and all other processes mentioned herein may be embodied in processor-executable program code read from one or more of non-transitory computer-readable media, such as a floppy disk, a disk-based or solid-state hard drive, CD-ROM, a DVD-ROM, a Flash drive, and a magnetic tape, and then stored in a compressed, uncompiled and/or encrypted format. In some embodiments, hard-wired circuitry may be used in place of, or in combination with, program code for implementation of processes according to some embodiments. Embodiments are therefore not limited to any specific combination of hardware and software. 
         [0031]    Initially, at S 205 , a range of slice thicknesses is determined. The range of slice thicknesses is a range for which a pulse family of functions will be determined. In other words, the determined functions of the pulse family will be applicable to any slice thickness within the range. For example, in some embodiments, an operator of terminal  30  may manipulate a displayed graphical interface to select a range of slice thicknesses of 30 to 100 mm. In this regard, processor(s)  21  may execute control program  23  to provide such a user interface and to execute process  200 . 
         [0032]    Embodiments are not limited to determination of a range of slice thicknesses. Some embodiments may alternatively determine a range of pulse durations, or a range of another imaging parameter, at S 210 . In the former instance, the plurality of functions determined according to process  200  may be used to determine values of each pulse parameter of an adiabatic pulse based on a particular pulse duration, across the specified range of pulse durations. 
         [0033]    A pulse type is determined at S 210 . The determined pulse type may be any type of adiabatic pulse defined by a discrete set of a plurality of parameters. The plurality of parameters for the selected pulse type are further determined at S 215 . For example, a C-shape frequency offset-corrected conversion (C-FOCI) pulse is a known adiabatic pulse and is defined by three parameters: A max , μ, and β. The time-resampled frequency offset-corrected conversion (TR-FOCI) pulse is defined by eleven parameters: A max , w, r 1 , r 2 , r 3 , r 4 , r 5 , μ, β, T 1 , T 2 . Any other pulse types that are or become known may be determined at S 210 . As described above, the pulse type may be selected by an operator of terminal  30  at S 210 . 
         [0034]    Next, at S 220 , a pulse family function is assigned to each of the plurality of parameters. For a given parameter, a pulse family function defines the parameter as a function of slice thickness and associated coefficients. In some embodiments, for example, the pulse family functions are linear functions. Accordingly, assuming that the determined pulse type is C-FOCI, the following pulse family functions may be assigned at S 220 , where x represents slice thickness: 
         [0000]    
       
      
       A 
       max 
       =m 
       1 
       x+c 
       1  
      
     
         [0000]      μ= m   2   x+c   2  
 
         [0000]      β= m   3   x+c   3  
 
         [0035]    The pulse family functions may be functions of any degree according to some embodiments. Accordingly, assuming that the determined pulse type is TR-FOCI, the following quadratic pulse family functions may be assigned at S 220 , where again x represents slice thickness: 
         [0000]    
       
      
       A 
       max 
       =a 
       1 
       x 
       2 
       +b 
       1 
       x+c 
       1  
      
     
         [0000]    
       
      
       w=a 
       2 
       x 
       2 
       +b 
       2 
       x+c 
       2  
      
     
         [0000]    
       
      
       r 
       1 
       =a 
       3 
       x 
       2 
       +b 
       3 
       x+c 
       3  
      
     
         [0000]    
       
      
       r 
       2 
       =a 
       4 
       x 
       2 
       +b 
       4 
       x+c 
       4  
      
     
         [0000]    
       
      
       r 
       3 
       =a 
       5 
       x 
       2 
       +b 
       5 
       x+c 
       5  
      
     
         [0000]    
       
      
       r 
       4 
       =a 
       6 
       x 
       2 
       +b 
       6 
       x+c 
       6  
      
     
         [0000]    
       
      
       r 
       5 
       =a 
       7 
       x 
       2 
       +b 
       7 
       x+c 
       7  
      
     
         [0000]      μ= a   8   x   2   +b   8   x+c   8  
 
         [0000]      β= a   9   x   2   +b   9   x+c   9  
 
         [0000]    
       
      
       T 
       1 
       =a 
       10 
       x 
       2 
       +b 
       10 
       x+c 
       10  
      
     
         [0000]    
       
      
       T 
       2 
       =a 
       11 
       x 
       2 
       +b 
       11 
       x+c 
       11  
      
     
         [0036]    Each pulse family function may therefore be represented by a set of coefficients. In the first example above, the pulse family function assigned to the A max  parameter may be represented by a 1 , b 1 . Embodiments are not limited to pulse family functions of a same degree or to polynomial functions. For example, one parameter may be assigned to a linear pulse family function, while another parameter may be assigned to a cubic pulse family function, while another parameter may be assigned to a power law family function. 
         [0037]    A pulse duration and a β 1     +    power are determined at S 225  and S 230 , respectively. In one example, the pulse duration may be specified as 13 ms and the β 1     +    power as 5 μT. These values may be input by an operator as described above. 
         [0038]    Next, at S 235 , hardware constraints are determined. The hardware constraints may mathematically represent physical limits of system  1  (e.g., maximum gradient and slew rate, maximum frequency sweep (Amax*μ*β), etc.), or any other constraint on the optimization algorithm to be described below. Hardware constraints may be hard-coded into system  20  and therefore known during execution of process  200  and/or may be received from an operator of terminal  30 . 
         [0039]    A cost, or loss, function is determined at S 240 . The cost function is a function that subsequent optimization of the pulse family functions will attempt to minimize.  FIG. 3  illustrates an ideal profile of an adiabatic pulse to be generated in some embodiments. Accordingly, the cost function determined at S 240  may calculate a difference between the  FIG. 3  profile and the actual profile of pulses generated based on the pulse family of functions over the range of thicknesses. Since the actual profile is based on the pulse duration, the β 1     +    power and the plurality of family functions, the determined cost function is a function of each of these factors. 
         [0040]    For example, equations (1) and (2) describe a cost function (e.g., an Inversion Profile Accuracy (IPA) function) for one pulse, where I(i) represents the  FIG. 3  profile and V(i) is a simulated profile generated by, for example, a Bloch equation simulator. The IPA function can be determined against a range of β 1     +    amplitudes. If this is the case, then a weighting function such as Equation (2) can be used to favor certain β 1     +    pulses. Equation (3) sums the one pulse cost function over the range of slice thicknesses, where various thicknesses may be assigned weights per ∝ x . Equation (4) is in a more general form which combines (2) and (3). 
         [0000]    
       
         
           
             
               
                 ( 
                 1 
                 ) 
               
                
               
                   
               
                
               
                 
                   IPA 
                   x 
                 
                  
                 
                   ( 
                   
                     B 
                     1 
                   
                   ) 
                 
               
             
             = 
             
               
                 2 
                  
                 
                     
                 
                  
                 N 
               
               
                 
                   ∑ 
                   
                     i 
                     = 
                     N 
                   
                   
                     - 
                     N 
                   
                 
                  
                 
                     
                 
                  
                 
                   
                     ( 
                     
                       
                         I 
                          
                         
                           ( 
                           i 
                           ) 
                         
                       
                       - 
                       
                         V 
                          
                         
                           ( 
                           i 
                           ) 
                         
                       
                     
                     ) 
                   
                   2 
                 
               
             
           
         
       
       
         
           
             
               
                 ( 
                 2 
                 ) 
               
                
               
                   
               
                
               WIPA 
             
             = 
             
               
                 
                   
                     ∑ 
                     
                       j 
                       = 
                       1 
                     
                     3 
                   
                    
                   
                       
                   
                    
                   
                     IPA 
                      
                     
                       ( 
                       
                         B 
                         ij 
                       
                       ) 
                     
                   
                 
                  
                 
                   ∝ 
                   j 
                 
                  
                 
                   
 
                 
                  
                 
                   
                     ( 
                     3 
                     ) 
                   
                    
                   
                       
                   
                    
                   
                     Σ 
                     x 
                   
                    
                   
                     WIPA 
                      
                     
                       ( 
                       x 
                       ) 
                     
                   
                 
                  
                 
                   ∝ 
                   x 
                 
                  
                 
                   
 
                 
                  
                 
                   
                     ( 
                     alt 
                     ) 
                   
                    
                   
                       
                   
                    
                   WIPA 
                 
               
               = 
               
                 
                   
                     Σ 
                     x 
                   
                    
                   
                     Σ 
                     j 
                   
                    
                   
                     
                       IPA 
                       x 
                     
                      
                     
                       ( 
                       
                         B 
                         j 
                       
                       ) 
                     
                   
                 
                  
                 
                   ∝ 
                   
                     j 
                     , 
                     x 
                   
                 
               
             
           
         
       
     
         [0041]    An optimization algorithm is determined at S 245 . Generally, an optimization algorithm is a procedure which is executed iteratively by comparing various solutions until an optimum or a satisfactory solution is found. In this instance, the determined optimization algorithm is intended to determine coefficients for each pulse family function (e.g., m 1-3 , c 1-3 ) which minimize the cost function over the range of slice thicknesses, and in view of the pulse duration, pulse power and hardware constraints. Examples, of a suitable optimization algorithm include heuristic optimization algorithms such as a genetic algorithm, but are not limited thereto. The optimization algorithm is executed at S 250  to determine the coefficients. 
         [0042]      FIGS. 4 through 6  are tabular representations of data tables which may be populated according to some embodiments of process  200 . For example,  FIG. 4  illustrates family definitions table  26 . Table  26  associates a Family_id with a range of slice thicknesses (i.e., Slice Range), a pulse duration (i.e., Duration) and a pulse type (i.e., Type). A Family_Id identifies a set of pulse family functions which have been generated in view of the associated slice thicknesses, pulse duration and pulse type. Other characteristics, including but not limited to pulse power and hardware constraints, may also be associated with each Family_Id in some embodiments. 
         [0043]    Tables  27 A and  27 B of  FIGS. 5 and 6  define functions of each of several pulse families. Specifically, tables  27 A and  27 B specify the coefficients of each function in a given pulse family. Table  27 A is associated with C-FOCI pulse families and therefore stores coefficients of linear functions for each of three parameters per pulse family. Although the coefficients are symbolically represented in  FIG. 5  for clarity, actual values of the coefficients are stored. These coefficients may be determined according to process  200 . 
         [0044]    Similarly, table  27 B is associated with TR-FOCI pulse families and therefore stores actual coefficients of linear functions for each of eleven parameters per pulse family. Any types of pulses associated with any number of pulse parameters may be used in some embodiments, and therefore a function family may include any number of functions. 
         [0045]      FIG. 7  illustrates linear functions for each of the eleven TR-FOCI pulse parameters according to some embodiments. Each function allows determination of a pulse parameter value for a given value of slice thickness between 30 nm and 100 nm. As shown in the upper left of  FIG. 7 , the use of linear functions results in a higher-order dependence of the slice-select gradient (G s ) than the linear dependence which is expected if one uses fixed pulse parameters or, alternatively, a random allocation of parameters based on simple bounded optimization in view of a single slice thickness. 
         [0046]      FIG. 8  is a flow diagram of process  800  according to some embodiments. Process  800  describes an “indirect” system for determining a set of pulse family functions according to some embodiments. 
         [0047]    S 805  through S 840  proceed similarly to S 205  through S 240  of  FIG. 2 . At S 845 , the determined optimization algorithm is executed in view of the determined hardware constraints to determine values of each of the plurality of parameters. The determined values are those which minimize the determined cost function for each of a plurality of slice thicknesses, over the range of specified slice thicknesses. Accordingly, the result of S 845  will be a set of coordinates (p ix , x) for each parameter p i , where p ix  is a value of the parameter which was determined at S 845  for slice thickness x. 
         [0048]    Next, at S 850 , and for each of the plurality of parameters, a function is determined which defines the parameter as a function of slice thickness, based on those values which were determined for the parameter at S 845 . S 850  may therefore comprise determining a best fitting function (linear, quadratic or otherwise) for the set of coordinates of each of the plurality of parameters. The coefficients of such functions may then be stored in family functions table  27  as described above. 
         [0049]      FIG. 9  illustrates process  900  according to some embodiments. Process  900  may be used to generate and deliver an RF pulse based on the pulse family functions described above. Initially, at S 905 , a slice thickness is determined. An operator may determine a desired slice thickness of an image to be acquired and input the slice thickness to system  20 , using a user interface provided thereby and displayed on terminal  30 . 
         [0050]    The user may similarly select a pulse type at S 910 . Although C-FOCI and TR-FOCI are explicitly considered herein, some embodiments may employ any other type of RF pulse associated with any number of parameters. 
         [0051]    At S 915 , a set of functions is determined based on the slice thickness and the pulse type. Each function of the determined set defines a respective pulse parameter as a function of slice thickness. In one example, a slice thickness of 15 nm and a pulse type of C-FOCI are determined at S 905  and S 910 . Turning to  FIG. 4 , it is determined that these values are associated with the Family_Id C 4503 . Accordingly, the set of functions determined at S 915  are those associated with Family_Id C 4503  in table  27 A of  FIG. 5 . Specifically: 
         [0000]    
       
      
       A 
       max 
       =m 
       1a 
       x+c 
       1a  
      
     
         [0000]      μ= m   2a   x+c   2a  
 
         [0000]      β= m   3a   x+c   3a  
 
         [0000]    where m 1a  through m 3a  and c 1a  through c 3a  are actual numeric values. 
         [0052]    Next, at S 920 , a value is determined for each pulse parameter based on the slice thickness determined at S 905 . For example, the slice thickness “15” may simply be substituted for the variable x in the above equations to determine values for each of A max , μ and β. Finally, at S 925 , an RF pulse is generated based on the determined parameter values as is known in the art (e.g., by RF system  11  and RF amplifier  12  under control of sequence controller  10 ) and delivered within an MRI imaging sequence. 
         [0053]    The foregoing diagrams represent logical architectures for describing processes according to some embodiments, and actual implementations may include more or different components arranged in other manners. Other topologies may be used in conjunction with other embodiments. Moreover, each component or device described herein may be implemented by any number of devices in communication via any number of other public and/or private networks. Two or more of such computing devices may be located remote from one another and may communicate with one another via any known manner of network(s) and/or a dedicated connection. Each component or device may comprise any number of hardware and/or software elements suitable to provide the functions described herein as well as any other functions. For example, any computing device used in an implementation of a system according to some embodiments may include a processor to execute program code such that the computing device operates as described herein. 
         [0054]    All systems and processes discussed herein may be embodied in program code stored on one or more non-transitory computer-readable media. Such media may include, for example, a floppy disk, a CD-ROM, a DVD-ROM, a Flash drive, magnetic tape, and solid state Random Access Memory (RAM) or Read Only Memory (ROM) storage units. Embodiments are therefore not limited to any specific combination of hardware and software. 
         [0055]    Embodiments described herein are solely for the purpose of illustration. Those in the art will recognize other embodiments may be practiced with modifications and alterations to that described above.