From 9719d18658757dcff0e3a4f58be2c11bb63ff429 Mon Sep 17 00:00:00 2001 From: COUPPEY Date: Thu, 24 Nov 2022 15:10:08 +0100 Subject: [PATCH] decArgo_20170530_012a commit --- .../argo_floats_information_co.xls | Bin 83456 -> 83456 bytes .../_CoriolisArgoFloatVersions_20170410.xlsx | Bin 22656 -> 0 bytes .../_CoriolisArgoFloatVersions_20170516.xlsx | Bin 0 -> 22678 bytes .../_argo_decoder_versions.xlsx | Bin 20743 -> 22655 bytes .../_argo_tools_histo_soft.xlsx | Bin 9123 -> 9193 bytes .../_config_param_name_212.csv | 2 +- .../_config_param_name_212.json | 2 +- .../_techParamNames/_tech_param_name_1.csv | 2 + .../_techParamNames/_tech_param_name_1.json | 16 + .../_techParamNames/_tech_param_name_11.json | 16 + .../_techParamNames/_tech_param_name_12.csv | 2 + .../_techParamNames/_tech_param_name_12.json | 16 + .../_techParamNames/_tech_param_name_17.json | 16 + .../_techParamNames/_tech_param_name_19.csv | 2 + .../_techParamNames/_tech_param_name_19.json | 16 + .../_techParamNames/_tech_param_name_201.csv | 142 +- .../_techParamNames/_tech_param_name_201.json | 266 ++-- .../_techParamNames/_tech_param_name_202.json | 266 ++-- .../_techParamNames/_tech_param_name_203.csv | 144 +- .../_techParamNames/_tech_param_name_203.json | 272 ++-- .../_techParamNames/_tech_param_name_204.json | 48 + .../_techParamNames/_tech_param_name_205.csv | 6 + .../_techParamNames/_tech_param_name_205.json | 48 + .../_techParamNames/_tech_param_name_206.json | 48 + .../_techParamNames/_tech_param_name_207.json | 48 + .../_techParamNames/_tech_param_name_208.json | 48 + .../_techParamNames/_tech_param_name_209.csv | 6 + .../_techParamNames/_tech_param_name_209.json | 50 +- .../_techParamNames/_tech_param_name_210.csv | 10 + .../_techParamNames/_tech_param_name_210.json | 172 +- .../_techParamNames/_tech_param_name_211.json | 172 +- .../_techParamNames/_tech_param_name_212.csv | 11 + .../_techParamNames/_tech_param_name_212.json | 182 ++- .../_techParamNames/_tech_param_name_213.json | 172 +- .../_techParamNames/_tech_param_name_24.json | 16 + .../_techParamNames/_tech_param_name_25.json | 16 + .../_techParamNames/_tech_param_name_27.json | 16 + .../_techParamNames/_tech_param_name_28.json | 16 + .../_techParamNames/_tech_param_name_29.json | 16 + .../_techParamNames/_tech_param_name_3.json | 16 + .../_techParamNames/_tech_param_name_30.csv | 4 + .../_techParamNames/_tech_param_name_30.json | 32 + .../_techParamNames/_tech_param_name_31.csv | 2 + .../_techParamNames/_tech_param_name_31.json | 16 + .../_techParamNames/_tech_param_name_32.csv | 4 + .../_techParamNames/_tech_param_name_32.json | 32 + .../_techParamNames/_tech_param_name_4.csv | 2 + .../_techParamNames/_tech_param_name_4.json | 16 + .../soft/sub/compute_prv_dates_201_202_203.m | 24 +- .../soft/sub/create_nc_mono_prof_aux_files.m | 2 +- .../sub/create_nc_mono_prof_b_files_3_1.m | 1407 ++++++++--------- .../sub/create_nc_multi_prof_b_file_3_1.m | 1368 ++++++++-------- .../sub/create_nc_multi_prof_c_file_3_1.m | 2 +- .../soft/sub/create_nc_traj_c_file_3_1.m | 2 +- .../soft/sub/decode_provor_iridium_sbd.m | 33 + .../sub/decode_prv_data_1_3_11_12_17_24_31.m | 12 + .../soft/sub/decode_prv_data_27_28_29.m | 11 + decArgo_soft/soft/sub/decode_prv_data_30.m | 27 + decArgo_soft/soft/sub/decode_prv_data_32.m | 27 + .../soft/sub/decode_prv_data_4_19_25.m | 11 + .../soft/sub/decode_prv_data_ir_sbd_201_203.m | 70 + .../soft/sub/decode_prv_data_ir_sbd_202.m | 70 + .../soft/sub/decode_prv_data_ir_sbd_204.m | 65 + .../soft/sub/decode_prv_data_ir_sbd_205.m | 65 + .../sub/decode_prv_data_ir_sbd_206_207_208.m | 65 + .../soft/sub/decode_prv_data_ir_sbd_209.m | 65 + .../soft/sub/decode_prv_data_ir_sbd_210_211.m | 80 + .../soft/sub/decode_prv_data_ir_sbd_212.m | 108 ++ .../soft/sub/decode_prv_data_ir_sbd_213.m | 80 + .../get_nc_tech_statistical_parameter_list.m | 19 +- .../soft/sub/get_prv_data_one_tech_msg.m | 3 + .../soft/sub/get_prv_data_two_tech_msg.m | 3 + decArgo_soft/soft/sub/init_default_values.m | 2 +- .../sub/interpolate_between_2_locations.m | 0 .../store_received_packet_type_info_for_nc.m | 187 +++ .../sub/store_tech1_data_for_nc_201_202_203.m | 4 + .../sub/store_tech1_data_for_nc_210_to_212.m | 4 + .../sub/store_tech_data_for_nc_204_to_208.m | 4 + .../soft/sub/store_tech_data_for_nc_209.m | 4 + .../soft/util/ge_generate_traj_from_nc.m | 24 +- .../soft/util/generate_csv_meta_remocean.m | 25 +- .../util/generate_json_decoder_tech_labels.m | 16 +- decArgo_soft/soft/util/nc_check_file_format.m | 29 +- .../soft/util/nc_duplicate_pres_axis.m | 821 ++++++++++ decArgo_soft/soft/util/nc_tech_2_csv.m | 3 + decArgo_soft/soft/util/nc_trace_cycle_times.m | 95 +- decArgo_soft/soft/util/nc_trace_disp.m | 10 +- decArgo_soft/soft/util/nc_trace_param.m | 5 +- decArgo_soft/soft/util/nc_trace_times.m | 19 +- decArgo_soft/soft/util/nc_traj_adj_2_csv.m | 2 + decArgo_soft/soft/util/sub/get_sensor_list.m | 3 +- 91 files changed, 5150 insertions(+), 2131 deletions(-) delete mode 100644 decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170410.xlsx create mode 100644 decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170516.xlsx rename interpolate_between_2_locations.m => decArgo_soft/soft/sub/interpolate_between_2_locations.m (100%) create mode 100644 decArgo_soft/soft/sub/store_received_packet_type_info_for_nc.m create mode 100644 decArgo_soft/soft/util/nc_duplicate_pres_axis.m diff --git a/decArgo_config_floats/argoFloatInfo/argo_floats_information_co.xls b/decArgo_config_floats/argoFloatInfo/argo_floats_information_co.xls index 959850440fba8cc34a37011925aebd51530a3de8..f0b699f1b541c3a345d4b6acad64acc7aad76ccb 100644 GIT binary patch delta 24 ecmZqZVQm1SEsQxXY!?_fPXyfDUgW~q#|Qv$j0n{L delta 24 ecmZqZVQm1SEsQxXYzoy?50CHJUgW~q#|Qv*%?X46 diff --git a/decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170410.xlsx b/decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170410.xlsx deleted file mode 100644 index 85aa20db8b444de8a259563d7e3d5c839cbbc765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22656 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 diff --git a/decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170516.xlsx b/decArgo_doc/decoder_user_manual/_CoriolisArgoFloatVersions_20170516.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..75cd739e3f54ba1dfb8b13cff53bd5d8c9f65e06 GIT binary patch literal 22678 zcmeFY1Cwq`lr37eZQHhOdzWq7wr$(mW!tu0yUbn2t8=>Vd-p~6{RMqje6b={tQ<3Q z%^Y*i5t;cZNCShQ0Du8N0000G0(668&1M1u06c;L03ZWE0R0lSvvoGHb=Fhyus3ni zp>wyfCMW~}qR0mT`f2}vum8awm{Q%g9AH4{!N0_nvJH#j!Z6b4PTxEx`-4ZoCXQ{L z6z}xm^`5grsk}r4wJ9r|m3?!Hb6>Lf3)Q39-+yFXr1_vUysuOan_G5h^-uR54H1dS z?}?lck!nEEIxoLf%o<+(p=C7W1jJW#O2+AY1q^QZRCO{sl*kumnG*Fg8Ck)WtZDKL zE@}M=LDJAau5S#A57~vSsNXvjnAp^XtJ6J+REQJrTg8zY<=PrP0t@y@5t4$P&bkcF z(R}_3>3|9eqkI^qFv0|eMifViGXR{rVsD33ClgW_rXz>IzxewVYO`HkI&2+UYJ0G? zci}C^cccyScy9DrM1WEM2%~Okw@(}|gsiW%YkKRN@NW9vRACNj>z#pV(_BV>!qodKl58(>G6xC}BQfH2iV4;z{JjgBGuaqbJ=3VVc^ z&xyC0xR|;0{siv#H!y(0|1YF}t1=M({o$$1PsBq1gtVTciM10w-9PvL8_NHK?kPC^yDK9Xzv-!Vlb0?$vuz=2XmoAXbnv;4ny zu1_pf@No?34X53|HUF8>6DI zI+8z#4OwvIQK0WG9ZM1z6ekSK=aVqYO}3Jcc|&{g6li&t`z;~By}&E^-gsUcTUli7 z-04qz4AbPI1#*$OCtZ()O`$7hH_J1HCMAPVAF>w_$KQ#JfOE+U?55~8`JN^6tig`=B~ zCx~FBWg(}jTwfqi*uk&WZ&1$ZL!|UCNns=@Xz2P)aq)tF9i;=FP4*JqW2O-%)|rdP z3hV@rY%9~pvcF*|Wo$~IeKi|_Tu|K1w^e6{t+cnpu~}SdoyM3Q`iwCGXXN=D0d=|- z$>=y)#1KK<;1PT1c$$7A_Move!zQc2*dPC8?yz*Bj%v#l-9Qg5)X*@xP+usRn7@gi zhnY_}@{sh`MwFv&8)4bohIi2a9fOSd!j$KKSmE)*Aow3@{4nT$=T5ZpyyYeXiVyxJ zJ`3WXMI!NtB$^>QOdAVK>JXPJBZZm^4VBdB;-#70n~e+)aVyQl3HL51*KeMA*v(i%D2x3q+uq2NFxw@tJ{MA+$x_Z?pg0j+8Wn;K#*fe z;F=*QcF`;ES#(aN1{dcM5mjC2rIxnMrJ8T|wJHIa3K&ycLY0lgA~x0ao}~`Y(kxg? zXg-bZ`w@*{_wcekk=Fr}3PptIp161l_kHo6UZWp8qHG2|loZ~PWq&1}XkuDi1ka>m zJQdWHBC5H#Jysi2#8bthKlHdkTdIRt%b~pxE;Ir9rBTkDlU-JhboZ4Lak7zE({zo|f zJNwS&CN?JY|K1t@$sU)Q@^;vwD80mYxME&*HsmeX;x3hI4cO+3Vhz8R4&8Zoay(tl zSefO{u`S~yB*FvR2poVR0aLUhq&e>tfkYLGeL;7oE^FNmSS6)EfX;;*xgWBgzq>t{ zz5Z?lg%=1DksLd0R_WAwh7a-KFLIcBxrKg8W8)=4jT%k4%WUjqOWbU%Y})AzXHk(L z3fA+bX0=^~NReixL_Qi|OiuC;GET|1h1UnFBdUx5;R9}mtFBZoo01N&JSjvI6L7=$ zeL#h8=gO4Jchy9D#sNlYNb>G6GtMMx|>twA9zy`JQz+_q%tPx<~3KGuQmRsG;WO^a0kl#9Y1j+tIBh zHw#dI6I7~}N;K{1SF|#2jwbNrkm1_8QNE(%9q{#*I8`H8wrF0`s8I-JjDI2h5@Xra z(|xiBJ9dCA{o-lXxoN}Y4&3;1g4E+zvRvKi4h)4EQzmVGHRsD;k}FJ>eU&=E4$z}0 zyAO>bB8;b#IUGD{sah@i!iVkyU`{X?IU+HQ%+${p?0_y#EZAV`&kjj9wMM8%2Wz1# z@fJu{dDWezFA)LStv=i9@%Mw$^Y6#_-Jsbhd@sN6p5;%4v4Zt?UH8{vc) zm79YfVi+9#y|SC&&`ZGD3OrD0c(R8DIh`1(58xR1Xb!iB8xA*iXaXuTKue6?Z6$CR zpD|-m;Ur{G7M#4LBqCg&DO@f)#C`fn^C+C-3gJpi$S@ZYkR_r-J6V8wrzV}j)VW*M zJEOR=Q!KiL;dDqyKz{fE59u`JjysDIJ0St*Fcb;a8=dr+FU9^)f zq1kfM0^kEJ*Belvo6_MEH%*LAiIS5#-xa}0PvrK}jD0{sIS6NtgVt~}Mj1>Y_O6}M z|J;^E_=fx8f0%OJBOP&gy$Icpi^V}i3nVf-B@#hjhkQMBqd!BIo=yc!x?Qn^81r3i z%?#zT>FBQ9vbn=%ZD=yy_qT(GNRe#5U5EK@32Kr}1a)gM-{ z3>Tu53Q93EWW#S@AcOp5plkCkv>7ttb&)f4(dL`$tIf&x8AOH%v2keX2 z3JZpHfweyG-WDbd?x-NMz+`Akx;yPD!(@SSPEwv?FH1c3s+$hz?R;n$hmmS`Sz}?z z_;f;ic+zjE+W2eg(ejLjI*%O1R+Vc4%0O)mTElXsryT5L`@6-E)}m`=EEt%c&I%^T zLpZrl6luXv|GQ|w>?tU0M+%f20ara7*^yj>83k@4#CwP1Qt2Bd5~mMW2x*f za+}}QO+9;Z?5AD>Yg&y>FYnnSGg-`OIZ09I7MDu{u{Bp~Qp!PQ@}(3ovW-E}4$-eF zY9Hyt;?Mo_+_&rcBgriNAbFJ_p?IG9_W+5zjx5rxUq5B)zZSA(4sPDtpEo)`Wsdm& zlQB-_CMM2K|EY=pefYPg{i}$p6Z@rr84*Hn0&fsbY#S>Gh^C*Ef^~oM2~5pghuV@6 zMlAPqD}%U54@=u+ypFTu57MaP8z6a24U047n*ali56>*>@0q;2JHZ#KNay4b6$AjI zY5ZPQpCr$=K9)Cmtbiz0U}RXy#7m~K9nz1AhKxw!JJF|3^H3P?$iY>h%{-Ai-i0wY zlW91EIg)jQHuRF^t!Rf-Toy|X(mR2KFCNl)$Gw{DKK$UntBO!-ZgTNi1p4; z)8uoCJ1f#rr>n@{p8D}MDXF(WX(EsMz`Qb{`v99`d|teAzr3iZG#y*`3G&}LOv@>O zw;d7yV2v680OP+n>|a+g{ZsynwRD`SIFNjHD?i~;Zj6HLZ^ef*pb&0Vrfp@Xr>^;s zWsp{X%c4m*-h92;_(;?0z_<{J__Rs|zybW>x+p=kk4g^|!2)yBlcuaNixHmvMoCgEdPpcUDJ_ACK_5?yk_5 zg#CTAfFC!r2fL%p0nFLyx*Yq#vnLmLar^2E08wE*sK;j`^!d&-t$6?AIu-KqM);i( z0!pc8~@x=-XxcEUvV4rp7kf?^_ZT9LA2b|Pk7ASl-3Ft-P1wsC zn@U|_@VNUp8Xi&s?%Skx&g<5w7KibsM42>eZTD@j0dJ#=`|GqGUymS&AmHgr`O_80 z?}pFyYX8+FcxBic@IVok{oPKKn}xw+Z-%A-m~|UbW8co6YmNlu>Z0!QtzU9cGcleb z0y3B-de?l61O{)@fCfI97bdgS;8Jb@TyWwHVEoS>)gOqA8nrVfU0PQBHueO1L~nak zZ-i~sul}(q{x+$e<7kZ;S$H%cLu2Rbc2`L*=|$0Gtd0J}TnsC!f6yyU99ra|_KQBh zpqSdI8i$Eme6r-g73&rDsa&E8*B#qs&`SOEU6YJvlw(QV732PH+wA&)DER*&a<8%A zjAEZlI;Jz{?7_*T*Bo`4P8(sbug8+Im&a_`M>0j817_*nP55)-`UMwNj!4kq%^7aW zf0fEj8?t!6*PJXTecXIGmC6}hVF+3=t{^;B#VFYbo6elo zuUELzcmQItHZWE>*}r`nK{UKr!BsZ#kH5wQpFIrii)TJ5PzqilXlBVom>}F0NN9b` z_>`fBx%!19XA9w_r}giRraZ{Q4H#xw8wFd&A;n;%9|JWhMdYIzha8Tc?l_!27&K*l z)i|7IvF0cORFh?kNsbhp^PZEz^H9t>M4Yr>@yH1%6TX6Su?-`dg(eFBFQzZnfCdz{ z5ene4M4eiOGkL&#++@I9G`BW>01cQTS^~;s6_FEil5vGYx|u-=KCY-9zG&EJ*p!^1 zWxz8<6KW99D00Br>=y~M#7)$2Y9nQhBG8Wki}>1v6*OS;m>&bZ`Kr%(Ip|S@mq!fA&8O%mzhK3rU3y_j0jXR zC1K_P3@PwIq-YpUe3BnI&R}!PNXl@ejE)@0V$uh!QVTzzh<`v@eBy=y4WwczWseA) znwNw65um15)(($Dj=%GxMJOXHt;lLxiYcg_A`T+pGl?>Vfa$`i1Y0W2J*6T7xhfYn z$F=DpE~o_a>kNq+#59iyOXcxbbICCx7O+%TWwdN+6hGQUC~FX93jn!j$OB0K&^MpN zX)DaJq*VQeFIGM3%*CSm~ zGZ_*$QGu=-PuzkrtIYUkaddg&UL2!g8WTEH)&&i^sfK1^LAx-yks|zOh?J9~Oifg- za<+VA>KdrYc(wuF8<3?#xnnn%u8ck`?OIk}-o(FGgduA})|aq+W5q_`hdjPl5QS`hhn=`5|f)il0u@yc5^MKhY|FRLS0yiF3tXmcpo zIjD9mXf*EmIW>j1@~!)7oQ1>o2wH*MNWnbyTD4UEM+pESY+jNZ657;o3<**R^rddlOB8 znX(aoI}SAe*g~4KrP=}N4h9CP$kfi?d*B#zt@B%{bz{c_4BDU{%)1q0lzpJX`h(DH zbdu3NxC{!k77yn>1vT3IeDv^SNUTrFo>pcNoYR1!8cksl zCbXT_FFQRoi8LvD&Hre{!pw;V75bd*s++$}XGWi+7#k65N~23>)(w%&Nl%uB3(d=i z(eNQ*Q-p#*h+_9U5@JW%aX^v!$xy1AXdb14ND&G}NjlF|V^pee3L*qKS5>6dns`7O zwSdIiuXU7M?gToSv&Z~CTAuy)_~8RCLd=bEl|aT}6xr;HIdm7wH}AY?ORyKa6J%v< zibzIJcx){_Y{=4pjt` z4&SDLy^yz*4Uw{N#SlqiZ$R2lxvn$0kaB zVxR~dX(+T4fX3uGv(qbK{zW5lvL#|-MEeFw7aB&54<85(jSX%er22YiCmQJbdPs3J z4#A*VKKMNWD6~9q`!3+9*`P!c{W}kZL{N<`Jd(bVG{z@dK(-$5`jFzjle{2O4Gl$y zx9YwDxbavMShSXndeVYjbx&3a0e0Qw(@JFTxEC${*6;H7(?Ji2*xO^$Pi;ik!Cb%j zvFrUTnH8w0^9JmFV3F5dXz$aFfgrfgK1TQR4#h8EN%wsGl$Q6fo*Pe$kq>oW{|wSB zYgFS4Sg!-#-WbH_pZYij@PYyW1R(t% zfF`JLevb*c$Ba>`{c|0oJRC*gH#wErWk#~6Aq~iPU^!L%ZmSX5SrHr{)>KiuY z<7}0lpJvzGM@1WwlBK{{WQi~B>C+5mEMNU@T2WWDj~N zeM#y8A?ekUc0G-Ss>w9Ip4o^;LKuN^5l4|mnggkPSXxY3!YPH-b@?FX&x|#a8BJ#A z=ZU_KbnwjoCZ?3)H~rIrwjGsN${Gfx(npv$SWvS!b!N`>8`o`RAYfa7qbgAN*Wfz8 zFnk6lZ!_zTH4CGO< zQ5h_1$y0e`S-LtRum*E*3E!YOQHTG#hY8opfcpqeWM#fA@=#=+Ps^2uEAMR2>77@u z@GSBe9`LsH8&t`0ParFg5H(|KI}SeqAn?g98{F(pd8=?`a5j_!u z@-MQSf?NFHHL8gM{Dpn2M`D>WQAHK-jM#Iup6l_i^07=TBMj+n(f1ywxXx{ss(afK#Jp;12m%g6cAW;P}ip#2V2pqiI#0O2$W7 z1L{J?bJ#gJzodrGL@QI(JmYX>$$0ciavL-hln-S!tI02v5s5cz`3M$2QTJdFfaS-O zAPn!eW)MV+!j++|lgqIcjUSCG%f6R$Hx5h@2h8+{lO9!u^v!oZ=S?B>XG?5xY|F9S zi6oHE=6Y>|j+5!Ur)b`GomO%-smi0d9QC;20D0O`oA5bi`mUp=0&VG+Wu_;#`x#%r;t? z;@q{q3Ni*CP;;s`#Lpf~acq791lGle_@{}63Ea#+t47cI2KYE!aLrM=Gt}EQqqzO_ zYTD(0V7&7USCd>}A4%T{)&uI7aV{m;RH!|;B!2p+%4!=Uq#HRnh)?_&sGAExo9FIa zYU~s^w5hxA!pHp{$uOc04AuFz?m7Ow`nS`mx(oiGn=_T|CFTTJyWDO+k9S{exb(p1u*g!?m=z8b6-I)Gsi8k#E)_mgU~) z6MkSMv*|&>RX&d7TdVQbii#5 z?!Su>#o3xpn-YnmyX=NNz(Md2Y)F8CX=)3>fDp#wmom=PUaol-P>q|f69T|3%(d2V?dgHPTr z-Zpyq$7k+b*7Uc#i=!707ZuxlZ}7Oebr0jlzCLT$dL!ohCoDrFcV`y8Ru_lY4+TE$ z`3cJJUEKm7r}FQsPW4Y$4)NWii%--?SOZ{Z#rv_;l=l(8hxxU{YZ|n>oP~$#p{5SNwJ{^bi25t|NqiKg0@B5gZN59mp-H0Y^ zEPdUx_0PUmp6BYy-ZxjTMxT7VURN*b%H|ip?lyioP`P6E{bdb@G+y7oGpn>;1MMC=33^Ly1HB9&+cb83AG- zL6tdt@(x~CVz;+vimaNl0c;_*Ijm>jub@?Z+Fq*2>h!6Hya+fRFRxpyMjdC<%_PE? zzifLc)+n#bh7IXxOycSHU?&{pKd&9Lb&vTY`~*k#SV`J0W$g9s<3r`qbc4Fj?k(A< zPa1hn1}}_6!S-2=srO3O>Kb%ESrqK(H{UlG?=B!pP1pnVllu!3wgsGfZVRO8@}4?( zCy7@qRx#51>vuVUZ?Z!=?|>`;m(1MXCw+9MZ0maaAhr_9qlws^w?-?Ea=1KB2|dar zcQnawtdF=?<4vbfZzr?~E#1L2_owz8K0tuX*8JFzG)%w*!bnyVsZubAT`I>OLR#+q zu`teXCRL;};Uo)4FH{T*xAP1AGb3UfIkOb^2(ci0s&WlEIce*sya_P@NLd4K{w$HG z7Z_{3%+9)Kxv88EMv$B}3@c=gCJ@^pv5i7 zgVW~7ME|D`58A&rcbu~W#4;Oc-5sHk2O@Hfw;~J?M+-orA z#{-CY0Se)&Vsoe}B3Of?bnh>hdH`rY92&{(1c=1w%nVwdg~!B8$JAt9hU9C(k9{p1 zSWh<_U7UVQ3KR2`J*Fmufx(Y$_sX?&y7C}WQYO_W1d+s z%tZq;3(`XK(!@;rQ;WytBhsu5>&tLv(4a}4Fs3Jo%Dhkun*-jI1hw;Fj4E-#| z<#{?&VL2t23dT|iX_`8b2#faFa#JPd5-FH$r}vf;BhuJ96UuCk!Ubg5wjI%=$p<3X zx9paeqC=rDe-EP@AcRfrtpf>FNeq2gIkvC8?OjH$dg|naE2qjeIZs|Q?5VIJr`IMR zOIZ|)!Pw-r+tAB2P-KxOxQ3`Z>2k>DHG3q$*+3X@a*&-!GZiMHGf}yclu<=k>OK7D zp13>y7=;nNOs1H_upX7=>4Y^o>lZ<+HMGiHs;Q86C~{zwp)>#V1@q%d$tEbGAq#re z)vc+1@)8N62q)7KBjHTlY@L}zC6a{x@rTZlvmOczu6m~rH9#^({(9I7CKl=JcHVsu z#C;Ygo9SsE4o0|;#TSb)1^$_Icy8&+BpA%>E}eOf?GYaaIj#-_s3gG*<))!_232KH z#B~N#T_dXl#EEQs>ao{h^;NhXd|q%S7R1sm9Tc?XV6> zG+;s1bz(ZhFdPy4=1^FQZ}yM(IsSo^FZ?fZ+<)v#rf{-KXQz6gii9ur)wZV~%UBfR zOExiZM~1>sW}33p{Ls({H)q;(oa)*R5koryAwt0Hp01nrWk>az+-b0tNHN`NS}y`l7>PFpUUjXte63&GgLK-&4jG$ER;$pvIf)pyeST?*N$n4V$#g+5vfcL z*9*nlntQusxbP^sEb{a$==x1$HtZZJSw;DIz!uE>Kl7qlQam3@l%tJKCT$lVJ73@F z%qNgQM%xp(RJ@J&4^*Blx0$k#Y1CA9L${$u0#za_v93KsSzfY;T-4K+hLsRUb3kHB!mnD8jRl6&*#`((_@N<$4O?roxFVo-ONy@;u9W z5`(q&zX2kVl{L$B!mdZvog$E`NSKw;0?ICCFpSiXE0tM|A~lY$hdkJssH)7E>Liiq zm$Lgy{oz2C(LC`GrTn!5MHUi8EALyuUDx-iFuq8D3U1GpAJ?lkP@#)ar||4<8zo(j zEteAPhfPF^#b%Y|aAI#~1_Y708A@18k6_*Dh|j`O@S-}81QYv@*&MNdDk!rSd`L5< zl6aEl!o_|diM2t9@xvXNnH`=4358~*v7sz>b5WQLt;u+i9e>&f`}PtphGb@wWg%M+ zNFPrmuL{O$(h_2G3eNQ_@Cmh)AY}DejU|YhXI6A(s?CvMB<(UVd^`n$diND_(hD*z zsS2i$$~ol+RT3!zt2lgxNo^Z^1DYToJids)xPvYSm9+zg3SwDG5 zhFv75kqxnC79-mEU?UwPr=7a0oLx=4I*9rMH6rQt%Grv1`N+O85717;1tuk%Z`P;beAP_1Sr(%y$vNB3Fk*SbGGEG6NDs&hnEDF=u%||5K z^^`Joh>#aU4V74&92)0XwrzbGWXVr9SepDehfPZ@B3p?Bi!IceGdFhgBXsxdvXPy< z$Q>3_qQbyBD!eJ~rvn=y-S^;LNj$HERfs{z$*P&efQYTJ=gkcW0 z9jwLCqlNmlOByrvMtr$Zkjlr{{76(rK4dG*bYlLRFoK{DPv%-CjM&?L0U{)QleB?w zDoOVMOo2;UYsk12GEBcQ0yQ!6>i9B17``A3{+=#Qzy_dls41kg!FdZ2Vl`YFC)1)b zZuBGY@Ix4wWoc3<&0k<##|_9(7KK_6SQH?99wRilDFN81pEQ@BkrP;%54B0$WLDFj zb3v#XEb$1Y2-BKpE)&tct}_jEi~ z%QIFjZBJ2@^N%2PiNa{wH7h1nxZ*~#*Hj`=M48uvsIPHkmuz0bu9G6&gYA{`U(iA< zlQT)@O_*Y+u-n_N*0C$r!OhZ@bLX7U3gS5CIhqG8h@)2wSPMLCnPB9Qg6pS)YnMKKs4M3_!@v|H zb}<68ECW#5t)h>05^8$ELj`l3yfpYiUz85jA|erSoFyys+M+|IM8=3`E9}e{Mf5xz zBu*flKS)W&jNeh@-q6(YWb9`;O4(+q!tE_G<)#3t+H;g;;=vL`GB@eTu#_YfO+_#C zrCbXr1o&OqNF05Jqzz`8a>d?=%}O)4Zcs}5Cgx}oOrK8Dsmg(ro1lN-gYp?lBv9%G zZ*7FiQprp)k`2Aa@=~cR%76mQp9w~bG~I%hJ{iW~s<{Qt+}MimK9*Aj`?nmr@~xl1Njw@Tx@rzJ0OWl*DvA?Y55< zq*CsX52BhNO1z`Ga)KCswqazl$Su-p6kKt6Vj*0yG1LS@rc^@V7{T!ztCE{D2G8{& z=iqFK>7r(btXN=jXJR}R_N{YS8!F)s9h7Af5+xSS1tO^^&jmL2=|v-nf|ApOW0rED zz=&f`Vd9oh^f`-6F-RK*oxJ`wLQzpI9(j@4no(0KJCZuMFo>q0xG?V=KezWdqumog48CwnsoRt~P!k*d99T~Eyku@u>=0dH11uY~Z4s%v{2Nkx+rcS-;Hev6bzE7PI^Xb{;|M+#&kS;~0_+=Vor zT&|RG9`iV(K@N`d?d?%E23QVFWC>(vpp}ttM_Qq__oSeXc&YK~{IC0; z$LgPH>!9tKMN)CRf@^Mjz!l9k{O^VO*Qx#eiU*k$pU{&#e#f#KXLhEMcLmZZo1K~1 z3hVC%r>3;mhi`C02ClT9;IiE$c+^T~IA&X;Lu;Ub+~k}@j$X8Ov|V;%bW?V01tII` zkEAM|4U$B^?oa}C1gIp4jK2l!D#Fvc94i(=%s{IOUn2U?Wcv;Uj-M=tqfkO3qBt-4 zIb}ShVHp{<8Rfhe82S2~-(MZApJvmZMBuq+?AYpoL88K*9vfWZAo${3M`y1Ky078J zUg-F-G4b0_vG)Rct{Er4*K+x;^=699+(jC^cIcO+a^)jIX~dIM6{`srkokz(nqcvK zFZq5`q$XLYRiE5OZ!c51?LzJ)#eEmwA@js_hHMk@=xKOU<<+Ft5Afi|#hbYilgPk_ zeSJW|%lO*J-#q*E4Tf%~51VmzM(n$93?4>(Hnrc3%-$k6n0wg}CS`pdZofQE7MTSI zvg~YrUfta}92RwaUp(Eu<)wUYZs|U}x30b+dp*-!KHcp*bLIM%e%QGyIB|AUMk#Xk z26)kl-?|LK;;`?z0Nn_s)91nC69hyx-CuwFdY^W~D|V-~2{=1_I&^)`!GoF6d>Ovr z;zRiS`u^F*_-~fms3uPL1%LhyR;dgC0Q(;YTAZ9ctWBK$+1A+7{uP(Sf#R!Y@eO>y z3run}Kq0x@E>gKvqn4>@p(iPXq(X-n&vs_{?G*IRim`-)~2=H{dOxSt)H-+mfGE~p0S8hBDW><`(h;#(z`lJ?@$ zQCp~&+puzk71%EP`_6>hv#Bw?&1kG#8=a=3`mCa=ANpY%h~}3fN(V{L)wFLoY>&nvWp#=_5v!7_GMN>sS76&^IUu8L8>AefqPo zvp!T=wUfn^o0k9-KxP0Ky*ruJNNJwT*lrkW6>Fo87NWQ>B^T1y+9w1MP>* zPZmk3Qd&w1>zXq8!CTJqrB%8^RAm(IFlw%9YKng6jweC))t$_^O`m((AZZPx`1m*>_JVBhUZ~TWa*fXH9_YJbjS|cHVvE`*darc>>8Vsr zYk|X=FCA$qsWQb2@ki!{hqv}a~8$0 z+3wQr6C6p^7pt%bgN^+sR52@W05*L1u%rUhN0*mp)1t!$RIt+${A$8kxkd45{{Y4w zwmhyCvcLl3`d02o%vUd#_!mVG%`@+gmg$-TNL(FTnF;1cL*P|2I4lY-STpJerp z`ZUGAX6Gy=&(y+cEqXDVL6>sPVu6?| zvd!tR2|U5CbyL1e5CQr2#b)>rWQ*OBg*>bJAM~ZFuGx~I5p^@qxpb+h%ovm%#4)pt z?*W_=QjR(3%@=NO$g<)E*gUr+cKUVN=Fv5tLMrIB%;n$>?ie_uPx0;`(=`dLqAtiP zSs%6jN{vpp2jEa`kLg?3r}qU)I)XvhmbFTs_}*mq;BJ+m(%cq7B$EuQ&u8*FfU%mG z!MnGl=KLI?t2x!WgMFZ+SsyK1n1R34Q$WjK0 z1_u8<#dP^F&&u9BWJn`1S36=qXrO-S!FFLQfXCnHz%uM5i7_=vT3Mq#nLtQb=UYfk z)+P{N=k#J;`*cvq$h9|=m0{qzl$1S0gk}-yCLD%e8Mv2VUBA@^-aF60J|Ompoq_L5 z;^ts6W_DHC&x0ildOlKz*@*nDj!9a<;b9}km9WR$lA`IguE9B$0F)6lM7{yY;oe*@ z>7GZPFia04;Q72QP4@eWH9}~ z=m(vxABEC$@7V&@-iScYnBjXpndYI;zJuow%P?x+=rL(gvu z)#seksIQhQ?kxO%TrL!saX$u9m1R?h1C~z04i!Kh2~@}vKBEC)vzOFmY(IS9-r&ng z6YTgV#%P}ro@hx;b`U7GUhZNpqU3X@Ohkp%*Z}EwqEpS0xL~-I&DiAB#(4_EJ`mHD z^Lu5-;IuBcE{cPe?V)Svkk+Y@+!Fu9v&4erv;*>{=AD-HQv8^5Vl_-=(CaYF;K zm)+AA)VZmJ?W8|KcUEua=<{sG|fKvex@%zSAB|cynV{!Cut{JQbbbQ zbNK^QU+nj2j>5nLS=Phuf2%d1=?r6)p#T7A$p8RQ{!?q18#tO6D?2+{*qZ$-Ifk@s zoHitozI;{R@jE1z(JI#R(fih{xJf~bE1Cj;vOBz`#?AXWfFe?Yk-v-Iai2%8GZGjW zXxGPW8=nb5W*?nrrDqrApY312E<8o!h~xq(x+>FIi-d@>#eEUz>ZshBzAQS0B+o;7 zS|f!VR6UR+k3av?f49jbCNr?f)KbA)bhMYRCcOq}cuCT3gd^}qQRsS6enqGKHAaS> zmB$N~SgqyfE5Yd|NvAV_d3 zu2jbF>aH$ZO>haoqbFP7|RrqmiqdsjEL@*x(ziP|~;XOWgUA$4RB-WsmyEd2MC zO^&O$N;mE{N7C%}d@oG)BgI4o7sk!36qa2^$2sTbBfQ!QqJFX zM4lV7-Q-VglNM>_(zMo}rwpV&X043eOxJlgEv!^wW}r;}SR zV+_T^kM%!c*<6}yu?CIH4sm5d)02etfSd_8%Tm6*HKP>t2>D}R^K6H6rdg$PZUEq} zGbDyzZX#x_+19W~sbHIR+m3?-=C`H`3{|&Mu z*^}nUkxp`#N<^3)amfqSAVq`v5XR64d1d_f81KwB%Q>!!ypF)bo(JfF^k`_3f^cr8 zGUlsHWy9-{q3AtjEV_>tt!hl#Y2I54hP4nOEb@$c-V&qaNc`bSE4bozcf~wjA%5VR zEOvpyX9L1hUVUP)36V35oRdMrPK^lrbs$oJ$?rT6j!nLCp?7|zpu!lNzNrwiJU|dvm7f}GI9vy>Il6d>yT8#tNXlmG|rw?(tzJp>ABmKWjv0lZtDLMf84_S)zLm> z#gG}}04!!V-!1n7@U_aaC?Eg{zIt0FsTvCI?^QDSr#1&5?vTKHp9X4Lxd=g>Az_}iY+E5$AE(=WOdB+PTe%jwnqW#zww8R9v)8m_4pl-+ipY z@6{E}x@CPhf%i{2dorIojXHdDy5y`^vtz>WYd}oS&bRqFu?zLNdI`5auV2O5?p9tr zC21p>APXG%Ae@l{t+@Lk6o=G7_XTM}0gLr1MbL~kcT}GjaPhf$bu*4b*In@cNp)+i z&&nQ;uM{?8AwA+{>s(2l-y#G=kBOIP_88oLNJ6pkP^gpk0 z8nhXbv@qFp>GLv{%L)KFpM}u#B_I}qVA*MUCYXwx{DTdmRwv2RaCEp+VX{3=;IalYJKc%yOXO9yQREz_t$e}fD$L90pYESRcjr_DXj zu*Hmt6_+q<0+WY?fT?4fuu&RC6iNJ*4vibdU=$ja73x)r0>TGu$;cZxi!$q*NYO1dYPrd?S$)=L#Jow(w)ox7 zw;jHZceq+!P$P<_eMM8f2(|axi^J+DHZj4f{0eQ<*OT;85S&yVlk*`xr6%}ABd?JD zen5^N$PUhni|+>63T7n}H-*0cB8kBZ>J`P^gBihHLgpDr5{F}C(wNb%azVM2+LL9s zNlV_JDAYmI1b5g2-~2nX{}8sKBT{_QZomO1U!ao0O5eyN0m^h44&v9AyiY=nMd16# zieV$w}KtdyYi&?P`9 z8bXKcQUrp4g@A%|L@7$|MJ1GF0TGZYsI-6rt8`I70fjH(?x0!r`wKQRnS0;KJipB3 zo;UBg_dVx1f4Yxwc6a2AoKukX16M^AMjbd21$1{CM=4x<_OOua$#pGIFy9%$nMV#v z1RVj*=8cV&LQ)G~-^%(|siTVl0TMo>K_alAk@g-IgusRB88#Iou`ZUzXkpRRm8k&O z)NzKg>P^cB*aq1-H&YMCsDZP&g4=5Sa006YHJd;dr&`2b?nnE}88O?^f8+(N6o5Jq zw7OjNY0~ICcW*uQEMB?`bbC^6nkFqo_75c){MHS%#Snopt-`qqD08r(^<#VIQQl`n zT`AEd3Ox_Xgt_Frho9-@?vq!G*=bLQnQS533O1QcZ_fS>yTGWhsPKNAMg!5evQz7HE_-Timty5m-x4_ejb&=kP zVc#y*sQJlr;RDMOjRHV74)+%`<F9SgUQ;nLD zW2qMNmx+L=TsHj+NK+(lzNmG~6*Jh752#7hRvoWsS@#rO9R*Vye43k8d&|I}6=xxK%vz=Sf^@HTUIrJ3yd@0q`J5vtSIVHZVYP~KjD@qMdd=ag0SLKf&IU)SLB4(VIei_{uU1S4@$@JdcFW7(w)e=!2Wa`Jw5 z6^EOlVG19yZ@A<&Hnm@yX2%nFdeA9CTyQ}{O~tUnuKk`_2Dn@_ho!82tkOTz!eEgr z72cW>b7c*EMarL)z-P%Gx8}hN2WMyEvpVw3-*LuOFvG>FPEWEuerAKv;i-6?A^T|B z4Z)oK)(AL|$Z|^}XJJ^?=8q1YObO1|bhEje;tt@titLS;W7N1W)2oUjDZt|7k|SnA zBP9t9pfkj%G?qJM7<%Hk71nXlaX~T}%|>*hs))X1>iEE{#HkNEpM!);vR3tgt&2g1 zexxOVWgP0Ql!504{YNw_@@;Aycqn#xTjnumP>m*a{<~mbmcbUH%x}9gN?!x zgHp!{4jr7z_-pToKSkPjZGDV7dRA_LNhbRhybVb5_|s&{0Q)808}_*+o*9XIod(jb*=G6jhHt|8 zo$A=`N+n1=(E76ozVkf}y-P05{AbbTY{{M2=VUt!e{$0#==-E{@y24wUSj_H#hQ&4 z4w!K*P$=81ru3)VYVGb)=N9-4S_2sYh5~WppL#C3Iy`3c4e?vr-7a4$ydSBjEx?19|s?X!91EXoloES6VAwGOj*;?2Ak7>0v#X&G!8j!svBLPUMdv$JPm%CQ>k zKGeq19%h%^%@Vx^B>1Db)isOY0g}G_N{M4vi*xCrDpECTpKW2TjVJv_?u+U2}xCMG=9o5L9am)ZS0w@TsME1S<%HA8SB`Epe11ZX&+cxjDCx6@wG*9mZ{(TqM-DPMgx9JI0AmLl$k71o{os@}hN0uS9HluqvnNw0 zGH07-tIloZK9jQ4FxF^pk$&(7NI-I%MX=?SblI_GIyCJ#h3xbdT4pr$?uy3Qan6+h zs}YJ{#sQA@yHV43cazv4@A*y+&!-cVRMj6xkXR${aG9R??%~!_g1)pd#eH?i> zx1jZ#z0A&gC5fmj4b*yIy}%C6Z7BLtE?~+86slu+SVv zzVH*|xA^w}@FCyR2e|r~y9Na8|G83(p{JZLdO6<%$yLkAk*G6TTkb|)yA~NG3`cP* z(b9_0s=@&rBD5Sg(e&Lgd0ul5HjU-DxL2;^AUh=fP~Ks5aPmi{W;!$O`1l^kP*tg4H*gshyH-xgY&W{4}}PZmDfagwS7Y+57__wEpDghvJ%F(H+h zsFW}MDjfMkSnJF|C(5Rdy#ed&T~$eo=-yQghu#pzAt&ZvSiO)Q{?8i8@OR*?1Xb_prm@Z|#Y z2?@LR+5(ddc7!MO*t{T8=ldo(6_&P=gS)TsZt}+iFYa%jl6k+z|mkG8YCi1!bQf!s2$l& z)kiutvKpAROTiome~}l?riQQd7~kAG)Cy)Ktp8*$Ir6s2DFx`q$aC`X`7iLu5%C6$c>@bU8=adR>N&emJoo>43X){#~lEl8vjtXkmqKc#>4YqWNcau>#OiQFaY& z=O|IUdfR`i6a$f~*UU2xsh#!4oU>nU_43#WTelfsU2E;1R1lrm`t#9AHw2?~;z-cv z9HEt`@~yRSF+?ScG)_I7rmP1-tdNe))4qHwDKbQ%mF+I_zzvC-Muz+d_i!W8zc2aU z$3tvIO%Oi=ezqBKKd%FlD%tIU!rhBf zOlb#oAXXuphmpmU=1`OXN*j&?01dhE@UL(Gf2JIiKuVj61K??L{`NEQz_fyrLfQRz zKskQwP|AKUBqfEiq33{-eEd+#e#S^ip{!Flpa2y2DF;;xlv2uVhXbjP#&;>@CIlsc z@}BX4u%W+C__sSqN)Tn9d;l^u+6VoVHB+i7ldJk3@=6{`30xqg>bY2l-#Cp$USHJT1Silprb@?X~p0|@RRV$#Txq%hBU;Yjg0IPE<9zW(K^qzr>eT z4eS{)dqH9NJ0sNuk@aSX-3=<-+4us|tM~i!$PtC&>5s$dM$dlHe>!%Qkt%gh#0RbiG&ndcJ&~c&Cg3CSHG71bWTq zhCuAB@@Mz{FvpRt-Iu64YS$~f=+xixuifs=m|FvN;JRB_{h7}4Y;wf+w43GA)HK*m z>4i%(I+qL1=*unJE)p<+93Lp`OmGp%t}6Y@KWsOzo_v9jz3uO|Iu5vXKg}`7&8{Ss zRKuwlaTDR=1CvSN2eW36^A#lOXQRAy&Y&G+1s6?x+6p)QHTx+gsBuzt9Ln+T_IRY~ zr&e zaz_`1W=<82-%w{xLruWx^9O5#@$X{M2ANH;5=P4g)Ywe52^KLtm3vmy#JW}Vx1X6q zfgE7WGvBK_u|9w`p#*#IXgdjOzorOh_NIxL0Il=WP z>-7x9-+{P?005U=5g1M+VmdZXw)kKIqeSv^ddWPHAOXrqN!1-8;n@z@{wpVN6?B-d z^Rl)6AuV$@EN6n^ZBp%-K_4T|$)|n#h)7z;3aQ;tncb36%or!w{P`JD5=I9%=X9Rn z*y%W|wg5KHWfM;L?X0AL3Sk(e8GiAG72;Ox;MV0yXuxC~+{q%IqIVs=>OkHMM$ij1<5`8u)7Pi+_}k}TLX;u^NXg*ohK26)j-rBGly#~eeZd^sbM zH!iwu(BzIfA#6t0IHzqwc`Tptt;ZD4y?~exZFx7yty;0@1MJ}_oY6g2U53T!6I8ma z7***-kOjt&cm@ItX2@hILaF{_w5E#}>RSp#B!G>=QG+YIO9bm2%81CB7hDmWQ>!4` z&GL&iOes6jd9vAJmwKOAwovh5*LK4J_f-+MvCSHcl$OFNkHj2mwNY^qd?NbuqZ8tX zRM0Ea>c`_+S#)$NyqHH~Lvf(@$8qrefLe&={vDc*Yb-X%5SD9^HbojX9DETmqb0iY z58w({tx346evlPPz4Cxl-Yf?gA4fzlE2^93s$UIIWVgqY7l=T~PdgMT0O@p+zVYe) zcI5v0P{ENstdtm&Hts#cdO_DqwT7)%f)~<8~WwP(yiVHfstrVE4Of;3$Y~;Duyt8*&Fl(pJMOID3ZdWk4%8s zMqs`D1%=jBg0jT@q>MnxKZ*eu#T@&{eC=3?wu4E1pe|3JB~TG`%sX@YvHdB)0npao zNQO-f5_k@8HFdtOP+`Ge^IOpQ8s7eZ_#7%F8$_K`0;1! z#?M7{c?zTW`Sf=2@!mJWure`}2TT#?sof*hoN(F@>egY?C!vYM*XZekupAM6OyP*3 zf_CcW{_e~6UTR=0p(ckfUuA~L@0k(qM=}mb@k=1Ux0>0eStE-fb}YzV)AKwj6A?aq z_#3S=;$9RfA}w~O`kGgFEtD1J!1iUw^ZU?=EPOf;R!5!<8-YGHmHo5r@f4!M@@lVA_zzRw+B3KHWo=pu~7$VuGj zR%!ZRX0;9Y`zb9LznG&GJ=fp)?Q0O%zyMKUWGH&x>SIjlM(t=Q7C;kJ@_yH#;!%4pMH|Ae~1=_IJlMF{ zyRwoJA(9xng&`GrZnLgUtKJPB7(x{#b-XTf`H^Qcyqd!N4cPSbCa!}cE&74VO8`JV zgc1m;)Y3bQv>i-F-~E~0p04}H&G*jYRQ-W3;0Gfd*2OR0PEh&}E1dB9g?cJ=yg=$hGLr#p2xtaZe&gdzN%-=DB@_$ZdJhRm$Hob$uB6eCm1g;V*4mMnsCj;zZ_RoVL+>VBHtNfk0AQUA_>kW=SzqRuuewIurW)7u z11(8qX}GC5LNBY#v@Qnm4FW!(FP1}$%qnq+k$IGDJg3d<@WE*!h%T{^b{kE_1m_sx zZd>qG9h%c6;m>2?Iv4xaI#K9GTr?6=Zy+9t)ZRXhESV?IkiS0AOcsvTcsn*c=o32&M^G{0Fw;UUplty0S!SybVCSy1TXhj;PV=rmRm)A#nh(Im*z z_TNE(FulY}`C?>>6Ks-|QeveM5}%}esYaNpmt4Qz>_r${8M&g@h&G^?$K8+TAOgWX zsq?_df!Y2}d?>m*ClX!=bv0=?$A{IG%>^fafQ)^P#Fg%5&VkX0m1vhllIp^@FS!w-FJ7<&(%4=2TuFD zQXxifNR*W)v7ne7b!_cH`~_Wz!tzqcfa{BC*NFApz(+21pUiU$L}u&` z&}oO-AU=mP;>FcTp3(A{=<1E|^I5Ashs17%mk8&@@Jz9LSw$hBpZKR%j{K9J->lQ` zinaPY>1pCA%8q1y4#s@`?6gsDv-X5rkKy;N!jB=a1=Lrdg~!RbM0#X>ls3Ab?=9@$oUZl7oRq{%V{Ti@_; z+AJAPbNrqmQ&cBRLy*}go0LP!> zEfEbDhtr46L#;HQ`GWF1vfHxq8{~Zviwp|eL5mFX+hL15vb6<4Pl(KUl_v}3w3 zq_7O1O{1M0a=U+HG}*13i%F}&lZ;yFY{Sugxa2Hz;ke?-9N}B9P>!A^^doKCAj1d8 zc{3mceW#PaiV zky`FVTqH5w>DDJgRh;Les&m+M16@u(N?MSwtN_PkwK-V#+1S0!@V(MSrs7iAzctoa z^n&!$D>Jc54;t1&|HP7_1A>Lp`0K`;#suQ%8D>TVeA24Wwu`DxsUpIY0ChtlIfW;$ zQ(dp#-*1mN>T*mVxofL8^MhP{$eIt;0JjH2JZuT+op)0NB2Ld+l2_fdQf{47?J2fy9E3-hGeD7HKV&32zO zYmX-PS|ZYNPjB>TQDZ6V5$yv+F_G*(bugHmD1uFFw|D{XhIP2IAB*dp5)=05H85ELsi|vzobl3m!5iv{}0(3_szf0`%qk~)E zATL@;Ol)ZPmIn_)+yfMQZ4Acxa3b78UueB0sXixJR~#5BX@KuXeUgq5_F17TL?<|~ zv!Q)-s#3YN0pNItJvBLwp2=UT{VL?K-0<>iBL&a&Q81hhxT+Q0@7iQ<2cqyidI|fx zvy22a27Jt_BMvKzsgaT@Bnau&c#_isOgxJx4J`AWhYTq@I0|;x`d%OFLTi zH9y{+h6223;<2Vr{jDz0fhNs>!0$PV3%=2xCW)uA?NmE=*i$?G zrT_|KM99WQ!8W@ppuSk1+6Ryt#h>%)qHJZb-j7^5 z93!IZ=jT&ELz0UR3m+KQt1Q9`PTvcB_e9VX40hhs50s|DsZ>ss%i(-)j0Y&b$IyIEA8Absk--Zjlf0U|hCpzadh z#QLn+t;7$LuM@g>p7Si{2=do;cbGJQXA5&Ygf$A>@DG?}IbFJg*FlM)q?fNAH{b{o ztCb~>vvjClr=uV`tQ%*BppEmN!j`XavZsmE$h7ns-d2-mMnt_e87<1Nv0%pU$j-M; zAG!7Qd|1@dG{2^8@6@j>0cPE%v4^d2m)JA(?u1W2!&faZAt9Tv8Ij@AF*W!(Y z&3wvR=a{80rc#lW5Op#qzX`AyzV|`C{p3?y(>_Qj^?oEtny52o#-e7Dq|SLkkwiKo z^)q5F&jgs>JkuzG0bz&8K49ikq{Gk<>Zcj4_L40Zwb zbBMJLXhurnvzTurim#)Ox6BXgRZKFbMKur-Yyb#;hWV#TRb@4e@nU^=?St_~o09bU zxu7rw4fp~{P&xuFgZH^1dY9XlE)Y9IAu^Sht{<7`_XvL`sWN5|yY?EvX!If_vakdI z>pZRk_f;fBg^ZFp<))V8f?3q>e>`X?gR&Emdw&3%+N7y;e)kpOXj#Vt zN;p9OLcbOJ{t?#Hfj?~7&(x*9wb)ST*75*;1ewqt9&$u(-cSU(LSgMJ~c25q;2 zYKmlSc?}8(+&w`@TwCX5U9_r}zv_{I;731BxIpBM@*885Tm>LQ$8F)Wg81knL;HBB z{mzdUB(yA^M}TtF9m&U;hvSibXSX~9=$Kiq#)eWu(51#r{o2bExw@m#Du(roiS{Q< z*;Q*QS-@U8NysF@6wJ+P-4H0n=ejJNrdG`d zAv(6MUI?p?5fmWKhxR012kN(|@6Hog(aR%4g2&?r^qv>h2R8|Ls6sdY1sZ7t01MZ} z!V$u?)RrC+dDZ*)GIiqZSV9bxBYve2yB=;k^3XXZd|>&ZHs9y_1E2!42V@Iw)|~pT zeOvRBo&Dpw?>3vxQam=9(RKL5LiJj^uHi8M__yl33b>RcSMk3}!jldXKEn!w`SFYH z_GLDXPrH14;gkm~$mw2yW}@Z;Mp3@ay@a%t-)`Wq@$hvQ;HK6jl4@OhZ?PkPt>NdX;ws6s5feUo=w= zjNxcFe4uBD6Qt;yu?WN1V!x`D&eKW#@&ny;fxVoO)(B9nwKf-04S-cdY%QZDu zSa~t#fya{e=LQ*N{ObAuYFuP*D+E>8$cY~P`x7Q3$MYSH)se!(blQAA4fNS`5VlmS zl?3%6@;P!XgRQq8=}yF;vaO_DQLy&Kb_b+kwEP*ix?2OxZSZed%s{HBq7^@4>d(z) zx_1p5%NJ;|4R&}aDi84XUiOF|A{)FX5hD)R8qP@e_$S=>QIC-T5(gx%to`G7&RVL| zDm#2|1e3^4ImKCzhNNc>4EJ2Ep(tty!H&5e!k`u!;K$feCm!;ZS5|~YkEmQ;CBA&g zFdo%%4(3?HDI2}_i7+tr!)MH*zclC{5#WME)TFeivq(oM-8+T+(|byCaC%F_Q#Mht zz_c><`?7QV(Nf3&SZa5(?K^GcbJJM~aB(?awU1}yvb>=Oq1tqiq|#CARB-dM=%@?^ zb7)*i_k4M;Qyk#>==&+A#_fdE_&>EAVQ*=+%%^`XE380~;@3#oA4EDV$t+Kv{W*TI zjsF?$%+Tu9p5d})-v@X`;E!{VZiwKu1hzyy?U^R=*hgGhP)10ThMvo)!a?Hb6>vg6tWlob_52iH zE3K6B^jW;9^thT4BpRErLWp#N+Lw+Ja%zA|gnC*Oe+Zc|%mo?6b=3Ab@}yz+w?Utq zhC*|XQL(TgP)jm}a|on~!FI}%CG2W^UxE>&4{L=1q$lQYl1EA>I&btRmT$7xlhU-o z(?U<$fyyj6PYRNhv&OhvGLe%Q;GGV@kSl{?C=tT>y$|vXO9f%C1C(cL3f%=|di|OP zGGZL8t%j8orR31PB_RH?7Km#P^T)f&>V5E2l9-kN7hyne23&0Xp5S&<66p178o`fKWn-TH%Ct>)tW~?_bQut5 zO`-~-iw{#gf)IE))?`73NPHg{@wU!~GN_DiAGb$+sc0ErH!Cp+EvvMYyJJUoCNCGj zL;pmWV~f(e-%#>UTpzM;y7T8tYW$JN)@t8*(+y z(=LyVnkMQ)j%;C{A>vn_Bk!K6Xj7+oGtwl(CHw3%h(o-&N++a}(VTngsKxY;_lLMo zK@0L^Wln7Ck>mO>#e>_ULM!+o=V&SbAT;Tua=f9T*lY(d{j&2Ff}sUogkPSkh73v;g2rVQ!dJ~Q#V)_KK^__9?T`!ohY=W zs8e*n&%_97i-yG?%t5p-%4>-~L)oUBqwl}BDG&|2M4+w9uuUq*jT@^2YBpJ2+}+#J zCq5>VR5D(;tktQgakFw+7F+H=Y09H5Dz05O~2t z4h+WcqbgdJhgUrH)@^FO&#MsC`y@hbmd-2oa#Bm}R8h;18cRa%4D6~dH)&-fx!_-T z;`XjwP2%BY^=Yk_k!BIqQVLWPChu;KkrG|VuYbE*7IQ|ZzN!=cU>*dtQfGUJ@=q_h z;*iZl>$?yStm!@mDu^v&cnBtBs1pE(7lu)eFdI1h5w-xWePtV6vANx8l$!pv(#{XN zq8*?8b3ylB&vK_Q;DReP62o{AT=Wb--!DxrD=~<~yg&lDOM` z7_Jp>()8YB$sf0?o-hO0IX&=ptvjH*SsN(&Fw1;4)Zu&L> zE%B#Z$gRlI`lk?Qy>z%P(@7jwZS}QbNw-BD_KMQewAY^tH!s^fic&dltrbNs%Jgme z?9cQO+XebPN#DRfcSq(YtFWAL81L0RRCRnRzMZqKJj*#c4dViE+%1?kiAMau8|cfh z2RB(L!^wdrMhm@_jZBES0Zb%^kI8Eu3Rj$p}I0+J>KHkz|K* zrffH0%la6ar5}9G8Sj3TS7?RVuC6*s89;Xwncdk14WB2qxH&$BWI;~)-IO0&{$5or zsh6$r8l3@fd4Qp>tV5gOIFnB_fJ(^9-(wH3d>GD@FBQHUP2>?BgXhLT>5qmXuj+sP5q z_hG&W)i;x<)PC`I)ofp{Snig_fNVChSZ)CJ==V}%$T>qV(>aZ9%DV>0gx=0{GXlxx zr>jeQms@yIoF`3%ETc0}?-O*D3YTiS&*B=hHGrZUb)Uv}GpyI%9Lx-nLkXDGqH)Xy zCR=udHPR;a&uSYXzyH(}tl*IyVCdgNh5{lZc>NUW;JF#=M6F>?Uf&+~ll8ZD^!5gUmvp1)HT*mxH_r?dC? z>5sEgik29#)fqBfGR9eh!oCO2`%NDW;K1#xg?Kb69e2+pGOkIpJ+N9#5+?zat-&ah zi=M%c!u)9oMV8LY9BLUo9=bd8Rr#GJy9M66Y26qA(%*k!r?atM=nReDVIP=XD`xz> za&u6my0)zJ;X|5XaWp|7#|A}a=`^Pq(=O3nx@@zjeg+h?1d49pp$MaaKZMpo)3m zhEaPelD5p3i^@lg4~jZHYry(sL&PK3gajOSj8oS(^EHVWmUtx1Kjlz!tN zRat<18ZYzk3yjkYg=Yg!!#ISw^}Gkfx7xj$Ys2QwK~uyKGj(u36@F_}Xrix7*+n)& zIvMC|3vncPEn%shwwRm_VGKeLg;J?BSbDiLFTdiOXbKZ30t2^EnmH=-WpvIaBM&W_t;z1IghUd2{ZUxZ;8KC5^BTi`_nUA7Kcud1|ye z@u8N=DE>RCjJOm`Lv3CL<~{(oD~3Ox-b?P__-2$^Q23!q`jN(HvZ8B*h3Q%UVUj}v z0wWmL#L;6sXgze>-MG&Z*dPCVj@Aj(95)R)J@~eH+2&F`7Bhndx!5jcBgy(?b6EUX(Rl^z0d1Mvb#_G%zR_*82~pW zaMk(&c%IuPU>MsZV{jew^6Tg&m1$e?;4$9aBS4$ zu^65H@R&Af;$!zfD|@^2+2HTlu-{x)*SbB~$r&Pe6T>WevHO_E{`eh6XStp>?ZWc$ zejS?b&9n2kV)Ajna{R5y9>?0NU;40S?z8C!u=g(`;&^zux?AP{YWTQyd`#qAuzC4- z_IbFZdrkQO=a#ll&EmpFWH=wS!!%x*g%$gS~z`*?Wx5|$|AE_CjIsPULhs+0s#>oQrsjH#{&`vX4$* zJ@tMu7fBzn$`Y4#V(M`*d}we=)6)C|tw8kn`L5atV9;4?rpq!Ju#QxyGBkBOSUBuHN{YZw}_-G#3xR~caoAnAXR9eP8NksgSEgi%~bgL&$6s6$1+Yg7L_2(Bn_*O zxglJl5KoQ<`PWCJ{>M=gyHIrRD{+TIl;|8?M7WSivX6+#Ui z?ktjCO*y;h^INJAuHeVVW5lrJ-?FZ7N^K5;qG`!{6rmR*Kyr$D14t!+3VZX+Pk%`k z^>HuBKS&~|p_54O27CpBOsrPq#Tn%EBD0hOGZ1qS@ECAsR&}myvROMGf89%1AZAtJ zpsgqQ7!_Z3Z#F`O)+;}v0R&$PMIan?=pv#+)WZR6yY?dgy zWPtX%2k7)j}m}OF=FP!VdfXyYNk8R2%H2=HzOknvB+Q>7{Cq3jH#hU;?;<^ty&C) z8!L{Z$u77t3A-i?dbH2F6gj3w*hA;gkxjfisT8Tekrw0z$WjaeaC)~kbXX!9EQ1Sf z@NjcE#Aeq%gQumLwA*K5!|A#95Z{#GhNr^(szFSy19mNjaC#|SB{DSl1sAD~Bk18Q zAPo?I{sm3u9WF-;AVN%+W+ZykHKSQLj)e1aizmC`&LUhcgYj#`LVI`N9p+1}V)Faf zWPBt>nqS*UG2{zC0z3Mh35>3mlcCbmGZbI97;m2XgwnzDnAk^}GgmHQpRFcVDn&sx zkS>ot4g*wz1+A6%V@DTU!(HHKO-eH(lXNR}yDYN*Q zaB8wKX>qg$L(0F$E+LlcN5zimoL(pykH1b1Itc^Tt6>5Nr!h%m-gm@c3I5m|_Wwf! z4!vF_&PadKYh@XX>t>OctaB4S^sN!^kl`P4Hc#y@64*?H|AI277z%ez2BxpY4p{D| zpN^2^XeC!ew!}EJfyrHr%V0Y!K>(mlVF$`N2eMw0O;cFT%izpHoCF(N~aSqQyN z1A#g-cB%t2IStx4XNs9IJBw|$N9A7fTcT!x)tI#I@7;YJj;sF1SJ6;HN=nf6=0|fdciU0Oj9-~aG7i!Bd#*( z+ZFE*a60YF`R&4t()vf_4af9T@sP4);&5I_YJ6cz)2o_E1&qrS+)LG#~IY5A6 z9Vp5er{(~{v?9WIPclNxlGS6zqdH6zAS+=X~7nw z2^frJfHgC>96C<=XLqL^{OIb+YVMTH3QnRTPk{7V2*f3L=8HK@?iaxG7$O5z%PJbB$I*}bd@n*IfhJ_qvOdo3OO1|u5#TLV}8ubQ*?;X zuOr%1;4k5Scux?9{D&b7dM!qL$*1;R;afbjU+Vt!L;Ub>k(o-8dA8tWmg;6Snp76c z0+je8xTs2SwAOtk$G){Nui}r)#0iqEmEBSgP{pibD5DK^8p6IhfxB)vhr5mi+*1j^g8v0%c3nwpCb>Xt7OxCZ zk_N(<3~50M(wN**=riz-n_Ggm$yQ5}8TKWeYS{&@7GUQ>2>Ue35EY=TLSiRy^#}o# z%8}?7K#pc~giSX`+&OMQ%`Oz@z*k|Ur7oX?TbVUL!3QZxr6R}xHH#Bda3q<-^ZrEZ zrOvSK&pw+WY+yTDH`=wzWDcEy)}3c{Y6{~;|Xj_WzE2s>tJQlZ^~;8>%rh$wG) z@R{w@y7z6`4Ay~Jk+7>t|zYtR~$x$s<(qJ_vs%dR_>9W82(4K)r|g#&IefI=uV zfSc{mvqK%GzuX8=@VDALJK&QMxcRcW? zEExzwb3*&?|A@WR3c19bQc~T?lHAl_e|HrJ_iBV?7H>*K_?!8)_`jFL*>nPgIr(n2 z3?se(5AQ;AVvfMuDDUI$Ge$=sNy<}P6-x3K&>k%~;5H1@lllUvyskyF5kV241KA#S z_M`g9Y=Ik%@1LE2s^~XA=~j^q|7#GfhmEr5T(K-lKfIy9o9>q`B4+!D4T(6m0xYx%qucof?b1f)xv55H!dW;@1xjH1^b$OV z=Goh50Nv+G*{KfU{Sy2;N`{#VOusUOlg7WDCQ3V3il3NJc9%m5^8zuut`R2t6YNqR zBgA*KtKTS^0i4=+u2eWhD1)7?F{z62sGSTQnoQwaNbE91I1%hZ37nHZr4DEIc`ZYx z4u{KIUHMOYxN*%Af8rF~hvFMyq(Y|u34t?!mgOI;K$T#oRKaNfR#X?3$v767c>FWn zc9Dh~o-JfAHjd~BNwl2m~a{jyf*U0^VaB2WK!_hq6S-sCkFoUJvaipl?pE4ofr~FgxEgL$E6%?WL zt?lDfrZ0K(nSYiq z## zq-p=dd)Y$9tGFxcmMHc}(kD$sj~=Wz8CdZj&6fwKl`#Gtz{4q*j|vW8Czf2k7v@jN z{bp`cDb?M*Q{Lmh6?xlML0H~hOa4#)3_wxh3t}*(pC~0^3ra3CDe^Bz@@!pGH=VQw zsYzzbkmjHVZU3M^5UCpfH~v#eI=ocI8XV}+swJ^rsP6>OnN#mg(3<*W#9k;;Lbq@T z(fwICh(G`q>h;CHO8->xtC#txjBZRgC$^jqzoRKT$M<024WdS$LiJZMW&*gW%ga=pGP3A!vrg!0* zOcS8(Lw@#{c((217vJ8bfZMhCzal>FWBOY1LGS9?{`h0(`qO2a{=?#M>s#YLivj!s zw-7_HiBysq7?3qQEhn-OIFXA7rH-~E?7V`W#Y#GF|Fhk^Weq7ZCUed8(nXP0T-8%q zL{MLA?HXn&tO%yf+PGjAwjJf>8%})Ek=kv~YI+KUP;-A#rHVz41Iy6LWatM@4?}vD z&WOG4<$yIJe<|pc1{RL6-`WuM;n+gPuIqb;atluc3#jgQ8Rr}Q#mG*A{3}5@M)JY# z0-q2(3r`e-1>xj+qsNA`(JHsDML=>`_G)J*GOsP;}I0*9cds>CJC*;r4=9}E=T`S0&Bh-6nCYs+SFbFdY@G8it5C9?MNt#d~!2ACu4iFF)(Eq(41(LuO vsqy}|55Pb`N+3W$$p7~~P?SQFj3OThuyRtAq6!E=IcZ0c7(zttzd8R8Z=vLq delta 13229 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 s0A7=zA}a-TZc z>UIysBu!fOB(&Bv5!f16l1uaVD?4szqZE4d%zJOPWK9M$wnN7*^RHi0=R5?iaT(is-(Dn%tG3ukcSbFm(0L@=NFP4! zCVz3QMXB5t(KmH+KAHSV8mSF~iaO&nc0Og$8U55DKNRxR={)uM99?B~>%)R+;`21= z%lp>NpSxAL{44ItV)ZavUIjUY#~@zLXUDZ$lqNVlF7tB1;~HPYwc-TMYO1w^IfgCd z24QA56f;NEi9um^2uB0IMYxr|mj7V6T7PixM0KR|7Hld}QM(fj84|6fM_r?Ms=f_O z7g5V`1s*uCsG|Onbk{2BQK;s^m{SASCERq_$e=t~p?P z!|~cQu3Zed0#3us6RF_kx`<7U?DgOV_98KAe1hO?(MEi5FnRs#IjWTE+PHuZOD$Bc*AT(Lz)##yh6)&HU?^*;dGB zwPs8sV5n4#*IL(8-&g6Hl~j46W)-~2g?}umhDW*bRV^9K>_=tche0s%OUf(k7^d

{5b`jwOtalRQz^^` z@WHbxQc=K=a786I^BUr$ulBxmBZdQSFbIPI34vYdoyiz#Su&*`_V%S41r8k)n%WvZ z@Y3?Z{XE|p4j9dHzV$uJnTL_v`kiUOo7ax{pby(ewExUVy`Ie$5eY+CnJ z)A>w_ErK-&UMWZ&Ry3KKbZw8T!=-0C-ZdT^G7Ptd!lED$1rzgSPGds z+8y_xW*QUA;gqh`dsbvP+6?T0h ztdAfkQ!#OnwleZTnxjuhGuW=Q(TTJ^f}E}a2kA%)8%!u6so1d8Z zf0IEJ6$OaqQ|vyo3L7&4f5gdfq3u9rPYwhtif4quyApuPTnZ)}@X)w2$J0w(T+Mx0#~p7J$j3v}uhgXI;|>szNesY- zxF_Xf_Viq>P}%J;DE( zeuDB3lkpl9vwa;u1PTV@J2j*M0089!lg1%Z0bG+AB2WQdlWHPB0Vk8IA|M>0PM@bi z0{{RC2><{X00000000000000006iCzdKVfiP)h*Q~{%tz#}6DXCMFo0005BAc6n@ diff --git a/decArgo_soft/config/_configParamNames/_config_param_name_212.csv b/decArgo_soft/config/_configParamNames/_config_param_name_212.csv index e4e44dc1..02761e04 100644 --- a/decArgo_soft/config/_configParamNames/_config_param_name_212.csv +++ b/decArgo_soft/config/_configParamNames/_config_param_name_212.csv @@ -53,7 +53,7 @@ TC24;Coefficient de calibrage pression Coeff A (coefficient de calibration utili TC25;Coefficient de calibrage pression Coeff B (coefficient de calibration utilisé pour convertir la pression interne).;TBD;CONFIG_InternalPressureCalibrationCoef2_NUMBER;Second coefficient used to compute float internal pressure in mBars from sensor counts. IC00;Nb of day without surface emergence if Ice detected;TBD;CONFIG_IceDetectionSpringInhibitionDelaySinceLastIceEvasion_days;Maximum delay (in days/cycles) since the last ice evasiondate to attempt a surfacing. This is often called the 'Spring', where the float stays underwater for a time even though the temperature has warmed. IC01;Nb of day before surface emergence even with ice detected;TBD;CONFIG_IceDetectionMaxDaysNoTransmission_NUMBER;Maximum delay (in days/cycles) of no transmission due to the ice detection algorithm. This parameter is used to disable the ice detection algorithmand force the float to surface even if ice is detected. -IC02;Nb of detection to confirm Ice at surface;TBD;CONFIG_IceDetectionConsecutiveDetectionBeforeFloatSurfaceInhibition_Number;Number of consecutive ISA detections before float surface inhibition.If fewer consecutive ice detections are made, then the float will immediately seek the surface if mixed layer temp is warm. +IC02;Nb of detection to confirm Ice at surface;TBD;CONFIG_IceDetectionConsecutiveDetectionBeforeFloatSurfaceInhibition_NUMBER;Number of consecutive ISA detections before float surface inhibition.If fewer consecutive ice detections are made, then the float will immediately seek the surface if mixed layer temp is warm. IC03;Start pressure detection;TBD;CONFIG_IceDetectionMixedLayerPMax_dbar;Maximum sampling pressure used by ice cover detection algorithm. i.e. start pressure threshold for the ice detection algorithm. IC04;Stop pressure detection;TBD;CONFIG_IceDetectionMixedLayerPMin_dbar;Minimum sampling pressure used by ice cover detection algorithm. IC05;Temperature threshold;TBD;CONFIG_IceDetection_degC;Ice temperature in [degree Celsius/1e3] where profiles are aborted because of ice formation conditions diff --git a/decArgo_soft/config/_configParamNames/_config_param_name_212.json b/decArgo_soft/config/_configParamNames/_config_param_name_212.json index 4cf484ad..6ad054ee 100644 --- a/decArgo_soft/config/_configParamNames/_config_param_name_212.json +++ b/decArgo_soft/config/_configParamNames/_config_param_name_212.json @@ -436,7 +436,7 @@ "CONF_PARAM_DEC_ID" : "IC02", "CONF_PARAM_LABEL" : "Nb of detection to confirm Ice at surface", "CONF_PARAM_DEFINITION" : "TBD", - "CONF_PARAM_NAME" : "CONFIG_IceDetectionConsecutiveDetectionBeforeFloatSurfaceInhibition_Number", + "CONF_PARAM_NAME" : "CONFIG_IceDetectionConsecutiveDetectionBeforeFloatSurfaceInhibition_NUMBER", "CONF_PARAM_DESCRIPTION" : "Number of consecutive ISA detections before float surface inhibition.If fewer consecutive ice detections are made, then the float will immediately seek the surface if mixed layer temp is warm." }, "CONF_PARAM_56" : diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_1.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_1.csv index 2f593ff7..23fad1e9 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_1.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_1.csv @@ -50,3 +50,5 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 122;34;profile descent stop time;CLOCK_EndDescentToProfile_HHMM;time when float reaches profile pressure (tenths of an hour since midnight) 110;35;RTC state indicator ( normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 410;36;number of entrance in profile target range (descent);NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) +1000;-1;Number of tech messages received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1001;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_1.json b/decArgo_soft/config/_techParamNames/_tech_param_name_1.json index c800a1b9..f76b63b0 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_1.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_1.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_11.json b/decArgo_soft/config/_techParamNames/_tech_param_name_11.json index c800a1b9..f76b63b0 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_11.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_11.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_12.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_12.csv index d1f4a302..03bba03a 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_12.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_12.csv @@ -50,3 +50,5 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 122;34;profile descent stop time;CLOCK_EndDescentToProfile_HHMM;time when float reaches profile pressure (tenths of an hour since midnight) 110;35;RTC state indicator ( normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 410;36;number of entrance in profile target range (descent);NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) +1000;-1;Number of tech messages received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1001;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_12.json b/decArgo_soft/config/_techParamNames/_tech_param_name_12.json index 19f06c89..99809232 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_12.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_12.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_17.json b/decArgo_soft/config/_techParamNames/_tech_param_name_17.json index 19f06c89..99809232 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_17.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_17.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_19.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_19.csv index 1369972a..155c172e 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_19.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_19.csv @@ -51,3 +51,5 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 110;35;RTC state indicator ( normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 410;36;number of entrance in profile target range (descent);NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) 616;37;oxygen sensor state indicator (normal = 0, failure = 1);FLAG_OptodeStatus_LOGICAL;Sensor status - 1= OK, 0=not OK +1000;-1;Number of tech messages received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1001;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_19.json b/decArgo_soft/config/_techParamNames/_tech_param_name_19.json index 8da23b02..8ab7af80 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_19.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_19.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_201.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_201.csv index ac0cb217..3d8f80a4 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_201.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_201.csv @@ -1,69 +1,77 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PARAM_DESCRIPTION -224;1;Date de début de cycle : JJ;CLOCK_InitialValveActionDescentToPark_YYYYMMDD;Date of the beginning of buoyancy reduction (relative to mission start day). -100;1;Jour relatif de début de cycle.;CLOCK_InitialValveActionDescentToPark_FloatDay;Day number of the beginning of buoyancy reduction (relative to mission start day). -225;1;Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).;CLOCK_InitialValveActionDescentToPark_HHMM;Date of the beginning of buoyancy reduction (relative to mission start day). -101;1;Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.;TIME_ValveActionsAtSurface_seconds;Duration of the basic valve actions. -102;1;Nombre de coups EV en surface.;NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT;number of solenoid valve actions at the surface until the crossing of the GAP threshold -103;1;Flag échouage en surface .;FLAG_Beached_NUMBER;is the float beached? - could be logical -104;1;Heure de début de descente.;CLOCK_StartDescentToPark_HHMM;Number of minutes elapsed in the day at the beginning of the descent to parking depth. -105;1;Heure de première stabilisation.;CLOCK_InitialStabilizationDuringDescentToPark_HHMM;Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth. -106;1;Heure de fin de descente.;CLOCK_EndDescentToPark_HHMM;Number of minutes elapsed in the day at the end of the descent to parking depth. -107;1;Nombre de coups d'électrovanne en plongée vers Pdérive.;NUMBER_ValveActionsDuringDescentToPark_COUNT;number of valve actions between the crossing of the gap threshold and the end of descent at park pressure -108;1;Nombre de coups de pompe en plongée vers Pdérive.;NUMBER_PumpActionsDuringDescentToPark_COUNT;number of pump actions between the crossing of the gap threshold and the end of descent at park pressure -226;1;Date de début de dérive (JJ du mois seulement);CLOCK_EndDescentToPark_DD;time when park pressure is reached -109;1;Nombre d'entrée dans la consigne.;NUMBER_DescentToParkEntriesInParkMargin_COUNT;descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db) -110;1;Nombre de repositionnements en dérive.;NUMBER_RepositionsDuringPark_COUNT;number of times the float readjusts its buoyancy during park phase - using either the pump or EV -111;1;Nombre de coups d'EV en dérive à Pdérive.;NUMBER_ValveActionsDuringPark_COUNT;number of valve actions during park phase -112;1;Nombre de coups de pompe en dérive à Pdérive.;NUMBER_PumpActionsDuringPark_COUNT;number of pump actions while at park depth -113;1;Heure début descente profil.;CLOCK_StartDescentToProfile_HHMM;Number of minutes elapsed in the day at the beginning of the descent to profile depth. -114;1;Heure fin descente profil.;CLOCK_EndDescentToProfile_HHMM;Number of minutes elapsed in the day at the end of the descent to profile depth. -115;1;Nombre de coups EV descente profil.;NUMBER_ValveActionsDuringDescentToProfile_COUNT;number of valve actions during descent to start profile pressure -116;1;Nombre de coups de pompe descente profil.;NUMBER_PumpActionsDuringDescentToProfile_COUNT;number of pump actions during descent to start profile pressure -117;1;Nombre d'entrées consigne en dérive en attente profil.;NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) -118;1;Nombre de repositionnements en dérive en attente profil.;NUMBER_RepositionsAtProfileDepth_COUNT;at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV -119;1;Nombre de coups EV en dérive en attente profil.;NUMBER_ValveActionsDuringProfileDrift_COUNT;number of valve actions while drifting at profile depth -120;1;Nombre de coups de pompe en dérive en attente profil.;NUMBER_PumpActionsDuringProfileDrift_COUNT;Number of pump actions during drift at profile depth. -121;1;Heure de début de remontée.;CLOCK_StartAscentToSurface_HHMM;Number of minutes elapsed in the day at the beginning of the ascent to the surface. -122;1;Heure de fin de remontée.;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle -123;1;Nombre de coups de pompe en remontée.;NUMBER_PumpActionsDuringAscentToSurface_COUNT;number of pump actions between start and end of ascent -124;1;Offset de pression.;PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar;Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected -125;1;Vide interne en surface.;PRESSURE_InternalVacuumAtSurface_mbar;Surface internal pressure -126;1;Tension batterie.;VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth -127;1;Erreur RTC.;FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK -128;1;Compteur de cohérence (nombre d’erreurs de la CTD).;NUMBER_CTDError_COUNT;CTD error count -129;1;Etat du capteur DO (0 si OK, 1 sinon).;FLAG_OptodeStatus_NUMBER;Flag indicating the status of the Optode (see manual) -130;1;Durée de la session GPS.;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile -131;1;Nombre de relances effectuées lors de la session GPS.;NUMBER_RetriesForGPSAcquisition_COUNT;Number of times the GPS had to try to get a valid fix -132;1;Nombre de télécommandes reçues (pour le cycle en cours).;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. -133;1;Nombre de télécommandes rejetées (pour le cycle en cours).;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). -134;1;Date de début de fin de vie: HH;CLOCK_EOLStart_YYYYMMDDHHMMSS;Clock time when End of Life mode starts -135;1;Durée de la précédente session iridium.;TIME_PreviousIridiumSession_seconds;Duration on the previous Iridium session -136;1;Nombre de SBD recus lors de la précédente session Iridium.;NUMBER_IridiumMessagesReceivedPreviousSession_COUNT;Number of Incoming Iridium Messages Received during previous session -137;1;Nombre de SBD émis lors de la précédente session Iridium.;NUMBER_IridiumMessagesSentPreviousSession_COUNT;Number of Incoming Iridium Messages Sent during previous session +224;3;Date de début de cycle : JJ;CLOCK_InitialValveActionDescentToPark_YYYYMMDD;Date of the beginning of buoyancy reduction (relative to mission start day). +100;6;Jour relatif de début de cycle.;CLOCK_InitialValveActionDescentToPark_FloatDay;Day number of the beginning of buoyancy reduction (relative to mission start day). +225;7;Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).;CLOCK_InitialValveActionDescentToPark_HHMM;Date of the beginning of buoyancy reduction (relative to mission start day). +101;8;Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.;TIME_ValveActionsAtSurface_seconds;Duration of the basic valve actions. +102;9;Nombre de coups EV en surface.;NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT;number of solenoid valve actions at the surface until the crossing of the GAP threshold +103;10;Flag échouage en surface .;FLAG_Beached_NUMBER;is the float beached? - could be logical +104;11;Heure de début de descente.;CLOCK_StartDescentToPark_HHMM;Number of minutes elapsed in the day at the beginning of the descent to parking depth. +105;12;Heure de première stabilisation.;CLOCK_InitialStabilizationDuringDescentToPark_HHMM;Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth. +106;13;Heure de fin de descente.;CLOCK_EndDescentToPark_HHMM;Number of minutes elapsed in the day at the end of the descent to parking depth. +107;14;Nombre de coups d'électrovanne en plongée vers Pdérive.;NUMBER_ValveActionsDuringDescentToPark_COUNT;number of valve actions between the crossing of the gap threshold and the end of descent at park pressure +108;15;Nombre de coups de pompe en plongée vers Pdérive.;NUMBER_PumpActionsDuringDescentToPark_COUNT;number of pump actions between the crossing of the gap threshold and the end of descent at park pressure +226;18;Date de début de dérive (JJ du mois seulement);CLOCK_EndDescentToPark_DD;time when park pressure is reached +109;19;Nombre d'entrée dans la consigne.;NUMBER_DescentToParkEntriesInParkMargin_COUNT;descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db) +110;20;Nombre de repositionnements en dérive.;NUMBER_RepositionsDuringPark_COUNT;number of times the float readjusts its buoyancy during park phase - using either the pump or EV +111;23;Nombre de coups d'EV en dérive à Pdérive.;NUMBER_ValveActionsDuringPark_COUNT;number of valve actions during park phase +112;24;Nombre de coups de pompe en dérive à Pdérive.;NUMBER_PumpActionsDuringPark_COUNT;number of pump actions while at park depth +113;25;Heure début descente profil.;CLOCK_StartDescentToProfile_HHMM;Number of minutes elapsed in the day at the beginning of the descent to profile depth. +114;26;Heure fin descente profil.;CLOCK_EndDescentToProfile_HHMM;Number of minutes elapsed in the day at the end of the descent to profile depth. +115;27;Nombre de coups EV descente profil.;NUMBER_ValveActionsDuringDescentToProfile_COUNT;number of valve actions during descent to start profile pressure +116;28;Nombre de coups de pompe descente profil.;NUMBER_PumpActionsDuringDescentToProfile_COUNT;number of pump actions during descent to start profile pressure +117;30;Nombre d'entrées consigne en dérive en attente profil.;NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) +118;31;Nombre de repositionnements en dérive en attente profil.;NUMBER_RepositionsAtProfileDepth_COUNT;at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV +119;32;Nombre de coups EV en dérive en attente profil.;NUMBER_ValveActionsDuringProfileDrift_COUNT;number of valve actions while drifting at profile depth +120;33;Nombre de coups de pompe en dérive en attente profil.;NUMBER_PumpActionsDuringProfileDrift_COUNT;Number of pump actions during drift at profile depth. +121;36;Heure de début de remontée.;CLOCK_StartAscentToSurface_HHMM;Number of minutes elapsed in the day at the beginning of the ascent to the surface. +122;37;Heure de fin de remontée.;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle +123;38;Nombre de coups de pompe en remontée.;NUMBER_PumpActionsDuringAscentToSurface_COUNT;number of pump actions between start and end of ascent +124;45;Offset de pression.;PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar;Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected +125;46;Vide interne en surface.;PRESSURE_InternalVacuumAtSurface_mbar;Surface internal pressure +126;47;Tension batterie.;VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth +127;48;Erreur RTC.;FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK +128;49;Compteur de cohérence (nombre d’erreurs de la CTD).;NUMBER_CTDError_COUNT;CTD error count +129;50;Etat du capteur DO (0 si OK, 1 sinon).;FLAG_OptodeStatus_NUMBER;Flag indicating the status of the Optode (see manual) +1000;59;GPS valid fix ?;TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). +130;60;Durée de la session GPS.;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile +131;61;Nombre de relances effectuées lors de la session GPS.;NUMBER_RetriesForGPSAcquisition_COUNT;Number of times the GPS had to try to get a valid fix +132;62;Nombre de télécommandes reçues (pour le cycle en cours).;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. +133;63;Nombre de télécommandes rejetées (pour le cycle en cours).;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). +134;65;Date de début de fin de vie: HH;CLOCK_EOLStart_YYYYMMDDHHMMSS;Clock time when End of Life mode starts +135;71;Durée de la précédente session iridium.;TIME_PreviousIridiumSession_seconds;Duration on the previous Iridium session +136;72;Nombre de SBD recus lors de la précédente session Iridium.;NUMBER_IridiumMessagesReceivedPreviousSession_COUNT;Number of Incoming Iridium Messages Received during previous session +137;73;Nombre de SBD émis lors de la précédente session Iridium.;NUMBER_IridiumMessagesSentPreviousSession_COUNT;Number of Incoming Iridium Messages Sent during previous session 200;2;Nombre de paquets de type 1 ou 8 - CTDO descente.;NUMBER_DescentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). -201;2;Nombre de paquets de type 2 ou 9 - CTDO dérive.;NUMBER_ParkIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the drift at park depth. -202;2;Nombre de paquets de type 3 ou 10 - CTDO remontée.;NUMBER_AscentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface. -203;2;Nombre de tranches zone surface – descente.;NUMBER_DescendingProfileReductionUpperPart_COUNT;Descending profile reduction Number of slices in shallow zone - NTS -204;2;Nombre de tranches zone fond - descente.;NUMBER_DescendingProfileReductionLowerPart_COUNT;Descending profile reduction Number of slices in deep zone - NTF -205;2;Nombre de mesures en dérive à l’immersion de parking.;NUMBER_ParkCTDOSamplesInternal_COUNT;Park measurements - Internal counter -206;2;Nombre de tranches zone surface – remontée.;NUMBER_AscendingProfileReductionUpperPart_COUNT;Ascending profile reduction Number of slices in shallow zone - NTS -207;2;Nombre de tranches zone fond - remontée.;NUMBER_AscendingProfileReductionLowerPart_COUNT;Ascending profile reduction Number of slices in deep zone - NTF -221;2;Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant);PRES_LastAscentPumpedRawSample_dbar;Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars). -208;2;Nombre d'échouages détectés pendant le cycle.;FLAG_Grounded_NUMBER;grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded -209;2;Jour flotteur du premier échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). -210;2;Heure du premier échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded -227;2;Phase 1er échouage;FLAG_FirstGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type -211;2;Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.;NUMBER_ValveActionsForFirstGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the first grounding event -228;2;Jour flotteur du 2ième échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). -229;2;Heure du 2ième échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded -230;2;Phase 2ième échouage;FLAG_SecondGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type -231;2;Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2;NUMBER_ValveActionsForSecondGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the second grounding event -212;2;Nombre de remontées d'urgence.;NUMBER_EmergencyAscents_COUNT;Number of Emergency ascents - Internal count -213;2;Heure de la première remontée d'urgence.;CLOCK_TimeOfFirstEmergencyAscent_HHMM;Number of minutes elapsed in the day of the float first emergency ascent. -214;2;Pression de la première remontée d'urgence.;PRES_FirstEmergencyAscent_dbar;Pressure that triggered the first emergency ascent -215;2;Nombre de coups de pompe liés à la première remontée d’urgence.;NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT;Emergency ascent - pump actions at emergency depth -216;2;Jour de première remontée d’urgence.;CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). -217;2;Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.;NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT;number of pump actions needed to leave the sea bottom when grounded at profile pressure -218;2;Vitesse au moment du premier échouage.;SPEED_FirstGrounding_mm/s;Vertical speed during the first grounding -219;2;Vide interne au fond en début de remontée.;PRESSURE_InternalVacuumProfileStart_mbar;Internal tube pressure [mbar] in profile depth -220;2;Date du dernier reset flotteur.;CLOCK_LastReset_YYYYMMDDHHMMSS;Clock time of the last reset of the float +201;3;Nombre de paquets de type 2 ou 9 - CTDO dérive.;NUMBER_ParkIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the drift at park depth. +202;4;Nombre de paquets de type 3 ou 10 - CTDO remontée.;NUMBER_AscentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface. +203;5;Nombre de tranches zone surface – descente.;NUMBER_DescendingProfileReductionUpperPart_COUNT;Descending profile reduction Number of slices in shallow zone - NTS +204;6;Nombre de tranches zone fond - descente.;NUMBER_DescendingProfileReductionLowerPart_COUNT;Descending profile reduction Number of slices in deep zone - NTF +205;7;Nombre de mesures en dérive à l’immersion de parking.;NUMBER_ParkCTDOSamplesInternal_COUNT;Park measurements - Internal counter +206;8;Nombre de tranches zone surface – remontée.;NUMBER_AscendingProfileReductionUpperPart_COUNT;Ascending profile reduction Number of slices in shallow zone - NTS +207;9;Nombre de tranches zone fond - remontée.;NUMBER_AscendingProfileReductionLowerPart_COUNT;Ascending profile reduction Number of slices in deep zone - NTF +221;10;Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant);PRES_LastAscentPumpedRawSample_dbar;Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars). +208;16;Nombre d'échouages détectés pendant le cycle.;FLAG_Grounded_NUMBER;grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded +209;18;Jour flotteur du premier échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). +210;19;Heure du premier échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded +227;20;Phase 1er échouage;FLAG_FirstGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type +211;21;Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.;NUMBER_ValveActionsForFirstGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the first grounding event +228;23;Jour flotteur du 2ième échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). +229;24;Heure du 2ième échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded +230;25;Phase 2ième échouage;FLAG_SecondGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type +231;26;Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2;NUMBER_ValveActionsForSecondGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the second grounding event +212;27;Nombre de remontées d'urgence.;NUMBER_EmergencyAscents_COUNT;Number of Emergency ascents - Internal count +213;28;Heure de la première remontée d'urgence.;CLOCK_TimeOfFirstEmergencyAscent_HHMM;Number of minutes elapsed in the day of the float first emergency ascent. +214;29;Pression de la première remontée d'urgence.;PRES_FirstEmergencyAscent_dbar;Pressure that triggered the first emergency ascent +215;30;Nombre de coups de pompe liés à la première remontée d’urgence.;NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT;Emergency ascent - pump actions at emergency depth +216;31;Jour de première remontée d’urgence.;CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). +217;32;Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.;NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT;number of pump actions needed to leave the sea bottom when grounded at profile pressure +218;33;Vitesse au moment du premier échouage.;SPEED_FirstGrounding_mm/s;Vertical speed during the first grounding +219;34;Vide interne au fond en début de remontée.;PRESSURE_InternalVacuumProfileStart_mbar;Internal tube pressure [mbar] in profile depth +220;35;Date du dernier reset flotteur.;CLOCK_LastReset_YYYYMMDDHHMMSS;Clock time of the last reset of the float +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;Number of hydraulic packets received;TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit hydraulic data recorded during the cycle. +1005;-1;Number of tech #1 packets received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1006;-1;Number of tech #2 packets received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1007;-1;Number of parameter packets received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_201.json b/decArgo_soft/config/_techParamNames/_tech_param_name_201.json index 82452853..f87014e3 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_201.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_201.json @@ -2,7 +2,7 @@ "TECH_PARAM_1" : { "TECH_PARAM_DEC_ID" : "224", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Date de début de cycle : JJ", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_YYYYMMDD", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -10,7 +10,7 @@ "TECH_PARAM_2" : { "TECH_PARAM_DEC_ID" : "100", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Jour relatif de début de cycle.", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the beginning of buoyancy reduction (relative to mission start day)." @@ -18,7 +18,7 @@ "TECH_PARAM_3" : { "TECH_PARAM_DEC_ID" : "225", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -26,7 +26,7 @@ "TECH_PARAM_4" : { "TECH_PARAM_DEC_ID" : "101", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.", "TECH_PARAM_NAME" : "TIME_ValveActionsAtSurface_seconds", "TECH_PARAM_DESCRIPTION" : "Duration of the basic valve actions." @@ -34,7 +34,7 @@ "TECH_PARAM_5" : { "TECH_PARAM_DEC_ID" : "102", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en surface.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT", "TECH_PARAM_DESCRIPTION" : "number of solenoid valve actions at the surface until the crossing of the GAP threshold" @@ -42,7 +42,7 @@ "TECH_PARAM_6" : { "TECH_PARAM_DEC_ID" : "103", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Flag échouage en surface .", "TECH_PARAM_NAME" : "FLAG_Beached_NUMBER", "TECH_PARAM_DESCRIPTION" : "is the float beached? - could be logical" @@ -50,7 +50,7 @@ "TECH_PARAM_7" : { "TECH_PARAM_DEC_ID" : "104", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "11", "TECH_PARAM_MSG_LABEL" : "Heure de début de descente.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to parking depth." @@ -58,7 +58,7 @@ "TECH_PARAM_8" : { "TECH_PARAM_DEC_ID" : "105", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "12", "TECH_PARAM_MSG_LABEL" : "Heure de première stabilisation.", "TECH_PARAM_NAME" : "CLOCK_InitialStabilizationDuringDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth." @@ -66,7 +66,7 @@ "TECH_PARAM_9" : { "TECH_PARAM_DEC_ID" : "106", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "13", "TECH_PARAM_MSG_LABEL" : "Heure de fin de descente.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to parking depth." @@ -74,7 +74,7 @@ "TECH_PARAM_10" : { "TECH_PARAM_DEC_ID" : "107", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "14", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'électrovanne en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -82,7 +82,7 @@ "TECH_PARAM_11" : { "TECH_PARAM_DEC_ID" : "108", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "15", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -90,7 +90,7 @@ "TECH_PARAM_12" : { "TECH_PARAM_DEC_ID" : "226", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Date de début de dérive (JJ du mois seulement)", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_DD", "TECH_PARAM_DESCRIPTION" : "time when park pressure is reached" @@ -98,7 +98,7 @@ "TECH_PARAM_13" : { "TECH_PARAM_DEC_ID" : "109", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrée dans la consigne.", "TECH_PARAM_NAME" : "NUMBER_DescentToParkEntriesInParkMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db)" @@ -106,7 +106,7 @@ "TECH_PARAM_14" : { "TECH_PARAM_DEC_ID" : "110", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive.", "TECH_PARAM_NAME" : "NUMBER_RepositionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of times the float readjusts its buoyancy during park phase - using either the pump or EV" @@ -114,7 +114,7 @@ "TECH_PARAM_15" : { "TECH_PARAM_DEC_ID" : "111", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'EV en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during park phase" @@ -122,7 +122,7 @@ "TECH_PARAM_16" : { "TECH_PARAM_DEC_ID" : "112", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions while at park depth" @@ -130,7 +130,7 @@ "TECH_PARAM_17" : { "TECH_PARAM_DEC_ID" : "113", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Heure début descente profil.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to profile depth." @@ -138,7 +138,7 @@ "TECH_PARAM_18" : { "TECH_PARAM_DEC_ID" : "114", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Heure fin descente profil.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to profile depth." @@ -146,7 +146,7 @@ "TECH_PARAM_19" : { "TECH_PARAM_DEC_ID" : "115", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV descente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during descent to start profile pressure" @@ -154,7 +154,7 @@ "TECH_PARAM_20" : { "TECH_PARAM_DEC_ID" : "116", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe descente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions during descent to start profile pressure" @@ -162,7 +162,7 @@ "TECH_PARAM_21" : { "TECH_PARAM_DEC_ID" : "117", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrées consigne en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" @@ -170,7 +170,7 @@ "TECH_PARAM_22" : { "TECH_PARAM_DEC_ID" : "118", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_RepositionsAtProfileDepth_COUNT", "TECH_PARAM_DESCRIPTION" : "at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV" @@ -178,7 +178,7 @@ "TECH_PARAM_23" : { "TECH_PARAM_DEC_ID" : "119", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions while drifting at profile depth" @@ -186,7 +186,7 @@ "TECH_PARAM_24" : { "TECH_PARAM_DEC_ID" : "120", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions during drift at profile depth." @@ -194,7 +194,7 @@ "TECH_PARAM_25" : { "TECH_PARAM_DEC_ID" : "121", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "36", "TECH_PARAM_MSG_LABEL" : "Heure de début de remontée.", "TECH_PARAM_NAME" : "CLOCK_StartAscentToSurface_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the ascent to the surface." @@ -202,7 +202,7 @@ "TECH_PARAM_26" : { "TECH_PARAM_DEC_ID" : "122", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "37", "TECH_PARAM_MSG_LABEL" : "Heure de fin de remontée.", "TECH_PARAM_NAME" : "CLOCK_TransmissionStart_HHMM", "TECH_PARAM_DESCRIPTION" : "time of the first transmission for this cycle" @@ -210,7 +210,7 @@ "TECH_PARAM_27" : { "TECH_PARAM_DEC_ID" : "123", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "38", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en remontée.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringAscentToSurface_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between start and end of ascent " @@ -218,7 +218,7 @@ "TECH_PARAM_28" : { "TECH_PARAM_DEC_ID" : "124", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "45", "TECH_PARAM_MSG_LABEL" : "Offset de pression.", "TECH_PARAM_NAME" : "PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar", "TECH_PARAM_DESCRIPTION" : "Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected" @@ -226,7 +226,7 @@ "TECH_PARAM_29" : { "TECH_PARAM_DEC_ID" : "125", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "46", "TECH_PARAM_MSG_LABEL" : "Vide interne en surface.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumAtSurface_mbar", "TECH_PARAM_DESCRIPTION" : "Surface internal pressure" @@ -234,7 +234,7 @@ "TECH_PARAM_30" : { "TECH_PARAM_DEC_ID" : "126", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "47", "TECH_PARAM_MSG_LABEL" : "Tension batterie.", "TECH_PARAM_NAME" : "VOLTAGE_BatteryPumpStartProfile_volts", "TECH_PARAM_DESCRIPTION" : "Pump battery voltage (volts) at depth" @@ -242,7 +242,7 @@ "TECH_PARAM_31" : { "TECH_PARAM_DEC_ID" : "127", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "48", "TECH_PARAM_MSG_LABEL" : "Erreur RTC.", "TECH_PARAM_NAME" : "FLAG_RTCStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "real time clock status - 1= OK, 0=not OK" @@ -250,7 +250,7 @@ "TECH_PARAM_32" : { "TECH_PARAM_DEC_ID" : "128", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "49", "TECH_PARAM_MSG_LABEL" : "Compteur de cohérence (nombre d’erreurs de la CTD).", "TECH_PARAM_NAME" : "NUMBER_CTDError_COUNT", "TECH_PARAM_DESCRIPTION" : "CTD error count" @@ -258,76 +258,84 @@ "TECH_PARAM_33" : { "TECH_PARAM_DEC_ID" : "129", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "50", "TECH_PARAM_MSG_LABEL" : "Etat du capteur DO (0 si OK, 1 sinon).", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the Optode (see manual)" }, "TECH_PARAM_34" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "59", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix ?", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "130", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "60", "TECH_PARAM_MSG_LABEL" : "Durée de la session GPS.", "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "131", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "61", "TECH_PARAM_MSG_LABEL" : "Nombre de relances effectuées lors de la session GPS.", "TECH_PARAM_NAME" : "NUMBER_RetriesForGPSAcquisition_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of times the GPS had to try to get a valid fix" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "132", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "62", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes reçues (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "133", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "63", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes rejetées (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "134", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "65", "TECH_PARAM_MSG_LABEL" : "Date de début de fin de vie: HH", "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "135", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "71", "TECH_PARAM_MSG_LABEL" : "Durée de la précédente session iridium.", "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "136", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "72", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD recus lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "137", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "73", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD émis lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "2", @@ -335,212 +343,268 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "201", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 2 ou 9 - CTDO dérive.", "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "202", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "4", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 3 ou 10 - CTDO remontée.", "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "203", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "5", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "204", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "205", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Nombre de mesures en dérive à l’immersion de parking.", "TECH_PARAM_NAME" : "NUMBER_ParkCTDOSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "206", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "207", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "221", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant)", "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "208", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "16", "TECH_PARAM_MSG_LABEL" : "Nombre d'échouages détectés pendant le cycle.", "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "209", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "210", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Heure du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "227", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Phase 1er échouage", "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "211", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "21", "TECH_PARAM_MSG_LABEL" : "Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "228", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "229", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Heure du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "230", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Phase 2ième échouage", "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "231", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "212", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de remontées d'urgence.", "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "213", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Heure de la première remontée d'urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "214", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "29", "TECH_PARAM_MSG_LABEL" : "Pression de la première remontée d'urgence.", "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "215", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe liés à la première remontée d’urgence.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "216", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Jour de première remontée d’urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "217", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions needed to leave the sea bottom when grounded at profile pressure" }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "218", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Vitesse au moment du premier échouage.", "TECH_PARAM_NAME" : "SPEED_FirstGrounding_mm/s", "TECH_PARAM_DESCRIPTION" : "Vertical speed during the first grounding" }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "219", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "34", "TECH_PARAM_MSG_LABEL" : "Vide interne au fond en début de remontée.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "220", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "35", "TECH_PARAM_MSG_LABEL" : "Date du dernier reset flotteur.", "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" + }, + "TECH_PARAM_70" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_71" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_72" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_73" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_74" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_75" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_76" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_202.json b/decArgo_soft/config/_techParamNames/_tech_param_name_202.json index 82452853..f87014e3 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_202.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_202.json @@ -2,7 +2,7 @@ "TECH_PARAM_1" : { "TECH_PARAM_DEC_ID" : "224", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Date de début de cycle : JJ", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_YYYYMMDD", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -10,7 +10,7 @@ "TECH_PARAM_2" : { "TECH_PARAM_DEC_ID" : "100", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Jour relatif de début de cycle.", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the beginning of buoyancy reduction (relative to mission start day)." @@ -18,7 +18,7 @@ "TECH_PARAM_3" : { "TECH_PARAM_DEC_ID" : "225", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -26,7 +26,7 @@ "TECH_PARAM_4" : { "TECH_PARAM_DEC_ID" : "101", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.", "TECH_PARAM_NAME" : "TIME_ValveActionsAtSurface_seconds", "TECH_PARAM_DESCRIPTION" : "Duration of the basic valve actions." @@ -34,7 +34,7 @@ "TECH_PARAM_5" : { "TECH_PARAM_DEC_ID" : "102", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en surface.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT", "TECH_PARAM_DESCRIPTION" : "number of solenoid valve actions at the surface until the crossing of the GAP threshold" @@ -42,7 +42,7 @@ "TECH_PARAM_6" : { "TECH_PARAM_DEC_ID" : "103", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Flag échouage en surface .", "TECH_PARAM_NAME" : "FLAG_Beached_NUMBER", "TECH_PARAM_DESCRIPTION" : "is the float beached? - could be logical" @@ -50,7 +50,7 @@ "TECH_PARAM_7" : { "TECH_PARAM_DEC_ID" : "104", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "11", "TECH_PARAM_MSG_LABEL" : "Heure de début de descente.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to parking depth." @@ -58,7 +58,7 @@ "TECH_PARAM_8" : { "TECH_PARAM_DEC_ID" : "105", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "12", "TECH_PARAM_MSG_LABEL" : "Heure de première stabilisation.", "TECH_PARAM_NAME" : "CLOCK_InitialStabilizationDuringDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth." @@ -66,7 +66,7 @@ "TECH_PARAM_9" : { "TECH_PARAM_DEC_ID" : "106", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "13", "TECH_PARAM_MSG_LABEL" : "Heure de fin de descente.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to parking depth." @@ -74,7 +74,7 @@ "TECH_PARAM_10" : { "TECH_PARAM_DEC_ID" : "107", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "14", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'électrovanne en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -82,7 +82,7 @@ "TECH_PARAM_11" : { "TECH_PARAM_DEC_ID" : "108", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "15", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -90,7 +90,7 @@ "TECH_PARAM_12" : { "TECH_PARAM_DEC_ID" : "226", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Date de début de dérive (JJ du mois seulement)", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_DD", "TECH_PARAM_DESCRIPTION" : "time when park pressure is reached" @@ -98,7 +98,7 @@ "TECH_PARAM_13" : { "TECH_PARAM_DEC_ID" : "109", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrée dans la consigne.", "TECH_PARAM_NAME" : "NUMBER_DescentToParkEntriesInParkMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db)" @@ -106,7 +106,7 @@ "TECH_PARAM_14" : { "TECH_PARAM_DEC_ID" : "110", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive.", "TECH_PARAM_NAME" : "NUMBER_RepositionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of times the float readjusts its buoyancy during park phase - using either the pump or EV" @@ -114,7 +114,7 @@ "TECH_PARAM_15" : { "TECH_PARAM_DEC_ID" : "111", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'EV en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during park phase" @@ -122,7 +122,7 @@ "TECH_PARAM_16" : { "TECH_PARAM_DEC_ID" : "112", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions while at park depth" @@ -130,7 +130,7 @@ "TECH_PARAM_17" : { "TECH_PARAM_DEC_ID" : "113", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Heure début descente profil.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to profile depth." @@ -138,7 +138,7 @@ "TECH_PARAM_18" : { "TECH_PARAM_DEC_ID" : "114", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Heure fin descente profil.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to profile depth." @@ -146,7 +146,7 @@ "TECH_PARAM_19" : { "TECH_PARAM_DEC_ID" : "115", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV descente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during descent to start profile pressure" @@ -154,7 +154,7 @@ "TECH_PARAM_20" : { "TECH_PARAM_DEC_ID" : "116", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe descente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions during descent to start profile pressure" @@ -162,7 +162,7 @@ "TECH_PARAM_21" : { "TECH_PARAM_DEC_ID" : "117", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrées consigne en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" @@ -170,7 +170,7 @@ "TECH_PARAM_22" : { "TECH_PARAM_DEC_ID" : "118", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_RepositionsAtProfileDepth_COUNT", "TECH_PARAM_DESCRIPTION" : "at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV" @@ -178,7 +178,7 @@ "TECH_PARAM_23" : { "TECH_PARAM_DEC_ID" : "119", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions while drifting at profile depth" @@ -186,7 +186,7 @@ "TECH_PARAM_24" : { "TECH_PARAM_DEC_ID" : "120", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions during drift at profile depth." @@ -194,7 +194,7 @@ "TECH_PARAM_25" : { "TECH_PARAM_DEC_ID" : "121", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "36", "TECH_PARAM_MSG_LABEL" : "Heure de début de remontée.", "TECH_PARAM_NAME" : "CLOCK_StartAscentToSurface_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the ascent to the surface." @@ -202,7 +202,7 @@ "TECH_PARAM_26" : { "TECH_PARAM_DEC_ID" : "122", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "37", "TECH_PARAM_MSG_LABEL" : "Heure de fin de remontée.", "TECH_PARAM_NAME" : "CLOCK_TransmissionStart_HHMM", "TECH_PARAM_DESCRIPTION" : "time of the first transmission for this cycle" @@ -210,7 +210,7 @@ "TECH_PARAM_27" : { "TECH_PARAM_DEC_ID" : "123", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "38", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en remontée.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringAscentToSurface_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between start and end of ascent " @@ -218,7 +218,7 @@ "TECH_PARAM_28" : { "TECH_PARAM_DEC_ID" : "124", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "45", "TECH_PARAM_MSG_LABEL" : "Offset de pression.", "TECH_PARAM_NAME" : "PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar", "TECH_PARAM_DESCRIPTION" : "Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected" @@ -226,7 +226,7 @@ "TECH_PARAM_29" : { "TECH_PARAM_DEC_ID" : "125", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "46", "TECH_PARAM_MSG_LABEL" : "Vide interne en surface.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumAtSurface_mbar", "TECH_PARAM_DESCRIPTION" : "Surface internal pressure" @@ -234,7 +234,7 @@ "TECH_PARAM_30" : { "TECH_PARAM_DEC_ID" : "126", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "47", "TECH_PARAM_MSG_LABEL" : "Tension batterie.", "TECH_PARAM_NAME" : "VOLTAGE_BatteryPumpStartProfile_volts", "TECH_PARAM_DESCRIPTION" : "Pump battery voltage (volts) at depth" @@ -242,7 +242,7 @@ "TECH_PARAM_31" : { "TECH_PARAM_DEC_ID" : "127", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "48", "TECH_PARAM_MSG_LABEL" : "Erreur RTC.", "TECH_PARAM_NAME" : "FLAG_RTCStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "real time clock status - 1= OK, 0=not OK" @@ -250,7 +250,7 @@ "TECH_PARAM_32" : { "TECH_PARAM_DEC_ID" : "128", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "49", "TECH_PARAM_MSG_LABEL" : "Compteur de cohérence (nombre d’erreurs de la CTD).", "TECH_PARAM_NAME" : "NUMBER_CTDError_COUNT", "TECH_PARAM_DESCRIPTION" : "CTD error count" @@ -258,76 +258,84 @@ "TECH_PARAM_33" : { "TECH_PARAM_DEC_ID" : "129", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "50", "TECH_PARAM_MSG_LABEL" : "Etat du capteur DO (0 si OK, 1 sinon).", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the Optode (see manual)" }, "TECH_PARAM_34" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "59", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix ?", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "130", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "60", "TECH_PARAM_MSG_LABEL" : "Durée de la session GPS.", "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "131", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "61", "TECH_PARAM_MSG_LABEL" : "Nombre de relances effectuées lors de la session GPS.", "TECH_PARAM_NAME" : "NUMBER_RetriesForGPSAcquisition_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of times the GPS had to try to get a valid fix" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "132", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "62", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes reçues (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "133", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "63", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes rejetées (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "134", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "65", "TECH_PARAM_MSG_LABEL" : "Date de début de fin de vie: HH", "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "135", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "71", "TECH_PARAM_MSG_LABEL" : "Durée de la précédente session iridium.", "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "136", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "72", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD recus lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "137", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "73", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD émis lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "2", @@ -335,212 +343,268 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "201", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 2 ou 9 - CTDO dérive.", "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "202", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "4", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 3 ou 10 - CTDO remontée.", "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "203", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "5", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "204", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "205", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Nombre de mesures en dérive à l’immersion de parking.", "TECH_PARAM_NAME" : "NUMBER_ParkCTDOSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "206", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "207", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "221", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant)", "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "208", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "16", "TECH_PARAM_MSG_LABEL" : "Nombre d'échouages détectés pendant le cycle.", "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "209", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "210", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Heure du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "227", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Phase 1er échouage", "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "211", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "21", "TECH_PARAM_MSG_LABEL" : "Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "228", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "229", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Heure du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "230", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Phase 2ième échouage", "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "231", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "212", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de remontées d'urgence.", "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "213", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Heure de la première remontée d'urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "214", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "29", "TECH_PARAM_MSG_LABEL" : "Pression de la première remontée d'urgence.", "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "215", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe liés à la première remontée d’urgence.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "216", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Jour de première remontée d’urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "217", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions needed to leave the sea bottom when grounded at profile pressure" }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "218", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Vitesse au moment du premier échouage.", "TECH_PARAM_NAME" : "SPEED_FirstGrounding_mm/s", "TECH_PARAM_DESCRIPTION" : "Vertical speed during the first grounding" }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "219", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "34", "TECH_PARAM_MSG_LABEL" : "Vide interne au fond en début de remontée.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "220", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "35", "TECH_PARAM_MSG_LABEL" : "Date du dernier reset flotteur.", "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" + }, + "TECH_PARAM_70" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_71" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_72" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_73" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_74" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_75" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_76" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_203.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_203.csv index eab0ac5b..a39982cd 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_203.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_203.csv @@ -1,70 +1,78 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PARAM_DESCRIPTION -224;1;Date de début de cycle : JJ;CLOCK_InitialValveActionDescentToPark_YYYYMMDD;Date of the beginning of buoyancy reduction (relative to mission start day). -100;1;Jour relatif de début de cycle.;CLOCK_InitialValveActionDescentToPark_FloatDay;Day number of the beginning of buoyancy reduction (relative to mission start day). -225;1;Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).;CLOCK_InitialValveActionDescentToPark_HHMM;Date of the beginning of buoyancy reduction (relative to mission start day). -101;1;Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.;TIME_ValveActionsAtSurface_seconds;Duration of the basic valve actions. -102;1;Nombre de coups EV en surface.;NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT;number of solenoid valve actions at the surface until the crossing of the GAP threshold -103;1;Flag échouage en surface .;FLAG_Beached_NUMBER;is the float beached? - could be logical -104;1;Heure de début de descente.;CLOCK_StartDescentToPark_HHMM;Number of minutes elapsed in the day at the beginning of the descent to parking depth. -105;1;Heure de première stabilisation.;CLOCK_InitialStabilizationDuringDescentToPark_HHMM;Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth. -106;1;Heure de fin de descente.;CLOCK_EndDescentToPark_HHMM;Number of minutes elapsed in the day at the end of the descent to parking depth. -107;1;Nombre de coups d'électrovanne en plongée vers Pdérive.;NUMBER_ValveActionsDuringDescentToPark_COUNT;number of valve actions between the crossing of the gap threshold and the end of descent at park pressure -108;1;Nombre de coups de pompe en plongée vers Pdérive.;NUMBER_PumpActionsDuringDescentToPark_COUNT;number of pump actions between the crossing of the gap threshold and the end of descent at park pressure -226;1;Date de début de dérive (JJ du mois seulement);CLOCK_EndDescentToPark_DD;time when park pressure is reached -109;1;Nombre d'entrée dans la consigne.;NUMBER_DescentToParkEntriesInParkMargin_COUNT;descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db) -110;1;Nombre de repositionnements en dérive.;NUMBER_RepositionsDuringPark_COUNT;number of times the float readjusts its buoyancy during park phase - using either the pump or EV -111;1;Nombre de coups d'EV en dérive à Pdérive.;NUMBER_ValveActionsDuringPark_COUNT;number of valve actions during park phase -112;1;Nombre de coups de pompe en dérive à Pdérive.;NUMBER_PumpActionsDuringPark_COUNT;number of pump actions while at park depth -113;1;Heure début descente profil.;CLOCK_StartDescentToProfile_HHMM;Number of minutes elapsed in the day at the beginning of the descent to profile depth. -114;1;Heure fin descente profil.;CLOCK_EndDescentToProfile_HHMM;Number of minutes elapsed in the day at the end of the descent to profile depth. -115;1;Nombre de coups EV descente profil.;NUMBER_ValveActionsDuringDescentToProfile_COUNT;number of valve actions during descent to start profile pressure -116;1;Nombre de coups de pompe descente profil.;NUMBER_PumpActionsDuringDescentToProfile_COUNT;number of pump actions during descent to start profile pressure -117;1;Nombre d'entrées consigne en dérive en attente profil.;NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) -118;1;Nombre de repositionnements en dérive en attente profil.;NUMBER_RepositionsAtProfileDepth_COUNT;at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV -119;1;Nombre de coups EV en dérive en attente profil.;NUMBER_ValveActionsDuringProfileDrift_COUNT;number of valve actions while drifting at profile depth -120;1;Nombre de coups de pompe en dérive en attente profil.;NUMBER_PumpActionsDuringProfileDrift_COUNT;Number of pump actions during drift at profile depth. -121;1;Heure de début de remontée.;CLOCK_StartAscentToSurface_HHMM;Number of minutes elapsed in the day at the beginning of the ascent to the surface. -122;1;Heure de fin de remontée.;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle -123;1;Nombre de coups de pompe en remontée.;NUMBER_PumpActionsDuringAscentToSurface_COUNT;number of pump actions between start and end of ascent -124;1;Offset de pression.;PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar;Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected -125;1;Vide interne en surface.;PRESSURE_InternalVacuumAtSurface_mbar;Surface internal pressure -126;1;Tension batterie.;VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth -127;1;Erreur RTC.;FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK -128;1;Compteur de cohérence (nombre d’erreurs de la CTD).;NUMBER_CTDError_COUNT;CTD error count -129;1;Etat du capteur DO (0 si OK, 1 sinon).;FLAG_OptodeStatus_NUMBER;Flag indicating the status of the Optode (see manual) -130;1;Durée de la session GPS.;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile -131;1;Nombre de relances effectuées lors de la session GPS.;NUMBER_RetriesForGPSAcquisition_COUNT;Number of times the GPS had to try to get a valid fix -132;1;Nombre de télécommandes reçues (pour le cycle en cours).;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. -133;1;Nombre de télécommandes rejetées (pour le cycle en cours).;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). -134;1;Date de début de fin de vie: HH;CLOCK_EOLStart_YYYYMMDDHHMMSS;Clock time when End of Life mode starts -135;1;Durée de la précédente session iridium.;TIME_PreviousIridiumSession_seconds;Duration on the previous Iridium session -136;1;Nombre de SBD recus lors de la précédente session Iridium.;NUMBER_IridiumMessagesReceivedPreviousSession_COUNT;Number of Incoming Iridium Messages Received during previous session -137;1;Nombre de SBD émis lors de la précédente session Iridium.;NUMBER_IridiumMessagesSentPreviousSession_COUNT;Number of Incoming Iridium Messages Sent during previous session +224;3;Date de début de cycle : JJ;CLOCK_InitialValveActionDescentToPark_YYYYMMDD;Date of the beginning of buoyancy reduction (relative to mission start day). +100;6;Jour relatif de début de cycle.;CLOCK_InitialValveActionDescentToPark_FloatDay;Day number of the beginning of buoyancy reduction (relative to mission start day). +225;7;Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).;CLOCK_InitialValveActionDescentToPark_HHMM;Date of the beginning of buoyancy reduction (relative to mission start day). +101;8;Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.;TIME_ValveActionsAtSurface_seconds;Duration of the basic valve actions. +102;9;Nombre de coups EV en surface.;NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT;number of solenoid valve actions at the surface until the crossing of the GAP threshold +103;10;Flag échouage en surface .;FLAG_Beached_NUMBER;is the float beached? - could be logical +104;11;Heure de début de descente.;CLOCK_StartDescentToPark_HHMM;Number of minutes elapsed in the day at the beginning of the descent to parking depth. +105;12;Heure de première stabilisation.;CLOCK_InitialStabilizationDuringDescentToPark_HHMM;Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth. +106;13;Heure de fin de descente.;CLOCK_EndDescentToPark_HHMM;Number of minutes elapsed in the day at the end of the descent to parking depth. +107;14;Nombre de coups d'électrovanne en plongée vers Pdérive.;NUMBER_ValveActionsDuringDescentToPark_COUNT;number of valve actions between the crossing of the gap threshold and the end of descent at park pressure +108;15;Nombre de coups de pompe en plongée vers Pdérive.;NUMBER_PumpActionsDuringDescentToPark_COUNT;number of pump actions between the crossing of the gap threshold and the end of descent at park pressure +226;18;Date de début de dérive (JJ du mois seulement);CLOCK_EndDescentToPark_DD;time when park pressure is reached +109;19;Nombre d'entrée dans la consigne.;NUMBER_DescentToParkEntriesInParkMargin_COUNT;descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db) +110;20;Nombre de repositionnements en dérive.;NUMBER_RepositionsDuringPark_COUNT;number of times the float readjusts its buoyancy during park phase - using either the pump or EV +111;23;Nombre de coups d'EV en dérive à Pdérive.;NUMBER_ValveActionsDuringPark_COUNT;number of valve actions during park phase +112;24;Nombre de coups de pompe en dérive à Pdérive.;NUMBER_PumpActionsDuringPark_COUNT;number of pump actions while at park depth +113;25;Heure début descente profil.;CLOCK_StartDescentToProfile_HHMM;Number of minutes elapsed in the day at the beginning of the descent to profile depth. +114;26;Heure fin descente profil.;CLOCK_EndDescentToProfile_HHMM;Number of minutes elapsed in the day at the end of the descent to profile depth. +115;27;Nombre de coups EV descente profil.;NUMBER_ValveActionsDuringDescentToProfile_COUNT;number of valve actions during descent to start profile pressure +116;28;Nombre de coups de pompe descente profil.;NUMBER_PumpActionsDuringDescentToProfile_COUNT;number of pump actions during descent to start profile pressure +117;30;Nombre d'entrées consigne en dérive en attente profil.;NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) +118;31;Nombre de repositionnements en dérive en attente profil.;NUMBER_RepositionsAtProfileDepth_COUNT;at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV +119;32;Nombre de coups EV en dérive en attente profil.;NUMBER_ValveActionsDuringProfileDrift_COUNT;number of valve actions while drifting at profile depth +120;33;Nombre de coups de pompe en dérive en attente profil.;NUMBER_PumpActionsDuringProfileDrift_COUNT;Number of pump actions during drift at profile depth. +121;36;Heure de début de remontée.;CLOCK_StartAscentToSurface_HHMM;Number of minutes elapsed in the day at the beginning of the ascent to the surface. +122;37;Heure de fin de remontée.;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle +123;38;Nombre de coups de pompe en remontée.;NUMBER_PumpActionsDuringAscentToSurface_COUNT;number of pump actions between start and end of ascent +124;45;Offset de pression.;PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar;Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected +125;46;Vide interne en surface.;PRESSURE_InternalVacuumAtSurface_mbar;Surface internal pressure +126;47;Tension batterie.;VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth +127;48;Erreur RTC.;FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK +128;49;Compteur de cohérence (nombre d’erreurs de la CTD).;NUMBER_CTDError_COUNT;CTD error count +129;50;Etat du capteur DO (0 si OK, 1 sinon).;FLAG_OptodeStatus_NUMBER;Flag indicating the status of the Optode (see manual) +1000;59;GPS valid fix ?;TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). +130;60;Durée de la session GPS.;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile +131;61;Nombre de relances effectuées lors de la session GPS.;NUMBER_RetriesForGPSAcquisition_COUNT;Number of times the GPS had to try to get a valid fix +132;62;Nombre de télécommandes reçues (pour le cycle en cours).;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. +133;63;Nombre de télécommandes rejetées (pour le cycle en cours).;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). +134;65;Date de début de fin de vie: HH;CLOCK_EOLStart_YYYYMMDDHHMMSS;Clock time when End of Life mode starts +135;71;Durée de la précédente session iridium.;TIME_PreviousIridiumSession_seconds;Duration on the previous Iridium session +136;72;Nombre de SBD recus lors de la précédente session Iridium.;NUMBER_IridiumMessagesReceivedPreviousSession_COUNT;Number of Incoming Iridium Messages Received during previous session +137;73;Nombre de SBD émis lors de la précédente session Iridium.;NUMBER_IridiumMessagesSentPreviousSession_COUNT;Number of Incoming Iridium Messages Sent during previous session 200;2;Nombre de paquets de type 1 ou 8 - CTDO descente.;NUMBER_DescentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). -201;2;Nombre de paquets de type 2 ou 9 - CTDO dérive.;NUMBER_ParkIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the drift at park depth. -202;2;Nombre de paquets de type 3 ou 10 - CTDO remontée.;NUMBER_AscentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface. -203;2;Nombre de tranches zone surface – descente.;NUMBER_DescendingProfileReductionUpperPart_COUNT;Descending profile reduction Number of slices in shallow zone - NTS -204;2;Nombre de tranches zone fond - descente.;NUMBER_DescendingProfileReductionLowerPart_COUNT;Descending profile reduction Number of slices in deep zone - NTF -205;2;Nombre de mesures en dérive à l’immersion de parking.;NUMBER_ParkCTDOSamplesInternal_COUNT;Park measurements - Internal counter -206;2;Nombre de tranches zone surface – remontée.;NUMBER_AscendingProfileReductionUpperPart_COUNT;Ascending profile reduction Number of slices in shallow zone - NTS -207;2;Nombre de tranches zone fond - remontée.;NUMBER_AscendingProfileReductionLowerPart_COUNT;Ascending profile reduction Number of slices in deep zone - NTF -221;2;Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant);PRES_LastAscentPumpedRawSample_dbar;Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars). -208;2;Nombre d'échouages détectés pendant le cycle.;FLAG_Grounded_NUMBER;grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded -209;2;Jour flotteur du premier échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). -210;2;Heure du premier échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded -227;2;Phase 1er échouage;FLAG_FirstGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type -211;2;Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.;NUMBER_ValveActionsForFirstGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the first grounding event -228;2;Jour flotteur du 2ième échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). -229;2;Heure du 2ième échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded -230;2;Phase 2ième échouage;FLAG_SecondGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type -231;2;Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2;NUMBER_ValveActionsForSecondGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the second grounding event -212;2;Nombre de remontées d'urgence.;NUMBER_EmergencyAscents_COUNT;Number of Emergency ascents - Internal count -213;2;Heure de la première remontée d'urgence.;CLOCK_TimeOfFirstEmergencyAscent_HHMM;Number of minutes elapsed in the day of the float first emergency ascent. -214;2;Pression de la première remontée d'urgence.;PRES_FirstEmergencyAscent_dbar;Pressure that triggered the first emergency ascent -215;2;Nombre de coups de pompe liés à la première remontée d’urgence.;NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT;Emergency ascent - pump actions at emergency depth -216;2;Jour de première remontée d’urgence.;CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). -217;2;Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.;NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT;number of pump actions needed to leave the sea bottom when grounded at profile pressure -218;2;Vitesse au moment du premier échouage.;SPEED_FirstGrounding_mm/s;Vertical speed during the first grounding -219;2;Vide interne au fond en début de remontée.;PRESSURE_InternalVacuumProfileStart_mbar;Internal tube pressure [mbar] in profile depth -220;2;Date du dernier reset flotteur.;CLOCK_LastReset_YYYYMMDDHHMMSS;Clock time of the last reset of the float -232;2;Insulation voltage.;VOLTAGE_AcrossInsulation_mV;Insulation voltage measured between 2 sub-parts of the float +201;3;Nombre de paquets de type 2 ou 9 - CTDO dérive.;NUMBER_ParkIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the drift at park depth. +202;4;Nombre de paquets de type 3 ou 10 - CTDO remontée.;NUMBER_AscentIridiumPackets_COUNT;Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface. +203;5;Nombre de tranches zone surface – descente.;NUMBER_DescendingProfileReductionUpperPart_COUNT;Descending profile reduction Number of slices in shallow zone - NTS +204;6;Nombre de tranches zone fond - descente.;NUMBER_DescendingProfileReductionLowerPart_COUNT;Descending profile reduction Number of slices in deep zone - NTF +205;7;Nombre de mesures en dérive à l’immersion de parking.;NUMBER_ParkCTDOSamplesInternal_COUNT;Park measurements - Internal counter +206;8;Nombre de tranches zone surface – remontée.;NUMBER_AscendingProfileReductionUpperPart_COUNT;Ascending profile reduction Number of slices in shallow zone - NTS +207;9;Nombre de tranches zone fond - remontée.;NUMBER_AscendingProfileReductionLowerPart_COUNT;Ascending profile reduction Number of slices in deep zone - NTF +221;10;Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant);PRES_LastAscentPumpedRawSample_dbar;Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars). +208;16;Nombre d'échouages détectés pendant le cycle.;FLAG_Grounded_NUMBER;grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded +209;18;Jour flotteur du premier échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). +210;19;Heure du premier échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded +227;20;Phase 1er échouage;FLAG_FirstGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type +211;21;Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.;NUMBER_ValveActionsForFirstGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the first grounding event +228;23;Jour flotteur du 2ième échouage.;CLOCK_TimeGrounded_FloatDay;Day number when the float grounds for the first time (relative to mission start day). +229;24;Heure du 2ième échouage.;CLOCK_TimeGrounded_HHMM;time the float grounded +230;25;Phase 2ième échouage;FLAG_SecondGroundingCyclePhase_NUMBER;Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type +231;26;Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2;NUMBER_ValveActionsForSecondGroundingDetection_COUNT;Number of valve actions done at constant pressure to set the grounded flag for the second grounding event +212;27;Nombre de remontées d'urgence.;NUMBER_EmergencyAscents_COUNT;Number of Emergency ascents - Internal count +213;28;Heure de la première remontée d'urgence.;CLOCK_TimeOfFirstEmergencyAscent_HHMM;Number of minutes elapsed in the day of the float first emergency ascent. +214;29;Pression de la première remontée d'urgence.;PRES_FirstEmergencyAscent_dbar;Pressure that triggered the first emergency ascent +215;30;Nombre de coups de pompe liés à la première remontée d’urgence.;NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT;Emergency ascent - pump actions at emergency depth +216;31;Jour de première remontée d’urgence.;CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). +217;32;Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.;NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT;number of pump actions needed to leave the sea bottom when grounded at profile pressure +218;33;Vitesse au moment du premier échouage.;SPEED_FirstGrounding_mm/s;Vertical speed during the first grounding +219;34;Vide interne au fond en début de remontée.;PRESSURE_InternalVacuumProfileStart_mbar;Internal tube pressure [mbar] in profile depth +220;35;Date du dernier reset flotteur.;CLOCK_LastReset_YYYYMMDDHHMMSS;Clock time of the last reset of the float +232;41;Insulation voltage;VOLTAGE_AcrossInsulation_mV;Insulation voltage measured between 2 sub-parts of the float +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;Number of hydraulic packets received;TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit hydraulic data recorded during the cycle. +1005;-1;Number of tech #1 packets received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1006;-1;Number of tech #2 packets received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1007;-1;Number of parameter packets received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_203.json b/decArgo_soft/config/_techParamNames/_tech_param_name_203.json index c6f890a6..a92e0a35 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_203.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_203.json @@ -2,7 +2,7 @@ "TECH_PARAM_1" : { "TECH_PARAM_DEC_ID" : "224", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Date de début de cycle : JJ", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_YYYYMMDD", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -10,7 +10,7 @@ "TECH_PARAM_2" : { "TECH_PARAM_DEC_ID" : "100", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Jour relatif de début de cycle.", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the beginning of buoyancy reduction (relative to mission start day)." @@ -18,7 +18,7 @@ "TECH_PARAM_3" : { "TECH_PARAM_DEC_ID" : "225", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Heure de début cycle (nombre de minutes dans le jour courant). (BUOYANCY_REDUCTION_START_TIME).", "TECH_PARAM_NAME" : "CLOCK_InitialValveActionDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Date of the beginning of buoyancy reduction (relative to mission start day)." @@ -26,7 +26,7 @@ "TECH_PARAM_4" : { "TECH_PARAM_DEC_ID" : "101", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Durée de l’activation forfaitaire de l’EV lors de la réduction d’émergence.", "TECH_PARAM_NAME" : "TIME_ValveActionsAtSurface_seconds", "TECH_PARAM_DESCRIPTION" : "Duration of the basic valve actions." @@ -34,7 +34,7 @@ "TECH_PARAM_5" : { "TECH_PARAM_DEC_ID" : "102", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en surface.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsAtSurfaceDuringDescent_COUNT", "TECH_PARAM_DESCRIPTION" : "number of solenoid valve actions at the surface until the crossing of the GAP threshold" @@ -42,7 +42,7 @@ "TECH_PARAM_6" : { "TECH_PARAM_DEC_ID" : "103", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Flag échouage en surface .", "TECH_PARAM_NAME" : "FLAG_Beached_NUMBER", "TECH_PARAM_DESCRIPTION" : "is the float beached? - could be logical" @@ -50,7 +50,7 @@ "TECH_PARAM_7" : { "TECH_PARAM_DEC_ID" : "104", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "11", "TECH_PARAM_MSG_LABEL" : "Heure de début de descente.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to parking depth." @@ -58,7 +58,7 @@ "TECH_PARAM_8" : { "TECH_PARAM_DEC_ID" : "105", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "12", "TECH_PARAM_MSG_LABEL" : "Heure de première stabilisation.", "TECH_PARAM_NAME" : "CLOCK_InitialStabilizationDuringDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day when the float first stabilizes during descent to parking depth." @@ -66,7 +66,7 @@ "TECH_PARAM_9" : { "TECH_PARAM_DEC_ID" : "106", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "13", "TECH_PARAM_MSG_LABEL" : "Heure de fin de descente.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to parking depth." @@ -74,7 +74,7 @@ "TECH_PARAM_10" : { "TECH_PARAM_DEC_ID" : "107", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "14", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'électrovanne en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -82,7 +82,7 @@ "TECH_PARAM_11" : { "TECH_PARAM_DEC_ID" : "108", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "15", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en plongée vers Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between the crossing of the gap threshold and the end of descent at park pressure" @@ -90,7 +90,7 @@ "TECH_PARAM_12" : { "TECH_PARAM_DEC_ID" : "226", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Date de début de dérive (JJ du mois seulement)", "TECH_PARAM_NAME" : "CLOCK_EndDescentToPark_DD", "TECH_PARAM_DESCRIPTION" : "time when park pressure is reached" @@ -98,7 +98,7 @@ "TECH_PARAM_13" : { "TECH_PARAM_DEC_ID" : "109", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrée dans la consigne.", "TECH_PARAM_NAME" : "NUMBER_DescentToParkEntriesInParkMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to park pressure: number of entries in margin around park pressure target - specifically, how many times the float enters the band of pressure surrounding the target park pressure (generally +/- 30db)" @@ -106,7 +106,7 @@ "TECH_PARAM_14" : { "TECH_PARAM_DEC_ID" : "110", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive.", "TECH_PARAM_NAME" : "NUMBER_RepositionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of times the float readjusts its buoyancy during park phase - using either the pump or EV" @@ -114,7 +114,7 @@ "TECH_PARAM_15" : { "TECH_PARAM_DEC_ID" : "111", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Nombre de coups d'EV en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during park phase" @@ -122,7 +122,7 @@ "TECH_PARAM_16" : { "TECH_PARAM_DEC_ID" : "112", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive à Pdérive.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringPark_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions while at park depth" @@ -130,7 +130,7 @@ "TECH_PARAM_17" : { "TECH_PARAM_DEC_ID" : "113", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Heure début descente profil.", "TECH_PARAM_NAME" : "CLOCK_StartDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the descent to profile depth." @@ -138,7 +138,7 @@ "TECH_PARAM_18" : { "TECH_PARAM_DEC_ID" : "114", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Heure fin descente profil.", "TECH_PARAM_NAME" : "CLOCK_EndDescentToProfile_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the end of the descent to profile depth." @@ -146,7 +146,7 @@ "TECH_PARAM_19" : { "TECH_PARAM_DEC_ID" : "115", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV descente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions during descent to start profile pressure" @@ -154,7 +154,7 @@ "TECH_PARAM_20" : { "TECH_PARAM_DEC_ID" : "116", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe descente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringDescentToProfile_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions during descent to start profile pressure" @@ -162,7 +162,7 @@ "TECH_PARAM_21" : { "TECH_PARAM_DEC_ID" : "117", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre d'entrées consigne en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" @@ -170,7 +170,7 @@ "TECH_PARAM_22" : { "TECH_PARAM_DEC_ID" : "118", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Nombre de repositionnements en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_RepositionsAtProfileDepth_COUNT", "TECH_PARAM_DESCRIPTION" : "at profile pressure stand-by, number of times the float readjusts its buoyancy - using either the pump or EV" @@ -178,7 +178,7 @@ "TECH_PARAM_23" : { "TECH_PARAM_DEC_ID" : "119", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups EV en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "number of valve actions while drifting at profile depth" @@ -186,7 +186,7 @@ "TECH_PARAM_24" : { "TECH_PARAM_DEC_ID" : "120", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en dérive en attente profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringProfileDrift_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions during drift at profile depth." @@ -194,7 +194,7 @@ "TECH_PARAM_25" : { "TECH_PARAM_DEC_ID" : "121", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "36", "TECH_PARAM_MSG_LABEL" : "Heure de début de remontée.", "TECH_PARAM_NAME" : "CLOCK_StartAscentToSurface_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day at the beginning of the ascent to the surface." @@ -202,7 +202,7 @@ "TECH_PARAM_26" : { "TECH_PARAM_DEC_ID" : "122", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "37", "TECH_PARAM_MSG_LABEL" : "Heure de fin de remontée.", "TECH_PARAM_NAME" : "CLOCK_TransmissionStart_HHMM", "TECH_PARAM_DESCRIPTION" : "time of the first transmission for this cycle" @@ -210,7 +210,7 @@ "TECH_PARAM_27" : { "TECH_PARAM_DEC_ID" : "123", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "38", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe en remontée.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsDuringAscentToSurface_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions between start and end of ascent " @@ -218,7 +218,7 @@ "TECH_PARAM_28" : { "TECH_PARAM_DEC_ID" : "124", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "45", "TECH_PARAM_MSG_LABEL" : "Offset de pression.", "TECH_PARAM_NAME" : "PRES_SurfaceOffsetCorrectedNotResetNegative_1cBarResolution_dbar", "TECH_PARAM_DESCRIPTION" : "Surface pressure recorded just before the previous descent but data is corrected on board the float. Note: cumulative NEGATIVE offset (real offset * -1) but no further correction required. Autocorrected" @@ -226,7 +226,7 @@ "TECH_PARAM_29" : { "TECH_PARAM_DEC_ID" : "125", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "46", "TECH_PARAM_MSG_LABEL" : "Vide interne en surface.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumAtSurface_mbar", "TECH_PARAM_DESCRIPTION" : "Surface internal pressure" @@ -234,7 +234,7 @@ "TECH_PARAM_30" : { "TECH_PARAM_DEC_ID" : "126", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "47", "TECH_PARAM_MSG_LABEL" : "Tension batterie.", "TECH_PARAM_NAME" : "VOLTAGE_BatteryPumpStartProfile_volts", "TECH_PARAM_DESCRIPTION" : "Pump battery voltage (volts) at depth" @@ -242,7 +242,7 @@ "TECH_PARAM_31" : { "TECH_PARAM_DEC_ID" : "127", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "48", "TECH_PARAM_MSG_LABEL" : "Erreur RTC.", "TECH_PARAM_NAME" : "FLAG_RTCStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "real time clock status - 1= OK, 0=not OK" @@ -250,7 +250,7 @@ "TECH_PARAM_32" : { "TECH_PARAM_DEC_ID" : "128", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "49", "TECH_PARAM_MSG_LABEL" : "Compteur de cohérence (nombre d’erreurs de la CTD).", "TECH_PARAM_NAME" : "NUMBER_CTDError_COUNT", "TECH_PARAM_DESCRIPTION" : "CTD error count" @@ -258,76 +258,84 @@ "TECH_PARAM_33" : { "TECH_PARAM_DEC_ID" : "129", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "50", "TECH_PARAM_MSG_LABEL" : "Etat du capteur DO (0 si OK, 1 sinon).", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the Optode (see manual)" }, "TECH_PARAM_34" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "59", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix ?", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "130", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "60", "TECH_PARAM_MSG_LABEL" : "Durée de la session GPS.", "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "131", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "61", "TECH_PARAM_MSG_LABEL" : "Nombre de relances effectuées lors de la session GPS.", "TECH_PARAM_NAME" : "NUMBER_RetriesForGPSAcquisition_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of times the GPS had to try to get a valid fix" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "132", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "62", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes reçues (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "133", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "63", "TECH_PARAM_MSG_LABEL" : "Nombre de télécommandes rejetées (pour le cycle en cours).", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "134", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "65", "TECH_PARAM_MSG_LABEL" : "Date de début de fin de vie: HH", "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "135", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "71", "TECH_PARAM_MSG_LABEL" : "Durée de la précédente session iridium.", "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "136", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "72", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD recus lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "137", - "TECH_PARAM_MSG_ID" : "1", + "TECH_PARAM_MSG_ID" : "73", "TECH_PARAM_MSG_LABEL" : "Nombre de SBD émis lors de la précédente session Iridium.", "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "2", @@ -335,220 +343,276 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "201", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "3", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 2 ou 9 - CTDO dérive.", "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "202", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "4", "TECH_PARAM_MSG_LABEL" : "Nombre de paquets de type 3 ou 10 - CTDO remontée.", "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "203", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "5", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "204", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "6", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - descente.", "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "205", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "7", "TECH_PARAM_MSG_LABEL" : "Nombre de mesures en dérive à l’immersion de parking.", "TECH_PARAM_NAME" : "NUMBER_ParkCTDOSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "206", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "8", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone surface – remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "207", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "9", "TECH_PARAM_MSG_LABEL" : "Nombre de tranches zone fond - remontée.", "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "221", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "10", "TECH_PARAM_MSG_LABEL" : "Pression du « point de subsurface » (dernier point de mesure « brut » pompé lors du profil ascendant)", "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "208", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "16", "TECH_PARAM_MSG_LABEL" : "Nombre d'échouages détectés pendant le cycle.", "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "209", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "18", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "210", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "19", "TECH_PARAM_MSG_LABEL" : "Heure du premier échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "227", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "20", "TECH_PARAM_MSG_LABEL" : "Phase 1er échouage", "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "211", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "21", "TECH_PARAM_MSG_LABEL" : "Nombre d'ouvertures EV à pression constante pour déclarer le premier échouage.", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "228", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "23", "TECH_PARAM_MSG_LABEL" : "Jour flotteur du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "229", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "24", "TECH_PARAM_MSG_LABEL" : "Heure du 2ième échouage.", "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "230", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "25", "TECH_PARAM_MSG_LABEL" : "Phase 2ième échouage", "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "231", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "26", "TECH_PARAM_MSG_LABEL" : "Nb d'ouvertures EV à pression constante pour déclarer l'échouage n°2", "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "212", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "27", "TECH_PARAM_MSG_LABEL" : "Nombre de remontées d'urgence.", "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "213", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "28", "TECH_PARAM_MSG_LABEL" : "Heure de la première remontée d'urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "214", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "29", "TECH_PARAM_MSG_LABEL" : "Pression de la première remontée d'urgence.", "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "215", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "30", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe liés à la première remontée d’urgence.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "216", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "31", "TECH_PARAM_MSG_LABEL" : "Jour de première remontée d’urgence.", "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "217", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "32", "TECH_PARAM_MSG_LABEL" : "Nombre de coups de pompe avant décollage effectif quand grounded à la pression de profil.", "TECH_PARAM_NAME" : "NUMBER_PumpActionsWhenGroundedAtProfilePressure_COUNT", "TECH_PARAM_DESCRIPTION" : "number of pump actions needed to leave the sea bottom when grounded at profile pressure" }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "218", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "33", "TECH_PARAM_MSG_LABEL" : "Vitesse au moment du premier échouage.", "TECH_PARAM_NAME" : "SPEED_FirstGrounding_mm/s", "TECH_PARAM_DESCRIPTION" : "Vertical speed during the first grounding" }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "219", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "34", "TECH_PARAM_MSG_LABEL" : "Vide interne au fond en début de remontée.", "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "220", - "TECH_PARAM_MSG_ID" : "2", + "TECH_PARAM_MSG_ID" : "35", "TECH_PARAM_MSG_LABEL" : "Date du dernier reset flotteur.", "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" }, - "TECH_PARAM_69" : + "TECH_PARAM_70" : { "TECH_PARAM_DEC_ID" : "232", - "TECH_PARAM_MSG_ID" : "2", - "TECH_PARAM_MSG_LABEL" : "Insulation voltage.", + "TECH_PARAM_MSG_ID" : "41", + "TECH_PARAM_MSG_LABEL" : "Insulation voltage", "TECH_PARAM_NAME" : "VOLTAGE_AcrossInsulation_mV", "TECH_PARAM_DESCRIPTION" : "Insulation voltage measured between 2 sub-parts of the float" + }, + "TECH_PARAM_71" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_72" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_73" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_74" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_75" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_76" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_77" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_204.json b/decArgo_soft/config/_techParamNames/_tech_param_name_204.json index bdcee6bc..692efb64 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_204.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_204.json @@ -366,5 +366,53 @@ "TECH_PARAM_MSG_LABEL" : "Remote control rejected", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." + }, + "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_49" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_205.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_205.csv index 04b1ae34..18e56ebb 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_205.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_205.csv @@ -45,3 +45,9 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 142;59;1st Emergency ascent relative day (to 1st cycle day);CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). 143;60;Remote control received;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. 144;61;Remote control rejected;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). +1000;70;GPS valid fix (1 = valid, 0 = not valid);TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;Number of tech packets received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1005;-1;Number of parameter packets received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_205.json b/decArgo_soft/config/_techParamNames/_tech_param_name_205.json index bdcee6bc..692efb64 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_205.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_205.json @@ -366,5 +366,53 @@ "TECH_PARAM_MSG_LABEL" : "Remote control rejected", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." + }, + "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_49" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_206.json b/decArgo_soft/config/_techParamNames/_tech_param_name_206.json index bdcee6bc..692efb64 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_206.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_206.json @@ -366,5 +366,53 @@ "TECH_PARAM_MSG_LABEL" : "Remote control rejected", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." + }, + "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_49" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_207.json b/decArgo_soft/config/_techParamNames/_tech_param_name_207.json index bdcee6bc..692efb64 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_207.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_207.json @@ -366,5 +366,53 @@ "TECH_PARAM_MSG_LABEL" : "Remote control rejected", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." + }, + "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_49" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_208.json b/decArgo_soft/config/_techParamNames/_tech_param_name_208.json index bdcee6bc..692efb64 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_208.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_208.json @@ -366,5 +366,53 @@ "TECH_PARAM_MSG_LABEL" : "Remote control rejected", "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." + }, + "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_49" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_209.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_209.csv index eaf7f7d3..de3bbf8b 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_209.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_209.csv @@ -45,5 +45,11 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 142;59;1st Emergency ascent relative day (to 1st cycle day);CLOCK_TimeOfFirstEmergencyAscent_FloatDay;Day number of the float first emergency ascent (relative to mission start day). 143;60;Remote control received;FLAG_RemoteControlMessageOK_COUNT;Number of remote control successfully considered. 144;61;Remote control rejected;FLAG_RemoteControlMessageKO_COUNT;Number of remote control rejected by the float (due to out of range value or remote control syntax error). +1000;70;GPS valid fix (1 = valid, 0 = not valid);TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). 148;71;SBE optode status (0:Ok, 1:Ko (dialog problem));FLAG_Optode2Status_LOGICAL;Sensor status - 1= OK, 0=not OK 149;71;Aanderaa optode status (0:Ok, 1:Ko (dialog problem));FLAG_OptodeStatus_LOGICAL;Sensor status - 1= OK, 0=not OK +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;Number of tech packets received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1005;-1;Number of parameter packets received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_209.json b/decArgo_soft/config/_techParamNames/_tech_param_name_209.json index 5fa610c7..b05f7b58 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_209.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_209.json @@ -368,6 +368,14 @@ "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, "TECH_PARAM_47" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "70", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "148", "TECH_PARAM_MSG_ID" : "71", @@ -375,12 +383,52 @@ "TECH_PARAM_NAME" : "FLAG_Optode2Status_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "149", "TECH_PARAM_MSG_ID" : "71", "TECH_PARAM_MSG_LABEL" : "Aanderaa optode status (0:Ok, 1:Ko (dialog problem))", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_50" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_51" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_210.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_210.csv index 630f6a85..679340a7 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_210.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_210.csv @@ -31,6 +31,7 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 129;45;Battery voltage drop at Pmax, pump ON (with regards to Unom = 15.0 V, in dV);VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth 130;46;RTC state indicator (normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 131;47;Coherence problem counter;NUMBER_CTDError_COUNT;CTD error count +1000;57;GPS valid fix (1 = valid, 0 = not valid);TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). 132;58;GPS session duration;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile 133;60;Pump duration (buoyancy retrieve for GPS acquisition);TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ;duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy 134;61;Antenna status (0=DontKnow 1=Ok 2=Short 3=Open);FLAG_AntennaStatus_NUMBER;Flag indicating the status of the antenna (see manual) @@ -78,3 +79,12 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 240;55;Positive buoyancy at deployment;FLAG_StatusBladderStateAtLaunch_NUMBER;External bladder state at deployment (0: float stay at surface, 1: heavy float at deployment) 241;56;CTD status (0 : no error, 1: fast pressure default time-out, 2: fast pressure broken frame, 16: CTD default time-out, 32: CTD broken frame);FLAG_CTDStatus_NUMBER;Flag indicating the status of the CTD (see manual) (could be reported as hex) 242;57;Float phase during CTD default detection;FLAG_CTDErrorCyclePhase_NUMBER;Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;"Number of ""CTD near surface"" packets received";TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT;"Number of Iridium packets received to transmit sensor data collected during the ""near surface measurement"" phase." +1005;-1;"Number of ""CTD in air"" packets received";TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT;"Number of Iridium packets received to transmit sensor data collected during the ""in air measurement"" phase." +1006;-1;Number of hydraulic packets received;TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit hydraulic data recorded during the cycle. +1007;-1;Number of tech #1 packets received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1008;-1;Number of tech #2 packets received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1009;-1;Number of parameter packets received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_210.json b/decArgo_soft/config/_techParamNames/_tech_param_name_210.json index ab3d434f..8b8ae278 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_210.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_210.json @@ -256,6 +256,14 @@ "TECH_PARAM_DESCRIPTION" : "CTD error count" }, "TECH_PARAM_33" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "57", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_34" : { "TECH_PARAM_DEC_ID" : "132", "TECH_PARAM_MSG_ID" : "58", @@ -263,7 +271,7 @@ "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_34" : + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "133", "TECH_PARAM_MSG_ID" : "60", @@ -271,7 +279,7 @@ "TECH_PARAM_NAME" : "TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ", "TECH_PARAM_DESCRIPTION" : "duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "134", "TECH_PARAM_MSG_ID" : "61", @@ -279,7 +287,7 @@ "TECH_PARAM_NAME" : "FLAG_AntennaStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the antenna (see manual)" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "135", "TECH_PARAM_MSG_ID" : "63", @@ -287,7 +295,7 @@ "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "3", @@ -295,7 +303,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "201", "TECH_PARAM_MSG_ID" : "4", @@ -303,7 +311,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "202", "TECH_PARAM_MSG_ID" : "5", @@ -311,7 +319,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "203", "TECH_PARAM_MSG_ID" : "6", @@ -319,7 +327,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the near surface measurement phase." }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "204", "TECH_PARAM_MSG_ID" : "7", @@ -327,7 +335,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the in air measurement phase." }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "205", "TECH_PARAM_MSG_ID" : "8", @@ -335,7 +343,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "206", "TECH_PARAM_MSG_ID" : "9", @@ -343,7 +351,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "207", "TECH_PARAM_MSG_ID" : "10", @@ -351,7 +359,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkCTDSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "208", "TECH_PARAM_MSG_ID" : "11", @@ -359,7 +367,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "209", "TECH_PARAM_MSG_ID" : "12", @@ -367,7 +375,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "210", "TECH_PARAM_MSG_ID" : "13", @@ -375,7 +383,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "Near surface measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "211", "TECH_PARAM_MSG_ID" : "14", @@ -383,7 +391,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "In air measurements - Internal counter" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "212", "TECH_PARAM_MSG_ID" : "15", @@ -391,7 +399,7 @@ "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "213", "TECH_PARAM_MSG_ID" : "21", @@ -399,7 +407,7 @@ "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "214", "TECH_PARAM_MSG_ID" : "23", @@ -407,7 +415,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "215", "TECH_PARAM_MSG_ID" : "24", @@ -415,7 +423,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "216", "TECH_PARAM_MSG_ID" : "25", @@ -423,7 +431,7 @@ "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "217", "TECH_PARAM_MSG_ID" : "26", @@ -431,7 +439,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "218", "TECH_PARAM_MSG_ID" : "28", @@ -439,7 +447,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "219", "TECH_PARAM_MSG_ID" : "29", @@ -447,7 +455,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "220", "TECH_PARAM_MSG_ID" : "30", @@ -455,7 +463,7 @@ "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "221", "TECH_PARAM_MSG_ID" : "31", @@ -463,7 +471,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "222", "TECH_PARAM_MSG_ID" : "32", @@ -471,7 +479,7 @@ "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "223", "TECH_PARAM_MSG_ID" : "33", @@ -479,7 +487,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "224", "TECH_PARAM_MSG_ID" : "34", @@ -487,7 +495,7 @@ "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "225", "TECH_PARAM_MSG_ID" : "35", @@ -495,7 +503,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "226", "TECH_PARAM_MSG_ID" : "36", @@ -503,7 +511,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "227", "TECH_PARAM_MSG_ID" : "37", @@ -511,7 +519,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "228", "TECH_PARAM_MSG_ID" : "38", @@ -519,7 +527,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "229", "TECH_PARAM_MSG_ID" : "39", @@ -527,7 +535,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands successfully considered." }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "230", "TECH_PARAM_MSG_ID" : "40", @@ -535,7 +543,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands rejected by the float." }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "231", "TECH_PARAM_MSG_ID" : "41", @@ -543,7 +551,7 @@ "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_69" : + "TECH_PARAM_70" : { "TECH_PARAM_DEC_ID" : "232", "TECH_PARAM_MSG_ID" : "42", @@ -551,7 +559,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_70" : + "TECH_PARAM_71" : { "TECH_PARAM_DEC_ID" : "233", "TECH_PARAM_MSG_ID" : "43", @@ -559,7 +567,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_71" : + "TECH_PARAM_72" : { "TECH_PARAM_DEC_ID" : "234", "TECH_PARAM_MSG_ID" : "44", @@ -567,7 +575,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsToStartAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions needed to start the ascent." }, - "TECH_PARAM_72" : + "TECH_PARAM_73" : { "TECH_PARAM_DEC_ID" : "235", "TECH_PARAM_MSG_ID" : "45", @@ -575,7 +583,7 @@ "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_73" : + "TECH_PARAM_74" : { "TECH_PARAM_DEC_ID" : "236", "TECH_PARAM_MSG_ID" : "46", @@ -583,7 +591,7 @@ "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" }, - "TECH_PARAM_74" : + "TECH_PARAM_75" : { "TECH_PARAM_DEC_ID" : "237", "TECH_PARAM_MSG_ID" : "52", @@ -591,7 +599,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Auto-test is performed at the beginning of the mission: Flag 0 = Problem, 1 = OK" }, - "TECH_PARAM_75" : + "TECH_PARAM_76" : { "TECH_PARAM_DEC_ID" : "238", "TECH_PARAM_MSG_ID" : "53", @@ -599,7 +607,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_NUMBER", "TECH_PARAM_DESCRIPTION" : "Detailed auto-test for float hardware resulting in a detailed code for each tested sub-part (see manual)" }, - "TECH_PARAM_76" : + "TECH_PARAM_77" : { "TECH_PARAM_DEC_ID" : "239", "TECH_PARAM_MSG_ID" : "54", @@ -607,7 +615,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialMemoryIntegrityCheck_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Software check on the float memory contents (0 if problems were found and 1 if no problem occured)" }, - "TECH_PARAM_77" : + "TECH_PARAM_78" : { "TECH_PARAM_DEC_ID" : "240", "TECH_PARAM_MSG_ID" : "55", @@ -615,7 +623,7 @@ "TECH_PARAM_NAME" : "FLAG_StatusBladderStateAtLaunch_NUMBER", "TECH_PARAM_DESCRIPTION" : "External bladder state at deployment (0: float stay at surface, 1: heavy float at deployment)" }, - "TECH_PARAM_78" : + "TECH_PARAM_79" : { "TECH_PARAM_DEC_ID" : "241", "TECH_PARAM_MSG_ID" : "56", @@ -623,12 +631,84 @@ "TECH_PARAM_NAME" : "FLAG_CTDStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the CTD (see manual) (could be reported as hex)" }, - "TECH_PARAM_79" : + "TECH_PARAM_80" : { "TECH_PARAM_DEC_ID" : "242", "TECH_PARAM_MSG_ID" : "57", "TECH_PARAM_MSG_LABEL" : "Float phase during CTD default detection", "TECH_PARAM_NAME" : "FLAG_CTDErrorCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type" + }, + "TECH_PARAM_81" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_82" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_83" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD near surface packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the near surface measurement phase." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD in air packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the in air measurement phase." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_87" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_88" : + { + "TECH_PARAM_DEC_ID" : "1008", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_89" : + { + "TECH_PARAM_DEC_ID" : "1009", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_211.json b/decArgo_soft/config/_techParamNames/_tech_param_name_211.json index ab3d434f..8b8ae278 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_211.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_211.json @@ -256,6 +256,14 @@ "TECH_PARAM_DESCRIPTION" : "CTD error count" }, "TECH_PARAM_33" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "57", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_34" : { "TECH_PARAM_DEC_ID" : "132", "TECH_PARAM_MSG_ID" : "58", @@ -263,7 +271,7 @@ "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_34" : + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "133", "TECH_PARAM_MSG_ID" : "60", @@ -271,7 +279,7 @@ "TECH_PARAM_NAME" : "TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ", "TECH_PARAM_DESCRIPTION" : "duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "134", "TECH_PARAM_MSG_ID" : "61", @@ -279,7 +287,7 @@ "TECH_PARAM_NAME" : "FLAG_AntennaStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the antenna (see manual)" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "135", "TECH_PARAM_MSG_ID" : "63", @@ -287,7 +295,7 @@ "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "3", @@ -295,7 +303,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "201", "TECH_PARAM_MSG_ID" : "4", @@ -303,7 +311,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "202", "TECH_PARAM_MSG_ID" : "5", @@ -311,7 +319,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "203", "TECH_PARAM_MSG_ID" : "6", @@ -319,7 +327,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the near surface measurement phase." }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "204", "TECH_PARAM_MSG_ID" : "7", @@ -327,7 +335,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the in air measurement phase." }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "205", "TECH_PARAM_MSG_ID" : "8", @@ -335,7 +343,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "206", "TECH_PARAM_MSG_ID" : "9", @@ -343,7 +351,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "207", "TECH_PARAM_MSG_ID" : "10", @@ -351,7 +359,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkCTDSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "208", "TECH_PARAM_MSG_ID" : "11", @@ -359,7 +367,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "209", "TECH_PARAM_MSG_ID" : "12", @@ -367,7 +375,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "210", "TECH_PARAM_MSG_ID" : "13", @@ -375,7 +383,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "Near surface measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "211", "TECH_PARAM_MSG_ID" : "14", @@ -383,7 +391,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "In air measurements - Internal counter" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "212", "TECH_PARAM_MSG_ID" : "15", @@ -391,7 +399,7 @@ "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "213", "TECH_PARAM_MSG_ID" : "21", @@ -399,7 +407,7 @@ "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "214", "TECH_PARAM_MSG_ID" : "23", @@ -407,7 +415,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "215", "TECH_PARAM_MSG_ID" : "24", @@ -415,7 +423,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "216", "TECH_PARAM_MSG_ID" : "25", @@ -423,7 +431,7 @@ "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "217", "TECH_PARAM_MSG_ID" : "26", @@ -431,7 +439,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "218", "TECH_PARAM_MSG_ID" : "28", @@ -439,7 +447,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "219", "TECH_PARAM_MSG_ID" : "29", @@ -447,7 +455,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "220", "TECH_PARAM_MSG_ID" : "30", @@ -455,7 +463,7 @@ "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "221", "TECH_PARAM_MSG_ID" : "31", @@ -463,7 +471,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "222", "TECH_PARAM_MSG_ID" : "32", @@ -471,7 +479,7 @@ "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "223", "TECH_PARAM_MSG_ID" : "33", @@ -479,7 +487,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "224", "TECH_PARAM_MSG_ID" : "34", @@ -487,7 +495,7 @@ "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "225", "TECH_PARAM_MSG_ID" : "35", @@ -495,7 +503,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "226", "TECH_PARAM_MSG_ID" : "36", @@ -503,7 +511,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "227", "TECH_PARAM_MSG_ID" : "37", @@ -511,7 +519,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "228", "TECH_PARAM_MSG_ID" : "38", @@ -519,7 +527,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "229", "TECH_PARAM_MSG_ID" : "39", @@ -527,7 +535,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands successfully considered." }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "230", "TECH_PARAM_MSG_ID" : "40", @@ -535,7 +543,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands rejected by the float." }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "231", "TECH_PARAM_MSG_ID" : "41", @@ -543,7 +551,7 @@ "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_69" : + "TECH_PARAM_70" : { "TECH_PARAM_DEC_ID" : "232", "TECH_PARAM_MSG_ID" : "42", @@ -551,7 +559,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_70" : + "TECH_PARAM_71" : { "TECH_PARAM_DEC_ID" : "233", "TECH_PARAM_MSG_ID" : "43", @@ -559,7 +567,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_71" : + "TECH_PARAM_72" : { "TECH_PARAM_DEC_ID" : "234", "TECH_PARAM_MSG_ID" : "44", @@ -567,7 +575,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsToStartAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions needed to start the ascent." }, - "TECH_PARAM_72" : + "TECH_PARAM_73" : { "TECH_PARAM_DEC_ID" : "235", "TECH_PARAM_MSG_ID" : "45", @@ -575,7 +583,7 @@ "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_73" : + "TECH_PARAM_74" : { "TECH_PARAM_DEC_ID" : "236", "TECH_PARAM_MSG_ID" : "46", @@ -583,7 +591,7 @@ "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" }, - "TECH_PARAM_74" : + "TECH_PARAM_75" : { "TECH_PARAM_DEC_ID" : "237", "TECH_PARAM_MSG_ID" : "52", @@ -591,7 +599,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Auto-test is performed at the beginning of the mission: Flag 0 = Problem, 1 = OK" }, - "TECH_PARAM_75" : + "TECH_PARAM_76" : { "TECH_PARAM_DEC_ID" : "238", "TECH_PARAM_MSG_ID" : "53", @@ -599,7 +607,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_NUMBER", "TECH_PARAM_DESCRIPTION" : "Detailed auto-test for float hardware resulting in a detailed code for each tested sub-part (see manual)" }, - "TECH_PARAM_76" : + "TECH_PARAM_77" : { "TECH_PARAM_DEC_ID" : "239", "TECH_PARAM_MSG_ID" : "54", @@ -607,7 +615,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialMemoryIntegrityCheck_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Software check on the float memory contents (0 if problems were found and 1 if no problem occured)" }, - "TECH_PARAM_77" : + "TECH_PARAM_78" : { "TECH_PARAM_DEC_ID" : "240", "TECH_PARAM_MSG_ID" : "55", @@ -615,7 +623,7 @@ "TECH_PARAM_NAME" : "FLAG_StatusBladderStateAtLaunch_NUMBER", "TECH_PARAM_DESCRIPTION" : "External bladder state at deployment (0: float stay at surface, 1: heavy float at deployment)" }, - "TECH_PARAM_78" : + "TECH_PARAM_79" : { "TECH_PARAM_DEC_ID" : "241", "TECH_PARAM_MSG_ID" : "56", @@ -623,12 +631,84 @@ "TECH_PARAM_NAME" : "FLAG_CTDStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the CTD (see manual) (could be reported as hex)" }, - "TECH_PARAM_79" : + "TECH_PARAM_80" : { "TECH_PARAM_DEC_ID" : "242", "TECH_PARAM_MSG_ID" : "57", "TECH_PARAM_MSG_LABEL" : "Float phase during CTD default detection", "TECH_PARAM_NAME" : "FLAG_CTDErrorCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type" + }, + "TECH_PARAM_81" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_82" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_83" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD near surface packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the near surface measurement phase." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD in air packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the in air measurement phase." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_87" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_88" : + { + "TECH_PARAM_DEC_ID" : "1008", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_89" : + { + "TECH_PARAM_DEC_ID" : "1009", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_212.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_212.csv index 75a5cf36..44ee0f32 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_212.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_212.csv @@ -31,6 +31,7 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 129;45;Battery voltage drop at Pmax, pump ON (with regards to Unom = 15.0 V, in dV);VOLTAGE_BatteryPumpStartProfile_volts;Pump battery voltage (volts) at depth 130;46;RTC state indicator (normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 131;47;Coherence problem counter;NUMBER_CTDError_COUNT;CTD error count +1000;57;GPS valid fix (1 = valid, 0 = not valid);TECH_AUX_FLAG_GPSValidFix_LOGICAL;Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise). 132;58;GPS session duration;TIME_IridiumGPSFix_seconds;the number of seconds required to obtain a GPS fix for a profile 133;60;Pump duration (buoyancy retrieve for GPS acquisition);TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ;duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy 134;61;Antenna status (0=DontKnow 1=Ok 2=Short 3=Open);FLAG_AntennaStatus_NUMBER;Flag indicating the status of the antenna (see manual) @@ -79,3 +80,13 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 241;56;CTD status (0 : no error, 1: fast pressure default time-out, 2: fast pressure broken frame, 16: CTD default time-out, 32: CTD broken frame);FLAG_CTDStatus_NUMBER;Flag indicating the status of the CTD (see manual) (could be reported as hex) 242;57;Float phase during CTD default detection;FLAG_CTDErrorCyclePhase_NUMBER;Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type 243;59;Ice detection flag (1:ISA, 2:Sat Mask, 4:Ascent hanging);FLAG_IceDetected_NUMBER;aborted profile count - increments by one for each profile interrupted by ice detection. If units are 'bit' then represents the ice evasion record for the last 8 profiles with the latest profile in the least significant bit. +1001;-1;Number of descent CTD packets received;TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth). +1002;-1;Number of drift CTD packets received;TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the drift at park depth. +1003;-1;Number of ascent CTD packets received;TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface. +1004;-1;"Number of ""CTD near surface"" packets received";TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT;"Number of Iridium packets received to transmit sensor data collected during the ""near surface measurement"" phase." +1005;-1;"Number of ""CTD in air"" packets received";TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT;"Number of Iridium packets received to transmit sensor data collected during the ""in air measurement"" phase." +1006;-1;Number of hydraulic packets received;TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT;Number of Iridium packets received to transmit hydraulic data recorded during the cycle. +1007;-1;Number of tech #1 packets received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1008;-1;Number of tech #2 packets received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1009;-1;Number of parameter #1 packets received;TECH_AUX_NUMBER_ParameterMessage1Received_COUNT;Number of times parameter message #1 has been received. +1010;-1;Number of parameter #2 packets received;TECH_AUX_NUMBER_ParameterMessage2Received_COUNT;Number of times parameter message #2 has been received. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_212.json b/decArgo_soft/config/_techParamNames/_tech_param_name_212.json index 18e6a223..b185130f 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_212.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_212.json @@ -256,6 +256,14 @@ "TECH_PARAM_DESCRIPTION" : "CTD error count" }, "TECH_PARAM_33" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "57", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_34" : { "TECH_PARAM_DEC_ID" : "132", "TECH_PARAM_MSG_ID" : "58", @@ -263,7 +271,7 @@ "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_34" : + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "133", "TECH_PARAM_MSG_ID" : "60", @@ -271,7 +279,7 @@ "TECH_PARAM_NAME" : "TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ", "TECH_PARAM_DESCRIPTION" : "duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "134", "TECH_PARAM_MSG_ID" : "61", @@ -279,7 +287,7 @@ "TECH_PARAM_NAME" : "FLAG_AntennaStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the antenna (see manual)" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "135", "TECH_PARAM_MSG_ID" : "63", @@ -287,7 +295,7 @@ "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "3", @@ -295,7 +303,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "201", "TECH_PARAM_MSG_ID" : "4", @@ -303,7 +311,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "202", "TECH_PARAM_MSG_ID" : "5", @@ -311,7 +319,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "203", "TECH_PARAM_MSG_ID" : "6", @@ -319,7 +327,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the near surface measurement phase." }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "204", "TECH_PARAM_MSG_ID" : "7", @@ -327,7 +335,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the in air measurement phase." }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "205", "TECH_PARAM_MSG_ID" : "8", @@ -335,7 +343,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "206", "TECH_PARAM_MSG_ID" : "9", @@ -343,7 +351,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "207", "TECH_PARAM_MSG_ID" : "10", @@ -351,7 +359,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkCTDSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "208", "TECH_PARAM_MSG_ID" : "11", @@ -359,7 +367,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "209", "TECH_PARAM_MSG_ID" : "12", @@ -367,7 +375,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "210", "TECH_PARAM_MSG_ID" : "13", @@ -375,7 +383,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "Near surface measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "211", "TECH_PARAM_MSG_ID" : "14", @@ -383,7 +391,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "In air measurements - Internal counter" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "212", "TECH_PARAM_MSG_ID" : "15", @@ -391,7 +399,7 @@ "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "213", "TECH_PARAM_MSG_ID" : "21", @@ -399,7 +407,7 @@ "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "214", "TECH_PARAM_MSG_ID" : "23", @@ -407,7 +415,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "215", "TECH_PARAM_MSG_ID" : "24", @@ -415,7 +423,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "216", "TECH_PARAM_MSG_ID" : "25", @@ -423,7 +431,7 @@ "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "217", "TECH_PARAM_MSG_ID" : "26", @@ -431,7 +439,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "218", "TECH_PARAM_MSG_ID" : "28", @@ -439,7 +447,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "219", "TECH_PARAM_MSG_ID" : "29", @@ -447,7 +455,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "220", "TECH_PARAM_MSG_ID" : "30", @@ -455,7 +463,7 @@ "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "221", "TECH_PARAM_MSG_ID" : "31", @@ -463,7 +471,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "222", "TECH_PARAM_MSG_ID" : "32", @@ -471,7 +479,7 @@ "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "223", "TECH_PARAM_MSG_ID" : "33", @@ -479,7 +487,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "224", "TECH_PARAM_MSG_ID" : "34", @@ -487,7 +495,7 @@ "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "225", "TECH_PARAM_MSG_ID" : "35", @@ -495,7 +503,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "226", "TECH_PARAM_MSG_ID" : "36", @@ -503,7 +511,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "227", "TECH_PARAM_MSG_ID" : "37", @@ -511,7 +519,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "228", "TECH_PARAM_MSG_ID" : "38", @@ -519,7 +527,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "229", "TECH_PARAM_MSG_ID" : "39", @@ -527,7 +535,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands successfully considered." }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "230", "TECH_PARAM_MSG_ID" : "40", @@ -535,7 +543,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands rejected by the float." }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "231", "TECH_PARAM_MSG_ID" : "41", @@ -543,7 +551,7 @@ "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_69" : + "TECH_PARAM_70" : { "TECH_PARAM_DEC_ID" : "232", "TECH_PARAM_MSG_ID" : "42", @@ -551,7 +559,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_70" : + "TECH_PARAM_71" : { "TECH_PARAM_DEC_ID" : "233", "TECH_PARAM_MSG_ID" : "43", @@ -559,7 +567,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_71" : + "TECH_PARAM_72" : { "TECH_PARAM_DEC_ID" : "234", "TECH_PARAM_MSG_ID" : "44", @@ -567,7 +575,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsToStartAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions needed to start the ascent." }, - "TECH_PARAM_72" : + "TECH_PARAM_73" : { "TECH_PARAM_DEC_ID" : "235", "TECH_PARAM_MSG_ID" : "45", @@ -575,7 +583,7 @@ "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_73" : + "TECH_PARAM_74" : { "TECH_PARAM_DEC_ID" : "236", "TECH_PARAM_MSG_ID" : "46", @@ -583,7 +591,7 @@ "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" }, - "TECH_PARAM_74" : + "TECH_PARAM_75" : { "TECH_PARAM_DEC_ID" : "237", "TECH_PARAM_MSG_ID" : "52", @@ -591,7 +599,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Auto-test is performed at the beginning of the mission: Flag 0 = Problem, 1 = OK" }, - "TECH_PARAM_75" : + "TECH_PARAM_76" : { "TECH_PARAM_DEC_ID" : "238", "TECH_PARAM_MSG_ID" : "53", @@ -599,7 +607,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_NUMBER", "TECH_PARAM_DESCRIPTION" : "Detailed auto-test for float hardware resulting in a detailed code for each tested sub-part (see manual)" }, - "TECH_PARAM_76" : + "TECH_PARAM_77" : { "TECH_PARAM_DEC_ID" : "239", "TECH_PARAM_MSG_ID" : "54", @@ -607,7 +615,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialMemoryIntegrityCheck_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Software check on the float memory contents (0 if problems were found and 1 if no problem occured)" }, - "TECH_PARAM_77" : + "TECH_PARAM_78" : { "TECH_PARAM_DEC_ID" : "240", "TECH_PARAM_MSG_ID" : "55", @@ -615,7 +623,7 @@ "TECH_PARAM_NAME" : "FLAG_StatusBladderStateAtLaunch_NUMBER", "TECH_PARAM_DESCRIPTION" : "External bladder state at deployment (0: float stay at surface, 1: heavy float at deployment)" }, - "TECH_PARAM_78" : + "TECH_PARAM_79" : { "TECH_PARAM_DEC_ID" : "241", "TECH_PARAM_MSG_ID" : "56", @@ -623,7 +631,7 @@ "TECH_PARAM_NAME" : "FLAG_CTDStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the CTD (see manual) (could be reported as hex)" }, - "TECH_PARAM_79" : + "TECH_PARAM_80" : { "TECH_PARAM_DEC_ID" : "242", "TECH_PARAM_MSG_ID" : "57", @@ -631,12 +639,92 @@ "TECH_PARAM_NAME" : "FLAG_CTDErrorCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_80" : + "TECH_PARAM_81" : { "TECH_PARAM_DEC_ID" : "243", "TECH_PARAM_MSG_ID" : "59", "TECH_PARAM_MSG_LABEL" : "Ice detection flag (1:ISA, 2:Sat Mask, 4:Ascent hanging)", "TECH_PARAM_NAME" : "FLAG_IceDetected_NUMBER", "TECH_PARAM_DESCRIPTION" : "aborted profile count - increments by one for each profile interrupted by ice detection. If units are 'bit' then represents the ice evasion record for the last 8 profiles with the latest profile in the least significant bit." + }, + "TECH_PARAM_82" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_83" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD near surface packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the near surface measurement phase." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD in air packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the in air measurement phase." + }, + "TECH_PARAM_87" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_88" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_89" : + { + "TECH_PARAM_DEC_ID" : "1008", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_90" : + { + "TECH_PARAM_DEC_ID" : "1009", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message #1 has been received." + }, + "TECH_PARAM_91" : + { + "TECH_PARAM_DEC_ID" : "1010", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message #2 has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_213.json b/decArgo_soft/config/_techParamNames/_tech_param_name_213.json index ab3d434f..8b8ae278 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_213.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_213.json @@ -256,6 +256,14 @@ "TECH_PARAM_DESCRIPTION" : "CTD error count" }, "TECH_PARAM_33" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "57", + "TECH_PARAM_MSG_LABEL" : "GPS valid fix (1 = valid, 0 = not valid)", + "TECH_PARAM_NAME" : "TECH_AUX_FLAG_GPSValidFix_LOGICAL", + "TECH_PARAM_DESCRIPTION" : "Flag for GPS fix determination (1 if a valid fix has been transmitted in tech msg, 0 otherwise)." + }, + "TECH_PARAM_34" : { "TECH_PARAM_DEC_ID" : "132", "TECH_PARAM_MSG_ID" : "58", @@ -263,7 +271,7 @@ "TECH_PARAM_NAME" : "TIME_IridiumGPSFix_seconds", "TECH_PARAM_DESCRIPTION" : "the number of seconds required to obtain a GPS fix for a profile" }, - "TECH_PARAM_34" : + "TECH_PARAM_35" : { "TECH_PARAM_DEC_ID" : "133", "TECH_PARAM_MSG_ID" : "60", @@ -271,7 +279,7 @@ "TECH_PARAM_NAME" : "TIME_PumpActionsAdditionalAtSurfaceForGPSAcquisition_seconds ", "TECH_PARAM_DESCRIPTION" : "duration of additional pump actions at the surface performed during GPS acquisition in case of insufficient buoyancy" }, - "TECH_PARAM_35" : + "TECH_PARAM_36" : { "TECH_PARAM_DEC_ID" : "134", "TECH_PARAM_MSG_ID" : "61", @@ -279,7 +287,7 @@ "TECH_PARAM_NAME" : "FLAG_AntennaStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the antenna (see manual)" }, - "TECH_PARAM_36" : + "TECH_PARAM_37" : { "TECH_PARAM_DEC_ID" : "135", "TECH_PARAM_MSG_ID" : "63", @@ -287,7 +295,7 @@ "TECH_PARAM_NAME" : "CLOCK_EOLStart_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time when End of Life mode starts" }, - "TECH_PARAM_37" : + "TECH_PARAM_38" : { "TECH_PARAM_DEC_ID" : "200", "TECH_PARAM_MSG_ID" : "3", @@ -295,7 +303,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." }, - "TECH_PARAM_38" : + "TECH_PARAM_39" : { "TECH_PARAM_DEC_ID" : "201", "TECH_PARAM_MSG_ID" : "4", @@ -303,7 +311,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the drift at park depth." }, - "TECH_PARAM_39" : + "TECH_PARAM_40" : { "TECH_PARAM_DEC_ID" : "202", "TECH_PARAM_MSG_ID" : "5", @@ -311,7 +319,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscentIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the ascent from the profile depth to the surface." }, - "TECH_PARAM_40" : + "TECH_PARAM_41" : { "TECH_PARAM_DEC_ID" : "203", "TECH_PARAM_MSG_ID" : "6", @@ -319,7 +327,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the near surface measurement phase." }, - "TECH_PARAM_41" : + "TECH_PARAM_42" : { "TECH_PARAM_DEC_ID" : "204", "TECH_PARAM_MSG_ID" : "7", @@ -327,7 +335,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirIridiumPackets_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets used to transmit sensor data collected during the in air measurement phase." }, - "TECH_PARAM_42" : + "TECH_PARAM_43" : { "TECH_PARAM_DEC_ID" : "205", "TECH_PARAM_MSG_ID" : "8", @@ -335,7 +343,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_43" : + "TECH_PARAM_44" : { "TECH_PARAM_DEC_ID" : "206", "TECH_PARAM_MSG_ID" : "9", @@ -343,7 +351,7 @@ "TECH_PARAM_NAME" : "NUMBER_DescendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Descending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_44" : + "TECH_PARAM_45" : { "TECH_PARAM_DEC_ID" : "207", "TECH_PARAM_MSG_ID" : "10", @@ -351,7 +359,7 @@ "TECH_PARAM_NAME" : "NUMBER_ParkCTDSamplesInternal_COUNT", "TECH_PARAM_DESCRIPTION" : "Park measurements - Internal counter" }, - "TECH_PARAM_45" : + "TECH_PARAM_46" : { "TECH_PARAM_DEC_ID" : "208", "TECH_PARAM_MSG_ID" : "11", @@ -359,7 +367,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionUpperPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in shallow zone - NTS" }, - "TECH_PARAM_46" : + "TECH_PARAM_47" : { "TECH_PARAM_DEC_ID" : "209", "TECH_PARAM_MSG_ID" : "12", @@ -367,7 +375,7 @@ "TECH_PARAM_NAME" : "NUMBER_AscendingProfileReductionLowerPart_COUNT", "TECH_PARAM_DESCRIPTION" : "Ascending profile reduction Number of slices in deep zone - NTF" }, - "TECH_PARAM_47" : + "TECH_PARAM_48" : { "TECH_PARAM_DEC_ID" : "210", "TECH_PARAM_MSG_ID" : "13", @@ -375,7 +383,7 @@ "TECH_PARAM_NAME" : "NUMBER_NearSurfaceSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "Near surface measurements - Internal counter" }, - "TECH_PARAM_48" : + "TECH_PARAM_49" : { "TECH_PARAM_DEC_ID" : "211", "TECH_PARAM_MSG_ID" : "14", @@ -383,7 +391,7 @@ "TECH_PARAM_NAME" : "NUMBER_InAirSamples_COUNT", "TECH_PARAM_DESCRIPTION" : "In air measurements - Internal counter" }, - "TECH_PARAM_49" : + "TECH_PARAM_50" : { "TECH_PARAM_DEC_ID" : "212", "TECH_PARAM_MSG_ID" : "15", @@ -391,7 +399,7 @@ "TECH_PARAM_NAME" : "PRES_LastAscentPumpedRawSample_dbar", "TECH_PARAM_DESCRIPTION" : "Last (shallowest) pumped raw pressure sample acquired during the ascent from the profile depth to the surface (i.e. just before the cut-off pressure where the pump is stopped) (in dbars)." }, - "TECH_PARAM_50" : + "TECH_PARAM_51" : { "TECH_PARAM_DEC_ID" : "213", "TECH_PARAM_MSG_ID" : "21", @@ -399,7 +407,7 @@ "TECH_PARAM_NAME" : "FLAG_Grounded_NUMBER", "TECH_PARAM_DESCRIPTION" : "grounded flag , diagnostic bit - could also be logical? Yes/no? 0/1? Or can be number of profiles during which the float grounded" }, - "TECH_PARAM_51" : + "TECH_PARAM_52" : { "TECH_PARAM_DEC_ID" : "214", "TECH_PARAM_MSG_ID" : "23", @@ -407,7 +415,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_52" : + "TECH_PARAM_53" : { "TECH_PARAM_DEC_ID" : "215", "TECH_PARAM_MSG_ID" : "24", @@ -415,7 +423,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_53" : + "TECH_PARAM_54" : { "TECH_PARAM_DEC_ID" : "216", "TECH_PARAM_MSG_ID" : "25", @@ -423,7 +431,7 @@ "TECH_PARAM_NAME" : "FLAG_FirstGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the first grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_54" : + "TECH_PARAM_55" : { "TECH_PARAM_DEC_ID" : "217", "TECH_PARAM_MSG_ID" : "26", @@ -431,7 +439,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForFirstGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the first grounding event" }, - "TECH_PARAM_55" : + "TECH_PARAM_56" : { "TECH_PARAM_DEC_ID" : "218", "TECH_PARAM_MSG_ID" : "28", @@ -439,7 +447,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number when the float grounds for the first time (relative to mission start day)." }, - "TECH_PARAM_56" : + "TECH_PARAM_57" : { "TECH_PARAM_DEC_ID" : "219", "TECH_PARAM_MSG_ID" : "29", @@ -447,7 +455,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeGrounded_HHMM", "TECH_PARAM_DESCRIPTION" : "time the float grounded" }, - "TECH_PARAM_57" : + "TECH_PARAM_58" : { "TECH_PARAM_DEC_ID" : "220", "TECH_PARAM_MSG_ID" : "30", @@ -455,7 +463,7 @@ "TECH_PARAM_NAME" : "FLAG_SecondGroundingCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the second grounding occurred. See the manual for phase definition - this will vary with float type" }, - "TECH_PARAM_58" : + "TECH_PARAM_59" : { "TECH_PARAM_DEC_ID" : "221", "TECH_PARAM_MSG_ID" : "31", @@ -463,7 +471,7 @@ "TECH_PARAM_NAME" : "NUMBER_ValveActionsForSecondGroundingDetection_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of valve actions done at constant pressure to set the grounded flag for the second grounding event" }, - "TECH_PARAM_59" : + "TECH_PARAM_60" : { "TECH_PARAM_DEC_ID" : "222", "TECH_PARAM_MSG_ID" : "32", @@ -471,7 +479,7 @@ "TECH_PARAM_NAME" : "NUMBER_EmergencyAscents_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Emergency ascents - Internal count" }, - "TECH_PARAM_60" : + "TECH_PARAM_61" : { "TECH_PARAM_DEC_ID" : "223", "TECH_PARAM_MSG_ID" : "33", @@ -479,7 +487,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_HHMM", "TECH_PARAM_DESCRIPTION" : "Number of minutes elapsed in the day of the float first emergency ascent." }, - "TECH_PARAM_61" : + "TECH_PARAM_62" : { "TECH_PARAM_DEC_ID" : "224", "TECH_PARAM_MSG_ID" : "34", @@ -487,7 +495,7 @@ "TECH_PARAM_NAME" : "PRES_FirstEmergencyAscent_dbar", "TECH_PARAM_DESCRIPTION" : "Pressure that triggered the first emergency ascent" }, - "TECH_PARAM_62" : + "TECH_PARAM_63" : { "TECH_PARAM_DEC_ID" : "225", "TECH_PARAM_MSG_ID" : "35", @@ -495,7 +503,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsOnFirstEmergencyAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Emergency ascent - pump actions at emergency depth" }, - "TECH_PARAM_63" : + "TECH_PARAM_64" : { "TECH_PARAM_DEC_ID" : "226", "TECH_PARAM_MSG_ID" : "36", @@ -503,7 +511,7 @@ "TECH_PARAM_NAME" : "CLOCK_TimeOfFirstEmergencyAscent_FloatDay", "TECH_PARAM_DESCRIPTION" : "Day number of the float first emergency ascent (relative to mission start day)." }, - "TECH_PARAM_64" : + "TECH_PARAM_65" : { "TECH_PARAM_DEC_ID" : "227", "TECH_PARAM_MSG_ID" : "37", @@ -511,7 +519,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control successfully considered." }, - "TECH_PARAM_65" : + "TECH_PARAM_66" : { "TECH_PARAM_DEC_ID" : "228", "TECH_PARAM_MSG_ID" : "38", @@ -519,7 +527,7 @@ "TECH_PARAM_NAME" : "FLAG_RemoteControlMessageKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control rejected by the float (due to out of range value or remote control syntax error)." }, - "TECH_PARAM_66" : + "TECH_PARAM_67" : { "TECH_PARAM_DEC_ID" : "229", "TECH_PARAM_MSG_ID" : "39", @@ -527,7 +535,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandOK_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands successfully considered." }, - "TECH_PARAM_67" : + "TECH_PARAM_68" : { "TECH_PARAM_DEC_ID" : "230", "TECH_PARAM_MSG_ID" : "40", @@ -535,7 +543,7 @@ "TECH_PARAM_NAME" : "NUMBER_RemoteControlCommandKO_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of remote control commands rejected by the float." }, - "TECH_PARAM_68" : + "TECH_PARAM_69" : { "TECH_PARAM_DEC_ID" : "231", "TECH_PARAM_MSG_ID" : "41", @@ -543,7 +551,7 @@ "TECH_PARAM_NAME" : "TIME_PreviousIridiumSession_seconds", "TECH_PARAM_DESCRIPTION" : "Duration on the previous Iridium session" }, - "TECH_PARAM_69" : + "TECH_PARAM_70" : { "TECH_PARAM_DEC_ID" : "232", "TECH_PARAM_MSG_ID" : "42", @@ -551,7 +559,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesReceivedPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Received during previous session" }, - "TECH_PARAM_70" : + "TECH_PARAM_71" : { "TECH_PARAM_DEC_ID" : "233", "TECH_PARAM_MSG_ID" : "43", @@ -559,7 +567,7 @@ "TECH_PARAM_NAME" : "NUMBER_IridiumMessagesSentPreviousSession_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of Incoming Iridium Messages Sent during previous session" }, - "TECH_PARAM_71" : + "TECH_PARAM_72" : { "TECH_PARAM_DEC_ID" : "234", "TECH_PARAM_MSG_ID" : "44", @@ -567,7 +575,7 @@ "TECH_PARAM_NAME" : "NUMBER_PumpActionsToStartAscent_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions needed to start the ascent." }, - "TECH_PARAM_72" : + "TECH_PARAM_73" : { "TECH_PARAM_DEC_ID" : "235", "TECH_PARAM_MSG_ID" : "45", @@ -575,7 +583,7 @@ "TECH_PARAM_NAME" : "PRESSURE_InternalVacuumProfileStart_mbar", "TECH_PARAM_DESCRIPTION" : "Internal tube pressure [mbar] in profile depth" }, - "TECH_PARAM_73" : + "TECH_PARAM_74" : { "TECH_PARAM_DEC_ID" : "236", "TECH_PARAM_MSG_ID" : "46", @@ -583,7 +591,7 @@ "TECH_PARAM_NAME" : "CLOCK_LastReset_YYYYMMDDHHMMSS", "TECH_PARAM_DESCRIPTION" : "Clock time of the last reset of the float" }, - "TECH_PARAM_74" : + "TECH_PARAM_75" : { "TECH_PARAM_DEC_ID" : "237", "TECH_PARAM_MSG_ID" : "52", @@ -591,7 +599,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Auto-test is performed at the beginning of the mission: Flag 0 = Problem, 1 = OK" }, - "TECH_PARAM_75" : + "TECH_PARAM_76" : { "TECH_PARAM_DEC_ID" : "238", "TECH_PARAM_MSG_ID" : "53", @@ -599,7 +607,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialCheckError_NUMBER", "TECH_PARAM_DESCRIPTION" : "Detailed auto-test for float hardware resulting in a detailed code for each tested sub-part (see manual)" }, - "TECH_PARAM_76" : + "TECH_PARAM_77" : { "TECH_PARAM_DEC_ID" : "239", "TECH_PARAM_MSG_ID" : "54", @@ -607,7 +615,7 @@ "TECH_PARAM_NAME" : "FLAG_InitialMemoryIntegrityCheck_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Software check on the float memory contents (0 if problems were found and 1 if no problem occured)" }, - "TECH_PARAM_77" : + "TECH_PARAM_78" : { "TECH_PARAM_DEC_ID" : "240", "TECH_PARAM_MSG_ID" : "55", @@ -615,7 +623,7 @@ "TECH_PARAM_NAME" : "FLAG_StatusBladderStateAtLaunch_NUMBER", "TECH_PARAM_DESCRIPTION" : "External bladder state at deployment (0: float stay at surface, 1: heavy float at deployment)" }, - "TECH_PARAM_78" : + "TECH_PARAM_79" : { "TECH_PARAM_DEC_ID" : "241", "TECH_PARAM_MSG_ID" : "56", @@ -623,12 +631,84 @@ "TECH_PARAM_NAME" : "FLAG_CTDStatus_NUMBER", "TECH_PARAM_DESCRIPTION" : "Flag indicating the status of the CTD (see manual) (could be reported as hex)" }, - "TECH_PARAM_79" : + "TECH_PARAM_80" : { "TECH_PARAM_DEC_ID" : "242", "TECH_PARAM_MSG_ID" : "57", "TECH_PARAM_MSG_LABEL" : "Float phase during CTD default detection", "TECH_PARAM_NAME" : "FLAG_CTDErrorCyclePhase_NUMBER", "TECH_PARAM_DESCRIPTION" : "Phase of the float life or cycle when the CTD occurred. See the manual for phase definition - this will vary with float type" + }, + "TECH_PARAM_81" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of descent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_DescentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the descent phases (from surface to the parking depth and from the parking depth to the profile depth)." + }, + "TECH_PARAM_82" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of drift CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParkIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the drift at park depth." + }, + "TECH_PARAM_83" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of ascent CTD packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_AscentIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the ascent from the profile depth to the surface." + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1004", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD near surface packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_NearSurfaceIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the near surface measurement phase." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1005", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of CTD in air packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_InAirIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit sensor data collected during the in air measurement phase." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1006", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of hydraulic packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_HydraulicIridiumPacketsReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of Iridium packets received to transmit hydraulic data recorded during the cycle." + }, + "TECH_PARAM_87" : + { + "TECH_PARAM_DEC_ID" : "1007", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_88" : + { + "TECH_PARAM_DEC_ID" : "1008", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_89" : + { + "TECH_PARAM_DEC_ID" : "1009", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter packets received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_24.json b/decArgo_soft/config/_techParamNames/_tech_param_name_24.json index 19f06c89..99809232 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_24.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_24.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_25.json b/decArgo_soft/config/_techParamNames/_tech_param_name_25.json index 8da23b02..8ab7af80 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_25.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_25.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_27.json b/decArgo_soft/config/_techParamNames/_tech_param_name_27.json index 8da23b02..8ab7af80 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_27.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_27.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_28.json b/decArgo_soft/config/_techParamNames/_tech_param_name_28.json index 8da23b02..8ab7af80 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_28.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_28.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_29.json b/decArgo_soft/config/_techParamNames/_tech_param_name_29.json index 8da23b02..8ab7af80 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_29.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_29.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_3.json b/decArgo_soft/config/_techParamNames/_tech_param_name_3.json index c800a1b9..f76b63b0 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_3.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_3.json @@ -406,5 +406,21 @@ "TECH_PARAM_MSG_LABEL" : "number of entrance in profile target range (descent)", "TECH_PARAM_NAME" : "NUMBER_DescentToProfileEntriesInProfileMargin_COUNT", "TECH_PARAM_DESCRIPTION" : "descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db)" + }, + "TECH_PARAM_52" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_30.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_30.csv index a4b320e4..790a9cf0 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_30.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_30.csv @@ -81,3 +81,7 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 1214;27;Transmission Start day : dd;CLOCK_TransmissionStart_DD;time of the first transmission for this cycle 1215;28;Transmission Start hour : hh;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle 1216;29;Number of repetitions for each argos message;NUMBER_TelemetryRetransmission_COUNT;Number of repeated transmissions of float data for each Argos message +1000;-1;Number of tech #1 messages received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1001;-1;Number of tech #2 messages received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1002;-1;Number of parameter messages received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. +1003;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_30.json b/decArgo_soft/config/_techParamNames/_tech_param_name_30.json index 8b5fd82f..10d23026 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_30.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_30.json @@ -654,5 +654,37 @@ "TECH_PARAM_MSG_LABEL" : "Number of repetitions for each argos message", "TECH_PARAM_NAME" : "NUMBER_TelemetryRetransmission_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of repeated transmissions of float data for each Argos message" + }, + "TECH_PARAM_83" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_31.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_31.csv index 9f241f50..fd28546e 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_31.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_31.csv @@ -51,3 +51,5 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 110;35;RTC state indicator ( normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 410;36;number of entrance in profile target range (descent);NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) 509;38;number of pump actions to lift up from ground;NUMBER_PumpActionsToLeaveReleasingSystem_COUNT;Number of pump actions needed to leave the releasing system (float deployed in ASFAR (Autonomous System for Argo float Release) mode). +1000;-1;Number of tech messages received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1001;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_31.json b/decArgo_soft/config/_techParamNames/_tech_param_name_31.json index 19a72727..08168043 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_31.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_31.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "number of pump actions to lift up from ground", "TECH_PARAM_NAME" : "NUMBER_PumpActionsToLeaveReleasingSystem_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of pump actions needed to leave the releasing system (float deployed in ASFAR (Autonomous System for Argo float Release) mode)." + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_32.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_32.csv index 05413827..8106da3a 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_32.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_32.csv @@ -82,3 +82,7 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 1214;27;Transmission Start day : dd;CLOCK_TransmissionStart_DD;time of the first transmission for this cycle 1215;28;Transmission Start hour : hh;CLOCK_TransmissionStart_HHMM;time of the first transmission for this cycle 1216;29;Number of repetitions for each argos message;NUMBER_TelemetryRetransmission_COUNT;Number of repeated transmissions of float data for each Argos message +1000;-1;Number of tech #1 messages received;TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT;Number of times technical message #1 has been received. +1001;-1;Number of tech #2 messages received;TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT;Number of times technical message #2 has been received. +1002;-1;Number of parameter messages received;TECH_AUX_NUMBER_ParameterMessageReceived_COUNT;Number of times parameter message has been received. +1003;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_32.json b/decArgo_soft/config/_techParamNames/_tech_param_name_32.json index c20ac81b..da58b7d8 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_32.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_32.json @@ -662,5 +662,37 @@ "TECH_PARAM_MSG_LABEL" : "Number of repetitions for each argos message", "TECH_PARAM_NAME" : "NUMBER_TelemetryRetransmission_COUNT", "TECH_PARAM_DESCRIPTION" : "Number of repeated transmissions of float data for each Argos message" + }, + "TECH_PARAM_84" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #1 messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage1Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #1 has been received." + }, + "TECH_PARAM_85" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech #2 messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessage2Received_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message #2 has been received." + }, + "TECH_PARAM_86" : + { + "TECH_PARAM_DEC_ID" : "1002", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of parameter messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_ParameterMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times parameter message has been received." + }, + "TECH_PARAM_87" : + { + "TECH_PARAM_DEC_ID" : "1003", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_4.csv b/decArgo_soft/config/_techParamNames/_tech_param_name_4.csv index 593ee138..837cb9c0 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_4.csv +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_4.csv @@ -51,3 +51,5 @@ TECH_PARAM_DEC_ID;TECH_PARAM_MSG_ID;TECH_PARAM_MSG_LABEL;TECH_PARAM_NAME;TECH_PA 110;35;RTC state indicator ( normal = 0, failure = 1);FLAG_RTCStatus_LOGICAL;real time clock status - 1= OK, 0=not OK 410;36;number of entrance in profile target range (descent);NUMBER_DescentToProfileEntriesInProfileMargin_COUNT;descent to profile pressure: number of entries in margin around profile pressure target - specifically, how many times the float enters the band of pressure surrounding the target profile pressure (generally +/- 30db) 616;37;oxygen sensor state indicator (normal = 0, failure = 1);FLAG_OptodeStatus_LOGICAL;Sensor status - 1= OK, 0=not OK +1000;-1;Number of tech messages received;TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT;Number of times technical message has been received. +1001;-1;Argos data file time span;TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS;Time difference between first and last Argos float messages assigned to the cycle. diff --git a/decArgo_soft/config/_techParamNames/_tech_param_name_4.json b/decArgo_soft/config/_techParamNames/_tech_param_name_4.json index 22331bb9..b37915f3 100644 --- a/decArgo_soft/config/_techParamNames/_tech_param_name_4.json +++ b/decArgo_soft/config/_techParamNames/_tech_param_name_4.json @@ -414,5 +414,21 @@ "TECH_PARAM_MSG_LABEL" : "oxygen sensor state indicator (normal = 0, failure = 1)", "TECH_PARAM_NAME" : "FLAG_OptodeStatus_LOGICAL", "TECH_PARAM_DESCRIPTION" : "Sensor status - 1= OK, 0=not OK" + }, + "TECH_PARAM_53" : + { + "TECH_PARAM_DEC_ID" : "1000", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Number of tech messages received", + "TECH_PARAM_NAME" : "TECH_AUX_NUMBER_TechnicalMessageReceived_COUNT", + "TECH_PARAM_DESCRIPTION" : "Number of times technical message has been received." + }, + "TECH_PARAM_54" : + { + "TECH_PARAM_DEC_ID" : "1001", + "TECH_PARAM_MSG_ID" : "-1", + "TECH_PARAM_MSG_LABEL" : "Argos data file time span", + "TECH_PARAM_NAME" : "TECH_AUX_TIME_ArgosReceivedDataTimeSpan_HHMMSS", + "TECH_PARAM_DESCRIPTION" : "Time difference between first and last Argos float messages assigned to the cycle." } } diff --git a/decArgo_soft/soft/sub/compute_prv_dates_201_202_203.m b/decArgo_soft/soft/sub/compute_prv_dates_201_202_203.m index 8e319ee0..f7c1ef94 100644 --- a/decArgo_soft/soft/sub/compute_prv_dates_201_202_203.m +++ b/decArgo_soft/soft/sub/compute_prv_dates_201_202_203.m @@ -251,15 +251,33 @@ elseif (length(idF2) == 1) id = idF2(1); - + if ~((length(unique(a_tabTech(id, 18:19))) == 1) && (unique(a_tabTech(id, 18:19)) == 0)) - firstGroundingTime = a_tabTech(id, 18) + a_tabTech(id, 19)/1440; + + % manage possible roll over of grounding day + groundingDay = a_tabTech(id, 18); + if (~isempty(o_cycleStartDate)) + while ((groundingDay + a_tabTech(id, 19)/1440 + g_decArgo_julD2FloatDayOffset) < o_cycleStartDate) + groundingDay = groundingDay + 256; + end + end + + firstGroundingTime = groundingDay + a_tabTech(id, 19)/1440; o_firstGroundingDate = firstGroundingTime + g_decArgo_julD2FloatDayOffset; o_firstGroundingPres = a_tabTech(id, 17); end if ~((length(unique(a_tabTech(id, 23:24))) == 1) && (unique(a_tabTech(id, 23:24)) == 0)) - secondGroundingTime = a_tabTech(id, 23) + a_tabTech(id, 24)/1440; + + % manage possible roll over of grounding day + groundingDay = a_tabTech(id, 23); + if (~isempty(o_cycleStartDate)) + while ((groundingDay + a_tabTech(id, 24)/1440 + g_decArgo_julD2FloatDayOffset) < o_cycleStartDate) + groundingDay = groundingDay + 256; + end + end + + secondGroundingTime = groundingDay + a_tabTech(id, 24)/1440; o_secondGroundingDate = secondGroundingTime + g_decArgo_julD2FloatDayOffset; o_secondGroundingPres = a_tabTech(id, 22); end diff --git a/decArgo_soft/soft/sub/create_nc_mono_prof_aux_files.m b/decArgo_soft/soft/sub/create_nc_mono_prof_aux_files.m index e43d1ed8..00036377 100644 --- a/decArgo_soft/soft/sub/create_nc_mono_prof_aux_files.m +++ b/decArgo_soft/soft/sub/create_nc_mono_prof_aux_files.m @@ -1500,7 +1500,7 @@ function create_nc_mono_prof_aux_files( ... netcdf.endDef(fCdf); - % fill PARAMETER variable (event if there is no RT adjustments) + % fill PARAMETER variable (even if there is no RT adjustments) ncParamlist = repmat({''}, nbProfToStore, nbProfParam); for idP = 1:nbProfToStore prof = a_tabProfiles(idProfInFile(idP)); diff --git a/decArgo_soft/soft/sub/create_nc_mono_prof_b_files_3_1.m b/decArgo_soft/soft/sub/create_nc_mono_prof_b_files_3_1.m index 6159c67e..96c2e7a4 100644 --- a/decArgo_soft/soft/sub/create_nc_mono_prof_b_files_3_1.m +++ b/decArgo_soft/soft/sub/create_nc_mono_prof_b_files_3_1.m @@ -84,6 +84,19 @@ function create_nc_mono_prof_b_files_3_1( ... return; end +% check if there is at least one B file to create +bFileNeeded = 0; +for idProf = 1:length(a_tabProfiles) + profile = a_tabProfiles(idProf); + if (~is_core_profile(profile)) + bFileNeeded = 1; + break; + end +end +if (bFileNeeded == 0) + return; +end + % assign time resolution for each float transmission type profJulDLocRes = double(1/5184000); % 1 second [profJulDRes, profJulDComment] = get_prof_juld_resolution(g_decArgo_floatTransType, a_decoderId); @@ -196,6 +209,12 @@ function create_nc_mono_prof_b_files_3_1( ... break; end end + if (bFileNeeded == 0) + for idP = 1:nbProfToStore + profInfo(idProfInFile(idP), 4) = 1; + end + continue; + end % create the profile parameters list and compute the number of levels % and sublevels @@ -207,31 +226,28 @@ function create_nc_mono_prof_b_files_3_1( ... for idP = 1:nbProfToStore paramNameOfProf = []; prof = tabProfiles(idProfInFile(idP)); - % core profiles are present in the b file as a 'default' parameter - if (~is_core_profile(prof) || (bFileNeeded == 1)) - parameterList = prof.paramList; - profileData = prof.data; - for idParam = 1:length(parameterList) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - profParamName = [profParamName; {parameterList(idParam).name}]; - paramNameOfProf = [paramNameOfProf; {parameterList(idParam).name}]; - nbProfLevels = max(nbProfLevels, size(profileData, 1)); - - if (~isempty(prof.paramNumberWithSubLevels)) - idF = find(prof.paramNumberWithSubLevels == idParam); - if (~isempty(idF)) - profSubLevels = [profSubLevels prof.paramNumberOfSubLevels(idF)]; - paramNameSubLevels = [paramNameSubLevels {parameterList(idParam).name}]; - end + parameterList = prof.paramList; + profileData = prof.data; + for idParam = 1:length(parameterList) + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) + + profParamName = [profParamName; {parameterList(idParam).name}]; + paramNameOfProf = [paramNameOfProf; {parameterList(idParam).name}]; + nbProfLevels = max(nbProfLevels, size(profileData, 1)); + + if (~isempty(prof.paramNumberWithSubLevels)) + idF = find(prof.paramNumberWithSubLevels == idParam); + if (~isempty(idF)) + profSubLevels = [profSubLevels prof.paramNumberOfSubLevels(idF)]; + paramNameSubLevels = [paramNameSubLevels {parameterList(idParam).name}]; end end end - nbProfParam = max(nbProfParam, length(unique(paramNameOfProf))); end + nbProfParam = max(nbProfParam, length(unique(paramNameOfProf))); end profUniqueParamName = unique(profParamName, 'stable'); @@ -356,74 +372,58 @@ function create_nc_mono_prof_b_files_3_1( ... % compare profile levels differ = 0; - % check if all the profiles to be stored are core profiles - bFileNeeded = 0; - for idP = 1:nbProfToStore - prof = tabProfiles(idProfInFile(idP)); - if (~is_core_profile(prof)) - bFileNeeded = 1; - break; - end - end - for idP = 1:nbProfToStore prof = tabProfiles(idProfInFile(idP)); nLevelsParam = 0; idNoDefAll = []; - % core profiles are present in the b file as a 'default' parameter - if (~is_core_profile(prof) || (bFileNeeded == 1)) - - profPos = idP-1+profShiftIfNoPrimary; - - % profile parameter data - parameterList = prof.paramList; - for idParam = 1:length(parameterList) - if ((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) - profParam = parameterList(idParam); - profParamName = profParam.name; - paramInfo = get_netcdf_param_attributes(profParamName); - % prof.data is empty in 'default' primary profiles - if (~isempty(prof.data)) - % if it is a core profile, don't put any parameter data - if (~is_core_profile(prof)) - % parameter data - if (isempty(prof.paramNumberWithSubLevels)) - % none of the profile parameters has sublevels - paramData = prof.data(:, idParam); - idNoDef = find(paramData ~= paramInfo.fillValue); - idNoDefAll = [idNoDefAll idNoDef']; - else - % some profile parameters have sublevels - % retrieve the column(s) associated with the parameter data - idF = find(prof.paramNumberWithSubLevels < idParam); - if (isempty(idF)) - firstCol = idParam; - else - firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); - end - - idF = find(prof.paramNumberWithSubLevels == idParam); - if (isempty(idF)) - lastCol = firstCol; - else - lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; - end - - paramData = prof.data(:, firstCol:lastCol); - if (size(paramData, 2) == 1) - idNoDef = find(paramData ~= paramInfo.fillValue); - idNoDefAll = [idNoDefAll idNoDef']; - else - idNoDef = []; - for id = 1:size(paramData, 1) - if ~((length(unique(paramData(id, :))) == 1) && (unique(paramData(id, :)) == paramInfo.fillValue)) - idNoDef = [idNoDef id]; - end - end - idNoDefAll = [idNoDefAll idNoDef]; + + profPos = idP-1+profShiftIfNoPrimary; + + % profile parameter data + parameterList = prof.paramList; + for idParam = 1:length(parameterList) + if ((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) + profParam = parameterList(idParam); + profParamName = profParam.name; + paramInfo = get_netcdf_param_attributes(profParamName); + % prof.data is empty in 'default' primary profiles + if (~isempty(prof.data)) + % parameter data + if (isempty(prof.paramNumberWithSubLevels)) + % none of the profile parameters has sublevels + paramData = prof.data(:, idParam); + idNoDef = find(paramData ~= paramInfo.fillValue); + idNoDefAll = [idNoDefAll idNoDef']; + else + % some profile parameters have sublevels + % retrieve the column(s) associated with the parameter data + idF = find(prof.paramNumberWithSubLevels < idParam); + if (isempty(idF)) + firstCol = idParam; + else + firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); + end + + idF = find(prof.paramNumberWithSubLevels == idParam); + if (isempty(idF)) + lastCol = firstCol; + else + lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; + end + + paramData = prof.data(:, firstCol:lastCol); + if (size(paramData, 2) == 1) + idNoDef = find(paramData ~= paramInfo.fillValue); + idNoDefAll = [idNoDefAll idNoDef']; + else + idNoDef = []; + for id = 1:size(paramData, 1) + if ~((length(unique(paramData(id, :))) == 1) && (unique(paramData(id, :)) == paramInfo.fillValue)) + idNoDef = [idNoDef id]; end end + idNoDefAll = [idNoDefAll idNoDef]; end end end @@ -468,7 +468,7 @@ function create_nc_mono_prof_b_files_3_1( ... end end end - end + end end end end @@ -800,173 +800,171 @@ function create_nc_mono_prof_b_files_3_1( ... for idP = 1:nbProfToStore prof = tabProfiles(idProfInFile(idP)); - if (~is_core_profile(prof)) + + % profile parameter data + parameterList = prof.paramList; + for idParam = 1:length(parameterList) - % profile parameter data - parameterList = prof.paramList; - for idParam = 1:length(parameterList) + if ((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) + + profParam = parameterList(idParam); + profParamName = profParam.name; + profParamNcType = profParam.paramNcType; + + % find if this parameter has sublevels + paramWithSubLevels = 0; + if (~isempty(prof.paramNumberWithSubLevels)) + idF = find(prof.paramNumberWithSubLevels == idParam); + if (~isempty(idF)) + paramWithSubLevels = 1; + paramSubLevelsDim = dimSubLevels(find(strcmp(profParamName, paramSubLevels), 1)); + % nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', prof.paramNumberOfSubLevels(idF))); + nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', paramSubLevelsDim)); + end + end - if ((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) + % parameter variable and attributes + if (~var_is_present_dec_argo(fCdf, profParamName)) - profParam = parameterList(idParam); - profParamName = profParam.name; - profParamNcType = profParam.paramNcType; + if (strcmp(profParamNcType, 'NC_DOUBLE')) + doubleTypeInFile = 1; + end + if (paramWithSubLevels == 0) + profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + else + profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); + end - % find if this parameter has sublevels - paramWithSubLevels = 0; - if (~isempty(prof.paramNumberWithSubLevels)) - idF = find(prof.paramNumberWithSubLevels == idParam); - if (~isempty(idF)) - paramWithSubLevels = 1; - paramSubLevelsDim = dimSubLevels(find(strcmp(profParamName, paramSubLevels), 1)); - % nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', prof.paramNumberOfSubLevels(idF))); - nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', paramSubLevelsDim)); + if (~isempty(profParam.longName)) + netcdf.putAtt(fCdf, profParamVarId, 'long_name', profParam.longName); + end + if (~isempty(profParam.standardName)) + netcdf.putAtt(fCdf, profParamVarId, 'standard_name', profParam.standardName); + end + if (~isempty(profParam.fillValue)) + netcdf.putAtt(fCdf, profParamVarId, '_FillValue', profParam.fillValue); + end + if (~isempty(profParam.units)) + netcdf.putAtt(fCdf, profParamVarId, 'units', profParam.units); + end + if (~isempty(profParam.validMin)) + netcdf.putAtt(fCdf, profParamVarId, 'valid_min', profParam.validMin); + end + if (~isempty(profParam.validMax)) + netcdf.putAtt(fCdf, profParamVarId, 'valid_max', profParam.validMax); + end + if (~isempty(profParam.cFormat)) + netcdf.putAtt(fCdf, profParamVarId, 'C_format', profParam.cFormat); + end + if (~isempty(profParam.fortranFormat)) + netcdf.putAtt(fCdf, profParamVarId, 'FORTRAN_format', profParam.fortranFormat); + end + if (~isempty(profParam.resolution)) + netcdf.putAtt(fCdf, profParamVarId, 'resolution', profParam.resolution); + end + if (~isempty(profParam.axis)) + netcdf.putAtt(fCdf, profParamVarId, 'axis', profParam.axis); + end + end + + % parameter QC variable and attributes + if (profParam.paramType ~= 'c') + if ~(strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + + profParamQcName = sprintf('%s_QC', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamQcName)) + + profParamQcVarId = netcdf.defVar(fCdf, profParamQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); + + netcdf.putAtt(fCdf, profParamQcVarId, 'long_name', 'quality flag'); + netcdf.putAtt(fCdf, profParamQcVarId, 'conventions', 'Argo reference table 2'); + netcdf.putAtt(fCdf, profParamQcVarId, '_FillValue', ' '); end end + end + + % parameter adjusted variable and attributes + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - % parameter variable and attributes - if (~var_is_present_dec_argo(fCdf, profParamName)) + profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjName)) - if (strcmp(profParamNcType, 'NC_DOUBLE')) - doubleTypeInFile = 1; - end if (paramWithSubLevels == 0) - profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); else - profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); + profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); end if (~isempty(profParam.longName)) - netcdf.putAtt(fCdf, profParamVarId, 'long_name', profParam.longName); + netcdf.putAtt(fCdf, profParamAdjVarId, 'long_name', profParam.longName); end if (~isempty(profParam.standardName)) - netcdf.putAtt(fCdf, profParamVarId, 'standard_name', profParam.standardName); + netcdf.putAtt(fCdf, profParamAdjVarId, 'standard_name', profParam.standardName); end if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamVarId, '_FillValue', profParam.fillValue); + netcdf.putAtt(fCdf, profParamAdjVarId, '_FillValue', profParam.fillValue); end if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamVarId, 'units', profParam.units); + netcdf.putAtt(fCdf, profParamAdjVarId, 'units', profParam.units); end if (~isempty(profParam.validMin)) - netcdf.putAtt(fCdf, profParamVarId, 'valid_min', profParam.validMin); + netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_min', profParam.validMin); end if (~isempty(profParam.validMax)) - netcdf.putAtt(fCdf, profParamVarId, 'valid_max', profParam.validMax); + netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_max', profParam.validMax); end if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamVarId, 'C_format', profParam.cFormat); + netcdf.putAtt(fCdf, profParamAdjVarId, 'C_format', profParam.cFormat); end if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamVarId, 'FORTRAN_format', profParam.fortranFormat); + netcdf.putAtt(fCdf, profParamAdjVarId, 'FORTRAN_format', profParam.fortranFormat); end if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamVarId, 'resolution', profParam.resolution); + netcdf.putAtt(fCdf, profParamAdjVarId, 'resolution', profParam.resolution); end if (~isempty(profParam.axis)) - netcdf.putAtt(fCdf, profParamVarId, 'axis', profParam.axis); + netcdf.putAtt(fCdf, profParamAdjVarId, 'axis', profParam.axis); end end - % parameter QC variable and attributes - if (profParam.paramType ~= 'c') - if ~(strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - - profParamQcName = sprintf('%s_QC', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamQcName)) - - profParamQcVarId = netcdf.defVar(fCdf, profParamQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); - - netcdf.putAtt(fCdf, profParamQcVarId, 'long_name', 'quality flag'); - netcdf.putAtt(fCdf, profParamQcVarId, 'conventions', 'Argo reference table 2'); - netcdf.putAtt(fCdf, profParamQcVarId, '_FillValue', ' '); - end - end + % parameter adjusted QC variable and attributes + profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjQcName)) + + profParamAdjQcVarId = netcdf.defVar(fCdf, profParamAdjQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); + + netcdf.putAtt(fCdf, profParamAdjQcVarId, 'long_name', 'quality flag'); + netcdf.putAtt(fCdf, profParamAdjQcVarId, 'conventions', 'Argo reference table 2'); + netcdf.putAtt(fCdf, profParamAdjQcVarId, '_FillValue', ' '); end - % parameter adjusted variable and attributes - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + % parameter adjusted error variable and attributes + profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjErrName)) - profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjName)) - - if (paramWithSubLevels == 0) - profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); - else - profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); - end - - if (~isempty(profParam.longName)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'long_name', profParam.longName); - end - if (~isempty(profParam.standardName)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'standard_name', profParam.standardName); - end - if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamAdjVarId, '_FillValue', profParam.fillValue); - end - if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'units', profParam.units); - end - if (~isempty(profParam.validMin)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_min', profParam.validMin); - end - if (~isempty(profParam.validMax)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_max', profParam.validMax); - end - if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'C_format', profParam.cFormat); - end - if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'FORTRAN_format', profParam.fortranFormat); - end - if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'resolution', profParam.resolution); - end - if (~isempty(profParam.axis)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'axis', profParam.axis); - end + if (paramWithSubLevels == 0) + profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + else + profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); end - % parameter adjusted QC variable and attributes - profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjQcName)) - - profParamAdjQcVarId = netcdf.defVar(fCdf, profParamAdjQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); - - netcdf.putAtt(fCdf, profParamAdjQcVarId, 'long_name', 'quality flag'); - netcdf.putAtt(fCdf, profParamAdjQcVarId, 'conventions', 'Argo reference table 2'); - netcdf.putAtt(fCdf, profParamAdjQcVarId, '_FillValue', ' '); + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'long_name', g_decArgo_longNameOfParamAdjErr); + if (~isempty(profParam.fillValue)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, '_FillValue', profParam.fillValue); end - - % parameter adjusted error variable and attributes - profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjErrName)) - - if (paramWithSubLevels == 0) - profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); - else - profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); - end - - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'long_name', g_decArgo_longNameOfParamAdjErr); - if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, '_FillValue', profParam.fillValue); - end - if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'units', profParam.units); - end - if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'C_format', profParam.cFormat); - end - if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'FORTRAN_format', profParam.fortranFormat); - end - if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'resolution', profParam.resolution); - end + if (~isempty(profParam.units)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'units', profParam.units); + end + if (~isempty(profParam.cFormat)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'C_format', profParam.cFormat); + end + if (~isempty(profParam.fortranFormat)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'FORTRAN_format', profParam.fortranFormat); + end + if (~isempty(profParam.resolution)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'resolution', profParam.resolution); end end end @@ -1072,105 +1070,101 @@ function create_nc_mono_prof_b_files_3_1( ... for idP = 1:nbProfToStore prof = tabProfiles(idProfInFile(idP)); - % core profiles are present in the b file as a 'default' parameter - if (~is_core_profile(prof) || (bFileNeeded == 1)) - - profPos = idP-1+profShiftIfNoPrimary; - - valueStr = sprintf('%d', g_decArgo_floatNum); - netcdf.putVar(fCdf, platformNumberVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('PROJECT_NAME', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, projectNameVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('PI_NAME', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, piNameVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); + profPos = idP-1+profShiftIfNoPrimary; + + valueStr = sprintf('%d', g_decArgo_floatNum); + netcdf.putVar(fCdf, platformNumberVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('PROJECT_NAME', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, projectNameVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('PI_NAME', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, piNameVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + parameterList = prof.paramList; + paramPos = 0; + for idParam = 1:length(parameterList) - parameterList = prof.paramList; - paramPos = 0; - for idParam = 1:length(parameterList) + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - valueStr = parameterList(idParam).name; - - if (length(valueStr) > paramNameLength) - fprintf('ERROR: Float #%d : NetCDF variable name %s too long (> %d) => name truncated\n', ... - g_decArgo_floatNum, valueStr, paramNameLength); - valueStr = valueStr(1:paramNameLength); - end - - netcdf.putVar(fCdf, stationParametersVarId, ... - fliplr([profPos paramPos 0]), fliplr([1 1 length(valueStr)]), valueStr'); - - netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos paramPos]), fliplr([1 1]), 'R'); - paramPos = paramPos + 1; + valueStr = parameterList(idParam).name; + + if (length(valueStr) > paramNameLength) + fprintf('ERROR: Float #%d : NetCDF variable name %s too long (> %d) => name truncated\n', ... + g_decArgo_floatNum, valueStr, paramNameLength); + valueStr = valueStr(1:paramNameLength); end + + netcdf.putVar(fCdf, stationParametersVarId, ... + fliplr([profPos paramPos 0]), fliplr([1 1 length(valueStr)]), valueStr'); + + netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos paramPos]), fliplr([1 1]), 'R'); + paramPos = paramPos + 1; end - - netcdf.putVar(fCdf, cycleNumberVarId, profPos, 1, outputCycleNumber); - - valueStr = ' '; - idVal = find(strcmp('DATA_CENTRE', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, dataCenterVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = '1A'; - netcdf.putVar(fCdf, dataStateIndicatorVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'R'); - - valueStr = get_platform_type(a_decoderId); - netcdf.putVar(fCdf, platformTypeVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('FLOAT_SERIAL_NO', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, floatSerialNoVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('FIRMWARE_VERSION', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, firmwareVersionVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = get_wmo_instrument_type(a_decoderId); - netcdf.putVar(fCdf, wmoInstTypeVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); end + + netcdf.putVar(fCdf, cycleNumberVarId, profPos, 1, outputCycleNumber); + + valueStr = ' '; + idVal = find(strcmp('DATA_CENTRE', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, dataCenterVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = '1A'; + netcdf.putVar(fCdf, dataStateIndicatorVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'R'); + + valueStr = get_platform_type(a_decoderId); + netcdf.putVar(fCdf, platformTypeVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('FLOAT_SERIAL_NO', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, floatSerialNoVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('FIRMWARE_VERSION', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, firmwareVersionVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = get_wmo_instrument_type(a_decoderId); + netcdf.putVar(fCdf, wmoInstTypeVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); end % copy existing history information @@ -1203,453 +1197,446 @@ function create_nc_mono_prof_b_files_3_1( ... for idP = 1:nbProfToStore prof = tabProfiles(idProfInFile(idP)); - % core profiles are present in the b file as a 'default' parameter - if (~is_core_profile(prof) || (bFileNeeded == 1)) - - profPos = idP-1+profShiftIfNoPrimary; - - if (VERBOSE_MODE == 2) - fprintf('Add profile #%d/%d data\n', ... - profPos, nbProfInFile); - end - - % profile direction - netcdf.putVar(fCdf, directionVarId, profPos, 1, prof.direction); - - % profile date - profDate = prof.date; - if (profDate ~= g_decArgo_dateDef) - netcdf.putVar(fCdf, juldVarId, profPos, 1, profDate); - if (isempty(prof.dateQc)) - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrNoQc); - else - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, prof.dateQc); - end - else - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrMissing); - end - - % profile location - profLocationDate = prof.locationDate; - profLocationLon = prof.locationLon; - profLocationLat = prof.locationLat; - profLocationQc = prof.locationQc; - profPosSystem = prof.posSystem; - if (profLocationDate ~= g_decArgo_dateDef) - netcdf.putVar(fCdf, juldLocationVarId, profPos, 1, profLocationDate); - netcdf.putVar(fCdf, latitudeVarId, profPos, 1, profLocationLat); - netcdf.putVar(fCdf, longitudeVarId, profPos, 1, profLocationLon); - netcdf.putVar(fCdf, positionQcVarId, profPos, 1, profLocationQc); + + profPos = idP-1+profShiftIfNoPrimary; + + if (VERBOSE_MODE == 2) + fprintf('Add profile #%d/%d data\n', ... + profPos, nbProfInFile); + end + + % profile direction + netcdf.putVar(fCdf, directionVarId, profPos, 1, prof.direction); + + % profile date + profDate = prof.date; + if (profDate ~= g_decArgo_dateDef) + netcdf.putVar(fCdf, juldVarId, profPos, 1, profDate); + if (isempty(prof.dateQc)) + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrNoQc); else - netcdf.putVar(fCdf, positionQcVarId, profPos, 1, g_decArgo_qcStrMissing); - end - netcdf.putVar(fCdf, positioningSystemVarId, fliplr([profPos 0]), fliplr([1 length(profPosSystem)]), profPosSystem'); - - % vertical sampling scheme - vertSampScheme = prof.vertSamplingScheme; - if (length(vertSampScheme) > verticalSamplingSchemeLength) - fprintf('WARNING: Float #%d Cycle #%d Profile #%d Output Cycle #%d: vertical sampling scheme too long (length = %d > %d) => vertical sampling scheme ''%s'' truncated to ''%s''\n', ... - g_decArgo_floatNum, cycleNumber, profileNumber, outputCycleNumber, ... - length(vertSampScheme), verticalSamplingSchemeLength, ... - vertSampScheme, ... - vertSampScheme(1:verticalSamplingSchemeLength)); - vertSampScheme = vertSampScheme(1:verticalSamplingSchemeLength); - end - netcdf.putVar(fCdf, verticalSamplingSchemeVarId, fliplr([profPos 0]), fliplr([1 length(vertSampScheme)]), vertSampScheme'); - - % configuration mission number - if (~isempty(prof.configMissionNumber)) - netcdf.putVar(fCdf, configMissionNumberVarId, profPos, 1, prof.configMissionNumber); + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, prof.dateQc); end + else + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrMissing); + end + + % profile location + profLocationDate = prof.locationDate; + profLocationLon = prof.locationLon; + profLocationLat = prof.locationLat; + profLocationQc = prof.locationQc; + profPosSystem = prof.posSystem; + if (profLocationDate ~= g_decArgo_dateDef) + netcdf.putVar(fCdf, juldLocationVarId, profPos, 1, profLocationDate); + netcdf.putVar(fCdf, latitudeVarId, profPos, 1, profLocationLat); + netcdf.putVar(fCdf, longitudeVarId, profPos, 1, profLocationLon); + netcdf.putVar(fCdf, positionQcVarId, profPos, 1, profLocationQc); + else + netcdf.putVar(fCdf, positionQcVarId, profPos, 1, g_decArgo_qcStrMissing); + end + netcdf.putVar(fCdf, positioningSystemVarId, fliplr([profPos 0]), fliplr([1 length(profPosSystem)]), profPosSystem'); + + % vertical sampling scheme + vertSampScheme = prof.vertSamplingScheme; + if (length(vertSampScheme) > verticalSamplingSchemeLength) + fprintf('WARNING: Float #%d Cycle #%d Profile #%d Output Cycle #%d: vertical sampling scheme too long (length = %d > %d) => vertical sampling scheme ''%s'' truncated to ''%s''\n', ... + g_decArgo_floatNum, cycleNumber, profileNumber, outputCycleNumber, ... + length(vertSampScheme), verticalSamplingSchemeLength, ... + vertSampScheme, ... + vertSampScheme(1:verticalSamplingSchemeLength)); + vertSampScheme = vertSampScheme(1:verticalSamplingSchemeLength); + end + netcdf.putVar(fCdf, verticalSamplingSchemeVarId, fliplr([profPos 0]), fliplr([1 length(vertSampScheme)]), vertSampScheme'); + + % configuration mission number + if (~isempty(prof.configMissionNumber)) + netcdf.putVar(fCdf, configMissionNumberVarId, profPos, 1, prof.configMissionNumber); + end + + % profile parameter data + parameterList = prof.paramList; + adjustedParamIdList = []; + paramPos = 0; + for idParam = 1:length(parameterList) - % profile parameter data - parameterList = prof.paramList; - adjustedParamIdList = []; - paramPos = 0; - for idParam = 1:length(parameterList) + if ((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) - if ((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) - - profParam = parameterList(idParam); + profParam = parameterList(idParam); + + % parameter variable and attributes + profParamName = profParam.name; + profParamVarId = netcdf.inqVarID(fCdf, profParamName); + + % parameter QC variable and attributes + profParamQcVarId = ''; + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profParamQcName = sprintf('%s_QC', profParam.name); + profParamQcVarId = netcdf.inqVarID(fCdf, profParamQcName); + end + + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + % parameter adjusted variable and attributes + profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); + profParamAdjVarId = netcdf.inqVarID(fCdf, profParamAdjName); - % parameter variable and attributes - profParamName = profParam.name; - profParamVarId = netcdf.inqVarID(fCdf, profParamName); + % parameter adjusted QC variable and attributes + profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); + profParamAdjQcVarId = netcdf.inqVarID(fCdf, profParamAdjQcName); - % parameter QC variable and attributes - profParamQcVarId = ''; - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profParamQcName = sprintf('%s_QC', profParam.name); - profParamQcVarId = netcdf.inqVarID(fCdf, profParamQcName); - end + % parameter adjusted error variable and attributes + profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); + profParamAdjErrVarId = netcdf.inqVarID(fCdf, profParamAdjErrName); + end + + % prof.data is empty in 'default' primary profiles + if (~isempty(prof.data)) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - % parameter adjusted variable and attributes - profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); - profParamAdjVarId = netcdf.inqVarID(fCdf, profParamAdjName); + % parameter data + if (isempty(prof.paramNumberWithSubLevels)) - % parameter adjusted QC variable and attributes - profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); - profParamAdjQcVarId = netcdf.inqVarID(fCdf, profParamAdjQcName); + % none of the profile parameters has sublevels + paramData = prof.data(:, idParam); + if (isempty(prof.dataQc)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + paramDataQc = prof.dataQc(:, idParam); + if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); + idNoDef = find(paramDataQc ~= g_decArgo_qcDef); + paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); + + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profQualityFlag = compute_profile_quality_flag(paramDataQcStr); + profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); + end + end + end - % parameter adjusted error variable and attributes - profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); - profParamAdjErrVarId = netcdf.inqVarID(fCdf, profParamAdjErrName); - end - - % prof.data is empty in 'default' primary profiles - if (~isempty(prof.data)) + if (prof.direction == 'A') + measIds = fliplr([1:length(paramData)]); + else + measIds = [1:length(paramData)]; + end + netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - % if it is a core profile, don't put any parameter data - if (~is_core_profile(prof)) - - % parameter data - if (isempty(prof.paramNumberWithSubLevels)) + if (~isempty(profParamQcVarId)) + netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramDataQcStr(measIds)); + end + + % parameter RT adjustment + if (adjustedProfilesList(idP) == 1) + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - % none of the profile parameters has sublevels - paramData = prof.data(:, idParam); - if (isempty(prof.dataQc)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - paramDataQc = prof.dataQc(:, idParam); - if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); - idNoDef = find(paramDataQc ~= g_decArgo_qcDef); - paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); - - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profQualityFlag = compute_profile_quality_flag(paramDataQcStr); - profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); - netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); - end - end - end + % process RT adjustment of this parameter + [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - if (prof.direction == 'A') - measIds = fliplr([1:length(paramData)]); + if (~isempty(paramAdjData)) + + adjustedParamIdList = [adjustedParamIdList paramPos]; + + % store parameter adjusted data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); + paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); else - measIds = [1:length(paramData)]; + % copy parameter data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); end - netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - - if (~isempty(profParamQcVarId)) - netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramDataQcStr(measIds)); + end + end + else + + % some profile parameters have sublevels + + % retrieve the column(s) associated with the parameter data + idF = find(prof.paramNumberWithSubLevels < idParam); + if (isempty(idF)) + firstCol = idParam; + else + firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); + end + + idF = find(prof.paramNumberWithSubLevels == idParam); + if (isempty(idF)) + lastCol = firstCol; + else + lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; + end + + paramData = prof.data(:, firstCol:lastCol); + if (isempty(prof.dataQc)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + if (size(paramData, 2) == 1) + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + for idL = 1: size(paramData, 1) + if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) + paramDataQcStr(idL) = g_decArgo_qcStrNoQc; + end end - - % parameter RT adjustment - if (adjustedProfilesList(idP) == 1) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - - % process RT adjustment of this parameter - [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - - if (~isempty(paramAdjData)) - - adjustedParamIdList = [adjustedParamIdList paramPos]; - - % store parameter adjusted data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); - paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); - else - % copy parameter data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); + end + else + paramDataQc = prof.dataQc(:, idParam); + if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + if (size(paramData, 2) == 1) + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + for idL = 1: size(paramData, 1) + if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) + paramDataQcStr(idL) = g_decArgo_qcStrNoQc; end end end else + paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); + idNoDef = find(paramDataQc ~= g_decArgo_qcDef); + paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); - % some profile parameters have sublevels - - % retrieve the column(s) associated with the parameter data - idF = find(prof.paramNumberWithSubLevels < idParam); - if (isempty(idF)) - firstCol = idParam; - else - firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profQualityFlag = compute_profile_quality_flag(paramDataQcStr); + profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); end - - idF = find(prof.paramNumberWithSubLevels == idParam); - if (isempty(idF)) - lastCol = firstCol; - else - lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; - end - - paramData = prof.data(:, firstCol:lastCol); - if (isempty(prof.dataQc)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - if (size(paramData, 2) == 1) - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - for idL = 1: size(paramData, 1) - if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) - paramDataQcStr(idL) = g_decArgo_qcStrNoQc; - end - end - end - else - paramDataQc = prof.dataQc(:, idParam); - if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - if (size(paramData, 2) == 1) - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - for idL = 1: size(paramData, 1) - if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) - paramDataQcStr(idL) = g_decArgo_qcStrNoQc; - end - end - end + end + end + + if (prof.direction == 'A') + measIds = fliplr([1:size(paramData, 1)]); + else + measIds = [1:size(paramData, 1)]; + end + if (size(paramData, 2) == 1) + + netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); + + if (~isempty(profParamQcVarId)) + netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); + end + + if (adjustedProfilesList(idP) == 1) + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + + % process RT adjustment of this parameter + [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); + + if (~isempty(paramAdjData)) + + adjustedParamIdList = [adjustedParamIdList paramPos]; + + % store parameter adjusted data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); + paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); else - paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); - idNoDef = find(paramDataQc ~= g_decArgo_qcDef); - paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); + % copy parameter data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profQualityFlag = compute_profile_quality_flag(paramDataQcStr); - profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); - netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); - end + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); end end - - if (prof.direction == 'A') - measIds = fliplr([1:size(paramData, 1)]); - else - measIds = [1:size(paramData, 1)]; - end - if (size(paramData, 2) == 1) - - netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); + end + else + + netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); + + if (~isempty(profParamQcVarId)) + netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); + end + + if (adjustedProfilesList(idP) == 1) + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - if (~isempty(profParamQcVarId)) - netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); - end + % process RT adjustment of this parameter + [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - if (adjustedProfilesList(idP) == 1) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - - % process RT adjustment of this parameter - [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - - if (~isempty(paramAdjData)) - - adjustedParamIdList = [adjustedParamIdList paramPos]; - - % store parameter adjusted data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); - paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); - else - % copy parameter data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); + if (~isempty(paramAdjData)) + + adjustedParamIdList = [adjustedParamIdList paramPos]; + + % store parameter adjusted data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramAdjData)]), paramAdjData(measIds, :)'); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); + for idL = 1: size(paramAdjData, 1) + if (~isempty(find(paramAdjData(idL, :) ~= profParam.fillValue, 1))) + paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; end end - end - else - - netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); - - if (~isempty(profParamQcVarId)) - netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); - end - - if (adjustedProfilesList(idP) == 1) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - - % process RT adjustment of this parameter - [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - - if (~isempty(paramAdjData)) - - adjustedParamIdList = [adjustedParamIdList paramPos]; - - % store parameter adjusted data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramAdjData)]), paramAdjData(measIds, :)'); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); - for idL = 1: size(paramAdjData, 1) - if (~isempty(find(paramAdjData(idL, :) ~= profParam.fillValue, 1))) - paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; - end - end - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramAdjData, 1)]), paramAdjDataQcStr(measIds)); - else - % copy parameter data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - for idL = 1: size(paramData, 1) - if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) - paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; - end - end - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramData, 1)]), paramAdjDataQcStr(measIds)); + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramAdjData, 1)]), paramAdjDataQcStr(measIds)); + else + % copy parameter data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + for idL = 1: size(paramData, 1) + if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) + paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; end end + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramData, 1)]), paramAdjDataQcStr(measIds)); end end end end end - paramPos = paramPos + 1; end + paramPos = paramPos + 1; + end + end + + if (adjustedProfilesList(idP) == 1) + netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'A'); + for id = 1:length(adjustedParamIdList) + netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos adjustedParamIdList(id)]), fliplr([1 1]), 'A'); end - if (adjustedProfilesList(idP) == 1) - netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'A'); - for id = 1:length(adjustedParamIdList) - netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos adjustedParamIdList(id)]), fliplr([1 1]), 'A'); - end - - % process calibration information - idVal = find(strcmp('CALIB_RT_PARAMETER', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData) && isstruct(metaData)) - tabParam = unique(struct2cell(metaData)); - idDel = []; - for idParam = 1:length(tabParam) - param = tabParam{idParam}; - idPosParam = find(strcmp({parameterList.name}, param) == 1); - paramTypeList = [parameterList.paramType]; - if (isempty(idPosParam) || ... - ~((paramTypeList(idPosParam) ~= 'c') || ... - strcmp(param, 'PRES'))) - idDel = [idDel idParam]; - end + % process calibration information + idVal = find(strcmp('CALIB_RT_PARAMETER', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData) && isstruct(metaData)) + tabParam = unique(struct2cell(metaData)); + idDel = []; + for idParam = 1:length(tabParam) + param = tabParam{idParam}; + idPosParam = find(strcmp({parameterList.name}, param) == 1); + paramTypeList = [parameterList.paramType]; + if (isempty(idPosParam) || ... + ~((paramTypeList(idPosParam) ~= 'c') || ... + strcmp(param, 'PRES'))) + idDel = [idDel idParam]; end - tabParam(idDel) = []; - tabId = []; - tabEquation = []; - tabCoefficient = []; - tabComment = []; - tabDate = []; - for idParam = 1:length(tabParam) - param = tabParam{idParam}; - fieldNames = fields(metaData); - tab = []; - for idF = 1:length(fieldNames) - fieldName = fieldNames{idF}; - if (strcmp(metaData.(fieldName), param) == 1) - idPos = strfind(fieldName, '_'); - posNum = str2num(fieldName(idPos(end)+1:end)); - tab = [tab posNum]; - end + end + tabParam(idDel) = []; + tabId = []; + tabEquation = []; + tabCoefficient = []; + tabComment = []; + tabDate = []; + for idParam = 1:length(tabParam) + param = tabParam{idParam}; + fieldNames = fields(metaData); + tab = []; + for idF = 1:length(fieldNames) + fieldName = fieldNames{idF}; + if (strcmp(metaData.(fieldName), param) == 1) + idPos = strfind(fieldName, '_'); + posNum = str2num(fieldName(idPos(end)+1:end)); + tab = [tab posNum]; end - tabId{idParam} = tab; end - - idVal = find(strcmp('CALIB_RT_EQUATION', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - equation = []; - tab = tabId{idParam}; - for id = 1:length(tab) - eq = ''; - if (isfield(metaData, ['CALIB_RT_EQUATION_' num2str(tab(id))])) - eq = metaData.(['CALIB_RT_EQUATION_' num2str(tab(id))]); - end - equation{id} = eq; + tabId{idParam} = tab; + end + + idVal = find(strcmp('CALIB_RT_EQUATION', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + equation = []; + tab = tabId{idParam}; + for id = 1:length(tab) + eq = ''; + if (isfield(metaData, ['CALIB_RT_EQUATION_' num2str(tab(id))])) + eq = metaData.(['CALIB_RT_EQUATION_' num2str(tab(id))]); end - tabEquation{idParam} = equation; + equation{id} = eq; end + tabEquation{idParam} = equation; end end - - idVal = find(strcmp('CALIB_RT_COEFFICIENT', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - coefficient = []; - tab = tabId{idParam}; - for id = 1:length(tab) - coef = ''; - if (isfield(metaData, ['CALIB_RT_COEFFICIENT_' num2str(tab(id))])) - coef = metaData.(['CALIB_RT_COEFFICIENT_' num2str(tab(id))]); - end - coefficient{id} = coef; + end + + idVal = find(strcmp('CALIB_RT_COEFFICIENT', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + coefficient = []; + tab = tabId{idParam}; + for id = 1:length(tab) + coef = ''; + if (isfield(metaData, ['CALIB_RT_COEFFICIENT_' num2str(tab(id))])) + coef = metaData.(['CALIB_RT_COEFFICIENT_' num2str(tab(id))]); end - tabCoefficient{idParam} = coefficient; + coefficient{id} = coef; end + tabCoefficient{idParam} = coefficient; end end - - idVal = find(strcmp('CALIB_RT_COMMENT', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - comment = []; - tab = tabId{idParam}; - for id = 1:length(tab) - com = ''; - if (isfield(metaData, ['CALIB_RT_COMMENT_' num2str(tab(id))])) - com = metaData.(['CALIB_RT_COMMENT_' num2str(tab(id))]); - end - comment{id} = com; + end + + idVal = find(strcmp('CALIB_RT_COMMENT', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + comment = []; + tab = tabId{idParam}; + for id = 1:length(tab) + com = ''; + if (isfield(metaData, ['CALIB_RT_COMMENT_' num2str(tab(id))])) + com = metaData.(['CALIB_RT_COMMENT_' num2str(tab(id))]); end - tabComment{idParam} = comment; + comment{id} = com; end + tabComment{idParam} = comment; end end - - idVal = find(strcmp('CALIB_RT_DATE', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - dates = []; - tab = tabId{idParam}; - for id = 1:length(tab) - dat = ''; - if (isfield(metaData, ['CALIB_RT_DATE_' num2str(tab(id))])) - dat = metaData.(['CALIB_RT_DATE_' num2str(tab(id))]); - end - dates{id} = dat; + end + + idVal = find(strcmp('CALIB_RT_DATE', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + dates = []; + tab = tabId{idParam}; + for id = 1:length(tab) + dat = ''; + if (isfield(metaData, ['CALIB_RT_DATE_' num2str(tab(id))])) + dat = metaData.(['CALIB_RT_DATE_' num2str(tab(id))]); end - tabDate{idParam} = dates; + dates{id} = dat; end + tabDate{idParam} = dates; end end - - % store calibration information for this profile - profCalibInfo = []; - profCalibInfo.profId = idP; - profCalibInfo.param = tabParam; - profCalibInfo.equation = tabEquation; - profCalibInfo.coefficient = tabCoefficient; - profCalibInfo.comment = tabComment; - profCalibInfo.date = tabDate; - calibInfo{end+1} = profCalibInfo; end + + % store calibration information for this profile + profCalibInfo = []; + profCalibInfo.profId = idP; + profCalibInfo.param = tabParam; + profCalibInfo.equation = tabEquation; + profCalibInfo.coefficient = tabCoefficient; + profCalibInfo.comment = tabComment; + profCalibInfo.date = tabDate; + calibInfo{end+1} = profCalibInfo; end end end @@ -1794,26 +1781,24 @@ function create_nc_mono_prof_b_files_3_1( ... ncParamlist = repmat({''}, nbProfToStore, nbProfParam); for idP = 1:nbProfToStore prof = tabProfiles(idProfInFile(idP)); - if (~is_core_profile(prof)) - parameterList = prof.paramList; - profPos = idP-1+profShiftIfNoPrimary; - paramPos = 0; - for idParam = 1:length(parameterList) + parameterList = prof.paramList; + profPos = idP-1+profShiftIfNoPrimary; + paramPos = 0; + for idParam = 1:length(parameterList) + + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - valueStr = parameterList(idParam).name; - - for idCalib = 1:nbCalib - netcdf.putVar(fCdf, parameterVarId, ... - fliplr([profPos idCalib-1 paramPos 0]), fliplr([1 1 1 length(valueStr)]), valueStr'); - end - paramPos = paramPos + 1; - ncParamlist(idP, paramPos) = {valueStr}; + valueStr = parameterList(idParam).name; + + for idCalib = 1:nbCalib + netcdf.putVar(fCdf, parameterVarId, ... + fliplr([profPos idCalib-1 paramPos 0]), fliplr([1 1 1 length(valueStr)]), valueStr'); end + paramPos = paramPos + 1; + ncParamlist(idP, paramPos) = {valueStr}; end end end diff --git a/decArgo_soft/soft/sub/create_nc_multi_prof_b_file_3_1.m b/decArgo_soft/soft/sub/create_nc_multi_prof_b_file_3_1.m index 5d733906..757ef4e3 100644 --- a/decArgo_soft/soft/sub/create_nc_multi_prof_b_file_3_1.m +++ b/decArgo_soft/soft/sub/create_nc_multi_prof_b_file_3_1.m @@ -100,6 +100,19 @@ function create_nc_multi_prof_b_file_3_1( ... return; end +% check if there is at least one B profile +bFileNeeded = 0; +for idProf = 1:length(a_tabProfiles) + profile = a_tabProfiles(idProf); + if (~is_core_profile(profile)) + bFileNeeded = 1; + break; + end +end +if (bFileNeeded == 0) + return; +end + % create the order to process profiles, the profile parameters list and compute % the number of levels and sublevels outputCycleNumberMin = min(profInfo(:, 1)); @@ -124,32 +137,29 @@ function create_nc_multi_prof_b_file_3_1( ... prof = a_tabProfiles(idProf(idP)); profIdList = [profIdList idProf(idP)]; - if (~is_core_profile(prof)) - - parameterList = prof.paramList; - profileData = prof.data; - - for idParam = 1:length(parameterList) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - profParamName = [profParamName; {parameterList(idParam).name}]; - paramNameOfProf = [paramNameOfProf; {parameterList(idParam).name}]; - nbProfLevels = max(nbProfLevels, size(profileData, 1)); - - if (~isempty(prof.paramNumberWithSubLevels)) - idF = find(prof.paramNumberWithSubLevels == idParam); - if (~isempty(idF)) - profSubLevels = [profSubLevels prof.paramNumberOfSubLevels(idF)]; - paramNameSubLevels = [paramNameSubLevels {parameterList(idParam).name}]; - end + parameterList = prof.paramList; + profileData = prof.data; + + for idParam = 1:length(parameterList) + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) + + profParamName = [profParamName; {parameterList(idParam).name}]; + paramNameOfProf = [paramNameOfProf; {parameterList(idParam).name}]; + nbProfLevels = max(nbProfLevels, size(profileData, 1)); + + if (~isempty(prof.paramNumberWithSubLevels)) + idF = find(prof.paramNumberWithSubLevels == idParam); + if (~isempty(idF)) + profSubLevels = [profSubLevels prof.paramNumberOfSubLevels(idF)]; + paramNameSubLevels = [paramNameSubLevels {parameterList(idParam).name}]; end end end - nbProfParam = max(nbProfParam, length(unique(paramNameOfProf))); end + nbProfParam = max(nbProfParam, length(unique(paramNameOfProf))); end end end @@ -484,173 +494,170 @@ function create_nc_multi_prof_b_file_3_1( ... for idP = 1:length(a_tabProfiles) prof = a_tabProfiles(profIdList(idP)); - if (~is_core_profile(prof)) + % profile parameter data + parameterList = prof.paramList; + for idParam = 1:length(parameterList) - % profile parameter data - parameterList = prof.paramList; - for idParam = 1:length(parameterList) + if ((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) + + profParam = parameterList(idParam); + profParamName = profParam.name; + profParamNcType = profParam.paramNcType; - if ((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) + % find if this parameter has sublevels + paramWithSubLevels = 0; + if (~isempty(prof.paramNumberWithSubLevels)) + idF = find(prof.paramNumberWithSubLevels == idParam); + if (~isempty(idF)) + paramWithSubLevels = 1; + paramSubLevelsDim = dimSubLevels(find(strcmp(profParamName, paramSubLevels), 1)); + % nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', prof.paramNumberOfSubLevels(idF))); + nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', paramSubLevelsDim)); + end + end + + % parameter variable and attributes + if (~var_is_present_dec_argo(fCdf, profParamName)) - profParam = parameterList(idParam); - profParamName = profParam.name; - profParamNcType = profParam.paramNcType; - - % find if this parameter has sublevels - paramWithSubLevels = 0; - if (~isempty(prof.paramNumberWithSubLevels)) - idF = find(prof.paramNumberWithSubLevels == idParam); - if (~isempty(idF)) - paramWithSubLevels = 1; - paramSubLevelsDim = dimSubLevels(find(strcmp(profParamName, paramSubLevels), 1)); - % nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', prof.paramNumberOfSubLevels(idF))); - nValuesDimId = netcdf.inqDimID(fCdf, sprintf('N_VALUES%d', paramSubLevelsDim)); - end + if (strcmp(profParamNcType, 'NC_DOUBLE')) + doubleTypeInFile = 1; + end + if (paramWithSubLevels == 0) + profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + else + profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); + end + + if (~isempty(profParam.longName)) + netcdf.putAtt(fCdf, profParamVarId, 'long_name', profParam.longName); + end + if (~isempty(profParam.standardName)) + netcdf.putAtt(fCdf, profParamVarId, 'standard_name', profParam.standardName); + end + if (~isempty(profParam.fillValue)) + netcdf.putAtt(fCdf, profParamVarId, '_FillValue', profParam.fillValue); + end + if (~isempty(profParam.units)) + netcdf.putAtt(fCdf, profParamVarId, 'units', profParam.units); + end + if (~isempty(profParam.validMin)) + netcdf.putAtt(fCdf, profParamVarId, 'valid_min', profParam.validMin); + end + if (~isempty(profParam.validMax)) + netcdf.putAtt(fCdf, profParamVarId, 'valid_max', profParam.validMax); end - - % parameter variable and attributes - if (~var_is_present_dec_argo(fCdf, profParamName)) + if (~isempty(profParam.cFormat)) + netcdf.putAtt(fCdf, profParamVarId, 'C_format', profParam.cFormat); + end + if (~isempty(profParam.fortranFormat)) + netcdf.putAtt(fCdf, profParamVarId, 'FORTRAN_format', profParam.fortranFormat); + end + if (~isempty(profParam.resolution)) + netcdf.putAtt(fCdf, profParamVarId, 'resolution', profParam.resolution); + end + if (~isempty(profParam.axis)) + netcdf.putAtt(fCdf, profParamVarId, 'axis', profParam.axis); + end + end + + % parameter QC variable and attributes + if (profParam.paramType ~= 'c') + if ~(strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) - if (strcmp(profParamNcType, 'NC_DOUBLE')) - doubleTypeInFile = 1; + profParamQcName = sprintf('%s_QC', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamQcName)) + + profParamQcVarId = netcdf.defVar(fCdf, profParamQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); + + netcdf.putAtt(fCdf, profParamQcVarId, 'long_name', 'quality flag'); + netcdf.putAtt(fCdf, profParamQcVarId, 'conventions', 'Argo reference table 2'); + netcdf.putAtt(fCdf, profParamQcVarId, '_FillValue', ' '); end + end + end + + % parameter adjusted variable and attributes + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + + profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjName)) + if (paramWithSubLevels == 0) - profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); else - profParamVarId = netcdf.defVar(fCdf, profParamName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); + profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); end if (~isempty(profParam.longName)) - netcdf.putAtt(fCdf, profParamVarId, 'long_name', profParam.longName); + netcdf.putAtt(fCdf, profParamAdjVarId, 'long_name', profParam.longName); end if (~isempty(profParam.standardName)) - netcdf.putAtt(fCdf, profParamVarId, 'standard_name', profParam.standardName); + netcdf.putAtt(fCdf, profParamAdjVarId, 'standard_name', profParam.standardName); end if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamVarId, '_FillValue', profParam.fillValue); + netcdf.putAtt(fCdf, profParamAdjVarId, '_FillValue', profParam.fillValue); end if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamVarId, 'units', profParam.units); + netcdf.putAtt(fCdf, profParamAdjVarId, 'units', profParam.units); end if (~isempty(profParam.validMin)) - netcdf.putAtt(fCdf, profParamVarId, 'valid_min', profParam.validMin); + netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_min', profParam.validMin); end if (~isempty(profParam.validMax)) - netcdf.putAtt(fCdf, profParamVarId, 'valid_max', profParam.validMax); + netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_max', profParam.validMax); end if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamVarId, 'C_format', profParam.cFormat); + netcdf.putAtt(fCdf, profParamAdjVarId, 'C_format', profParam.cFormat); end if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamVarId, 'FORTRAN_format', profParam.fortranFormat); + netcdf.putAtt(fCdf, profParamAdjVarId, 'FORTRAN_format', profParam.fortranFormat); end if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamVarId, 'resolution', profParam.resolution); + netcdf.putAtt(fCdf, profParamAdjVarId, 'resolution', profParam.resolution); end if (~isempty(profParam.axis)) - netcdf.putAtt(fCdf, profParamVarId, 'axis', profParam.axis); + netcdf.putAtt(fCdf, profParamAdjVarId, 'axis', profParam.axis); end end - % parameter QC variable and attributes - if (profParam.paramType ~= 'c') - if ~(strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - - profParamQcName = sprintf('%s_QC', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamQcName)) - - profParamQcVarId = netcdf.defVar(fCdf, profParamQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); - - netcdf.putAtt(fCdf, profParamQcVarId, 'long_name', 'quality flag'); - netcdf.putAtt(fCdf, profParamQcVarId, 'conventions', 'Argo reference table 2'); - netcdf.putAtt(fCdf, profParamQcVarId, '_FillValue', ' '); - end - end + % parameter adjusted QC variable and attributes + profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjQcName)) + + profParamAdjQcVarId = netcdf.defVar(fCdf, profParamAdjQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); + + netcdf.putAtt(fCdf, profParamAdjQcVarId, 'long_name', 'quality flag'); + netcdf.putAtt(fCdf, profParamAdjQcVarId, 'conventions', 'Argo reference table 2'); + netcdf.putAtt(fCdf, profParamAdjQcVarId, '_FillValue', ' '); end - % parameter adjusted variable and attributes - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + % parameter adjusted error variable and attributes + profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); + if (~var_is_present_dec_argo(fCdf, profParamAdjErrName)) - profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjName)) - - if (paramWithSubLevels == 0) - profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); - else - profParamAdjVarId = netcdf.defVar(fCdf, profParamAdjName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); - end - - if (~isempty(profParam.longName)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'long_name', profParam.longName); - end - if (~isempty(profParam.standardName)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'standard_name', profParam.standardName); - end - if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamAdjVarId, '_FillValue', profParam.fillValue); - end - if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'units', profParam.units); - end - if (~isempty(profParam.validMin)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_min', profParam.validMin); - end - if (~isempty(profParam.validMax)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'valid_max', profParam.validMax); - end - if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'C_format', profParam.cFormat); - end - if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'FORTRAN_format', profParam.fortranFormat); - end - if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'resolution', profParam.resolution); - end - if (~isempty(profParam.axis)) - netcdf.putAtt(fCdf, profParamAdjVarId, 'axis', profParam.axis); - end + if (paramWithSubLevels == 0) + profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); + else + profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); end - % parameter adjusted QC variable and attributes - profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjQcName)) - - profParamAdjQcVarId = netcdf.defVar(fCdf, profParamAdjQcName, 'NC_CHAR', fliplr([nProfDimId nLevelsDimId])); - - netcdf.putAtt(fCdf, profParamAdjQcVarId, 'long_name', 'quality flag'); - netcdf.putAtt(fCdf, profParamAdjQcVarId, 'conventions', 'Argo reference table 2'); - netcdf.putAtt(fCdf, profParamAdjQcVarId, '_FillValue', ' '); + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'long_name', g_decArgo_longNameOfParamAdjErr); + if (~isempty(profParam.fillValue)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, '_FillValue', profParam.fillValue); end - - % parameter adjusted error variable and attributes - profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); - if (~var_is_present_dec_argo(fCdf, profParamAdjErrName)) - - if (paramWithSubLevels == 0) - profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId])); - else - profParamAdjErrVarId = netcdf.defVar(fCdf, profParamAdjErrName, profParamNcType, fliplr([nProfDimId nLevelsDimId nValuesDimId])); - end - - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'long_name', g_decArgo_longNameOfParamAdjErr); - if (~isempty(profParam.fillValue)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, '_FillValue', profParam.fillValue); - end - if (~isempty(profParam.units)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'units', profParam.units); - end - if (~isempty(profParam.cFormat)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'C_format', profParam.cFormat); - end - if (~isempty(profParam.fortranFormat)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'FORTRAN_format', profParam.fortranFormat); - end - if (~isempty(profParam.resolution)) - netcdf.putAtt(fCdf, profParamAdjErrVarId, 'resolution', profParam.resolution); - end + if (~isempty(profParam.units)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'units', profParam.units); + end + if (~isempty(profParam.cFormat)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'C_format', profParam.cFormat); + end + if (~isempty(profParam.fortranFormat)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'FORTRAN_format', profParam.fortranFormat); + end + if (~isempty(profParam.resolution)) + netcdf.putAtt(fCdf, profParamAdjErrVarId, 'resolution', profParam.resolution); end end end @@ -754,102 +761,100 @@ function create_nc_multi_prof_b_file_3_1( ... % create profile variables for idP = 1:length(a_tabProfiles) prof = a_tabProfiles(profIdList(idP)); - if (~is_core_profile(prof)) - - profPos = idP-1; - - valueStr = sprintf('%d', g_decArgo_floatNum); - netcdf.putVar(fCdf, platformNumberVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('PROJECT_NAME', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, projectNameVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('PI_NAME', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, piNameVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); + + profPos = idP-1; + + valueStr = sprintf('%d', g_decArgo_floatNum); + netcdf.putVar(fCdf, platformNumberVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('PROJECT_NAME', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, projectNameVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('PI_NAME', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, piNameVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + parameterList = prof.paramList; + paramPos = 0; + for idParam = 1:length(parameterList) - parameterList = prof.paramList; - paramPos = 0; - for idParam = 1:length(parameterList) + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - valueStr = parameterList(idParam).name; - - if (length(valueStr) > paramNameLength) - fprintf('ERROR: Float #%d : NetCDF variable name %s too long (> %d) => name truncated\n', ... - g_decArgo_floatNum, valueStr, paramNameLength); - valueStr = valueStr(1:paramNameLength); - end - - netcdf.putVar(fCdf, stationParametersVarId, ... - fliplr([profPos paramPos 0]), fliplr([1 1 length(valueStr)]), valueStr'); - - netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos paramPos]), fliplr([1 1]), 'R'); - paramPos = paramPos + 1; + valueStr = parameterList(idParam).name; + + if (length(valueStr) > paramNameLength) + fprintf('ERROR: Float #%d : NetCDF variable name %s too long (> %d) => name truncated\n', ... + g_decArgo_floatNum, valueStr, paramNameLength); + valueStr = valueStr(1:paramNameLength); end + + netcdf.putVar(fCdf, stationParametersVarId, ... + fliplr([profPos paramPos 0]), fliplr([1 1 length(valueStr)]), valueStr'); + + netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos paramPos]), fliplr([1 1]), 'R'); + paramPos = paramPos + 1; end - - valueStr = ' '; - idVal = find(strcmp('DATA_CENTRE', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, dataCenterVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = '1A'; - netcdf.putVar(fCdf, dataStateIndicatorVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'R'); - - valueStr = get_platform_type(a_decoderId); - netcdf.putVar(fCdf, platformTypeVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('FLOAT_SERIAL_NO', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, floatSerialNoVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = ' '; - idVal = find(strcmp('FIRMWARE_VERSION', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - valueStr = char(a_metaDataFromJson{idVal+1}); - end - netcdf.putVar(fCdf, firmwareVersionVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); - - valueStr = get_wmo_instrument_type(a_decoderId); - netcdf.putVar(fCdf, wmoInstTypeVarId, ... - fliplr([profPos 0]), ... - fliplr([1 length(valueStr)]), valueStr'); end + + valueStr = ' '; + idVal = find(strcmp('DATA_CENTRE', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, dataCenterVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = '1A'; + netcdf.putVar(fCdf, dataStateIndicatorVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'R'); + + valueStr = get_platform_type(a_decoderId); + netcdf.putVar(fCdf, platformTypeVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('FLOAT_SERIAL_NO', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, floatSerialNoVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = ' '; + idVal = find(strcmp('FIRMWARE_VERSION', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + valueStr = char(a_metaDataFromJson{idVal+1}); + end + netcdf.putVar(fCdf, firmwareVersionVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); + + valueStr = get_wmo_instrument_type(a_decoderId); + netcdf.putVar(fCdf, wmoInstTypeVarId, ... + fliplr([profPos 0]), ... + fliplr([1 length(valueStr)]), valueStr'); end % copy existing history information @@ -870,7 +875,7 @@ function create_nc_multi_prof_b_file_3_1( ... g_decArgo_floatNum, size(histoInstitution, 2), nbProfInFile, ncPathFileName); end end - + % create the list of RT adjusted profiles adjustedProfilesList = zeros(length(a_tabProfiles), 1); for idP = 1:length(a_tabProfiles) @@ -884,190 +889,201 @@ function create_nc_multi_prof_b_file_3_1( ... prof = a_tabProfiles(profIdList(idP)); - if (~is_core_profile(prof)) - - profPos = idP-1; - - if (VERBOSE_MODE == 2) - fprintf('Add profile #%d/%d data\n', profPos, length(a_tabProfiles)); - end - - % cycle number - netcdf.putVar(fCdf, cycleNumberVarId, profPos, 1, prof.outputCycleNumber); - - % profile direction - netcdf.putVar(fCdf, directionVarId, profPos, 1, prof.direction); - - % profile date - profDate = prof.date; - if (profDate ~= g_decArgo_dateDef) - netcdf.putVar(fCdf, juldVarId, profPos, 1, profDate); - if (isempty(prof.dateQc)) - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrNoQc); - else - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, prof.dateQc); - end - else - netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrMissing); - end - - % profile location - profLocationDate = prof.locationDate; - profLocationLon = prof.locationLon; - profLocationLat = prof.locationLat; - profLocationQc = prof.locationQc; - profPosSystem = prof.posSystem; - if (profLocationDate ~= g_decArgo_dateDef) - netcdf.putVar(fCdf, juldLocationVarId, profPos, 1, profLocationDate); - netcdf.putVar(fCdf, latitudeVarId, profPos, 1, profLocationLat); - netcdf.putVar(fCdf, longitudeVarId, profPos, 1, profLocationLon); - netcdf.putVar(fCdf, positionQcVarId, profPos, 1, profLocationQc); + profPos = idP-1; + + if (VERBOSE_MODE == 2) + fprintf('Add profile #%d/%d data\n', profPos, length(a_tabProfiles)); + end + + % cycle number + netcdf.putVar(fCdf, cycleNumberVarId, profPos, 1, prof.outputCycleNumber); + + % profile direction + netcdf.putVar(fCdf, directionVarId, profPos, 1, prof.direction); + + % profile date + profDate = prof.date; + if (profDate ~= g_decArgo_dateDef) + netcdf.putVar(fCdf, juldVarId, profPos, 1, profDate); + if (isempty(prof.dateQc)) + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrNoQc); else - netcdf.putVar(fCdf, positionQcVarId, profPos, 1, g_decArgo_qcStrMissing); - end - netcdf.putVar(fCdf, positioningSystemVarId, fliplr([profPos 0]), fliplr([1 length(profPosSystem)]), profPosSystem'); - - % vertical sampling scheme - vertSampScheme = prof.vertSamplingScheme; - if (length(vertSampScheme) > verticalSamplingSchemeLength) - fprintf('WARNING: Float #%d Cycle #%d Profile #%d Output Cycle #%d: vertical sampling scheme too long (length = %d > %d) => vertical sampling scheme ''%s'' truncated to ''%s''\n', ... - g_decArgo_floatNum, prof.cycleNumber, prof.profileNumber, prof.outputCycleNumber, ... - length(vertSampScheme), verticalSamplingSchemeLength, ... - vertSampScheme, ... - vertSampScheme(1:verticalSamplingSchemeLength)); - vertSampScheme = vertSampScheme(1:verticalSamplingSchemeLength); - end - netcdf.putVar(fCdf, verticalSamplingSchemeVarId, fliplr([profPos 0]), fliplr([1 length(vertSampScheme)]), vertSampScheme'); - - % configuration mission number - if (~isempty(prof.configMissionNumber)) - netcdf.putVar(fCdf, configMissionNumberVarId, profPos, 1, prof.configMissionNumber); + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, prof.dateQc); end + else + netcdf.putVar(fCdf, juldQcVarId, profPos, 1, g_decArgo_qcStrMissing); + end + + % profile location + profLocationDate = prof.locationDate; + profLocationLon = prof.locationLon; + profLocationLat = prof.locationLat; + profLocationQc = prof.locationQc; + profPosSystem = prof.posSystem; + if (profLocationDate ~= g_decArgo_dateDef) + netcdf.putVar(fCdf, juldLocationVarId, profPos, 1, profLocationDate); + netcdf.putVar(fCdf, latitudeVarId, profPos, 1, profLocationLat); + netcdf.putVar(fCdf, longitudeVarId, profPos, 1, profLocationLon); + netcdf.putVar(fCdf, positionQcVarId, profPos, 1, profLocationQc); + else + netcdf.putVar(fCdf, positionQcVarId, profPos, 1, g_decArgo_qcStrMissing); + end + netcdf.putVar(fCdf, positioningSystemVarId, fliplr([profPos 0]), fliplr([1 length(profPosSystem)]), profPosSystem'); + + % vertical sampling scheme + vertSampScheme = prof.vertSamplingScheme; + if (length(vertSampScheme) > verticalSamplingSchemeLength) + fprintf('WARNING: Float #%d Cycle #%d Profile #%d Output Cycle #%d: vertical sampling scheme too long (length = %d > %d) => vertical sampling scheme ''%s'' truncated to ''%s''\n', ... + g_decArgo_floatNum, prof.cycleNumber, prof.profileNumber, prof.outputCycleNumber, ... + length(vertSampScheme), verticalSamplingSchemeLength, ... + vertSampScheme, ... + vertSampScheme(1:verticalSamplingSchemeLength)); + vertSampScheme = vertSampScheme(1:verticalSamplingSchemeLength); + end + netcdf.putVar(fCdf, verticalSamplingSchemeVarId, fliplr([profPos 0]), fliplr([1 length(vertSampScheme)]), vertSampScheme'); + + % configuration mission number + if (~isempty(prof.configMissionNumber)) + netcdf.putVar(fCdf, configMissionNumberVarId, profPos, 1, prof.configMissionNumber); + end + + % profile parameter data + parameterList = prof.paramList; + adjustedParamIdList = []; + paramPos = 0; + for idParam = 1:length(parameterList) - % profile parameter data - parameterList = prof.paramList; - adjustedParamIdList = []; - paramPos = 0; - for idParam = 1:length(parameterList) + if ((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) + + profParam = parameterList(idParam); + + % parameter variable and attributes + + profParamName = profParam.name; + profParamVarId = netcdf.inqVarID(fCdf, profParamName); - if ((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) + % parameter QC variable and attributes + profParamQcVarId = ''; + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profParamQcName = sprintf('%s_QC', profParam.name); + profParamQcVarId = netcdf.inqVarID(fCdf, profParamQcName); + end + + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + % parameter adjusted variable and attributes + profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); + profParamAdjVarId = netcdf.inqVarID(fCdf, profParamAdjName); - profParam = parameterList(idParam); + % parameter adjusted QC variable and attributes + profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); + profParamAdjQcVarId = netcdf.inqVarID(fCdf, profParamAdjQcName); - % parameter variable and attributes + % parameter adjusted error variable and attributes + profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); + profParamAdjErrVarId = netcdf.inqVarID(fCdf, profParamAdjErrName); + end + + % parameter data + if (isempty(prof.paramNumberWithSubLevels)) - profParamName = profParam.name; - profParamVarId = netcdf.inqVarID(fCdf, profParamName); + % none of the profile parameters has sublevels + paramData = prof.data(:, idParam); + if (isempty(prof.dataQc)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + paramDataQc = prof.dataQc(:, idParam); + if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); + idNoDef = find(paramDataQc ~= g_decArgo_qcDef); + paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); + + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profQualityFlag = compute_profile_quality_flag(paramDataQcStr); + profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); + end + end + end - % parameter QC variable and attributes - profParamQcVarId = ''; - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profParamQcName = sprintf('%s_QC', profParam.name); - profParamQcVarId = netcdf.inqVarID(fCdf, profParamQcName); + if (prof.direction == 'A') + measIds = fliplr([1:length(paramData)]); + else + measIds = [1:length(paramData)]; end + netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - % parameter adjusted variable and attributes - profParamAdjName = sprintf('%s_ADJUSTED', profParam.name); - profParamAdjVarId = netcdf.inqVarID(fCdf, profParamAdjName); - - % parameter adjusted QC variable and attributes - profParamAdjQcName = sprintf('%s_ADJUSTED_QC', profParam.name); - profParamAdjQcVarId = netcdf.inqVarID(fCdf, profParamAdjQcName); - - % parameter adjusted error variable and attributes - profParamAdjErrName = sprintf('%s_ADJUSTED_ERROR', profParam.name); - profParamAdjErrVarId = netcdf.inqVarID(fCdf, profParamAdjErrName); + if (~isempty(profParamQcVarId)) + netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramDataQcStr(measIds)); end - % parameter data - if (isempty(prof.paramNumberWithSubLevels)) - - % none of the profile parameters has sublevels - paramData = prof.data(:, idParam); - if (isempty(prof.dataQc)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - paramDataQc = prof.dataQc(:, idParam); - if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + if (adjustedProfilesList(idP) == 1) + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + + % process RT adjustment of this parameter + [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); + if (~isempty(paramAdjData)) + + adjustedParamIdList = [adjustedParamIdList paramPos]; + + % store parameter adjusted data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); + paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); else - paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); - idNoDef = find(paramDataQc ~= g_decArgo_qcDef); - paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); + % copy parameter data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profQualityFlag = compute_profile_quality_flag(paramDataQcStr); - profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); - netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); - end + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); end end - - if (prof.direction == 'A') - measIds = fliplr([1:length(paramData)]); + end + else + + % some profile parameters have sublevels + + % retrieve the column(s) associated with the parameter data + idF = find(prof.paramNumberWithSubLevels < idParam); + if (isempty(idF)) + firstCol = idParam; + else + firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); + end + + idF = find(prof.paramNumberWithSubLevels == idParam); + if (isempty(idF)) + lastCol = firstCol; + else + lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; + end + + paramData = prof.data(:, firstCol:lastCol); + if (isempty(prof.dataQc)) + paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + if (size(paramData, 2) == 1) + paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; else - measIds = [1:length(paramData)]; - end - netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - - if (~isempty(profParamQcVarId)) - netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramDataQcStr(measIds)); - end - - if (adjustedProfilesList(idP) == 1) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) - - % process RT adjustment of this parameter - [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); - if (~isempty(paramAdjData)) - - adjustedParamIdList = [adjustedParamIdList paramPos]; - - % store parameter adjusted data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); - paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramAdjData)]), paramAdjDataQcStr(measIds)); - else - % copy parameter data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramData(measIds)); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 length(paramData)]), paramAdjDataQcStr(measIds)); + for idL = 1: size(paramData, 1) + if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) + paramDataQcStr(idL) = g_decArgo_qcStrNoQc; end end end else - - % some profile parameters have sublevels - - % retrieve the column(s) associated with the parameter data - idF = find(prof.paramNumberWithSubLevels < idParam); - if (isempty(idF)) - firstCol = idParam; - else - firstCol = idParam + sum(prof.paramNumberOfSubLevels(idF)) - length(idF); - end - - idF = find(prof.paramNumberWithSubLevels == idParam); - if (isempty(idF)) - lastCol = firstCol; - else - lastCol = firstCol + prof.paramNumberOfSubLevels(idF) - 1; - end - - paramData = prof.data(:, firstCol:lastCol); - if (isempty(prof.dataQc)) + paramDataQc = prof.dataQc(:, firstCol); + if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); if (size(paramData, 2) == 1) paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; @@ -1079,309 +1095,295 @@ function create_nc_multi_prof_b_file_3_1( ... end end else - paramDataQc = prof.dataQc(:, firstCol); - if ((length(unique(paramDataQc)) == 1) && (unique(paramDataQc) == g_decArgo_qcDef)) - paramDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - if (size(paramData, 2) == 1) - paramDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - for idL = 1: size(paramData, 1) - if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) - paramDataQcStr(idL) = g_decArgo_qcStrNoQc; - end - end - end - else - paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); - idNoDef = find(paramDataQc ~= g_decArgo_qcDef); - paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); - - if ~(strcmp(profParam.name, 'PRES') || ... - strcmp(profParam.name(end-3:end), '_STD') || ... - strcmp(profParam.name(end-3:end), '_MED')) - profQualityFlag = compute_profile_quality_flag(paramDataQcStr); - profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); - netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); - end + paramDataQcStr = repmat(g_decArgo_qcStrDef, length(paramDataQc), 1); + idNoDef = find(paramDataQc ~= g_decArgo_qcDef); + paramDataQcStr(idNoDef) = num2str(paramDataQc(idNoDef)); + + if ~(strcmp(profParam.name, 'PRES') || ... + strcmp(profParam.name(end-3:end), '_STD') || ... + strcmp(profParam.name(end-3:end), '_MED')) + profQualityFlag = compute_profile_quality_flag(paramDataQcStr); + profileParamQcName = sprintf('PROFILE_%s_QC', profParam.name); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, profileParamQcName), profPos, 1, profQualityFlag); end end - - if (prof.direction == 'A') - measIds = fliplr([1:length(paramData)]); - else - measIds = [1:length(paramData)]; - end - - netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); - - if (~isempty(profParamQcVarId)) - netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); - end - - if (adjustedProfilesList(idP) == 1) - if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + end + + if (prof.direction == 'A') + measIds = fliplr([1:length(paramData)]); + else + measIds = [1:length(paramData)]; + end + + netcdf.putVar(fCdf, profParamVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); + + if (~isempty(profParamQcVarId)) + netcdf.putVar(fCdf, profParamQcVarId, fliplr([profPos 0]), fliplr([1 length(paramDataQcStr)]), paramDataQcStr(measIds)); + end + + if (adjustedProfilesList(idP) == 1) + if ((profParam.adjAllowed == 1) && (profParam.paramType ~= 'c')) + + % process RT adjustment of this parameter + [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); + + if (~isempty(paramAdjData)) + + adjustedParamIdList = [adjustedParamIdList paramPos]; - % process RT adjustment of this parameter - [paramAdjData] = compute_adjusted_data(paramData, profParam, prof); + % store parameter adjusted data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramAdjData)]), paramAdjData(measIds, :)'); - if (~isempty(paramAdjData)) - - adjustedParamIdList = [adjustedParamIdList paramPos]; - - % store parameter adjusted data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramAdjData)]), paramAdjData(measIds, :)'); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); - if (size(paramAdjData, 2) == 1) - paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - for idL = 1: size(paramAdjData, 1) - if (~isempty(find(paramAdjData(idL, :) ~= profParam.fillValue, 1))) - paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; - end + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramAdjData, 1), 1); + if (size(paramAdjData, 2) == 1) + paramAdjDataQcStr(find(paramAdjData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; + else + for idL = 1: size(paramAdjData, 1) + if (~isempty(find(paramAdjData(idL, :) ~= profParam.fillValue, 1))) + paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; end end - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramAdjData, 1)]), paramAdjDataQcStr(measIds)); + end + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramAdjData, 1)]), paramAdjDataQcStr(measIds)); + else + % copy parameter data in ADJUSTED variable + netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); + + paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); + if (size(paramData, 2) == 1) + paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; else - % copy parameter data in ADJUSTED variable - netcdf.putVar(fCdf, profParamAdjVarId, fliplr([profPos 0 0]), fliplr([1 size(paramData)]), paramData(measIds, :)'); - - paramAdjDataQcStr = repmat(g_decArgo_qcStrDef, size(paramData, 1), 1); - if (size(paramData, 2) == 1) - paramAdjDataQcStr(find(paramData ~= profParam.fillValue)) = g_decArgo_qcStrNoQc; - else - for idL = 1: size(paramData, 1) - if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) - paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; - end + for idL = 1: size(paramData, 1) + if (~isempty(find(paramData(idL, :) ~= profParam.fillValue, 1))) + paramAdjDataQcStr(idL) = g_decArgo_qcStrNoQc; end end - netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramData, 1)]), paramAdjDataQcStr(measIds)); end + netcdf.putVar(fCdf, profParamAdjQcVarId, fliplr([profPos 0]), fliplr([1 size(paramData, 1)]), paramAdjDataQcStr(measIds)); end end end - paramPos = paramPos + 1; end + paramPos = paramPos + 1; + end + end + + if (adjustedProfilesList(idP) == 1) + netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'A'); + for id = 1:length(adjustedParamIdList) + netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos adjustedParamIdList(id)]), fliplr([1 1]), 'A'); end - if (adjustedProfilesList(idP) == 1) - netcdf.putVar(fCdf, dataModeVarId, profPos, 1, 'A'); - for id = 1:length(adjustedParamIdList) - netcdf.putVar(fCdf, parameterDataModeVarId, fliplr([profPos adjustedParamIdList(id)]), fliplr([1 1]), 'A'); - end - - % process calibration information - idVal = find(strcmp('CALIB_RT_PARAMETER', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - tabParam = unique(struct2cell(metaData)); - idDel = []; - for idParam = 1:length(tabParam) - param = tabParam{idParam}; - idPosParam = find(strcmp({parameterList.name}, param) == 1); - paramTypeList = [parameterList.paramType]; - if (isempty(idPosParam) || ... - ~((paramTypeList(idPosParam) ~= 'c') || ... - strcmp(param, 'PRES'))) - idDel = [idDel idParam]; - end - end - tabParam(idDel) = []; - tabId = []; - tabEquation = []; - tabCoefficient = []; - tabComment = []; - tabDate = []; - for idParam = 1:length(tabParam) - param = tabParam{idParam}; - fieldNames = fields(metaData); - tab = []; - for idF = 1:length(fieldNames) - fieldName = fieldNames{idF}; - if (strcmp(metaData.(fieldName), param) == 1) - idPos = strfind(fieldName, '_'); - posNum = str2num(fieldName(idPos(end)+1:end)); - tab = [tab posNum]; - end + % process calibration information + idVal = find(strcmp('CALIB_RT_PARAMETER', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + tabParam = unique(struct2cell(metaData)); + idDel = []; + for idParam = 1:length(tabParam) + param = tabParam{idParam}; + idPosParam = find(strcmp({parameterList.name}, param) == 1); + paramTypeList = [parameterList.paramType]; + if (isempty(idPosParam) || ... + ~((paramTypeList(idPosParam) ~= 'c') || ... + strcmp(param, 'PRES'))) + idDel = [idDel idParam]; + end + end + tabParam(idDel) = []; + tabId = []; + tabEquation = []; + tabCoefficient = []; + tabComment = []; + tabDate = []; + for idParam = 1:length(tabParam) + param = tabParam{idParam}; + fieldNames = fields(metaData); + tab = []; + for idF = 1:length(fieldNames) + fieldName = fieldNames{idF}; + if (strcmp(metaData.(fieldName), param) == 1) + idPos = strfind(fieldName, '_'); + posNum = str2num(fieldName(idPos(end)+1:end)); + tab = [tab posNum]; end - tabId{idParam} = tab; end - - idVal = find(strcmp('CALIB_RT_EQUATION', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - equation = []; - tab = tabId{idParam}; - for id = 1:length(tab) - eq = ''; - if (isfield(metaData, ['CALIB_RT_EQUATION_' num2str(tab(id))])) - eq = metaData.(['CALIB_RT_EQUATION_' num2str(tab(id))]); - end - equation{id} = eq; + tabId{idParam} = tab; + end + + idVal = find(strcmp('CALIB_RT_EQUATION', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + equation = []; + tab = tabId{idParam}; + for id = 1:length(tab) + eq = ''; + if (isfield(metaData, ['CALIB_RT_EQUATION_' num2str(tab(id))])) + eq = metaData.(['CALIB_RT_EQUATION_' num2str(tab(id))]); end - tabEquation{idParam} = equation; + equation{id} = eq; end + tabEquation{idParam} = equation; end end - - idVal = find(strcmp('CALIB_RT_COEFFICIENT', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - coefficient = []; - tab = tabId{idParam}; - for id = 1:length(tab) - coef = ''; - if (isfield(metaData, ['CALIB_RT_COEFFICIENT_' num2str(tab(id))])) - coef = metaData.(['CALIB_RT_COEFFICIENT_' num2str(tab(id))]); - end - coefficient{id} = coef; + end + + idVal = find(strcmp('CALIB_RT_COEFFICIENT', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + coefficient = []; + tab = tabId{idParam}; + for id = 1:length(tab) + coef = ''; + if (isfield(metaData, ['CALIB_RT_COEFFICIENT_' num2str(tab(id))])) + coef = metaData.(['CALIB_RT_COEFFICIENT_' num2str(tab(id))]); end - tabCoefficient{idParam} = coefficient; + coefficient{id} = coef; end + tabCoefficient{idParam} = coefficient; end end - - idVal = find(strcmp('CALIB_RT_COMMENT', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - comment = []; - tab = tabId{idParam}; - for id = 1:length(tab) - com = ''; - if (isfield(metaData, ['CALIB_RT_COMMENT_' num2str(tab(id))])) - com = metaData.(['CALIB_RT_COMMENT_' num2str(tab(id))]); - end - comment{id} = com; + end + + idVal = find(strcmp('CALIB_RT_COMMENT', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + comment = []; + tab = tabId{idParam}; + for id = 1:length(tab) + com = ''; + if (isfield(metaData, ['CALIB_RT_COMMENT_' num2str(tab(id))])) + com = metaData.(['CALIB_RT_COMMENT_' num2str(tab(id))]); end - tabComment{idParam} = comment; + comment{id} = com; end + tabComment{idParam} = comment; end end - - idVal = find(strcmp('CALIB_RT_DATE', a_metaDataFromJson) == 1); - if (~isempty(idVal)) - metaData = a_metaDataFromJson{idVal+1}; - if (~isempty(metaData)) - for idParam = 1:length(tabParam) - dates = []; - tab = tabId{idParam}; - for id = 1:length(tab) - dat = ''; - if (isfield(metaData, ['CALIB_RT_DATE_' num2str(tab(id))])) - dat = metaData.(['CALIB_RT_DATE_' num2str(tab(id))]); - end - dates{id} = dat; + end + + idVal = find(strcmp('CALIB_RT_DATE', a_metaDataFromJson) == 1); + if (~isempty(idVal)) + metaData = a_metaDataFromJson{idVal+1}; + if (~isempty(metaData)) + for idParam = 1:length(tabParam) + dates = []; + tab = tabId{idParam}; + for id = 1:length(tab) + dat = ''; + if (isfield(metaData, ['CALIB_RT_DATE_' num2str(tab(id))])) + dat = metaData.(['CALIB_RT_DATE_' num2str(tab(id))]); end - tabDate{idParam} = dates; + dates{id} = dat; end + tabDate{idParam} = dates; end end - - % store calibration information for this profile - profCalibInfo = []; - profCalibInfo.profId = idP; - profCalibInfo.param = tabParam; - profCalibInfo.equation = tabEquation; - profCalibInfo.coefficient = tabCoefficient; - profCalibInfo.comment = tabComment; - profCalibInfo.date = tabDate; - calibInfo{end+1} = profCalibInfo; end + + % store calibration information for this profile + profCalibInfo = []; + profCalibInfo.profId = idP; + profCalibInfo.param = tabParam; + profCalibInfo.equation = tabEquation; + profCalibInfo.coefficient = tabCoefficient; + profCalibInfo.comment = tabComment; + profCalibInfo.date = tabDate; + calibInfo{end+1} = profCalibInfo; end end + end + + % add specific comment for PRES parameter + if (~isempty(find(strcmp({prof.paramList.name}, 'PRES') == 1, 1))) - % add specific comment for PRES parameter - if (~isempty(find(strcmp({prof.paramList.name}, 'PRES') == 1, 1))) - - comment = ''; - date = ''; - if (adjustedProfilesList(idP) == 1) - comment = 'Not applicable'; - if (isempty(ncCreationDate)) - date = currentDate; - else - date = ncCreationDate; - end + comment = ''; + date = ''; + if (adjustedProfilesList(idP) == 1) + comment = 'Not applicable'; + if (isempty(ncCreationDate)) + date = currentDate; + else + date = ncCreationDate; end - tabParam = {'PRES'}; - tabEquation = {{comment}}; - tabCoefficient = {{comment}}; - tabComment = {{'Adjusted values are provided in the core profile file'}}; - tabDate = {{date}}; - - % store calibration information for this profile - profCalibInfo = []; - profCalibInfo.profId = idP; - profCalibInfo.param = tabParam; - profCalibInfo.equation = tabEquation; - profCalibInfo.coefficient = tabCoefficient; - profCalibInfo.comment = tabComment; - profCalibInfo.date = tabDate; - calibInfo{end+1} = profCalibInfo; end + tabParam = {'PRES'}; + tabEquation = {{comment}}; + tabCoefficient = {{comment}}; + tabComment = {{'Adjusted values are provided in the core profile file'}}; + tabDate = {{date}}; - % NO SINCE THE OTHER PARAMETERS ARE in 'R' MODE (NOT DUPLICATED) - % % add a SCIENTIFIC_CALIB_COMMENT for duplicated data - % calibList = [calibInfo{:}]; - % idF = find([calibList.profId] == idP); - % calibListForProf = [calibInfo{idF}]; - % if ~((length(idF) == 1) && (strcmp(calibListForProf.param, 'PRES'))) - % newList = setdiff({prof.paramList.name}, [calibListForProf.param]); - % for idParam = 1:length(newList) - % paramName = newList{idParam}; - % paramInfo = get_netcdf_param_attributes(paramName); - % if (paramInfo.paramType ~= 'c') - % - % tabParam = {paramName}; - % tabEquation = {{[paramName '_ADJUSTED = ' paramName]}}; - % tabCoefficient = {{'Not applicable'}}; - % tabComment = {{'No adjustment performed (values duplicated)'}}; - % tabDate = {{format_date_yyyymmddhhmiss_dec_argo(prof.date)}}; - % - % % store calibration information for this profile - % profCalibInfo = []; - % profCalibInfo.profId = idP; - % profCalibInfo.param = tabParam; - % profCalibInfo.equation = tabEquation; - % profCalibInfo.coefficient = tabCoefficient; - % profCalibInfo.comment = tabComment; - % profCalibInfo.date = tabDate; - % calibInfo{end+1} = profCalibInfo; - % end - % end - % end - - % history information - currentHistoId = 0; - if (~isempty(histoInstitution)) - if (size(histoInstitution, 2) <= nbProfInFile) - currentHistoId = size(histoInstitution, 3); - end + % store calibration information for this profile + profCalibInfo = []; + profCalibInfo.profId = idP; + profCalibInfo.param = tabParam; + profCalibInfo.equation = tabEquation; + profCalibInfo.coefficient = tabCoefficient; + profCalibInfo.comment = tabComment; + profCalibInfo.date = tabDate; + calibInfo{end+1} = profCalibInfo; + end + + % NO SINCE THE OTHER PARAMETERS ARE in 'R' MODE (NOT DUPLICATED) + % % add a SCIENTIFIC_CALIB_COMMENT for duplicated data + % calibList = [calibInfo{:}]; + % idF = find([calibList.profId] == idP); + % calibListForProf = [calibInfo{idF}]; + % if ~((length(idF) == 1) && (strcmp(calibListForProf.param, 'PRES'))) + % newList = setdiff({prof.paramList.name}, [calibListForProf.param]); + % for idParam = 1:length(newList) + % paramName = newList{idParam}; + % paramInfo = get_netcdf_param_attributes(paramName); + % if (paramInfo.paramType ~= 'c') + % + % tabParam = {paramName}; + % tabEquation = {{[paramName '_ADJUSTED = ' paramName]}}; + % tabCoefficient = {{'Not applicable'}}; + % tabComment = {{'No adjustment performed (values duplicated)'}}; + % tabDate = {{format_date_yyyymmddhhmiss_dec_argo(prof.date)}}; + % + % % store calibration information for this profile + % profCalibInfo = []; + % profCalibInfo.profId = idP; + % profCalibInfo.param = tabParam; + % profCalibInfo.equation = tabEquation; + % profCalibInfo.coefficient = tabCoefficient; + % profCalibInfo.comment = tabComment; + % profCalibInfo.date = tabDate; + % calibInfo{end+1} = profCalibInfo; + % end + % end + % end + + % history information + currentHistoId = 0; + if (~isempty(histoInstitution)) + if (size(histoInstitution, 2) <= nbProfInFile) + currentHistoId = size(histoInstitution, 3); end - value = 'IF'; - netcdf.putVar(fCdf, historyInstitutionVarId, ... - fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); - value = 'ARFM'; - netcdf.putVar(fCdf, historyStepVarId, ... - fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); - value = 'CODA'; - netcdf.putVar(fCdf, historySoftwareVarId, ... - fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); - value = g_decArgo_decoderVersion; - netcdf.putVar(fCdf, historySoftwareReleaseVarId, ... - fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); - value = currentDate; - netcdf.putVar(fCdf, historyDateVarId, ... - fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); end + value = 'IF'; + netcdf.putVar(fCdf, historyInstitutionVarId, ... + fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); + value = 'ARFM'; + netcdf.putVar(fCdf, historyStepVarId, ... + fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); + value = 'CODA'; + netcdf.putVar(fCdf, historySoftwareVarId, ... + fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); + value = g_decArgo_decoderVersion; + netcdf.putVar(fCdf, historySoftwareReleaseVarId, ... + fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); + value = currentDate; + netcdf.putVar(fCdf, historyDateVarId, ... + fliplr([currentHistoId profPos 0]), fliplr([1 1 length(value)]), value'); end % process calibration information @@ -1439,26 +1441,24 @@ function create_nc_multi_prof_b_file_3_1( ... ncParamlist = repmat({''}, length(a_tabProfiles), nbProfParam); for idP = 1:length(a_tabProfiles) prof = a_tabProfiles(profIdList(idP)); - if (~is_core_profile(prof)) - parameterList = prof.paramList; - profPos = idP-1; - paramPos = 0; - for idParam = 1:length(parameterList) + parameterList = prof.paramList; + profPos = idP-1; + paramPos = 0; + for idParam = 1:length(parameterList) + + if (((parameterList(idParam).paramType ~= 'c') || ... + strcmp(parameterList(idParam).name, 'PRES')) && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... + ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - if (((parameterList(idParam).paramType ~= 'c') || ... - strcmp(parameterList(idParam).name, 'PRES')) && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_STD') && ... - ~strcmp(parameterList(idParam).name(end-3:end), '_MED')) - - valueStr = parameterList(idParam).name; - - for idCalib = 1:nbCalib - netcdf.putVar(fCdf, parameterVarId, ... - fliplr([profPos idCalib-1 paramPos 0]), fliplr([1 1 1 length(valueStr)]), valueStr'); - end - paramPos = paramPos + 1; - ncParamlist(idP, paramPos) = {valueStr}; + valueStr = parameterList(idParam).name; + + for idCalib = 1:nbCalib + netcdf.putVar(fCdf, parameterVarId, ... + fliplr([profPos idCalib-1 paramPos 0]), fliplr([1 1 1 length(valueStr)]), valueStr'); end + paramPos = paramPos + 1; + ncParamlist(idP, paramPos) = {valueStr}; end end end diff --git a/decArgo_soft/soft/sub/create_nc_multi_prof_c_file_3_1.m b/decArgo_soft/soft/sub/create_nc_multi_prof_c_file_3_1.m index d130ac64..b113b201 100644 --- a/decArgo_soft/soft/sub/create_nc_multi_prof_c_file_3_1.m +++ b/decArgo_soft/soft/sub/create_nc_multi_prof_c_file_3_1.m @@ -1229,7 +1229,7 @@ function create_nc_multi_prof_c_file_3_1( ... netcdf.endDef(fCdf); - % fill PARAMETER variable (event if there is no RT adjustments) + % fill PARAMETER variable (even if there is no RT adjustments) ncParamlist = repmat({''}, length(a_tabProfiles), nbProfParam); for idP = 1:length(a_tabProfiles) prof = a_tabProfiles(profIdList(idP)); diff --git a/decArgo_soft/soft/sub/create_nc_traj_c_file_3_1.m b/decArgo_soft/soft/sub/create_nc_traj_c_file_3_1.m index fa965982..c70db0d6 100644 --- a/decArgo_soft/soft/sub/create_nc_traj_c_file_3_1.m +++ b/decArgo_soft/soft/sub/create_nc_traj_c_file_3_1.m @@ -1423,7 +1423,7 @@ function create_nc_traj_c_file_3_1( ... for idM = 1:length(nMeas.tabMeas) meas = nMeas.tabMeas(idM); - + data{cycleNumberVarId+1}(idM) = nMeas.outputCycleNumber; data{measurementCodeVarId+1}(idM) = meas.measCode; diff --git a/decArgo_soft/soft/sub/decode_provor_iridium_sbd.m b/decArgo_soft/soft/sub/decode_provor_iridium_sbd.m index 7e245703..bfdcc812 100644 --- a/decArgo_soft/soft/sub/decode_provor_iridium_sbd.m +++ b/decArgo_soft/soft/sub/decode_provor_iridium_sbd.m @@ -1196,6 +1196,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -1448,6 +1453,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -1687,6 +1697,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -1926,6 +1941,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -2228,6 +2248,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -2574,6 +2599,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TECH NetCDF file + % store information on received Iridium packet types + if (deepCycle == 1) + store_received_packet_type_info_for_nc(a_decoderId); + end + % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -2802,6 +2832,7 @@ % store NetCDF technical data store_tech1_data_for_nc_210_to_212(tabTech1, deepCycle); store_tech2_data_for_nc_210_211(tabTech2, deepCycle); + store_received_packet_type_info_for_nc(a_decoderId); % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -3040,6 +3071,7 @@ % store NetCDF technical data store_tech1_data_for_nc_210_to_212(tabTech1, deepCycle); store_tech2_data_for_nc_212(tabTech2, deepCycle); + store_received_packet_type_info_for_nc(a_decoderId); % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); @@ -3327,6 +3359,7 @@ % store NetCDF technical data store_tech1_data_for_nc_210_to_212(tabTech1, deepCycle); store_tech2_data_for_nc_210_211(tabTech2, deepCycle); + store_received_packet_type_info_for_nc(a_decoderId); % update NetCDF technical data update_technical_data_argos_sbd(a_decoderId); diff --git a/decArgo_soft/soft/sub/decode_prv_data_1_3_11_12_17_24_31.m b/decArgo_soft/soft/sub/decode_prv_data_1_3_11_12_17_24_31.m index 842b806f..561b6df4 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_1_3_11_12_17_24_31.m +++ b/decArgo_soft/soft/sub/decode_prv_data_1_3_11_12_17_24_31.m @@ -54,6 +54,12 @@ % configuration values global g_decArgo_generateNcTech; +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + % output parameters initialization o_tabProfCTD = []; o_tabDrifCTD = []; @@ -66,6 +72,7 @@ % decode the Argos data messages tabProfCTD = []; tabDrifCTD = []; + for idMes = 1:size(a_tabSensors, 1) % message type msgType = a_tabSensors(idMes, 1); @@ -147,6 +154,11 @@ if (g_decArgo_generateNcTech ~= 0) store_tech_data_for_nc_1_3_11_12_17_24_31(o_tabTech, ... floatTimeParts, utcTimeJuld, o_floatClockDrift, a_decoderId); + + % store technical message redundancy + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; end case {4, 6} diff --git a/decArgo_soft/soft/sub/decode_prv_data_27_28_29.m b/decArgo_soft/soft/sub/decode_prv_data_27_28_29.m index 65d198db..f9d74f07 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_27_28_29.m +++ b/decArgo_soft/soft/sub/decode_prv_data_27_28_29.m @@ -55,6 +55,12 @@ % configuration values global g_decArgo_generateNcTech; +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + % output parameters initialization o_tabProfCTDO = []; o_tabDrifCTDO = []; @@ -139,6 +145,11 @@ % output NetCDF files if (g_decArgo_generateNcTech ~= 0) store_tech_data_for_nc_4_19_25_27_to_29(o_tabTech, floatTimeParts, utcTimeJuld, o_floatClockDrift) + + % store technical message redundancy + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; end case {4, 6} diff --git a/decArgo_soft/soft/sub/decode_prv_data_30.m b/decArgo_soft/soft/sub/decode_prv_data_30.m index f8b42fc9..8351afc0 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_30.m +++ b/decArgo_soft/soft/sub/decode_prv_data_30.m @@ -56,6 +56,12 @@ % configuration values global g_decArgo_generateNcTech; +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + % output parameters initialization o_tabProfCTD = []; o_tabDrifCTD = []; @@ -139,6 +145,13 @@ g_decArgo_cycleNum, o_tabTech1(1)); end + % store technical message #1 redundancy + if (g_decArgo_generateNcTech ~= 0) + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case 1 % technical message #2 @@ -215,6 +228,11 @@ % output NetCDF files if (g_decArgo_generateNcTech ~= 0) store_tech2_data_for_nc_30_32(o_tabTech2, floatTimeParts, utcTimeJuld, o_floatClockDrift, o_deepCycle); + + % store technical message #2 redundancy + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -240,6 +258,15 @@ print_param_data_in_csv_30_32(o_tabParam); end + % store parameter message redundancy + if (g_decArgo_generateNcTech ~= 0) + if (g_decArgo_cycleNum == 0) + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; + end + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {4, 6} % descent or ascent profile CTD message diff --git a/decArgo_soft/soft/sub/decode_prv_data_32.m b/decArgo_soft/soft/sub/decode_prv_data_32.m index 03cd579f..ee206e0f 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_32.m +++ b/decArgo_soft/soft/sub/decode_prv_data_32.m @@ -57,6 +57,12 @@ % configuration values global g_decArgo_generateNcTech; +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + % output parameters initialization o_tabProfCTDO = []; o_tabDrifCTDO = []; @@ -141,6 +147,13 @@ g_decArgo_cycleNum, o_tabTech1(1)); end + % store technical message #1 redundancy + if (g_decArgo_generateNcTech ~= 0) + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case 1 % technical message #2 @@ -217,6 +230,11 @@ % output NetCDF files if (g_decArgo_generateNcTech ~= 0) store_tech2_data_for_nc_30_32(o_tabTech2, floatTimeParts, utcTimeJuld, o_floatClockDrift, o_deepCycle); + + % store technical message #2 redundancy + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -242,6 +260,15 @@ print_param_data_in_csv_30_32(o_tabParam); end + % store parameter message redundancy + if (g_decArgo_generateNcTech ~= 0) + if (g_decArgo_cycleNum == 0) + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; + end + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {7, 9} % descent or ascent profile CTDO message diff --git a/decArgo_soft/soft/sub/decode_prv_data_4_19_25.m b/decArgo_soft/soft/sub/decode_prv_data_4_19_25.m index 70a38641..732aea8c 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_4_19_25.m +++ b/decArgo_soft/soft/sub/decode_prv_data_4_19_25.m @@ -55,6 +55,12 @@ % configuration values global g_decArgo_generateNcTech; +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + % output parameters initialization o_tabProfCTDO = []; o_tabDrifCTDO = []; @@ -142,6 +148,11 @@ % output NetCDF files if (g_decArgo_generateNcTech ~= 0) store_tech_data_for_nc_4_19_25_27_to_29(o_tabTech, floatTimeParts, utcTimeJuld, o_floatClockDrift) + + % store technical message redundancy + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = msgOcc; end case {4, 6} diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_201_203.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_201_203.m index e592dd84..57e74387 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_201_203.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_201_203.m @@ -78,6 +78,7 @@ global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; global g_decArgo_nbOf3Or10Or13Or16TypePacketExpected; global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % offset between float days and julian days global g_decArgo_julD2FloatDayOffset; @@ -430,6 +431,8 @@ continue; end + g_decArgo_nbOf6TypePacketReceived = g_decArgo_nbOf6TypePacketReceived + 1; + % message data frame msgData = a_tabData(idMes, 2:end); @@ -562,6 +565,12 @@ o_dataCTD = []; end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -606,6 +615,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -627,6 +637,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_7TypePacketReceivedFlag = 1; @@ -638,3 +649,62 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10TypePacketReceived; +g_decArgo_nbHydraulicPacketsReceived = g_decArgo_nbOf6TypePacketReceived; +g_decArgo_nbTech1PacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbTech2PacketsReceived = g_decArgo_4TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_5TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_202.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_202.m index 46acfbfb..4a596eab 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_202.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_202.m @@ -74,6 +74,7 @@ global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; global g_decArgo_nbOf3Or10Or13Or16TypePacketExpected; global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % offset between float days and julian days global g_decArgo_julD2FloatDayOffset; @@ -403,6 +404,8 @@ continue; end + g_decArgo_nbOf6TypePacketReceived = g_decArgo_nbOf6TypePacketReceived + 1; + % message data frame msgData = a_tabData(idMes, 2:end); @@ -509,6 +512,12 @@ end end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -553,6 +562,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -574,6 +584,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_7TypePacketReceivedFlag = 1; @@ -585,3 +596,62 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10TypePacketReceived; +g_decArgo_nbHydraulicPacketsReceived = g_decArgo_nbOf6TypePacketReceived; +g_decArgo_nbTech1PacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbTech2PacketsReceived = g_decArgo_4TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_5TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_204.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_204.m index ceaa654b..415eb92e 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_204.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_204.m @@ -282,6 +282,12 @@ end end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -326,6 +332,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -347,6 +354,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_5TypePacketReceivedFlag = 1; @@ -359,3 +367,60 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +g_decArgo_nbTechPacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_4TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_205.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_205.m index 9ac7914f..740588b6 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_205.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_205.m @@ -283,6 +283,12 @@ end end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -327,6 +333,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -348,6 +355,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_5TypePacketReceivedFlag = 1; @@ -360,3 +368,60 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +g_decArgo_nbTechPacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_4TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_206_207_208.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_206_207_208.m index 85d005ac..b6bf104f 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_206_207_208.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_206_207_208.m @@ -297,6 +297,12 @@ end end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -341,6 +347,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -362,6 +369,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_5TypePacketReceivedFlag = 1; @@ -374,3 +382,60 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +g_decArgo_nbTechPacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_4TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_209.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_209.m index 9d691d0e..78c30f18 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_209.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_209.m @@ -556,6 +556,12 @@ end end +if (a_procLevel > 0) + + % collect information on received packet types + collect_received_packet_type_info; +end + return; % ------------------------------------------------------------------------------ @@ -600,6 +606,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -621,6 +628,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_4TypePacketReceivedFlag = 1; @@ -633,3 +641,60 @@ g_decArgo_nbOf14Or12TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +g_decArgo_nbTechPacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_5TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_210_211.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_210_211.m index 9c67a10f..7e8226b3 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_210_211.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_210_211.m @@ -78,6 +78,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % offset between float days and julian days global g_decArgo_julD2FloatDayOffset; @@ -333,6 +334,17 @@ continue; end + % BE CAREFUL + % there is an issue with grounding day when the grounding occured + % during the descent to profile depth phase (i.e. phase #5) + % => the decoded value should be 256 - transmitted value + if ((tabTech2(21) > 0) && (tabTech2(25) == 5)) + tabTech2(23) = 256 - tabTech2(23); + end + if ((tabTech2(21) > 1) && (tabTech2(30) == 5)) + tabTech2(28) = 256 - tabTech2(28); + end + % store last reset date floatLastResetTime = datenum(sprintf('%02d%02d%02d', tabTech2(46:51)), 'HHMMSSddmmyy') - g_decArgo_janFirst1950InMatlab; @@ -474,6 +486,8 @@ continue; end + g_decArgo_nbOf6TypePacketReceived = g_decArgo_nbOf6TypePacketReceived + 1; + % message data frame msgData = a_tabData(idMes, 2:end); @@ -573,6 +587,9 @@ end end end + + % collect information on received packet types + collect_received_packet_type_info; end return; @@ -619,6 +636,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -640,6 +658,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_7TypePacketReceivedFlag = 1; @@ -649,3 +668,64 @@ g_decArgo_nbOf3Or10Or13Or16TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10TypePacketReceived; +g_decArgo_nbNearSurfacePacketsReceived = g_decArgo_nbOf13Or11TypePacketReceived; +g_decArgo_nbInAirPacketsReceived = g_decArgo_nbOf14Or12TypePacketReceived; +g_decArgo_nbHydraulicPacketsReceived = g_decArgo_nbOf6TypePacketReceived; +g_decArgo_nbTech1PacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbTech2PacketsReceived = g_decArgo_4TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_5TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_212.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_212.m index ca7ab348..8c87e846 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_212.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_212.m @@ -80,6 +80,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % offset between float days and julian days global g_decArgo_julD2FloatDayOffset; @@ -277,6 +278,17 @@ continue; end + % BE CAREFUL + % there is an issue with grounding day when the grounding occured + % during the descent to profile depth phase (i.e. phase #5) + % => the decoded value should be 256 - transmitted value + if ((tabTech2(21) > 0) && (tabTech2(25) == 5)) + tabTech2(23) = 256 - tabTech2(23); + end + if ((tabTech2(21) > 1) && (tabTech2(30) == 5)) + tabTech2(28) = 256 - tabTech2(28); + end + % store last reset date floatLastResetTime = datenum(sprintf('%02d%02d%02d', tabTech2(46:51)), 'HHMMSSddmmyy') - g_decArgo_janFirst1950InMatlab; @@ -454,6 +466,8 @@ continue; end + g_decArgo_nbOf6TypePacketReceived = g_decArgo_nbOf6TypePacketReceived + 1; + % message data frame msgData = a_tabData(idMes, 2:end); @@ -532,6 +546,9 @@ fprintf('WARNING: Float #%d: Cycle number cannot be determined\n', ... g_decArgo_floatNum); end + + % collect information on received packet types + collect_received_packet_type_info; end return; @@ -584,6 +601,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -606,6 +624,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_nbOf1Or8Or11Or14TypePacketExpected = 0; @@ -634,3 +653,92 @@ end return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% current float WMO number +global g_decArgo_floatNum; + +% float configuration +global g_decArgo_floatConfig; + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10TypePacketReceived; +g_decArgo_nbNearSurfacePacketsReceived = g_decArgo_nbOf13Or11TypePacketReceived; +g_decArgo_nbInAirPacketsReceived = g_decArgo_nbOf14Or12TypePacketReceived; +g_decArgo_nbHydraulicPacketsReceived = g_decArgo_nbOf6TypePacketReceived; +g_decArgo_nbTech1PacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbTech2PacketsReceived = g_decArgo_4TypePacketReceivedFlag; +g_decArgo_nbParm1PacketsReceived = g_decArgo_5TypePacketReceivedFlag; +g_decArgo_nbParm2PacketsReceived = g_decArgo_7TypePacketReceivedFlag; + +% if IC0 = 0, the ice detection algorithm is disabled and parameter #2 packet +% (type 7) is not send by the float + +% retrieve configuration parameters +configNames = g_decArgo_floatConfig.DYNAMIC.NAMES; +configValues = g_decArgo_floatConfig.DYNAMIC.VALUES; + +% retrieve IC0 configuration value +idPos = find(strncmp('CONFIG_IC00_', configNames, length('CONFIG_IC00_')) == 1, 1); +if (~isempty(idPos)) + iceNoSurfaceDelay = configValues(idPos, end); + if (iceNoSurfaceDelay == 0) + % ice detection algorithm is disabled => parameter packet #2 is not + % expected + g_decArgo_nbParm2PacketsReceived = -1; + end +else + fprintf('WARNING: Float #%d: unable to retrieve IC01 configuration value => ice detection mode is supposed to be enabled\n', ... + g_decArgo_floatNum); +end + +return; diff --git a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_213.m b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_213.m index ef98ecf3..28bbea6e 100644 --- a/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_213.m +++ b/decArgo_soft/soft/sub/decode_prv_data_ir_sbd_213.m @@ -80,6 +80,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % offset between float days and julian days global g_decArgo_julD2FloatDayOffset; @@ -283,6 +284,17 @@ continue; end + % BE CAREFUL + % there is an issue with grounding day when the grounding occured + % during the descent to profile depth phase (i.e. phase #5) + % => the decoded value should be 256 - transmitted value + if ((tabTech2(21) > 0) && (tabTech2(25) == 5)) + tabTech2(23) = 256 - tabTech2(23); + end + if ((tabTech2(21) > 1) && (tabTech2(30) == 5)) + tabTech2(28) = 256 - tabTech2(28); + end + % store last reset date floatLastResetTime = datenum(sprintf('%02d%02d%02d', tabTech2(46:51)), 'HHMMSSddmmyy') - g_decArgo_janFirst1950InMatlab; @@ -437,6 +449,8 @@ continue; end + g_decArgo_nbOf6TypePacketReceived = g_decArgo_nbOf6TypePacketReceived + 1; + % message data frame msgData = a_tabData(idMes, 2:end); @@ -515,6 +529,9 @@ fprintf('WARNING: Float #%d: Cycle number cannot be determined\n', ... g_decArgo_floatNum); end + + % collect information on received packet types + collect_received_packet_type_info; end return; @@ -561,6 +578,7 @@ global g_decArgo_nbOf13Or11TypePacketReceived; global g_decArgo_nbOf14Or12TypePacketExpected; global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; % initialize information arrays g_decArgo_0TypePacketReceivedFlag = 0; @@ -582,6 +600,7 @@ g_decArgo_nbOf13Or11TypePacketReceived = 0; g_decArgo_nbOf14Or12TypePacketExpected = -1; g_decArgo_nbOf14Or12TypePacketReceived = 0; +g_decArgo_nbOf6TypePacketReceived = 0; % items not concerned by this decoder g_decArgo_7TypePacketReceivedFlag = 1; @@ -591,3 +610,64 @@ g_decArgo_nbOf3Or10Or13Or16TypePacketExpected = 0; return; + +% ------------------------------------------------------------------------------ +% Collect information on received packet types +% +% SYNTAX : +% collect_received_packet_type_info +% +% INPUT PARAMETERS : +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function collect_received_packet_type_info + +% arrays to store rough information on received data +global g_decArgo_0TypePacketReceivedFlag; +global g_decArgo_4TypePacketReceivedFlag; +global g_decArgo_5TypePacketReceivedFlag; +global g_decArgo_7TypePacketReceivedFlag; +global g_decArgo_nbOf1Or8Or11Or14TypePacketReceived; +global g_decArgo_nbOf2Or9Or12Or15TypePacketReceived; +global g_decArgo_nbOf3Or10Or13Or16TypePacketReceived; +global g_decArgo_nbOf1Or8TypePacketReceived; +global g_decArgo_nbOf2Or9TypePacketReceived; +global g_decArgo_nbOf3Or10TypePacketReceived; +global g_decArgo_nbOf13Or11TypePacketReceived; +global g_decArgo_nbOf14Or12TypePacketReceived; +global g_decArgo_nbOf6TypePacketReceived; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + +g_decArgo_nbDescentPacketsReceived = g_decArgo_nbOf1Or8TypePacketReceived; +g_decArgo_nbParkPacketsReceived = g_decArgo_nbOf2Or9TypePacketReceived; +g_decArgo_nbAscentPacketsReceived = g_decArgo_nbOf3Or10TypePacketReceived; +g_decArgo_nbNearSurfacePacketsReceived = g_decArgo_nbOf13Or11TypePacketReceived; +g_decArgo_nbInAirPacketsReceived = g_decArgo_nbOf14Or12TypePacketReceived; +g_decArgo_nbHydraulicPacketsReceived = g_decArgo_nbOf6TypePacketReceived; +g_decArgo_nbTech1PacketsReceived = g_decArgo_0TypePacketReceivedFlag; +g_decArgo_nbTech2PacketsReceived = g_decArgo_4TypePacketReceivedFlag; +g_decArgo_nbParmPacketsReceived = g_decArgo_5TypePacketReceivedFlag; + +return; diff --git a/decArgo_soft/soft/sub/get_nc_tech_statistical_parameter_list.m b/decArgo_soft/soft/sub/get_nc_tech_statistical_parameter_list.m index c8a9b40e..b30c1f3b 100644 --- a/decArgo_soft/soft/sub/get_nc_tech_statistical_parameter_list.m +++ b/decArgo_soft/soft/sub/get_nc_tech_statistical_parameter_list.m @@ -26,10 +26,23 @@ % list of parameters to initialize with 0 values switch (a_decoderId) - case {1, 3, 4, 11, 12, 17, 19, 24, 25, 27, 28, 29, 30, 31, 32} - o_statNcTechParamList = [[10:17] 20 21 22 221 224 225 321 323 521 524 525]; + case {1, 3, 4, 11, 12, 17, 19, 24, 25, 27, 28, 29, 31} + o_statNcTechParamList = [10:17 20 21 22 221 224 225 321 323 521 524 525 1000]; - case {201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213} + case {30, 32} + o_statNcTechParamList = [10:17 20 21 22 221 224 225 321 323 521 524 525 1000 1001]; + + case {201, 202, 203} + o_statNcTechParamList = 1001:1007; + + case {204, 205, 206, 207, 208, 209} + o_statNcTechParamList = 1001:1005; + + case {210, 211, 213} + o_statNcTechParamList = 1001:1009; + + case {212} + o_statNcTechParamList = 1001:1010; case {1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, ... 1012, 1013, 1014, 1015, 1016} diff --git a/decArgo_soft/soft/sub/get_prv_data_one_tech_msg.m b/decArgo_soft/soft/sub/get_prv_data_one_tech_msg.m index 7305b39f..03a7d2bc 100644 --- a/decArgo_soft/soft/sub/get_prv_data_one_tech_msg.m +++ b/decArgo_soft/soft/sub/get_prv_data_one_tech_msg.m @@ -705,6 +705,9 @@ g_decArgo_outputNcParamValue{end+1} = 0; end + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = format_time_hhmm_dec_argo((lastArgosMsgDate-firstArgosMsgDate)*24); end return; diff --git a/decArgo_soft/soft/sub/get_prv_data_two_tech_msg.m b/decArgo_soft/soft/sub/get_prv_data_two_tech_msg.m index c697f528..ce60364f 100644 --- a/decArgo_soft/soft/sub/get_prv_data_two_tech_msg.m +++ b/decArgo_soft/soft/sub/get_prv_data_two_tech_msg.m @@ -665,6 +665,9 @@ g_decArgo_outputNcParamValue{end+1} = 0; end + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1003]; + g_decArgo_outputNcParamValue{end+1} = format_time_hhmm_dec_argo((lastArgosMsgDate-firstArgosMsgDate)*24); end return; diff --git a/decArgo_soft/soft/sub/init_default_values.m b/decArgo_soft/soft/sub/init_default_values.m index 74cdd27c..5e272b67 100644 --- a/decArgo_soft/soft/sub/init_default_values.m +++ b/decArgo_soft/soft/sub/init_default_values.m @@ -466,7 +466,7 @@ function init_default_values(varargin) % the first 3 digits are incremented at each new complete dated release % the last digit is incremented at each patch associated to a given complete % dated release -g_decArgo_decoderVersion = '011h'; +g_decArgo_decoderVersion = '012a'; % minimum duration (in hour) of a non-transmission period to create a new % cycle for an Argos float diff --git a/interpolate_between_2_locations.m b/decArgo_soft/soft/sub/interpolate_between_2_locations.m similarity index 100% rename from interpolate_between_2_locations.m rename to decArgo_soft/soft/sub/interpolate_between_2_locations.m diff --git a/decArgo_soft/soft/sub/store_received_packet_type_info_for_nc.m b/decArgo_soft/soft/sub/store_received_packet_type_info_for_nc.m new file mode 100644 index 00000000..5503a086 --- /dev/null +++ b/decArgo_soft/soft/sub/store_received_packet_type_info_for_nc.m @@ -0,0 +1,187 @@ +% ------------------------------------------------------------------------------ +% Store information on received Iridium packet types. +% +% SYNTAX : +% store_received_packet_type_info_for_nc(a_decoderId) +% +% INPUT PARAMETERS : +% a_decoderId : decoder Id +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/29/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function store_received_packet_type_info_for_nc(a_decoderId) + +% current cycle number +global g_decArgo_cycleNum; + +% output NetCDF technical parameter index information +global g_decArgo_outputNcParamIndex; + +% output NetCDF technical parameter values +global g_decArgo_outputNcParamValue; + +% array ro store statistics on received packets +global g_decArgo_nbDescentPacketsReceived; +global g_decArgo_nbParkPacketsReceived; +global g_decArgo_nbAscentPacketsReceived; +global g_decArgo_nbNearSurfacePacketsReceived; +global g_decArgo_nbInAirPacketsReceived; +global g_decArgo_nbHydraulicPacketsReceived; +global g_decArgo_nbTechPacketsReceived; +global g_decArgo_nbTech1PacketsReceived; +global g_decArgo_nbTech2PacketsReceived; +global g_decArgo_nbParmPacketsReceived; +global g_decArgo_nbParm1PacketsReceived; +global g_decArgo_nbParm2PacketsReceived; + + +switch (a_decoderId) + + case {201, 202, 203} + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbDescentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParkPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1003]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbAscentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1004]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbHydraulicPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1005]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech1PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1006]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech2PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1007]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParmPacketsReceived; + + + case {204, 205, 206, 207, 208, 209} + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbDescentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParkPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1003]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbAscentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1004]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTechPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1005]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParmPacketsReceived; + + case {210, 211, 213} + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbDescentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParkPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1003]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbAscentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1004]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbNearSurfacePacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1005]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbInAirPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1006]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbHydraulicPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1007]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech1PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1008]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech2PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1009]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParmPacketsReceived; + + case {212} + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1001]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbDescentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1002]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParkPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1003]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbAscentPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1004]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbNearSurfacePacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1005]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbInAirPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1006]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbHydraulicPacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1007]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech1PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1008]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbTech2PacketsReceived; + + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1009]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParm1PacketsReceived; + + if (g_decArgo_nbParm2PacketsReceived ~= -1) + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1010]; + g_decArgo_outputNcParamValue{end+1} = g_decArgo_nbParm2PacketsReceived; + end + + otherwise + fprintf('WARNING: Received packet type information is not defined yet for decoderId #%d\n', a_decoderId); +end + +return; diff --git a/decArgo_soft/soft/sub/store_tech1_data_for_nc_201_202_203.m b/decArgo_soft/soft/sub/store_tech1_data_for_nc_201_202_203.m index 4bd504aa..5c2013ba 100644 --- a/decArgo_soft/soft/sub/store_tech1_data_for_nc_201_202_203.m +++ b/decArgo_soft/soft/sub/store_tech1_data_for_nc_201_202_203.m @@ -183,6 +183,10 @@ function store_tech1_data_for_nc_201_202_203(a_tabTech, a_deepCycle) g_decArgo_cycleNum 129]; g_decArgo_outputNcParamValue{end+1} = tabTech1(50); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = tabTech1(59); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; g_decArgo_cycleNum 130]; g_decArgo_outputNcParamValue{end+1} = tabTech1(60); diff --git a/decArgo_soft/soft/sub/store_tech1_data_for_nc_210_to_212.m b/decArgo_soft/soft/sub/store_tech1_data_for_nc_210_to_212.m index 46738a58..5789dff6 100644 --- a/decArgo_soft/soft/sub/store_tech1_data_for_nc_210_to_212.m +++ b/decArgo_soft/soft/sub/store_tech1_data_for_nc_210_to_212.m @@ -185,6 +185,10 @@ function store_tech1_data_for_nc_210_to_212(a_tabTech1, a_deepCycle) g_decArgo_cycleNum 131]; g_decArgo_outputNcParamValue{end+1} = tabTech1(51+ID_OFFSET); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = tabTech1(61+ID_OFFSET); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; g_decArgo_cycleNum 132]; g_decArgo_outputNcParamValue{end+1} = tabTech1(62+ID_OFFSET); diff --git a/decArgo_soft/soft/sub/store_tech_data_for_nc_204_to_208.m b/decArgo_soft/soft/sub/store_tech_data_for_nc_204_to_208.m index 3af24d23..cdf482e6 100644 --- a/decArgo_soft/soft/sub/store_tech_data_for_nc_204_to_208.m +++ b/decArgo_soft/soft/sub/store_tech_data_for_nc_204_to_208.m @@ -250,6 +250,10 @@ function store_tech_data_for_nc_204_to_208(a_tabTech, a_deepCycle) g_decArgo_cycleNum 144]; g_decArgo_outputNcParamValue{end+1} = tabTech(65); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = tabTech(74); + end return; diff --git a/decArgo_soft/soft/sub/store_tech_data_for_nc_209.m b/decArgo_soft/soft/sub/store_tech_data_for_nc_209.m index c0cb4114..edb8da15 100644 --- a/decArgo_soft/soft/sub/store_tech_data_for_nc_209.m +++ b/decArgo_soft/soft/sub/store_tech_data_for_nc_209.m @@ -250,6 +250,10 @@ function store_tech_data_for_nc_209(a_tabTech, a_deepCycle) g_decArgo_cycleNum 144]; g_decArgo_outputNcParamValue{end+1} = tabTech(65); + g_decArgo_outputNcParamIndex = [g_decArgo_outputNcParamIndex; + g_decArgo_cycleNum 1000]; + g_decArgo_outputNcParamValue{end+1} = tabTech(74); + sbeOptodeStatus = a_tabTech(76); if (sbeOptodeStatus == 0) sbeOptodeStatus = 1; diff --git a/decArgo_soft/soft/util/ge_generate_traj_from_nc.m b/decArgo_soft/soft/util/ge_generate_traj_from_nc.m index 73c66409..4f3ba0e1 100644 --- a/decArgo_soft/soft/util/ge_generate_traj_from_nc.m +++ b/decArgo_soft/soft/util/ge_generate_traj_from_nc.m @@ -264,18 +264,18 @@ function ge_generate_traj_from_nc(varargin) % sélection des cycles % sélection des positions Argos de qualité - idGoodPos = find( ... - (positionAccuracy == '1') | ... - (positionAccuracy == '2') | ... - (positionAccuracy == '3') | ... - (positionAccuracy == 'G') | ... - (positionQC == '1') | ... - (positionQC == '2')); - cycleNumber = cycleNumber(idGoodPos); - juld = juld(idGoodPos); - longitude = longitude(idGoodPos); - latitude = latitude(idGoodPos); - positionAccuracy = positionAccuracy(idGoodPos); +% idGoodPos = find( ... +% (positionAccuracy == '1') | ... +% (positionAccuracy == '2') | ... +% (positionAccuracy == '3') | ... +% (positionAccuracy == 'G') | ... +% (positionQC == '1') | ... +% (positionQC == '2')); +% cycleNumber = cycleNumber(idGoodPos); +% juld = juld(idGoodPos); +% longitude = longitude(idGoodPos); +% latitude = latitude(idGoodPos); +% positionAccuracy = positionAccuracy(idGoodPos); % position de lâcher du flotteur if (launchDateJuld ~= g_dateDef) diff --git a/decArgo_soft/soft/util/generate_csv_meta_remocean.m b/decArgo_soft/soft/util/generate_csv_meta_remocean.m index e181963b..551f2636 100644 --- a/decArgo_soft/soft/util/generate_csv_meta_remocean.m +++ b/decArgo_soft/soft/util/generate_csv_meta_remocean.m @@ -35,6 +35,7 @@ function generate_csv_meta_remocean(varargin) dataBaseFileName = 'C:\Users\jprannou\_RNU\DecPrv_info\Remocean\finalisation_meta_sensor¶m\export_JPR_from_VB_Rem_all_20160511.txt'; dataBaseFileName = 'C:\Users\jprannou\_RNU\DecPrv_info\_configParamNames\export_DOXY_from_VB_20160518.txt'; dataBaseFileName = 'C:\Users\jprannou\_RNU\DecPrv_info\_configParamNames\DBexport_H2S_from_VB_20170228.txt'; +dataBaseFileName = 'C:\Users\jprannou\Desktop\6902741\new_rem_meta.txt'; % directory to store the log and csv files DIR_LOG_CSV_FILE = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\'; @@ -758,6 +759,28 @@ function generate_csv_meta_remocean(varargin) return; +% ------------------------------------------------------------------------------ +function [o_optodeInAir] = get_optode_in_air(a_floatNum, a_metaWmoList, a_metaData) + +o_optodeInAir = []; + +idForWmo = find(a_metaWmoList == a_floatNum); + +idF = find(strcmp(a_metaData(idForWmo, 5), 'OPTODE_IN_AIR_MEASUREMENT')); +if (~isempty(idF)) + o_optodeInAir = a_metaData{idForWmo(idF), 4}; + if ((strcmpi(o_optodeInAir, 'yes')) || (strcmpi(o_optodeInAir, 'y'))) + o_optodeInAir = 1; + elseif ((strcmpi(o_optodeInAir, 'no')) || (strcmpi(o_optodeInAir, 'n'))) + o_optodeInAir = 0; + end +else + fprintf('ERROR: Optode in air information not found for float %d\n', ... + a_floatNum); +end + +return; + % ------------------------------------------------------------------------------ function [o_platformFamily] = get_platform_family_db(a_floatNum, a_decId, a_metaWmoList, a_metaData) @@ -896,7 +919,7 @@ function generate_csv_meta_remocean(varargin) switch a_decId case {105, 106, 107, 108, 109, 110, 301} if (ismember(a_decId, [106 107 109 110])) - optodeInAirMeasFlag = get_static_config_value('CONFIG_PX_1_1_0_0_7', 0); + optodeInAirMeasFlag = get_optode_in_air(a_floatNum, a_metaWmoList, a_metaData); if (isempty(optodeInAirMeasFlag) || (optodeInAirMeasFlag == 0)) o_paramName = [ ... {'C1PHASE_DOXY'} {'C2PHASE_DOXY'} {'TEMP_DOXY'} {'DOXY'} ... diff --git a/decArgo_soft/soft/util/generate_json_decoder_tech_labels.m b/decArgo_soft/soft/util/generate_json_decoder_tech_labels.m index 7fb1793e..fb72e1a6 100644 --- a/decArgo_soft/soft/util/generate_json_decoder_tech_labels.m +++ b/decArgo_soft/soft/util/generate_json_decoder_tech_labels.m @@ -20,13 +20,13 @@ function generate_json_decoder_tech_labels() % file information on technical labels for a given decoder -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_1.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_12.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_19.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_4.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_30.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_31.csv'; -% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_32.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_1.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_12.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_19.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_4.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_30.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_31.csv'; +decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_32.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_105.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_121.csv'; @@ -37,7 +37,7 @@ function generate_json_decoder_tech_labels() % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_209.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_301.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_302.csv'; -decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_210.csv'; +% decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_210.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_212.csv'; % decoderTechLabelsFileName = 'C:\Users\jprannou\_RNU\DecArgo_info\_techParamNames\_tech_param_name_1001.csv'; diff --git a/decArgo_soft/soft/util/nc_check_file_format.m b/decArgo_soft/soft/util/nc_check_file_format.m index 960d045f..3923ec54 100644 --- a/decArgo_soft/soft/util/nc_check_file_format.m +++ b/decArgo_soft/soft/util/nc_check_file_format.m @@ -20,25 +20,13 @@ function nc_check_file_format(varargin) % directory of the JAVA checker -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2015-12-07_spec_2016-03-07\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-04-10_spec_2016-04-10\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-04-10_spec_2016-04-19\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-04-10_spec_2016-05-16\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-05-23_spec_2016-05-23\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-06-27_spec_2016-06-27\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-08-01_spec_2016-07-28\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-08-01_spec_2016-08-30\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016-08-01_spec_2016-10-12\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2016_10_24_spec_2016_10_24\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2017-01-18_spec_2017-01-18\'; -% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2017-01-18_spec_2017-03-13\'; -DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2017-01-18_spec_2017-03-23\'; - +% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2017-01-18_spec_2017-03-23\'; +DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\javaChecker\file_checker_2017-01-18_spec_2017-04-24\'; % DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\TRAJ_CHECKED\javaChecker\file_checker_2016-10-20_beta_spec_2016-10-20_beta\'; % DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\TRAJ_CHECKED\javaChecker\file_checker_exec_2017-03-13_beta_spec_2017-03-13\'; % DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\TRAJ_CHECKED\javaChecker\file_checker_exec_2017-03-13_beta_spec_2017-03-23\'; - +% DIR_JAVA_CHECKER = 'C:\Users\jprannou\_RNU\Argo\checker_US\TRAJ_CHECKED\javaChecker\file_checker_exec_2017-03-13_beta_spec_2017-04-24\'; % top directory of the NetCDF files to check % DIR_INPUT_NC_FILES = 'C:\Users\jprannou\_DATA\OUT\nc_output_decArgo_checkTraj\'; @@ -71,11 +59,12 @@ function nc_check_file_format(varargin) FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_ALL_decId_2xx.txt'; FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nke_argos.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\tmp.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nova_dova.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_apex_argos.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nke_rem_rudics.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nova_dova.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_apex_argos.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nke_rem_rudics.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44_BODC.txt'; @@ -169,7 +158,7 @@ function nc_check_file_format(varargin) floatDac = 'incois'; % floatDac = 'aoml'; floatDac = 'coriolis'; -% floatDac = 'csio'; +% floatDac = 'bodc'; for idType = 1:5 diff --git a/decArgo_soft/soft/util/nc_duplicate_pres_axis.m b/decArgo_soft/soft/util/nc_duplicate_pres_axis.m new file mode 100644 index 00000000..de1c067b --- /dev/null +++ b/decArgo_soft/soft/util/nc_duplicate_pres_axis.m @@ -0,0 +1,821 @@ +% ------------------------------------------------------------------------------ +% Duplicate PRES axis from C profile file to B profile file. +% +% SYNTAX : +% nc_duplicate_pres_axis or +% nc_duplicate_pres_axis(6900189, 7900118) +% +% INPUT PARAMETERS : +% varargin : WMO number of floats to process +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - V 1.0: creation +% ------------------------------------------------------------------------------ +function nc_duplicate_pres_axis(varargin) + +% list of floats to process (if empty, all encountered files will be checked) +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_apex_argos_all.txt'; +FLOAT_LIST_FILE_NAME = ''; + +% top directory of NetCDF files to update +% (expected path to NetCDF files: DIR_INPUT_OUTPUT_NC_FILES\dac_name\wmo_number) +DIR_INPUT_OUTPUT_NC_FILES = 'C:\Users\jprannou\_DATA\OUT\TEST_nc_duplicate_pres_axis\'; +% DIR_INPUT_OUTPUT_NC_FILES = 'H:\archive_201705\'; + +% temporary directory used to update the files +DIR_TMP = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\temp_nc_duplicate_pres_axis\'; + +% directory to store the log file +DIR_LOG_FILE = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\log\'; + +% directory to store the XML file +DIR_XML_FILE = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\xml\'; + +% to print files that should be updated +INFO_ONLY = 0; + +% INFO or ACTION flag +global g_codp_infoOnly; +g_codp_infoOnly = INFO_ONLY; + +% program version +global g_codp_ncDuplicatePresAxisVersion; +g_codp_ncDuplicatePresAxisVersion = '1.0'; + +% DOM node of XML report +global g_codp_xmlReportDOMNode; + +% report information structure +global g_codp_floatNum; +global g_codp_reportData; +g_codp_reportData = []; +g_codp_reportData.trajFile = []; +g_codp_reportData.mProfFil = []; +g_codp_reportData.profFile = []; +g_codp_reportData.float = []; + + +% store the start time of the run +currentTime = datestr(now, 'yyyymmddTHHMMSSZ'); + +% startTime +ticStartTime = tic; + +try + + % init the XML report + init_xml_report(currentTime); + + % input parameters management + floatList = []; + if (nargin == 0) + if (~isempty(FLOAT_LIST_FILE_NAME)) + floatListFileName = FLOAT_LIST_FILE_NAME; + + % floats to process come from floatListFileName + if ~(exist(floatListFileName, 'file') == 2) + fprintf('ERROR: File not found: %s\n', floatListFileName); + return; + end + + fprintf('Floats from list: %s\n', floatListFileName); + floatList = load(floatListFileName); + end + else + % floats to process come from input parameters + floatList = cell2mat(varargin); + end + + + % create a temporary directory for this run + tmpDir = [DIR_TMP '/' 'nc_duplicate_pres_axis_' currentTime]; + status = mkdir(tmpDir); + if (status ~= 1) + fprintf('ERROR: cannot create temporary directory (%s)\n', tmpDir); + end + + % create and start log file recording + logFile = [DIR_LOG_FILE '/' 'nc_duplicate_pres_axis_' currentTime '.log']; + diary(logFile); + + dacDir = dir(DIR_INPUT_OUTPUT_NC_FILES); + for idDir = 1:length(dacDir) + + dacDirName = dacDir(idDir).name; + dacDirPathName = [DIR_INPUT_OUTPUT_NC_FILES '/' dacDirName]; + if ((exist(dacDirPathName, 'dir') == 7) && ~strcmp(dacDirName, '.') && ~strcmp(dacDirName, '..')) + + fprintf('\nProcessing directory: %s\n', dacDirName); + + floatNum = 1; + floatDir = dir(dacDirPathName); + for idDir2 = 1:length(floatDir) + + floatDirName = floatDir(idDir2).name; + floatDirPathName = [dacDirPathName '/' floatDirName]; + if ((exist(floatDirPathName, 'dir') == 7) && ~strcmp(floatDirName, '.') && ~strcmp(floatDirName, '..')) + + [floatWmo, status] = str2num(floatDirName); + if (status == 1) + + if ((isempty(floatList)) || (~isempty(floatList) && ismember(floatWmo, floatList))) + + g_codp_floatNum = floatWmo; + fprintf('%03d/%03d %d\n', floatNum, length(floatDir)-2, floatWmo); + + % mono-profile files + floatDirPathName = [floatDirPathName '/profiles']; + if (exist(floatDirPathName, 'dir') == 7) + floatFiles = dir([floatDirPathName '/' sprintf('B*%d_*.nc', floatWmo)]); + for idFile = 1:length(floatFiles) + + floatFileName = floatFiles(idFile).name; + floatFilePathName = [floatDirPathName '/' floatFileName]; + if (exist(floatFilePathName, 'file') == 2) + process_nc_file(floatFilePathName, tmpDir); + end + end + end + + floatNum = floatNum + 1; + end + end + end + end + end + end + + % remove the temporary directory of this run + [status, message, messageid] = rmdir(tmpDir,'s'); + if (status ~= 1) + fprintf('ERROR: cannot remove temporary directory (%s)\n', tmpDir); + end + + diary off; + + % finalize XML report + [status] = finalize_xml_report(ticStartTime, logFile, []); + +catch + + diary off; + + % finalize XML report + [status] = finalize_xml_report(ticStartTime, logFile, lasterror); + +end + +% create the XML report path file name +xmlFileName = [DIR_XML_FILE '/nc_duplicate_pres_axis_' currentTime '.xml']; + +% save the XML report +xmlwrite(xmlFileName, g_codp_xmlReportDOMNode); +% if (strcmp(status, 'nok') == 1) +% edit(xmlFileName); +% end + +return; + +% ------------------------------------------------------------------------------ +% Process one NetCDF file. +% +% SYNTAX : +% process_nc_file(a_ncPathFileName, a_tmpDir) +% +% INPUT PARAMETERS : +% a_ncPathFileName : name of the file to process +% a_tmpDir : available temporary directory +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function process_nc_file(a_ncBPathFileName, a_tmpDir) + +% report information structure +global g_codp_floatNum; +global g_codp_reportData; + +% INFO or ACTION flag +global g_codp_infoOnly; + + +if (exist(a_ncBPathFileName, 'file') == 2) + + % get information to see if the file should be updated + updateNeeded = 0; + needToInvestigate = 0; + wantedInputVars = [ ... + {'FORMAT_VERSION'} ... + {'PRES'} ... + ]; + [ncDataB] = get_data_from_nc_file(a_ncBPathFileName, wantedInputVars); + if (~isempty(ncDataB)) + + idVal = find(strcmp('FORMAT_VERSION', ncDataB(1:2:end)) == 1, 1); + formatVersion = strtrim(ncDataB{2*idVal}'); + if (strcmp(formatVersion, '3.1')) + + idVal = find(strcmp('PRES', ncDataB(1:2:end)) == 1, 1); + presData = ncDataB{2*idVal}; + if (~isempty(presData)) + + n_prof = size(presData, 2); + for idP = 1:n_prof + presProf = presData(:, idP); + if (~any(presProf ~= 99999)) + needToInvestigate = 1; + break; + end + end + end + end + end + + if (needToInvestigate) + + [filePath, bFileName, ext] = fileparts(a_ncBPathFileName); + cFileName = ['D' bFileName(3:end)]; % use D file first (R and D files can be (erroneously) present) + ncCPathFileName = [filePath '/' cFileName ext]; + if ~(exist(ncCPathFileName, 'file') == 2) + cFileName = ['R' bFileName(3:end)]; + end + ncCPathFileName = [filePath '/' cFileName ext]; + + if (exist(ncCPathFileName, 'file') == 2) + + [ncDataC] = get_data_from_nc_file(ncCPathFileName, wantedInputVars); + if (~isempty(ncDataC)) + + idVal = find(strcmp('FORMAT_VERSION', ncDataC(1:2:end)) == 1, 1); + formatVersion = strtrim(ncDataC{2*idVal}'); + if (strcmp(formatVersion, '3.1')) + + idVal = find(strcmp('PRES', ncDataC(1:2:end)) == 1, 1); + presDataC = ncDataC{2*idVal}; + idVal = find(strcmp('PRES', ncDataB(1:2:end)) == 1, 1); + presDataB = ncDataB{2*idVal}; + + n_levelsC = size(presDataC, 1); + n_LevelsB = size(presDataB, 1); + if (n_levelsC ~= n_LevelsB) + fprintf('ERROR: file %s: N_LEVELS differ (C file: %d VS B file: %d)\n', [bFileName ext], n_LevelsB, n_levelsC); + return; + end + n_prof = size(presDataC, 2); + for idP = 1:n_prof + presProfC = presDataC(:, idP); + presProfB = presDataB(:, idP); + if (any(presProfC ~= 99999) && ~any(presProfB ~= 99999)) + updateNeeded = 1; + if (g_codp_infoOnly) + fprintf('INFO: file %s PRES profile #%d need to be duplicated ', [bFileName ext], idP); + if (n_levelsC == n_LevelsB) + fprintf('no need to update N_LEVELS\n'); + else + fprintf('N_LEVELS should be updated (%d => %d)\n', n_LevelsB, n_levelsC); + end + else + break; + end + end + end + end + end + else + fprintf('ERROR: cannot find file: %s\n', ncCPathFileName); + end + end + + if ((g_codp_infoOnly) && (updateNeeded == 0)) + + [filePath, bFileName, ext] = fileparts(a_ncBPathFileName); + if (bFileName(1) == 'B') + % mono-profile file + cFileName = ['D' bFileName(3:end)]; % use D file first (R and D files can be (erroneously) present) + ncCPathFileName = [filePath '/' cFileName ext]; + if ~(exist(ncCPathFileName, 'file') == 2) + cFileName = ['R' bFileName(3:end)]; + end + else + % multi-profile file + cFileName = regexprep(bFileName, '_Bprof', '_prof'); + end + ncCPathFileName = [filePath '/' cFileName ext]; + if (exist(ncCPathFileName, 'file') == 2) + + [ncDataC] = get_data_from_nc_file(ncCPathFileName, wantedInputVars); + if (~isempty(ncDataC)) + + idVal = find(strcmp('FORMAT_VERSION', ncDataC(1:2:end)) == 1, 1); + formatVersion = strtrim(ncDataC{2*idVal}'); + if (strcmp(formatVersion, '3.1')) + + idVal = find(strcmp('PRES', ncDataC(1:2:end)) == 1, 1); + presDataC = ncDataC{2*idVal}; + idVal = find(strcmp('PRES', ncDataB(1:2:end)) == 1, 1); + presDataB = ncDataB{2*idVal}; + + if (sum(presDataC-presDataB) ~= 0) + fprintf('WARNING: file %s PRES values differ', [bFileName ext]); + end + end + end + end + end + + % update the file + if (updateNeeded == 1) + + if (g_codp_infoOnly) + fprintf('\n'); + else + fprintf('File to update: %s\n', a_ncBPathFileName); + + % make a copy of the file in the temporary directory + [~, fileName, fileExt] = fileparts(a_ncBPathFileName); + fileToUpdate = [a_tmpDir '/' fileName fileExt]; + [status] = copyfile(a_ncBPathFileName, fileToUpdate); + if (status == 1) + + % update the file + ok = update_file(fileToUpdate, ncCPathFileName); + + if (ok == 1) + + % move the updated file + [status, message, messageid] = movefile(fileToUpdate, a_ncBPathFileName); + if (status ~= 1) + fprintf('ERROR: cannot move file to update (%s) to replace input file (%s)\n', fileToUpdate, a_ncBPathFileName); + return; + end + + % store the information for the XML report + if (any(strfind(fileName, 'prof'))) + g_codp_reportData.mProfFile = [g_codp_reportData.mProfFile {a_ncBPathFileName}]; + else + g_codp_reportData.profFile = [g_codp_reportData.profFile {a_ncBPathFileName}]; + end + g_codp_reportData.float = [g_codp_reportData.float g_codp_floatNum]; + + end + else + fprintf('ERROR: cannot copy file to update (%s) to temporary directory (%s)\n', a_ncBPathFileName, a_tmpDir); + end + end + end +end + +return; + +% ------------------------------------------------------------------------------ +% Update one NetCDF file. +% +% SYNTAX : +% [o_ok] = update_file(a_ncBPathFileName, a_ncCPathFileName) +% +% INPUT PARAMETERS : +% a_ncBPathFileName : name of the B file to update +% a_ncCPathFileName : name of the C file to use +% +% OUTPUT PARAMETERS : +% o_ok : 1 if update succeeded, 0 otherwise +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function [o_ok] = update_file(a_ncBPathFileName, a_ncCPathFileName) + +% output parameters initialization +o_ok = 0; + +% program version +global g_codp_ncDuplicatePresAxisVersion; + + +if ((exist(a_ncBPathFileName, 'file') == 2) && (exist(a_ncCPathFileName, 'file') == 2)) + + % create the list of profiles to be updated + + % retrieve PRES values from C file + wantedInputVars = [ ... + {'PRES'} ... + ]; + [ncDataC] = get_data_from_nc_file(a_ncCPathFileName, wantedInputVars); + idVal = find(strcmp('PRES', ncDataC(1:2:end)) == 1, 1); + presDataC = ncDataC{2*idVal}; + + % retrieve PRES values from B file + [ncDataB] = get_data_from_nc_file(a_ncBPathFileName, wantedInputVars); + idVal = find(strcmp('PRES', ncDataB(1:2:end)) == 1, 1); + presDataB = ncDataB{2*idVal}; + + profList = []; + for idProf = 1:size(presDataC, 2) + presProfC = presDataC(:, idProf); + presProfB = presDataB(:, idProf); + if (any(presProfC ~= 99999) && ~any(presProfB ~= 99999)) + profList = [profList idProf]; + end + end + + % open NetCDF file + fCdf = netcdf.open(a_ncBPathFileName, 'WRITE'); + if (isempty(fCdf)) + fprintf('ERROR: Unable to open NetCDF input file: %s\n', a_ncBPathFileName); + return; + end + + % duplicate C file PRES values in B file + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'PRES'), presDataC); + + % add history information that concerns the current program + historyInstitution = 'IF'; + historySoftware = 'CODP'; + historySoftwareRelease = g_codp_ncDuplicatePresAxisVersion; + historyDate = datestr(now_utc, 'yyyymmddHHMMSS'); + + % update HISTORY_* variables + + % retrieve the creation date of the updated file + dateCreation = deblank(netcdf.getVar(fCdf, netcdf.inqVarID(fCdf, 'DATE_CREATION'))'); + + % set the 'history' global attribute + globalVarId = netcdf.getConstant('NC_GLOBAL'); + globalHistoryText = [datestr(datenum(dateCreation, 'yyyymmddHHMMSS'), 'yyyy-mm-ddTHH:MM:SSZ') ' creation; ']; + globalHistoryText = [globalHistoryText ... + datestr(datenum(historyDate, 'yyyymmddHHMMSS'), 'yyyy-mm-ddTHH:MM:SSZ') ' last update (coriolis CODP software (V ' g_codp_ncDuplicatePresAxisVersion '))']; + netcdf.reDef(fCdf); + netcdf.putAtt(fCdf, globalVarId, 'history', globalHistoryText); + netcdf.endDef(fCdf); + + % update the update date + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'DATE_UPDATE'), historyDate); + + % update HISTORY information for concerned profiles + [~, nHistory] = netcdf.inqDim(fCdf, netcdf.inqDimID(fCdf, 'N_HISTORY')); + for idP = 1:length(profList) + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'HISTORY_INSTITUTION'), ... + fliplr([nHistory profList(idP)-1 0]), ... + fliplr([1 1 length(historyInstitution)]), historyInstitution'); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'HISTORY_SOFTWARE'), ... + fliplr([nHistory profList(idP)-1 0]), ... + fliplr([1 1 length(historySoftware)]), historySoftware'); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'HISTORY_SOFTWARE_RELEASE'), ... + fliplr([nHistory profList(idP)-1 0]), ... + fliplr([1 1 length(historySoftwareRelease)]), historySoftwareRelease'); + netcdf.putVar(fCdf, netcdf.inqVarID(fCdf, 'HISTORY_DATE'), ... + fliplr([nHistory profList(idP)-1 0]), ... + fliplr([1 1 length(historyDate)]), historyDate'); + end + + netcdf.close(fCdf); + + o_ok = 1; +end + +return; + +% ------------------------------------------------------------------------------ +% Initialize XML report. +% +% SYNTAX : +% init_xml_report(a_time) +% +% INPUT PARAMETERS : +% a_time : start date of the run ('yyyymmddTHHMMSS' format) +% +% OUTPUT PARAMETERS : +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function init_xml_report(a_time) + +% DOM node of XML report +global g_codp_xmlReportDOMNode; + +% decoder version +global g_codp_ncDuplicatePresAxisVersion; + + +% initialize XML report +docNode = com.mathworks.xml.XMLUtils.createDocument('coriolis_function_report'); +docRootNode = docNode.getDocumentElement; + +newChild = docNode.createElement('comment'); +newChild.appendChild(docNode.createTextNode('Argo Coriolis duplicate PRES axis tool (nc_duplicate_pres_axis)')); +docRootNode.appendChild(newChild); + +newChild = docNode.createElement('tool_version'); +newChild.appendChild(docNode.createTextNode(g_codp_ncDuplicatePresAxisVersion)); +docRootNode.appendChild(newChild); + +newChild = docNode.createElement('date'); +newChild.appendChild(docNode.createTextNode(datestr(datenum(a_time, 'yyyymmddTHHMMSSZ'), 'dd/mm/yyyy HH:MM:SS'))); +docRootNode.appendChild(newChild); + +g_codp_xmlReportDOMNode = docNode; + +return; + +% ------------------------------------------------------------------------------ +% Finalize the XML report. +% +% SYNTAX : +% [o_status] = finalize_xml_report(a_ticStartTime, a_logFileName, a_error) +% +% INPUT PARAMETERS : +% a_ticStartTime : identifier for the "tic" command +% a_logFileName : log file path name of the run +% a_error : Matlab error +% +% OUTPUT PARAMETERS : +% o_status : final status of the run +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function [o_status] = finalize_xml_report(a_ticStartTime, a_logFileName, a_error) + +% DOM node of XML report +global g_codp_xmlReportDOMNode; + +% report information structure +global g_codp_reportData; + + +% initalize final status +o_status = 'ok'; + +% finalize the report +docNode = g_codp_xmlReportDOMNode; +docRootNode = docNode.getDocumentElement; + +newChild = docNode.createElement('updates'); + +newChildBis = docNode.createElement('updated_float_WMO_list'); +if (isfield(g_codp_reportData, 'float')) + wmoList = sort(unique(g_codp_reportData.float)); + newChildBis.appendChild(docNode.createTextNode(sprintf('%d ', wmoList))); +else + newChildBis.appendChild(docNode.createTextNode('')); +end +newChild.appendChild(newChildBis); + +% list of updated files +if (isfield(g_codp_reportData, 'profFile')) + for idFile = 1:length(g_codp_reportData.profFile) + newChildBis = docNode.createElement('updated_mono_profile_file'); + textNode = g_codp_reportData.profFile{idFile}; + newChildBis.appendChild(docNode.createTextNode(textNode)); + newChild.appendChild(newChildBis); + end +end +if (isfield(g_codp_reportData, 'mProfFil')) + for idFile = 1:length(g_codp_reportData.mProfFil) + newChildBis = docNode.createElement('updated_multi_profile_file'); + textNode = g_codp_reportData.mProfFil{idFile}; + newChildBis.appendChild(docNode.createTextNode(textNode)); + newChild.appendChild(newChildBis); + end +end + +docRootNode.appendChild(newChild); + +% retrieve information from the log file +[infoMsg, warningMsg, errorMsg] = parse_log_file(a_logFileName); + +if (~isempty(infoMsg)) + + for idMsg = 1:length(infoMsg) + newChild = docNode.createElement('info'); + textNode = char(infoMsg(idMsg)); + newChild.appendChild(docNode.createTextNode(textNode)); + docRootNode.appendChild(newChild); + end +end + +if (~isempty(warningMsg)) + + for idMsg = 1:length(warningMsg) + newChild = docNode.createElement('warning'); + textNode = char(warningMsg(idMsg)); + newChild.appendChild(docNode.createTextNode(textNode)); + docRootNode.appendChild(newChild); + end +end + +if (~isempty(errorMsg)) + + for idMsg = 1:length(errorMsg) + newChild = docNode.createElement('error'); + textNode = char(errorMsg(idMsg)); + newChild.appendChild(docNode.createTextNode(textNode)); + docRootNode.appendChild(newChild); + end + o_status = 'nok'; +end + +% add matlab error +if (~isempty(a_error)) + o_status = 'nok'; + + newChild = docNode.createElement('matlab_error'); + + newChildBis = docNode.createElement('error_message'); + textNode = regexprep(a_error.message, char(10), ': '); + newChildBis.appendChild(docNode.createTextNode(textNode)); + newChild.appendChild(newChildBis); + + for idS = 1:size(a_error.stack, 1) + newChildBis = docNode.createElement('stack_line'); + textNode = sprintf('Line: %3d File: %s (func: %s)', ... + a_error.stack(idS). line, ... + a_error.stack(idS). file, ... + a_error.stack(idS). name); + newChildBis.appendChild(docNode.createTextNode(textNode)); + newChild.appendChild(newChildBis); + end + + docRootNode.appendChild(newChild); +end + +newChild = docNode.createElement('duration'); +newChild.appendChild(docNode.createTextNode(format_time(toc(a_ticStartTime)/3600))); +docRootNode.appendChild(newChild); + +newChild = docNode.createElement('status'); +newChild.appendChild(docNode.createTextNode(o_status)); +docRootNode.appendChild(newChild); + +return; + +% ------------------------------------------------------------------------------ +% Retrieve INFO, WARNING and ERROR messages from the log file. +% +% SYNTAX : +% [o_decInfoMsg, o_decWarningMsg, o_decErrorMsg, ... +% o_rtQcInfoMsg, o_rtQcWarningMsg, o_rtQcErrorMsg, ... +% o_rtAdjInfoMsg, o_rtAdjWarningMsg, o_rtAdjErrorMsg] = parse_log_file(a_logFileName) +% +% INPUT PARAMETERS : +% a_logFileName : log file path name of the run +% +% OUTPUT PARAMETERS : +% o_decInfoMsg : DECODER INFO messages +% o_decWarningMsg : DECODER WARNING messages +% o_decErrorMsg : DECODER ERROR messages +% o_rtQcInfoMsg : RTQC INFO messages +% o_rtQcWarningMsg : RTQC WARNING messages +% o_rtQcErrorMsg : RTQC ERROR messages +% o_rtAdjInfoMsg : RTADJ INFO messages +% o_rtAdjWarningMsg : RTADJ WARNING messages +% o_rtAdjErrorMsg : RTADJ ERROR messages +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function [o_decInfoMsg, o_decWarningMsg, o_decErrorMsg, ... + o_rtQcInfoMsg, o_rtQcWarningMsg, o_rtQcErrorMsg, ... + o_rtAdjInfoMsg, o_rtAdjWarningMsg, o_rtAdjErrorMsg] = parse_log_file(a_logFileName) + +% output parameters initialization +o_decInfoMsg = []; +o_decWarningMsg = []; +o_decErrorMsg = []; +o_rtQcInfoMsg = []; +o_rtQcWarningMsg = []; +o_rtQcErrorMsg = []; +o_rtAdjInfoMsg = []; +o_rtAdjWarningMsg = []; +o_rtAdjErrorMsg = []; + +if (~isempty(a_logFileName)) + % read log file + fId = fopen(a_logFileName, 'r'); + if (fId == -1) + errorLine = sprintf('ERROR: Unable to open file: %s\n', a_logFileName); + o_errorMsg = [o_errorMsg {errorLine}]; + return; + end + fileContents = textscan(fId, '%s', 'delimiter', '\n'); + fclose(fId); + + if (~isempty(fileContents)) + % retrieve wanted messages + fileContents = fileContents{:}; + idLine = 1; + while (1) + line = fileContents{idLine}; + if (strncmp(upper(line), 'INFO:', length('INFO:'))) + o_decInfoMsg = [o_decInfoMsg {strtrim(line(length('INFO:')+1:end))}]; + elseif (strncmp(upper(line), 'WARNING:', length('WARNING:'))) + o_decWarningMsg = [o_decWarningMsg {strtrim(line(length('WARNING:')+1:end))}]; + elseif (strncmp(upper(line), 'ERROR:', length('ERROR:'))) + o_decErrorMsg = [o_decErrorMsg {strtrim(line(length('ERROR:')+1:end))}]; + elseif (strncmp(upper(line), 'RTQC_INFO:', length('RTQC_INFO:'))) + o_rtQcInfoMsg = [o_rtQcInfoMsg {strtrim(line(length('RTQC_INFO:')+1:end))}]; + elseif (strncmp(upper(line), 'RTQC_WARNING:', length('RTQC_WARNING:'))) + o_rtQcWarningMsg = [o_rtQcWarningMsg {strtrim(line(length('RTQC_WARNING:')+1:end))}]; + elseif (strncmp(upper(line), 'RTQC_ERROR:', length('RTQC_ERROR:'))) + o_rtQcErrorMsg = [o_rtQcErrorMsg {strtrim(line(length('RTQC_ERROR:')+1:end))}]; + elseif (strncmp(upper(line), 'RTADJ_INFO:', length('RTADJ_INFO:'))) + o_rtAdjInfoMsg = [o_rtAdjInfoMsg {strtrim(line(length('RTADJ_INFO:')+1:end))}]; + elseif (strncmp(upper(line), 'RTADJ_WARNING:', length('RTADJ_WARNING:'))) + o_rtAdjWarningMsg = [o_rtAdjWarningMsg {strtrim(line(length('RTADJ_WARNING:')+1:end))}]; + elseif (strncmp(upper(line), 'RTADJ_ERROR:', length('RTADJ_ERROR:'))) + o_rtAdjErrorMsg = [o_rtAdjErrorMsg {strtrim(line(length('RTADJ_ERROR:')+1:end))}]; + end + idLine = idLine + 1; + if (idLine > length(fileContents)) + break; + end + end + end +end + +return; + +% ------------------------------------------------------------------------------ +% Duration format. +% +% SYNTAX : +% [o_time] = format_time(a_time) +% +% INPUT PARAMETERS : +% a_time : hour (in float) +% +% OUTPUT PARAMETERS : +% o_time : formated duration +% +% EXAMPLES : +% +% SEE ALSO : +% AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) +% ------------------------------------------------------------------------------ +% RELEASES : +% 05/16/2017 - RNU - creation +% ------------------------------------------------------------------------------ +function [o_time] = format_time(a_time) + +% output parameters initialization +o_time = []; + +if (a_time >= 0) + sign = ''; +else + sign = '-'; +end +a_time = abs(a_time); +h = fix(a_time); +m = fix((a_time-h)*60); +s = round(((a_time-h)*60-m)*60); +if (s == 60) + s = 0; + m = m + 1; + if (m == 60) + m = 0; + h = h + 1; + end +end +if (isempty(sign)) + o_time = sprintf('%02d:%02d:%02d', h, m, s); +else + o_time = sprintf('%c %02d:%02d:%02d', sign, h, m, s); +end + +return; diff --git a/decArgo_soft/soft/util/nc_tech_2_csv.m b/decArgo_soft/soft/util/nc_tech_2_csv.m index d137879f..34f8436b 100644 --- a/decArgo_soft/soft/util/nc_tech_2_csv.m +++ b/decArgo_soft/soft/util/nc_tech_2_csv.m @@ -502,6 +502,9 @@ function nc_tech_aux_2_csv_file(a_inputPathFileName, a_outputPathFileName, ... idVal = find(strcmp('JULD', techData) == 1); if (~isempty(idVal)) juld = techData{idVal+1}; + if (juld == ' ') + juld = []; + end end juldStatus = []; idVal = find(strcmp('JULD_STATUS', techData) == 1); diff --git a/decArgo_soft/soft/util/nc_trace_cycle_times.m b/decArgo_soft/soft/util/nc_trace_cycle_times.m index 155813d5..583a6004 100644 --- a/decArgo_soft/soft/util/nc_trace_cycle_times.m +++ b/decArgo_soft/soft/util/nc_trace_cycle_times.m @@ -20,6 +20,7 @@ function nc_trace_cycle_times(varargin) global g_NTCT_NC_DIR; +global g_NTCT_NC_DIR_AUX; global g_NTCT_PDF_DIR; global g_NTCT_BATHY; global g_NTCT_SURF; @@ -28,20 +29,28 @@ function nc_trace_cycle_times(varargin) global g_NTCT_FIG_HANDLE; global g_NTCT_FLOAT_ID; -% top directory of NetCDF files to plot +% top directory of NetCDF files to plot (TRAJ and META) g_NTCT_NC_DIR = 'C:\Users\jprannou\_DATA\OUT\nc_output_decArgo\'; +% top directory of NetCDF auxiliary files to plot (TECH_AUX) +g_NTCT_NC_DIR_AUX = 'C:\Users\jprannou\_DATA\OUT\nc_output_decArgo\'; + % directory to store pdf output g_NTCT_PDF_DIR = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\'; % default list of floats to plot -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_201.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_202.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_203.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_201.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_202.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_203.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_209.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_212.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_213.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44_BODC.txt'; fprintf('Plot management:\n'); fprintf(' Right Arrow : next float\n'); @@ -130,6 +139,7 @@ function nc_trace_cycle_times(varargin) function plot_cycle_times(a_idFloat, a_idCycle, a_reload) global g_NTCT_NC_DIR; +global g_NTCT_NC_DIR_AUX; global g_NTCT_PDF_DIR; global g_NTCT_BATHY; global g_NTCT_SURF; @@ -268,7 +278,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) if (isempty(g_NTCT_FLOAT_ID) || (a_idFloat ~= g_NTCT_FLOAT_ID) || (a_reload == 1)) fprintf('Loading new float ... '); - + % a new float is wanted g_NTCT_FLOAT_ID = a_idFloat; g_NTCT_cycles = []; @@ -282,7 +292,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % from TRAJ file trajFileName = [g_NTCT_NC_DIR '/' num2str(floatNum) '/' num2str(floatNum) '_Rtraj.nc']; - + if ~(exist(trajFileName, 'file') == 2) fprintf('\n'); fprintf('File not found: %s\n', trajFileName); @@ -339,10 +349,10 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) juldAdj = trajData{2*idVal}; idVal = find(strcmp('PRES', trajData(1:2:end)) == 1, 1); - pres = trajData{2*idVal}; + pres = double(trajData{2*idVal}); idVal = find(strcmp('PRES_ADJUSTED', trajData(1:2:end)) == 1, 1); - presAdj = trajData{2*idVal}; + presAdj = double(trajData{2*idVal}); idVal = find(strcmp('CYCLE_NUMBER_INDEX', trajData(1:2:end)) == 1, 1); cycleNumberIndex = trajData{2*idVal}; @@ -399,22 +409,22 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) posPrecJuld = posJuld(idP); posPrecLat = posLat(idP); posPrecLon = posLon(idP); - end + end % retrieve the bathymetry along the displacements g_NTCT_tabBathyJuld = posJuldAll; g_NTCT_tabBathyMin = ones(size(posJuldAll))*g_elevDef; g_NTCT_tabBathyMax = ones(size(posJuldAll))*-g_elevDef; - + for idP = 1:length(posJuldAll) [elev, lon, lat] = m_etopo2([posLonAll(idP) posLonAll(idP) posLatAll(idP) posLatAll(idP)]); g_NTCT_tabBathyMin(idP) = min(min(-elev)); g_NTCT_tabBathyMax(idP) = max(max(-elev)); end - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % from TECH_AUX file - techAuxFileName = [g_NTCT_NC_DIR '/' num2str(floatNum) '/auxiliary/' num2str(floatNum) '_tech_aux.nc']; + techAuxFileName = [g_NTCT_NC_DIR_AUX '/' num2str(floatNum) '/auxiliary/' num2str(floatNum) '_tech_aux.nc']; valveAct = []; if ~(exist(techAuxFileName, 'file') == 2) @@ -453,11 +463,11 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) % merge JULD and JULD_ADJUSTED idF = find(juldTechAdj ~= 999999); - juldTech(idF) = juldTech(idF); + juldTech(idF) = juldTechAdj(idF); juldTech(find(juldTech == 999999)) = g_dateDef; % get valva action information - if (~isempty(valveActDuration)) + if (~ischar(valveActDuration)) valveAct = valveActDuration; else valveAct = valveActFlag; @@ -465,14 +475,14 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) end % process retrieved data - + % arrays to store the data g_NTCT_cycles = unique(cycleNumber(find(cycleNumber >= 0))); - + % buoyancy activitity idF = find(ismember(measCode, [g_MC_SpyInDescToPark g_MC_SpyAtPark g_MC_SpyInDescToProf g_MC_SpyAtProf g_MC_SpyInAscProf])); nbMax = max(histc(cycleNumber(idF), min(cycleNumber(idF)):max(cycleNumber(idF)))); - + g_NTCT_SpyInDescToPark_juld = ones(length(g_NTCT_cycles), nbMax)*g_dateDef; g_NTCT_SpyInDescToPark_pres = ones(length(g_NTCT_cycles), nbMax)*g_presDef; g_NTCT_SpyInDescToPark_evFlag = ones(length(g_NTCT_cycles), nbMax)*-1; @@ -496,7 +506,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_SpyInDescToPark_juld(idC, 1:length(idF)) = juld(idF); g_NTCT_SpyInDescToPark_pres(idC, 1:length(idF)) = pres(idF); idF2 = find((cycleNumberTech == g_NTCT_cycles(idC)) & (measCodeTech == g_MC_SpyInDescToPark)); - if ((length(idF) ~= length(idF)) || any(juld(idF) - juldTech(idF2))) + % if ((length(idF) ~= length(idF2)) || any(abs(juld(idF) - juldTech(idF2)) > 1/86400)) + if (length(idF) ~= length(idF2)) fprintf('ERROR: Traj / Tech_aux consistency\n'); else g_NTCT_SpyInDescToPark_evFlag(idC, 1:length(idF2)) = valveAct(idF2); @@ -507,7 +518,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_SpyAtPark_juld(idC, 1:length(idF)) = juld(idF); g_NTCT_SpyAtPark_pres(idC, 1:length(idF)) = pres(idF); idF2 = find((cycleNumberTech == g_NTCT_cycles(idC)) & (measCodeTech == g_MC_SpyAtPark)); - if ((length(idF) ~= length(idF)) || any(juld(idF) - juldTech(idF2))) + % if ((length(idF) ~= length(idF2)) || any(abs(juld(idF) - juldTech(idF2)) > 1/86400)) + if (length(idF) ~= length(idF2)) fprintf('ERROR: Traj / Tech_aux consistency\n'); else g_NTCT_SpyAtPark_evFlag(idC, 1:length(idF2)) = valveAct(idF2); @@ -518,7 +530,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_SpyInDescToProf_juld(idC, 1:length(idF)) = juld(idF); g_NTCT_SpyInDescToProf_pres(idC, 1:length(idF)) = pres(idF); idF2 = find((cycleNumberTech == g_NTCT_cycles(idC)) & (measCodeTech == g_MC_SpyInDescToProf)); - if ((length(idF) ~= length(idF)) || any(juld(idF) - juldTech(idF2))) + % if ((length(idF) ~= length(idF2)) || any(abs(juld(idF) - juldTech(idF2)) > 1/86400)) + if (length(idF) ~= length(idF2)) fprintf('ERROR: Traj / Tech_aux consistency\n'); else g_NTCT_SpyInDescToProf_evFlag(idC, 1:length(idF2)) = valveAct(idF2); @@ -529,7 +542,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_SpyAtProf_juld(idC, 1:length(idF)) = juld(idF); g_NTCT_SpyAtProf_pres(idC, 1:length(idF)) = pres(idF); idF2 = find((cycleNumberTech == g_NTCT_cycles(idC)) & (measCodeTech == g_MC_SpyAtProf)); - if ((length(idF) ~= length(idF)) || any(juld(idF) - juldTech(idF2))) + % if ((length(idF) ~= length(idF2)) || any(abs(juld(idF) - juldTech(idF2)) > 1/86400)) + if (length(idF) ~= length(idF2)) fprintf('ERROR: Traj / Tech_aux consistency\n'); else g_NTCT_SpyAtProf_evFlag(idC, 1:length(idF2)) = valveAct(idF2); @@ -540,7 +554,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_SpyInAscProf_juld(idC, 1:length(idF)) = juld(idF); g_NTCT_SpyInAscProf_pres(idC, 1:length(idF)) = pres(idF); idF2 = find((cycleNumberTech == g_NTCT_cycles(idC)) & (measCodeTech == g_MC_SpyInAscProf)); - if ((length(idF) ~= length(idF)) || any(juld(idF) - juldTech(idF2))) + % if ((length(idF) ~= length(idF2)) || any(abs(juld(idF) - juldTech(idF2)) > 1/86400)) + if (length(idF) ~= length(idF2)) fprintf('ERROR: Traj / Tech_aux consistency\n'); else g_NTCT_SpyInAscProf_evFlag(idC, 1:length(idF2)) = valveAct(idF2); @@ -552,7 +567,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) % series of measurements idF = find(ismember(measCode, [g_MC_DescProf g_MC_DriftAtPark g_MC_AscProf g_MC_InAirSeriesOfMeas g_MC_Surface g_MC_Grounded])); nbMax = max(histc(cycleNumber(idF), min(cycleNumber(idF)):max(cycleNumber(idF)))); - + g_NTCT_DescProf_juld = ones(length(g_NTCT_cycles), nbMax)*g_dateDef; g_NTCT_DescProf_pres = ones(length(g_NTCT_cycles), nbMax)*g_presDef; g_NTCT_DriftAtPark_juld = ones(length(g_NTCT_cycles), nbMax)*g_dateDef; @@ -564,7 +579,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_Surface_juld = ones(length(g_NTCT_cycles), nbMax)*g_dateDef; g_NTCT_Grounded_flag_juld = ones(length(g_NTCT_cycles), nbMax)*g_dateDef; g_NTCT_Grounded_flag_pres = ones(length(g_NTCT_cycles), nbMax)*g_presDef; - + for idC = 1:length(g_NTCT_cycles) idF = find((cycleNumber == g_NTCT_cycles(idC)) & (measCode == g_MC_DescProf)); if (~isempty(idF)) @@ -695,8 +710,8 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) if (~isempty(idF)) g_NTCT_TET_juld(idC) = juld(idF); end - end - + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % from META file metaFileName = [g_NTCT_NC_DIR '/' num2str(floatNum) '/' num2str(floatNum) '_meta.nc']; @@ -749,7 +764,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) end idVal = find(strcmp('CONFIG_PARAMETER_VALUE', metaData(1:2:end)) == 1, 1); - configValue = metaData{2*idVal}; + configValue = metaData{2*idVal}; idVal = find(strcmp('CONFIG_MISSION_NUMBER', metaData(1:2:end)) == 1, 1); configMissionNumberMeta = metaData{2*idVal}'; @@ -787,9 +802,9 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) if (~isempty(idF)) tolerancePres = configValue(idF, :); end - + % process retrieved data - + g_NTCT_ParkPres = ones(length(g_NTCT_cycles), 1)*g_presDef; g_NTCT_ProfPres = ones(length(g_NTCT_cycles), 1)*g_presDef; g_NTCT_TolerancePres = ones(length(g_NTCT_cycles), 1)*g_presDef; @@ -812,7 +827,7 @@ function plot_cycle_times(a_idFloat, a_idCycle, a_reload) g_NTCT_Grounded_flag(idC) = 1; end end - end + end fprintf('done\n'); end @@ -1336,7 +1351,7 @@ function change_plot(a_src, a_eventData) plot_cycle_times( ... g_NTCT_FLOAT_ID, ... mod(g_NTCT_cycle+1, length(g_NTCT_cycles)), 0); - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % bathy visibility elseif (strcmp(a_eventData.Key, 'b')) @@ -1344,7 +1359,7 @@ function change_plot(a_src, a_eventData) plot_cycle_times(g_NTCT_FLOAT_ID, g_NTCT_cycle, 0); display_current_config; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % surf only visibility elseif (strcmp(a_eventData.Key, 's')) @@ -1352,7 +1367,7 @@ function change_plot(a_src, a_eventData) plot_cycle_times(g_NTCT_FLOAT_ID, g_NTCT_cycle, 0); display_current_config; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % pdf output file generation elseif (strcmp(a_eventData.Key, 'p')) @@ -1451,18 +1466,18 @@ function after_zoom(a_src, a_eventData) % ------------------------------------------------------------------------------ % Callback used to customize text of data cursor. -% +% % SYNTAX : % data_cursor_output(a_src, a_eventData) -% +% % INPUT PARAMETERS : % a_src : object % a_eventData : event -% +% % OUTPUT PARAMETERS : -% +% % EXAMPLES : -% +% % SEE ALSO : % AUTHORS : Jean-Philippe Rannou (Altran)(jean-philippe.rannou@altran.com) % ------------------------------------------------------------------------------ diff --git a/decArgo_soft/soft/util/nc_trace_disp.m b/decArgo_soft/soft/util/nc_trace_disp.m index 61ea0cdd..3e2b94b0 100644 --- a/decArgo_soft/soft/util/nc_trace_disp.m +++ b/decArgo_soft/soft/util/nc_trace_disp.m @@ -65,16 +65,18 @@ function nc_trace_disp(varargin) % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_apex_argos_102015.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_dova.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova_dova.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova_dova.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_arn_ir.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_4.54.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\tmp.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\tmp.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44_BODC.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nova_dova.txt'; % number of displacements to plot g_NTD_DEFAULT_NB_PLOT_CYCLE = 5; diff --git a/decArgo_soft/soft/util/nc_trace_param.m b/decArgo_soft/soft/util/nc_trace_param.m index d8f6d949..c93d575b 100644 --- a/decArgo_soft/soft/util/nc_trace_param.m +++ b/decArgo_soft/soft/util/nc_trace_param.m @@ -41,7 +41,7 @@ function nc_trace_param(varargin) % g_NTP_NAME_PARAM1 = 'TEMP_DOXY'; % g_NTP_NAME_PARAM1 = 'IFREMER_TEMPORARY_BLUE_REF'; % g_NTP_NAME_PARAM1 = 'IFREMER_TEMPORARY_NTU_REF'; -g_NTP_NAME_PARAM1 = 'NITRATE'; +% g_NTP_NAME_PARAM1 = 'NITRATE'; % g_NTP_NAME_PARAM2 = 'TURBIDITY'; % g_NTP_NAME_PARAM2 = 'BBP700'; @@ -50,7 +50,7 @@ function nc_trace_param(varargin) % g_NTP_NAME_PARAM2 = 'CDOM'; % g_NTP_NAME_PARAM2 = 'IFREMER_TEMPORARY_F_SIG'; % g_NTP_NAME_PARAM2 = 'IFREMER_TEMPORARY_NTU_SIG'; -g_NTP_NAME_PARAM2 = 'NITRATE'; +% g_NTP_NAME_PARAM2 = 'NITRATE'; % g_NTP_NAME_PARAM2 = 'DOXY'; % top directory of NetCDF files to plot @@ -94,6 +94,7 @@ function nc_trace_param(varargin) % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\tmp.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44_BODC.txt'; % number of cycles to plot g_NTP_DEFAULT_NB_CYCLES = 5; diff --git a/decArgo_soft/soft/util/nc_trace_times.m b/decArgo_soft/soft/util/nc_trace_times.m index d1cdce40..37396974 100644 --- a/decArgo_soft/soft/util/nc_trace_times.m +++ b/decArgo_soft/soft/util/nc_trace_times.m @@ -63,28 +63,29 @@ function nc_trace_times(varargin) % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_apex_argos_102015.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_dova.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova_dova.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nova_dova.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_arn_ir.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_4.54.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_201.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_202.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_203.txt'; -FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_205.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_201.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_202.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_203.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_205.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_210.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_decId_211.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\tmp.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_arvor_ir_ALL_decId_2xx.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nke_argos.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nova_dova.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nova_dova.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_apex_argos.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\_nke_rem_rudics.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.43.txt'; FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; -% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; % FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\tmp.txt'; +% FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.44_BODC.txt'; fprintf('Plot management:\n'); fprintf(' Right Arrow : next float\n'); diff --git a/decArgo_soft/soft/util/nc_traj_adj_2_csv.m b/decArgo_soft/soft/util/nc_traj_adj_2_csv.m index 9c190eb4..c8ab9280 100644 --- a/decArgo_soft/soft/util/nc_traj_adj_2_csv.m +++ b/decArgo_soft/soft/util/nc_traj_adj_2_csv.m @@ -31,6 +31,8 @@ function nc_traj_adj_2_csv(varargin) FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\_nke_apmt_all.txt'; FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\arvor_5.45.txt'; FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\provor_5.74.txt'; +FLOAT_LIST_FILE_NAME = 'C:\Users\jprannou\_RNU\DecArgo_soft\lists\TrajChecker\tmp.txt'; + % directory to store the log file DIR_LOG_FILE = 'C:\Users\jprannou\_RNU\DecArgo_soft\work\'; diff --git a/decArgo_soft/soft/util/sub/get_sensor_list.m b/decArgo_soft/soft/util/sub/get_sensor_list.m index 3de3948a..eb13a733 100644 --- a/decArgo_soft/soft/util/sub/get_sensor_list.m +++ b/decArgo_soft/soft/util/sub/get_sensor_list.m @@ -57,7 +57,8 @@ 6901865, ... 6901866, ... 6902701, ... - 6902700 ... + 6902700, ... + 6902741 ... } o_sensorList = [{'CTD'}; {'OPTODE'}; {'OCR'}; {'ECO3'}; {'SUNA'}]; case { ...