32 typedef enum tagSFDBDetectors {
50 typedef struct tagSFDBHeader {
103 const CHAR *file_pattern,
104 const CHAR *timeStampsStarting,
105 const CHAR *timeStampsFinishing
124 if ( timeStampsStarting && timeStampsFinishing ) {
125 flag_timestamps =
TRUE;
126 }
else if ( timeStampsStarting && timeStampsFinishing == NULL ) {
127 XLAL_ERROR_NULL(
XLAL_EFUNC,
"Must give two files with initial and finishing timestamps, missing finishing timestamps\n" );
128 }
else if ( timeStampsStarting == NULL && timeStampsFinishing ) {
129 XLAL_ERROR_NULL(
XLAL_EFUNC,
"Must give two files with initial and finishing timestamps, missing starting timestamps\n" );
131 flag_timestamps =
FALSE;
134 if ( flag_timestamps ) {
144 for (
UINT4 X = 0; X < numTSFiles; ++X ) {
147 CHAR *filenameSt = fnamesStartTS->
data[X];
157 detectorWasFound = 1;
163 "No matching IFO name was found for time stamp file %s",
171 numStartStamps == numEndStamps,
173 "Got %u starting and %u finishing timestamps at %s, lengths must be equal.",
188 for (
UINT4 i = 0;
i < numSFDBFiles;
i++ ) {
192 setvbuf( fpPar, (
CHAR * )NULL, _IOLBF, 0 );
195 while ( fread( &
count,
sizeof(
REAL8 ), 1, fpPar ) == 1 ) {
201 numSFTsY[
header.det] += ( flag_timestamps ) ?
208 INT4 lavespOrRed = 0;
210 if (
header.lavesp > 0 ) {
211 lavespOrRed =
header.lavesp;
228 UINT4 numSFTsTotal = 0;
230 numSFTsTotal += numSFTsY[Y];
239 detectorLookupYtoX[Y] = -1;
240 strncpy( detectorNames[Y],
"XX", 3 );
250 if ( numSFTsY[Y] > 0 ) {
255 auxNumSFTsX->
data[numIFOs] = numSFTsY[Y];
256 detectorLookupYtoX[Y] = numIFOs;
264 XLALPrintInfo(
"Number of SFTs we'll load from the SFDBs:\n" );
265 for (
UINT4 X = 0; X < numIFOs; X++ ) {
266 numSFTsX->
data[X] = auxNumSFTsX->
data[X];
273 UINT4 firstBinExt, numBinsExt;
284 UINT4 numSFTsLoadedInX[numIFOs];
286 for (
UINT4 i = 0;
i < numSFDBFiles;
i++ ) {
290 setvbuf( fpPar, (
CHAR * )NULL, _IOLBF, 0 );
293 while ( fread( &
count,
sizeof(
REAL8 ), 1, fpPar ) == 1 ) {
302 INT4 lavespOrRed = 0;
304 REAL4 *buffer1 = NULL, *buffer2 = NULL, *buffer3 = NULL;
305 if (
header.lavesp > 0 ) {
306 lavespOrRed =
header.lavesp;
325 numSFTsLoadedInX[X] += 1;
329 thisSFT = outputSFTs->
data[X]->
data + numSFTsLoadedInX[X] - 1;
332 strncpy( thisSFT->
name, detectorNames[X], 3 );
340 for (
UINT4 thisBin = firstBinExt; thisBin < ( thisSFTLength + firstBinExt ); thisBin++ ) {
341 *thisSFTData =
crectf( buffer3[2 * thisBin], buffer3[2 * thisBin + 1] ) *
header.einstein *
header.tsamplu *
header.normw;
363 for (
UINT4 X = 0; X < numIFOs; X++ ) {
424 UINT4 detectorIndex = 0;
433 BOOLEAN SFDBWithinScienceMode = 0;
438 SFDBWithinScienceMode = 1;
444 return SFDBWithinScienceMode;
const char *const SFDB_detector_names[]
Internal SFT types and functions.
void * XLALCalloc(size_t m, size_t n)
static BOOLEAN CheckIfSFDBInScienceMode(SFDBHeader *SFDBHeader, LALStringVector *detectors, MultiLIGOTimeGPSVector *startingTS, MultiLIGOTimeGPSVector *endingTS)
int XLALFindCoveringSFTBins(UINT4 *firstBin, UINT4 *numBins, REAL8 fMinIn, REAL8 BandIn, REAL8 Tsft)
Return the 'effective' frequency-band [fMinEff, fMaxEff] = [firstBin, lastBin] * 1/Tsft,...
static int read_SFDB_header_from_fp(FILE *fp, SFDBHeader *header)
LALStringVector * XLALFindFiles(const CHAR *globstring)
Returns a list of filenames matching the input argument, which may be one of the following:
MultiSFTVector * XLALCreateMultiSFTVector(UINT4 length, UINT4Vector *numsft)
Create a multi-IFO SFT vector with a given number of bins per SFT and number of SFTs per IFO (which w...
MultiSFTVector * XLALReadSFDB(REAL8 f_min, REAL8 f_max, const CHAR *file_pattern, const CHAR *timeStampsStarting, const CHAR *timeStampsFinishing)
Return a MultiSFTVector struct from an input set of SFDBs, possibly from more than one detector.
void XLALDestroyMultiTimestamps(MultiLIGOTimeGPSVector *multiTS)
Destroy a MultiLIGOTimeGPSVector timestamps vector.
MultiLIGOTimeGPSVector * XLALReadMultiTimestampsFiles(const LALStringVector *fnames)
backwards compatible wrapper to XLALReadMultiTimestampsFilesConstrained() without GPS-time constraint...
int compareSFTepoch(const void *ptr1, const void *ptr2)
LALStringVector * XLALAppendString2Vector(LALStringVector *vect, const CHAR *string)
void XLALDestroyStringVector(LALStringVector *vect)
void XLALDestroyUINT4Vector(UINT4Vector *vector)
UINT4Vector * XLALCreateUINT4Vector(UINT4 length)
#define XLAL_ERROR_NULL(...)
int int int XLALPrintInfo(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_CHECK(assertion,...)
#define XLAL_CHECK_NULL(assertion,...)
LIGOTimeGPS * XLALGPSSetREAL8(LIGOTimeGPS *epoch, REAL8 t)
LALDetector detectors[LAL_NUM_DETECTORS]
COMPLEX8FrequencySeries * data
Pointer to the data array.
UINT4 length
Number of elements in array.
LIGOTimeGPS * data
array of timestamps
UINT4 length
number of timestamps
A collection of (multi-IFO) LIGOTimeGPSVector time-stamps vectors.
LIGOTimeGPSVector ** data
timestamps vector for each ifo
A collection of SFT vectors – one for each IFO in a multi-IFO search.
SFTVector ** data
sftvector for each ifo