sigma**2).max()) < 1e-5

# Create a pyspeckit cube
pcube = pyspeckit.Cube(cube=cube)

# For convenience, convert the X-axis to km/s
# (WCSLIB automatically converts to m/s even if you give it km/s)
pcube.xarr.convert_to_unit(u.km / u.s)

# Set up the fitter by doing a preliminary fit
pcube.specfit(fittype='gaussian', guesses='moments')

# Fit each spectrum with a gaussian
# First, assemble the guesses:
guesses = np.array([
    cube.max(axis=0).value,
    cube.moment1(axis=0).to(u.km / u.s).value,
    (cube.moment2(axis=0)**0.5).to(u.km / u.s).value
])
# (the second moment is in m^2/s^2, but we want km/s

# Do the fit!
pcube.fiteach(
    guesses=guesses,  # pass in the guess array
    # tell it where to start the fitting (center pixel in this case)
    start_from_point=(5, 5),
    # Paralellize the fits?
    multicore=4,
    fittype='gaussian',
)
    outpath = 'TemperatureCube_DendrogramObjects{0}_Piecewise.fits'.format(sm)
    tcube.write(hpath(outpath), overwrite=True)

    rcube = SpectralCube(
        data=rcubedata,
        wcs=cubeA.wcs,
        mask=cubeA.mask,
        meta={'unit': 'K'},
        header=cubeA.header,
    )

    outpath = 'RatioCube_DendrogramObjects{0}.fits'.format(sm)
    rcube.write(hpath(outpath), overwrite=True)

    max_temcube = tcube.max(axis=0)
    max_temcube.hdu.writeto(hpath(
        'TemperatureCube_DendrogramObjects{0}_Piecewise_max.fits'.format(sm)),
                            clobber=True)
    max_rcube = rcube.max(axis=0)
    max_rcube.hdu.writeto(hpath(
        'RatioCube_DendrogramObjects{0}_Piecewise_max.fits'.format(sm)),
                          clobber=True)

    mean_temcube = tcube.mean(axis=0)
    mean_temcube.hdu.writeto(hpath(
        'TemperatureCube_DendrogramObjects{0}_Piecewise_mean.fits'.format(sm)),
                             clobber=True)
    mean_rcube = rcube.mean(axis=0)
    mean_rcube.hdu.writeto(hpath(
        'RatioCube_DendrogramObjects{0}_Piecewise_mean.fits'.format(sm)),
assert (np.abs(cube.moment1().to(u.km/u.s).value - centroid).max()) < 1e-5
assert (np.abs(cube.moment2().to(u.km**2/u.s**2).value - sigma**2).max()) < 1e-5

# Create a pyspeckit cube
pcube = pyspeckit.Cube(cube=cube)

# For convenience, convert the X-axis to km/s
# (WCSLIB automatically converts to m/s even if you give it km/s)
pcube.xarr.convert_to_unit(u.km/u.s)

# Set up the fitter by doing a preliminary fit
pcube.specfit(fittype='gaussian', guesses='moments')

# Fit each spectrum with a gaussian
# First, assemble the guesses:
guesses = np.array([cube.max(axis=0).value,
                    cube.moment1(axis=0).to(u.km/u.s).value,
                    (cube.moment2(axis=0)**0.5).to(u.km/u.s).value])
# (the second moment is in m^2/s^2, but we want km/s

# Do the fit!
pcube.fiteach(guesses=guesses, # pass in the guess array
              # tell it where to start the fitting (center pixel in this case)
              start_from_point=(5,5),
              # Paralellize the fits?
              multicore=4,
              fittype='gaussian',
             )

# Then you can access the fits via parcube:
assert np.all(pcube.parcube[0,:,:] == 1)
                         mask=cubeA.mask, meta={'unit':'K'},
                         header=cubeA.header,
                        )

    outpath = 'TemperatureCube_DendrogramObjects{0}_Piecewise.fits'.format(sm)
    tcube.write(hpath(outpath), overwrite=True)

    rcube = SpectralCube(data=rcubedata, wcs=cubeA.wcs,
                         mask=cubeA.mask, meta={'unit':'K'},
                         header=cubeA.header,
                        )

    outpath = 'RatioCube_DendrogramObjects{0}.fits'.format(sm)
    rcube.write(hpath(outpath), overwrite=True)

    max_temcube = tcube.max(axis=0)
    max_temcube.hdu.writeto(hpath('TemperatureCube_DendrogramObjects{0}_Piecewise_max.fits'.format(sm)), clobber=True)
    max_rcube = rcube.max(axis=0)
    max_rcube.hdu.writeto(hpath('RatioCube_DendrogramObjects{0}_Piecewise_max.fits'.format(sm)), clobber=True)

    mean_temcube = tcube.mean(axis=0)
    mean_temcube.hdu.writeto(hpath('TemperatureCube_DendrogramObjects{0}_Piecewise_mean.fits'.format(sm)), clobber=True)
    mean_rcube = rcube.mean(axis=0)
    mean_rcube.hdu.writeto(hpath('RatioCube_DendrogramObjects{0}_Piecewise_mean.fits'.format(sm)), clobber=True)

    hdu_template = mean_rcube.hdu
    tcube = tcube.filled_data[:].value
    weight_cube = cube303sm if 'smooth' in sm else cube303
    weights = weight_cube.filled_data[:].value
    weights[weights < 0] = 0