Exemplo n.º 1
0
void do_all_tests(Skipper const& s = Skipper()) {

    auto A = qi::copy(qi::char_("$_") | qi::alpha);
    auto B = qi::copy(qi::char_("z"));

    // using skipper:
    SHOULD_WORK(A >> B , "$z", s);
    SHOULD_FAIL(A >> B , "$.", s);
    SHOULD_FAIL(A >> B , "$" , s);

    SHOULD_WORK(A  > B , "$z", s);
    SHOULD_FAIL(A  > B , "$.", s);
    SHOULD_FAIL(A  > B , "$" , s);

    // positive assertion (does not consume B)
    SHOULD_WORK(A >> &B, "$z", s);
    SHOULD_FAIL(A >> &B, "$.", s);
    SHOULD_FAIL(A >> &B, "$" , s);

    SHOULD_WORK(A  > &B, "$z", s);
    SHOULD_FAIL(A  > &B, "$.", s);
    SHOULD_FAIL(A  > &B, "$" , s);

    // negative assertion:
    SHOULD_FAIL(A >> !B, "$z", s);
    SHOULD_WORK(A >> !B, "$.", s);
    SHOULD_WORK(A >> !B, "$" , s);

    SHOULD_FAIL(A  > !B, "$z", s);
    SHOULD_WORK(A  > !B, "$.", s);
    SHOULD_WORK(A  > !B, "$" , s);

}
Exemplo n.º 2
0
int SaveTiffEx
(
  const char *pFileName,
  const MinImg *pImg,
  const ExtImgProps *pProps,
  int page
)
{
#ifndef WITH_TIFF
  return NOT_IMPLEMENTED;
#else
  if (!pImg || !pFileName || page < 0)
    return BAD_ARGS;
  if (!pImg->pScan0)
    return BAD_ARGS;

  TIFFSetErrorHandler(NULL);
  TIFFSetWarningHandler(NULL);

  int nPages = GetTiffPages(pFileName);
  if (nPages == FILE_ERROR)
    nPages = 0;
  if (page > nPages || page < 0)
    return BAD_ARGS;
  scoped_cpp_array<TiffData> tiff_pages(new TiffData[nPages]);
  if (page < nPages)
  {
    scoped_tiff_handle pTIF(TIFFOpen(pFileName, "r"));
    if (!pTIF)
      return FILE_ERROR;

    for (int k = 0; k < nPages; k++)
    {
      TiffData &data = tiff_pages[k];
      TIFFSetDirectory(pTIF, k);
      int &nc = data.samples_per_pixel;
      int typ = PLANARCONFIG_CONTIG;
      _TIFFGetField(pTIF, TIFFTAG_SAMPLESPERPIXEL, &nc, 1);
      if (nc > 1)
        _TIFFGetField(pTIF, TIFFTAG_PLANARCONFIG, &typ, PLANARCONFIG_CONTIG);
      if (typ != PLANARCONFIG_CONTIG)
        return NOT_IMPLEMENTED;

      int &bpc = data.bytes_per_sample;
      _TIFFGetField(pTIF, TIFFTAG_IMAGEWIDTH, &data.width, 0);
      _TIFFGetField(pTIF, TIFFTAG_IMAGELENGTH, &data.height, 0);
      _TIFFGetField(pTIF, TIFFTAG_BITSPERSAMPLE, &bpc, 0);

      if (bpc != 1 && bpc & 7)
        return NOT_IMPLEMENTED;
      bpc = bpc >> 3;

      int &metr = data.photometric;
      _TIFFGetField(pTIF, TIFFTAG_PHOTOMETRIC, &metr, PHOTOMETRIC_MINISWHITE);
      if (metr == PHOTOMETRIC_MINISWHITE && bpc > 0)
        return NOT_IMPLEMENTED;

      _TIFFGetField(pTIF, TIFFTAG_SAMPLEFORMAT, &data.sample_format, SAMPLEFORMAT_UINT);
      _TIFFGetField(pTIF, TIFFTAG_XRESOLUTION, &data.xresolution, 0.0f);
      _TIFFGetField(pTIF, TIFFTAG_YRESOLUTION, &data.yresolution, 0.0f);
      _TIFFGetField(pTIF, TIFFTAG_RESOLUTIONUNIT, &data.resolution_unit, RESUNIT_INCH);
      _TIFFGetField(pTIF, TIFFTAG_COMPRESSION, &data.compression_type, COMPRESSION_NONE);
      _TIFFGetField(pTIF, TIFFTAG_JPEGQUALITY, &data.jpeg_quality, 100);
      const tsize_t scanLen = TIFFScanlineSize(pTIF);
      data.scan_lines = new uint8_t[data.height * scanLen];
      data.scanLen = scanLen;
      for (int y = 0; y < data.height; y++)
      {
        void * pScanLine = data.scan_lines + y * scanLen;
        SHOULD_WORK(TIFFReadScanline(pTIF, pScanLine, y));
      }
    }
   }
Exemplo n.º 3
0
static int AddPageToTiffExImpl
  (
  TIFF * pTIF,
  const MinImg *pImg,
  const ExtImgProps *pProps
  )
{
  int bpp = std::max(1, (int)pImg->channelDepth * 8);
  if (pProps != NULL)
  {
    switch (pProps->comp)
    {
      case IFC_RLE:
      case IFC_GROUP3:
      case IFC_GROUP4:
        bpp = 1;
        break;
      case IFC_JPEG:
        bpp = std::max(8, bpp);
        break;
      default:
        break;
    }
  }

  TIFFSetField(pTIF, TIFFTAG_IMAGELENGTH, pImg->height);
  TIFFSetField(pTIF, TIFFTAG_IMAGEWIDTH, pImg->width);
  TIFFSetField(pTIF, TIFFTAG_BITSPERSAMPLE, bpp);
  TIFFSetField(pTIF, TIFFTAG_SAMPLESPERPIXEL, pImg->channels);
  TIFFSetField(pTIF, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);

  // FIXME: should be clarified for non-standard as soon as possible!
  if (pImg->channels == 3)
    TIFFSetField(pTIF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
  else
    TIFFSetField(pTIF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);

  switch (pImg->format)
  {
    case FMT_UINT:
      TIFFSetField(pTIF, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
      break;
    case FMT_INT:
      TIFFSetField(pTIF, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_INT);
      break;
    case FMT_REAL:
      TIFFSetField(pTIF, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
      break;
    default:
      return BAD_ARGS;
  }

  if (pProps)
  {
    TIFFSetField(pTIF, TIFFTAG_XRESOLUTION, pProps->xDPI);
    TIFFSetField(pTIF, TIFFTAG_YRESOLUTION, pProps->yDPI);
    TIFFSetField(pTIF, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);

    switch(pProps->comp)
    {
      case IFC_LZW: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_LZW); break;
      case IFC_DEFLATE: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE); break;
      case IFC_PACKBITS: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS); break;
      case IFC_JPEG: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_JPEG); break;
      case IFC_RLE: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTRLE); break;
      case IFC_GROUP3: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3); break;
      case IFC_GROUP4: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4); break;
      default: TIFFSetField(pTIF, TIFFTAG_COMPRESSION, COMPRESSION_NONE); break;
    }

    if (pProps->comp == IFC_JPEG && pProps->qty >= 0 && pProps->qty <= 100)
      TIFFSetField(pTIF, TIFFTAG_JPEGQUALITY, pProps->qty);
  }

  if (bpp == 1 && pImg->channelDepth > 0)
  {
    if (pImg->channelDepth > 1 || pImg->channels > 1 || pImg->format != FMT_UINT)
      return NOT_IMPLEMENTED;

    const uint8_t level = 128;
    size_t size = (pImg->width + 7) / 8;
    scoped_cpp_array<uint8_t> pBuf(new uint8_t[size]);

    for (int y = 0; y < pImg->height; y++)
    {
      PackLine(pBuf, pImg->pScan0 + pImg->stride * y, level, pImg->width, false);
      SHOULD_WORK(TIFFWriteScanline(pTIF, pBuf, y, 0));
    }
  }
  else if (bpp == 8 && pImg->channelDepth == 0)
  {
    if (pImg->channels > 1 || pImg->format != FMT_UINT)
      return NOT_IMPLEMENTED;

    const int size = pImg->width;
    scoped_cpp_array<uint8_t> pBuf(new uint8_t[size]);

    for (int y = 0; y < pImg->height; y++)
    {
      UnpackLine(pBuf, pImg->pScan0 + pImg->stride * y, pImg->width, false);
      SHOULD_WORK(TIFFWriteScanline(pTIF, pBuf, y, 0));
    }
  }
  else
  {
    for (int y = 0; y < pImg->height; y++)
    {
      SHOULD_WORK(TIFFWriteScanline(pTIF, pImg->pScan0 + pImg->stride * y, y, 0));
    }
  }

  return NO_ERRORS;
}
Exemplo n.º 4
0
int LoadTiff
(
  const MinImg *pImg,
  const char *pFileName,
  int page
)
{
#ifndef WITH_TIFF
  return NOT_IMPLEMENTED;
#else
  if (!pImg || !pFileName || page < 0)
    return BAD_ARGS;
  if (!pImg->pScan0)
    return BAD_ARGS;

  TIFFSetErrorHandler(NULL);
  TIFFSetWarningHandler(NULL);

  scoped_tiff_handle pTIF(TIFFOpen(pFileName, "r"));
  if (!pTIF)
    return FILE_ERROR;
  const int nPages = TIFFNumberOfDirectories(pTIF);
  if (page >= nPages)
    return BAD_ARGS;
  TIFFSetDirectory(pTIF, page);

  int nc = 0, typ = PLANARCONFIG_CONTIG;
  _TIFFGetField(pTIF, TIFFTAG_SAMPLESPERPIXEL, &nc, 1);
  if (nc > 1)
    _TIFFGetField(pTIF, TIFFTAG_PLANARCONFIG, &typ, PLANARCONFIG_CONTIG);
  if (typ != PLANARCONFIG_CONTIG)
    return NOT_IMPLEMENTED;

  int wd = 0, ht = 0, bpc = 0;
  _TIFFGetField(pTIF, TIFFTAG_IMAGEWIDTH, &wd, 0);
  _TIFFGetField(pTIF, TIFFTAG_IMAGELENGTH, &ht, 0);
  _TIFFGetField(pTIF, TIFFTAG_BITSPERSAMPLE, &bpc, 0);

  if (bpc != 1 && bpc & 7)
    return NOT_IMPLEMENTED;
  bpc = bpc >> 3;

  if (pImg->channels != nc)
    return BAD_ARGS;
  if (bpc == 0 && pImg->channelDepth > 1)
    return BAD_ARGS;
  if (bpc > 0 && pImg->channelDepth != bpc)
    return BAD_ARGS;
  if (pImg->height < ht || pImg->width < wd)
    return BAD_ARGS;

  int metr = 0;
  _TIFFGetField(pTIF, TIFFTAG_PHOTOMETRIC, &metr, PHOTOMETRIC_MINISWHITE);
  if (metr == PHOTOMETRIC_MINISWHITE && bpc > 0)
    return NOT_IMPLEMENTED;

  int dtyp = SAMPLEFORMAT_UINT;
  _TIFFGetField(pTIF, TIFFTAG_SAMPLEFORMAT, &dtyp, SAMPLEFORMAT_UINT);
  switch (dtyp)
  {
  case SAMPLEFORMAT_UINT:
    if (pImg->format != FMT_UINT)
      return BAD_ARGS;
    break;
  case SAMPLEFORMAT_INT:
    if (pImg->format != FMT_INT)
      return BAD_ARGS;
    break;
  case SAMPLEFORMAT_IEEEFP:
    if (pImg->format != FMT_REAL)
      return BAD_ARGS;
    break;
  default:
    return NOT_IMPLEMENTED;
  }

  const tsize_t scanLen = TIFFScanlineSize(pTIF);
  scoped_scanline pScanLine(_TIFFmalloc(scanLen));
  if (!pScanLine)
    return NO_MEMORY;
  const int byteWidth = pImg->channelDepth > 0 ?
                        pImg->width * pImg->channels * pImg->channelDepth :
                        (pImg->width * pImg->channels + 7) >> 3;
  if (byteWidth < scanLen)
    return INTERNAL_ERROR;

  bool invert = (metr == PHOTOMETRIC_MINISWHITE);
  uint8_t *pScanLineUint8 = (uint8_t *)((void *)(pScanLine));

  for (int y = 0; y < ht; y++)
  {
    SHOULD_WORK(TIFFReadScanline(pTIF, pScanLine, y));

    if (bpc == 0 && bpc == pImg->channelDepth)
      CopyBits(pImg->pScan0 + pImg->stride * y, pScanLineUint8, wd, invert);
    else if (bpc == 0 && bpc < pImg->channelDepth)
      UnpackLine(pImg->pScan0 + pImg->stride * y, pScanLineUint8, wd, invert);
    else
      memcpy(pImg->pScan0 + pImg->stride * y, pScanLine, scanLen);
  }

  return NO_ERRORS;
#endif // WITH_TIFF
}
Exemplo n.º 5
0
int main(int argc, char *argv[])
{
  const char *fn = __func__;
  LALStatus status = empty_status;

  SFTCatalog *catalog = NULL;
  SFTConstraints constraints = empty_constraints;
  SFTVector *sft_vect = NULL;
  SFTVector *sft_vect2 = NULL;
  MultiSFTVector *multsft_vect = NULL;
  MultiSFTVector *multsft_vect2 = NULL;
  CHAR detector[2] = "H1";
  INT4 crc_check;

  /* band to read from infile.* SFTs */
  REAL8 fMin = 1008.5;
  REAL8 fMax = 1009.1;


  if ( argc == 1)	/* avoid warning */
    argc = 1;

  /* check that mal-formated SFTs are properly detected */
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad1", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad2", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad3", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad4", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad5", NULL ), &status);

  /* the following (SFT-bad6) has a wrong CRC64 checksum. However, this is
   * not checked in LALSFTdataFind, so it should succeed! */
  SHOULD_WORK( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad6", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );

  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad7", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad8", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad9", NULL ), &status);
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad10", NULL ), &status );
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad11", NULL ), &status );
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad12", NULL ), &status );
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad13", NULL ), &status );
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-bad14", NULL ), &status );

  /* now check some crc-checksums */
  SHOULD_WORK( LALCheckSFTs ( &status, &crc_check, TEST_DATA_DIR "SFT-test1", NULL ), &status );
  if ( crc_check != 0 )
    {
      XLALPrintError ("\nLALCheckSFTs(): SFT-test1 has correct checksum but LALCheckSFTs claimed it hasn't.\n\n");
      return crc_check;
    }
  SHOULD_WORK( LALCheckSFTs ( &status, &crc_check, TEST_DATA_DIR "SFT-bad6", NULL ), &status );
  if ( crc_check != SFTFILEIO_ECRC64 )
    {
      XLALPrintError ( "\nLALCheckSFTs() failed to catch invalid CRC checksum in SFT-bad6 \n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  /* check that proper v2-SFTs are read-in properly */
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test1", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test2", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test3", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test4", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test5", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test6", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test7", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );

  /* now completely read-in a v2 merged-SFT */
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test*", NULL ), &status );
  /* skip sft nr 4 with has Tsft=50 instead of Tsft=60 */
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test[123567]*", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  /* try the same with a ";" separated list of files and of patterns */
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog,
				 TEST_DATA_DIR "SFT-test1;"
				 TEST_DATA_DIR "SFT-test2;"
				 TEST_DATA_DIR "SFT-test3;"
				 TEST_DATA_DIR "SFT-test5;"
				 TEST_DATA_DIR "SFT-test6;"
				 TEST_DATA_DIR "SFT-test7", NULL ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );
  SHOULD_WORK ( LALSFTdataFind ( &status, &catalog, TEST_DATA_DIR "SFT-test[123]*;" TEST_DATA_DIR "SFT-test[5]*", NULL ), &status );

  /* load once as a single SFT-vector (mix of detectors) */
  SHOULD_WORK ( LALLoadSFTs ( &status, &sft_vect, catalog, -1, -1 ), &status );

  /* load once as a multi-SFT vector */
  SHOULD_WORK ( LALLoadMultiSFTs ( &status, &multsft_vect, catalog, -1, -1 ), &status );
  /* load again, using XLAL API */
  if ( ( multsft_vect2 = XLALLoadMultiSFTs ( catalog, -1, -1 )) == NULL ) {
    XLALPrintError ("%s: XLALLoadMultiSFTs (cat, -1, -1) failed with xlalErrno = %d\n", fn, xlalErrno );
    return SFTFILEIOTESTC_ESUB;
  }
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );

  /* 6 SFTs from 2 IFOs should have been read */
  if ( (sft_vect->length != 4) 	/* either as a single SFTVector */
       || (multsft_vect->length != 2) 	/* or separated by detector */
       || (multsft_vect->data[0]->length != 3) || ( multsft_vect->data[1]->length != 1 ) )
    {
      XLALPrintError ( "\nFailed to read in multi-SFT from 2 IFOs 'SFT-test*'!\n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  /* compare results from LALLoadMultiSFTs() and XLALLoadMultiSFTs() */
  {
    UINT4 numIFOs = multsft_vect->length;
    UINT4 X;
    for ( X=0; X < numIFOs; X ++ )
      {
        if( CompareSFTVectors ( multsft_vect->data[X], multsft_vect2->data[X] ) ) {
          XLALPrintError ("%s: comparing (X)LALLoadMultiSFTs(): sft-vectors differ for X=%d\n", fn, X );
          return SFTFILEIOTESTC_ESUB;
        }
      } /* for X < numIFOs */
  } /* ------ */

  /* ----- v2 SFT writing ----- */
  /* write v2-SFT to disk */
  SHOULD_WORK ( LALWriteSFT2file( &status, &(multsft_vect->data[0]->data[0]), "outputsftv2_v2.sft", "A v2-SFT file for testing!"), &status );

  SHOULD_WORK ( LALWriteSFTVector2Dir( &status, multsft_vect->data[0], ".", "A v2-SFT file for testing!", "test"), &status);

  /* write v2-SFT to single file */
  {
    const CHAR *currSingleSFT = NULL;
    UINT4 i = 0;
    FILE *fpConcat = NULL, *fpSingle = NULL;
    int concat = 0, single = 0;

    xlalErrno = 0;
    if (XLAL_SUCCESS != XLALWriteSFTVector2File ( multsft_vect->data[0], ".", "A v2-SFT file for testing!", "test_concat" )) {
      LALPrintError ( "\n XLALWriteSFTVector2File failed to write multi-SFT vector to file!\n\n");
      return SFTFILEIOTESTC_ESUB;
    }
    /* check that the single file SFT is the same as the single SFTs */
    const UINT4 numSingleSFTs = 3;
    const CHAR *singleSFTs[] = {
      "H-1_H1_60SFT_test-000012345-61.sft",
      "H-1_H1_60SFT_test-000012465-61.sft",
      "H-1_H1_60SFT_test-000012585-61.sft"
    };
    printf("*** Comparing single and concatenated SFTs ***\n");
    /* try to open concatenated SFT */
    const CHAR *concatSFT = "H-3_H1_60SFT_test_concat-000012345-302.sft";
    if ( ( fpConcat = fopen(concatSFT, "rb" ) ) == NULL ) {
      LALPrintError ( "\n Cound not open SFT '%s'!\n\n", concatSFT);
      return SFTFILEIOTESTC_ESUB;
    }
    /* do loop while concat. SFT has data */
    while (!feof(fpConcat)) {
      /* get character from concat. SFT */
      concat = fgetc(fpConcat);
      if ( ferror(fpConcat) ) {
	LALPrintError ( "\n IO error reading '%s'!\n\n", concatSFT);
	return SFTFILEIOTESTC_ESUB;
      }
      /* get character from single SFT */
      while (1) {
	/* need to open next single SFT file */
	if (fpSingle == NULL) {
	  /* break if we've run out of single SFTs */
	  if (i == numSingleSFTs)
	    break;
	  /* try to open single SFT */
	  if ( ( fpSingle = fopen(singleSFTs[i], "rb" ) ) == NULL ) {
	    LALPrintError ( "\n Cound not open SFT '%s'!\n\n", singleSFTs[i]);
	    return SFTFILEIOTESTC_ESUB;
	  }
	  currSingleSFT = singleSFTs[i];
	}
	/* get character from single SFT */
	single = fgetc(fpSingle);
	if ( ferror(fpSingle) ) {
	  LALPrintError ( "\n IO error reading '%s'!\n\n", singleSFTs[i]);
	  return SFTFILEIOTESTC_ESUB;
	}
	/* if single SFT is out of data, close it (open next one at beginning of loop) */
	if (feof(fpSingle)) {
	  fclose(fpSingle);
	  fpSingle = NULL;
	  ++i;
	}
	/* otherwise we have a valid character */
	else
	  break;
      }
      /* do character-by-character comparison */
      if ( concat != single ) {
	LALPrintError ( "\n Comparison failed between '%s'(last char = %i) and '%s'(last char = %i)!!\n\n",
			concatSFT, concat, currSingleSFT, single );
	return SFTFILEIOTESTC_ESFTDIFF;
      }
    }
    fclose(fpConcat);
    printf( "*** Comparing was successful!!! ***\n");
  }

  /* write v2-SFt as a v1-SFT to disk (correct normalization) */
  multsft_vect->data[0]->data[0].epoch.gpsSeconds += 60;	/* shift start-time so they don't look like segmented SFTs! */
  SHOULD_WORK ( LALWrite_v2SFT_to_v1file( &status, &(multsft_vect->data[0]->data[0]), "outputsftv2_v1.sft"), &status );

  SUB ( LALDestroySFTVector ( &status, &sft_vect ), &status );
  SUB ( LALDestroyMultiSFTVector (&status, &multsft_vect ), &status );
  SUB ( LALDestroyMultiSFTVector (&status, &multsft_vect2 ), &status );

  /* ----- read the previous two SFTs back */
  SHOULD_FAIL ( LALSFTdataFind ( &status, &catalog, "outputsftv2_*.sft", NULL ), &status );
  /* need to set proper detector! */
  constraints.detector = detector;
  SUB ( LALSFTdataFind ( &status, &catalog, "outputsftv2_*.sft", &constraints ), &status);
  SUB ( LALLoadSFTs ( &status, &sft_vect, catalog, -1, -1 ), &status );

  if ( sft_vect->length != 2 )
    {
      if ( lalDebugLevel ) XLALPrintError ("\nFailed to read back in 'outputsftv2_*.sft'\n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  sft_vect2 = XLALLoadSFTs ( catalog, -1, -1 );
  if (!sft_vect2)
    {
      XLALPrintError ( "\nXLALLoadSFTs() call failed (where it should have succeeded)!\n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  /* compare the SFT vectors just read */
  if(CompareSFTVectors(sft_vect, sft_vect2))
    return SFTFILEIOTESTC_ESUB;

  /* the data of 'outputsftv2_v2.sft' and 'outputsftv2_v1.sft' should agree, as the normalization
   * should be corrected again when reading-in
   */
  {
    UINT4 i;
    UINT4 numBins = sft_vect->data[0].data->length;
    for ( i=0; i < numBins; i++)
      {
	COMPLEX8 *data1 = &(sft_vect->data[0].data->data[i]);
	COMPLEX8 *data2 = &(sft_vect->data[1].data->data[i]);

	if ( (crealf(*data1) != crealf(*data2)) || (cimagf(*data1) != cimagf(*data2)) )
	  {
	    XLALPrintError ("\nv1- and v2- SFT differ after writing/reading\n\n");
	    return SFTFILEIOTESTC_ESFTDIFF;
	  }
      } /* for i < numBins */
  }
  SUB ( LALDestroySFTVector (&status, &sft_vect2 ), &status );
  SUB ( LALDestroySFTVector (&status, &sft_vect ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );

  /* `----- v1 SFT writing */

  /* read v1-SFTs: 'inputsft.0' and 'inputsft.1' (one is big-endian, the other little-endian!) */
  SUB ( LALSFTdataFind (&status, &catalog, TEST_DATA_DIR "inputsft.?", &constraints ), &status );
  SUB ( LALLoadSFTs ( &status, &sft_vect, catalog, fMin, fMax ), &status );
  if ( sft_vect->length != 2 )
    {
      if ( lalDebugLevel ) XLALPrintError ("\nFailed to read in v1-SFTs 'inputsft.0' and 'inputsft.1'\n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  /* read with XLALLoadSFTs() */
  sft_vect2 = XLALLoadSFTs ( catalog, fMin, fMax );
  if (!sft_vect2)
    {
      XLALPrintError ( "\nXLALLoadSFTs() call failed (where it should have succeeded)!\n\n");
      return SFTFILEIOTESTC_ESUB;
    }

  /* compare the SFT vectors just read */
  if(CompareSFTVectors(sft_vect, sft_vect2))
    return SFTFILEIOTESTC_ESUB;

  /* write v1-SFT to disk */
  SUB ( LALWriteSFTfile (&status, &(sft_vect->data[0]), "outputsft_v1.sft"), &status);

  /* try to write this v1-SFTs as v2: should fail without detector-info ! */
  strncpy( sft_vect->data[0].name, "??", 2 );
  SHOULD_FAIL (LALWriteSFT2file( &status, &(sft_vect->data[0]), "outputsft_v2.sft", "Another v2-SFT file for testing!"), &status );

  /* put detector there */
  strcpy ( sft_vect->data[0].name, "H1" );
  SHOULD_WORK (LALWriteSFT2file( &status, &(sft_vect->data[0]), "outputsft_v2.sft", "Another v2-SFT file for testing!"), &status );

  SUB ( LALDestroySFTVector (&status, &sft_vect2 ), &status );
  SUB ( LALDestroySFTVector (&status, &sft_vect ), &status );
  SUB ( LALDestroySFTCatalog( &status, &catalog), &status );

  /* ---------- test timestamps-reading functions by comparing LAL- and XLAL-versions against each other ---------- */
  {
#define TS_FNAME "testTimestamps.dat"
    LIGOTimeGPSVector *ts1 = NULL, *ts2 = NULL;

    /* ----- load timestamps with deprecated LAL function  */
    SUB ( LALReadTimestampsFile ( &status, &ts1, TEST_DATA_DIR TS_FNAME ), &status );
    /* ----- load timestamps w new XLAL function */
    if ( (ts2 = XLALReadTimestampsFile ( TEST_DATA_DIR TS_FNAME )) == NULL ) {
      XLALPrintError ("XLALReadTimestampsFile() failed to read timestamps from file '%s'. xlalErrno = %d\n", TS_FNAME );
      return SFTFILEIOTESTC_ESUB;
    }
    /* ----- compare the two */
    if ( ts1->length != ts2->length ) {
      XLALPrintError ("Read timestamps-lists differ in length %d != %d\n", ts1->length, ts2->length );
      return 1;
    }
    if ( ts1->deltaT != ts2->deltaT ) {
      XLALPrintError ("Read timestamps-lists differ in deltaT %g != %g\n", ts1->deltaT, ts2->deltaT );
      return 1;
    }
    UINT4 i, numTS = ts1->length;
    for ( i = 0; i < numTS; i ++ )
      {
        if ( XLALGPSDiff( &ts1->data[i], &ts2->data[i]) != 0 ) {
          XLALPrintError ("Read timestamps-lists differ in entry %d: { %d, %d } != { %d, %d }\n",
                          i + 1,
                          ts1->data[i].gpsSeconds, ts1->data[i].gpsNanoSeconds,
                          ts2->data[i].gpsSeconds, ts2->data[i].gpsNanoSeconds );
          return 1;
        }
      } /* for i < numTS */

    /* free mem */
    XLALDestroyTimestampVector ( ts1 );
    XLALDestroyTimestampVector ( ts2 );
  }

  /* ------------------------------ */
  LALCheckMemoryLeaks();

  XLALPrintError ("\n\n--------------------------------------------------------------------------------\n");
  XLALPrintError ("\n    OK. All tests passed correctly ! (error-messages above are OK!)\n");
  XLALPrintError ("\n--------------------------------------------------------------------------------\n");


  INFO( SFTFILEIOTESTC_MSGENORM );
  return SFTFILEIOTESTC_ENORM;
}
Exemplo n.º 6
0
/* ----------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
  LALStatus status = empty_status;

  CHAR filename[128];
  NRWaveCatalog nrcatalog;

  UINT4 k, length;
  REAL4TimeVectorSeries *nrdata=NULL;

  argc=0;

  sprintf(filename, "NRWaveIOTest.data");
  SHOULD_WORK (LALReadNRWave(&status, &nrdata, 10.0, filename), &status);

  length = nrdata->data->vectorLength;

  for (k = 0; k < length; k++) {
    fprintf(stdout, "%e  %e  %e\n", k*nrdata->deltaT, nrdata->data->data[k],
	    nrdata->data->data[length+k]);
  }

  fprintf(stdout, "%%filename=%s, deltaT=%e sec, Heterodyne Freq.=%e, length=%d \n",
	  nrdata->name, nrdata->deltaT, nrdata->f0, nrdata->data->vectorLength);

  XLALDestroyREAL4VectorSequence ( nrdata->data );
  LALFree(nrdata);


  /* test config file reading */
  sprintf(filename, "example.cfg");
  SHOULD_WORK (LALNRDataFind( &status, &nrcatalog, ".", filename), &status);
  fprintf(stdout, "config file %s contains %d waves\n", filename, nrcatalog.length);

  for ( k = 0; k < nrcatalog.length; k++) {
    fprintf(stdout,"\n\n Wave # %d:\n", k);
    fprintf(stdout, "Mass ratio = %f, spin1=(%f,%f,%f), spin2=(%f,%f, %f), l=%d, m=%d, datafile=%s\n",
	    nrcatalog.data[k].massRatio, nrcatalog.data[k].spin1[0], nrcatalog.data[k].spin1[1],
	    nrcatalog.data[k].spin1[2], nrcatalog.data[k].spin2[0], nrcatalog.data[k].spin1[1],
	    nrcatalog.data[k].spin1[2], nrcatalog.data[k].mode[0], nrcatalog.data[k].mode[1],
	    nrcatalog.data[k].filename);
  }

  SHOULD_WORK (LALReadNRWave(&status, &nrdata, 10.0, nrcatalog.data[0].filename), &status);

  for (k = 0; k < length; k++) {
    fprintf(stdout, "%e  %e  %e\n", k*nrdata->deltaT, nrdata->data->data[k],
	    nrdata->data->data[length+k]);
  }

  fprintf(stdout, "%%filename=%s, deltaT=%e sec, Heterodyne Freq.=%e, length=%d \n",
	  nrdata->name, nrdata->deltaT, nrdata->f0, nrdata->data->vectorLength);

  XLALDestroyREAL4VectorSequence ( nrdata->data );
  LALFree(nrdata);


  LALFree(nrcatalog.data);

  LALCheckMemoryLeaks();

  INFO( NRWAVEIOTESTC_MSGENORM );
  return NRWAVEIOTESTC_ENORM;
}