Processing Script for J2229+2643

Import statements and load notebook utilities

In [1]:
!git checkout master
!git branch
M	working/B1855+09/process.ipynb
M	working/B1937+21/B1937+21.working.par
M	working/B1937+21/B1937+21.working.tim
M	working/B1937+21/process.ipynb
M	working/B1953+29/process.ipynb
M	working/J0023+0923/process.ipynb
M	working/J0030+0451/process.ipynb
M	working/J0340+4130/process.ipynb
M	working/J0613-0200/process.ipynb
M	working/J0636+5128/process.ipynb
M	working/J0645+5158/process.ipynb
M	working/J0740+6620/process.ipynb
M	working/J0931-1902/process.ipynb
M	working/J1012+5307/J1012+5307.working.par
M	working/J1012+5307/J1012+5307.working.tim
M	working/J1012+5307/process.ipynb
M	working/J1022+1001/process.ipynb
M	working/J1024-0719/process.ipynb
M	working/J1125+7819/process.ipynb
M	working/J1453+1902/process.ipynb
M	working/J1455-3330/process.ipynb
M	working/J1600-3053/process.ipynb
M	working/J1614-2230/process.ipynb
M	working/J1640+2224/process.ipynb
M	working/J1643-1224/process.ipynb
M	working/J1713+0747/process.ipynb
M	working/J1738+0333/process.ipynb
M	working/J1741+1351/process.ipynb
M	working/J1744-1134/process.ipynb
M	working/J1747-4036/process.ipynb
M	working/J1832-0836/process.ipynb
M	working/J1853+1303/process.ipynb
M	working/J1903+0327/process.ipynb
M	working/J1909-3744/process.ipynb
M	working/J1910+1256/process.ipynb
M	working/J1911+1347/J1911+1347.working.par
M	working/J1911+1347/J1911+1347.working.tim
M	working/J1911+1347/process.ipynb
M	working/J1918-0642/J1918-0642.working.par
M	working/J1918-0642/J1918-0642.working.tim
M	working/J1918-0642/process.ipynb
M	working/J1923+2515/process.ipynb
M	working/J1944+0907/process.ipynb
M	working/J1946+3417/process.ipynb
M	working/J2010-1323/process.ipynb
M	working/J2017+0603/process.ipynb
M	working/J2033+1734/process.ipynb
M	working/J2043+1711/process.ipynb
M	working/J2145-0750/process.ipynb
M	working/J2214+3000/process.ipynb
M	working/J2229+2643/process.ipynb
M	working/J2234+0611/process.ipynb
M	working/J2234+0944/process.ipynb
M	working/J2302+4442/process.ipynb
M	working/J2317+1439/process.ipynb
M	working/J2322+2057/process.ipynb
Already on 'master'
Your branch is up-to-date with 'origin/master'.
* master
  recalibrate
In [2]:
import os
import sys
sys.path.append("/home/jovyan/work/shared/nanograv_timing_2017/util/")
from nanograv_utils import *
sys.path.append("/home/jovyan/work/shared/")
from pypulse.tim import Tim
%matplotlib inline
# Load the notebook utilities
nanoutils = NANOGravUtils()
tempoutils = TempoUtils()
pintutils = PINTUtils()
enterpriseutils = EnterpriseUtils()

User-defined constants here

In [3]:
FLAGS = "-G" # Use "-G" for Generalized least squares fit
NITER = 50000 #10000 # How many iterations to run PAL2 for

Set pulsar name, create working par and tim files, working directories

In [4]:
EXCISEPARFILE = "J2229+2643.excise.par"
EXCISETIMFILE = "J2229+2643.excise.tim"
PARFILE = "J2229+2643.working.par"
TIMFILE = "J2229+2643.working.tim"
# Copy initial par/tim files into working files
call("cp J2229+2643.dmx.par %s"%EXCISEPARFILE)
call("cp J2229+2643.dmx.tim %s"%EXCISETIMFILE)

Initial tempo run and residuals plot

In [5]:
tempoutils.tempo(EXCISEPARFILE,EXCISETIMFILE,c=True)
tempoutils.plot_resids()

TOA excision

In [6]:
# TOA excision from orphaned receivers
with open("../../orphan_data.txt",'r') as FILE:
    lines = FILE.readlines()
