Processing Script for J1923+2515

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/J0023+0923.working.par
M	working/J0023+0923/J0023+0923.working.tim
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/process.ipynb
M	working/J1022+1001/J1022+1001.working.par
M	working/J1022+1001/J1022+1001.working.tim
M	working/J1022+1001/process.ipynb
M	working/J1024-0719/J1024-0719.working.par
M	working/J1024-0719/J1024-0719.working.tim
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/J1713+0747.working.par
M	working/J1713+0747/J1713+0747.working.tim
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/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/J2317+1439.working.par
M	working/J2317+1439/J2317+1439.working.tim
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 = "J1923+2515.excise.par"
EXCISETIMFILE = "J1923+2515.excise.tim"
PARFILE = "J1923+2515.working.par"
TIMFILE = "J1923+2515.working.tim"
# Copy initial par/tim files into working files
call("cp J1923+2515.dmx.par %s"%EXCISEPARFILE)
call("cp J1923+2515.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 outlier analysis
outlierfilenames = np.loadtxt("outlier/J1923+2515.dmx-outliers.txt",unpack=True,usecols=(0,),dtype=np.str,ndmin=1)
outlierchans = np.loadtxt("outlier/J1923+2515.dmx-outliers.txt",unpack=True,usecols=(6,),dtype=np.int,ndmin=1)
outliersubints = np.loadtxt("outlier/J1923+2515.dmx-outliers.txt",unpack=True,usecols=(8,),dtype=np.int,ndmin=1)
outlierpouts = np.loadtxt("outlier/J1923+2515.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/J1923+2515.dmx-residuals.pdf")#,height=400)

Clean up the par file

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

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

      1 55791.09542285   0.000000          0.000            1
     11 55791.09542288   0.006510         24.660            1
     21 55819.97263140  -0.000175         -0.662            1
     31 55850.92390003   0.002831         10.726            1
     41 55877.82489991   0.001565          5.927            1
     51 55877.85110587   0.001457          5.518            1
     61 55934.67662667   0.003090         11.704            1
     71 55996.53080229   0.001187          4.497            1
     81 55996.53184293  -0.000835         -3.164            1
     91 55996.54884626   0.001230          4.661            1
    101 55996.54884628   0.000976          3.697            1
    111 55996.54884629   0.000866          3.280            1
    121 56020.42981889   0.001223          4.634            1
    131 56020.42997930   0.001015          3.845            1
    141 56020.44660421   0.001542          5.843            1
    151 56020.44660422   0.001351          5.119            1
    161 56020.44660423   0.001690          6.404            1
    171 56020.44660424   0.001672          6.333            1
    181 56020.44660425   0.000941          3.565            1
    191 56059.33250989  -0.001543         -5.845            1

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

    201 56059.33250991   0.001797          6.808            1
    301 56250.80161112   0.001713          6.491            1
    401 56305.64258322   0.002283          8.650            1
    501 56383.44746244   0.001529          5.792            1
    601 56446.25211580   0.001371          5.194            1
    701 56511.09684211   0.001134          4.296            1
    801 56571.93219404   0.001160          4.395            1
    901 56613.81037322   0.002170          8.221            1
   1001 56654.72634262   0.002420          9.167            1
   1101 56883.10005560   0.001669          6.322            1
   1201 56951.91224300   0.001725          6.533            1
   1301 56992.82226427   0.003552         13.456            1
   1401 57095.49257373   0.001664          6.302            1
   1501 57138.37905649   0.001453          5.503            1
   1601 57201.20237659   0.001392          5.274            1
   1701 57265.00802190   0.001304          4.941            1
   1801 57327.87406149   0.001148          4.348            1
   1901 57376.73817274   0.001710          6.479            1

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

   2001 57433.55497458   0.001262          4.779            1
   2101 57536.28329475   0.003328         12.608            1
   2201 57579.14946192   0.001764          6.684            1
   2301 57622.03920243   0.001382          5.235            1
   2401 57666.90679058   0.003190         12.083            1
   2501 57710.78580427   0.002499          9.466            1
   2601 57752.67395995   0.000932          3.531            1
   2701 57775.62469666   0.001273          4.823            1
   2801 57804.54793023   0.001109          4.200            1
   2901 57844.43956900   0.001529          5.793            1
   3001 57873.34119835   0.001796          6.804            1
   3101 57885.32434663   0.002139          8.103            1
   3201 57927.22225194  -0.002894        -10.961            1
   3216 57927.22225196   0.002468          9.350            1

 Weighted RMS residual: pre-fit    17.616 us. Predicted post-fit    17.546 us.
 Chisqr/nfree: 244611.13/ 3134 =    78.050775833   pre/post:   1.00   Wmax:   40.4
 TEMPO v 13.000 Princeton/ATNF Pulsar Collaboration
 Data from J1923+2515.excise.tim,   Input parameters from _tmp.par_                                                                                                                                                       

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

      1 55791.09542285**************************            1
     11 55791.09542288**************************            1
     21 55819.97263140**************************            1
     31 55850.92390003**************************            1
     41 55877.82489991**************************            1
     51 55877.85110587**************************            1
     61 55934.67662667**************************            1
     71 55996.53080229**************************            1
     81 55996.53184293**************************            1
     91 55996.54884626**************************            1
    101 55996.54884628**************************            1
    111 55996.54884629**************************            1
    121 56020.42981889**************************            1
    131 56020.42997930**************************            1
    141 56020.44660421**************************            1
    151 56020.44660422**************************            1
    161 56020.44660423**************************            1
    171 56020.44660424**************************            1
    181 56020.44660425**************************            1
    191 56059.33250989**************************            1

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

    201 56059.33250991**************************            1
    301 56250.80161112**************************            1
    401 56305.64258322**************************            1
    501 56383.44746244**************************            1
    601 56446.25211580**************************            1
    701 56511.09684211**************************            1
    801 56571.93219404**************************            1
    901 56613.81037322**************************            1
   1001 56654.72634262**************************            1
   1101 56883.10005560**************************            1
   1201 56951.91224300**************************            1
   1301 56992.82226427**************************            1
   1401 57095.49257373**************************            1
   1501 57138.37905649**************************            1
   1601 57201.20237659**************************            1
   1701 57265.00802190**************************            1
   1801 57327.87406149**************************            1
   1901 57376.73817274**************************            1

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

   2001 57433.55497458**************************            1
   2101 57536.28329475**************************            1
   2201 57579.14946192**************************            1
   2301 57622.03920243**************************            1
   2401 57666.90679058**************************            1
   2501 57710.78580427**************************            1
   2601 57752.67395995**************************            1
   2701 57775.62469666**************************            1
   2801 57804.54793023**************************            1
   2901 57844.43956900**************************            1
   3001 57873.34119835**************************            1
   3101 57885.32434663**************************            1
   3201 57927.22225194**************************            1
   3216 57927.22225196**************************            1

 Weighted RMS residual: pre-fit515442.004 us. Predicted post-fit    17.546 us.
 Chisqr/nfree: 244613.47/ 3134 =    78.051520636   pre/post:*******   Wmax:   40.4
 TEMPO v 13.000 Princeton/ATNF Pulsar Collaboration
 Data from J1923+2515.excise.tim,   Input parameters from J1923+2515.par                                                                                                                                                  

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

      1 55791.09542285   0.000000          0.000            1
     11 55791.09542288   0.006523         24.710            1
     21 55819.97263140   0.000827          3.131            1
     31 55850.92390003   0.002919         11.059            1
     41 55877.82489991   0.001172          4.440            1
     51 55877.85110587   0.001223          4.632            1
     61 55934.67662667   0.003338         12.643            1
     71 55996.53080229   0.001128          4.274            1
     81 55996.53184293  -0.000895         -3.390            1
     91 55996.54884626   0.001018          3.855            1
    101 55996.54884628   0.000765          2.897            1
    111 55996.54884629   0.000650          2.461            1
    121 56020.42981889   0.001065          4.034            1
    131 56020.42997930   0.000857          3.246            1
    141 56020.44660421   0.001319          4.998            1
    151 56020.44660422   0.001129          4.277            1
    161 56020.44660423   0.001466          5.555            1
    171 56020.44660424   0.001449          5.491            1
    181 56020.44660425   0.000718          2.720            1
    191 56059.33250989  -0.001764         -6.684            1

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

    201 56059.33250991   0.001575          5.966            1
    301 56250.80161112   0.001495          5.662            1
    401 56305.64258322   0.002064          7.820            1
    501 56383.44746244   0.001306          4.948            1
    601 56446.25211580   0.001147          4.346            1
    701 56511.09684211   0.000913          3.458            1
    801 56571.93219404   0.000946          3.582            1
    901 56613.81037322   0.001954          7.403            1
   1001 56654.72634262   0.002201          8.338            1
   1101 56883.10005560   0.001449          5.489            1
   1201 56951.91224300   0.001503          5.693            1
   1301 56992.82226427   0.003335         12.634            1
   1401 57095.49257373   0.001445          5.474            1
   1501 57138.37905649   0.001235          4.677            1
   1601 57201.20237659   0.001171          4.437            1
   1701 57265.00802190   0.001090          4.129            1
   1801 57327.87406149   0.000932          3.532            1
   1901 57376.73817274   0.001491          5.647            1

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

   2001 57433.55497458   0.001039          3.935            1
   2101 57536.28329475   0.003108         11.774            1
   2201 57579.14946192   0.001541          5.837            1
   2301 57622.03920243   0.001168          4.425            1
   2401 57666.90679058   0.002974         11.268            1
   2501 57710.78580427   0.002278          8.628            1
   2601 57752.67395995   0.000720          2.728            1
   2701 57775.62469666   0.001051          3.982            1
   2801 57804.54793023   0.000887          3.362            1
   2901 57844.43956900   0.001312          4.970            1
   3001 57873.34119835   0.001571          5.950            1
   3101 57885.32434663   0.001922          7.279            1
   3201 57927.22225194  -0.003117        -11.806            1
   3216 57927.22225196   0.002246          8.509            1

 Weighted RMS residual: pre-fit    17.546 us. Predicted post-fit    17.546 us.
 Chisqr/nfree: 244611.13/ 3134 =    78.050775380   pre/post:   1.00   Wmax:   40.4
In [8]:
# Noise parameter addition from outlier analysis
with open("outlier/J1923+2515.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 [9]:
# Additional call to cull and plot
tempoutils.cull("-r55u",EXCISETIMFILE,EXCISETIMFILE+".cull")
call("mv %s.cull %s"%(EXCISETIMFILE,EXCISETIMFILE))
tempoutils.tempo(EXCISEPARFILE,EXCISETIMFILE,plot=True)
In [10]:
# Copy excise files to working files
call("cp %s %s"%(EXCISEPARFILE,PARFILE))
call("cp %s %s"%(EXCISETIMFILE,TIMFILE))

Run finalize_timing.py

In [11]:
! ../../util/./finalize_timing.py -G J1923+2515.working.par J1923+2515.working.tim
Testing: J1923+2515.working.par J1923+2515.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   2.062   4851.90  3118 --
Testing removal of parameters:
                                   ('PX',)   2.063   4855.97  3119 0.106
Testing spin freq derivs
                                    ['F2']   2.062   4851.88  3117 0.91
Testing FD terms ( ['FD1'] enabled):
                         no FD  2.180   5425.27  3119
                                     no FD   2.180   5425.27  3119 --
                           FD1 through FD1   2.062   4851.90  3118 1.11e-16 ***
                           FD1 through FD2   2.062   4851.70  3117 0.72
                           FD1 through FD3   2.061   4847.82  3116 0.114
                           FD1 through FD4   2.061   4846.73  3115 0.403
                           FD1 through FD5   2.060   4845.29  3114 0.336
                           FD1 through FD6   2.060   4844.71  3113 0.542
In [12]:
nanoutils.plot_multipage_pdf("J1923+2515.summary.pdf")

Setup noise model directory

In [13]:
NOISEDIR = "noisemodel/"
CHAINSDIR = "noisemodel/chains/J1923+2515/"
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 [14]:
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 [15]:
enterpriseutils.setup_model(NOISEDIR+PARFILE,NOISEDIR+TIMFILE)
WARNING: Could not find pulsar distance for PSR J1923+2515. Setting value to 1 with 20% uncertainty.
In [16]:
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 [17]:
enterpriseutils.run_sampler(N=NITER)
Finished 20.00 percent in 1372.192375 s Acceptance rate = 0.3428Adding DE jump with weight 50
Finished 98.00 percent in 6604.028410 s Acceptance rate = 0.333776
Run Complete
In [18]:
enterpriseutils.process_noise('%s/chain_1.txt'%CHAINSDIR,"noise_output/t1_noise.txt") #need to add in T2 noise!
In [19]:
enterpriseutils.plot_corner('%s/chain_1.txt'%CHAINSDIR)

Copy the noise parameters into the par file

In [20]:
# 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 [21]:
tempoutils.tempo(PARFILE,TIMFILE,G=True,c=True)
call("mv J1923+2515.par %s"%PARFILE)

Re-run finalize_timing.py

In [22]:
! ../../util/./finalize_timing.py -G J1923+2515.working.par J1923+2515.working.tim
Testing: J1923+2515.working.par J1923+2515.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   3.490   3124.60  3118 --
Testing removal of parameters:
                                   ('PX',)   3.414   3128.03  3119 0.0644
Testing spin freq derivs
                                    ['F2']   3.505   3124.45  3117 0.699
Testing FD terms ( ['FD1'] enabled):
                         no FD  3.853   3475.74  3119
                                     no FD   3.853   3475.74  3119 --
                           FD1 through FD1   3.490   3124.60  3118 1.11e-16 ***
                           FD1 through FD2   3.505   3123.02  3117 0.209
                           FD1 through FD3   3.514   3120.02  3116 0.0836
                           FD1 through FD4   3.512   3119.48  3115 0.463
                           FD1 through FD5   3.512   3119.42  3114 0.807
                           FD1 through FD6   3.511   3119.39  3113 0.863
In [23]:
nanoutils.plot_multipage_pdf("J1923+2515.summary.pdf")

Push to git

In [24]:
!git add J1923+2515.working.par J1923+2515.working.tim process.ipynb
!git commit -m "J1923+2515 run" J1923+2515.working.par J1923+2515.working.tim process.ipynb    
!git pull
!git push
[master eac76dc] J1923+2515 run
 3 files changed, 1220 insertions(+), 487 deletions(-)
 rewrite working/J1923+2515/J1923+2515.working.par (69%)
Already up-to-date.
Counting objects: 7, done.
Delta compression using up to 40 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 28.39 KiB | 0 bytes/s, done.
Total 7 (delta 6), reused 0 (delta 0)
To workspace@git.nanograv.org:timing/nanograv_timing_2017
   9bf16b6..eac76dc  master -> master