diff --git a/tools/jfjoch_process.cpp b/tools/jfjoch_process.cpp index 4513e763..102a9d7e 100644 --- a/tools/jfjoch_process.cpp +++ b/tools/jfjoch_process.cpp @@ -45,6 +45,7 @@ void print_usage(Logger &logger) { logger.Info(" -P Partiality refinement fixed|rot|unity (default: fixed)"); logger.Info(" -A Anomalous mode (don't merge Friedel pairs)"); logger.Info(" -C Fix reference unit cell: -C\"a,b,c,alpha,beta,gamma\" (comma-separated, no spaces; quotes optional)"); + logger.Info(" -W HDF5 file with analysis results is written"); } void trim_in_place(std::string& t) { @@ -127,6 +128,7 @@ int main(int argc, char **argv) { bool anomalous_mode = false; std::optional space_group_number; std::optional fixed_reference_unit_cell; + bool write_output = false; ScaleMergeOptions::PartialityModel partiality_model = ScaleMergeOptions::PartialityModel::Fixed; @@ -139,7 +141,7 @@ int main(int argc, char **argv) { } int opt; - while ((opt = getopt(argc, argv, "o:N:s:e:vR::Fxd:S:MP:AD:C:")) != -1) { + while ((opt = getopt(argc, argv, "o:N:s:e:vR::Fxd:S:MP:AD:C:W")) != -1) { switch (opt) { case 'o': output_prefix = optarg; @@ -153,6 +155,9 @@ int main(int argc, char **argv) { case 'e': end_image = atoi(optarg); break; + case 'W': + write_output = true; + break; case 'v': verbose = true; break; @@ -316,7 +321,8 @@ int main(int argc, char **argv) { std::unique_ptr writer; try { - writer = std::make_unique(start_message); + if (write_output) + writer = std::make_unique(start_message); } catch (const std::exception &e) { logger.Error("Failed to initialize file writer: {}", e.what()); exit(EXIT_FAILURE); @@ -434,7 +440,8 @@ int main(int argc, char **argv) { std::lock_guard lock(plots_mutex); plots.Add(msg, profile); // Write Result - writer->Write(msg); + if (writer) + writer->Write(msg); } // Update max sent tracking @@ -655,8 +662,10 @@ int main(int argc, char **argv) { } // Write End Message - writer->WriteHDF5(end_msg); - auto stats = writer->Finalize(); + if (writer) { + writer->WriteHDF5(end_msg); + auto stats = writer->Finalize(); + } // 6. Report Statistics to Console double processing_time = std::chrono::duration(end_time - start_time).count(); @@ -667,7 +676,6 @@ int main(int argc, char **argv) { logger.Info("Processing time: {:.2f} s", processing_time); logger.Info("Frame rate: {:.2f} Hz", frame_rate); logger.Info("Total throughput:{:.2f} MB/s", throughput_MBs); - logger.Info("Images written: {}", stats.size()); // Print extended stats similar to Receiver if (!end_msg.indexing_rate.has_value()) { @@ -691,12 +699,4 @@ int main(int argc, char **argv) { logger.Info("Lattice: a={:.2f} b={:.2f} c={:.2f} alpha={:.2f} beta={:.2f} gamma={:.2f}", uc.a, uc.b, uc.c, uc.alpha, uc.beta, uc.gamma); } - - if (stats.empty()) { - logger.Info("Analysis finished with warnings (no files written)"); - exit(EXIT_FAILURE); - } else { - logger.Info("Analysis successfully finished"); - exit(EXIT_SUCCESS); - } }