fes = []
for line in lines:
    if "J2229+2643" in line:
        orphanfe = line.strip().split()[-1]
        # Since there can be multiple entries, just do this the slow way
        tim = Tim(EXCISETIMFILE)
        for toa in tim.toas:
            fe = toa.get('fe')
            if fe == orphanfe:
                fes.append(fe)
                toa.comment(cut="orphaned")
        tim.save(EXCISETIMFILE)
        
# Remove JUMPs
with open(EXCISEPARFILE,'r') as FILE:
    lines = FILE.readlines()

output = ""
for line in lines:
    writeout = True
    for fe in fes:
        if fe in line:
            writeout = False
    if writeout:
        output += line

with open(EXCISEPARFILE,'w') as FILE:
    FILE.write(output)
In [7]:
# TOA excision from outlier analysis
outlierfilenames = np.loadtxt("outlier/J2229+2643.dmx-outliers.txt",unpack=True,usecols=(0,),dtype=np.str,ndmin=1)
outlierchans = np.loadtxt("outlier/J2229+2643.dmx-outliers.txt",unpack=True,usecols=(6,),dtype=np.int,ndmin=1)
outliersubints = np.loadtxt("outlier/J2229+2643.dmx-outliers.txt",unpack=True,usecols=(8,),dtype=np.int,ndmin=1)
outlierpouts = np.loadtxt("outlier/J2229+2643.dmx-outliers.txt",unpack=True,usecols=(12,),dtype=np.float,ndmin=1)

tim = Tim(EXCISETIMFILE)
for toa in tim.toas:
    filename,chan,subint = toa.getFilename(),int(toa.get('chan')),int(toa.get('subint'))
    for i,outlierfilename in enumerate(outlierfilenames):
        if outlierfilename == filename and outlierchans[i] == chan and outliersubints[i] == subint and outlierpouts[i] >= 0.10:
            toa.comment(cut="outlier10")
            break
tim.save(EXCISETIMFILE)
nanoutils.plot_multipage_pdf("outlier/J2229+2643.dmx-residuals.pdf")#,height=400)

Clean up the par file

