###############################################################################
# Copyright (c) 2011-2019 Trimble Inc.
# $Id: NoPiUT_Common_Display.py,v 1.8 2019/09/11 00:53:06 ddelore Exp $
###############################################################################
#
# NoPiUT_Common_Display.py
#
# Miscellaneous collection of basic utility functions to generate and
# store plots/histograms.
#
# Includes functions previously within NoPi_Display/NoPiDI_Utils.py
# which has now been decprecated
#
###############################################################################

from NoPiUT_Const import *


###############################################################################
# Define the line colour for a given SV
# The colours are taken directly from the Matlab code for load_pi
###############################################################################

def get_colour( sv ) :
  colour_lut=[]
  colour_lut.append( '#0000ff' )
  colour_lut.append( '#ff0000' )
  colour_lut.append( '#ff00ff' )
  colour_lut.append( '#00ff00' )
  colour_lut.append( '#00ffff' )
  colour_lut.append( '#f00000' )
  colour_lut.append( '#ffff00' )
  colour_lut.append( '#008080' )
  colour_lut.append( '#008000' )
  colour_lut.append( '#800000' )
  colour_lut.append( '#000080' )
  colour_lut.append( '#808000' )
  colour_lut.append( '#800080' )
  colour_lut.append( '#ffb1b1' )
  colour_lut.append( '#c0c0c0' )
  colour_lut.append( '#808080' )
  colour_lut.append( '#80ff00' )
  colour_lut.append( '#8033b1' )
  colour_lut.append( '#8000ff' )

  return( colour_lut[ (sv % 19) - 1 ] )


###############################################################################
# Return the full name of the requested measurement type
# Used for plot and table labelling
###############################################################################

def get_meas_title( meas_type ) :
  if ( meas_type == cNoPiConst.MEAS_TYPE_DD_CARR ) :
    title = 'D.D. Carrier Phase'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_DD_CODE ) :
    title = 'D.D. Pseudorange'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_DD_DOPP ) :
    title = 'D.D. Doppler'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_SD_CNO ) :
    title = 'S.D. CNo'
  else :
    title = [ 'D.D. Carrier Phase', 'D.D. Psuedorange', 'D.D. Doppler', 'S.D. CNo' ]

  return( title )


###############################################################################
# Return units for NoPi data based on measurement type.
###############################################################################

def get_meas_units( meas_type, resolve_sdiff = 0 ) :
  if ( meas_type == cNoPiConst.MEAS_TYPE_DD_CARR ) :
    if ( resolve_sdiff ) :
      title = '[mm]'
    else :
      title = '[mcycles]'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_DD_CODE ) :
    title = '[m]'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_DD_DOPP ) :
    title = '[m/s]'
  elif ( meas_type == cNoPiConst.MEAS_TYPE_SD_CNO ) :
    title = '[dB-Hz]'
  else :
    print('Unknown measurement type')
    sys.exit()

  return( title )


###############################################################################
# Return a shorter name for each receiver directory name. Used when
# adding a legend to long term trend plots
###############################################################################

def get_legend_name( rcvr ) :

  if( rcvr.upper( ) == '' ) :
    short_name = 'Apollo_Zero'
  elif( rcvr.upper( ) == 'MAXWELLVI_ZERO' ) :
    short_name = 'MaxVI_Zero'
  elif( rcvr.upper( ) == 'MAXWELLVII_ZERO' ) :
    short_name = 'MaxVII_Zero'
  elif( rcvr.upper( ) == 'SHORT' ) :
    short_name = 'Short'
  elif( rcvr.upper( ) == 'MAXWELLVI_SHORT' ) :
    short_name = 'MaxVI_Short'
  elif( rcvr.upper( ) == 'MAXWELLVII_SHORT' ) :
    short_name = 'MaxVII_Short'
  elif( rcvr.upper( ) == 'RELOCK' ) :
    short_name = 'Relock'
  elif( rcvr.upper( ) == 'MAXWELLVI_RELOCK_ZERO' ) :
    short_name = 'MaxVI_Rlk_Zero'
  elif( rcvr.upper( ) == 'MAXWELLVI_NOV_RELOCK_ZERO' ) :
    short_name = 'MaxVI_Nov_Rlk_Zero'
  elif( rcvr.upper( ) == 'MAXWELLVII_RELOCK_ZERO' ) :
    short_name = 'MaxVII_Rlk_Zero'
  else :
    short_name = 'Invalid'

  return( short_name )


