User Tools

Site Tools


internal:administration:idl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
internal:administration:idl [2025/07/20 13:19] – [execute shell command] janinternal:administration:idl [2025/11/25 14:42] (current) – [symboltypes] jan
Line 195: Line 195:
   IDL> spawn, 'curl -V'   IDL> spawn, 'curl -V'
   curl: /opt/nv5/idl90/bin/bin.linux.x86_64/libcurl.so.4: no version information available (required by curl)   curl: /opt/nv5/idl90/bin/bin.linux.x86_64/libcurl.so.4: no version information available (required by curl)
-  curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.4.0-DEV OpenSSL/3.0.11 zlib/1.2.13 zstd/1.5.5 nghttp2/1.58.0 +  ...
-  Release-Date: 2023-12-06, security patched: 8.5.0-2ubuntu10.6 +
-  Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp +
-  Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets zstd+
   WARNING: curl and libcurl versions do not match. Functionality may be affected.   WARNING: curl and libcurl versions do not match. Functionality may be affected.
  
-The first line and the last lines tell you that %%libcurl.so.4%% from the %%/opt/nv5/idl90/...%% path makes problems. +The first and the last lines tell you that %%libcurl.so.4%% from the %%/opt/nv5/idl90/...%% path makes problems.  
 +But why should curl try to load libraries from /opt/nv5/... i.e. the IDL folder ?
  
-Another axample is ghostscript (gs) - which not even work:+Another example is ghostscript (gs) - which does not even work:
   IDL> SPAWN, 'gs --version'   IDL> SPAWN, 'gs --version'
   gs: /opt/nv5/idl90/bin/bin.linux.x86_64/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /lib/x86_64-linux-gnu/libgs.so.10)   gs: /opt/nv5/idl90/bin/bin.linux.x86_64/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /lib/x86_64-linux-gnu/libgs.so.10)