In [8]:
# Ensure correct DMX binning, create PARFILE and TIMFILE
! ../../util/./dmx_fixer.py J2229+2643.excise.par J2229+2643.excise.tim excise
# Center the EPOCHs
! $TEMPO/util/center_epoch/center_epoch.py J2229+2643.excise.par J2229+2643.excise.tim J2229+2643.excise.par
Processing J2229+2643.excise.par J2229+2643.excise.tim
  read 2515 TOAs, 49 epochs
  running tempo for DMX
  solar-DM ranges:
  low-BW ranges:
  writing 2515 TOAs, 49 epochs
  Starting final tempo run (GLS)
 TEMPO v 13.000 Princeton/ATNF Pulsar Collaboration
 Data from J2229+2643.excise.tim,   Input parameters from J2229+2643.excise.par                                                                                                                                           

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

      1 56498.24197063   0.000000          0.000            1
     11 56498.25807716   0.004803         14.303            1
     21 56498.25807717   0.003185          9.485            1
     31 56498.25807717   0.003317          9.878            1
     41 56498.25807718   0.003039          9.050            1
     51 56498.25807719   0.003526         10.500            1
     61 56669.79994928   0.002795          8.324            1
     71 56669.79994928   0.003022          8.999            1
     81 56669.79994929   0.003996         11.901            1
     91 56669.79994930   0.004120         12.270            1
    101 56669.81804598   0.004948         14.734            1
    111 56669.83326988   0.001579          4.702            1
    121 56739.61130353   0.002393          7.125            1
    131 56739.61130355   0.009416         28.038            1
    141 56739.61130356   0.006566         19.551            1
    151 56739.62936187   0.000549          1.636            1
    161 56755.57081564   0.003963         11.800            1
    171 56755.57081566   0.004299         12.800            1
    181 56755.57081567   0.002278          6.785            1
    191 56844.32468376   0.004596         13.685            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

    201 56844.32468376   0.006037         17.978            1
    301 56887.22259397   0.002738          8.152            1
    401 56950.03899205   0.002791          8.312            1
    501 56997.91107499   0.003155          9.394            1
    601 57095.64368502   0.003022          8.999            1
    701 57138.52777433   0.003564         10.613            1
    801 57201.35097560   0.001619          4.820            1
    901 57242.23880270   0.004069         12.117            1
   1001 57307.06717924   0.003387         10.085            1
   1101 57348.94588274   0.001424          4.240            1
   1201 57376.91029329   0.005585         16.630            1
   1301 57508.55533457   0.008339         24.832            1
   1401 57557.36529599   0.003164          9.423            1
   1501 57594.27538131   0.003342          9.952            1
   1601 57622.21104221   0.002140          6.372            1
   1701 57667.08232353   0.004450         13.251            1
   1801 57710.96218190   0.000652          1.941            1
   1901 57752.83607355   0.003494         10.405            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

   2001 57789.72925786   0.003769         11.224            1
   2101 57804.70583746   0.002816          8.386            1
   2201 57844.58280962   0.005128         15.269            1
   2301 57873.49980186   0.004481         13.343            1
   2401 57907.40705421   0.004925         14.666            1
   2501 57927.37213074   0.004269         12.712            1
   2515 57927.37213077   0.003475         10.348            1

 Weighted RMS residual: pre-fit     1.902 us. Predicted post-fit     1.902 us.
 Chisqr/nfree:   2208.69/ 2450 =     0.901507763   pre/post:   1.00   Wmax:   21.8
 TEMPO v 13.000 Princeton/ATNF Pulsar Collaboration
 Data from J2229+2643.excise.tim,   Input parameters from _tmp.par_                                                                                                                                                       

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

      1 56498.24197063**************************            1
     11 56498.25807716**************************            1
     21 56498.25807717**************************            1
     31 56498.25807717**************************            1
     41 56498.25807718**************************            1
     51 56498.25807719**************************            1
     61 56669.79994928**************************            1
     71 56669.79994928**************************            1
     81 56669.79994929**************************            1
     91 56669.79994930**************************            1
    101 56669.81804598**************************            1
    111 56669.83326988**************************            1
    121 56739.61130353**************************            1
    131 56739.61130355**************************            1
    141 56739.61130356**************************            1
    151 56739.62936187**************************            1
    161 56755.57081564**************************            1
    171 56755.57081566**************************            1
    181 56755.57081567**************************            1
    191 56844.32468376**************************            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

    201 56844.32468376**************************            1
    301 56887.22259397**************************            1
    401 56950.03899205**************************            1
    501 56997.91107499**************************            1
    601 57095.64368502**************************            1
    701 57138.52777433**************************            1
    801 57201.35097560**************************            1
    901 57242.23880270**************************            1
   1001 57307.06717924**************************            1
   1101 57348.94588274**************************            1
   1201 57376.91029329**************************            1
   1301 57508.55533457**************************            1
   1401 57557.36529599**************************            1
   1501 57594.27538131**************************            1
   1601 57622.21104221**************************            1
   1701 57667.08232353**************************            1
   1801 57710.96218190**************************            1
   1901 57752.83607355**************************            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

   2001 57789.72925786**************************            1
   2101 57804.70583746**************************            1
   2201 57844.58280962**************************            1
   2301 57873.49980186**************************            1
   2401 57907.40705421**************************            1
   2501 57927.37213074**************************            1
   2515 57927.37213077**************************            1

 Weighted RMS residual: pre-fit       NaN us. Predicted post-fit     1.904 us.
 Chisqr/nfree:   2214.12/ 2450 =     0.903720901   pre/post:    NaN   Wmax:   21.8
 TEMPO v 13.000 Princeton/ATNF Pulsar Collaboration
 Data from J2229+2643.excise.tim,   Input parameters from J2229+2643.par                                                                                                                                                  

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

      1 56498.24197063   0.000000          0.000            1
     11 56498.25807716   0.004795         14.279            1
     21 56498.25807717   0.003178          9.462            1
     31 56498.25807717   0.003310          9.856            1
     41 56498.25807718   0.003032          9.029            1
     51 56498.25807719   0.003519         10.478            1
     61 56669.79994928   0.002786          8.295            1
     71 56669.79994928   0.003011          8.968            1
     81 56669.79994929   0.003985         11.868            1
     91 56669.79994930   0.004110         12.240            1
    101 56669.81804598   0.004939         14.707            1
    111 56669.83326988   0.001570          4.675            1
    121 56739.61130353   0.002381          7.089            1
    131 56739.61130355   0.009404         28.004            1
    141 56739.61130356   0.006555         19.519            1
    151 56739.62936187   0.000540          1.609            1
    161 56755.57081564   0.003954         11.774            1
    171 56755.57081566   0.004290         12.775            1
    181 56755.57081567   0.002270          6.759            1
    191 56844.32468376   0.004585         13.653            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

    201 56844.32468376   0.006024         17.938            1
    301 56887.22259397   0.002728          8.124            1
    401 56950.03899205   0.002782          8.285            1
    501 56997.91107499   0.003146          9.368            1
    601 57095.64368502   0.003012          8.968            1
    701 57138.52777433   0.003555         10.587            1
    801 57201.35097560   0.001611          4.798            1
    901 57242.23880270   0.004056         12.078            1
   1001 57307.06717924   0.003378         10.060            1
   1101 57348.94588274   0.001412          4.205            1
   1201 57376.91029329   0.005576         16.603            1
   1301 57508.55533457   0.008331         24.809            1
   1401 57557.36529599   0.003156          9.399            1
   1501 57594.27538131   0.003331          9.920            1
   1601 57622.21104221   0.002133          6.352            1
   1701 57667.08232353   0.004448         13.245            1
   1801 57710.96218190   0.000654          1.946            1
   1901 57752.83607355   0.003482         10.369            1

    N       MJD       Residual (p)  Residual (us)  Iteration (of 1)

   2001 57789.72925786   0.003758         11.192            1
   2101 57804.70583746   0.002803          8.347            1
   2201 57844.58280962   0.005120         15.246            1
   2301 57873.49980186   0.004475         13.326            1
   2401 57907.40705421   0.004916         14.639            1
   2501 57927.37213074   0.004260         12.685            1
   2515 57927.37213077   0.003466         10.320            1

 Weighted RMS residual: pre-fit     1.902 us. Predicted post-fit     1.902 us.
 Chisqr/nfree:   2208.69/ 2450 =     0.901508028   pre/post:   1.00   Wmax:   21.8
