![]() |
Bsoft 2.1.4
Bernard's software package
|
Header file for general utilities. More...
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <pwd.h>
#include <math.h>
#include <climits>
#include <cfloat>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <map>
#include <list>
#include <tuple>
#include <regex>
#include <ctime>
#include "Bstring.h"
Macros | |
#define | BVERSION "2.1.4-20230131" |
#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 | COULOMB 1e-7*LIGHTSPEED*LIGHTSPEED |
#define | AVOGADRO 6.02214076e23 |
#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 | VERB_DEBUG_ND2 2048 |
#define | VERB_DEBUG_EER 4096 |
#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... | |
enum | CompoundType { TSimple = 0 , TComplex = 1 , TVector2 = 2 , TVector3 = 3 , TView = 4 , TRGB = 10 , TRGBA = 11 , TCMYK = 12 , TMulti = 99 } |
Compound data type specifier. More... | |
Functions | |
ostream & | tab (ostream &out) |
int | cmd_line (int argc, char **argv) |
Reconstructs the command line as a global string. More... | |
Bstring | command_line () |
Returns the command line. More... | |
Bstring | command_line_time () |
Returns the command line and time in a string. More... | |
string | command_line_time2 () |
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... | |
CompoundType | getcompoundtype (int ch, string sct) |
Get the compound 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... | |
vector< int > | select_numbers (Bstring &string, int n) |
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... | |
double | angle_set_0_to_TWOPI (double angle) |
Returns an angle between 0 and 2*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... | |
Header file for general utilities.
#define _datatype_ |
#define _systype_ |
#define AVOGADRO 6.02214076e23 |
#define BVERSION "2.1.4-20230131" |
#define COULOMB 1e-7*LIGHTSPEED*LIGHTSPEED |
#define ECHARGE 1.602177E-19 |
#define EMASS 9.109384E-31 |
#define FILL_AVERAGE 1 |
#define FILL_BACKGROUND 2 |
#define FILL_MAX 4 |
#define FILL_MIN 3 |
#define FILL_USER 0 |
#define GOLDEN 1.61803398874989484820458683436563811772 |
#define LIGHTSPEED 299792458 |
#define M_PI 3.14159265358979323846264338327950288 |
#define M_PI_2 1.57079632679489661923132169163975144 |
#define M_PI_4 0.785398163397448309615660845819875721 |
#define MAXLINELEN 1024 |
#define MIN2PI -6.28318530717958647692528676655900576 |
#define MIN_SIZE_FOR_THREADING 100000 |
#define PLANCK 6.626070E-34 |
#define RHO 0.81 |
#define SMALLFLOAT 1e-30 |
#define TRIGPRECISION 1e-30 |
#define TWOPI 6.28318530717958647692528676655900576 |
#define VERB_DEBUG 128 |
#define VERB_DEBUG_DM 1024 |
#define VERB_DEBUG_EER 4096 |
#define VERB_DEBUG_ND2 2048 |
#define VERB_DEBUG_STAR 256 |
#define VERB_DEBUG_XML 512 |
#define VERB_FULL 16 |
#define VERB_LABEL 2 |
#define VERB_MEMORY 64 |
#define VERB_NONE 0 |
#define VERB_PROCESS 4 |
#define VERB_RESULT 1 |
#define VERB_STATS 8 |
#define VERB_TIME 32 |
enum CompoundType |
enum DataType |
enum SysType |
double angle_set_0_to_TWOPI | ( | double | angle | ) |
Returns an angle between 0 and 2*PI.
angle | input angle. |
double angle_set_negPI_to_PI | ( | double | angle | ) |
Returns an angle between -PI and PI.
angle | input angle. |
int bexit | ( | int | value | ) |
Exit function for cleanup and debugging.
value | exit value. |
int cmd_line | ( | int | argc, |
char ** | argv | ||
) |
Reconstructs the command line as a global string.
argc | the number of command line arguments. |
**argv | the command line arguments. |
Concatenates the command line arguments into one string.
Bstring command_line | ( | ) |
Returns the command line.
This is designed to pack the command line into a string.
Bstring command_line_time | ( | ) |
Returns the command line and time in a string.
This is designed to pack the command line into a string followed by a second string for the time.
string command_line_time2 | ( | ) |
int error_show | ( | string | message, |
string | file, | ||
int | line | ||
) |
Displays the error with file and line reference.
*message | a string to be included. |
*file | the file name (should be FILE). |
line | the line number (should be LINE). |
The function uses perror() to display a message containing the source file and line number where it originated.Reference: Derived from CCP4 code
int findNextPowerOf | ( | int | startNumber, |
int | powerOf | ||
) |
Finds the next greatest number that is a power of a given number.
startNumber | number to begin from. |
powerOf | power of this number is the number returned. |
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.
size_t get_chunk_size | ( | size_t | datasize | ) |
Returns the chunk size per thread.
datasize | size of data to be divided into chunks. |
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
size_t get_chunk_size | ( | size_t | datasize, |
size_t | c | ||
) |
Returns the chunk size per thread.
datasize | size of data to be divided into chunks. |
c | channel size to align chunk to. |
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
float get_float | ( | char * | ptr, |
int | len | ||
) |
Converts a defined length string into a floating point number.
*ptr | pointer to the string. |
len | length to be scanned. |
The string is copied, 0-terminated, and scanned for a floating point number.
int get_integer | ( | char * | ptr, |
int | len | ||
) |
Converts a defined length string into an integer.
*ptr | pointer to the string. |
len | length to be scanned. |
The string is copied, 0-terminated, and scanned for an integer.
string get_user_name | ( | ) |
Returns the user name.
It uses getpwuid_r (thread safe) to find the user in the password file.
CompoundType getcompoundtype | ( | int | ch, |
string | sct | ||
) |
Get the compound type indicated by a single letter code.
ch | number of channels. |
sct | string indicating compound type. |
This function is used in optional command-line arguments to indicate a new compound type for an image.
DataType getdatatype | ( | char | letter | ) |
Get the data type indicated by a single letter code.
letter | letter indicating data type. |
This function is used in optional command-line arguments to indicate a new data type for an image.
int memory_check | ( | long | mem_required | ) |
Checking if there is enough memory, abort if not.
mem_required | memory required. |
float remove_negative_zeros | ( | float | value0, |
float | threshold | ||
) |
Prevent a negative sign from being placed in front of zero value in a text file.
value0 | input value to be tested |
threshold | a small negative number |
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
vector< int > select_numbers | ( | Bstring & | string, |
int | n | ||
) |
int select_numbers | ( | Bstring & | string, |
int | n, | ||
int * | numsel | ||
) |
Converts a string with a selection specification into an integer array.
&string | string. |
n | length of integer array. |
*numsel | pre-allocated integer array. |
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
void swapbytes | ( | size_t | size, |
unsigned char * | v, | ||
size_t | n | ||
) |
Swaps bytes.
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. |
void swapbytes | ( | unsigned char * | v, |
size_t | n | ||
) |
Swaps bytes.
*v | a pointer to the bytes. |
n | number of bytes to swap. Byte swapping is done in place. |
long system_memory | ( | ) |
Returns system memory size.
size_t system_processors | ( | ) |
Returns the number of processors.
SysType systype | ( | int | show | ) |
Finds the system type - mostly just for byte order.
show | a flag to indicate if the result should be shown. |
Test the byte order of an arbitrary byte sequence by interpreting it as an integer or a floating point number.
ostream & tab | ( | ostream & | out | ) |
void usage | ( | const char ** | use, |
int | all | ||
) |
Prints usage information.
**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. |
void vax2ieee | ( | unsigned char * | v, |
int | sb | ||
) |
Converts VAX floating point format to IEEE floating point format.
*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 valuesReference: Derived from CCP4 code |