Skip to content
Snippets Groups Projects
Commit 2834bb6e authored by David Keitel's avatar David Keitel
Browse files

gridsearch: optionally write full transient-Fstat maps to file(s)

 -new output: full (t0,tau) Fstat map,
  if bands in those params are searched
 -one file per Doppler grid point
parent 9de7652f
No related branches found
No related tags found
No related merge requests found
...@@ -35,7 +35,8 @@ search1 = pyfstat.GridSearch( ...@@ -35,7 +35,8 @@ search1 = pyfstat.GridSearch(
sftfilepattern=os.path.join(datadir,'*simulated_transient_signal*sft'), sftfilepattern=os.path.join(datadir,'*simulated_transient_signal*sft'),
F0s=F0s, F1s=F1s, F2s=F2s, Alphas=Alphas, Deltas=Deltas, tref=tref, F0s=F0s, F1s=F1s, F2s=F2s, Alphas=Alphas, Deltas=Deltas, tref=tref,
minStartTime=minStartTime, maxStartTime=maxStartTime, minStartTime=minStartTime, maxStartTime=maxStartTime,
BSGL=False) BSGL=False,
outputTransientFstatMap=True)
search1.run() search1.run()
search1.print_max_twoF() search1.print_max_twoF()
...@@ -49,7 +50,8 @@ search2 = pyfstat.GridSearch( ...@@ -49,7 +50,8 @@ search2 = pyfstat.GridSearch(
F0s=F0s, F1s=F1s, F2s=F2s, Alphas=Alphas, Deltas=Deltas, tref=tref, F0s=F0s, F1s=F1s, F2s=F2s, Alphas=Alphas, Deltas=Deltas, tref=tref,
minStartTime=minStartTime, maxStartTime=maxStartTime, minStartTime=minStartTime, maxStartTime=maxStartTime,
transientWindowType='rect', t0Band=Tspan-2*Tsft, tauBand=Tspan, transientWindowType='rect', t0Band=Tspan-2*Tsft, tauBand=Tspan,
BSGL=False) BSGL=False,
outputTransientFstatMap=True)
search2.run() search2.run()
search2.print_max_twoF() search2.print_max_twoF()
......
...@@ -642,7 +642,6 @@ class ComputeFstat(BaseSearchClass): ...@@ -642,7 +642,6 @@ class ComputeFstat(BaseSearchClass):
asini=None, period=None, ecc=None, tp=None, asini=None, period=None, ecc=None, tp=None,
argp=None): argp=None):
""" Returns twoF or ln(BSGL) fully-coherently at a single point """ """ Returns twoF or ln(BSGL) fully-coherently at a single point """
self.PulsarDopplerParams.fkdot = np.array([F0, F1, F2, 0, 0, 0, 0]) self.PulsarDopplerParams.fkdot = np.array([F0, F1, F2, 0, 0, 0, 0])
self.PulsarDopplerParams.Alpha = Alpha self.PulsarDopplerParams.Alpha = Alpha
self.PulsarDopplerParams.Delta = Delta self.PulsarDopplerParams.Delta = Delta
...@@ -681,10 +680,11 @@ class ComputeFstat(BaseSearchClass): ...@@ -681,10 +680,11 @@ class ComputeFstat(BaseSearchClass):
# F-stat computation # F-stat computation
self.windowRange.tau = int(2*self.Tsft) self.windowRange.tau = int(2*self.Tsft)
FS = lalpulsar.ComputeTransientFstatMap( self.FstatMap = lalpulsar.ComputeTransientFstatMap(
self.FstatResults.multiFatoms[0], self.windowRange, False) self.FstatResults.multiFatoms[0], self.windowRange, False)
F_mn = self.FstatMap.F_mn.data
twoF = 2*np.max(FS.F_mn.data) twoF = 2*np.max(F_mn)
if self.BSGL is False: if self.BSGL is False:
if np.isnan(twoF): if np.isnan(twoF):
return 0 return 0
...@@ -705,7 +705,7 @@ class ComputeFstat(BaseSearchClass): ...@@ -705,7 +705,7 @@ class ComputeFstat(BaseSearchClass):
# to return BSGL # to return BSGL
# FIXME: should we instead compute BSGL over the whole F_mn # FIXME: should we instead compute BSGL over the whole F_mn
# and return the maximum of that? # and return the maximum of that?
idx_maxTwoF = np.argmax(FS.F_mn.data) idx_maxTwoF = np.argmax(F_mn)
self.twoFX[0] = 2*FS0.F_mn.data[idx_maxTwoF] self.twoFX[0] = 2*FS0.F_mn.data[idx_maxTwoF]
self.twoFX[1] = 2*FS1.F_mn.data[idx_maxTwoF] self.twoFX[1] = 2*FS1.F_mn.data[idx_maxTwoF]
...@@ -751,10 +751,11 @@ class ComputeFstat(BaseSearchClass): ...@@ -751,10 +751,11 @@ class ComputeFstat(BaseSearchClass):
self.transientWindowType = 'none' self.transientWindowType = 'none'
self.init_computefstatistic_single_point() self.init_computefstatistic_single_point()
for tau in taus: for tau in taus:
twoFs.append(self.get_fullycoherent_twoF( detstat = self.get_fullycoherent_twoF(
tstart=tstart, tend=tstart+tau, F0=F0, F1=F1, F2=F2, tstart=tstart, tend=tstart+tau, F0=F0, F1=F1, F2=F2,
Alpha=Alpha, Delta=Delta, asini=asini, period=period, ecc=ecc, Alpha=Alpha, Delta=Delta, asini=asini, period=period, ecc=ecc,
tp=tp, argp=argp)) tp=tp, argp=argp)
twoFs.append(detstat)
return taus, np.array(twoFs) return taus, np.array(twoFs)
......
...@@ -32,7 +32,8 @@ class GridSearch(BaseSearchClass): ...@@ -32,7 +32,8 @@ class GridSearch(BaseSearchClass):
nsegs=1, BSGL=False, minCoverFreq=None, maxCoverFreq=None, nsegs=1, BSGL=False, minCoverFreq=None, maxCoverFreq=None,
detectors=None, SSBprec=None, injectSources=None, detectors=None, SSBprec=None, injectSources=None,
input_arrays=False, assumeSqrtSX=None, input_arrays=False, assumeSqrtSX=None,
transientWindowType=None, t0Band=None, tauBand=None): transientWindowType=None, t0Band=None, tauBand=None,
outputTransientFstatMap=False):
""" """
Parameters Parameters
---------- ----------
...@@ -59,6 +60,9 @@ class GridSearch(BaseSearchClass): ...@@ -59,6 +60,9 @@ class GridSearch(BaseSearchClass):
and tau in (2*Tsft,2*Tsft+tauBand). and tau in (2*Tsft,2*Tsft+tauBand).
if =0, only compute CW Fstat with t0=minStartTime, if =0, only compute CW Fstat with t0=minStartTime,
tau=maxStartTime-minStartTime. tau=maxStartTime-minStartTime.
outputTransientFstatMap: bool
if true, write output files for (t0,tau) Fstat maps
(one file for each doppler grid point!)
For all other parameters, see `pyfstat.ComputeFStat` for details For all other parameters, see `pyfstat.ComputeFStat` for details
""" """
...@@ -157,8 +161,15 @@ class GridSearch(BaseSearchClass): ...@@ -157,8 +161,15 @@ class GridSearch(BaseSearchClass):
data = [] data = []
for vals in tqdm(self.input_data): for vals in tqdm(self.input_data):
FS = self.search.get_det_stat(*vals) detstat = self.search.get_det_stat(*vals)
data.append(list(vals) + [FS]) windowRange = getattr(self.search, 'windowRange', None)
FstatMap = getattr(self.search, 'FstatMap', None)
data.append(list(vals) + [detstat])
if self.outputTransientFstatMap and self.transientWindowType:
tCWfile = os.path.splitext(self.out_file)[0]+'_tCW_%.16f_%.16f_%.16f_%.16g_%.16g.dat' % (vals[2],vals[5],vals[6],vals[3],vals[4]) # freq alpha delta f1dot f2dot
fo = lal.FileOpen(tCWfile, 'w')
lalpulsar.write_transientFstatMap_to_fp ( fo, FstatMap, windowRange, None )
del fo # instead of lal.FileClose() which is not SWIG-exported
data = np.array(data, dtype=np.float) data = np.array(data, dtype=np.float)
if return_data: if return_data:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment