code: def Jz(self,**kwargs):
          
          if hasattr(self,'_JZ'): #pragma: no cover
              return self._JZ
          vmin= self.calcVmin()
          if (nu.pi/2.-vmin) < 10.**-7: return nu.array([0.])
          order= kwargs.pop('order',10)
          if kwargs.pop('fixed_quad',False):
              # factor in next line bc integrand=/2delta^2
              self._JZ= 2./nu.pi*nu.sqrt(2.)*self._delta \
                  *integrate.fixed_quad(_JzStaeckelIntegrand,
                                        vmin,nu.pi/2,
                                        args=(self._E,self._Lz,self._I3V,
                                              self._delta,
                                              self._ux,self._coshux**2.,
                                              self._sinhux**2.,
                                              self._potupi2,self._pot),
                                        n=order,
                                        **kwargs)[0]
          else:
              # factor in next line bc integrand=/2delta^2
              self._JZ= 2./nu.pi*nu.sqrt(2.)*self._delta \
                  *integrate.quad(_JzStaeckelIntegrand,
                                  vmin,nu.pi/2,
                                  args=(self._E,self._Lz,self._I3V,
                                        self._delta,
                                        self._ux,self._coshux**2.,
                                        self._sinhux**2.,
                                        self._potupi2,self._pot),
                                  **kwargs)[0]
          return self._JZ
docs: NAME:
             Jz
          PURPOSE:
             Calculate the vertical action
          INPUT:
             fixed_quad= (False) if True, use n=10 fixed_quad
             +scipy.integrate.quad keywords
          OUTPUT:
             J_z(R,vT,vT)/ro/vc + estimate of the error
          HISTORY:
             2012-11-27 - Written - Bovy (IAS)