In [9]:
# Noise parameter addition from outlier analysis
with open("outlier/J2229+2643.dmx-noise.txt",'r') as FILE:
    outlierlines = FILE.readlines()
with open(EXCISEPARFILE,'r') as FILE:
    lines = FILE.readlines()
    
output = ""
for line in lines:
    if "EFAC" in line or "EQUAD" in line or "ECORR" in line or "RNAMP" in line or "RNIDX" in line: #remove these parameters
        continue
    output += line
    
rnoutput = ""
for line in outlierlines: #add these parameters
    if "efac" in line:
        output += line.replace("efac-","T2EFAC -f ")
    elif "equad" in line:
        value = 10**(float(line.split()[-1].strip()))
        string = line.replace("equad-","T2EQUAD -f ")
        output += "%s %0.5f\n"%(" ".join(string.split()[:-1]),value)
    elif "jitter" in line:
        value = 10**(float(line.split()[-1]))
        string = line.replace("jitter-","ECORR -f ")
        output += "%s %0.5f\n"%(" ".join(string.split()[:-1]),value)
    elif "RN-Amplitude" in line:
        value = float(line.split()[1])
        RNAMP = tempoutils.convert_to_RNAMP(value)
        RNAMP = str("%0.4e"%RNAMP).replace('e','D')
        rnoutput += "RNAMP %s\n"%RNAMP
    elif "RN-spectral-index" in line:
        gamma = float(line.split()[1])
        rnoutput += "RNIDX %0.4f\n"%(-gamma)
if not (gamma < 1.0):
    output += rnoutput
    
with open(EXCISEPARFILE,'w') as FILE:
    FILE.write(output)
In [10]:
# Adjust parameters
with open(EXCISEPARFILE,'r') as FILE:
    lines = FILE.readlines()

output = ""
for line in lines:
    output += line
output += "XDOT 0.0 1 0.0\n"

with open(EXCISEPARFILE,'w') as FILE:
    FILE.write(output)
In [11]:
# Copy excise files to working files
call("cp %s %s"%(EXCISEPARFILE,PARFILE))
call("cp %s %s"%(EXCISETIMFILE,TIMFILE))

Run finalize_timing.py

In [12]:
! ../../util/./finalize_timing.py -G J2229+2643.working.par J2229+2643.working.tim
Testing: J2229+2643.working.par J2229+2643.working.tim
Using GLS fitting.
Testing par and tim file for errors:
    no errors found!

No bad DMX ranges found!
Making summary plots.
../../util/./finalize_timing.py:510: MatplotlibDeprecationWarning: pyplot.hold is deprecated.
    Future behavior will be consistent with the long-time default:
    plot commands add elements without first clearing the
    Axes and/or Figure.
  pylab.hold(True)
