jfjoch_process: Add orientation-only refinement
This commit is contained in:
+22
-13
@@ -55,7 +55,7 @@ void print_usage() {
|
||||
std::cout << " -X, --indexing-algorithm <txt> Indexing algorithm (FFBIDX|FFT|FFTW|Auto|None)" << std::endl;
|
||||
std::cout << " -S, --space-group <num> Space group number - used for both indexing and scaling" << std::endl;
|
||||
std::cout << " -C, --unit-cell <cell> Fix reference unit cell: \"a,b,c,alpha,beta,gamma\"" << std::endl;
|
||||
std::cout << " --no-beam-center-refine No least-square beam center refinement" << std::endl;
|
||||
std::cout << " -r, --refine <txt> Geometry refinement algorithm (none|orientation|beam_and_lattice)" << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
std::cout << " Scaling and merging" << std::endl;
|
||||
@@ -77,7 +77,6 @@ enum {
|
||||
OPT_SPOT_THRESHOLD,
|
||||
OPT_SPOT_RESOLUTION,
|
||||
OPT_MAX_SPOTS,
|
||||
OPT_NO_BEAM_CENTER_REFINE,
|
||||
OPT_MIN_PARTIALITY,
|
||||
OPT_MIN_IMAGE_CC,
|
||||
OPT_SCALING_ITERATIONS,
|
||||
@@ -102,12 +101,12 @@ static option long_options[] = {
|
||||
{"refine-bfactor", no_argument, nullptr, 'B'},
|
||||
{"wedge", optional_argument, nullptr, 'w'},
|
||||
{"scale-merge", no_argument, nullptr, 'M'},
|
||||
{"refine", required_argument, nullptr, 'r'},
|
||||
|
||||
{"spot-sigma", required_argument, nullptr, OPT_SPOT_SIGMA},
|
||||
{"spot-threshold", required_argument, nullptr, OPT_SPOT_THRESHOLD},
|
||||
{"spot-high-resolution", required_argument, nullptr, OPT_SPOT_RESOLUTION},
|
||||
{"max-spots", required_argument, nullptr, OPT_MAX_SPOTS},
|
||||
{"no-beam-center-refine", no_argument, nullptr, OPT_NO_BEAM_CENTER_REFINE},
|
||||
{"min-partiality", required_argument, nullptr, OPT_MIN_PARTIALITY},
|
||||
{"min-image-cc", required_argument, nullptr, OPT_MIN_IMAGE_CC},
|
||||
{"scaling-iterations", required_argument, nullptr, OPT_SCALING_ITERATIONS},
|
||||
@@ -199,7 +198,6 @@ int main(int argc, char **argv) {
|
||||
bool verbose = false;
|
||||
bool rotation_indexing = false;
|
||||
std::optional<float> rotation_indexing_range;
|
||||
bool refine_beam_center = true;
|
||||
bool run_scaling = false;
|
||||
bool anomalous_mode = false;
|
||||
std::optional<int64_t> space_group_number;
|
||||
@@ -216,6 +214,7 @@ int main(int argc, char **argv) {
|
||||
int64_t scaling_iter = 3;
|
||||
|
||||
IndexingAlgorithmEnum indexing_algorithm = IndexingAlgorithmEnum::Auto;
|
||||
GeomRefinementAlgorithmEnum refinement_algorithm = GeomRefinementAlgorithmEnum::BeamCenter;
|
||||
|
||||
IntensityFormat intensity_format = IntensityFormat::MTZ;
|
||||
PartialityModel partiality_model = PartialityModel::Fixed;
|
||||
@@ -230,7 +229,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
int opt;
|
||||
int option_index = 0;
|
||||
const char *short_opts = "vo:N:s:e:t:R::X:C:z:FABw::S:MP:";
|
||||
const char *short_opts = "vo:N:s:e:t:R::X:C:z:FABw::S:MP:r:";
|
||||
|
||||
while ((opt = getopt_long(argc, argv, short_opts, long_options, &option_index)) != -1) {
|
||||
switch (opt) {
|
||||
@@ -278,6 +277,23 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'r': {
|
||||
std::string alg = optarg ? optarg : "";
|
||||
std::transform(alg.begin(), alg.end(), alg.begin(),
|
||||
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
||||
if (alg == "none")
|
||||
refinement_algorithm = GeomRefinementAlgorithmEnum::None;
|
||||
else if (alg == "beam_and_lattice")
|
||||
refinement_algorithm = GeomRefinementAlgorithmEnum::BeamCenter;
|
||||
else if (alg == "orientation")
|
||||
refinement_algorithm = GeomRefinementAlgorithmEnum::OrientationOnly;
|
||||
else {
|
||||
logger.Error("Invalid geom refinement algorithm: {}", alg);
|
||||
print_usage();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'C': {
|
||||
auto uc = parse_unit_cell_arg(optarg);
|
||||
if (!uc.has_value()) {
|
||||
@@ -345,9 +361,6 @@ int main(int argc, char **argv) {
|
||||
max_spot_count_override = atoll(optarg);
|
||||
logger.Info("Max spot count overridden to {}", max_spot_count_override.value());
|
||||
break;
|
||||
case OPT_NO_BEAM_CENTER_REFINE:
|
||||
refine_beam_center = false;
|
||||
break;
|
||||
case 'M':
|
||||
run_scaling = true;
|
||||
break;
|
||||
@@ -476,11 +489,7 @@ int main(int argc, char **argv) {
|
||||
indexing_settings.RotationIndexing(rotation_indexing);
|
||||
if (rotation_indexing_range.has_value())
|
||||
indexing_settings.RotationIndexingMinAngularRange_deg(rotation_indexing_range.value());
|
||||
|
||||
if (refine_beam_center)
|
||||
indexing_settings.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::BeamCenter);
|
||||
else
|
||||
indexing_settings.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::None);
|
||||
indexing_settings.GeomRefinementAlgorithm(refinement_algorithm);
|
||||
experiment.ImportIndexingSettings(indexing_settings);
|
||||
|
||||
ScalingSettings scaling_settings;
|
||||
|
||||
Reference in New Issue
Block a user