4 #include <QScriptValue>
6 #include "qcepproperty.h"
8 #include "qcepsettingssaver.h"
9 #include <QtConcurrentRun>
18 #ifdef WANT_IMPORT_COMMANDS
19 #include "qcepimagedataformatcbf.h"
20 #include "qcepimagedataformatmar345.h"
21 #include "qcepimagedataformattiff.h"
25 #include "lzf_filter.h"
33 #ifdef WANT_IMPORT_COMMANDS
34 QcepImageDataFormatCBF<double> cbfImg(
"cbf");
35 QcepImageDataFormatTiff<double> tiffImg(
"tiff");
36 QcepImageDataFormatMar345<double> mar345Img(
"mar345");
48 : QCoreApplication(argc, argv),
50 : QApplication(argc, argv),
52 m_ObjectNamer(
this,
"cctw"),
57 #ifdef WANT_IMPORT_COMMANDS
66 m_PEIngressCommand(NULL),
70 m_Saver(
new QcepSettingsSaver(
this)),
72 m_GuiWanted(QcepSettingsSaverWPtr(),
this,
"guiWanted",
true,
"Is GUI wanted?"),
73 m_Mode(QcepSettingsSaverWPtr(),
this,
"mode", 0,
"Operation mode"),
74 m_StartupCommands(QcepSettingsSaverWPtr(),
this,
"startupCommands", QcepStringList(),
"Startup commands"),
75 m_InputFiles(QcepSettingsSaverWPtr(),
this,
"inputFiles", QcepStringList(),
"Input files"),
76 m_OutputFile(QcepSettingsSaverWPtr(),
this,
"outputFile",
"",
"Output file"),
77 m_MaskFile(QcepSettingsSaverWPtr(),
this,
"maskFile",
"",
"Mask file"),
78 m_AnglesFile(QcepSettingsSaverWPtr(),
this,
"anglesFile",
"",
"Angles File"),
79 m_WeightsFile(QcepSettingsSaverWPtr(),
this,
"weightsFile",
"",
"Weights File"),
80 m_Debug(m_Saver,
this,
"debug", 0,
"Debug Level"),
81 m_Halting(QcepSettingsSaverWPtr(),
this,
"halting",
false,
"Set to halt operation in progress"),
82 m_Progress(QcepSettingsSaverWPtr(),
this,
"progress", 0,
"Progress completed"),
83 m_ProgressLimit(QcepSettingsSaverWPtr(),
this,
"progressLimit", 100,
"Progress limit"),
84 m_DependenciesPath(m_Saver,
this,
"dependenciesPath",
"",
"Dependencies saved in"),
85 m_SettingsPath(m_Saver,
this,
"settingsPath",
"",
"Settings saved in"),
86 m_ScriptPath(m_Saver,
this,
"scriptPath",
"",
"Execute script from"),
87 m_SpecDataFilePath(m_Saver,
this,
"specDataFilePath",
"",
"Pathname of spec data file"),
88 m_MpiRank(QcepSettingsSaverWPtr(),
this,
"mpiRank", 0,
"MPI Rank of process"),
89 m_MpiSize(QcepSettingsSaverWPtr(),
this,
"mpiSize", -1,
"MPI Size"),
90 m_Verbosity(QcepSettingsSaverWPtr(),
this,
"verbosity", 0,
"Output Verbosity"),
91 m_ExitStatus(QcepSettingsSaverWPtr(),
this,
"exitStatus", 0,
"Exit Status")
93 QcepProperty::registerMetaTypes();
101 connect(prop_Debug(), SIGNAL(valueChanged(
int,
int)),
this, SLOT(onDebugChanged(
int)));
102 connect(prop_Progress(), SIGNAL(valueChanged(
int,
int)),
this, SLOT(onProgress(
int)));
104 connect(
this, SIGNAL(aboutToQuit()),
this, SLOT(doAboutToQuit()));
117 g_DebugLevel->setDebugLevel(dbg);
123 int prog = (prg*100)/get_ProgressLimit();
127 if ((prog % 5 == 0)) {
129 printf(
"\r%d%% completed", prog);
137 if (
m_Window == NULL && (prog % 5 == 0)) {
157 prop_StartupCommands()->appendValue(cmd);
165 for(
int i=0;i<str.length();i++) {
169 }
else if(str[i] ==
'\'') {
172 }
else if(str[i] ==
'\"') {
175 }
else if(str[i] ==
'\\') {
179 newStr.append(str[i]);
209 int option_index = 0;
212 static struct option long_options[] = {
213 {
"help", no_argument, 0,
'h'},
214 {
"version", no_argument, 0, argVersion},
215 {
"verbosity", optional_argument, 0,
'v'},
216 {
"threads", required_argument, 0,
'j'},
217 {
"input", required_argument, 0,
'i'},
218 {
"inputchunks", required_argument, 0, argInputChunks},
219 {
"inputdataset", required_argument, 0, argInputDataset},
220 {
"mask", required_argument, 0,
'm'},
221 {
"angles", required_argument, 0,
'a'},
222 {
"omega", required_argument, 0, argOmega},
223 {
"twotheta", required_argument, 0, argTwoTheta},
224 {
"phi", required_argument, 0, argPhi},
225 {
"chi", required_argument, 0, argChi},
226 {
"weights", required_argument, 0,
'w'},
227 {
"output", required_argument, 0,
'o'},
228 {
"outputdims", required_argument, 0, argOutputDims},
229 {
"outputchunks", required_argument, 0, argOutputChunks},
230 {
"outputdataset", required_argument, 0, argOutputDataset},
231 {
"normalization", required_argument, 0,
'N'},
232 {
"compression", required_argument, 0,
'z'},
233 {
"subset", required_argument, 0,
'S'},
234 {
"transform", no_argument, 0,
't'},
235 {
"depends", no_argument, 0,
'd'},
236 {
"nodepends", no_argument, 0,
'x'},
237 {
"debug", required_argument, 0,
'D'},
238 {
"preferences", required_argument, 0,
'p'},
239 {
"gui", no_argument, 0,
'g'},
240 {
"nogui", no_argument, 0,
'n'},
241 {
"command", required_argument, 0,
'c'},
242 {
"script", required_argument, 0,
's'},
243 {
"iproject", optional_argument, 0, argInputProject},
244 {
"oproject", optional_argument, 0, argOutputProject},
245 {
"projectout", required_argument, 0, argProjectOutput},
246 {
"mergein", required_argument, 0, argMergeInput},
247 {
"mergeout", required_argument, 0, argMergeOutput},
251 c = getopt_long(argc, argv,
"hv::j:i:m:a:o:N:S:tdxD:p:gnc:w::s:z:", long_options, &option_index);
268 set_Verbosity(atoi(optarg));
270 prop_Verbosity()->incValue(1);
286 case argInputDataset:
319 set_OutputFile(optarg);
330 case argOutputChunks:
334 case argOutputDataset:
358 case argInputProject:
359 startupCommand(tr(
"inputProject(%1);").arg(optarg?atoi(optarg):7));
362 case argOutputProject:
363 startupCommand(tr(
"outputProject(%1);").arg(optarg?atoi(optarg):7));
366 case argProjectOutput:
375 set_GuiWanted(
false);
395 set_OutputFile(optarg);
417 while (optind < argc) {
421 if (strcasecmp(argv[optind],
"transform") == 0) {
423 }
else if (strcasecmp(argv[optind],
"merge") == 0) {
425 }
else if (strcasecmp(argv[optind],
"norm") == 0) {
427 }
else if (strcasecmp(argv[optind],
"project") == 0) {
445 static herr_t
cctwH5print(
unsigned n,
const H5E_error2_t *eptr,
void *data)
450 app->
printMessage(QObject::tr(
"%1:%2 : %3").arg(eptr->file_name).arg(eptr->line).arg(eptr->desc));
460 H5Ewalk(H5E_DEFAULT, H5E_WALK_DOWNWARD, &
cctwH5print,
this);
476 H5Eset_auto(H5E_DEFAULT, &
cctwH5error, (
void*)
this);
485 #ifdef WANT_IMPORT_COMMANDS
486 m_ImportData =
new CctwImporter(
this,
"importData",
this);
522 #ifdef WANT_IMPORT_COMMANDS
545 set_GuiWanted(
false);
547 if (get_GuiWanted()) {
558 foreach(QString cmd, get_StartupCommands()) {
559 QMetaObject::invokeMethod(
this,
"evaluateStartupCommand", Qt::QueuedConnection, Q_ARG(QString, cmd));
564 if (!get_GuiWanted()) {
565 QMetaObject::invokeMethod(
this,
"execute", Qt::QueuedConnection);
566 QMetaObject::invokeMethod(
this,
"quit", Qt::QueuedConnection);
580 printf(
"%s\n", qPrintable(msg));
585 printf(
"%s\n", qPrintable(msg));
593 printf(
"%s\n", qPrintable(msg));
599 printf(
"%s\n", qPrintable(msg));
618 if (!val.isUndefined()) {
631 if (val.isUndefined()) {
634 printMessage(tr(
"%1 -> %2").arg(cmd).arg(val.toString()));
648 return QScriptValue();
657 if (f.open(QIODevice::ReadOnly)) {
658 QString script = f.readAll();
673 "usage: %1 transform|merge|norm|project <inputs> <options>\n"
675 "where inputs are one or more hdf dataset refs (in url format)\n"
676 "the file part of the URL gives the hdf/nexus file, and the 'fragment'\n"
677 "(separated by a # character) gives the hdf dataset path\n"
679 "where options are:\n"
681 "--help, -h display this text\n"
682 "--version display version info\n"
683 "--verbosity[=n], -v[=n] set verbosity to 'n', or increment it if 'n' not given\n"
684 "--threads <n>, -j <n> set number of worker threads\n"
685 "--input <f>, -i <f> specify input data (url format)\n"
686 "--inputchunks <cks> specify input chunk size (e.g. 32x32x32 or 32)\n"
687 "--inputdataset <dsn> specify input dataset path\n"
688 "--mask <f>, -m <f> specify mask data (url format)\n"
689 "--maskdataset <dsn> specify mask dataset path\n"
690 "--angles <f>, -a <f> specify angles data (url format\n"
691 "--anglesdataset <f> specify angles dataset path\n"
692 "--omega <angs> specify omega angles (url-angles format\n"
693 "--twotheta <angs> specify two theta angles (url-angles format\n"
694 "--chi <angs> specify chi angles (url-angles format\n"
695 "--phi <angs> specify phi angles (url-angles format\n"
696 "--weights <f>, -w <f> specify weights data (url format)\n"
697 "--output <f>, -o <f> specify output data (url format)\n"
698 "--outputdims <dims> specify output dimensions (e.g. 2048x2048x2048 or 2048)\n"
699 "--outputchunks <cks> specify output chunk size (e.g. 32x32x32 or 32)\n"
700 "--outputdataset <dsn> specify output dataset path\n"
701 "--normalization <n>, -N <n> normalize output file(s) (0=no norm, 1=norm)\n"
702 "--compression <n>, -z <n> compress output files (-ve = LZF, 0 = none, 1-9 = GZIP\n"
703 "--subset <n/m>, -S <n/m> specify subset of input data to operate on (or all if blank)\n"
704 "--transform, -t transform all or part of the data\n"
705 "--depends, -d calculate dependencies for all or part of the data\n"
706 "--nodepends, -x clear dependencies\n"
707 "--debug <n>, -D <n> set debug level\n"
708 "--preferences <f>, -p <f> read settings from file <f>\n"
709 "--gui, -g use GUI interface if available\n"
710 "--nogui, -n no GUI interface\n"
711 "--command <cmd>, -c <cmd> execute command <cmd>\n"
712 "--script <f>, -s <f> run script in file <f>\n"
713 "--iproject {=n} project input dataset (along x=1,y=2,z=4 axes)\n"
714 "--oproject {=n} project output dataset (along x=1,y=2,z=4 axes)\n"
715 "--projectout <p> prefix for projected output files (add .x.tif, .y.tif or .z.tif)\n"
716 "--mergein <f> specify an input dataset to merge (url format)\n"
717 "--mergeout <f> merge (previously specified) datasets into output (url format)\n"
719 "Where <angs> may be:\n"
720 "A single numeric value set the angle to the given value\n"
721 "A comma separated number pair set starting angle and step\n"
724 "A ref to an HDF array set angles to values from array\n"
727 "cctwcli transform file1.nxs\\#/data/entry/v -o xform.nxs\\#/data/entry/v\n"
728 "cctwcli merge file1.nxs\\#/data/entry/v file2.nxs\\#/data/entry/v -o merge.nxs\\#/data/entry/v\n"
729 ).arg(arguments().at(0)));
734 printLine(tr(
"cctw version " STR(CCTW_VERSION)));
735 printLine(tr(
"qt version %1").arg(qVersion()));
736 printLine(tr(
"ceplib version " STR(QCEPLIB_VERSION)));
737 printLine(tr(
"hdf5 version " STR(QCEPLIB_HDF5_VERSION)));
739 printLine(tr(
"qwt version " STR(QCEPLIB_QWT_VERSION)));
741 printLine(tr(
"tiff version " STR(QCEPLIB_TIFF_VERSION)));
742 printLine(tr(
"cbf version " STR(QCEPLIB_CBF_VERSION)));
747 printMessage(tr(
"Set number of pool threads to %1").arg(desc));
751 int n = desc.toInt(&ok);
755 QThreadPool::globalInstance()->setMaxThreadCount(QThread::idealThreadCount());
757 QThreadPool::globalInstance()->setMaxThreadCount(n);
774 printMessage(tr(
"Set input chunk size to %1").arg(data));
783 printMessage(tr(
"Set input data set name to %1").arg(data));
809 prop_InputFiles()->appendValue(path);
842 printMessage(tr(
"Set output dataset dimensions to %1").arg(data));
851 printMessage(tr(
"Set output chunk size to %1").arg(data));
860 printMessage(tr(
"Set output data set name to %1").arg(data));
898 printMessage(tr(
"Set Two Theta Values to %1").arg(data));
995 QSettings settings(
"xray.aps.anl.gov",
"cctw");
1002 QSettings settings(path, QSettings::IniFormat);
1004 printMessage(tr(
"Reading settings from %1").arg(path));
1011 QcepProperty::readSettings(
this, &staticMetaObject,
"cctw", settings,
true);
1017 #ifdef WANT_IMPORT_COMMANDS
1019 m_ImportData->readSettings(settings,
"importData");
1050 QSettings settings(
"xray.aps.anl.gov",
"cctw");
1059 QSettings settings(
"xray.aps.anl.gov",
"cctw");
1070 QSettings settings(path, QSettings::IniFormat);
1079 QcepProperty::writeSettings(
this, &staticMetaObject,
"cctw", settings,
true);
1085 #ifdef WANT_IMPORT_COMMANDS
1087 m_ImportData->writeSettings(settings,
"importData");
1157 if (!get_Halting()) {
1158 QcepDoubleVector anglesvec =
m_InputData->get_Angles();
1159 double *angs = (anglesvec.count()<=0 ? NULL : anglesvec.data());
1177 double osxstp = osx >= 1 ? 1.0/osx : 0;
1178 double osystp = osy >= 1 ? 1.0/osy : 0;
1179 double oszstp = osz >= 1 ? 1.0/osz : 0;
1181 for (
int z=0; z<chSize.
z(); z++) {
1182 for (
int oz=0; oz<osz; oz++) {
1183 for (
int y=0; y<chSize.
y(); y++) {
1184 for (
int oy=0; oy<osy; oy++) {
1185 for (
int x=0; x<chSize.
x(); x++) {
1186 for (
int ox=0; ox<osx; ox++) {
1189 CctwDoubleVector3D xfmcoord = transform.
forward(coords);
1196 if (opchunk != lastChunk) {
1197 lastChunk = opchunk;
1218 prop_Progress()->incValue(1);
1225 QVector < QFuture < void > > futures;
1237 set_ProgressLimit(chunks.
volume());
1247 for (
int z=0; z<chunks.
z(); z++) {
1248 for (
int y=0; y<chunks.
y(); y++) {
1249 for (
int x=0; x<chunks.
x(); x++) {
1255 if (get_Halting()) {
1279 foreach (QFuture<void> f, futures) {
1280 f.waitForFinished();
1286 int msec = startAt.elapsed();
1288 printMessage(tr(
"finished calculate dependencies after %1 msec").arg(msec));
1313 for (
int n=0; n<chunks.
volume(); n++) {
1314 if (get_Halting()) {
1321 printMessage(tr(
"Problem: %1 => [%2,%3,%4] => %5").arg(n).arg(idx.
x()).arg(idx.
y()).arg(idx.
z()).arg(nn));
1326 for (
int z=0; z<chunks.
z(); z++) {
1327 for (
int y=0; y<chunks.
y(); y++) {
1328 for (
int x=0; x<chunks.
x(); x++) {
1329 if (get_Halting()) {
1337 printMessage(tr(
"Problem: [%1,%2,%3] => %4 => [%5,%6,%7]")
1338 .arg(idx.
x()).arg(idx.
y()).arg(idx.
z())
1340 .arg(idx2.
x()).arg(idx2.
y()).arg(idx2.
z()));
1349 for (
int z=0; z<chunks.
z(); z++) {
1350 for (
int y=0; y<chunks.
y(); y++) {
1351 for (
int x=0; x<chunks.
x(); x++) {
1352 if (get_Halting()) {
1374 set_ProgressLimit(chunks.
volume());
1376 for (
int z=0; z<chunks.
z(); z++) {
1377 for (
int y=0; y<chunks.
y(); y++) {
1378 for (
int x=0; x<chunks.
x(); x++) {
1379 if (get_Halting()) {
1406 set_ProgressLimit(chunks.
volume());
1408 for (
int z=0; z<chunks.
z(); z++) {
1409 for (
int y=0; y<chunks.
y(); y++) {
1410 for (
int x=0; x<chunks.
x(); x++) {
1411 if (get_Halting()) {
1438 set_ProgressLimit(chunks.
volume());
1440 for (
int z=0; z<chunks.
z(); z++) {
1441 for (
int y=0; y<chunks.
y(); y++) {
1444 for (
int x=0; x<chunks.
x(); x++) {
1445 if (get_Halting()) {
1457 }
else if (nDeps >= 1) {
1458 aLine += tr(
"%1").arg(nDeps);
1481 set_ProgressLimit(chunks.
volume());
1483 for (
int z=0; z<chunks.
z(); z++) {
1484 for (
int y=0; y<chunks.
y(); y++) {
1487 for (
int x=0; x<chunks.
x(); x++) {
1488 if (get_Halting()) {
1500 }
else if (nDeps >= 1) {
1501 aLine += tr(
"%1").arg(nDeps);
1537 processEvents(QEventLoop::ExcludeUserInputEvents);
1558 set_SpecDataFilePath(path);
1565 set_SpecDataFilePath(path);
1600 int v = data.toInt();
1612 int v = data.toInt();
1654 while (!f.isFinished()) {
1656 processEvents(QEventLoop::ExcludeUserInputEvents);
1683 if (get_InputFiles().count() < 1) {
1688 foreach(QString path, get_InputFiles()) {
1695 inputFile->
setChunkSize(inputFile->get_HDFChunkSize());
1703 inputFiles.append(inputFile);
1706 hdfChunkSize = inputFiles[0]->get_HDFChunkSize();
1707 dims = inputFiles[0]->dimensions();
1710 if (inputFile->get_HDFChunkSize() != hdfChunkSize) {
1711 printMessage(
"Input datasets do not have the same HDF chunk sizes");
1716 printMessage(
"Input datasets do not have the same dimensions");
1737 set_ProgressLimit(nchunks);
1739 for (
int i=0; i<nchunks; i++) {
1752 printMessage(tr(
"Could not open %1 for output").arg(get_OutputFile()));
1781 QStringList f = get_InputFiles();
1783 if (f.count() != 1) {
1784 printMessage(tr(
"cctw transform needs exactly 1 input file, rather than %1").arg(f.count()));
1789 while (!f.isFinished()) {
1791 processEvents(QEventLoop::ExcludeUserInputEvents);
1798 QStringList f = get_InputFiles();
1800 if (f.count() < 1) {
1801 printMessage(tr(
"cctw merge needs 1 or more input files, rather than %1").arg(f.count()));
1806 while (!f.isFinished()) {
1808 processEvents(QEventLoop::ExcludeUserInputEvents);
1815 QStringList f = get_InputFiles();
1817 if (f.count() != 1) {
1818 printMessage(tr(
"cctw norm needs exactly 1 input file, rather than %1").arg(f.count()));
1823 while (!f.isFinished()) {
1825 processEvents(QEventLoop::ExcludeUserInputEvents);
1832 QStringList f = get_InputFiles();
1834 if (f.count() != 1) {
1835 printMessage(tr(
"cctw project needs exactly 1 input file, rather than %1").arg(f.count()));
1840 while (!f.isFinished()) {
1842 processEvents(QEventLoop::ExcludeUserInputEvents);
1884 m_InputData -> setDataSource(get_InputFiles().at(0));
1903 if (get_OutputFile().length() == 0) {
1904 QString commonBase =
"";
1907 foreach(QString f, get_InputFiles()) {
1909 QString fn = u.fileName();
1911 QString bn = fi.completeBaseName();
1919 for (
int i=0; i<bn.length(); i++) {
1920 if (commonBase[i] == bn[i]) {
1925 if (a.length() >= 1) {
1930 printMessage(tr(
"Common basename %1").arg(commonBase));
1933 QString res = commonBase + suffix;
1935 set_OutputFile(res);
CctwChunkedData * m_OutputData
void outputProject(int axes)
int dependencyCount() const
virtual QString settingsScript()
void decodeCommandLineArgs(int &argc, char *argv[])
virtual void setMaskDataset(QString desc)
void calculateChunkDependencies(int n)
void inputProject(int axes)
virtual void setWeightsSource(QString desc)
void setOmega(QString data)
void setMaskDataset(QString data)
CctwChunkedData * m_InputData
CctwIntVector3D chunkIndexFromNumber(int n)
static QString addSlashes(QString str)
void setOutputChunks(QString data)
void startupCommand(QString cmd)
static void registerMetaTypes()
void setProjectOutput(QString dir)
virtual void setAnglesSource(QString desc)
void setTwoTheta(const QString tth)
static herr_t cctwH5error(hid_t h, void *data)
static void registerMetaTypes()
CctwIntVector3D chunkSize()
CctwCrystalCoordinateParameters * m_Parameters
static void registerMetaTypes()
CctwDataChunk * chunk(int n)
void setCompression(QString data)
void onDebugChanged(int dbg)
QAtomicInt m_WorkOutstanding
void executeScriptFile(QString path)
QcepSettingsSaverPtr g_Saver
void setOutputDims(QString data)
void analyzeSpecDataFile(QString path)
void setDimensions(CctwIntVector3D dim)
CctwIntVector3D dimensions
virtual void setChunks(QString desc)
void printLine(QString line)
void setOmega(const QString omg)
void reportOutputChunkCounts()
bool openInputFile(bool quietly=false)
void analyzeSpecDataFile(QString path)
virtual void setDataset(QString desc)
CctwIntVector3D chunkCount
static void registerMetaTypes()
QcepSettingsSaverPtr m_Saver
void mergeChunk(CctwDataChunk *chunk)
CctwTransformer * m_Transformer
void clearWriteSettings()
virtual void setDataSource(QString desc)
void setPhi(QString data)
void transform(QString desc)
virtual void setDims(QString desc)
void setOutputData(QString data)
QcepIntList dependencies(int chunkId)
void setNormalization(QString data)
void addWorkOutstanding(int amt)
int chunkContaining(CctwIntVector3D pixelCoord)
void autoOutputFile(QString suffix)
void setChunkSize(CctwIntVector3D cksz)
void initialize(int &argc, char *argv[])
void setSubset(QString desc)
QScriptValue evaluate(QString cmd)
void reportInputDependencies()
void setThreads(QString desc)
CctwScriptEngine * m_ScriptEngine
QcepStringList inputFiles
CctwPEIngressCommand * m_PEIngressCommand
QAtomicInt m_LastProgress
void mergeInput(QString path)
virtual void readSettings(QSettings *set, QString section)
bool containsPixel(CctwIntVector3D pixelCoord)
void printLine(QString line)
void reportOutputDependencies()
void reportDependencies()
CctwIntVector3D chunkStart()
void plotCurves(QwtPlotCurve *c1, QwtPlotCurve *c2, QwtPlotCurve *c3, QwtPlotCurve *c4)
static herr_t cctwH5print(unsigned n, const H5E_error2_t *eptr, void *data)
void analyzePEMetaData(QString path)
void setTwoTheta(QString data)
CctwComparer * m_CompareData
void workCompleted(int amt)
void setOutputDataset(QString data)
CctwVector3D< int > CctwIntVector3D
void setPhi(const QString phi)
void evaluateStartupCommand(QString cmd)
CctwqtMainWindow * m_Window
void saveDependencies(QString path)
void loadDependencies(QString path)
void setChi(QString data)
void pushInputFile(QString path)
void decodeCommandLineArgsForUnix(int &argc, char *argv[])
void printMessage(QString msg, QDateTime dt=QDateTime::currentDateTime())
void setAnglesDataset(QString data)
void installHDF5ErrorHandler()
QAtomicInt m_DependencyCounter
QcepSettingsSaverWPtr saver() const
void decodeCommandLineArgsForWindows(int &argc, char *argv[])
void setInputDataset(QString data)
void reportInputChunkCounts()
virtual void writeSettings(QSettings *set, QString section)
void showHelp(QString about)
void checkForExceptions()
void calculateDependencies()
void plotCurves(QwtPlotCurve *c1, QwtPlotCurve *c2, QwtPlotCurve *c3, QwtPlotCurve *c4)
void mergeOutput(QString path)
void partialDependencies(QString desc)
static void msleep(unsigned long msec)
virtual void setMaskSource(QString desc)
void evaluateCommand(QString cmd)
int chunkNumberFromIndex(CctwIntVector3D chunkIdx)
void setMaskData(QString data)
void analyzePEMetaData(QString path)
virtual void setAnglesDataset(QString desc)
CctwVector3D< double > CctwDoubleVector3D
void setAnglesData(QString data)
CctwApplication(int &argc, char *argv[])
CctwDataChunk * readChunk(int n)
CctwCrystalCoordinateTransform * m_Transform
CctwCrystalCoordinateParameters * parameters() const
void setInputData(QString data)
void setInputChunks(QString data)
void printMessage(QString msg, QDateTime dt=QDateTime::currentDateTime())
void setChi(const QString chi)
void reportDependencies()