| Bsoft 2.0.5 Bernard's software package

Macros | Enumerations | Functions
utilities.h File Reference

Header file for general utilities. More...

`#include <stdio.h>`
`#include <string.h>`
`#include <ctype.h>`
`#include <unistd.h>`
`#include <pwd.h>`
`#include <time.h>`
`#include <math.h>`
`#include <climits>`
`#include <cfloat>`
`#include <algorithm>`
`#include <iostream>`
`#include <iomanip>`
`#include <vector>`
`#include <tuple>`
`#include "Bstring.h"`

Go to the source code of this file.

## Macros
#define | BVERSION "2.0.6-20191125"
#define | MAXLINELEN 1024
#define | SMALLFLOAT 1e-30
#define | MIN_SIZE_FOR_THREADING 100000
#define | TRIGPRECISION 1e-30
#define | PLANCK 6.626070E-34
#define | ECHARGE 1.602177E-19
#define | EMASS 9.109384E-31
#define | LIGHTSPEED 299792458
#define | M_PI 3.14159265358979323846264338327950288
#define | M_PI_2 1.57079632679489661923132169163975144
#define | M_PI_4 0.785398163397448309615660845819875721
#define | TWOPI 6.28318530717958647692528676655900576
#define | MIN2PI -6.28318530717958647692528676655900576
#define | GOLDEN 1.61803398874989484820458683436563811772
#define | RHO 0.81
#define | VERB_NONE 0
#define | VERB_RESULT 1
#define | VERB_LABEL 2
#define | VERB_PROCESS 4
#define | VERB_STATS 8
#define | VERB_FULL 16
#define | VERB_TIME 32
#define | VERB_MEMORY 64
#define | VERB_DEBUG 128
#define | VERB_DEBUG_STAR 256
#define | VERB_DEBUG_XML 512
#define | VERB_DEBUG_DM 1024
#define | _systype_
#define | _datatype_
#define | FILL_USER 0
#define | FILL_AVERAGE 1
#define | FILL_BACKGROUND 2
#define | FILL_MIN 3
#define | FILL_MAX 4

## Enumerations
enum | SysType { Unknown_System = 0, BigIEEE = 1, BigOther = 5, LittleIEEE = 6, LittleAlpha = 7, LittleVAX = 8, LittleOther = 10 }
enum | DataType { Unknown_Type = 0, Bit = 1, UCharacter = 2, SCharacter = 3, UShort = 4, Short = 5, UInteger = 6, Integer = 7, ULong = 8, Long = 9, Float = 10, Double = 11 }
| Base data type specifier. More...

## Functions
ostream & | tab (ostream &out)
string | get_cmd_line (int argc, char **argv)
| Returns the command line as a string. More...
Bstring | command_line_time (int n, char **strings)
| Returns a set of strings and time in a string. More...
string | get_user_name ()
| Returns the user name. More...
void | usage (const char **use, int all)
| Prints usage information. More...
SysType | systype (int show)
| Finds the system type - mostly just for byte order. More...
size_t | system_processors ()
| Returns the number of processors. More...
long | system_memory ()
| Returns system memory size. More...
int | memory_check (long mem_required)
| Checking if there is enough memory, abort if not. More...
int | bexit (int value)
| Exit function for cleanup and debugging. More...
DataType | getdatatype (char letter)
| Get the data type indicated by a single letter code. More...
int | select_numbers (Bstring &string, int n, int *numsel)
| Converts a string with a selection specification into an integer array. More...
int | findNextPowerOf (int startNumber, int powerOf)
| Finds the next greatest number that is a power of a given number. More...
int | get_integer (char *ptr, int len)
| Converts a defined length string into an integer. More...
float | get_float (char *ptr, int len)
| Converts a defined length string into a floating point number. More...
void | swapbytes (unsigned char *v, size_t n)
| Swaps bytes. More...
void | swapbytes (size_t size, unsigned char *v, size_t n)
| Swaps bytes. More...
void | vax2ieee (unsigned char *v, int sb)
| Converts VAX floating point format to IEEE floating point format. More...
double | angle_set_negPI_to_PI (double angle)
| Returns an angle between -PI and PI. More...
float | remove_negative_zeros (float value0, float threshold)
| Prevent a negative sign from being placed in front of zero value in a text file. More...
size_t | get_chunk_size (size_t datasize)
| Returns the chunk size per thread. More...
size_t | get_chunk_size (size_t datasize, size_t c)
| Returns the chunk size per thread. More...
int | error_show (string message, string file, int line)
| Displays the error with file and line reference. More...

