QXRD  0.11.16
qxrdexperiment.cpp
Go to the documentation of this file.
1 #define _CRT_SECURE_NO_WARNINGS
2 
3 #include "qxrddebug.h"
4 #include "qcepmacros.h"
5 #include "qxrdexperiment.h"
6 #include "qxrdapplication.h"
8 #include "qxrddataprocessor.h"
9 #include "qxrdcalibrantlibrary.h"
11 #include "qxrdcalibrantdspacings.h"
13 #include "qxrdwindow.h"
14 #include "qxrdacquisitionthread.h"
15 #include "qxrdacquisition.h"
16 #include "qxrdserverthread.h"
17 #include "qxrdserver.h"
18 #include "qxrdsimpleserverthread.h"
19 #include "qxrdsimpleserver.h"
20 #include "qxrdscriptenginethread.h"
21 #include "qxrdscriptengine.h"
23 #include "qxrdexperimentsettings.h"
24 #include <QFileDialog>
25 #include "qxrdfilesaverthread.h"
26 #include "qcepsettingssaver.h"
27 #include "qxrdfilesaver.h"
28 #include "qxrdexperimentthread.h"
29 #include "qxrddetectorthread.h"
30 #include "qcepmutexlocker.h"
31 #include "qxrdacquisition-ptr.h"
32 #include "qcepdataset.h"
33 #include "qcepdatasetmodel.h"
34 #include "qcepdatagroup.h"
35 #include "qcepdatacolumnscan.h"
36 #include "qcepdatacolumn.h"
37 #include "qcepsettingssaver.h"
38 //#include "qxrddetectorcontrolwindow.h"
39 
40 #include <QHostInfo>
41 #include <QColorDialog>
42 #include <QProcess>
43 
45  QString path,
46  QxrdApplicationWPtr app) :
47  QcepExperiment(path, "experiment", NULL),
48  m_Application(app),
49  m_ExperimentThread(expthrd),
50  m_WindowSettings(NULL),
51  m_Window(),
52 // m_AcquisitionWindow(),
53  m_ServerThread(NULL),
54  m_Server(),
58  m_Acquisition(),
59  m_FileSaverThread(NULL),
60  m_FileSaver(),
63  m_LogFile(NULL),
64  m_ScanFile(NULL),
66 
67  m_DataDirectory(m_SettingsSaver, this, "dataDirectory", defaultDataDirectory(path), "Saved Data Directory"),
68  m_LogFileName(m_SettingsSaver, this, "logFileName", defaultLogName(path), "Log File Name"),
69  m_ScanFileName(m_SettingsSaver, this, "scanFileName", defaultScanName(path), "Scan File Name"),
70  m_ScanFileExtension(m_SettingsSaver, this, "scanFileExtension", ".avg", "Scan File Extension"),
71  m_ScanDataNegative(m_SettingsSaver, this, "scanDataNegative", 0, "Scan Data Negative Value Handling"),
72  m_DefaultLayout(QcepSettingsSaverWPtr(), this,"defaultLayout",0, "Default Layout Used?"),
73  m_WorkCompleted(QcepSettingsSaverWPtr(), this, "workCompleted", 0, "Amount of Work Completed"),
74  m_WorkTarget(QcepSettingsSaverWPtr(), this, "workTarget", 0, "Amount of Work Targetted"),
75  m_CompletionPercentage(QcepSettingsSaverWPtr(), this, "completionPercentage", 0, "Percentage of Work Completed"),
76  m_DefaultScript(m_SettingsSaver, this, "defaultScript", "", "Default script for experiment"),
77  m_ExtraScriptFiles(m_SettingsSaver, this, "extraScriptFiles", QStringList(), "Additional script files for experiment"),
78  m_FontSize(m_SettingsSaver, this, "fontSize", -1, "Suggested font size"),
79  m_Spacing(m_SettingsSaver, this, "spacing", -1, "Suggested widget spacing")
80 {
82  printf("QxrdExperiment::QxrdExperiment(%p)\n", this);
83  }
84 }
85 
86 void QxrdExperiment::initialize(/*QxrdExperimentThreadWPtr expthrd, QxrdExperimentWPtr exp,*/ QSettings *settings)
87 {
89 
90  if (app) {
91 // QThread::currentThread()->setObjectName("experiment");
92 
93  splashMessage("Initializing File Saver");
94 
96  new QxrdFileSaverThread(app->allocator()));
97 // m_FileSaverThread -> setObjectName("saver");
98  m_FileSaverThread -> start();
100 
101  splashMessage("Initializing Data Processing");
102 
105  sharedFromThis(),
107  app->allocator(),
108  m_FileSaver));
110 
112 
113  if (saver) {
114  saver -> setProcessor(m_DataProcessor);
115  saver -> setExperiment(sharedFromThis());
116  }
117 
118  splashMessage("Initializing Data Acquisition");
119 
122  sharedFromThis(),
124  app->allocator()));
126 
128  new QxrdCalibrantLibrary(m_SettingsSaver, sharedFromThis()));
129 
132 
134  new QxrdCalibrantDSpacings());
135 
138 
140 
141  if (proc) {
142  proc -> setAcquisition(m_Acquisition);
143  }
144 
145  if (saver) {
146  saver -> setAcquisition(m_Acquisition);
147  }
148 
150 
151  if (acq) {
152  acq -> setNIDAQPlugin(app->nidaqPlugin());
153  }
154 
157 
158  m_DatasetModel -> newGroup("group1");
159  m_DatasetModel -> newGroup("group2");
160  m_DatasetModel -> newGroup("group3");
161 
162  QStringList cols;
163  cols << "x" << "y" << "z" << "v" << "sdev";
164 
165  m_DatasetModel -> newColumnScan("group1/scan1", 1000, cols);
166  m_DatasetModel -> newColumnScan("group2/scan2", 1000, cols);
167  m_DatasetModel -> newColumnScan("group3/scan3", 1000, cols);
168 
169  m_DatasetModel -> newColumn("group4/x", 1000);
170  m_DatasetModel -> newColumn("group4/y", 1000);
171  m_DatasetModel -> newColumn("group4/z", 1000);
172  m_DatasetModel -> newColumn("group4/t", 1000);
173  m_DatasetModel -> newColumn("group4/sdev", 1000);
174 
176 
177  splashMessage("Starting SPEC Server");
178 
180  new QxrdServerThread(m_SettingsSaver, sharedFromThis(), "qxrd"));
181 // m_ServerThread -> setObjectName("server");
182  m_ServerThread -> start();
183  m_Server = m_ServerThread -> server();
184 
185  splashMessage("Starting Simple Socket Server");
186 
188  new QxrdSimpleServerThread(m_SettingsSaver, sharedFromThis(), "simpleserver"));
189 // m_SimpleServerThread -> setObjectName("smpsrv");
190  m_SimpleServerThread -> start();
191  m_SimpleServer = m_SimpleServerThread -> server();
192 
193 // m_ScriptEngineThread = QxrdScriptEngineThreadPtr(
194 // new QxrdScriptEngineThread(m_Application, m_Experiment));
195 // m_ScriptEngineThread -> setObjectName("script");
196 // m_ScriptEngineThread -> start();
197 // m_ScriptEngine = m_ScriptEngineThread -> scriptEngine();
198 
200  new QxrdScriptEngine(app, sharedFromThis()));
202 
203  QxrdServerPtr srv(m_Server);
205 
206 // if (eng) {
207 // m_ScriptEngineDebugger = new QScriptEngineDebugger(this);
208 // m_ScriptEngineDebugger -> attachTo(eng.data());
209 // m_ScriptEngineDebugger -> setAutoShowStandardWindow(true);
210 // }
211 
212  if (srv && eng) {
213  connect(srv.data(), &QSpecServer::executeCommand,
215 
216  connect(eng.data(), &QxrdScriptEngine::specResultAvailable,
217  srv.data(), &QSpecServer::finishedCommand);
218  }
219 
221 
222  if (ssrv && eng) {
223  connect(ssrv.data(), &QxrdSimpleServer::executeCommand,
225 
227  ssrv.data(), &QxrdSimpleServer::finishedCommand);
228  }
229 
230  splashMessage("Loading Preferences");
231 
232  readSettings(settings, "experiment");
233 
234  splashMessage("Loading Background Images");
235 
236  if (proc) {
237  proc -> loadDefaultImages();
238  }
239 
240 #ifdef Q_OS_WIN32
241  QDir::setCurrent(QDir::homePath());
242 #endif
243 
244  printMessage(tr("------- Starting new session -------"));
245  printMessage(tr("Experiment name: %1").arg(get_ExperimentName()));
246  printMessage(tr("Experiment Directory: %1").arg(get_ExperimentDirectory()));
247  printMessage(tr("Stored in file: %1").arg(get_ExperimentFileName()));
248 
249  QString about = STR(QXRD_VERSION);
250 
251  if (sizeof(void*) == 4) {
252  about += " - 32 Bit";
253  } else {
254  about += " - 64 Bit";
255  }
256 
257 #ifdef Q_CC_MSVC
258  about += " MSVC";
259 #endif
260 
261 #ifdef Q_CC_GNU
262  about += " gcc";
263 #endif
264 
265 #ifdef QT_NO_DEBUG
266  about += " Release";
267 #else
268  about += " Debug";
269 #endif
270 
271 #ifdef Q_OS_MAC
272  about += " : Macintosh";
273 #elif defined(Q_OS_WIN32)
274  about += " : Windows";
275 #elif defined(Q_OS_UNIX)
276  about += " : Unix";
277 #endif
278 
279  printMessage(tr("Qxrd Version : %1").arg(about));
280  printMessage(tr("Qt Version %1").arg(qVersion()));
281  printMessage(tr("Qceplib Version %1").arg(STR(QCEPLIB_VERSION)));
282  printMessage(tr("QWT Version %1").arg(STR(QCEPLIB_QWT_VERSION)));
283  printMessage(tr("Mar345 Version %1").arg(STR(QCEPLIB_MAR345_VERSION)));
284  printMessage(tr("CBF Version %1").arg(STR(QCEPLIB_CBF_VERSION)));
285  printMessage(tr("TIFF Version %1").arg(STR(QCEPLIB_TIFF_VERSION)));
286  printMessage(tr("LevMar Version %1").arg(STR(QCEPLIB_LEVMAR_VERSION)));
287 #ifdef QCEPLIB_HDF5_VERSION
288  printMessage(tr("HDF5 Version %1").arg(STR(QCEPLIB_HDF5_VERSION)));
289 #endif
290  printMessage(tr("Spec Server Version %1").arg(STR(QCEPLIB_SPECSERVER_VERSION)));
291  printMessage(tr("Running on host %1").arg(QHostInfo::localHostName()));
292  printMessage(tr("Current directory %1").arg(QDir::currentPath()));
293 
294  connect(prop_WorkCompleted(), &QcepIntProperty::valueChanged, this, &QxrdExperiment::updateCompletionPercentage);
296 
297  m_SettingsSaver->start();
298  }
299 }
300 
302 {
303  return m_ExperimentThread;
304 }
305 
307 {
309 
311 
312  if (app && app->get_GuiWanted()) {
313  splashMessage("Opening Main Window");
317  sharedFromThis(),
320  app->allocator(),
321  NULL), &QObject::deleteLater);
322 
326 
327  if (m_Window) {
328  m_Window -> initialize();
329 
330  if (proc) {
331  proc -> setWindow(m_Window);
332  }
333 
334  if (acq) {
335  acq -> setWindow(m_Window);
336  }
337 
338  if (eng) {
339  eng -> setWindow(m_Window);
340  }
341 
342  m_Window -> onAcquisitionInit();
343 
344  if (eng) {
345  connect(m_Window.data(), &QxrdWindow::executeCommand,
347 
348  connect(eng.data(), &QxrdScriptEngine::appResultAvailable,
350  }
351 
353 
354  if (m_Window && app && app->get_GuiWanted()) {
355  m_Window -> show();
356  }
357  }
358  }
359 }
360 
362 {
363 #ifndef QT_NO_DEBUG
364  printf("Deleting experiment\n");
365 #endif
366 
368 
369  if (app && qcepDebug(DEBUG_APP)) {
370  app->printMessage("QxrdExperiment::~QxrdExperiment");
371  }
372 
374  printf("QxrdExperiment::~QxrdExperiment(%p)\n", this);
375  }
376 
377  m_SettingsSaver->performSave();
378 
379  closeScanFile();
380  closeLogFile();
381 }
382 
384 {
386 
387  if (app) {
388  app->splashMessage(msg);
389  }
390 }
391 
392 void QxrdExperiment::criticalMessage(QString msg, QDateTime ts) const
393 {
395  QxrdWindowPtr win(m_Window);
396 
397  if (win) {
398  win->displayCriticalMessage(msg);
399  } else if (app) {
400  app->criticalMessage(msg);
401  } else {
402  printf("%s\n", qPrintable(msg));
403  }
404 }
405 
406 void QxrdExperiment::statusMessage(QString msg, QDateTime ts) const
407 {
409  QxrdWindowPtr win(m_Window);
410 
411  if (win) {
412  win->displayStatusMessage(msg);
413  } else if (app) {
414  app->statusMessage(msg);
415  } else {
416  printf("%s\n", qPrintable(msg));
417  }
418 }
419 
420 void QxrdExperiment::printMessage(QString msg, QDateTime ts) const
421 {
423  } else {
424  QString message = ts.toString("yyyy.MM.dd : hh:mm:ss.zzz ")+
425  QThread::currentThread()->objectName()+": "+
426  msg.trimmed();
427 
428  message = message.replace("\n", " : ");
429 
430 //#ifndef QT_NO_DEBUG
431 // printf("%s\n", qPrintable(message));
432 //#endif
433 
434  logMessage(message);
435 
436  QxrdWindowPtr win = m_Window;
437 
438  if (win) {
439  win->displayMessage(message);
440 // } else if (m_Application) {
441 // m_Application->printMessage(message);
442  } else {
443 // printf("%s\n", qPrintable(message));
444  }
445  }
446 }
447 
448 void QxrdExperiment::printLine(QString msg)
449 {
450 #ifndef QT_NO_DEBUG
451  printf("%s\n", qPrintable(msg));
452 #endif
453 
454  QxrdWindowPtr win = m_Window;
455 
456  if (win) {
457  win->displayMessage(msg);
458  }
459 }
460 
462 {
463  return m_Window;
464 }
465 
467 {
468  return m_Acquisition;
469 }
470 
472 {
473  return m_FileSaver;
474 }
475 
477 {
478  return m_Server;
479 }
480 
482 {
483  return m_ServerThread;
484 }
485 
487 {
488  return m_SimpleServer;
489 }
490 
492 {
493  return m_SimpleServerThread;
494 }
495 
497 {
498  return m_DataProcessor;
499 }
500 
502 {
503  return m_CalibrantLibrary;
504 }
505 
507 {
509 }
510 
512 {
513  return m_CalibrantDSpacings;
514 }
515 
517 {
519 }
520 
522 {
523  return m_DatasetModel;
524 }
525 
527 {
529 
530  if (dp) {
531  return dp->centerFinder();
532  } else {
533  return QxrdCenterFinderWPtr();
534  }
535 }
536 
538 {
540 
541  if (dp) {
542  return dp->integrator();
543  } else {
544  return QxrdIntegratorWPtr();
545  }
546 }
547 
549 {
550  return m_ScriptEngine;
551 }
552 
554 {
556 
557  if (eng) {
558  eng->evaluateAppCommand(cmd);
559  }
560 }
561 
562 QString QxrdExperiment::systemCommand(QString cmd)
563 {
564  QProcess process;
565 
566  process.start(cmd);
567  process.waitForReadyRead();
568 
569  return process.readAllStandardOutput();
570 }
571 
572 void QxrdExperiment::newLogFile(QString path)
573 {
574  {
575  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
576 
577  if (m_LogFile) {
578  fclose(m_LogFile);
579  m_LogFile = NULL;
580  }
581  }
582 
583  set_LogFileName(path);
584 
585  openLogFile();
586 }
587 
589 {
590  {
591  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
592 
593  if (m_LogFile) {
594  fclose(m_LogFile);
595  m_LogFile = NULL;
596  }
597  }
598 
599  openLogFile();
600 }
601 
603 {
604  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
605 
606  if (m_LogFile == NULL) {
607  m_LogFile = fopen(qPrintable(logFilePath()), "a");
608 
609  if (m_LogFile) {
610  fprintf(m_LogFile, "#F %s\n", qPrintable(get_LogFileName()));
611  fprintf(m_LogFile, "#E %d\n", QDateTime::currentDateTime().toTime_t());
612  fprintf(m_LogFile, "#D %s\n", qPrintable(QDateTime::currentDateTime().toString("ddd MMM d hh:mm:ss yyyy")));
613  fflush(m_LogFile);
614  }
615  }
616 }
617 
619 {
620  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
621 
622  FILE *logFile = fopen(qPrintable(logFilePath()), "r");
623 
624  if (logFile) {
625  fseek(logFile, -10000, SEEK_END);
626 
627  char buff[10001];
628  fgets(buff, 10000, logFile);
629 
630  while (!feof(logFile)) {
631  fgets(buff, 10000, logFile);
632 
633  m_Window->initialLogEntry(buff);
634  }
635 
636  fclose(logFile);
637  }
638 }
639 
641 {
642  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
643 
644  return m_LogFile;
645 }
646 
647 void QxrdExperiment::logMessage(QString msg) const
648 {
649  openLogFile();
650 
651  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
652 
653  if (m_LogFile) {
654  fprintf(m_LogFile, "#CX %s\n", qPrintable(msg));
655  fflush(m_LogFile);
656  }
657 }
658 
660 {
661  QcepMutexLocker lock(__FILE__, __LINE__, &m_LogFileMutex);
662 
663  if (m_LogFile) {
664  fprintf(m_LogFile, "#CX %s ------- shutdown --------\n",
665  qPrintable(QDateTime::currentDateTime().toString("yyyy.MM.dd : hh:mm:ss.zzz ")));
666 
667  fclose(m_LogFile);
668  m_LogFile = NULL;
669  }
670 }
671 
672 void QxrdExperiment::newScanFile(QString path)
673 {
674  {
675  QcepMutexLocker lock(__FILE__, __LINE__, &m_ScanFileMutex);
676 
677  if (m_ScanFile) {
678  fclose(m_ScanFile);
679  m_ScanFile = NULL;
680  }
681  }
682 
683  set_ScanFileName(path);
684 
685  openScanFile();
686 }
687 
689 {
690  QcepMutexLocker lock(__FILE__, __LINE__, &m_ScanFileMutex);
691 
692  if (m_ScanFile == NULL) {
693  m_ScanFile = fopen(qPrintable(scanFilePath()), "a");
694 
695  if (m_ScanFile) {
696  fprintf(m_ScanFile, "#F %s\n", qPrintable(get_LogFileName()));
697  fprintf(m_ScanFile, "#E %d\n", QDateTime::currentDateTime().toTime_t());
698  fprintf(m_ScanFile, "#D %s\n", qPrintable(QDateTime::currentDateTime().toString("ddd MMM d hh:mm:ss yyyy")));
699  fflush(m_ScanFile);
700  }
701  }
702 }
703 
705 {
706  return m_ScanFile;
707 }
708 
710 {
711  QcepMutexLocker lock(__FILE__, __LINE__, &m_ScanFileMutex);
712 
713  if (m_ScanFile) {
714  fclose(m_ScanFile);
715  m_ScanFile = NULL;
716  }
717 }
718 
720 {
721  QcepMutexLocker lock(__FILE__, __LINE__, &m_ExperimentFileMutex);
722 
723  QString docPath = experimentFilePath();
724 
725  if (docPath.length()>0) {
726  QSettings settings(docPath, QSettings::IniFormat);
727 
728  readSettings(&settings, "experiment");
729  } else {
730  QxrdExperimentSettings settings;
731 
732  readSettings(&settings, "experiment");
733  }
734 }
735 
736 void QxrdExperiment::readSettings(QSettings *settings, QString section)
737 {
738  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
739 
740  if (settings) {
741  QcepExperiment::readSettings(settings, section);
742 
745  QxrdServerPtr srv(m_Server);
747 
748  m_WindowSettings -> readSettings(settings, "window");
749 
750  if (acq) {
751  acq -> readSettings(settings, "acquisition");
752  }
753 
754  if (settings->contains("experiment/detectorType")) {
755  int detType = settings->value("experiment/detectorType", -1).toInt();
756 
758  if (acq) {
759  if (acq->get_DetectorCount() == 0) {
760  acq->appendDetector(detType);
761  }
762  }
763  }
764  }
765 
766  if (proc) {
767  proc -> readSettings(settings, "processor");
768  }
769 
770  if (m_CalibrantLibrary) {
771  m_CalibrantLibrary->readSettings(settings, "calibrantLibrary");
772  }
773 
774  if (srv) {
775  srv -> readSettings(settings, "specserver");
776  }
777 
778  if (ssrv) {
779  ssrv -> readSettings(settings, "simpleserver");
780  }
781  }
782 }
783 
785 {
786  QcepMutexLocker lock(__FILE__, __LINE__, &m_ExperimentFileMutex);
787 
788  QString docPath = experimentFilePath();
789 
790  if (docPath.length()>0) {
791  QFile::remove(docPath+".new");
792 
793  {
794  QSettings settings(docPath+".new", QSettings::IniFormat);
795 
796  writeSettings(&settings, "experiment");
797  }
798 
799  QFile::remove(docPath+".bak");
800  QFile::rename(docPath, docPath+".bak");
801  QFile::rename(docPath+".new", docPath);
802  } else {
803  QxrdExperimentSettings settings;
804 
805  writeSettings(&settings, "experiment");
806  }
807 }
808 
809 void QxrdExperiment::writeSettings(QSettings *settings, QString section)
810 {
811  if (settings) {
812  QcepExperiment::writeSettings(settings, section);
813 
816  QxrdServerPtr srv(m_Server);
818 
819  m_WindowSettings -> writeSettings(settings, "window");
820 
821  if (acq) {
822  acq -> writeSettings(settings, "acquisition");
823  }
824 
825  if (proc) {
826  proc -> writeSettings(settings, "processor");
827  }
828 
829  if (m_CalibrantLibrary) {
830  m_CalibrantLibrary->writeSettings(settings, "calibrantLibrary");
831  }
832 
833  if (srv) {
834  srv -> writeSettings(settings, "specserver");
835  }
836 
837  if (ssrv) {
838  ssrv -> writeSettings(settings, "simpleserver");
839  }
840  }
841 }
842 
843 QString QxrdExperiment::defaultDataDirectory(QString /*path*/) const
844 {
845  return "";
846 }
847 
848 QString QxrdExperiment::defaultLogName(QString path) const
849 {
850  return defaultExperimentName(path)+".log";
851 }
852 
853 QString QxrdExperiment::defaultScanName(QString path) const
854 {
855  return defaultExperimentName(path)+".scans";
856 }
857 
859 {
860  QDir dir(get_ExperimentDirectory());
861 
862  return dir.filePath(get_ExperimentFileName());
863 }
864 
866 {
867  set_ExperimentDirectory(defaultExperimentDirectory(path));
868  set_ExperimentFileName(defaultExperimentFileName(path));
869  set_ExperimentName(defaultExperimentName(path));
870  set_LogFileName(defaultLogName(path));
871  set_ScanFileName(defaultScanName(path));
872 
873  QxrdWindowPtr win = m_Window;
874 
875  if (win) {
876  win -> updateTitle();
877  }
878 
879  if (qcepDebug(DEBUG_PREFS)) {
880  printMessage(tr("setExperimentFilePath %1").arg(path));
881  printMessage(tr(" experimentDirectory: %1").arg(get_ExperimentDirectory()));
882  printMessage(tr(" experimentFileName: %1").arg(get_ExperimentFileName()));
883  printMessage(tr(" experimentName: %1").arg(get_ExperimentName()));
884  printMessage(tr(" logFilePath: %1").arg(get_LogFileName()));
885  printMessage(tr(" scanFilePath: %1").arg(get_ScanFileName()));
886  }
887 
888  newLogFile(get_LogFileName());
889  newScanFile(get_ScanFileName());
890 }
891 
893 {
894  QDir dir(get_ExperimentDirectory());
895 
896  return dir.filePath(get_LogFileName());
897 }
898 
900 {
901  QDir dir(get_ExperimentDirectory());
902 
903  return dir.filePath(get_ScanFileName());
904 }
905 
907 {
908  writeSettings();
909 }
910 
912 {
913  QxrdExperimentSettings settings(path);
914 
915  setExperimentFilePath(path);
916 
917  writeSettings(&settings, "experiment");
918 }
919 
921 {
922  printMessage(tr("Save experiment copy as %1").arg(path));
923 
924  QxrdExperimentSettings settings(path);
925 
926  writeSettings(&settings, "experiment");
927 
928 // QxrdExperiment *exp = new QxrdExperiment(path, m_Application, &settings);
929 
930 // exp -> setExperimentFilePath(path);
931 
932 // exp -> writeSettings(&settings);
933 
934 // delete exp;
935 }
936 
938 {
939  int completed = get_WorkCompleted();
940  int target = get_WorkTarget();
941 
942  if (target > 0) {
943  set_CompletionPercentage(100.0*completed/target);
944  } else {
945  set_CompletionPercentage(0);
946  }
947 }
948 
950 {
951  prop_WorkCompleted()->incValue(amt);
952 }
953 
955 {
956  prop_WorkTarget()->incValue(amt);
957 }
958 
960 {
961  prop_WorkCompleted()->incValue(-amt);
962  prop_WorkTarget()->incValue(-amt);
963 }
964 
966 {
967  printf("About to dump\n");
968  dumpObjectInfo();
969  dumpObjectTree();
970  printf("Dumped\n");
971 }
972 
973 QColor QxrdExperiment::pickColor(QColor start)
974 {
975  QColor res = QColorDialog::getColor(start);
976 
977  return res;
978 }
979 
980 void QxrdExperiment::evaluateScriptFiles(QStringList files)
981 {
982  foreach(QString file, files) {
983  evaluateScriptFile(file);
984  }
985 }
986 
988 {
990 
991  if (eng) {
992  printMessage(tr("Loading script %1").arg(path));
993 
994  eng->loadScript(path);
995  }
996 }
997 
998 //void QxrdExperiment::openAcquisitionWindow()
999 //{
1000 // GUI_THREAD_CHECK;
1001 
1002 // if (m_AcquisitionWindow == NULL) {
1003 // m_AcquisitionWindow = QxrdDetectorControlWindowPtr(
1004 // new QxrdDetectorControlWindow(acquisition(), NULL));
1005 // }
1006 
1007 // m_AcquisitionWindow->show();
1008 //}
QxrdCenterFinderWPtr centerFinder() const
QSharedPointer< QxrdWindow > QxrdWindowPtr
Definition: qxrdwindow-ptr.h:6
QMutex m_ScanFileMutex
void commenceWork(int amt)
QSharedPointer< QxrdServer > QxrdServerPtr
Definition: qxrdserver-ptr.h:6
QxrdCalibrantLibraryWPtr calibrantLibrary() const
QWeakPointer< QxrdDataProcessor > QxrdDataProcessorWPtr
QWeakPointer< QxrdSimpleServerThread > QxrdSimpleServerThreadWPtr
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QScriptEngineDebugger * m_ScriptEngineDebugger
QString defaultScanName(QString path) const
QcepSettingsSaverPtr m_SettingsSaver
void statusMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void executeCommand(QString cmd)
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
void openNewLogFile() const
QSharedPointer< QxrdCalibrantLibraryModel > QxrdCalibrantLibraryModelPtr
virtual void readSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:119
QWeakPointer< QxrdCenterFinder > QxrdCenterFinderWPtr
QxrdFileSaverThreadPtr m_FileSaverThread
QSharedPointer< QxrdWindowSettings > QxrdWindowSettingsPtr
void evaluateSimpleServerCommand(QString cmd)
QSharedPointer< QxrdCalibrantLibrary > QxrdCalibrantLibraryPtr
QSharedPointer< QxrdDataProcessor > QxrdDataProcessorPtr
void finishedCommand(QScriptValue result)
#define STR(s)
Definition: qcepmacros.h:16
#define GUI_THREAD_CHECK
Definition: qcepmacros.h:10
void initialize(QSettings *settings)
QSharedPointer< QxrdScriptEngine > QxrdScriptEnginePtr
QcepDatasetModelPtr m_DatasetModel
void evaluateSpecCommand(QString cmd)
QxrdCalibrantLibraryModelWPtr calibrantLibraryModel() const
void evaluateScriptFiles(QStringList files)
QSharedPointer< QxrdSimpleServer > QxrdSimpleServerPtr
QWeakPointer< QxrdApplication > QxrdApplicationWPtr
QString experimentFilePath() const
QxrdFileSaverWPtr fileSaver() const
void executeCommand(QString cmd)
void executeCommand(QString cmd)
virtual ~QxrdExperiment()
QString scanFilePath() const
QWeakPointer< QxrdCalibrantDSpacings > QxrdCalibrantDSpacingsWPtr
QxrdCalibrantLibraryPtr m_CalibrantLibrary
QSharedPointer< QxrdCalibrantDSpacingsModel > QxrdCalibrantDSpacingsModelPtr
void newScanFile(QString path)
void newLogFile(QString path)
QxrdDataProcessorPtr m_DataProcessor
QSharedPointer< QxrdSimpleServerThread > QxrdSimpleServerThreadPtr
QxrdAcquisitionPtr m_Acquisition
QWeakPointer< QxrdSimpleServer > QxrdSimpleServerWPtr
QxrdServerThreadWPtr specServerThread()
QString defaultExperimentDirectory(QString path) const
QWeakPointer< QxrdCalibrantLibraryModel > QxrdCalibrantLibraryModelWPtr
QxrdAcquisitionWPtr acquisition() const
QString defaultExperimentFileName(QString path) const
QxrdScriptEnginePtr m_ScriptEngine
QString defaultDataDirectory(QString path) const
void printLine(QString msg)
QxrdSimpleServerWPtr simpleServer()
QString defaultLogName(QString path) const
QWeakPointer< QxrdFileSaver > QxrdFileSaverWPtr
QxrdWindowPtr window()
QWeakPointer< QxrdExperimentThread > QxrdExperimentThreadWPtr
QWeakPointer< QxrdCalibrantDSpacingsModel > QxrdCalibrantDSpacingsModelWPtr
QxrdSimpleServerWPtr m_SimpleServer
void saveExperimentCopyAs(QString path)
QSharedPointer< QxrdCalibrantDSpacings > QxrdCalibrantDSpacingsPtr
QString defaultExperimentName(QString path) const
QxrdSimpleServerThreadPtr m_SimpleServerThread
QxrdApplicationWPtr m_Application
QxrdExperimentThreadWPtr experimentThread()
void completeWork(int amt)
QxrdServerWPtr specServer()
QxrdCalibrantDSpacingsPtr m_CalibrantDSpacings
QWeakPointer< QxrdCalibrantLibrary > QxrdCalibrantLibraryWPtr
QxrdIntegratorWPtr integrator() const
QxrdWindowSettingsPtr m_WindowSettings
QcepDatasetModelPtr dataset()
void appResultAvailable(QScriptValue res)
QWeakPointer< QxrdServer > QxrdServerWPtr
Definition: qxrdserver-ptr.h:9
void evaluateAppCommand(QString cmd)
QString logFilePath() const
void finishedCommand(QScriptValue result)
QxrdExperiment(QxrdExperimentThreadWPtr expthrd, QString path, QxrdApplicationWPtr app)
QSharedPointer< QxrdServerThread > QxrdServerThreadPtr
QxrdServerWPtr m_Server
QMutex m_ExperimentFileMutex
void saveExperimentAs(QString path)
QWeakPointer< QxrdIntegrator > QxrdIntegratorWPtr
QxrdCalibrantDSpacingsModelWPtr calibrantDSpacingsModel() const
void logMessage(QString msg) const
virtual void writeSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:114
void updateCompletionPercentage(int, int)
QWeakPointer< QxrdServerThread > QxrdServerThreadWPtr
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
QWeakPointer< QxrdScriptEngine > QxrdScriptEngineWPtr
QxrdServerThreadPtr m_ServerThread
QSharedPointer< QxrdFileSaver > QxrdFileSaverPtr
QString systemCommand(QString cmd)
QSharedPointer< QcepDataset > QcepDatasetPtr
QcepDatasetPtr m_Dataset
void simpleServerResultAvailable(QScriptValue cmd)
void criticalMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QxrdFileSaverThread > QxrdFileSaverThreadPtr
void openLogFile() const
QxrdCalibrantDSpacingsWPtr calibrantDSpacings() const
QxrdScriptEngineWPtr scriptEngine()
void finishedWork(int amt)
QxrdCalibrantDSpacingsModelPtr m_CalibrantDSpacingsModel
void evaluateScriptFile(QString path)
void setExperimentFilePath(QString path)
QxrdDataProcessorWPtr dataProcessor() const
void valueChanged(int val, int index)
QSharedPointer< QxrdApplication > QxrdApplicationPtr
QSharedPointer< QcepDatasetModel > QcepDatasetModelPtr
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void splashMessage(QString msg)
QxrdCalibrantLibraryModelPtr m_CalibrantLibraryModel
void closeLogFile() const
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
QColor pickColor(QColor start=QColor(Qt::white))
QxrdSimpleServerThreadWPtr simpleServerThread()
QxrdWindowPtr m_Window
QxrdFileSaverWPtr m_FileSaver
void specResultAvailable(QScriptValue cmd)
QxrdExperimentThreadWPtr m_ExperimentThread