###############################################################################
# Define the line colour for a given SV
# The colours are taken directly from the Matlab code for load_pi
###############################################################################

def get_stats_colour( index ) :

  colour_lut=[]
  colour_lut.append( '#7700ff' )
  colour_lut.append( '#f700ff' )
  colour_lut.append( '#ff0088' )
  colour_lut.append( '#ff0009' )
  colour_lut.append( '#0009ff' )
  colour_lut.append( '#983dff' )
  colour_lut.append( '#bb7aff' )
  colour_lut.append( '#ff7700' )
  colour_lut.append( '#0088ff' )
  colour_lut.append( '#c1ff7a' )
  colour_lut.append( '#a5ff3d' )
  colour_lut.append( '#fff700' )
  colour_lut.append( '#00fff7' )
  colour_lut.append( '#00ff77' )
  colour_lut.append( '#09ff00' )
  colour_lut.append( '#88ff00' )
  colour_lut.append( '#008a12' )
  colour_lut.append( '#8a1200' )
  colour_lut.append( '#c77e00' )
  colour_lut.append( '#ffa305' )
  colour_lut.append( '#008a57' )
  colour_lut.append( '#0561ff' )
  colour_lut.append( '#8a0077' )
  colour_lut.append( '#248aff' )
  colour_lut.append( '#2b24ff' )
  colour_lut.append( '#9924ff' )
  colour_lut.append( '#9924ff' )
  colour_lut.append( '#ff24f8' )
  colour_lut.append( '#24f8ff' )
  colour_lut.append( '#61abff' )
  colour_lut.append( '#9ecbff' )
  colour_lut.append( '#ff248a' )
  colour_lut.append( '#24ff99' )
  colour_lut.append( '#ffd29e' )
  colour_lut.append( '#ffb561' )
  colour_lut.append( '#ff2b24' )
  colour_lut.append( '#24ff2b' )
  colour_lut.append( '#8aff24' )
  colour_lut.append( '#f8ff24' )
  colour_lut.append( '#ff9924' )
  colour_lut.append( '#67cd23' )
  colour_lut.append( '#23cd34' )
  colour_lut.append( '#23cd89' )
  colour_lut.append( '#23bccd' )
  colour_lut.append( '#bccd23' )
  colour_lut.append( '#88e14c' )
  colour_lut.append( '#abae81' )
  colour_lut.append( '#2367cd' )
  colour_lut.append( '#cd8923' )
  colour_lut.append( '#c081ea' )
  colour_lut.append( '#a54ce1' )
  colour_lut.append( '#3423cd' )
  colour_lut.append( '#cd3423' )
  colour_lut.append( '#cd2367' )
  colour_lut.append( '#cd23bc' )
  colour_lut.append( '#8923cd' )
  colour_lut.append( '#ff0f87' )
  colour_lut.append( '#ff0f0f' )
  colour_lut.append( '#ff870f' )
  colour_lut.append( '#ffff0f' )
  colour_lut.append( '#ff0fff' )
  colour_lut.append( '#ff4da6' )
  colour_lut.append( '#ff8ac4' )
  colour_lut.append( '#0fff0f' )
  colour_lut.append( '#0f0fff' )
  colour_lut.append( '#0f87ff' )
  colour_lut.append( '#0fffff' )
  colour_lut.append( '#0fff87' )
  colour_lut.append( '#a943cb' )
  colour_lut.append( '#cb43a9' )
  colour_lut.append( '#cb4365' )
  colour_lut.append( '#cd6543' )
  colour_lut.append( '#6543cb' )
  colour_lut.append( '#bf73d9' )
  colour_lut.append( '#d5a3e6' )
  colour_lut.append( '#cba943' )
  colour_lut.append( '#4365cb' )
  colour_lut.append( '#b4e6a3' )
  colour_lut.append( '#8cd973' )
  colour_lut.append( '#a9cb43' )
  colour_lut.append( '#43a9cb' )
  colour_lut.append( '#43cba9' )
  colour_lut.append( '#43cb65' )
  colour_lut.append( '#65cb43' )

  index = index % len(colour_lut)

  return( colour_lut[ index ] )


