26 #include <lal/LALStdio.h>
27 #include <lal/LALStdlib.h>
29 #include <lal/LALInspiral.h>
30 #include <lal/LALCache.h>
31 #include <lal/LALFrStream.h>
32 #include <lal/TimeFreqFFT.h>
33 #include <lal/LALDetectors.h>
34 #include <lal/AVFactories.h>
35 #include <lal/ResampleTimeSeries.h>
36 #include <lal/TimeSeries.h>
37 #include <lal/FrequencySeries.h>
38 #include <lal/Units.h>
40 #include <lal/StringInput.h>
41 #include <lal/VectorOps.h>
42 #include <lal/Random.h>
43 #include <lal/LALNoiseModels.h>
44 #include <lal/XLALError.h>
45 #include <lal/GenerateInspiral.h>
47 #include <lal/SeqFactories.h>
48 #include <lal/DetectorSite.h>
49 #include <lal/GenerateInspiral.h>
50 #include <lal/GeneratePPNInspiral.h>
51 #include <lal/SimulateCoherentGW.h>
52 #include <lal/LIGOMetadataTables.h>
53 #include <lal/LIGOMetadataUtils.h>
54 #include <lal/LIGOMetadataInspiralUtils.h>
55 #include <lal/LIGOMetadataRingdownUtils.h>
56 #include <lal/LALInspiralBank.h>
57 #include <lal/FindChirp.h>
58 #include <lal/LALInspiralBank.h>
59 #include <lal/GenerateInspiral.h>
60 #include <lal/NRWaveInject.h>
61 #include <lal/GenerateInspRing.h>
63 #include <lal/LALInspiral.h>
64 #include <lal/LALSimulation.h>
66 #include <lal/LALInference.h>
67 #include <lal/LALInferenceReadData.h>
68 #include <lal/LALInferenceLikelihood.h>
69 #include <lal/LALInferenceTemplate.h>
72 #include <gsl/gsl_errno.h>
73 #include <gsl/gsl_rng.h>
74 #include <gsl/gsl_randist.h>
75 #include <gsl/gsl_fft_complex.h>
76 #include <gsl/gsl_fft_halfcomplex.h>
77 #include <gsl/gsl_spline.h>
78 #include <gsl/gsl_statistics.h>
80 #define max(a,b) (((a)>(b))?(a):(b))
83 static double chisqr(
int Dof,
double Cv);
84 static double igf(
double S,
double Z);
92 const REAL8FFTPlan *plan,
103 if ( ! spectrum || ! tseries || ! plan )
105 if ( ! spectrum->
data || ! tseries->
data )
107 if ( tseries->
deltaT <= 0.0 )
111 numseg = 1 + (reclen -
seglen)/stride;
115 if ( (numseg - 1)*stride +
seglen != reclen )
124 for ( seg = 0; seg < numseg; ++seg )
127 if ( ! work[seg].
data )
134 for ( seg = 0; seg < numseg; ++seg )
140 savevec = *tseries->
data;
144 tseries->
data->
data += seg * stride;
150 *tseries->
data = savevec;
168 double meanVal = 0, normVal = 0;
172 float Observed[numBins];
173 float Expected[numBins];
174 int min = 0;
int max = 100;
177 double CriticalValue = 0.0;
178 double XSqr, XSqrTerm;
179 double bin_val, expected_val;
190 for ( seg = 0; seg < numseg; ++seg ) {
192 meanVal = meanVal + work[seg].
data->
data[
k];
195 meanVal = meanVal / (double) numseg;
197 for (
l = 0;
l < numBins; ++
l ) {
203 for ( seg = 0; seg < numseg; ++seg ) {
204 normVal = 2 * bin[seg] / meanVal;
207 Observed[binIndex] = Observed[binIndex] + 1;
213 for (
l = 0;
l < numBins; ++
l ) {
216 expected_val = count *
chisqr(2,bin_val);
218 Expected[
l] = expected_val;
220 XSqr = Observed[
l] - Expected[
l];
222 XSqrTerm = (float) ((XSqr * XSqr) / Expected[
l]);
224 CriticalValue = CriticalValue + XSqrTerm;
241 if(Cv < 0 || Dof < 1)
245 double K = ((double)Dof) * 0.5;
249 return exp(-1.0 * X);
252 double PValue =
igf(K, X);
253 if(isnan(PValue) || isinf(PValue))
260 return (1.0 - PValue);
263 static double igf(
double S,
double Z)
269 double Sc = (1.0 / S);
277 for(
int k = 0;
k < 200;
k++)
282 Sum += (Nom / Denom);
292 for (
i = 0;
i <
n; ++
i )
306 const REAL8FFTPlan *plan,
317 if ( ! spectrum || ! tseries || ! plan )
319 if ( ! spectrum->
data || ! tseries->
data )
321 if ( tseries->
deltaT <= 0.0 )
325 numseg = 1 + (reclen -
seglen)/stride;
329 if ( (numseg - 1)*stride +
seglen != reclen )
337 for ( seg = 0; seg < numseg; ++seg )
340 if ( ! work[seg].
data )
347 for ( seg = 0; seg < numseg; ++seg )
353 savevec = *tseries->
data;
357 tseries->
data->
data += seg * stride;
363 *tseries->
data = savevec;
381 double meanVal = 0, normVal = 0;
385 float Observed[numBins];
386 float Expected[numBins];
387 float ObservedCDF[numBins];
388 float ExpectedCDF[numBins];
389 int min = 0;
int max = 100;
392 float ObservedSum, ExpectedSum;
393 double KS, KSVal, nKSsquared;
394 double bin_val, expected_val;
404 for ( seg = 0; seg < numseg; ++seg ) {
406 meanVal = meanVal + work[seg].
data->
data[
k];
409 meanVal = meanVal / (double) numseg;
411 for (
l = 0;
l < numBins; ++
l ) {
414 ObservedCDF[
l] = 0.0;
415 ExpectedCDF[
l] = 0.0;
419 for ( seg = 0; seg < numseg; ++seg ) {
420 normVal = 2 * bin[seg] / meanVal;
423 Observed[binIndex] = Observed[binIndex] + 1;
427 for (
l = 0;
l < numBins; ++
l ) {
430 expected_val = count *
chisqr(2,bin_val);
432 Expected[
l] = expected_val;
439 for (
l = 0;
l < numBins; ++
l ) {
442 ObservedCDF[
l] = ObservedCDF[
l-1] + Observed[
l];
443 ExpectedCDF[
l] = ExpectedCDF[
l-1] + Expected[
l];
447 ObservedCDF[
l] = Observed[
l];
448 ExpectedCDF[
l] = Expected[
l];
451 ObservedSum = ObservedSum + Observed[
l];
452 ExpectedSum = ExpectedSum + Expected[
l];
458 for (
l = 0;
l < numBins; ++
l ) {
460 ObservedCDF[
l] = ObservedCDF[
l]/ObservedSum;
461 ExpectedCDF[
l] = ExpectedCDF[
l]/ExpectedSum;
463 KSVal = ObservedCDF[
l] - ExpectedCDF[
l];
475 nKSsquared = count * KS * KS;
476 pvalues[
k] = 2*exp(-(2.000071+.331/sqrt(count)+1.409/count)*nKSsquared);
493 const REAL8FFTPlan *plan,
508 int *PSDtimesIndex, segindex;
510 if ( ! spectrum || ! tseries || ! plan )
512 if ( ! spectrum->
data || ! tseries->
data )
514 if ( tseries->
deltaT <= 0.0 )
518 numseg = 1 + (reclen -
seglen)/stride;
522 if ( (numseg - 1)*stride +
seglen != reclen )
531 for ( seg = 0; seg < numseg; ++seg )
534 if ( ! work[seg].
data )
542 PSDtimes =
XLALMalloc( (numseg-1) *
sizeof( *PSDtimes ) );
543 PSDtimesIndex =
XLALMalloc( (numseg-1) *
sizeof( *PSDtimesIndex ) );
547 for ( seg = 0; seg < numseg; ++seg )
553 savevec = *tseries->
data;
556 if ((PSDtime > trigtime - 0.5) & (PSDtime < trigtime + 0.5))
560 PSDtimes[count] = PSDtime;
561 PSDtimesIndex[count] = seg;
568 tseries->
data->
data += seg * stride;
574 *tseries->
data = savevec;
585 bin =
XLALMalloc( (numseg) *
sizeof( *bin ) );
593 double SUMx = 0, SUMy = 0, SUMxy = 0, SUMxx = 0;
594 double f, t, datavallog;
595 double slope, y_intercept, y_estimate, y_estimate_log;
609 for ( seg = 0; seg < numseg; ++seg ) {
615 count = 0; SUMx = 0, SUMy = 0, SUMxy = 0, SUMxx = 0;
616 for ( seg = 0; seg < numseg-1; ++seg ) {
617 segindex = PSDtimesIndex[seg];
619 t = PSDtimes[segindex];
620 datavallog = log10(bin[segindex]);
623 SUMy = SUMy + datavallog;
624 SUMxy = SUMxy + t*datavallog;
631 slope = ( SUMx*SUMy - count*SUMxy ) / ( SUMx*SUMx - count*SUMxx );
632 y_intercept = ( SUMy - slope*SUMx ) / count;
634 y_estimate_log = slope*trigtime + y_intercept;
635 y_estimate = pow(10.0,y_estimate_log);
645 spectrum->
f0 = work->
f0;
663 const REAL8FFTPlan *plan,
674 if ( ! spectrum || ! tseries || ! plan )
676 if ( ! spectrum->
data || ! tseries->
data )
678 if ( tseries->
deltaT <= 0.0 )
682 numseg = 1 + (reclen -
seglen)/stride;
686 if ( (numseg - 1)*stride +
seglen != reclen )
695 for ( seg = 0; seg < numseg; ++seg )
698 if ( ! work[seg].
data )
705 for ( seg = 0; seg < numseg; ++seg )
711 savevec = *tseries->
data;
715 tseries->
data->
data += seg * stride;
721 *tseries->
data = savevec;
740 double SUMx = 0, SUMy = 0, SUMxy = 0, SUMxx = 0;
741 double res, slope, y_intercept, y_estimate_log;
743 double f, dataval, flog, datavallog;
752 float frequencyBands[4];
753 frequencyBands[0] = 0, frequencyBands[1] = 10, frequencyBands[2] = 100, frequencyBands[3] = 2048;
755 for (
l = 0;
l < numBands-1; ++
l)
758 count = 0, SUMx = 0, SUMy = 0, SUMxy = 0, SUMxx = 0;
766 datavallog = log10(dataval);
768 if ((f>=frequencyBands[
l]) & (f<=frequencyBands[
l+1])) {
771 SUMy = SUMy + datavallog;
772 SUMxy = SUMxy + flog*datavallog;
773 SUMxx = SUMxx + flog*flog;
780 slope = ( SUMx*SUMy - count*SUMxy ) / ( SUMx*SUMx - count*SUMxx );
781 y_intercept = ( SUMy - slope*SUMx ) / count;
788 datavallog = log10(dataval);
790 if ((f>=frequencyBands[
l]) & (f<=frequencyBands[
l+1])) {
792 y_estimate_log = slope*flog + y_intercept;
794 res = fabs(datavallog - y_estimate_log);
814 const REAL8FFTPlan *plan,
826 if ( ! spectrum || ! tseries || ! plan )
828 if ( ! spectrum->
data || ! tseries->
data )
830 if ( tseries->
deltaT <= 0.0 )
834 numseg = 1 + (reclen -
seglen)/stride;
838 if ( (numseg - 1)*stride +
seglen != reclen )
847 for ( seg = 0; seg < numseg; ++seg )
850 if ( ! work[seg].
data )
857 for ( seg = 0; seg < numseg; ++seg )
863 savevec = *tseries->
data;
867 tseries->
data->
data += seg * stride;
873 *tseries->
data = savevec;
891 double mx,my,
sx,
sy,sxy,denom,
r;
912 for ( seg = 0; seg < numseg; ++seg ) {
922 for ( seg = 0; seg < numseg; ++seg ) {
929 for ( seg = 0; seg < numseg; ++seg ) {
930 sxy += (work[seg].
data->
data[
k] - mx) * (work[seg].
data->data[
l] - my);
932 r = fabs(sxy / denom);
static void median_cleanup_REAL8(REAL8FrequencySeries *work, UINT4 n)
static double chisqr(int Dof, double Cv)
static double igf(double S, double Z)
int LALInferenceRemoveLinesChiSquared(REAL8FrequencySeries *spectrum, const REAL8TimeSeries *tseries, UINT4 seglen, UINT4 stride, const REAL8Window *window, const REAL8FFTPlan *plan, REAL8 *pvalues)
Determine non-Gaussian frequency bins using a chi-squared test.
int LALInferenceXCorrBands(REAL8FrequencySeries *spectrum, const REAL8TimeSeries *tseries, UINT4 seglen, UINT4 stride, const REAL8Window *window, const REAL8FFTPlan *plan, REAL8 *pvalues, char *filename)
Determine correlated frequency bands using cross correlation.
int LALInferenceRemoveLinesPowerLaw(REAL8FrequencySeries *spectrum, const REAL8TimeSeries *tseries, UINT4 seglen, UINT4 stride, const REAL8Window *window, const REAL8FFTPlan *plan, REAL8 *pvalues)
Determine large amplitude frequency bins using power law fit.
int LALInferenceAverageSpectrumBinFit(REAL8FrequencySeries *spectrum, const REAL8TimeSeries *tseries, UINT4 seglen, UINT4 stride, const REAL8Window *window, const REAL8FFTPlan *plan, char *filename, LIGOTimeGPS GPStime)
Calculate PSD by fitting bins to lines.
int LALInferenceRemoveLinesKS(REAL8FrequencySeries *spectrum, const REAL8TimeSeries *tseries, UINT4 seglen, UINT4 stride, const REAL8Window *window, const REAL8FFTPlan *plan, REAL8 *pvalues)
Determine non-Gaussian frequency bins using a K-S test.
void * XLALCalloc(size_t m, size_t n)
void * XLALMalloc(size_t n)
int XLALREAL8ModifiedPeriodogram(REAL8FrequencySeries *periodogram, const REAL8TimeSeries *tseries, const REAL8Window *window, const REAL8FFTPlan *plan)
REAL8Vector * XLALCreateREAL8Vector(UINT4 length)
void XLALDestroyREAL8Vector(REAL8Vector *vector)