From 55c2c71df9753cf8ecd15c86c54f353e4e155f7b Mon Sep 17 00:00:00 2001
From: Wouter Klijn <klijn@astron.nl>
Date: Wed, 19 Mar 2014 10:42:54 +0000
Subject: [PATCH] Task #5565: Implement review comments

---
 RTCP/Cobalt/OutputProc/src/MSWriterNull.cc   |  18 ++++++++++++------
 RTCP/Cobalt/OutputProc/src/MSWriterNull.h    |   8 +++++---
 RTCP/Cobalt/OutputProc/src/OutputThread.cc   |  10 +++++-----
 RTCP/Cobalt/OutputProc/test/tOutputThread.cc |   4 ++++
 RTCP/Cobalt/VisualStudio/Cobalt.v12.suo      | Bin 447488 -> 428544 bytes
 5 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc b/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
index b51abcb3d6a..4c63ca356c7 100644
--- a/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
+++ b/RTCP/Cobalt/OutputProc/src/MSWriterNull.cc
@@ -33,8 +33,14 @@ namespace LOFAR
   {
 
 
-    MSWriterNull::MSWriterNull ()
+    MSWriterNull::MSWriterNull(const Parset &parset )
+    :
+      itsParset(parset)
     {
+      itsConfiguration.add("size", "0");
+      itsConfiguration.add("percentageWritten", "0");
+      itsConfiguration.add("startTime", parset.getString("Observation.startTime"));
+      itsConfiguration.add("duration", "0");
     }
 
 
@@ -43,17 +49,17 @@ namespace LOFAR
     }
 
 
-    void MSWriterNull::write(StreamableData *)
+    void MSWriterNull::write(StreamableData *data)
     {
       // We do not know why the creation of the propper writer failed.
       // Assume nothing and only report that we did not write anything
       itsConfiguration.replace("percentageWritten", str(format("%u") % 0));
+      itsConfiguration.replace("size", str(format("%u") % getDataSize()));
+      itsConfiguration.replace("duration", 
+          str(format("%f") % ((data->sequenceNumber() + 1) *
+            itsParset.IONintegrationTime())));
     }
 
-    void MSWriterNull::augment(const FinalMetaData &finalMetaData)
-    {
-      (void)finalMetaData;  // mirror implementation in MSWriter.cc
-    }
   } // namespace Cobalt
 } // namespace LOFAR
 
diff --git a/RTCP/Cobalt/OutputProc/src/MSWriterNull.h b/RTCP/Cobalt/OutputProc/src/MSWriterNull.h
index 73cd01a6598..6f134b12edf 100644
--- a/RTCP/Cobalt/OutputProc/src/MSWriterNull.h
+++ b/RTCP/Cobalt/OutputProc/src/MSWriterNull.h
@@ -33,12 +33,14 @@ namespace LOFAR
     class MSWriterNull : public MSWriter
     {
     public:
-      MSWriterNull();
+      MSWriterNull(const Parset &parset);
       ~MSWriterNull();
 
-      virtual void augment(const FinalMetaData &finalMetaData);
-
       virtual void write(StreamableData *);
+
+    private:
+      const Parset &itsParset;
+
     };
 
 
diff --git a/RTCP/Cobalt/OutputProc/src/OutputThread.cc b/RTCP/Cobalt/OutputProc/src/OutputThread.cc
index 5a73b1ec722..2f26c57ae93 100644
--- a/RTCP/Cobalt/OutputProc/src/OutputThread.cc
+++ b/RTCP/Cobalt/OutputProc/src/OutputThread.cc
@@ -258,7 +258,7 @@ namespace LOFAR
         if ( !itsParset.realTime())   
           THROW(StorageException, ex); 
 
-        itsWriter = new MSWriterNull;
+        itsWriter = new MSWriterNull(itsParset);
 #if defined HAVE_AIPSPP
       } 
       catch (casa::AipsError &ex)
@@ -268,7 +268,7 @@ namespace LOFAR
         if (!itsParset.realTime())    
           THROW(StorageException, ex.what()); 
 