###############################################################################
# ASCII version of PNG file
###############################################################################

png = ( '89504e470d0a1a0a0000000d49484452000001180000011808'
    +   '03000000b05019be00000021504c5445ffffff4060806080c0'
    +   'fffbf080a0c0c0dcc0a0a0c0c0c0c0a6caf0a0c0c08080c067'
    +   '74f5fd0000000174524e530040e6d86600000bad4944415478'
    +   'daec9deb6ee5ac0e868939e470ff17fc6d55da533590bc766c'
    +   '03ab8dff8c345d01f26030368684b65078a529cb92c22b4d30'
    +   'cb52c22b35982fc9e1951acc97c4f04a0de64bc22b3fc1bc68'
    +   '2098e5b5dd4d30af816a80f99635bc5281796d7703cc3b0b9f'
    +   'c1bc681098d74071c0fc79e7f2078bd776d760dab2bd60cef2'
    +   'e79dcbe55b5e03f513cc8b0683796df70598d77663307fdeb9'
    +   'bce2f0e79dcb1faffedaee2698d7405d80790dd40598d740a9'
    +   'c060e732ff933f00063b97b9d07229c71e7f1d186ca06252aa'
    +   'dafc60e4066a153f46dbc782f117cabf17cc1143084901679f'
    +   '1f8cc662d3f25bd93cd015cbb1b8cd0c46e92e451d1a9a168c'
    +   '7ed19be538e677db6da6845589a6fcd2401530501fe981d969'
    +   '3bfd2e349661cde5370d28457b3568e60f2c9b9ad35c8e9475'
    +   'd371fc14308125b1fc78625f14f211602207ca719e457fc554'
    +   'c35afc4b163016b67b723081211bb59fa18f37dd06936e6aa2'
    +   'fc74a5b1b10e7bc3538e9f6db9cd3a2c993b9763c1f80ef1f5'
    +   '73c9788601d4062ace0526d80a7da6cef468cc474ec1c04a0f'
    +   '47738c02e3bcb2dae9e77491d3a70c27c70d8dfdea0537fa00'
    +   '327e233addbe619a9d0cd73ac6ef5ea6c234a3c0cda0a9c930'
    +   'b9ac8f36e723583a96891734022eb5106c700106789d960c8f'
    +   '8b42c7d1c27a9d940c67de5d55adddd173c79464185ca27652'
    +   '844fce380333d675faa6eee8e1321f19ec07986cacc0d8c674'
    +   '64608d8276dec52b0eb41d40939141f515bec2dc877222729e'
    +   'cb5c64506dfc4642eb01d362a7ca32027690df7b3bee5642e5'
    +   'ccb4af725f55e1879038fdba21c4132d6716a3ed38e2852fd0'
    +   '08c164a6dfbf053f151699f821acc9156647c197034c346747'
    +   '7dae344f5aac15064f07fbd554355192675e546090a53dc08a'
    +   '667bb873397a1123689cf0152eedee3a0719508745de7c0942'
    +   '29131c42c8f76092e00c80b677e7729a401582966db64bb2c1'
    +   '64e8be862868d861bd8c1f6a99007a498fd9f76f1ca7325505'
    +   '5101c6e135f2206f329f9b9c445dd6e33ea7324465aaf2c1b4'
    +   '01c0f8f46dea4e269473f10b899440e253c925e71ca1ed76f6'
    +   '9bfff54df1009345380a356ae84ba69c4b07ce0f02a39d5a76'
    +   'ba79b8279873e95535450f463b916003e5a030a7c2b3726542'
    +   '9a4613a38ab5139873e1da255b5135995855840e64d653d905'
    +   '80c1b3aa6ed9c232f34bf207732ebb1130146e6328dd188eca'
    +   '7448e94ca7dabffe2dc028315b5d18da7ad5245cc57ec6e318'
    +   'fbff3f844d18646c0e4e7aecd1136f823fb78c4c679853edad'
    +   '01502098166c76c5a8b72e9b54ceedb756183d98bd2a34e301'
    +   '2c23531a4a7c6edde60706d85fa6cae4842b05643098ef07c9'
    +   '4165c8088c32b4c2884d51ab90ed84d16ddb959e8289cac35c'
    +   'f887741f40321e4b99b994c5a23ce3465099531bcc49c5bcf7'
    +   'e9b30b985516c002734c0534fb8189cfc16c622c3886755341'
    +   '6ea77b4a0384dcd49d8b04e86cb0519a75f75dd5a3bb3d0693'
    +   'd3b9ad8bb5bc1a4c7c5642618436704e981eccf77f10170c8f'
    +   'ccc293db0799a741c8622f3b1a81a99f303b8984c11c8d77ca'
    +   'b6abbbbd8a8a5b6409eeaa737df122fb11252d45d391f41c8c'
    +   '627201463bb56bc0d95c5dc0d0d3bb6ff4a7f1b19392afdc53'
    +   'abab16521b0c1e0ed290bfb030948143014c3f62a1ba49208a'
    +   '2bb6d3644066bb1b49e06fc568240510c595678f595c435ad7'
    +   '12f929a3ab2598bab6e75eb5c5050e20f11c8cdfa85cc5ac77'
    +   '608ee7aea3c5608ab765666408755915e10e4c045a6f3bcf08'
    +   '5dbc84bb423b92c26537609d37b34d1838f839285209e630ec'
    +   '85cdf8ae63d0126dc652ebb9cbda762e97d4fc83e96042bf2e'
    +   'e2ac253c83f1bbe1a6508b89460326424d94dfe7c2cdf64e77'
    +   '63e6d0384db87731455dd09e2ec1e0b1b4de17990cac932414'
    +   'a8c86247e0319880b143702664d04f713d2230042fd64105af'
    +   '40a5d8e3490e57da0187004ce17badac9159821a0ddff2cb07'
    +   '6d6183896caf95d99149bb12567cdbbeb01512cf61ad7a63ab'
    +   'b3d87a40aa3b37458e179e9fa587346b3048652469fe284826'
    +   'ef4d2e45cd602d0c30f5cbc8c606ce73ae25551da902234743'
    +   '0c30e5fc0c6caddccd8c5ba12f49259ba54aa8c262000cdb4f'
    +   'ec7a5c5c0c064b7a0226e20eef7b2dc52a07836587ebbbba44'
    +   '6143fd9586391c8492adc12476b59e994ec5209c1a11181119'
    +   '1a703b2673934e2e0a308aeac97396b1ba49590466015cfaa3'
    +   'f103b31c26603a7dd0afa4f37f28c04029080c26d3e702fd9d'
    +   '1154584def6be78389808b4c927ce72b01531806815144fd55'
    +   'c1faedb201fe60ead299efb128e588880a7fd19e4cdb57d860'
    +   'c8980bbe4c7b2351e8d27aa013138cf367b1a9acf9df81fc42'
    +   '2010e90b8642e0830151ae4e72b3c84b666040a00a72a9b03a'
    +   '08b2c80e1a0d429b6cf76fe92bde60320e86e3fd177f327831'
    +   '05545aa5909298ef7832223051ea06e0742dc0a533199c6717'
    +   'd5f93824df89cc30aae92d7891a74ee17ab0774d01491c3e96'
    +   '5c0268284a13b0c471d36fbaeb3b419172308d07c69211dc0c'
    +   'aa8b44a75b3047a3b604c8f406937d3e67bede82698edb3cd2'
    +   '366de77ea57025caa850abde4b2e2b70d806a8cce3cd2e7a90'
    +   '52058cfb5032825335b6497877ef7f5b6adfb18405605180a9'
    +   '9a40f705a7b95446bb295a1a56bddd820d352f7e0698555440'
    +   'bddb047e38cc718aba8b358afa20177ae951a1ab4333f792fe'
    +   '841b8e638ef20f1423294824d523b085965dcdbc604cce5d2b'
    +   '3a20cf60b0b7e6dca40743bc971d1224a7c0108bb4a59a2c50'
    +   '184c260e1f4bd8146159ab0ea93a2589f57a9f084cb2bb3f06'
    +   '2b0caef518399412feb91c4cacc0d0b30e1cb8c07b688a50aa'
    +   '49b43a12d54d5d3c6e49c1a9261a034ae6d34b4b2e3e929683'
    +   '5240f5fc7e7471bab1cd6db778d541c1695ba4b5149b35961a'
    +   '03b839c4672c59a4d51d8e736eaeb85491601730c5667911fd'
    +   '2c74ad305e89d68f2c0bd6de483ece51f541fe60274a307ceb'
    +   '987454b0ad8eca59977d790f99af4a63324e075ec1d6a44a2e'
    +   'c138e5ef664087d6c76f41e3c1e833e2ab144d3a4a56aabd82'
    +   '02321adae5591821c9a976f07df2d9d114b7af826700666a34'
    +   'd9b3622198811f748f7797adadc1914ca5a14f6577a002ac43'
    +   'e8038616a5903116d4c0e02100cc78b559cf0d4c7da636aa4b'
    +   'efb7158485ce6a58ba4df96e60f49362aabcd56c3e7071ed4e'
    +   '91c9641548cb21c4be6b040f30caadaf8d5aefaf285cf34d0b'
    +   'e77de823b38f15cba4e787c069f1927487674b375c235851fa'
    +   '91e99ad541944a2939e7f23f2162a8451ae1851c2082375ac0'
    +   '1d55ce2ae39bb9a076bfbab91f1587caa39f43f2ed3655f016'
    +   '5ab87bfa83ced00ee202d286464902add9420f326136320483'
    +   'ada187ac613232b829a18fa4a9c83056c3a1932c711e329c24'
    +   'a6d20dcc122621b3b29a11ba8199844ce1ed7d879e60683c99'
    +   'f4e4dbe0fe6ec13e9a4c6072897dc1b42b1c84057f93c65fbe'
    +   '047499bf443697147acae0838f999fab46a1ab0c3df8b84a52'
    +   'b1425f1978f031296ec3f69761071f294ccd25a0ba73e7f336'
    +   '65122e01d7de134b98276f8b51ffe66ca1714d6180b05ae069'
    +   '8a7035144648af838f386c50a6e212b86a9e7c2c3446bf8731'
    +   'c26f08799e7004f3d1009134dfdc1461e66198743bf8180196'
    +   'c9b804a9feda398bb8c0ffda3b972d8581108822fdc88cffff'
    +   'c1ee6605074da1e0a4eed64dbc92ae7e719c52c6996b393331'
    +   'a1575063857ca0f1719e532c05e07130e1283a229bc504df08'
    +   '680a855619524ef4926375e3d44ac45dea412fc12f7d49ec78'
    +   'a6cea403197799c77eeab6c606c6ea023111275bfbb6fd498c'
    +   '34e11d8fba163c3faee71dc53df1ad9a7af26fbf1fc0564d23'
    +   'b29f7a015a5a91db50328097a819a99d0dc090db8ec4fe3505'
    +   'b63bfb91b63f398162e948d26fbc8191a5ad18dccd4f41c76d'
    +   '9598185d4114a1b5522f069303cc583a839f2c1e0afc23625f'
    +   '924e16c7d640c91ef255649f2caedf3d55556f3755d5b98f25'
    +   '05d48a917f0db0734231064b8462cc5908c598514431661451'
    +   '8c8108c5985a28c66008c5d8094d31e6929862cc84a61833a1'
    +   '29c6408462a8e50f4691c3e5178b1e4c6807469103c75c076a'
    +   '71b8fc62d18309edc02872b8fc62d18309edc02872a0160746'
    +   '91c3e5178b1e4ce8078c7380e00f1e0ca90000000049454e44'
    +   'ae426082'
    )


###############################################################################
# Create the Trimble logo PNG file from the above data
###############################################################################

def create_logo_png() :
  fptr = open( 'TRMBlogoMed.png', 'wb' )
  for x in range( 3104 ) :
    tmpc = chr( int( png[ 2*x : 2*x+2 ], 16 ) )
    fptr.write( tmpc )
  fptr.close()
