diff --git a/.gitattributes b/.gitattributes index 2e3da03e8703918c330d8aae906265888125b3bc..6a318c269bf78193a03a480ef28362aae96dd1d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4981,6 +4981,9 @@ SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.output/SB4.cflo SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.parset -text SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.run eol=lf SubSystems/Online_Cobalt/test/Correlator/tCorrelate_3sec_2st_5sb.sh eol=lf +SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh eol=lf +SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run eol=lf +SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.sh eol=lf SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_173014.param -text SubSystems/Online_Cobalt/test/tProductionParsets.in_parsets/CorrProc_196344-CygAf009-225SAPS.cleaned.param -text SubSystems/Online_Cobalt/test/tProductionParsets.run eol=lf diff --git a/RTCP/Cobalt/InputProc/src/Station/printRSP.cc b/RTCP/Cobalt/InputProc/src/Station/printRSP.cc index 1cecf4aabefcdf56eadb790cf94ef299f509bb10..36694660f8ecb4bfd23f5f84128812cd269f5335 100644 --- a/RTCP/Cobalt/InputProc/src/Station/printRSP.cc +++ b/RTCP/Cobalt/InputProc/src/Station/printRSP.cc @@ -44,6 +44,7 @@ void report( const string &filename ) struct RSP packet; + // NOTE: this program is used in output verification in some test case(s). Expect a few test output format related breakage on modification. try { for(;;) { // read header diff --git a/SubSystems/Online_Cobalt/test/CMakeLists.txt b/SubSystems/Online_Cobalt/test/CMakeLists.txt index 96f6569ebcfd759fba36b220f287e9d01042996f..324fcc49e00bc9887aac3b6e20ae91063f7cc821 100644 --- a/SubSystems/Online_Cobalt/test/CMakeLists.txt +++ b/SubSystems/Online_Cobalt/test/CMakeLists.txt @@ -30,4 +30,4 @@ endif(BUILD_TESTING) add_subdirectory(Correlator) add_subdirectory(Beamformer) add_subdirectory(Commensal) -#add_subdirectory(RSPRaw) +add_subdirectory(RSPRaw) diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/CMakeLists.txt b/SubSystems/Online_Cobalt/test/RSPRaw/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b55259b67e51b252d8e24b2f49dae94ae0d2b5a --- /dev/null +++ b/SubSystems/Online_Cobalt/test/RSPRaw/CMakeLists.txt @@ -0,0 +1,14 @@ +# $Id$ + +include(LofarCTest) + +set(_tests + tRSPRaw +) + +foreach(_test ${_tests}) + lofar_add_test(${_test} DEPENDS printRSP) # printRSP is used in *-check-output.sh script + if(BUILD_TESTING) + set_tests_properties(${_test} PROPERTIES RUN_SERIAL ON) + endif(BUILD_TESTING) +endforeach(_test ${_tests}) diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh new file mode 100755 index 0000000000000000000000000000000000000000..30d903a91a42947e2e898deb746135aee15ad13c --- /dev/null +++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw-check-output.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# +# tRSPRaw output is quite big, so instead of diff-ing to a reference output, +# check some properties in this script. +# +# $Id$ + +if [ $# -ne 1 ]; then + echo 'Syntax: tRSPRaw-check-output.sh <test-output-dir>' >&2 + exit 1 +fi + +OUTDIR="$1" + +# from the .parset: +IN_FILENAME1=/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp +IN_FILENAME2=/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp +OUT_FILENAME1="$OUTDIR/L102030_CS002HBA0_0_rsp.raw" +OUT_FILENAME2="$OUTDIR/L102030_CS501HBA0_0_rsp.raw" +TIMESTAMP_PATTERN="14:15:" # to exclude the first N packets in IN_FILENAME* with timestamps before RSP raw start time + +# Check input vs output on number of RSP packets and their sample number written between parset RSPRaw start/stop time. +# Echo files to compared, since the diff cmd below compares /dev/fd/N filedescriptors, which gives a useless error message. +echo 'tRSPRaw-check-output.sh: doing rough check using diff(1) and printRSP (source under InputProc/src/Station/) on generated RSP raw input and output files' +echo "tRSPRaw-check-output.sh: diff 1: $IN_FILENAME1 (filtered) vs $OUT_FILENAME1" +echo "tRSPRaw-check-output.sh: diff 2: $IN_FILENAME2 (filtered) vs $OUT_FILENAME2" +printRSP < /dev/null || exit $? # exit 127 if printRSP not found (the next cmds do not) +diff -q <(printRSP < "$IN_FILENAME1" | grep "Time stamp: Thu Dec 5 $TIMESTAMP_PATTERN") \ + <(printRSP < "$OUT_FILENAME1" | grep "Time stamp: Thu Dec 5 $TIMESTAMP_PATTERN") \ +&& \ +diff -q <(printRSP < "$IN_FILENAME2" | grep "Time stamp: Thu Dec 5 $TIMESTAMP_PATTERN") \ + <(printRSP < "$OUT_FILENAME2" | grep "Time stamp: Thu Dec 5 $TIMESTAMP_PATTERN") + diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset new file mode 100644 index 0000000000000000000000000000000000000000..6ecd367c4be562bfbe8a8177a1a711ac1ccf93c6 --- /dev/null +++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.parset @@ -0,0 +1,137 @@ +Cobalt.realTime = false +Observation.ObsID = 102030 +Observation.momID = 88 +Cobalt.commandStream = null: +Observation.startTime = '2013-12-05 14:15:00' +Observation.stopTime = '2013-12-05 14:15:04' +Observation.sampleClock = 200 +Observation.nrBitsPerSample = 16 +Cobalt.correctBandPass = true +Cobalt.correctClocks = true +Cobalt.BeamFormer.coherentDedisperseChannels = false +Cobalt.delayCompensation = true +Observation.referencePhaseCenter = [3826577.066, 461022.948, 5064892.786] +Observation.antennaArray = HBA +Observation.antennaSet = HBA_ZERO +Observation.bandFilter = HBA_110_190 +Observation.nrPolarisations = 2 +Observation.nrBeams = 2 + +Observation.Beam[0].TiedArrayBeam[0].angle1 = 0.0 +Observation.Beam[0].TiedArrayBeam[0].angle2 = 0.0 +Observation.Beam[0].TiedArrayBeam[0].coherent = true +Observation.Beam[0].TiedArrayBeam[0].directionType = J2000 +Observation.Beam[0].TiedArrayBeam[0].dispersionMeasure = 0 +Observation.Beam[0].TiedArrayBeam[0].specificationType = manual +Observation.Beam[0].TiedArrayBeam[0].stationList = [] +Observation.Beam[0].TiedArrayBeam[1].angle1 = 0.9293449206762021 +Observation.Beam[0].TiedArrayBeam[1].angle2 = 0.9525764650544495 +Observation.Beam[0].TiedArrayBeam[1].coherent = false +Observation.Beam[0].TiedArrayBeam[1].directionType = J2000 +Observation.Beam[0].TiedArrayBeam[1].dispersionMeasure = 0 +Observation.Beam[0].TiedArrayBeam[1].specificationType = manual +Observation.Beam[0].TiedArrayBeam[1].stationList = [] +Observation.Beam[0].angle1 = 0.9293449206762021 +Observation.Beam[0].angle2 = 0.9525764650544495 +Observation.Beam[0].beamletList = [] +Observation.Beam[0].directionType = J2000 +Observation.Beam[0].duration = 900 +Observation.Beam[0].maximizeDuration = false +Observation.Beam[0].momID = 88 +Observation.Beam[0].nrTabRings = 0 +Observation.Beam[0].nrTiedArrayBeams = 2 +Observation.Beam[0].startTime = +Observation.Beam[0].subbandList = [100..101] +Observation.Beam[0].tabRingSize = 0.0 +Observation.Beam[0].target = B0329+54 + +Observation.Beam[1].TiedArrayBeam[0].angle1 = 0.0 +Observation.Beam[1].TiedArrayBeam[0].angle2 = 0.0 +Observation.Beam[1].TiedArrayBeam[0].coherent = true +Observation.Beam[1].TiedArrayBeam[0].directionType = J2000 +Observation.Beam[1].TiedArrayBeam[0].dispersionMeasure = 0 +Observation.Beam[1].TiedArrayBeam[0].specificationType = manual +Observation.Beam[1].TiedArrayBeam[0].stationList = [] +Observation.Beam[1].TiedArrayBeam[1].angle1 = 0.8293449206762021 +Observation.Beam[1].TiedArrayBeam[1].angle2 = 0.8525764650544495 +Observation.Beam[1].TiedArrayBeam[1].coherent = false +Observation.Beam[1].TiedArrayBeam[1].directionType = J2000 +Observation.Beam[1].TiedArrayBeam[1].dispersionMeasure = 0 +Observation.Beam[1].TiedArrayBeam[1].specificationType = manual +Observation.Beam[1].TiedArrayBeam[1].stationList = [] +Observation.Beam[1].angle1 = 0.8293449206762021 +Observation.Beam[1].angle2 = 0.8525764650544495 +Observation.Beam[1].beamletList = [] +Observation.Beam[1].directionType = J2000 +Observation.Beam[1].duration = 900 +Observation.Beam[1].maximizeDuration = false +Observation.Beam[1].momID = 88 +Observation.Beam[1].nrTabRings = 0 +Observation.Beam[1].nrTiedArrayBeams = 2 +Observation.Beam[1].startTime = +Observation.Beam[1].subbandList = [200..201] +Observation.Beam[1].tabRingSize = 0.0 +Observation.Beam[1].target = "-0.1 test offset from Beam0 (B0329+54)" + +Observation.AnaBeam.angle1 = 0.9293449206762021 +Observation.AnaBeam.angle2 = 0.9525764650544495 +Observation.AnaBeam.directionType = J2000 +Observation.AnaBeam.duration = 900 +Observation.AnaBeam.maximizeDuration = false +Observation.AnaBeam.rank = 1 +Observation.AnaBeam.startTime = +Observation.AnaBeam.target = B0329+54 + +Cobalt.blockSize=196608 +Observation.VirtualInstrument.stationList = [CS002, CS501] + +PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.phase0.X = 0.000000e+00 +PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.phase0.Y = 0.000000e+00 +PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.delay.X = 6.875965e-06 +PIC.Core.CS002HBA0.HBA_ZERO.HBA_110_190.delay.Y = 6.876319e-06 +PIC.Core.CS002HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS002HBA0-0.udp] +PIC.Core.CS002HBA0.phaseCenter=[3826600.961, 460953.402, 5064881.136] + +PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.phase0.X = 0.000000e+00 +PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.phase0.Y = 0.000000e+00 +PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.delay.X = 1.649378e-05 +PIC.Core.CS501HBA0.HBA_ZERO.HBA_110_190.delay.Y = 1.649378e-05 +PIC.Core.CS501HBA0.RSP.ports=[file:/localhome/lofar/test_sets/3sec/raw-b1919-hba-CS501HBA0-0.udp] +PIC.Core.CS501HBA0.phaseCenter=[3825568.820, 460647.620, 5065683.028] + +Observation.Dataslots.CS002HBA0.DataslotList=[0..19] +Observation.Dataslots.CS002HBA0.RSPBoardList=[20*0] +Observation.Dataslots.CS501HBA0.DataslotList=[0..19] +Observation.Dataslots.CS501HBA0.RSPBoardList=[20*0] + +Cobalt.Correlator.nrChannelsPerSubband = 64 +Cobalt.Correlator.nrBlocksPerIntegration = 1 +Cobalt.Correlator.nrIntegrationsPerBlock = 1 + +Cobalt.BeamFormer.flysEye = false +Cobalt.BeamFormer.nrDelayCompensationChannels = 256 +Cobalt.BeamFormer.nrHighResolutionChannels = 256 + +Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband = 1 +Cobalt.BeamFormer.CoherentStokes.subbandsPerFile = 20 +Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor = 2 +Cobalt.BeamFormer.CoherentStokes.which = I +Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband = 16 +Cobalt.BeamFormer.IncoherentStokes.subbandsPerFile = 512 +Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor = 4 +Cobalt.BeamFormer.IncoherentStokes.which = IQUV + +Observation.DataProducts.Output_Correlated.enabled = false +Observation.DataProducts.Output_CoherentStokes.enabled = false +Observation.DataProducts.Output_IncoherentStokes.enabled = false + +Observation.DataProducts.Output_RSPRaw.enabled = true +Observation.DataProducts.Output_RSPRaw.filenames = [L102030_CS002HBA0_0_rsp.raw, L102030_CS501HBA0_0_rsp.raw] +Observation.DataProducts.Output_RSPRaw.locations = [2*localhost:.] # NOTE: .run file from test program overrides this value + +Observation.Campaign.name="BLA_000" +Observation.Campaign.title="BLA: the unsearch for Binary Large Asteroids" +Observation.Campaign.PI="Maze, Dr. Twisted" +Observation.Campaign.CO_I="Mace, Dr. Peninsula" +Observation.Campaign.contact="Maze, Dr. Twisted" + diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run new file mode 100755 index 0000000000000000000000000000000000000000..a7bd4043c0711ab3af7128d2f8a781484c4c5d5a --- /dev/null +++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.run @@ -0,0 +1,8 @@ +#!/bin/bash +TESTNAME=`basename "${0%%.run}"` + +# Replace output keys in parset (for now append; TODO: replace) +echo "Observation.DataProducts.Output_RSPRaw.locations="\ + "[2*localhost:${PWD}/${TESTNAME}.output]" >> ${TESTNAME}.parset + +../runtest.sh "$TESTNAME" diff --git a/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.sh b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.sh new file mode 100755 index 0000000000000000000000000000000000000000..77618c6ec665142df5f97632d1b7d2424b5a3070 --- /dev/null +++ b/SubSystems/Online_Cobalt/test/RSPRaw/tRSPRaw.sh @@ -0,0 +1,2 @@ +#!/bin/sh +./runctest.sh $(basename "${0%%.sh}") diff --git a/SubSystems/Online_Cobalt/test/runtest.sh.in b/SubSystems/Online_Cobalt/test/runtest.sh.in index 04e5845e1ae4447d6dc566597ae5dedfda074c17..bd8240e750ac37b788afba28cc0fb3d6cd279570 100755 --- a/SubSystems/Online_Cobalt/test/runtest.sh.in +++ b/SubSystems/Online_Cobalt/test/runtest.sh.in @@ -60,6 +60,13 @@ echo " in directory $(pwd)" done done + # Run custom output validation script if any + CUSTOM_CHECK_SCRIPT="${srcdir}/${TESTNAME}-check-output.sh" + if [ -x "$CUSTOM_CHECK_SCRIPT" ]; then + echo "running custom output validation script: $CUSTOM_CHECK_SCRIPT $PWD" + "$CUSTOM_CHECK_SCRIPT" "$PWD" || error "custom output validation script failed!" + fi + if have_qpid; then # validate the contents of the queues mkdir "queues" || error "Failed to create temporary directory ${OUTDIR}/queues"