## Detailed Description

Header file for general utilities.

Author
  Bernard Heymann

Date
  Created: 19990722
  Modified: 20170711

Definition in file utilities.h.

## Macro Definition Documentation

## ◆ _datatype_

#define _datatype_

Definition at line 160 of file utilities.h.

## ◆ _systype_

#define _systype_

Definition at line 136 of file utilities.h.

## ◆ BVERSION

#define BVERSION "2.0.6-20191125"

Definition at line 9 of file utilities.h.

## ◆ ECHARGE

#define ECHARGE 1.602177E-19

Definition at line 49 of file utilities.h.

## ◆ EMASS

#define EMASS 9.109384E-31

Definition at line 50 of file utilities.h.

## ◆ FILL_AVERAGE

#define FILL_AVERAGE 1

Definition at line 173 of file utilities.h.

## ◆ FILL_BACKGROUND

#define FILL_BACKGROUND 2

Definition at line 174 of file utilities.h.

## ◆ FILL_MAX

#define FILL_MAX 4

Definition at line 176 of file utilities.h.

## ◆ FILL_MIN

#define FILL_MIN 3

Definition at line 175 of file utilities.h.

## ◆ FILL_USER

#define FILL_USER 0

Definition at line 172 of file utilities.h.

## ◆ GOLDEN

#define GOLDEN 1.61803398874989484820458683436563811772

Definition at line 81 of file utilities.h.

## ◆ LIGHTSPEED

#define LIGHTSPEED 299792458

Definition at line 51 of file utilities.h.

## ◆ M_PI

#define M_PI 3.14159265358979323846264338327950288

Definition at line 59 of file utilities.h.

## ◆ M_PI_2

#define M_PI_2 1.57079632679489661923132169163975144

Definition at line 62 of file utilities.h.

## ◆ M_PI_4

#define M_PI_4 0.785398163397448309615660845819875721

Definition at line 65 of file utilities.h.

## ◆ MAXLINELEN

#define MAXLINELEN 1024

Definition at line 44 of file utilities.h.

## ◆ MIN2PI

#define MIN2PI -6.28318530717958647692528676655900576

Definition at line 71 of file utilities.h.

## ◆ MIN_SIZE_FOR_THREADING

#define MIN_SIZE_FOR_THREADING 100000

Definition at line 46 of file utilities.h.

## ◆ PLANCK

#define PLANCK 6.626070E-34

Definition at line 48 of file utilities.h.

## ◆ RHO

#define RHO 0.81

Definition at line 91 of file utilities.h.

## ◆ SMALLFLOAT

#define SMALLFLOAT 1e-30

Definition at line 45 of file utilities.h.

## ◆ TRIGPRECISION

#define TRIGPRECISION 1e-30

Definition at line 47 of file utilities.h.

## ◆ TWOPI

#define TWOPI 6.28318530717958647692528676655900576

Definition at line 68 of file utilities.h.

## ◆ VERB_DEBUG

#define VERB_DEBUG 128

Definition at line 112 of file utilities.h.

## ◆ VERB_DEBUG_DM

#define VERB_DEBUG_DM 1024

Definition at line 115 of file utilities.h.

## ◆ VERB_DEBUG_STAR

#define VERB_DEBUG_STAR 256

Definition at line 113 of file utilities.h.

## ◆ VERB_DEBUG_XML

#define VERB_DEBUG_XML 512

Definition at line 114 of file utilities.h.

## ◆ VERB_FULL

#define VERB_FULL 16

Definition at line 109 of file utilities.h.

## ◆ VERB_LABEL

#define VERB_LABEL 2

Definition at line 106 of file utilities.h.

## ◆ VERB_MEMORY

#define VERB_MEMORY 64

Definition at line 111 of file utilities.h.

## ◆ VERB_NONE

#define VERB_NONE 0

Definition at line 104 of file utilities.h.

## ◆ VERB_PROCESS

#define VERB_PROCESS 4

Definition at line 107 of file utilities.h.

## ◆ VERB_RESULT

#define VERB_RESULT 1

Definition at line 105 of file utilities.h.

## ◆ VERB_STATS

#define VERB_STATS 8

Definition at line 108 of file utilities.h.

## ◆ VERB_TIME

#define VERB_TIME 32

Definition at line 110 of file utilities.h.

## Enumeration Type Documentation

## ◆ DataType

enum DataType

Base data type specifier.

    This determines what simple data type is used in an image.

Enumerator
Unknown_Type |
Bit |
UCharacter |
SCharacter |
UShort |
Short |
UInteger |
Integer |
ULong |
Long |
Float |
Double |

