docs: def recenter(self):
          """
          Reset the reference position values to correspond to the center
          of the reference frame.
          Algorithm used here developed by Colin Cox - 27-Jan-2004.
          """
          if self.ctype1.find('TAN') < 0 or self.ctype2.find('TAN') < 0:
              print 'WCS.recenter() only supported for TAN projections.'
              raise TypeError
  
          # Check to see if WCS is already centered...
          if self.crpix1 == self.naxis1/2. and self.crpix2 == self.naxis2/2.:
              # No recentering necessary... return without changing WCS.
              return
  
          # This offset aligns the WCS to the center of the pixel, in accordance
          # with the 'align=center' option used by 'drizzle'.
          #_drz_off = -0.5
          _drz_off = 0.
          _cen = (self.naxis1/2.+ _drz_off,self.naxis2/2. + _drz_off)
  
          # Compute the RA and Dec for center pixel
          _cenrd = self.xy2rd(_cen)
          _cd = N.array([[self.cd11,self.cd12],[self.cd21,self.cd22]],type=N.Float64)
          _ra0 = DEGTORAD(self.crval1)
          _dec0 = DEGTORAD(self.crval2)
          _ra = DEGTORAD(_cenrd[0])
          _dec = DEGTORAD(_cenrd[1])
  
          # Set up some terms for use in the final result
          _dx = self.naxis1/2. - self.crpix1
          _dy = self.naxis2/2. - self.crpix2
  
          _dE,_dN = DEGTORAD(N.dot(_cd,(_dx,_dy)))
          _dE_dN = 1 + N.power(_dE,2) + N.power(_dN,2)
          _cosdec = N.cos(_dec)
          _sindec = N.sin(_dec)
          _cosdec0 = N.cos(_dec0)
          _sindec0 = N.sin(_dec0)
  
          _n1 = N.power(_cosdec,2) + _dE*_dE + _dN*_dN*N.power(_sindec,2)
          _dra_dE = (_cosdec0 - _dN*_sindec0)/_n1
          _dra_dN = _dE*_sindec0 /_n1
  
          _ddec_dE = -_dE*N.tan(_dec) / _dE_dN
          _ddec_dN = (1/_cosdec) * ((_cosdec0 / N.sqrt(_dE_dN)) - (_dN*N.sin(_dec) / _dE_dN))
  
          # Compute new CD matrix values now...
          _cd11n = _cosdec * (self.cd11*_dra_dE + self.cd21 * _dra_dN)
          _cd12n = _cosdec * (self.cd12*_dra_dE + self.cd22 * _dra_dN)
          _cd21n = self.cd11 * _ddec_dE + self.cd21 * _ddec_dN
          _cd22n = self.cd12 * _ddec_dE + self.cd22 * _ddec_dN
  
          _new_orient = RADTODEG(N.arctan2(_cd12n,_cd22n))
  
          # Update the values now...
          self.crpix1 = _cen[0]
          self.crpix2 = _cen[1]
          self.crval1 = RADTODEG(_ra)
          self.crval2 = RADTODEG(_dec)
  
          # Keep the same plate scale, only change the orientation
          self.rotateCD(_new_orient)
  
          # These would update the CD matrix with the new rotation
          # ALONG with the new plate scale which we do not want.
          self.cd11 = _cd11n
          self.cd12 = _cd12n
          self.cd21 = _cd21n
          self.cd22 = _cd22n