-        cleanUp();
+        itsWriter = new MSWriterNull(itsParset);
 #endif
       }
 
@@ -323,7 +323,7 @@ namespace LOFAR
         if (!itsParset.realTime())
           THROW(StorageException, ex);
 
-        itsWriter = new MSWriterNull;
+        itsWriter = new MSWriterNull(itsParset);
 #if defined HAVE_AIPSPP
       } 
       catch (casa::AipsError &ex) 
@@ -331,8 +331,8 @@ namespace LOFAR
         LOG_ERROR_STR(itsLogPrefix << "Caught AipsError: " << ex.what());
         if ( !itsParset.realTime())       
           THROW(StorageException, ex.what());  
-        cleanUp();
-        itsWriter = new MSWriterNull;
+
+        itsWriter = new MSWriterNull(itsParset);
 #endif
       }
 
diff --git a/RTCP/Cobalt/OutputProc/test/tOutputThread.cc b/RTCP/Cobalt/OutputProc/test/tOutputThread.cc
index 00dda6749ce..45ad70cd468 100644
--- a/RTCP/Cobalt/OutputProc/test/tOutputThread.cc
+++ b/RTCP/Cobalt/OutputProc/test/tOutputThread.cc
@@ -36,6 +36,7 @@ TEST(testCorrelatorOutputThreadThrowsStorageException)
 {
   cout << "testCorrelatorOutputThreadThrowsStorageException" << endl;
   Parset par;
+  par.add("Observation.startTime","2011-03-22 18:16:00");
   par.add("OLAP.CNProc.integrationSteps","256");
   par.add("OLAP.IONProc.integrationSteps", "4");
   par.add("OLAP.correctBandPass", "F");
@@ -108,6 +109,7 @@ TEST(testCorrelatorOutputThreadRealtimeThrowsNoException)
 {
   cout << "testCorrelatorOutputThreadRealtimeThrowsNoException" << endl;
   Parset par;
+  par.add("Observation.startTime", "2011-03-22 18:16:00");
   par.add("OLAP.CNProc.integrationSteps", "256");
   par.add("OLAP.IONProc.integrationSteps", "4");
   par.add("OLAP.correctBandPass", "F");
@@ -157,6 +159,7 @@ TEST(testBeamformerOutputThreadThrowsStorageException)
 {
   cout << "testCorrelatorOutputThreadThrowsStorageException" << endl;
   Parset par;
+  par.add("Observation.startTime", "2011-03-22 18:16:00");
   par.add("OLAP.CNProc.integrationSteps", "256");
   par.add("OLAP.IONProc.integrationSteps", "4");
   par.add("OLAP.correctBandPass", "F");
@@ -231,6 +234,7 @@ TEST(testBeamformerOutputThreadRealtimeThrowsNoException)
 {
   cout << "testCorrelatorOutputThreadRealtimeThrowsNoException" << endl;
   Parset par;
+  par.add("Observation.startTime", "2011-03-22 18:16:00");
   par.add("OLAP.CNProc.integrationSteps", "256");
   par.add("OLAP.IONProc.integrationSteps", "4");
   par.add("OLAP.correctBandPass", "F");
diff --git a/RTCP/Cobalt/VisualStudio/Cobalt.v12.suo b/RTCP/Cobalt/VisualStudio/Cobalt.v12.suo
index b50331d9868e0ec73635e12eccb366da14ad49bc..eb5a109ed6e657986cb85892446255cfbaa42cb4 100644
GIT binary patch
delta 4340
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

delta 8365
zcmZpeBGs@$dV-DCDn<qd0R{$!fB*mgXJBApU}j)oFk)a};9y{22w`Mk*v!blu!WI<
zp^kC-f^0^GjSW?dlbCY&9;`GLy5o4Bv4xR=f#K`qDyAyN%agw{)ic^oE@kc(oX5bx
z@b^CgR81CS5zduD66IxNU?^Z@U;wF6U|?VfW?*1=#=yYv1*#^9k%7UIfq_Asfq_AS
zfq_Aifq_AWfq@~Pk%2*(fq_Amfq_Aefq_9D<X&co`?oSMFz_=nFuY-4U@)CLkwse|
zk&%JHjG2KU25QsfGb|Evs*DT_>>%$kFfjNqK%8LA$iU#l01Ar9OsrO%>lqmsf*2SW
zPEK}ZRp+x{W?;C(z`$V1%)n5{IJt_|jOjVU<V~!*cpWAMiGYG(D<cC#!{kb)YQ~4)
zP`Ew0lzno&Ez~cDj1c#M{15Uka>#6EU|;}+1xOqe4j>viEI@o*VX=k*Gc1G=VZj9t
z3^7n(h_r)(6B-yGC$KUwFigI{A_5K&kUb&L0I6hTU_c2FBf*V~3=9Db3=Er)1BO=;
z8Zgq#3=B6WSF)NjuAID))tPa_=C7RT%$hgYA^rxXEf~Jb&cJYwoq^##I|IW5nEb@T
z>P2Eqn|OQ}8UIZz+&qa-LMND+fkBLsf#Eg-1H(lI28K*V1_oh91_lvE1_mVt28LS<
z3=FCa3=E1OPq^>}utYI3Fif7or^8|l5;?(Vz!*CDC!adwjLC}p>WTu43=B4mkVJVG
z8t2~`7#QX<Ffep6FffQr&)mysEoR5az|aPj4rGQT4K8rX7c(ejWMBw|rXx^jf$&T;
zK1d7{v><ws7!$}N{$zS2fvJpf@-IF$7LZw!RrpolegFx8{E*Gaz<}b1$(j7p_0|jw
z3>l0J4EGoq7*rS;7)lr!7+y0lFqkniFyt{ZFu=UX%fP^3%?t?<E=C3hH3kL-P6h^s
zDGUq@GoT3<=4DXiB{DED<UoVQih+Tlf{}qCj)8%p8X5!(89+HGaWb>af$7eVm~1D>
zeqrAR%6|EbldHwlH!De9VrFk;WMG(+!#KHGQ*-)~LyQ5FOB5Pd@31p4=uNJ4(VncL
z_-C?$g39D0Vg_ItJDAL76~#MjlSEV|s|YFZhA}cQcrh?A#4<849GM&_q|Q5$fq`KW
z0|Uch1_lO)$*n@#3ZO7r$H2hwfq{X6jgf)j6axc879#_LKh(98F9_K%@iR>36P99n
z$1qt-)Qd$Plz=LPRhR-9CeIU=Vmik#d6%%;<c3<6$xD0#wwDMn_ApM;RoSef^G9^D
zLYWH36-EYz>mW@5rW%_|%GNM$R&aTsI7vu`2NVavj0_CiproiFBqIQF4$R3Q_T&&D
z6<!bn#nrN)IKbs<w#jFO>{a;~7#M^Y7#OZGFfe#CFfgoTWMD91WMGJ7WMFs)5@Tdw
zSUuTLSYKidBLjm5BLl-%1_lOokSjrjC5WyNR)M6c1;P?gPcF+~WSXYHq_SBh>kjv{
z48|`KpcuDjXJBw(XJBw-XJBxGX4UCDnT%f+Rj^EIDq*}ixwNUC(RK3Irg|nrrpaZ^
zb!^8N7#RGRrdN40X>C@iyTd$5NoBK&(;vpo3M~)h7o{;xPikW}*le)uL+11ak&G;p
z)fA;B+b!9~7RJoL@LOr}FIBC{Y8q0L?Uo*zZZwy*V|#}XV+G?hEyf>=0o#9SF|spm
z6JuoJo6huz=@Vn%^skSY>KOy3mp*3dUZ%##vg{ud6XT}ojyz2L+b8HS76?viDq%X#
zHo2^+j%fqK<Zn%NOsg2c&IA>(eoWhc*)y`SO!8CNuCj{h4&yXWMwRU<Zj66~r!O#J
zWSP87OKP&6Ki75-JH{Q1(}hf#>!vFdGfQos5yP0lz08G?X*$z9)|%-Byew?no3a?|
zWT)9NDoj?;Siy1`6wCpp8k4_hgiJmmrZc%j(|@wFg5l&ZnmWrBx)?RKE8JrYVPw2D
zz4Sg~_w=BBtk<?*+rp^D&Uj|B<L>_L6FL|R7^lr)%9>u_$jmeSLjkMW_Bs0)Qv{d2
zV`5r%iIHd96(%!ALB*L%LsY#Nm9%FZ+o2V=={&>akA|YtW3DnSncUDLuwCE*;|Isd
z4K6C1RkZFfE>mIBnBEWt@?sR@d`3=iNxmKGP%cAu28M5->YrizKVK#$v1K2an3kn6
z>1<oa<iNDuVG7d$!AVOLwks@SdcZubk&$ouhHOTGi4AUyozoLznB*rmu+)Rf2T+P$
z0nK3`HVA{tj6enkh9%JQ;s^r+1E{P3$$_v3BLl-CMg|6VXz2_pJ~@~f7(i~@!N|a{
zlaYa87b641Zbk-%J&X(tdl?xR_AxRr>}O<PIKarjaFCIK;SeK3J;Py8alpvHaFmgO
z;TR(W!*NCih7*ho3?~^G7)~)VFq~#&U^v6bz;Kq4f#Dn@1H*Yn28Iia3=9_;85k}x
zGBAK*4V0y?GBPk+gJ$g;j0_An85tOEfodW~28KI~3=DTcg)1Wi!+k~uh6juc3=bI@
z7#=a!GcY`6WMFv0$iVQFk%8eEBLl;8Mh1o#j0_Af85tN}fl6Ue(}a<M;VmeyGBPl{
zXJlabz{tSxk&%Jn6C(q|XGR8wFQ6RD$iVOoRJJoRF#KR-VED<%!0?Naf#EkJ1H&Is
zD1n+2pil<2y_gsnVi=qm@~1C%X3?B>lbL5a4;P!rcE2@Dn;565FqW_>GBYsn%Wkhy
zVXR{01{E+(;CN=3t|-dvxZPm`(*fa0OTMt#Ff%aJpya@1$C%irH<+_|GBQr@N@YtC
zPGMkRFkxU|aARO#09nnza0--Mrw1gmZJ1uPghgq(g8`G<_Kb5(Ggy~hU}T!U$eG1s
zyT>G^9gr;S1Ifb6ZZR=UQ(|hUH(+L9P-13aP-bReP+?|ZP-SLdP-A9bP-kXf&|qd@
z&}3#{&|+p_&}L>}&|zj^&}C*|&|_v`(1$j03_&$30|SFGGXsMO$P7?P$H2f~&dk7I
z3aTF%7#OTTW-u}^_%Smu*fKLP*fBFO*fTRQI50Cz|F6WvYvjVrz~IWvz~IKrz~Iiz
zz~I5mz~ITuz~IHqz~Ifyz~IBoz~BqD@C5?{Ln^p6pfIsv(Xx9?Ow${z7*$Y9ift~8
z3QUj;&UAupdf9!(u4U_(n8b=085qhzvG@P~e^43+wY1w9r;9yc^5U2Uip~H3|4+|&
zz!bp7$OOs_(B`%h<1`;ehwTopm<}+5i-d$U7NhBNlGs!P?mRdn_r#TjE5;=5(qHD4
zo2ENTur*8<;A2#q{vn7_Xu98O7LMr?>X{6tJKSJ0VO3^jV0g3r=W`}@rfEUU1}uh5
z3=G>%elVS3T=s>DY1;=T2}T}Ju@A%3RX#G^nf8t82+Jl028Qh?zA;%aZu`YFfob}L
zFlK@23;r-I0ILVJlR<i>`}}3vGWm<4z;uB-Oc87u%nS?x%wS(kY}hp2;Vx4GsBsrR
z&5BWJs}l1))@2;bY>XSWGx9P2SD*Hbsf00bdg(K!|BPDGOH~=`!ATX=$YWq&m_Bh4
zWAt=`Dwe42Tg;e!G$*Z6*{;IIe1~z;52eXV+-0`gB{3gbIQ`NkCYR}PyP4UxdnGV$
zW1L>Jo+V;>TpbI~_7pajIjYl*-Y|=87h_?0#W>x;hSh1>c4o2d5jrd@LZ>?|WU89}
zK#!SY`kn(UT-$qESW4KZGl{dtO;+gSn!bmN#bo=OCYBV&=>j4we%t+eST->(o4~?1
z{n3ABiR}`7EH4<RC+uOinl2Z@8ZbTK7^A}WRr6Txa8G9vW3iehz??VzEC(CkcA+&a
zN0_D;Nij=JPuR$$u-$3{%P~e~28Pn<|Ls{<Pd}i*;xqlidKQD}1!7EX(?6K77)-yV
z#lp4yz$O+krpZCa@+Lc+;+tM@lZ9=%%2t-F=@+K58cZ+v#%ecx!**tl=}FsJ=1o`H
z#jG@4OM^uRq~y-F9V|>t(@pL%Pndq;IFrG&`%E0$*X(BD5t^PfompYK!a0@)tkZX#
zW$~K6z=_#pdR`fe(`3EPGSeOAu&`~Pb%o`Y)O02X)<e@9#96ea3z#soY<K&}vWsJK
zf!?fTzgSp6d3U<vR+i*t|5;e4Z^&hBnBE}ADmA@m2eZ?5Cl=OylG|s=v8D-6e{h3Y
zVY-4HYt8g4s;rZ?PcdT6;ht{vmf2?eH9J-<_Gx~sv!*w#W;NPw<i>iAeR|Ra<`vT&
zL|N3P>*cd@O;5>X{j@zLfOU@G^r~tmzUh1&tUc2=1u#}YoK%;@+N3)Dfex$Ibc3Ue
z3frG_u*xt_clgIDG5yUVMycr=>RH*QTTEk3ntrH>rEU5JJ!Zb?C(bbQZC}*I8pl0Z
z$#&XwgXyf7COiC2n4YwS)na-|7qi!PuNkb{q^D1cWXqeL5X)#b{XjD-+jf_&tb5p|
zpF6|MF`Z){>!j&T{A_8{*ElfCOn3Oi%Cfy}4{H_U^rjh10n=nyq^56ZXVu!Sx1aTr
z%5;Z|%r?^}JY(gW?)Hu~WO|Ss^Q`F(hD=)9k33<u;hZjXmu1oP15a7Gw!6J&{U8YH
zm@&jnpUB8&Jbix$o6Yq5MQkS1D_Ys4w#PBD-Dl+i)rX)G7=$M~?4B@r!Xc^2Rdy1f
zw8t{t>IAdUbU_X_5yk`48|xU?Pyg_MQE2*Y4z^I1pnp47O%IS{%bOk|$)+<si<3=c
z`#(-LCId!>=?A6Q?6*5uu}$KfF7C#r7r-ye03I3OVz|oaVr5`uU{!74Z02O-=;oqp
zX6R<2YvO8TuIuFDWTETk>g?iZ=HhH%;_O;m<DBoASCU$kmYAFxgT$WBr_N?HeSsO9
zoEVa5OmR_iOh95$acaqAsd;LyMvg{CwKrfEIy#%Uy1JN}>6#gsSm>I#SQzM97@HdC
zx|uqfn;IJ#TR1x#*Vg!#mK2nh1Qg{b$3U3VxzyRrz*b2^1i*42n;_hfjH1-U6oh@Z
zsAium!~(E=C8@<FF(nWIbQ`JXLn(*_U>iX`^bHO#$}CAO@+-}m?x@P9;{cC6iUU&u
z%_{eRP>{8r{)mvgPLq&C^H+{u#$?%f%531Ya(ud=8(aSL2bFAEEJY>B1qip?qncY3
z(L4?dW9R&$qSTzkl2oL$bdzef%AnaAT$+@Wn3n>HUW7NPmz3o2SqKU9U~rf-GB7YQ
zGqkeXhB2CT&?|vKqMLoYlnYxL6F9!7ztUg}o94-;@909OL@o^WJ`X(M>m?^Afy!z3
zdbFTJRsm^mBS;AbPz!GvLV#fvsBg}|z~Dl5_F=~;`H)K@?D<C&>=`~-V)iS|$<fP5
z!Rj4UHApT8Ga()VGogeAl;&YzU|@o>H&tc@&X(_TAf~XDA+B^s_9OPv)&uNE76un$
zY^9c^;$TY!P>O!N<m7aWpv82vUUD)txZo5dbY<XtnFG!Y3=I09<U&r?=fPf45~@Z7
z`BBn9a&juzH(qGz9!(M4(NG4&FI-R_h~j2oV6X@I1zS1J2M$PfP_eF;oE!zRF`&LE
zIR+{K(vOTGrh|sXV4^Y5E};vhr820V(<@7^C@7jPqRyrRZd(v6pP}ghrQFs_PEG^)
z1Ea)1R|WF|jD~oQAI4>1U{HW!<V-eW2m7M6S2_@7GR`KO3f0<de&ASQVL%kZI4z}`
zodRGxIUx;4z2xKsNSI=8SmMl7Z$YzN;1K0Gz{3KWOmQJ6Q$h0-E4U$wXnhh<p^AY$
z!jBsJ8Ia6{Ua6od0y`XufTR%6L>WvFG=atj%3S36iHn>THPl0paskrp)q|B5=pI5-
z1amfwhIj}x^9B<E%??_CJVajG4y%WVYurhL<4F`&z9CwEddbPt6WiHLreDZl6Y+=m
z2vk~tJ2qIA!#o3{A>KsJ*`Q%MkSx!1M;$it=?Vdi3iyf1228Bebl5ni^QyBMg9<0s
z=?*$<A=5)t*>t8i=(9CUKj6>iu-w6rjd6O=9_EJWM(0@^80SoOw4XUWA&!w{`aN~F
zN7IYWv#3o^3u4olti!}Ly+Maf1Wasq&}4I9oIWX;O=S9|WJVpvJChrYE2mp&vz?mm
zV#!uBy&;^<Vfz6cwi8T~*EDlY(_v$o-Vn{kF+DDlEs1g4WX9yJlb0oVO*b-Swwj)h
z&8WA1MHE{E<MabYY!1_6K+ZB|W1Q{~&*reb!Gx`Waa$P3x+Bd@Hq#rD*<7|C2xn_!
zoX(cOwrg4xTf_843z&7LFYsg*n*J||?cVgDct(}!P4R3Z(?wL6bT~m>V$c9(9jHJs
z-fok|R>3%3H;b)#`u-9&+3CGaY|_)?7}-R(GiI>qFipSO!j`{%Ll#>p^Yr$7w(@E9
zYys0BFtQ0PZ_i_6oW8T1EfvxE2I(`}URS`z$T(d)pUrFf*&;Tf?e&FhER56Ri`g<k
zDjT++C}vAyoL*PJ7QLONjBP99^!XKRCet6}ut|aRi*9eMU<={d?$XM(oq4)=0HY@U
zh{Yu<&B!yoKAuez9N6pP*+jNG#jyQjV*cRFIh{M2&2BoQIa~eoLJ2mF=@)!i9HwVP
zu-%xxNSei9`i5{ef$3S%Y;xe}0f#7B#B6tnVPj&R?y{aWYI{sPn+hW%c${~8Kq6ZK
z<8*^OmWFA`YzL;Lu(3>MNn@J=53}j*d2A}v`8(MRwx392yTi0yH;e5D^YkT|Y@MK>
bNt%A3olS1Lc0St$Ng{nNyPfd{(|<+);uhOT

-- 
GitLab