Definition at line 146 of file utilities.h.

## ◆ SysType

enum SysType

Enumerator
Unknown_System |
BigIEEE |
BigOther |
LittleIEEE |
LittleAlpha |
LittleVAX |
LittleOther |

Definition at line 127 of file utilities.h.

## Function Documentation

## ◆ angle_set_negPI_to_PI()

double angle_set_negPI_to_PI | ( | double | angle | ) |

Returns an angle between -PI and PI.

Parameters

  angle | input angle.

Returns
  double angle between -PI and PI.

Reference: Derived from CCP4 code

Definition at line 594 of file utilities.cpp.

## ◆ bexit()

int bexit | ( | int | value | ) |

Exit function for cleanup and debugging.

Parameters

  value | exit value.

Returns
  int given value.

Definition at line 273 of file utilities.cpp.

## ◆ command_line_time()

Bstring command_line_time | ( | int | n,
|  | char ** | strings
| ) |  |

Returns a set of strings and time in a string.

Parameters

  n | the number of strings.
  **strings | an array of strings.

Returns
  Bstring new string.

      This is designed to pack the command line into a string followed by
      a second string for the time.

Definition at line 60 of file utilities.cpp.

## ◆ error_show()

int error_show | ( | string | message,
|  | string | file,
|  | int | line
| ) |  |

Displays the error with file and line reference.

Parameters

  *message | a string to be included.
  *file | the file name (should be FILE).
  line | the line number (should be LINE).

Returns
  int error number.

      The function uses perror() to display a message containing the source
      file and line number where it originated.

  Reference: Derived from CCP4 code

Definition at line 755 of file utilities.cpp.

## ◆ findNextPowerOf()

int findNextPowerOf | ( | int | startNumber,
|  | int | powerOf
| ) |  |

Finds the next greatest number that is a power of a given number.

Author
  Dan Krainak

Parameters

  startNumber | number to begin from.
  powerOf | power of this number is the number returned.

Returns
  int the next greatest power (i.e. 128) or 0 on error.

      Loop through the powerOf variable, multiplying it each successive
      iteration until it is greater than the starting number.
      Eg., the next greatest power of 2 starting at 100 is 128.

Definition at line 433 of file utilities.cpp.

## ◆ get_chunk_size() [1/2]

size_t get_chunk_size | ( | size_t | datasize | ) |

Returns the chunk size per thread.

Parameters

  datasize | size of data to be divided into chunks.

Returns
  long chunk size.

      If multiple processors are used, the chunk size is set to the data size
      divided by the number of processors.
      Otherwise, the chunk size is equal to the data size.

  Reference: Derived from CCP4 code

Definition at line 645 of file utilities.cpp.

## ◆ get_chunk_size() [2/2]

size_t get_chunk_size | ( | size_t | datasize,
|  | size_t | c
| ) |  |

Returns the chunk size per thread.

Parameters

  datasize | size of data to be divided into chunks.
  c | channel size to align chunk to.

Returns
  long chunk size.

      If multiple processors are used, the chunk size is set to the data size
      divided by the number of processors.
      Otherwise, the chunk size is equal to the data size.

  Reference: Derived from CCP4 code

Definition at line 679 of file utilities.cpp.

## ◆ get_cmd_line()

string get_cmd_line | ( | int | argc,
|  | char ** | argv
| ) |  |

Returns the command line as a string.

Parameters

  argc | the number of command line arguments.
  **argv | the command line arguments.

Returns
  string the command line string.

      Concatenates the command line arguments into one string. The string
      receiving the command line must be at least 1024 bytes long.

Definition at line 36 of file utilities.cpp.

## ◆ get_float()

float get_float | ( | char * | ptr,
|  | int | len
| ) |  |

Converts a defined length string into a floating point number.

Parameters

  *ptr | pointer to the string.
  len | length to be scanned.

Returns
  float the floating point number.

      The string is copied, 0-terminated, and scanned for a floating point number.

Definition at line 482 of file utilities.cpp.

## ◆ get_integer()

int get_integer | ( | char * | ptr,
|  | int | len
| ) |  |

Converts a defined length string into an integer.

Parameters

  *ptr | pointer to the string.
  len | length to be scanned.

Returns
  int the integer.

      The string is copied, 0-terminated, and scanned for an integer.

Definition at line 459 of file utilities.cpp.

## ◆ get_user_name()

string get_user_name | ( |  | ) |

Returns the user name.

