aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/pinkindexer.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-08-07 17:43:18 +0200
committerThomas White <taw@physics.org>2020-08-07 18:07:07 +0200
commitc0b01532441407dc97eaa9d44b540f1dd0223990 (patch)
treea1526e8bb84d38e8e6dfab05d2d95e1a5b5a3d10 /libcrystfel/src/pinkindexer.c
parent08327436744a05e68daf1676f0fa4a82fb74408f (diff)
Move indexers out of API
Diffstat (limited to 'libcrystfel/src/pinkindexer.c')
-rw-r--r--libcrystfel/src/pinkindexer.c627
1 files changed, 0 insertions, 627 deletions
diff --git a/libcrystfel/src/pinkindexer.c b/libcrystfel/src/pinkindexer.c
deleted file mode 100644
index e82f2f02..00000000
--- a/libcrystfel/src/pinkindexer.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
- * pinkindexer.c
- *
- * Interface to PinkIndexer
- *
- * Copyright © 2017-2020 Deutsches Elektronen-Synchrotron DESY,
- * a research centre of the Helmholtz Association.
- *
- * Authors:
- * 2017-2019 Yaroslav Gevorkov <yaroslav.gevorkov@desy.de>
- *
- * This file is part of CrystFEL.
- *
- * CrystFEL is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * CrystFEL is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with CrystFEL. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "pinkindexer.h"
-
-#ifdef HAVE_PINKINDEXER
-
-#include <stdlib.h>
-
-#include "utils.h"
-#include "cell-utils.h"
-#include "peaks.h"
-
-#include "pinkIndexer/adaptions/crystfel/Lattice.h"
-#include "pinkIndexer/adaptions/crystfel/ExperimentSettings.h"
-#include "pinkIndexer/adaptions/crystfel/PinkIndexer.h"
-
-#define MAX_MULTI_LATTICE_COUNT 8
-
-struct pinkIndexer_private_data {
- PinkIndexer *pinkIndexer;
- reciprocalPeaks_1_per_A_t reciprocalPeaks_1_per_A;
- float *intensities;
-
- IndexingMethod indm;
- UnitCell *cellTemplate;
- int threadCount;
- int multi;
- int min_peaks;
-
- int no_check_indexed;
-
- float maxRefinementDisbalance;
-
- IntegerMatrix *centeringTransformation;
- LatticeTransform_t latticeReductionTransform;
-};
-
-//static void reduceCell(UnitCell* cell, LatticeTransform_t* appliedReductionTransform);
-//static void restoreCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform);
-static void reduceReciprocalCell(UnitCell* cell, LatticeTransform_t* appliedReductionTransform);
-static void restoreReciprocalCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform);
-static void makeRightHanded(UnitCell* cell);
-static void update_detector(struct detector *det, double xoffs, double yoffs);
-
-int run_pinkIndexer(struct image *image, void *ipriv)
-{
- struct pinkIndexer_private_data* pinkIndexer_private_data = (struct pinkIndexer_private_data*) ipriv;
- reciprocalPeaks_1_per_A_t* reciprocalPeaks_1_per_A = &(pinkIndexer_private_data->reciprocalPeaks_1_per_A);
- float *intensities = pinkIndexer_private_data->intensities;
-
- int peakCountMax = image_feature_count(image->features);
- if (peakCountMax < 5) {
- int goodLatticesCount = 0;
- return goodLatticesCount;
- }
- reciprocalPeaks_1_per_A->peakCount = 0;
- for (int i = 0; i < peakCountMax && i < MAX_PEAK_COUNT_FOR_INDEXER; i++) {
- struct imagefeature *f;
- f = image_get_feature(image->features, i);
- if (f == NULL) {
- continue;
- }
-
- reciprocalPeaks_1_per_A->coordinates_x[reciprocalPeaks_1_per_A->peakCount] = f->rz * 1e-10;
- reciprocalPeaks_1_per_A->coordinates_y[reciprocalPeaks_1_per_A->peakCount] = f->rx * 1e-10;
- reciprocalPeaks_1_per_A->coordinates_z[reciprocalPeaks_1_per_A->peakCount] = f->ry * 1e-10;
- intensities[reciprocalPeaks_1_per_A->peakCount] = (float) (f->intensity);
- reciprocalPeaks_1_per_A->peakCount++;
- }
- int indexed = 0;
- Lattice_t indexedLattice[MAX_MULTI_LATTICE_COUNT];
- float center_shift[MAX_MULTI_LATTICE_COUNT][2];
-
-
-
- do {
- int peakCount = reciprocalPeaks_1_per_A->peakCount;
- int matchedPeaksCount = PinkIndexer_indexPattern(pinkIndexer_private_data->pinkIndexer,
- &(indexedLattice[indexed]), center_shift[indexed], reciprocalPeaks_1_per_A, intensities,
- pinkIndexer_private_data->maxRefinementDisbalance,
- pinkIndexer_private_data->threadCount);
-
- if(matchedPeaksCount == -1){
- STATUS("WARNING: Indexing solution was rejected due to too large disbalance of the refinement."
- "If you see this message often, check the documentation for the parameter "
- "--pinkIndexer-max-refinement-disbalance\n");
-
- matchedPeaksCount = 0;
- }
-
- printf("matchedPeaksCount %d from %d\n",matchedPeaksCount,peakCount);
- if ((matchedPeaksCount >= 25 && matchedPeaksCount >= peakCount * 0.30)
- || matchedPeaksCount >= peakCount * 0.4
- || matchedPeaksCount >= 70
- || pinkIndexer_private_data->no_check_indexed == 1)
- {
- UnitCell *uc;
- uc = cell_new();
-
- Lattice_t *l = &(indexedLattice[indexed]);
-
- cell_set_reciprocal(uc, l->ay * 1e10, l->az * 1e10, l->ax * 1e10,
- l->by * 1e10, l->bz * 1e10, l->bx * 1e10,
- l->cy * 1e10, l->cz * 1e10, l->cx * 1e10);
-
- restoreReciprocalCell(uc, &pinkIndexer_private_data->latticeReductionTransform);
-
- UnitCell *new_cell_trans = cell_transform_intmat(uc, pinkIndexer_private_data->centeringTransformation);
- cell_free(uc);
- uc = new_cell_trans;
-
- cell_set_lattice_type(new_cell_trans, cell_get_lattice_type(pinkIndexer_private_data->cellTemplate));
- cell_set_centering(new_cell_trans, cell_get_centering(pinkIndexer_private_data->cellTemplate));
- cell_set_unique_axis(new_cell_trans, cell_get_unique_axis(pinkIndexer_private_data->cellTemplate));
-
- if (validate_cell(uc)) {
- ERROR("pinkIndexer: problem with returned cell!\n");
- }
-
- Crystal * cr = crystal_new();
- if (cr == NULL) {
- ERROR("Failed to allocate crystal.\n");
- return 0;
- }
- crystal_set_cell(cr, uc);
- crystal_set_det_shift(cr, center_shift[indexed][0], center_shift[indexed][1]);
- update_detector(image->det, center_shift[indexed][0], center_shift[indexed][1]);
- image_add_crystal(image, cr);
- indexed++;
-
- } else {
- break;
- }
- } while (pinkIndexer_private_data->multi
- && indexed <= MAX_MULTI_LATTICE_COUNT
- && reciprocalPeaks_1_per_A->peakCount >= pinkIndexer_private_data->min_peaks);
-
- return indexed;
-}
-
-void *pinkIndexer_prepare(IndexingMethod *indm, UnitCell *cell,
- struct pinkIndexer_options *pinkIndexer_opts,
- const DataTemplate *dtempl)
-{
- if ( beam->photon_energy_from != NULL && pinkIndexer_opts->customPhotonEnergy <= 0) {
- ERROR("For pinkIndexer, the photon_energy must be defined as a "
- "constant in the geometry file or as a parameter (see --pinkIndexer-override-photon-energy)\n");
- return NULL;
- }
- if ( (det->panels[0].clen_from != NULL) && pinkIndexer_opts->refinement_type ==
- REFINEMENT_TYPE_firstFixedThenVariableLatticeParametersCenterAdjustmentMultiSeed) {
- ERROR("Using center refinement makes it necessary to have the detector distance fixed in the geometry file!");
- return NULL;
- }
- if(cell == NULL){
- ERROR("Pink indexer needs a unit cell file to be specified!");
- return NULL;
- }
-
- struct pinkIndexer_private_data* pinkIndexer_private_data = malloc(sizeof(struct pinkIndexer_private_data));
- allocReciprocalPeaks(&(pinkIndexer_private_data->reciprocalPeaks_1_per_A));
- pinkIndexer_private_data->intensities = malloc(MAX_PEAK_COUNT_FOR_INDEXER * sizeof(float));
- pinkIndexer_private_data->indm = *indm;
- pinkIndexer_private_data->cellTemplate = cell;
- pinkIndexer_private_data->threadCount = pinkIndexer_opts->thread_count;
- pinkIndexer_private_data->multi = pinkIndexer_opts->multi;
- pinkIndexer_private_data->min_peaks = pinkIndexer_opts->min_peaks;
- pinkIndexer_private_data->no_check_indexed = pinkIndexer_opts->no_check_indexed;
- pinkIndexer_private_data->maxRefinementDisbalance = pinkIndexer_opts->maxRefinementDisbalance;
-
- UnitCell* primitiveCell = uncenter_cell(cell, &pinkIndexer_private_data->centeringTransformation, NULL);
-
- //reduceCell(primitiveCell, &pinkIndexer_private_data->latticeReductionTransform);
- reduceReciprocalCell(primitiveCell, &pinkIndexer_private_data->latticeReductionTransform);
-
- double asx, asy, asz, bsx, bsy, bsz, csx, csy, csz;
- int ret = cell_get_reciprocal(primitiveCell, &asx, &asy, &asz, &bsx, &bsy, &bsz, &csx, &csy, &csz);
- if (ret != 0) {
- ERROR("cell_get_reciprocal did not finish properly!");
- }
-
- Lattice_t lattice = { .ax = asz * 1e-10, .ay = asx * 1e-10, .az = asy * 1e-10,
- .bx = bsz * 1e-10, .by = bsx * 1e-10, .bz = bsy * 1e-10,
- .cx = csz * 1e-10, .cy = csx * 1e-10, .cz = csy * 1e-10 };
-
- float detectorDistance_m;
- if ( det->panels[0].clen_from != NULL ) {
- detectorDistance_m = 0.25; /* fake value */
- } else {
- detectorDistance_m = det->panels[0].clen + det->panels[0].coffset;
- }
-
- float beamEenergy_eV = beam->photon_energy;
- float nonMonochromaticity = beam->bandwidth*5;
- if(pinkIndexer_opts->customPhotonEnergy > 0){
- beamEenergy_eV = pinkIndexer_opts->customPhotonEnergy;
- }
- if(pinkIndexer_opts->customBandwidth >= 0){
- nonMonochromaticity = pinkIndexer_opts->customBandwidth;
- }
-
- float reflectionRadius_1_per_A;
- if (pinkIndexer_opts->reflectionRadius < 0) {
- reflectionRadius_1_per_A = 0.02
- * sqrt(lattice.ax * lattice.ax + lattice.ay * lattice.ay + lattice.az * lattice.az);
- }
- else {
- reflectionRadius_1_per_A = pinkIndexer_opts->reflectionRadius * 1e10; /* m^-1 to A^-1*/
- }
-
- if(beamEenergy_eV > 75000 && nonMonochromaticity < 0.02 && reflectionRadius_1_per_A < 0.0005){
- STATUS("Trying to index electron diffraction? It might be helpful to set a higher reflection radius (see documentation for --pinkIndexer-reflection-radius)")
- }
-
- float divergenceAngle_deg = 0.01; //fake
-
- float tolerance = pinkIndexer_opts->tolerance;
- Lattice_t sampleReciprocalLattice_1_per_A = lattice;
- float detectorRadius_m = 0.03; //fake, only for prediction
- ExperimentSettings* experimentSettings = ExperimentSettings_new(beamEenergy_eV, detectorDistance_m,
- detectorRadius_m, divergenceAngle_deg, nonMonochromaticity, sampleReciprocalLattice_1_per_A, tolerance,
- reflectionRadius_1_per_A);
-
- consideredPeaksCount_t consideredPeaksCount = pinkIndexer_opts->considered_peaks_count;
- angleResolution_t angleResolution = pinkIndexer_opts->angle_resolution;
- refinementType_t refinementType = pinkIndexer_opts->refinement_type;
- float maxResolutionForIndexing_1_per_A = pinkIndexer_opts->maxResolutionForIndexing_1_per_A;
- pinkIndexer_private_data->pinkIndexer = PinkIndexer_new(experimentSettings, consideredPeaksCount, angleResolution,
- refinementType,
- maxResolutionForIndexing_1_per_A);
-
- ExperimentSettings_delete(experimentSettings);
- cell_free(primitiveCell);
-
- /* Flags that pinkIndexer knows about */
- *indm &= INDEXING_METHOD_MASK
- | INDEXING_USE_CELL_PARAMETERS;
-
- return pinkIndexer_private_data;
-}
-
-//static void reduceCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform)
-//{
-// double ax, ay, az, bx, by, bz, cx, cy, cz;
-// cell_get_cartesian(cell, &ax, &ay, &az, &bx, &by, &bz, &cx, &cy, &cz);
-//
-// Lattice_t l = { ax, ay, az, bx, by, bz, cx, cy, cz };
-//
-// reduceLattice(&l, appliedReductionTransform);
-//
-// cell_set_cartesian(cell, l.ax, l.ay, l.az,
-// l.bx, l.by, l.bz,
-// l.cx, l.cy, l.cz);
-//
-// makeRightHanded(cell);
-//}
-//
-//static void restoreCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform)
-//{
-//
-// double ax, ay, az, bx, by, bz, cx, cy, cz;
-// cell_get_cartesian(cell, &ax, &ay, &az, &bx, &by, &bz, &cx, &cy, &cz);
-//
-// Lattice_t l = { ax, ay, az, bx, by, bz, cx, cy, cz };
-//
-// restoreLattice(&l, appliedReductionTransform);
-//
-// cell_set_cartesian(cell, l.ax, l.ay, l.az,
-// l.bx, l.by, l.bz,
-// l.cx, l.cy, l.cz);
-//
-// makeRightHanded(cell);
-//}
-
-static void reduceReciprocalCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform)
-{
- double ax, ay, az, bx, by, bz, cx, cy, cz;
- cell_get_reciprocal(cell, &ax, &ay, &az, &bx, &by, &bz, &cx, &cy, &cz);
-
- Lattice_t l = { ax, ay, az, bx, by, bz, cx, cy, cz };
-
- reduceLattice(&l, appliedReductionTransform);
-
- cell_set_reciprocal(cell, l.ax, l.ay, l.az,
- l.bx, l.by, l.bz,
- l.cx, l.cy, l.cz);
-
- makeRightHanded(cell);
-}
-
-static void restoreReciprocalCell(UnitCell *cell, LatticeTransform_t* appliedReductionTransform)
-{
-
- double ax, ay, az, bx, by, bz, cx, cy, cz;
- cell_get_reciprocal(cell, &ax, &ay, &az, &bx, &by, &bz, &cx, &cy, &cz);
-
- Lattice_t l = { ax, ay, az, bx, by, bz, cx, cy, cz };
-
- restoreLattice(&l, appliedReductionTransform);
-
- cell_set_reciprocal(cell, l.ax, l.ay, l.az,
- l.bx, l.by, l.bz,
- l.cx, l.cy, l.cz);
-
- makeRightHanded(cell);
-}
-
-static void makeRightHanded(UnitCell *cell)
-{
- double ax, ay, az, bx, by, bz, cx, cy, cz;
- cell_get_cartesian(cell, &ax, &ay, &az, &bx, &by, &bz, &cx, &cy, &cz);
-
- if (!right_handed(cell)) {
- cell_set_cartesian(cell, -ax, -ay, -az, -bx, -by, -bz, -cx, -cy, -cz);
- }
-}
-
-//hack for electron crystallography while crystal_set_det_shift is not working approprietly
-static void update_detector(struct detector *det, double xoffs, double yoffs)
-{
- int i;
-
- for (i = 0; i < det->n_panels; i++) {
- struct panel *p = &det->panels[i];
- p->cnx += xoffs * p->res;
- p->cny += yoffs * p->res;
- }
-}
-
-void pinkIndexer_cleanup(void *pp)
-{
- struct pinkIndexer_private_data* pinkIndexer_private_data = (struct pinkIndexer_private_data*) pp;
-
- freeReciprocalPeaks(pinkIndexer_private_data->reciprocalPeaks_1_per_A);
- free(pinkIndexer_private_data->intensities);
- intmat_free(pinkIndexer_private_data->centeringTransformation);
- PinkIndexer_delete(pinkIndexer_private_data->pinkIndexer);
-}
-
-const char *pinkIndexer_probe(UnitCell *cell)
-{
- return "pinkIndexer";
-}
-
-#else /* HAVE_PINKINDEXER */
-
-int run_pinkIndexer(struct image *image, void *ipriv)
-{
- ERROR("This copy of CrystFEL was compiled without PINKINDEXER support.\n");
- return 0;
-}
-
-extern void *pinkIndexer_prepare(IndexingMethod *indm, UnitCell *cell,
- struct pinkIndexer_options *pinkIndexer_opts,
- const DataTemplate *dtempl)
-{
- ERROR("This copy of CrystFEL was compiled without PINKINDEXER support.\n");
- ERROR("To use PINKINDEXER indexing, recompile with PINKINDEXER.\n");
- return NULL;
-}
-
-void pinkIndexer_cleanup(void *pp)
-{
-}
-
-const char *pinkIndexer_probe(UnitCell *cell)
-{
- return NULL;
-}
-
-#endif /* HAVE_PINKINDEXER */
-
-static void pinkIndexer_show_help()
-{
- printf(
-"Parameters for the PinkIndexer indexing algorithm:\n"
-" --pinkIndexer-considered-peaks-count=n\n"
-" Considered peaks count, 0 (fewest) to 4 (most)\n"
-" Default: 4\n"
-" --pinkIndexer-angle-resolution=n\n"
-" Angle resolution, 0 (loosest) to 4 (most dense)\n"
-" Default: 2\n"
-" --pinkIndexer-refinement-type=n\n"
-" Refinement type, 0 (none) to 5 (most accurate)\n"
-" Default: 1\n"
-" --pinkIndexer-tolerance=n\n"
-" Relative tolerance of the lattice vectors.\n"
-" Default 0.06\n"
-" --pinkIndexer-reflection-radius=n\n"
-" Radius of the reflections in reciprocal space.\n"
-" Specified in 1/A. Default is 2%% of a*.\n"
-" --pinkIndexer-max-resolution-for-indexing=n\n"
-" Measured in 1/A\n"
-" --pinkIndexer-multi Use pinkIndexers own multi indexing.\n"
-" --pinkIndexer-thread-count=n\n"
-" Thread count for internal parallelization \n"
-" Default: 1\n"
-" --pinkIndexer-no-check-indexed\n"
-" Disable internal check for correct indexing\n"
-" solutions\n"
-" --pinkIndexer-max-refinement-disbalance=n\n"
-" Maximum disbalance after refinement:\n"
-" 0 (no disbalance) to 2 (extreme disbalance), default 0.4\n"
-" --pinkIndexer-override-photon-energy=ev\n"
-" Mean energy in eV to use for indexing.\n"
-" --pinkIndexer-override-bandwidth=n\n"
-" Bandwidth in (delta energy)/(mean energy) to use for indexing.\n"
-" --pinkIndexer-override-visible-energy-range=min-max\n"
-" Overrides photon energy and bandwidth according to a range of \n"
-" energies that have high enough intensity to produce \"visible\" \n"
-" Bragg spots on the detector.\n"
-" Min and max range borders are separated by a minus sign (no whitespace).\n"
- );
-}
-
-
-static error_t pinkindexer_parse_arg(int key, char *arg,
- struct argp_state *state)
-{
- float tmp, tmp2;
- struct pinkIndexer_options **opts_ptr = state->input;
-
- switch ( key ) {
-
- case ARGP_KEY_INIT :
- *opts_ptr = malloc(sizeof(struct pinkIndexer_options));
- if ( *opts_ptr == NULL ) return ENOMEM;
- (*opts_ptr)->considered_peaks_count = 4;
- (*opts_ptr)->angle_resolution = 2;
- (*opts_ptr)->refinement_type = 1;
- (*opts_ptr)->tolerance = 0.06;
- (*opts_ptr)->maxResolutionForIndexing_1_per_A = +INFINITY;
- (*opts_ptr)->thread_count = 1;
- (*opts_ptr)->multi = 0;
- (*opts_ptr)->no_check_indexed = 0;
- (*opts_ptr)->min_peaks = 2;
- (*opts_ptr)->reflectionRadius = -1;
- (*opts_ptr)->customPhotonEnergy = -1;
- (*opts_ptr)->customBandwidth = -1;
- (*opts_ptr)->maxRefinementDisbalance = 0.4;
- break;
-
- case 1 :
- pinkIndexer_show_help();
- return EINVAL;
-
- case 2 :
- if (sscanf(arg, "%u", &(*opts_ptr)->considered_peaks_count) != 1)
- {
- ERROR("Invalid value for "
- "--pinkIndexer-considered-peaks-count\n");
- return EINVAL;
- }
- break;
-
- case 3 :
- if (sscanf(arg, "%u", &(*opts_ptr)->angle_resolution) != 1)
- {
- ERROR("Invalid value for "
- "--pinkIndexer-angle_resolution\n");
- return EINVAL;
- }
- break;
-
- case 4 :
- if (sscanf(arg, "%u", &(*opts_ptr)->refinement_type) != 1)
- {
- ERROR("Invalid value for "
- "--pinkIndexer-refinement-type\n");
- return EINVAL;
- }
- break;
-
- case 5 :
- if (sscanf(arg, "%d", &(*opts_ptr)->thread_count) != 1)
- {
- ERROR("Invalid value for --pinkIndexer-thread-count\n");
- return EINVAL;
- }
- break;
-
- case 6 :
- if (sscanf(arg, "%f", &(*opts_ptr)->maxResolutionForIndexing_1_per_A) != 1)
- {
- ERROR("Invalid value for "
- "--pinkIndexer-max-resolution-for-indexing\n");
- return EINVAL;
- }
- break;
-
- case 7 :
- if (sscanf(arg, "%f", &(*opts_ptr)->tolerance) != 1)
- {
- ERROR("Invalid value for --pinkIndexer-tolerance\n");
- return EINVAL;
- }
- break;
-
- case 8 :
- (*opts_ptr)->multi = 1;
- break;
-
- case 9 :
- (*opts_ptr)->no_check_indexed = 1;
- break;
-
- case 10 :
- if (sscanf(arg, "%f", &tmp) != 1) {
- ERROR("Invalid value for --pinkIndexer-reflection-radius\n");
- return EINVAL;
- }
- (*opts_ptr)->reflectionRadius = tmp / 1e10; /* A^-1 to m^-1 */
- break;
-
- case 11 :
- if (sscanf(arg, "%f", &(*opts_ptr)->customPhotonEnergy) != 1)
- {
- ERROR("Invalid value for --pinkIndexer-override-photon-energy\n");
- return EINVAL;
- }
- break;
-
- case 12 :
- if (sscanf(arg, "%f", &(*opts_ptr)->customBandwidth) != 1)
- {
- ERROR("Invalid value for --pinkIndexer-override-bandwidth\n");
- return EINVAL;
- }
- break;
- case 13 :
- if (sscanf(arg, "%f-%f", &tmp, &tmp2) != 2)
- {
- ERROR("Invalid value for --pinkIndexer-override-visible-energy-range\n");
- return EINVAL;
- }
- (*opts_ptr)->customPhotonEnergy = (tmp + tmp2)/2;
- (*opts_ptr)->customBandwidth = (tmp2 - tmp)/(*opts_ptr)->customPhotonEnergy;
- if((*opts_ptr)->customBandwidth < 0){
- (*opts_ptr)->customBandwidth *= -1;
- }
- break;
- case 14 :
- if (sscanf(arg, "%f", &(*opts_ptr)->maxRefinementDisbalance) != 1)
- {
- ERROR("Invalid value for --pinkIndexer-max-refinement-disbalance\n");
- return EINVAL;
- }
- }
-
- return 0;
-}
-
-
-static struct argp_option pinkindexer_options[] = {
-
- {"help-pinkindexer", 1, NULL, OPTION_NO_USAGE,
- "Show options for PinkIndexer indexing algorithm", 99},
-
- {"pinkIndexer-considered-peaks-count", 2, "n", OPTION_HIDDEN, NULL},
- {"pinkIndexer-cpc", 2, "n", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-angle-resolution", 3, "ang", OPTION_HIDDEN, NULL},
- {"pinkIndexer-ar", 3, "ang", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-refinement-type", 4, "t", OPTION_HIDDEN, NULL},
- {"pinkIndexer-rt", 4, "t", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-thread-count", 5, "n", OPTION_HIDDEN, NULL},
- {"pinkIndexer-tc", 5, "n", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-max-resolution-for-indexing", 6, "res", OPTION_HIDDEN, NULL},
- {"pinkIndexer-mrfi", 6, "res", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-tolerance", 7, "tol", OPTION_HIDDEN, NULL},
- {"pinkIndexer-tol", 7, "tol", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-multi", 8, NULL, OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-no-check-indexed", 9, NULL, OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-reflection-radius", 10, "r", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-override-photon-energy", 11, "ev", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-override-bandwidth", 12, "bw", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-override-visible-energy-range", 13, "overridenVisibleEnergyRange", OPTION_HIDDEN, NULL},
-
- {"pinkIndexer-max-refinement-disbalance", 14, "maxDisbalance", OPTION_HIDDEN, NULL},
-
- {0}
-};
-
-
-struct argp pinkIndexer_argp = { pinkindexer_options,
- pinkindexer_parse_arg,
- NULL, NULL, NULL, NULL, NULL };