/opt/conda/envs/python2/lib/python2.7/site-packages/matplotlib/__init__.py:917: UserWarning: axes.hold is deprecated. Please remove it from your matplotlibrc and/or style files.
  warnings.warn(self.msg_depr_set % key)
/opt/conda/envs/python2/lib/python2.7/site-packages/matplotlib/rcsetup.py:152: UserWarning: axes.hold is deprecated, will be removed in 3.0
  warnings.warn("axes.hold is deprecated, will be removed in 3.0")
../../util/./finalize_timing.py:683: MatplotlibDeprecationWarning: pyplot.hold is deprecated.
    Future behavior will be consistent with the long-time default:
    plot commands add elements without first clearing the
    Axes and/or Figure.
  pylab.hold(True)
Testing additional parameters (*** = significant):
                                           RMS(us)      Chi2  NDOF Ftest
                                   initial   1.609   3979.14  2449 --
                            ('M2', 'SINI')   1.609   3977.26  2447 0.561
                                ('PBDOT',)   1.609   3978.41  2448 0.503
                                ('OMDOT',)   1.609   3975.63  2448 0.142
                                 ('EDOT',)   1.609   3977.04  2448 0.256
Testing removal of parameters:
                                   ('PX',)   1.609   3981.32  2450 0.247
                                 ('XDOT',)   1.617   4019.40  2450 6.88e-07 ***
Testing spin freq derivs
                                    ['F2']   1.609   3978.64  2448 0.579
Testing FD terms ( ['FD1', 'FD2'] enabled):
                         no FD  2.026   6312.30  2451
                                     no FD   2.026   6312.30  2451 --
                           FD1 through FD1   1.621   4039.96  2450 1.11e-16 ***
                           FD1 through FD2   1.609   3979.14  2449 1.1e-09 ***
                           FD1 through FD3   1.609   3979.13  2448 0.937
                           FD1 through FD4   1.609   3978.30  2447 0.475
                           FD1 through FD5   1.609   3977.94  2446 0.638
                           FD1 through FD6   1.609   3975.09  2445 0.186
In [13]:
nanoutils.plot_multipage_pdf("J2229+2643.summary.pdf")

Setup noise model directory

In [14]:
NOISEDIR = "noisemodel/"
CHAINSDIR = "noisemodel/chains/J2229+2643/"
call("mkdir %s"%NOISEDIR)
call("mkdir noise_output")
#call("mkdir %s"%CHAINSDIR)
call("cp %s %s%s"%(TIMFILE,NOISEDIR,TIMFILE))
call("cp %s %s%s"%(PARFILE,NOISEDIR,PARFILE))
mkdir: cannot create directory ‘noisemodel/’: File exists

mkdir: cannot create directory ‘noise_output’: File exists

Edit par files to remove noise model terms

In [15]:
with open("%s%s"%(NOISEDIR,PARFILE),'r') as FILE:
    lines = FILE.readlines()
output = ""
for line in lines:
    write = True
    for param in ["T2EFAC","T2EQUAD","ECORR","RNAMP","RNIDX"]:
        if param in line:
            write = False
            continue
    if write:
        output += line
with open("%s%s"%(NOISEDIR,PARFILE),'w') as FILE:
    FILE.write(output)

Run noise analysis using ENTERPRISE (currently only supporting tempo)

In [16]:
enterpriseutils.setup_model(NOISEDIR+PARFILE,NOISEDIR+TIMFILE)
WARNING: Could not find pulsar distance for PSR J2229+2643. Setting value to 1 with 20% uncertainty.
In [17]:
enterpriseutils.setup_sampler(CHAINSDIR)
/home/jovyan/work/shared/nanograv_utils.py:404: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  ipars = np.array([p for p in pars if p not in gpars])
/home/jovyan/work/shared/nanograv_utils.py:421: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  ind = [params.index(p) for p in signal.param_names if p not in gpars]
In [18]:
enterpriseutils.run_sampler(N=NITER)
Finished 20.00 percent in 838.093344 s Acceptance rate = 0.4073Adding DE jump with weight 50
Finished 98.00 percent in 3902.839580 s Acceptance rate = 0.435102
Run Complete
In [19]:
enterpriseutils.process_noise('%s/chain_1.txt'%CHAINSDIR,"noise_output/t1_noise.txt") #need to add in T2 noise!
In [20]:
enterpriseutils.plot_corner('%s/chain_1.txt'%CHAINSDIR)