Returns
  string user name.

      It uses getpwuid_r (thread safe) to find the user in the password file.

Definition at line 85 of file utilities.cpp.

## ◆ getdatatype()

DataType getdatatype | ( | char | letter | ) |

Get the data type indicated by a single letter code.

Parameters

  letter | letter indicating data type.

Returns
  DataType data type (defined in rwimg.h).

      This function is used in optional command-line arguments to indicate
      a new data type for an image.

Definition at line 288 of file utilities.cpp.

## ◆ memory_check()

int memory_check | ( | long | mem_required | ) |

Checking if there is enough memory, abort if not.

Parameters

  mem_required | memory required.

Returns
  int 1 if enough.

Definition at line 248 of file utilities.cpp.

## ◆ remove_negative_zeros()

float remove_negative_zeros | ( | float | value0,
|  | float | threshold
| ) |  |

Prevent a negative sign from being placed in front of zero value in a text file.

Author
  David Belnap

Parameters

  value0 | input value to be tested
  threshold | a small negative number

Returns
  float "Corrected" or input value

      This function is intended to be used when obvious zero values are set
      to a very small negative number.  Input value is set to zero if
                    value0 > threshold  and  value0 < 0
      If so, the value is reset to zero.  Otherwise, the input value is
      returned.

  Reference: Derived from CCP4 code

Definition at line 622 of file utilities.cpp.

## ◆ select_numbers()

int select_numbers | ( | Bstring & | string,
|  | int | n,
|  | int * | numsel
| ) |  |

Converts a string with a selection specification into an integer array.

Parameters

  &string | string.
  n | length of integer array.
  *numsel | pre-allocated integer array.

Returns
  int number of levels.

      The integer array must be allocated to a length that would accommodate
      the highest number in the selection.
      If the string length is zero, all elements are selected.
      Multiple subsets are separated by colons

Definition at line 328 of file utilities.cpp.

## ◆ swapbytes() [1/2]

void swapbytes | ( | unsigned char * | v,
|  | size_t | n
| ) |  |

Swaps bytes.

Parameters

  *v | a pointer to the bytes.
  n | number of bytes to swap.
      Byte swapping is done in place.

Definition at line 504 of file utilities.cpp.

## ◆ swapbytes() [2/2]

void swapbytes | ( | size_t | size,
|  | unsigned char * | v,
|  | size_t | n
| ) |  |

Swaps bytes.

Parameters

  size | size of the block to be swapped.
  *v | a pointer to the bytes.
  n | number of bytes to swap.
      Byte swapping is done in place.

Definition at line 525 of file utilities.cpp.

## ◆ system_memory()

long system_memory | ( |  | ) |

Returns system memory size.

Returns
  long memory size.

Definition at line 204 of file utilities.cpp.

## ◆ system_processors()

size_t system_processors | ( |  | ) |

Returns the number of processors.

Returns
  long number of processors.

Definition at line 186 of file utilities.cpp.

## ◆ systype()

SysType systype | ( | int | show | ) |

Finds the system type - mostly just for byte order.

Parameters

  show | a flag to indicate if the result should be shown.

Returns
  SysType an enumerated type.

      Test the byte order of an arbitrary byte sequence by interpreting it as
      an integer or a floating point number.

Definition at line 144 of file utilities.cpp.

## ◆ tab()

ostream& tab | ( | ostream & | out | ) |

Definition at line 21 of file utilities.cpp.

## ◆ usage()

void usage | ( | const char ** | use,
|  | int | all
| ) |  |

Prints usage information.

Parameters

  **use | the string array.
  all | flag to output all usage information.
      The usage information must be written into an array of srings, with each
      string a line and following a specific convention for the Bsoft package.
      The first line with non-space characters must start with "Usage:"
      followed by the command-line syntax. The next lines should describe the
      program. The options are indicated by lines strating with "-".
      The options are categorized as "Actions", "Parameters", "Input",
      and "Output". This constitutes the brief form.
      An additional section can be added as "Examples", that is shown
      only when the "all" argument is set.

Definition at line 119 of file utilities.cpp.

## ◆ vax2ieee()

void vax2ieee | ( | unsigned char * | v,
|  | int | sb
| ) |  |

Converts VAX floating point format to IEEE floating point format.

Parameters

  *v | four-byte array holding the floating point value
  sb | flag to swap bytes before conversion
      Swap bytes prior to conversion if the swap flag is set.
      Handle special cases of zero, infinity, NaN or normalized values
      Otherwise assign the new byte values
  Reference: Derived from CCP4 code

Definition at line 548 of file utilities.cpp.