- Reworked the connection object and the IO system

- Reworked the support for TRICS
- Added a second generation motor
This commit is contained in:
koennecke
2009-02-03 08:05:39 +00:00
parent f6d595665e
commit 361ee9ebea
119 changed files with 16455 additions and 3674 deletions

104
simidx.h Normal file
View File

@ -0,0 +1,104 @@
/**
* This is the simple reflection indexer. The algorithm is simple:
* - Three non coplanar reflections at low two theta are selected.
* - Candidate indices are calculated from the lattice constants
* - Permutations of the generated indices are changed for a couple
* of conditions:
* -- Does the angle between the reflections matches the expectaions
* -- Do the reflections form a right handed set
* UB matrics matching these conditions are calculated and stored
* for later retrieval.
*
* The software is organized such that this is a standalone module.
*
* Mark Koennecke, August 2008
*/
#ifndef __SIMIDX
#define __SIMIDX
#include <stdio.h>
#include "sginfo.h"
typedef struct {
int h[3], k[3], l[3];
int originalID[3];
double diff;
}IndexSolution;
/**
* \brief To be called before using simidx
*/
void SimIdxInit();
/**
* \brief Set the cell constants
* \param cell The cell constants: a,b,c alpha, beta, gamma
*/
void SimIdxSetCell(double cell[6]);
/**
* \brief set the wavelength
* \param lambda The wavelength
*/
void SimIdxSetLambda(double lambda);
/**
* \brief set the two-theta limit for considering a
* valid set of indices
* \param limit The two theta limit
*/
void SimIdxSetSttLim(double limit);
/**
* \brief set the allowd angular dieviation for
* a two combination.
* \param limit The angle limit limit
*/
void SimIdxSetAngLim(double limit);
/**
* \brief set the spacegroup
* \param spgrp The new spacegroup
*/
void SimIdxSetSpacegroup(T_SgInfo *spgrp);
/**
* \brief clear the reflection list
* */
void SimIdxClearReflection();
/**
*\brief add a reflection already reduced to a scattering vector
* \param uvw The coordinates of the scattering vector
*/
void SimIdxAddReflection(double uvw[3]);
typedef void (*OutFunc)(void *userData, char *text);
/**
* \brief configure the output for the algorithm
* \param userData A pointer to user data which is passed to the
* output function unchanged
* \param out An output function
* \param level the vebosity level for output
*/
void SimIdxOutput(void *userData, OutFunc out, int level);
/**
* \brief Run the algorithm
* \return 1 on success, 0 on error
*/
int SimIdxRun();
/**
* \brief get the last error description
* \param errCode pointer to an integer error code
* \param error A text buffer to hold a description of the error
* \param errLen The length of error
void SimIdxGetError(int *errCode, char *error, int errLen);
/**
* \brief get the number of solutions
* \return The number of solutions
*/
int SimIdxGetNSolutions();
/**
* get the solution number idx
* \param id The id of the solution
* \return A IndexSolution structure
*/
IndexSolution SimIdxGetSolution(int id);
#endif