Copy the noise parameters into the par file

In [21]:
# No need to comment out low-spectral-index red noise as this is taken care of in EnterpriseUtils.process_noise() now
with open("noise_output/t1_noise.txt",'r') as FILE:
    noiselines = FILE.readlines()
with open("%s%s"%(NOISEDIR,PARFILE),'r') as FILE: #read in the noisemodel version
    lines = FILE.readlines()
output = ""
for line in lines:
    if "JUMP" in line:
        for noiseline in noiselines:
            output += noiseline
    output += line
with open("%s"%PARFILE,'w') as FILE: #write out to the main version
    FILE.write(output)

Re-run tempo with noise model

In [22]:
tempoutils.tempo(PARFILE,TIMFILE,G=True,c=True)
call("mv J2229+2643.par %s"%PARFILE)

Re-run finalize_timing.py

In [23]:
! ../../util/./finalize_timing.py -G J2229+2643.working.par J2229+2643.working.tim
Testing: J2229+2643.working.par J2229+2643.working.tim
Using GLS fitting.
Testing par and tim file for errors:
    no errors found!

No bad DMX ranges found!
Making summary plots.
../../util/./finalize_timing.py:510: MatplotlibDeprecationWarning: pyplot.hold is deprecated.
    Future behavior will be consistent with the long-time default:
    plot commands add elements without first clearing the
    Axes and/or Figure.
  pylab.hold(True)
/opt/conda/envs/python2/lib/python2.7/site-packages/matplotlib/__init__.py:917: UserWarning: axes.hold is deprecated. Please remove it from your matplotlibrc and/or style files.
  warnings.warn(self.msg_depr_set % key)
/opt/conda/envs/python2/lib/python2.7/site-packages/matplotlib/rcsetup.py:152: UserWarning: axes.hold is deprecated, will be removed in 3.0
  warnings.warn("axes.hold is deprecated, will be removed in 3.0")
../../util/./finalize_timing.py:683: MatplotlibDeprecationWarning: pyplot.hold is deprecated.
    Future behavior will be consistent with the long-time default:
    plot commands add elements without first clearing the
    Axes and/or Figure.
  pylab.hold(True)
Testing additional parameters (*** = significant):
                                           RMS(us)      Chi2  NDOF Ftest
                                   initial   1.728   2443.94  2449 --
                            ('M2', 'SINI')   1.727   2442.52  2447 0.491
                                ('PBDOT',)   1.728   2443.36  2448 0.446
                                ('OMDOT',)   1.727   2442.22  2448 0.189
                                 ('EDOT',)   1.727   2442.59  2448 0.245
Testing removal of parameters:
                                   ('PX',)   1.728   2445.44  2450 0.22
                                 ('XDOT',)   1.737   2469.92  2450 3.61e-07 ***
Testing spin freq derivs
                                    ['F2']   1.728   2443.77  2448 0.68
Testing FD terms ( ['FD1', 'FD2'] enabled):
                         no FD  2.061   3478.14  2451
                                     no FD   2.061   3478.14  2451 --
                           FD1 through FD1   1.742   2483.99  2450 1.11e-16 ***
                           FD1 through FD2   1.728   2443.94  2449 2.81e-10 ***
                           FD1 through FD3   1.728   2443.94  2448 xxx
                           FD1 through FD4   1.728   2443.46  2447 0.488
                           FD1 through FD5   1.728   2443.25  2446 0.647
                           FD1 through FD6   1.728   2443.22  2445 0.862
In [24]:
nanoutils.plot_multipage_pdf("J2229+2643.summary.pdf")

Push to git

In [25]:
!git add J2229+2643.working.par J2229+2643.working.tim process.ipynb parameterchange.txt
!git commit -m "J2229+2643 run" J2229+2643.working.par J2229+2643.working.tim process.ipynb parameterchange.txt
!git pull
!git push
[master 71af23c] J2229+2643 run
 2 files changed, 345 insertions(+), 337 deletions(-)
 rewrite working/J2229+2643/J2229+2643.working.par (78%)
Already up-to-date.
Counting objects: 6, done.
Delta compression using up to 40 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 3.41 KiB | 0 bytes/s, done.
Total 6 (delta 4), reused 0 (delta 0)
To workspace@git.nanograv.org:timing/nanograv_timing_2017
   88e1c81..71af23c  master -> master