-   + 
-To get around you have to adapt the environment variable LD_LIBRARY_PATH . It is not present in standard bash environment but is set by IDL to access is own set of libraries, and remains valid in the SPAWN environment. We have two possibilities: +Again ghostscript tries to load lubraries from /opt/nv5/...  
-  * adapt from within IDL (but maybe IDL will have problems with that ...) + 
-    SETENV, 'LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:'+GETENV('LD_LIBRARY_PATH'+To get around you have to understand where the system seeks libraries. 
-  * Alternatively adapt within the SPAWN environment when calling your program +This is explained e.g. here: [[https://askubuntu.com/questions/1500913/find-default-library-paths-location-in-ubuntu]], or in the man pages of [[https://man7.org/linux/man-pages/man8/ld.so.8.html | ld.so]]. To ensure that IDL only uses libraries of a certain version they set the variable LD_LIBRARY_PATH to the idl library folders. It is not set in standard bash environmentbut in the SPAWN environment as it is a subrpocess of IDL: 
-    SPAWN, 'LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH; '+your_command_here +  IDL> SPAWN, 'echo $LD_LIBRARY_PATH' 
-The first solution is a bit dangerous as it may lead to incompatbilities within IDL.+  /opt/nv5/idl90/bin/bin.linux.x86_64:/opt/nv5/idl90/bin/bin.linux.x86_64/dm/lib:/opt/nv5/idl90/bin/bin.linux.x86_64/jre/lib/server:/opt/nv5/idl90/bin/bin.linux.x86_64/jre/lib/server/..:/opt/nv5/idl90/bin/bin.linux.x86_64/jre/lib/server/../native_threads 
 + 
 +We can ask Linux where we can find the libraries needed: 
 +  $whereis libcurl.so.4 
 +  libcurl.so.4: /usr/lib/x86_64-linux-gnu/libcurl.so.4 
 +and 
 +  $whereis libstdc++.so.6 
 +  libstdc++.so.6: /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
 + 
 +We have several possibilities: 
 + 
 +  * adapt the LD_LIBRARY_PATH from within IDL before invoking SPAWN. This was proposed to me : [[https://www.nv5geospatialsoftware.com/Support/Forums/aft/8650 in the IDL forum]] for the PAtH variable but maybe IDL will have problems with that. And you should do this only once to avoid an extremly long path with only your prepended entry
 +      %%SETENV, 'LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:'+GETENV('LD_LIBRARY_PATH')%% 
 + 
 +  * Alternatively adapt LD_LIBRARY_PATH within the SPAWN environment when calling your program 
 +      %%SPAWN, 'LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH; your_command_here'%% 
 + 
 +  * or even simpler unset this path variable in SPAWN: it is not needed as we are not doing IDL specific things, and when SPAWN is finished this is forgotten again. 
 +      %%SPAWN, 'unset LD_LIBRARY_PATH; your_command_here'%% 
 + 
 +According to IDL help about [[https://www.nv5geospatialsoftware.com/docs/Environment_Variables.html | Environment variables]] LD_LIBRARY_PATH is used for the Java libraries - i.e. probably for the IDE and its graphical interface. That means if you do not use the IDE the first solution will have no problems.
  
 Check with curl: Check with curl:
-    SPAWN, 'LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH; curl -V'+    SPAWN, 'unset LD_LIBRARY_PATH ; curl -V'
     curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.5.0 OpenSSL/3.0.13 zlib/1.3 brotli/1.1.0 zstd/1.5.5 libidn2/2.3.7 libpsl/0.21.2 (+libidn2/2.3.7) libssh/0.10.6/openssl/zlib nghttp2/1.59.0 librtmp/2.3 OpenLDAP/2.6.7     curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.5.0 OpenSSL/3.0.13 zlib/1.3 brotli/1.1.0 zstd/1.5.5 libidn2/2.3.7 libpsl/0.21.2 (+libidn2/2.3.7) libssh/0.10.6/openssl/zlib nghttp2/1.59.0 librtmp/2.3 OpenLDAP/2.6.7
-    Release-Date: 2023-12-06, security patched: 8.5.0-2ubuntu10.6 +    ... 
-    Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp +
-    Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd+
 Check with ghostscript Check with ghostscript
-    SPAWN, ''LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH; gs --version'+    SPAWN, 'unset LD_LIBRARY_PATH ; gs --version'
     10.02.1      10.02.1 
  
 +=> WORKS!
  
 ==== compile and run idl programs ==== ==== compile and run idl programs ====
Line 1828: Line 1845:
    1 => Plus sign (+)     1 => Plus sign (+) 
    2 => Asterisk (*)     2 => Asterisk (*) 
-   3 => Period (.) +   3 => one pixel dot (.) 
    4 => Diamond     4 => Diamond 
-   5 => Triangle 'up'+   5 => Triangle up (if symsize>0)  or down if symsize<0
    6 => Square     6 => Square 
    7 => X     7 => X 
Line 2488: Line 2505:
 ==== transparency ==== ==== transparency ====
  
-IDL does not know transparent overlays but on pixel based devices you can implement it with TVRD and TVRD.+IDL does not know transparent overlays but on pixel based devices you can implement it with TVRD and TV.
 Lets assume you want to put a bitmap BMP with size Nx, Ny at a position x0 y0 (pixels) with a tranparency factor of q_tra: Lets assume you want to put a bitmap BMP with size Nx, Ny at a position x0 y0 (pixels) with a tranparency factor of q_tra:
  
Line 2657: Line 2674:
 %%-dGraphicsAlphaBits=1%% avoids gridlines after rastering (http://www.idlcoyote.com/ps_tips/psstripes.html), \\ %%-dGraphicsAlphaBits=1%% avoids gridlines after rastering (http://www.idlcoyote.com/ps_tips/psstripes.html), \\
 %%-dEPSCrop%% crops the image at the bounding box. %%-dEPSCrop%% crops the image at the bounding box.
 +
 +You can execute gs from within IDL with the SPAWN command. As of IDL 9.x you need to prepend a ''unset LD_LIBRARY_PATH'' because IDL try to ensure its own (outdated) libraries for any spawn call:
 +  SPAWN, 'unset LD_LIBRARY_PATH; gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -r120 -dTextAlphaBits=4 -dGraphicsAlphaBits=1 -dEPSCrop -sOutputFile='+plt_name+'.png '+pl_name+'.eps', result, err_result
 +
 ==== postscript -> PDF ==== ==== postscript -> PDF ====
  
Line 3227: Line 3248:
 A one dimensional histogram is e.g. generated with A one dimensional histogram is e.g. generated with
  
-  histo = histogram( data , binsize=bin, locations = classes , /nan )+  binsize = 0.1 
 +  histo = histogram( data , binsize=binsize, locations = classes , /nan )
  
 the classes variable will contain the **lower borders** of the bins with the first bin starting at min(data). \\ the classes variable will contain the **lower borders** of the bins with the first bin starting at min(data). \\
Line 3246: Line 3268:
  
 or you write an own plot-histo procedure ... or you ask jan :-) ... or you write an own plot-histo procedure ... or you ask jan :-) ...
 +
 +
 +A histogram with geometric spacing, i.e. each bin is by a factor q_bin larger than the previous.\\
 +In this case data points lower or equal to zero are not allowed:
 +  q_bin = 2.0
 +  log_binsize = alog10(q_bin)
 +  histo = histogram( alog10(data[where(data gt 0)]), binsize=log_binsize, locations = log_bins, /nan )
 +  classes = 10^log_bins
 +
 +Plotting shall use then logarithmic scaling for the x-axes:
 +
 +    plot, classes , histo , psym=10, $
 +      xtitle = 'class (unit)', $
 +      ytitle = 'freq.', $
 +      /xlog
 +
  
 === 2-D histogram === === 2-D histogram ===
Line 3256: Line 3294:
   max_data_1 = max(data_1, /nan )   max_data_1 = max(data_1, /nan )
   N_bins_1 = fix((max_data_1-min_data_1)/bin_size_1)+1   N_bins_1 = fix((max_data_1-min_data_1)/bin_size_1)+1
-  bins_1 = min_data_1 + (findgen(N_bins_1) + 0.5) * bin_size_1 ; output of histo refers to lower border of bins => add 1/2binsize to center them in bin+  ; output of histo refers to lower border of bins => add 1/2binsize to center them in bin 
 +  bins_1 = min_data_1 + (findgen(N_bins_1) + 0.5) * bin_size_1 
        
   ; set bin-size, min and max and vector with bin-borders for data set 2   ; set bin-size, min and max and vector with bin-borders for data set 2
Line 3263: Line 3302:
   max_data_2 = max(data_2, /nan )   max_data_2 = max(data_2, /nan )
   N_bins_2 = fix((max_data_2-min_data_2)/bin_size_2)+1   N_bins_2 = fix((max_data_2-min_data_2)/bin_size_2)+1
 +  ; output of histo refers to lower border of bins => add 1/2binsize to center them in bin
   bins_2 = min_data_2 + (findgen(N_bins_2) + 0.5)*bin_size_2   bins_2 = min_data_2 + (findgen(N_bins_2) + 0.5)*bin_size_2
        
internal/administration/idl.1753017559.txt.gz · Last modified: by jan