diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f2af2ba76..144526eeb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.7.2) set(Horace_ROOT ${CMAKE_CURRENT_LIST_DIR}) file(READ "${Horace_ROOT}/VERSION" _version) @@ -28,9 +28,6 @@ set(Horace_DLL_DIRECTORY "${Horace_ROOT}/horace_core/DLL") # This is the directory that contains horace_init.m (used in admin/CMakeLists.txt) set(Horace_CORE "${CMAKE_CURRENT_LIST_DIR}/horace_core") -# Set our options -option(BUILD_TESTS "Build the C++ tests" ON) - # Look for packages early so we can exit if they're not found find_package(Herbert REQUIRED) find_package(OpenMP) @@ -38,14 +35,21 @@ include(PACE_AddMex) include(PACE_FindMatlab) include(horace_FindHDF5) include(PACE_Version) -if(${BUILD_TESTS}) - include(CTest) + +# Make analysis ignore Herbert in case of nesting +# Needs to have found herbert for Herbert_ROOT +set(PACE_MLINT_IGNORE ${PACE_MLINT_IGNORE} "${Herbert_ROOT}/**/*.m") + +include(PACE_CodeAnalysis) +include(CTest) +if(BUILD_TESTING) include(PACE_FindGTest) enable_testing() endif() +include(PACE_Docs) add_subdirectory("_LowLevelCode") -if(${BUILD_TESTS}) +if(BUILD_TESTING) add_subdirectory("_test") endif() add_subdirectory("admin") @@ -54,7 +58,6 @@ add_subdirectory("admin") # Install commands # ============================================================================= include(PACE_CPackConfig) - if(WIN32) # Don't package external Linux libraries on Windows set(EXTERNAL_IGNORE_PATTERN "*/external/glnxa64") @@ -72,7 +75,7 @@ install( DESTINATION "." ) install( - DIRECTORY "${Herbert_ROOT}/" + DIRECTORY "${Herbert_CORE}/" DESTINATION "Herbert" USE_SOURCE_PERMISSIONS PATTERN "*.m~" EXCLUDE diff --git a/_LowLevelCode/cpp/CMakeLists.txt b/_LowLevelCode/cpp/CMakeLists.txt index d9e91f60de..bd7d393728 100644 --- a/_LowLevelCode/cpp/CMakeLists.txt +++ b/_LowLevelCode/cpp/CMakeLists.txt @@ -17,6 +17,6 @@ foreach(_mex_func ${MEX_FUNCTIONS}) add_subdirectory("${_mex_func}") endforeach(_mex_func) -if(${BUILD_TESTS}) +if(BUILD_TESTING) add_subdirectory(test) endif() diff --git a/_LowLevelCode/cpp/sort_pixels_by_bins/CMakeLists.txt b/_LowLevelCode/cpp/sort_pixels_by_bins/CMakeLists.txt index e986ff92c8..1a99b2e3a9 100644 --- a/_LowLevelCode/cpp/sort_pixels_by_bins/CMakeLists.txt +++ b/_LowLevelCode/cpp/sort_pixels_by_bins/CMakeLists.txt @@ -14,6 +14,7 @@ pace_add_mex( NAME "${MEX_NAME}" SRC "${SRC_FILES}" "${HDR_FILES}" ) +# openmp is currently disabled here but it may be used in a future #if(${OPENMP_FOUND}) # target_compile_options("${MEX_NAME}" PRIVATE ${OpenMP_CXX_FLAGS}) # target_link_options("${MEX_NAME}" PRIVATE ${OpenMP_EXE_LINKER_FLAGS}) diff --git a/_test/performance_test/.gitignore b/_test/performance_test/.gitignore index b6162a2191..f9f1dde9ea 100755 --- a/_test/performance_test/.gitignore +++ b/_test/performance_test/.gitignore @@ -1,4 +1,5 @@ *.nxspe *.csv +*.tmp diff --git a/_test/performance_test/IDaaaSvsISISCOMPUTE_gen_sqw_performance.odp b/_test/performance_test/IDaaaSvsISISCOMPUTE_gen_sqw_performance.odp index 862c3a4095..b7230eb705 100644 Binary files a/_test/performance_test/IDaaaSvsISISCOMPUTE_gen_sqw_performance.odp and b/_test/performance_test/IDaaaSvsISISCOMPUTE_gen_sqw_performance.odp differ diff --git a/_test/performance_test/perf_imgs/Profiling_mpiexec_2021-07-26_12-14-54.png b/_test/performance_test/perf_imgs/Profiling_mpiexec_2021-07-26_12-14-54.png new file mode 100644 index 0000000000..245e6e36f8 Binary files /dev/null and b/_test/performance_test/perf_imgs/Profiling_mpiexec_2021-07-26_12-14-54.png differ diff --git a/_test/performance_test/perf_imgs/Profiling_slurm_slow_io1_2021-07-26_12-14-54.png b/_test/performance_test/perf_imgs/Profiling_slurm_slow_io1_2021-07-26_12-14-54.png new file mode 100644 index 0000000000..3e19624280 Binary files /dev/null and b/_test/performance_test/perf_imgs/Profiling_slurm_slow_io1_2021-07-26_12-14-54.png differ diff --git a/_test/performance_test/perf_imgs/Profiling_slurm_slow_io2_2021-07-26_12-14-54.png b/_test/performance_test/perf_imgs/Profiling_slurm_slow_io2_2021-07-26_12-14-54.png new file mode 100644 index 0000000000..e89c85eeab Binary files /dev/null and b/_test/performance_test/perf_imgs/Profiling_slurm_slow_io2_2021-07-26_12-14-54.png differ diff --git a/_test/performance_test/profile_machine.m b/_test/performance_test/profile_machine.m index a9a6fe3103..b0d998e7ad 100644 --- a/_test/performance_test/profile_machine.m +++ b/_test/performance_test/profile_machine.m @@ -10,7 +10,11 @@ force_perf = false; end -hor_tes = test_SQW_GENCUT_perf(); +%hor_tes = test_SQW_GENCUT_perf(); % build new performance results per +% session +hor_tes = test_SQW_GENCUT_perf(... % Load previous performance result, do not recalculate + fullfile(fileparts(mfilename('fullpath')),'test_SQW_GENCUT_perf_PerfRez.xml')); +% hpcc = hpc_config; conf_2store = hpcc.get_data_to_store; clob = onCleanup(@()set(hpcc,conf_2store)); @@ -22,20 +26,20 @@ hrc.delete_tmp = false; clob1 = onCleanup(@()set(hrc,'delete_tmp',true)); -% get the method used to combine partial sqw files together. Used in -% calculating test performance name -comb_method = hor_tes.combine_method(); - -hor_tes.n_files_to_use=50; -n_workers = [0,1,2,4,6,8,10,12,14,16]; -perf_graph = zeros(numel(n_workers),2); +hor_tes.n_files_to_use=250; +%n_workers = [0,1,2,4,6,8,10,12,14,16,20,32]; +n_workers = [0,1,2,4,8,12,14,16]; % local machine +perf_graph = zeros(numel(n_workers),3); for i=1:numel(n_workers) nwk = num2str(n_workers(i)); - test_name = sprintf('gen_sqw_nwk%s_comb_%s',nwk,comb_method); - per = hor_tes.knownPerformance(test_name); - if isempty(per) || force_perf + hor_tes.build_default_test_names(nwk); + test_names_map = hor_tes.default_test_names; + tn = test_names_map('gen_sqw'); + per1 = hor_tes.known_performance(tn{1}); + per2 = hor_tes.known_performance(tn{2}); + if isempty(per1) || isempty(per2) || force_perf try perf_rez = hor_tes.test_gensqw_performance(n_workers(i),'gen_sqw'); catch ME @@ -44,15 +48,40 @@ getReport(ME) rethrow(ME); end - per = perf_rez.(test_name); + per1 = perf_rez.(tn{1}); + per2 = perf_rez.(tn{2}); end perf_graph(i,1) = n_workers(i); - perf_graph(i,2) = per.time_sec; + perf_graph(i,2) = per1.time_sec/hor_tes.data_size; + perf_graph(i,3) = per2.time_sec/hor_tes.data_size; end +% Process some averages to display +min_gen_time = min(perf_graph(:,2)); +max_gen_time = max(perf_graph(:,2)); +min_comb_time = min(perf_graph(:,3)); +max_comb_time = max(perf_graph(:,3)); + +min_prod_time = round((min_gen_time+min_comb_time)*hor_tes.data_size/60,1); % in minutes +max_prod_time = round((max_gen_time+max_comb_time)*hor_tes.data_size/60,1); % in minutes +tc1 = strrep(tn{1},'_','\_'); +tc2 = strrep(tn{2},'_','\_'); +title_string = sprintf(['Dataset silze~ %dGb, %d input files;\n',... + ' Final DB test codes:\n %s; %s\n',... + 'Production time: min=%.1f(min); max=%.1f(min)'],... + round(hor_tes.data_size),hor_tes.n_files_to_use,... + tc1,tc2,min_prod_time,max_prod_time ); + +%plot results figure; plot(perf_graph(:,1),perf_graph(:,2),'o-'); +ylabel('Processing Time (sec/Gb)') +xlabel('n-workers'); +title(title_string) +hold on +plot(perf_graph(:,1),perf_graph(:,3),'*-'); +legend('gen\_tmp perf','combine perf') buf_val = [-1,0,1024,2048,4*1024,8*1024,16*1024,32*1024,64*1024]; comb_perf = zeros(numel(buf_val),2); @@ -95,7 +124,7 @@ end comb_perf(i,1) = buf; comb_perf(i,2) = per.time_sec; - + end figure plot(comb_perf(:,1),comb_perf(:,2),'o-'); diff --git a/_test/performance_test/test_SQW_GENCUT_perf.m b/_test/performance_test/test_SQW_GENCUT_perf.m index 3b667347e2..16eaf188ad 100644 --- a/_test/performance_test/test_SQW_GENCUT_perf.m +++ b/_test/performance_test/test_SQW_GENCUT_perf.m @@ -5,10 +5,12 @@ % The performance results (in second) are stored in a Matlab binary file % combining results for all hosts where the tests were run % The format of the file is as follows: - % -host_name1->test_name1(nworkers)->test_time(sec) + % -host_name1_testClassName... + % ->test_name1(nworkers)->test_time(sec) % |->test_name2(nworkers)->test_time(sec) % |->test_name3(nworkers)->test_time(sec) - % -host_name2->test_name1(nworkers)->test_time(sec) + % -host_name2_testClassName... + % ->test_name1(nworkers)->test_time(sec) % |->test_name2(nworkers)->test_time(sec) % |->test_name3(nworkers)->test_time(sec) % @@ -31,6 +33,14 @@ % Number of input files to use. Depending on this number the test % would verify small, large or huge datasets n_files_to_use% = 10; + % the byte-size of the sample file, used to estimate the + % performance in Gb/sec + sample_data_size + % The size of generated data (in Gb) + data_size + % The names of the tests, used as the fields of the database + % (test_nameN(nWorkergs) above) + default_test_names end properties @@ -42,8 +52,6 @@ % target file for gen_sqw command and source file for cut commands sqw_file = 'GenSQW_perfTest.sqw' % - tests_availible = {'gen_sqw','small_cut',... - 'big_cut_nopix','big_cut_filebased'} end properties(Access=private) @@ -52,14 +60,22 @@ % % Number of input files to use. Depending on this number the test % would verify small, large or huge datasets - n_files_to_use_ = 10; + n_files_to_use_ = 5; % Template file name: the name of the file used as a template for % others. HACK. Nice version would generate test source files from % some scattering and instrument models. template_file_ = 'MER19566_22.0meV_one2one125.nxspe'; % parameter file par_file = 'one2one_125.par' - + % the byte-size of the sample file, used to estimate the + % performance in MB/sec = n_detectors*nEnerty_transfer_Bins. + % The value is defined by the size of the reference template file + % template_file_ + sample_data_size_ = 20262912; + % Total size of generated data (in mb) + data_size_ + % + default_test_names_ = containers.Map(); end methods %------------------------------------------------------------------ @@ -83,6 +99,10 @@ end obj = obj@TestPerformance(argi{:}); % + % define the list of the tests available to run + obj.tests_available_ = {'gen_sqw','small_cut',... + 'big_cut_nopix','big_cut_filebased'}; + % obj.source_data_dir = pwd(); % locate the test data folder stat = mkdir('test_SQWGEN_performance_rw_test'); @@ -102,6 +122,7 @@ end %------------------------------------------------------------- + function set.n_files_to_use(obj,val) % change number of files to use and modify all related % internal properties which depends on this number @@ -128,8 +149,12 @@ obj.test_source_files_list_ = filelist; fb = 'GenSQW_perfTest'; obj.sqw_file = sprintf('%s_%dFiles.sqw',fb,obj.n_files_to_use_); + + obj.data_size_ = obj.n_files_to_use_*obj.sample_data_size_*(4*9)/ ... %numWords*word_size = bytes + (1024*1024*1024); %Convert to Gb end - function method = combine_method(obj,add_info) + % + function method = combine_method(~,add_info) % method returns name and parameters of a combine method used % during sqw file generation. hpc = hpc_config; @@ -146,15 +171,20 @@ if exist('add_info','var') method = [method,add_info]; end - end %-------------------------------------------------------------------------- function perf_val=combine_performance_test(obj,varargin) - % this method tests tmp file combine operations only. It can be + % Test the speed of tmp file combine operations only. + % + % tmp files should to be available so the method can be % deployed after test_gensqw_performance method has been run % with hor_config class delete_tmp option set to false. In this % case tmp files created by gen_sqw method are kept and this - % method may test combine operations only. + % method will test combine operations only. + % + % if tmp files are not available, the method generates them, + % which may take significant time (not included in the combine + % performance evaluations) % % Usage: % tob.combine_performance_test([n_workers],[addinfo],['-keep_tmp']) @@ -189,7 +219,7 @@ [~,fn] = fileparts(fn); fn = fullfile(fp,[fn,'.tmp']); end - + wk_dir = obj.working_dir; spe_files = obj.test_source_files_list_; tmp_files = cellfun(@(fn)(replace_fext(wk_dir,fn)),spe_files,'UniformOutput',false); @@ -221,12 +251,12 @@ combine_method = obj.combine_method(addinfo); obj.add_to_files_cleanList(obj.sqw_file) - test_name = ['combine_tmp_using_',combine_method]; + test_name = ['combine_tmp_using_',combine_method]; ts = tic(); write_nsqw_to_sqw(tmp_files,obj.sqw_file); % - + perf_val=obj.assertPerformance(ts,... test_name,... 'performance of the tmp-files combine procedure'); @@ -240,6 +270,19 @@ end end + function delete_tmp_files(obj) + function tmp_name = gen_tmp_name(fname) + [fp,fn] = fileparts(fname); + tmp_name = fullfile(fp,[fn,'.tmp']); + end + tmp_files = cellfun(@gen_tmp_name,obj.test_source_files_list_,... + 'UniformOutput',false); + for i=1:numel(tmp_files) + if is_file(tmp_files{i}) + delete(tmp_files{i}); + end + end + end %------------------------------------------------------------------ function perf_res= test_gensqw_performance(obj,varargin) % test performance (time spent on processing) class-defined @@ -264,12 +307,22 @@ n_workers = varargin{1}; end [clob_wk,~,nwk] = check_and_set_workers_(obj,n_workers); - if nargin == 3 && ~isempty(varargin{2}) + if nargin >= 3 && ~isempty(varargin{2}) test_names_to_run = varargin{2}; - tests_to_run = ismember(obj.tests_availible,test_names_to_run); + tests_to_run = ismember(obj.tests_available,test_names_to_run); else tests_to_run = true(1,numel(obj.tests_availible)); end + if nargin>3 + field_names_map = varargin{3}; + if numel(test_field_names) ~= sum(tests_to_run) + error('HORACE:performance_tests:invalid_argument',... + 'number of test field names differs from the numner of tests to run') + end + else + obj.build_default_test_names(nwk); + field_names_map = obj.default_test_names; + end efix= 22.8;%incident energy in meV @@ -286,7 +339,7 @@ nfiles=numel(obj.test_source_files_list_); psi= 0.5*(1:nfiles); %psi=round(psi); - comb_metnod = obj.combine_method(); + % define location of the sqw file to be the same as working % directory fp = fileparts(obj.sqw_file); @@ -296,66 +349,85 @@ end obj.add_to_files_cleanList(obj.sqw_file) - if tests_to_run(1) - ts = tic(); - gen_sqw (obj.test_source_files_list_,'',obj.sqw_file, efix, emode, alatt, angdeg,u, v, psi, omega, dpsi, gl, gs,'replicate'); + if tests_to_run(1) + test_fld_names = field_names_map('gen_sqw'); + % delete exisiting tmp files as gen_sqw keeps existing in + % 'tmp_only' mode + obj.delete_tmp_files(); - perf_res=obj.assertPerformance(ts,sprintf('gen_sqw_nwk%s_comb_%s',nwk,comb_metnod),... + %profile on + % generate + ts = tic(); + [tmp_files,~,~,jd]=gen_sqw (obj.test_source_files_list_,'',... + obj.sqw_file, efix, ... + emode, alatt, angdeg,u, v, psi, omega, dpsi, gl, gs,... + 'replicate','tmp_only'); + perf_res=obj.assertPerformance(ts,test_fld_names{1},... 'whole sqw file generation'); + % combine + ts = tic(); + write_nsqw_to_sqw (tmp_files, obj.sqw_file,'allow_equal_headers',jd); + perf_res=obj.assertPerformance(ts,test_fld_names{2},... + 'calc headers and combine all tmp files'); + %profile off + %profile viewer end if tests_to_run(2) + test_fld_names = field_names_map('small_cut'); % test small 1 dimensional cuts, non-axis aligned ts = tic(); proj1 = struct('u',[1,0,0],'v',[0,1,1]); sqw1 = cut_sqw(obj.sqw_file,proj1,0.01,[-0.1,0.1],[-0.1,0.1],[-5,5]); - obj.assertPerformance(ts,['cutH1D_Small_nwk',nwk,'_comb_',comb_metnod],... + obj.assertPerformance(ts,test_fld_names{1},... 'small memory based 1D cut in non-axis aligned direction 1'); ts = tic(); sqw1 = cut_sqw(obj.sqw_file,proj1,[-0.1,0.1],0.01,[-0.1,0.1],[-5,5]); - obj.assertPerformance(ts,['cutK1D_Small_nwk',nwk,'_comb_',comb_metnod],... + obj.assertPerformance(ts,test_fld_names{2},... 'small memory based 1D cut in non-axis aligned direction 2'); ts = tic(); sqw1 = cut_sqw(obj.sqw_file,proj1,[-0.1,0.1],[-0.1,0.1],0.01,[-5,5]); - obj.assertPerformance(ts,['cutL1D_Small_nwk',nwk,'_comb_',comb_metnod],... + obj.assertPerformance(ts,test_fld_names{3},... 'small memory based 1D cut in non-axis aligned direction 3'); ts = tic(); sqw1 = cut_sqw(obj.sqw_file,proj1,[-0.1,0.1],[-0.1,0.1],[-0.1,0.1],0.2); - perf_res=obj.assertPerformance(ts,['cutE_Small_nwk',nwk,'_comb_',comb_metnod],... + perf_res=obj.assertPerformance(ts,test_fld_names{4},... 'small memory based 1D cut along energy direction (q are not axis aligned)'); end % check nopix performance -- read and integrate the whole file from the HDD hs = head_sqw(obj.sqw_file); urng = hs.urange'; if tests_to_run(3) + test_fld_names = field_names_map('big_cut_nopix'); ts = tic(); proj1 = struct('u',[1,0,0],'v',[0,1,1]); sqw1=cut_sqw(obj.sqw_file,proj1,0.01,urng(2,:),urng(3,:),urng(4,:),'-nopix'); - obj.assertPerformance(ts,['cutH1D_AllInt_nopix_nwk',nwk],... + obj.assertPerformance(ts,test_fld_names{1},... 'large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode'); ts = tic(); sqw1=cut_sqw(obj.sqw_file,proj1,urng(1,:),0.01,urng(3,:),urng(4,:),'-nopix'); - obj.assertPerformance(ts,['cutK1D_AllInt_nopix_nwk',nwk],... + obj.assertPerformance(ts,test_fld_names{2},... 'large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode'); ts = tic(); sqw1=cut_sqw(obj.sqw_file,proj1,urng(1,:),urng(2,:),0.01,urng(4,:),'-nopix'); - obj.assertPerformance(ts,['cutL1D_AllInt_nopix_nwk',nwk],... + obj.assertPerformance(ts, test_fld_names{3},... 'large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode'); ts = tic(); sqw1=cut_sqw(obj.sqw_file,proj1,urng(1,:),urng(2,:),urng(3,:),0.2,'-nopix'); - perf_res=obj.assertPerformance(ts,['cutE_AllInt_nopix_nwk',nwk],... + perf_res=obj.assertPerformance(ts, test_fld_names{4},... 'large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode'); end if tests_to_run(4) + test_fld_names = field_names_map('big_cut_filebased'); % test large 1 dimensional cuts, non-axis aligned, with whole % integration. for big input sqw files this should go to % file-based cuts @@ -366,22 +438,22 @@ ts = tic(); proj1 = struct('u',[1,0,0],'v',[0,1,1]); cut_sqw(obj.sqw_file,proj1,0.01,urng(2,:),urng(3,:),urng(4,:),'cutH1D_AllInt.sqw'); - obj.assertPerformance(ts,['cutH1D_AllInt_filebased_nwk',nwk],... + obj.assertPerformance(ts,test_fld_names{1},... 'large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions'); ts = tic(); cut_sqw(obj.sqw_file,proj1,urng(1,:),0.01,urng(3,:),urng(4,:),'cutK1D_AllInt.sqw'); - obj.assertPerformance(ts,['cutK1D_AllInt_filebased_nwk',nwk],... + obj.assertPerformance(ts,test_fld_names{2},... 'large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions'); ts = tic(); cut_sqw(obj.sqw_file,proj1,urng(1,:),urng(2,:),0.01,urng(4,:),'cutL1D_AllInt.sqw'); - obj.assertPerformance(ts,['cutL1D_AllInt_filebased_nwk',nwk],... + obj.assertPerformance(ts,test_fld_names{3},... 'large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions'); ts = tic(); cut_sqw(obj.sqw_file,proj1,urng(1,:),urng(2,:),urng(3,:),0.2,'cutE_AllInt.sqw'); - perf_res=obj.assertPerformance(ts,['cutE_AllInt_filebased_nwk',nwk],... + perf_res=obj.assertPerformance(ts,test_fld_names{4},... 'large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions'); end @@ -389,9 +461,54 @@ % before the end of the test assertTrue(isa(clob_wk,'onCleanup')) end + function build_default_test_names(obj,nwk) + if isnumeric(nwk) + nwk = num2str(nwk); + end + comb_method = obj.combine_method(); + pc = parallel_config; + cluster = pc.parallel_cluster; + % 1 + tf{1} = sprintf('gen_tmp_nwk_%s_%s',nwk,cluster); + % combine method name includes workers if they are used, but if + % they are not, we still need them to store appropriate + % dependence. + tf{2} = sprintf('comb_tmp_nwk_%s_%s',nwk,comb_method); + + obj.default_test_names_('gen_sqw') = tf; + % 2 + tf{1} = ['cutH1D_Small_nwk',nwk]; + tf{2} = ['cutK1D_Small_nwk',nwk]; + tf{3} = ['cutL1D_Small_nwk',nwk]; + tf{4} = ['cutE_Small_nwk',nwk]; + obj.default_test_names_('small_cut') = tf; + % 3 + tf{1} = ['cutH1D_AllInt_nopix_nwk',nwk]; + tf{2} = ['cutK1D_AllInt_nopix_nwk',nwk]; + tf{3} = ['cutL1D_AllInt_nopix_nwk',nwk]; + tf{4} = ['cutE_AllInt_nopix_nwk',nwk]; + obj.default_test_names_('big_cut_nopix') = tf; + % 4 + tf{1} =sprintf('cutH1D_AllInt_flBsd_nwk%s_comb_%s',nwk,comb_method); + tf{2} =sprintf('cutK1D_AllInt_flBsd_nwk%s_comb_%s',nwk,comb_method); + tf{3} =sprintf('cutL1D_AllInt_flBsd_nwk%s_comb_%s',nwk,comb_method); + tf{4} =sprintf('cutE_AllInt_flBsd_nwk%s_comb_%s',nwk,comb_method); + obj.default_test_names_('big_cut_filebased') = tf; + end + %------------------------------------------------------------------ + function ds = get.data_size(obj) + ds = obj.data_size_; + end + % + function sds = get.sample_data_size(obj) + sds = obj.sample_data_size_; + end + function names_map = get.default_test_names(obj) + names_map = obj.default_test_names_; + end end methods(Access=private) - function [clob,hc,nwkc] = check_and_set_workers_(obj,n_workers) + function [clob,hc,nwkc] = check_and_set_workers_(~,n_workers) % function verifies and sets new number of MPI workers % % returns cleanup object which returns the number of temporary @@ -400,9 +517,9 @@ % workers remains unchanged % hc = hpc_config; - bsp = hc.build_sqw_in_parallel; + bsp = hc.build_sqw_in_parallel; if n_workers == 0 % keep existing number of workers unchanged - clob = onCleanup(@()(0)); + clob = onCleanup(@()(0)); if bsp nwkc = num2str(hc.parallel_workers_number); else @@ -412,7 +529,7 @@ else nwkc = num2str(n_workers); end - + an = hc.parallel_workers_number; if bsp && an > 1 clob = onCleanup(@()set(hc,'build_sqw_in_parallel',bsp,'parallel_workers_number',an)); @@ -423,7 +540,6 @@ hc.build_sqw_in_parallel = true; hc.parallel_workers_number = n_workers; end - - end - end + end %function + end %Methods end diff --git a/_test/performance_test/test_SQW_GENCUT_perf_PerfRez.xml b/_test/performance_test/test_SQW_GENCUT_perf_PerfRez.xml index e43d58e1fd..ea4b134a8b 100644 --- a/_test/performance_test/test_SQW_GENCUT_perf_PerfRez.xml +++ b/_test/performance_test/test_SQW_GENCUT_perf_PerfRez.xml @@ -1,3370 +1,871 @@ - - - - 97.0657560425196 - whole sqw file generation - [2018 6 15 16 40 14.759] - - - 0.810486282035237 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 15 16 40 15.786] - - - 0.785347771414268 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 15 16 40 16.77] - - - 0.783746961440842 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 15 16 40 17.753] - - - 0.67700819707411 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 15 16 40 18.644] - - - 8.55921242135835 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 40 27.774] - - - 8.2038590942892 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 40 35.979] - - - 9.41925395302393 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 40 45.399] - - - 7.57954188030113 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 40 52.979] - - - 52.3608752109858 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 16 41 45.341] - - - 54.0405830987576 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 15 16 42 39.607] - - - 58.3227504398503 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 16 43 38.158] - - - 44.6629634485585 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 15 16 44 23.045] - - - 89.0166295517136 - whole sqw file generation - [2018 6 16 22 30 27.425] - - - 0.646961308406388 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 16 22 30 28.451] - - - 0.710750026652576 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 16 22 30 29.541] - - - 0.734722114618656 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 16 22 30 30.633] - - - 0.646947733802684 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 16 22 30 31.652] - - - 8.19573552169189 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 30 40.609] - - - 8.75523201646434 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 30 49.783] - - - 9.51111097867595 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 30 59.704] - - - 7.77258731284429 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 31 7.851] - - - 50.3433318566813 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 22 31 58.582] - - - 52.709266752882 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 16 22 32 51.706] - - - 61.1199918817248 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 22 33 53.238] - - - 47.063928437338 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 16 22 34 40.763] - - - 127.1933144 - whole sqw file generation - [2021 6 9 17 46 23.608] - - - 1.8220946 - small memory based 1D cut in non-axis aligned direction 1 - [2021 6 9 17 46 26.813] - - - 0.7797652 - small memory based 1D cut in non-axis aligned direction 2 - [2021 6 9 17 46 28.727] - - - 0.8233894 - small memory based 1D cut in non-axis aligned direction 3 - [2021 6 9 17 46 30.72] - - - 0.6371014 - small memory based 1D cut along energy direction (q are not axis aligned) - [2021 6 9 17 46 32.438] - - - 12.2528266 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 17 46 46.366] - - - 13.1130188 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 17 47 0.535] - - - 14.5441637 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 17 47 16.199] - - - 11.6119857 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 17 47 28.902] - - - 49.3741101 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2021 6 9 17 48 19.269] - - - 50.7675323 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2021 6 9 17 49 11.105] - - - 56.396151 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2021 6 9 17 50 8.564] - - - 46.1201896 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2021 6 9 17 50 55.741] - - - - - 543.352669197503 - whole sqw file generation - [2018 6 15 16 53 45.495] - - - 4.19056492203211 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 15 16 53 50.306] - - - 7.99662621434763 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 15 16 53 58.512] - - - 5.2512453871179 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 15 16 54 3.974] - - - 1.01142451891273 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 15 16 54 5.215] - - - 99.9928634004184 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 55 45.92] - - - 76.5263734684702 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 57 2.653] - - - 63.4304851166058 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 58 6.278] - - - 39.6669129960607 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 16 58 46.149] - - - 332.675538828995 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 17 4 19.029] - - - 337.705917136646 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 15 17 9 56.99] - - - 319.958899410862 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 17 15 17.237] - - - 265.150517192401 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 15 17 19 42.646] - - - 151.154215113103 - performance of the tmp-files combine procedure - [2018 6 16 23 16 46.342] - - - 630.50756469623 - whole sqw file generation - [2018 6 16 22 45 31.863] - - - 1.43762966229697 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 16 22 45 33.759] - - - 1.27461059097203 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 16 22 45 35.4] - - - 1.0207515960092 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 16 22 45 36.792] - - - 0.930726148593572 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 16 22 45 38.102] - - - 51.9917211471798 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 46 30.977] - - - 58.220826024568 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 47 29.615] - - - 55.7735034330504 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 48 25.764] - - - 39.6610742610284 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 22 49 5.819] - - - 346.069898945353 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 22 54 52.276] - - - 412.590868397197 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 16 23 1 45.35] - - - 389.736502374231 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 23 8 15.613] - - - 355.097812634711 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 16 23 14 11.194] - - - 1241.9291665 - whole sqw file generation - [2021 6 9 18 12 4.106] - - - 1.1134285 - small memory based 1D cut in non-axis aligned direction 1 - [2021 6 9 18 12 6.356] - - - 1.5154268 - small memory based 1D cut in non-axis aligned direction 2 - [2021 6 9 18 12 8.898] - - - 1.2263659 - small memory based 1D cut in non-axis aligned direction 3 - [2021 6 9 18 12 11.219] - - - 0.8181987 - small memory based 1D cut along energy direction (q are not axis aligned) - [2021 6 9 18 12 13.042] - - - 78.3471429 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 18 13 32.903] - - - 84.0248101 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 18 14 57.94] - - - 75.7927109 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 18 16 14.78] - - - 60.2764085 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 18 17 16.061] - - - 304.5434295 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2021 6 9 18 22 21.644] - - - 529.7862463 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2021 6 9 18 31 12.491] - - - 473.4029878 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2021 6 9 18 39 7.068] - - - 345.1834229 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2021 6 9 18 44 53.321] - - - 748.0398559 - performance of the tmp-files combine procedure - [2021 6 9 18 57 26.562] - - - - - 2741.79593927318 - whole sqw file generation - [2018 6 15 18 11 2.992] - - - 8.38725000380751 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 15 18 11 11.692] - - - 15.7735034330504 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 15 18 11 27.706] - - - 8.63151407156663 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 15 18 11 36.559] - - - 3.11729020449975 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 15 18 11 39.903] - - - 586.499980465814 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 18 21 28.03] - - - 671.785602709094 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 18 32 40.16] - - - 618.052557885752 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 18 42 58.549] - - - 586.628395223594 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 18 52 45.523] - - - 2214.39961746105 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 19 29 40.31] - - - 2392.12404009342 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 15 20 9 33.494] - - - 2210.29323660269 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 20 46 24.161] - - - 2106.77257142063 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 15 21 21 31.427] - - - 3718.91333741234 - whole sqw file generation - [2018 6 17 0 21 46.098] - - - 6.954681351077 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 17 0 21 53.558] - - - 14.9717277424507 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 17 0 22 8.956] - - - 8.59273738836544 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 17 0 22 17.978] - - - 3.16557308334873 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 17 0 22 21.566] - - - 589.802057446399 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 17 0 32 13.23] - - - 689.460136355239 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 17 0 43 43.324] - - - 607.673902261529 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 17 0 53 51.623] - - - 587.712641531798 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 17 1 3 39.974] - - - 3394.4848414718 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 17 2 0 15.088] - - - 3865.43966750829 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 17 3 4 41.802] - - - 3979.38511283144 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 17 4 11 2.267] - - - 4282.74699885377 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 17 5 22 26.09] - - - 6555.1893427 - whole sqw file generation - [2021 6 9 20 49 47.072] - - - 6.4760179 - small memory based 1D cut in non-axis aligned direction 1 - [2021 6 9 20 49 54.795] - - - 14.6690381 - small memory based 1D cut in non-axis aligned direction 2 - [2021 6 9 20 50 10.478] - - - 7.443178 - small memory based 1D cut in non-axis aligned direction 3 - [2021 6 9 20 50 18.947] - - - 2.1637333 - small memory based 1D cut along energy direction (q are not axis aligned) - [2021 6 9 20 50 22.143] - - - 699.7694373 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 21 2 3.892] - - - 734.7275244 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 21 14 19.891] - - - 727.1672901 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 21 26 28.261] - - - 718.5394986 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 21 38 28.017] - - - 5456.5679079 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2021 6 9 23 9 25.794] - - - 5370.8613508 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2021 6 10 0 38 57.969] - - - 5147.396207 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2021 6 10 2 4 46.516] - - - 2801.2644796 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2021 6 10 2 51 28.985] - - - - - - 106.825340540455 - whole sqw file generation - [2018 6 15 23 2 59.268] - - - 0.892788111030988 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 15 23 3 0.447] - - - 0.838905542610019 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 15 23 3 1.521] - - - 0.838375470889759 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 15 23 3 2.604] - - - 0.825990134905074 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 15 23 3 3.709] - - - 7.96009397598818 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 3 12.278] - - - 7.88791184851007 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 3 20.378] - - - 8.95912355736727 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 3 29.55] - - - 7.23340272935617 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 3 37.009] - - - 45.8472459777787 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 23 4 23.082] - - - 48.8625564753177 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 15 23 5 12.178] - - - 54.1320308997711 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 23 6 6.549] - - - 46.0814966232346 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 15 23 6 52.894] - - - 609.636678049469 - whole sqw file generation - [2018 6 18 9 52 22.137] - - - 1.10387518516091 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 18 9 52 23.833] - - - 0.921719564579687 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 18 9 52 25.209] - - - 0.926074032577725 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 18 9 52 26.567] - - - 0.771326861227157 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 18 9 52 27.789] - - - 8.96616182384402 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 9 52 37.741] - - - 9.61852416908526 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 9 52 47.362] - - - 10.8961042873896 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 9 52 58.676] - - - 8.60358713869206 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 9 53 7.676] - - - 57.1271751646997 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 9 54 5.251] - - - 58.5895168964086 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 18 9 55 4.365] - - - 69.1253766952528 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 9 56 14.006] - - - 54.5607195334574 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 18 9 57 9.082] - - - 159.573499526213 - whole sqw file generation - [2018 6 18 18 48 16.654] - - - 0.945719795016862 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 18 18 48 20.142] - - - 0.828471638679807 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 18 18 48 21.417] - - - 0.876284041629668 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 18 18 48 22.294] - - - 0.674374723955467 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 18 18 48 23.409] - - - 8.69158798362837 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 18 48 33.417] - - - 9.46888204199121 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 18 48 43.348] - - - 10.847997216213 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 18 48 54.642] - - - 8.48155277574159 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 18 49 3.602] - - - 58.9908762108712 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 18 50 3.045] - - - 59.5022136536675 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 18 18 51 3.041] - - - 75.2509305225295 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 18 52 18.817] - - - 52.6457180733598 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 18 18 53 11.953] - - - - - 507.112771847994 - whole sqw file generation - [2018 6 15 23 15 40.34] - - - 2.57866085541193 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 15 23 15 43.223] - - - 6.39414259161037 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 15 23 15 49.88] - - - 2.83371607094022 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 15 23 15 52.965] - - - 0.911370750238549 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 15 23 15 54.136] - - - 68.2791666914983 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 17 3.133] - - - 62.0049841971748 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 18 5.388] - - - 55.5259178915263 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 19 1.181] - - - 39.1203186654774 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 15 23 19 40.538] - - - 318.609362635936 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 23 24 59.391] - - - 329.834131586249 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 15 23 30 29.481] - - - 320.247994103987 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 15 23 35 50.227] - - - 268.77405403222 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 15 23 40 19.316] - - - 152.038766088389 - performance of the tmp-files combine procedure - [2018 6 18 20 12 7.225] - - - 534.093795876366 - whole sqw file generation - [2018 6 16 7 14 53.489] - - - 2.68005519897389 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 16 7 14 56.783] - - - 1.33960380698105 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 16 7 14 58.433] - - - 1.07208280110954 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 16 7 14 59.784] - - - 1.02806632087847 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 16 7 15 1.102] - - - 52.0540351999407 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 7 15 53.928] - - - 57.5314738774962 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 7 16 51.742] - - - 52.8302909666641 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 7 17 44.852] - - - 38.6870424779148 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 7 18 23.837] - - - 314.039364695303 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 7 23 38.166] - - - 411.872355683753 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 16 7 30 30.43] - - - 392.453197746219 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 7 37 3.497] - - - 355.790856411815 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 16 7 42 59.682] - - - 1282.8312034449 - whole sqw file generation - [2018 6 18 19 14 53.839] - - - 3.09183418058726 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 18 19 14 57.874] - - - 8.7711437696211 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 18 19 15 7.111] - - - 5.05865751804595 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 18 19 15 12.169] - - - 0.978569342717689 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 18 19 15 13.148] - - - 96.5880150817158 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 19 16 50.214] - - - 70.6839358801939 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 19 18 1.314] - - - 63.205404943672 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 19 19 4.521] - - - 45.728296691836 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 19 19 50.252] - - - 729.425723741585 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 19 32 0.113] - - - 847.376631352832 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 18 19 46 7.927] - - - 730.013663997436 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 19 58 18.551] - - - 674.820062337229 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 18 20 9 34.084] - - - 1119.08307690576 - whole sqw file generation - [2018 6 18 10 29 32.342] - - - - - 2635.70510994436 - whole sqw file generation - [2018 6 16 0 29 43.824] - - - 9.14222244736199 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 16 0 29 53.357] - - - 15.3562595146384 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 16 0 30 8.967] - - - 8.76857121667518 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 16 0 30 17.991] - - - 3.43374004170383 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 16 0 30 21.694] - - - 580.537258976289 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 0 40 3.939] - - - 669.796415708664 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 0 51 14.128] - - - 611.987990117688 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 1 1 26.481] - - - 617.811979488443 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 1 11 44.667] - - - 2234.00085685547 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 1 48 59.078] - - - 2361.73847830679 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 16 2 28 21.343] - - - 2232.70030751444 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 3 5 34.513] - - - 2216.28515176738 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 16 3 42 31.857] - - - 2771.87275994207 - whole sqw file generation - [2018 6 16 8 34 43.195] - - - 7.49114174336318 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 16 8 34 57.336] - - - 15.5117413700285 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 16 8 35 13.144] - - - 8.62234889645094 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 16 8 35 22.089] - - - 3.11011619198595 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 16 8 35 25.523] - - - 580.464226615096 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 8 45 7.728] - - - 665.947230217995 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 8 56 14.146] - - - 609.445600603375 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 9 6 24.001] - - - 587.396327771719 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 16 9 16 11.841] - - - 2174.62291009043 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 9 52 26.927] - - - 2377.4670163617 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 16 10 32 4.843] - - - 2235.61382371424 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 16 11 9 21.248] - - - 2149.21909575923 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 16 11 45 10.943] - - - 6045.00803782083 - whole sqw file generation - [2018 6 18 21 55 53.396] - - - 7.58296930219253 - small memory based 1D cut in non-axis aligned direction 1 - [2018 6 18 21 56 1.526] - - - 14.7180376023144 - small memory based 1D cut in non-axis aligned direction 2 - [2018 6 18 21 56 16.244] - - - 8.24904696349359 - small memory based 1D cut in non-axis aligned direction 3 - [2018 6 18 21 56 24.494] - - - 3.20822945450621 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 6 18 21 56 27.702] - - - 563.592097726552 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 22 5 52.754] - - - 669.141198392502 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 22 17 1.906] - - - 609.693090460497 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 22 27 11.608] - - - 586.887226496567 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 6 18 22 36 58.504] - - - 4434.32813591555 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 18 23 50 52.932] - - - 4598.55505395739 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 6 19 1 7 32.697] - - - 4544.96023402617 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 6 19 2 23 18.887] - - - 4439.77941302089 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 6 19 3 37 19.92] - - - - - - 352.827548 - whole sqw file generation - [2018 6 21 10 27 1.208812] - - - 283.547536 - whole sqw file generation - [2018 6 21 11 25 55.072464] - - - 254.934048 - whole sqw file generation - [2018 6 21 12 11 6.301359] - - - 260.923057 - whole sqw file generation - [2018 6 21 13 5 39.799325] - - - 266.170116 - whole sqw file generation - [2018 6 21 14 2 6.101395] - - - 265.239976 - whole sqw file generation - [2018 6 21 15 52 24.178905] - - - 440.452671 - whole sqw file generation - [2018 6 21 16 30 22.787302] - - - 245.213099 - whole sqw file generation - [2018 6 21 17 50 21.724114] - - - 228.247387 - whole sqw file generation - [2018 6 21 18 3 27.390375] - - - - - - 1939.337711 - whole sqw file generation - [2018 9 20 15 39 13.210396] - - - 557.848706 - whole sqw file generation - [2018 9 20 15 50 36.905163] - - - 288.076396 - whole sqw file generation - [2018 9 20 16 6 49.459222] - - - 268.338491 - whole sqw file generation - [2018 9 20 16 12 2.721499] - - - 306.781138 - whole sqw file generation - [2018 9 20 16 17 59.608481] - - - - - 176.566433 - whole sqw file generation - [2018 9 26 17 38 24.71337] - - - 0.839655 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 26 17 38 27.307025] - - - 0.485078 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 26 17 38 28.005875] - - - 0.437313 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 26 17 38 28.683096] - - - 0.365594 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 26 17 38 29.317309] - - - 6.699144 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 17 38 36.229787] - - - 6.593909 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 17 38 42.824612] - - - 8.414354 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 17 38 51.495107] - - - 5.555965 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 17 38 57.052155] - - - 653.037222 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 26 17 49 50.094926] - - - 119.540576 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 26 17 51 51.201965] - - - 64.561181 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 26 17 52 57.424553] - - - 81.998733 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 26 17 54 20.339464] - - - - - 503.611363 - whole sqw file generation - [2018 9 26 14 15 42.590341] - - - 5.067794 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 26 14 15 51.404954] - - - 1.205744 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 26 14 15 52.779401] - - - 0.951936 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 26 14 15 53.965473] - - - 0.843857 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 26 14 15 55.066236] - - - 49.420273 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 14 16 45.288871] - - - 45.386182 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 14 17 31.932325] - - - 41.490381 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 14 18 13.619415] - - - 35.142643 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 26 14 18 49.956683] - - - - - - 86.081466 - whole sqw file generation - [2018 9 27 10 38 29.927325] - - - 1.876971 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 27 10 38 33.449436] - - - 0.561829 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 27 10 38 34.227037] - - - 0.478438 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 27 10 38 34.871738] - - - 0.396749 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 27 10 38 35.45258] - - - 5.954419 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 10 38 41.875309] - - - 5.636303 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 10 38 47.692113] - - - 7.666804 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 10 38 55.533447] - - - 5.553034 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 10 39 1.267454] - - - 24.719926 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 27 10 39 26.177616] - - - 51.097204 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 27 10 40 17.459619] - - - 145.534413 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 27 10 42 44.217596] - - - 116.820975 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 27 10 44 42.921485] - - - - - 815.748016 - whole sqw file generation - [2018 9 27 10 58 22.04073] - - - 22.717454 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 27 10 58 52.334846] - - - 5.950516 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 27 10 58 58.679405] - - - 1.817509 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 27 10 59 0.789252] - - - 0.864035 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 27 10 59 1.912469] - - - 491.452011 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 11 7 14.091774] - - - 300.374264 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 11 12 16.644747] - - - 132.605803 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 11 14 31.346145] - - - 28.307777 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 27 11 15 0.889173] - - - 2804.92324 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 27 12 1 46.091114] - - - 3482.937658 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 27 12 59 51.685963] - - - 3375.317688 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 9 27 13 56 14.591097] - - - 3450.573954 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 27 14 53 50.868187] - - - - - - 101.238683 - whole sqw file generation - [2018 9 28 13 7 19.509309] - - - 0.797652 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 28 13 7 21.025775] - - - 0.686096 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 28 13 7 22.363469] - - - 0.750574 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 28 13 7 23.719673] - - - 0.831096 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 28 13 7 25.125957] - - - 28.871411 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 7 54.992317] - - - 27.976064 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 8 23.619671] - - - 33.691722 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 8 57.927743] - - - 26.348071 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 9 24.938411] - - - 75.913509 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 28 13 10 41.533608] - - - 78.053113 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 28 13 12 0.230212] - - - 84.294407 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 9 28 13 13 25.319378] - - - 64.78216 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 28 13 14 30.74741] - - - - - 312.839443 - performance of the tmp-files combine procedure - [2018 7 6 11 8 12.610498] - - - 240.826789 - whole sqw file generation - [2018 9 28 13 18 53.842277] - - - 2.174581 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 28 13 18 56.613789] - - - 12.116586 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 28 13 19 9.331429] - - - 4.798738 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 28 13 19 15.015245] - - - 1.210076 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 28 13 19 16.848965] - - - 183.972872 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 22 22.050255] - - - 174.699505 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 25 17.363336] - - - 130.819881 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 27 28.810441] - - - 111.35266 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 13 29 20.811339] - - - 596.356193 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 28 13 39 17.811081] - - - 427.968573 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 28 13 46 26.537612] - - - 389.796031 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 9 28 13 52 57.063978] - - - 360.976703 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 28 13 58 58.685097] - - - 73.141038 - performance of the tmp-files combine procedure - [2018 9 28 14 2 41.664294] - - - - - 1033.637482 - whole sqw file generation - [2018 9 28 14 20 9.254375] - - - 12.927324 - small memory based 1D cut in non-axis aligned direction 1 - [2018 9 28 14 20 23.10014] - - - 38.096308 - small memory based 1D cut in non-axis aligned direction 2 - [2018 9 28 14 21 1.860401] - - - 14.444515 - small memory based 1D cut in non-axis aligned direction 3 - [2018 9 28 14 21 16.984153] - - - 4.521745 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 9 28 14 21 22.165832] - - - 1322.279897 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 14 43 26.806801] - - - 1387.531131 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 15 6 35.203207] - - - 825.753014 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 15 20 21.913675] - - - 700.341196 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 9 28 15 32 2.937933] - - - 2558.317614 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 9 28 16 14 41.980211] - - - 2867.158164 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 9 28 17 2 30.024324] - - - 2866.464098 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 9 28 17 50 17.762239] - - - 3371.686919 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 9 28 18 47 2.576702] - - - 2212.095796 - whole sqw file generation - [2020 5 4 21 53 30.322488] - - - - - - 63.732373 - whole sqw file generation - [2018 10 2 12 22 12.091598] - - - 1.722002 - small memory based 1D cut in non-axis aligned direction 1 - [2018 10 2 12 22 14.856796] - - - 0.52436 - small memory based 1D cut in non-axis aligned direction 2 - [2018 10 2 12 22 15.87825] - - - 0.49395 - small memory based 1D cut in non-axis aligned direction 3 - [2018 10 2 12 22 16.906561] - - - 0.389828 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 10 2 12 22 17.800875] - - - 5.662735 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 22 24.142412] - - - 5.679151 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 22 30.319546] - - - 6.340497 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 22 37.162529] - - - 5.627124 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 22 43.288976] - - - 27.15797 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 10 2 12 23 10.926636] - - - 28.62873 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 10 2 12 23 40.227915] - - - 178.608188 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 10 2 12 26 39.746845] - - - 26.587102 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 10 2 12 27 7.288886] - - - - - 134.425342 - whole sqw file generation - [2018 10 2 12 29 36.555813] - - - 0.902002 - small memory based 1D cut in non-axis aligned direction 1 - [2018 10 2 12 29 38.379263] - - - 1.042517 - small memory based 1D cut in non-axis aligned direction 2 - [2018 10 2 12 29 40.062852] - - - 0.818659 - small memory based 1D cut in non-axis aligned direction 3 - [2018 10 2 12 29 41.373637] - - - 0.782689 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 10 2 12 29 42.711885] - - - 29.020796 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 30 12.635469] - - - 35.027705 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 30 48.146901] - - - 33.072049 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 31 22.230682] - - - 27.339543 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 12 31 50.065216] - - - 168.273166 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 10 2 12 34 39.22747] - - - 203.101244 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 10 2 12 38 3.271079] - - - 226.516673 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 10 2 12 41 50.737076] - - - 148.260979 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 10 2 12 44 19.914427] - - - 88.506984 - performance of the tmp-files combine procedure - [2018 10 2 12 45 56.364224] - - - - - 846.121918 - whole sqw file generation - [2018 10 2 13 1 20.564572] - - - 10.485779 - small memory based 1D cut in non-axis aligned direction 1 - [2018 10 2 13 1 33.020543] - - - 29.366102 - small memory based 1D cut in non-axis aligned direction 2 - [2018 10 2 13 2 2.972816] - - - 11.429862 - small memory based 1D cut in non-axis aligned direction 3 - [2018 10 2 13 2 14.955207] - - - 2.887145 - small memory based 1D cut along energy direction (q are not axis aligned) - [2018 10 2 13 2 18.358423] - - - 731.963577 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 13 14 32.16017] - - - 694.147223 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 13 26 7.178176] - - - 624.817088 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 13 36 32.902492] - - - 543.059481 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2018 10 2 13 45 36.842951] - - - 1918.744175 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2018 10 2 14 17 36.637245] - - - 1891.14147 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2018 10 2 14 49 8.949297] - - - 1816.039894 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2018 10 2 15 19 26.225944] - - - 5268.178321 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2018 10 2 16 47 16.320757] - - - - - - 79.886261 - whole sqw file generation - [2019 5 22 12 58 57.07777] - - - 0.542699 - small memory based 1D cut in non-axis aligned direction 1 - [2019 5 22 12 58 58.694148] - - - 0.57345 - small memory based 1D cut in non-axis aligned direction 2 - [2019 5 22 12 59 0.088025] - - - 0.584385 - small memory based 1D cut in non-axis aligned direction 3 - [2019 5 22 12 59 1.633284] - - - 0.50883 - small memory based 1D cut along energy direction (q are not axis aligned) - [2019 5 22 12 59 2.876837] - - - 7.329362 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 12 59 11.262793] - - - 7.859275 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 12 59 19.859639] - - - 8.397392 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 12 59 28.968273] - - - 7.016319 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 12 59 36.698962] - - - 39.458084 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2019 5 22 13 0 16.859088] - - - 42.983196 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2019 5 22 13 1 0.578707] - - - 48.979452 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2019 5 22 13 1 50.331256] - - - 36.447188 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2019 5 22 13 2 27.535763] - - - - - 809.215494 - whole sqw file generation - [2019 5 22 13 16 25.067886] - - - 3.134759 - small memory based 1D cut in non-axis aligned direction 1 - [2019 5 22 13 16 31.937996] - - - 10.545194 - small memory based 1D cut in non-axis aligned direction 2 - [2019 5 22 13 16 43.254783] - - - 5.758744 - small memory based 1D cut in non-axis aligned direction 3 - [2019 5 22 13 16 49.774437] - - - 1.074346 - small memory based 1D cut along energy direction (q are not axis aligned) - [2019 5 22 13 16 51.624154] - - - 118.646339 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 13 18 51.527622] - - - 99.225057 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 13 20 31.478133] - - - 56.44501 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 13 21 28.683487] - - - 35.897868 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 13 22 5.335246] - - - 499.422569 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2019 5 22 13 30 25.500682] - - - 587.289264 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2019 5 22 13 40 14.719483] - - - 537.860648 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2019 5 22 13 49 16.214707] - - - 432.896846 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2019 5 22 13 56 30.041509] - - - 425.819959 - performance of the tmp-files combine procedure - [2019 5 22 14 3 44.446144] - - - 803.73952 - whole sqw file generation - [2019 7 16 14 25 8.794333] - - - 819.736159 - whole sqw file generation - [2019 7 16 15 10 39.051073] - - - 693.034723 - whole sqw file generation - [2019 7 16 15 22 16.639388] - - - 667.242863 - whole sqw file generation - [2019 7 16 15 33 26.9294] - - - 730.035408 - whole sqw file generation - [2019 7 16 15 45 42.610362] - - - 713.365642 - whole sqw file generation - [2019 7 16 15 57 39.797344] - - - 1909.992739 - whole sqw file generation - [2019 7 16 16 29 34.287299] - - - 2827.568505 - whole sqw file generation - [2019 7 16 17 17 26.238498] - - - 2305.743257 - whole sqw file generation - [2019 7 16 17 56 11.820611] - - - 376.792128 - performance of the tmp-files combine procedure - [2019 7 17 17 34 4.388177] - - - 408.023812 - performance of the tmp-files combine procedure - [2019 7 17 17 40 53.657224] - - - 653.614958 - performance of the tmp-files combine procedure - [2019 7 17 17 51 49.871471] - - - 776.690457 - performance of the tmp-files combine procedure - [2019 7 17 18 4 48.555905] - - - 779.603034 - performance of the tmp-files combine procedure - [2019 7 17 18 17 51.357289] - - - 720.25436 - performance of the tmp-files combine procedure - [2019 7 17 18 29 52.800274] - - - 697.516411 - performance of the tmp-files combine procedure - [2019 7 17 18 41 32.286073] - - - 597.742346 - performance of the tmp-files combine procedure - [2019 7 17 18 51 31.610347] - - - 521.394432 - performance of the tmp-files combine procedure - [2019 7 17 19 0 17.227559] - - - - - 4509.011461 - whole sqw file generation - [2019 5 22 15 22 35.307652] - - - 11.929544 - small memory based 1D cut in non-axis aligned direction 1 - [2019 5 22 15 22 49.551487] - - - 28.935567 - small memory based 1D cut in non-axis aligned direction 2 - [2019 5 22 15 23 19.241499] - - - 13.950057 - small memory based 1D cut in non-axis aligned direction 3 - [2019 5 22 15 23 33.948068] - - - 4.244292 - small memory based 1D cut along energy direction (q are not axis aligned) - [2019 5 22 15 23 38.947659] - - - 651.214695 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 15 34 32.617095] - - - 704.3381 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 15 46 17.719443] - - - 677.782591 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 15 57 36.309235] - - - 698.143762 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2019 5 22 16 9 15.255445] - - - 3791.94072 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2019 5 22 17 12 28.056935] - - - 3827.057332 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2019 5 22 18 16 17.99922] - - - 3656.176791 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2019 5 22 19 17 16.428407] - - - 4541.914016 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2019 5 22 20 32 59.647295] - - - - - 38.51548 - whole sqw file generation - [2019 7 16 12 50 10.476884] - - - 55.083464 - whole sqw file generation - [2019 7 16 12 52 5.14253] - - - 55.240706 - whole sqw file generation - [2019 7 16 12 53 0.734015] - - - 58.034669 - whole sqw file generation - [2019 7 16 12 51 8.861853] - - - 46.544452 - whole sqw file generation - [2019 7 16 12 53 47.639236] - - - 51.45903 - whole sqw file generation - [2019 7 16 12 54 40.264167] - - - 50.9584 - whole sqw file generation - [2019 7 16 12 55 32.414904] - - - 51.542837 - whole sqw file generation - [2019 7 16 12 56 25.121158] - - - 46.486941 - whole sqw file generation - [2019 7 16 12 57 12.761242] - - - 46.820272 - whole sqw file generation - [2019 7 16 12 58 0.739055] - - - 29.143289 - performance of the tmp-files combine procedure - [2019 7 17 13 41 39.937883] - - - 7.901716 - performance of the tmp-files combine procedure - [2019 7 17 13 43 29.21725] - - - 5.287909 - performance of the tmp-files combine procedure - [2019 7 17 13 44 34.657423] - - - 10.951501 - performance of the tmp-files combine procedure - [2019 7 17 13 45 5.772702] - - - 5.626505 - performance of the tmp-files combine procedure - [2019 7 17 13 45 16.487014] - - - 5.584067 - performance of the tmp-files combine procedure - [2019 7 17 13 45 22.938375] - - - 5.579993 - performance of the tmp-files combine procedure - [2019 7 17 13 45 29.35584] - - - 5.618698 - performance of the tmp-files combine procedure - [2019 7 17 13 45 35.803233] - - - 5.631005 - performance of the tmp-files combine procedure - [2019 7 17 13 45 42.264742] - - - 5.672947 - performance of the tmp-files combine procedure - [2019 7 17 13 45 48.772495] - - - - - - - 68.902094 - whole sqw file generation - [2019 7 17 14 8 52.049367] - - - 115.21413 - whole sqw file generation - [2019 7 17 14 10 51.216806] - - - 80.806949 - whole sqw file generation - [2019 7 17 14 12 13.658608] - - - 80.247251 - whole sqw file generation - [2019 7 17 14 13 36.43051] - - - 77.865051 - whole sqw file generation - [2019 7 17 14 14 55.821486] - - - 88.245225 - whole sqw file generation - [2019 7 17 14 16 26.126182] - - - 66.832439 - whole sqw file generation - [2019 7 17 14 17 34.438206] - - - 66.012501 - whole sqw file generation - [2019 7 17 14 18 41.912985] - - - 67.605412 - whole sqw file generation - [2019 7 17 14 19 51.563044] - - - 70.560972 - whole sqw file generation - [2019 7 17 14 21 3.58414] - - - 43.086904 - performance of the tmp-files combine procedure - [2019 7 17 14 21 51.8585] - - - 21.027099 - performance of the tmp-files combine procedure - [2019 7 17 14 22 14.004524] - - - 13.364578 - performance of the tmp-files combine procedure - [2019 7 17 14 22 28.464727] - - - 10.142027 - performance of the tmp-files combine procedure - [2019 7 17 14 22 39.66727] - - - 18.574754 - performance of the tmp-files combine procedure - [2019 7 17 14 22 59.299474] - - - 17.410379 - performance of the tmp-files combine procedure - [2019 7 17 14 23 18.260121] - - - 16.341324 - performance of the tmp-files combine procedure - [2019 7 17 14 23 36.47872] - - - 14.998322 - performance of the tmp-files combine procedure - [2019 7 17 14 23 53.402666] - - - 13.615178 - performance of the tmp-files combine procedure - [2019 7 17 14 24 8.772248] - - - - - 518.144202 - whole sqw file generation - [2019 7 17 14 50 26.382142] - - - 648.412031 - whole sqw file generation - [2019 7 17 15 1 16.457274] - - - 417.644765 - whole sqw file generation - [2019 7 17 15 8 16.190422] - - - 299.641541 - whole sqw file generation - [2019 7 17 15 13 17.972339] - - - 272.803076 - whole sqw file generation - [2019 7 17 15 17 52.521346] - - - 292.058748 - whole sqw file generation - [2019 7 17 15 22 46.92283] - - - 335.190146 - whole sqw file generation - [2019 7 17 15 28 24.461873] - - - 367.259398 - whole sqw file generation - [2019 7 17 15 34 34.221864] - - - 315.750386 - whole sqw file generation - [2019 7 17 15 40 3.481758] - - - 364.770615 - whole sqw file generation - [2019 7 17 15 46 20.644724] - - - 411.477615 - performance of the tmp-files combine procedure - [2019 7 17 15 53 24.003618] - - - 87.217659 - performance of the tmp-files combine procedure - [2019 7 17 15 54 52.661857] - - - 87.744217 - performance of the tmp-files combine procedure - [2019 7 17 15 56 21.629066] - - - 74.82789 - performance of the tmp-files combine procedure - [2019 7 17 15 57 38.096735] - - - 83.322238 - performance of the tmp-files combine procedure - [2019 7 17 15 59 2.528416] - - - 69.461426 - performance of the tmp-files combine procedure - [2019 7 17 16 0 13.14778] - - - 74.240727 - performance of the tmp-files combine procedure - [2019 7 17 16 1 28.624209] - - - 86.172403 - performance of the tmp-files combine procedure - [2019 7 17 16 2 56.19077] - - - 99.21681 - performance of the tmp-files combine procedure - [2019 7 17 16 4 47.558328] - - - - - - - 501.751482 - whole sqw file generation - [2019 7 16 13 19 13.081771] - - - 509.179147 - whole sqw file generation - [2019 7 16 13 27 45.616389] - - - 469.014134 - whole sqw file generation - [2019 7 16 13 35 37.316824] - - - 474.485073 - whole sqw file generation - [2019 7 17 10 44 48.483544] - - - 507.305083 - whole sqw file generation - [2019 7 17 11 56 55.070455] - - - 416.322954 - whole sqw file generation - [2019 7 17 12 3 56.543698] - - - 386.817107 - whole sqw file generation - [2019 7 16 15 35 23.180427] - - - 420.714787 - whole sqw file generation - [2019 7 17 12 10 58.215468] - - - 249.191538 - performance of the tmp-files combine procedure - [2019 7 17 14 18 18.371943] - - - 136.470683 - performance of the tmp-files combine procedure - [2019 7 17 14 20 36.631869] - - - 143.776852 - performance of the tmp-files combine procedure - [2019 7 17 14 23 2.008306] - - - 153.822676 - performance of the tmp-files combine procedure - [2019 7 17 14 25 37.588726] - - - 138.836327 - performance of the tmp-files combine procedure - [2019 7 17 14 27 58.084239] - - - 146.917486 - performance of the tmp-files combine procedure - [2019 7 17 14 30 26.732337] - - - 161.796551 - performance of the tmp-files combine procedure - [2019 7 17 14 33 9.883987] - - - 167.777174 - performance of the tmp-files combine procedure - [2019 7 17 14 36 44.307218] - - - 149.387816 - performance of the tmp-files combine procedure - [2019 7 17 14 39 37.96956] - - - - - 183.042053073319 - whole sqw file generation - [2019 7 17 12 34 4.619] - - - 99.6553730527919 - whole sqw file generation - [2019 7 17 12 38 17.463] - - - 134.580932673366 - whole sqw file generation - [2019 7 17 12 40 33.26] - - - 131.9240174152 - whole sqw file generation - [2019 7 17 12 42 46.355] - - - 145.823728706938 - whole sqw file generation - [2019 7 17 13 3 33.029] - - - 124.918789875346 - whole sqw file generation - [2019 7 17 13 5 42.088] - - - - - 143.586897213899 - whole sqw file generation - [2019 7 17 13 20 39.051] - - - 199.137535384972 - whole sqw file generation - [2019 7 17 13 23 59.962] - - - 150.749321436257 - whole sqw file generation - [2019 7 17 13 26 32.619] - - - 124.531845978115 - whole sqw file generation - [2019 7 17 13 28 38.578] - - - 110.649172446902 - whole sqw file generation - [2019 7 17 13 30 31.029] - - - 102.469224096545 - whole sqw file generation - [2019 7 17 13 32 14.644] - - - 119.872675352194 - whole sqw file generation - [2019 7 17 13 34 16.707] - - - 129.890760673432 - whole sqw file generation - [2019 7 17 13 36 28.255] - - - 144.928134818812 - whole sqw file generation - [2019 7 17 13 38 58.31] - - - 171.049210190872 - whole sqw file generation - [2019 7 17 13 41 53.906] - - - - - - - 938.857086 - whole sqw file generation - [2019 7 17 18 31 34.404487] - - - 661.988997 - whole sqw file generation - [2019 7 17 18 42 46.121453] - - - 545.466816 - whole sqw file generation - [2019 7 17 18 51 53.490046] - - - 753.080147 - whole sqw file generation - [2019 7 17 15 34 9.188083] - - - 497.329568 - whole sqw file generation - [2019 7 17 19 0 12.074394] - - - 694.534157 - whole sqw file generation - [2019 7 17 19 11 59.512082] - - - 763.167765 - whole sqw file generation - [2019 7 17 19 25 3.525436] - - - 724.539261 - whole sqw file generation - [2019 7 17 19 37 42.698468] - - - 529.363347 - whole sqw file generation - [2019 7 17 16 17 34.752542] - - - 928.19213 - whole sqw file generation - [2019 7 17 16 33 24.45706] - - - 658.869942 - whole sqw file generation - [2019 7 17 16 44 54.551266] - - - 294.377405 - performance of the tmp-files combine procedure - [2019 7 17 16 50 12.258303] - - - 95.707908 - performance of the tmp-files combine procedure - [2019 7 17 16 51 50.666766] - - - 257.895869 - performance of the tmp-files combine procedure - [2019 7 17 16 56 11.088262] - - - 199.941027 - performance of the tmp-files combine procedure - [2019 7 17 16 59 33.509749] - - - 143.617905 - performance of the tmp-files combine procedure - [2019 7 17 17 1 59.710466] - - - 370.344874 - performance of the tmp-files combine procedure - [2019 7 17 17 8 16.892882] - - - 296.807564 - performance of the tmp-files combine procedure - [2019 7 17 17 13 17.669436] - - - 177.122027 - performance of the tmp-files combine procedure - [2019 7 17 17 16 16.442419] - - - 504.278019 - performance of the tmp-files combine procedure - [2019 7 17 17 24 44.871803] - - - 491.367185 - performance of the tmp-files combine procedure - [2019 7 17 17 53 51.144917] - - - - - - 201.18399 - whole sqw file generation - [2020 4 21 10 32 22.362145] - - - 1.874405 - small memory based 1D cut in non-axis aligned direction 1 - [2020 4 21 10 32 25.648808] - - - 0.545979 - small memory based 1D cut in non-axis aligned direction 2 - [2020 4 21 10 32 26.752512] - - - 0.488856 - small memory based 1D cut in non-axis aligned direction 3 - [2020 4 21 10 32 27.760756] - - - 0.415896 - small memory based 1D cut along energy direction (q are not axis aligned) - [2020 4 21 10 32 28.747238] - - - 6.211973 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2020 4 21 10 32 35.772075] - - - - - 689.638454 - whole sqw file generation - [2020 4 21 10 47 14.092582] - - - 5.475905 - small memory based 1D cut in non-axis aligned direction 1 - [2020 4 21 10 47 21.205623] - - - 1.682 - small memory based 1D cut in non-axis aligned direction 2 - [2020 4 21 10 47 26.712057] - - - 0.995129 - small memory based 1D cut in non-axis aligned direction 3 - [2020 4 21 10 47 31.09614] - - - 0.623344 - small memory based 1D cut along energy direction (q are not axis aligned) - [2020 4 21 10 47 32.395005] - - - 76.016984 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2020 4 21 10 48 49.322888] - - - 49.631907 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2020 4 21 10 49 40.060562] - - - 1108.389657 - whole sqw file generation - [2020 4 21 11 16 23.635784] - - - 1522.967328 - whole sqw file generation - [2020 4 21 11 41 47.885794] - - - 2020.562451 - whole sqw file generation - [2020 4 21 12 16 3.3705] - - - 1988.939533 - whole sqw file generation - [2020 4 21 12 49 14.401371] - - - 2236.444416 - whole sqw file generation - [2020 4 21 13 27 7.824067] - - - 680.650687 - performance of the tmp-files combine procedure - [2020 4 21 13 39 6.542542] - - - 740.129803 - performance of the tmp-files combine procedure - [2020 4 21 13 51 31.669244] - - - 707.479143 - performance of the tmp-files combine procedure - [2020 4 21 14 3 21.530788] - - - 634.196556 - performance of the tmp-files combine procedure - [2020 4 21 14 13 57.37213] - - - 621.21472 - performance of the tmp-files combine procedure - [2020 4 21 14 24 22.507575] - - - 772.913334 - performance of the tmp-files combine procedure - [2020 4 21 14 37 27.322522] - - - 490.844113 - performance of the tmp-files combine procedure - [2020 4 21 14 45 54.542516] - - - 435.139937 - performance of the tmp-files combine procedure - [2020 4 21 14 53 10.756114] - - - 522.3928 - performance of the tmp-files combine procedure - [2020 4 21 15 2 3.797033] - - - - - 11823.589859 - whole sqw file generation - [2020 4 23 15 36 17.22208] - - - 12522.032862 - whole sqw file generation - [2020 4 23 19 5 50.317784] - - - 10432.505119 - whole sqw file generation - [2020 4 23 22 0 15.686863] - - - 9016.736609 - whole sqw file generation - [2020 4 24 2 7 45.821591] - - - 9486.36589 - whole sqw file generation - [2020 4 24 4 46 30.947634] - - - - - - - 309.738872 - whole sqw file generation - [2020 4 30 16 23 33.71256] - - - 428.738987 - whole sqw file generation - [2020 4 30 16 30 44.191219] - - - 325.148681 - whole sqw file generation - [2020 4 30 16 36 10.414983] - - - 372.173824 - whole sqw file generation - [2020 4 30 16 42 23.861097] - - - 194.395254 - whole sqw file generation - [2020 4 30 16 45 39.21093] - - - 205.465275 - whole sqw file generation - [2020 4 30 16 49 6.142205] - - - 181.969448 - performance of the tmp-files combine procedure - [2020 4 30 16 52 11.356963] - - - 63.069975 - performance of the tmp-files combine procedure - [2020 4 30 16 53 15.003539] - - - 82.070733 - performance of the tmp-files combine procedure - [2020 4 30 16 54 37.943404] - - - 58.559823 - performance of the tmp-files combine procedure - [2020 4 30 16 55 37.263812] - - - 58.548919 - performance of the tmp-files combine procedure - [2020 4 30 16 56 36.865096] - - - 70.449209 - performance of the tmp-files combine procedure - [2020 4 30 16 57 47.933584] - - - 54.853658 - performance of the tmp-files combine procedure - [2020 4 30 16 58 52.022743] - - - 70.153242 - performance of the tmp-files combine procedure - [2020 4 30 17 0 3.736113] - - - 53.885278 - performance of the tmp-files combine procedure - [2020 4 30 17 0 58.700472] - - - - - 2434.798518 - whole sqw file generation - [2020 4 30 17 49 22.310421] - - - 2707.212954 - whole sqw file generation - [2020 4 30 18 34 31.893914] - - - 2173.28866 - whole sqw file generation - [2020 5 1 17 50 25.682681] - - - 2044.788267 - whole sqw file generation - [2020 5 1 18 24 33.073652] - - - 2030.222352 - whole sqw file generation - [2020 5 1 18 58 25.347656] - - - 1962.374383 - whole sqw file generation - [2020 5 1 19 31 9.877927] - - - 1451.627067 - performance of the tmp-files combine procedure - [2020 5 1 19 55 26.133719] - - - 1015.733692 - performance of the tmp-files combine procedure - [2020 5 1 20 12 22.596077] - - - 1148.428696 - performance of the tmp-files combine procedure - [2020 5 1 20 31 31.726476] - - - 1252.570105 - performance of the tmp-files combine procedure - [2020 5 1 20 52 25.2395] - - - 1075.406059 - performance of the tmp-files combine procedure - [2020 5 1 21 10 21.59124] - - - 1131.057859 - performance of the tmp-files combine procedure - [2020 5 1 21 29 13.567435] - - - 1101.610753 - performance of the tmp-files combine procedure - [2020 5 1 21 47 35.900081] - - - 1084.893654 - performance of the tmp-files combine procedure - [2020 5 1 22 5 41.489906] - - - 1117.490041 - performance of the tmp-files combine procedure - [2020 5 1 22 24 19.687747] - - - - - - - 2579.339004 - whole sqw file generation - [2020 5 5 10 28 39.67682] - - - 2730.222332 - whole sqw file generation - [2020 5 5 11 14 13.212553] - - - 1449.289501 - whole sqw file generation - [2020 5 5 12 29 3.874575] - - - 1223.657781 - whole sqw file generation - [2020 5 5 12 54 41.283676] - - - 1209.930274 - whole sqw file generation - [2020 5 5 13 14 55.015524] - - - 1217.043274 - whole sqw file generation - [2020 5 5 13 35 15.222849] - - - 567.549234 - whole sqw file generation - [2020 5 5 19 21 14.062416] - - - 1257.356419 - whole sqw file generation - [2020 5 5 21 3 22.944883] - - - 1362.166291 - whole sqw file generation - [2020 5 5 21 26 8.944933] - - - 1350.629186 - whole sqw file generation - [2020 5 5 21 48 43.079698] - - - 1166.679237 - performance of the tmp-files combine procedure - [2020 5 5 22 8 14.712728] - - - 361.599821 - performance of the tmp-files combine procedure - [2020 5 5 22 14 18.001292] - - - 303.49041 - performance of the tmp-files combine procedure - [2020 5 5 22 19 23.114394] - - - 284.500051 - performance of the tmp-files combine procedure - [2020 5 5 22 24 9.663979] - - - - - - 95.0863674 - whole sqw file generation - [2021 6 9 15 25 23.367] - - - 0.46045 - small memory based 1D cut in non-axis aligned direction 1 - [2021 6 9 15 25 23.828] - - - 0.4487759 - small memory based 1D cut in non-axis aligned direction 2 - [2021 6 9 15 25 24.277] - - - 0.451143 - small memory based 1D cut in non-axis aligned direction 3 - [2021 6 9 15 25 24.729] - - - 0.3850648 - small memory based 1D cut along energy direction (q are not axis aligned) - [2021 6 9 15 25 25.114] - - - 9.3026359 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 25 35.231] - - - 10.2489083 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 25 45.48] - - - 11.0363675 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 25 56.51] - - - 9.1873687 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 26 5.705] - - - 32.4748459 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2021 6 9 15 26 38.181] - - - 33.5339218 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2021 6 9 15 27 12.266] - - - 41.9314006 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2021 6 9 15 27 54.729] - - - 33.4618468 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2021 6 9 15 28 28.769] - - - - - 516.3904859 - whole sqw file generation - [2021 6 9 15 37 20.077] - - - 0.9014353 - small memory based 1D cut in non-axis aligned direction 1 - [2021 6 9 15 37 21.536] - - - 1.2160399 - small memory based 1D cut in non-axis aligned direction 2 - [2021 6 9 15 37 23.287] - - - 0.8981015 - small memory based 1D cut in non-axis aligned direction 3 - [2021 6 9 15 37 24.171] - - - 0.5611907 - small memory based 1D cut along energy direction (q are not axis aligned) - [2021 6 9 15 37 24.732] - - - 55.5005532 - large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 38 20.59] - - - 66.8795665 - large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 39 27.458] - - - 65.0762518 - large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 40 32.547] - - - 57.5258582 - large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode - [2021 6 9 15 41 30.073] - - - 221.3410977 - large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions - [2021 6 9 15 45 11.416] - - - 256.7977594 - large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions - [2021 6 9 15 49 28.787] - - - 251.3642226 - large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions - [2021 6 9 15 53 40.748] - - - 220.4748572 - large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions - [2021 6 9 15 57 21.978] - - - 104.8600304 - performance of the tmp-files combine procedure - [2021 6 9 15 59 9.159] - - + + + 26.674305 + whole sqw file generation + [2021 7 25 12 34 13.154538] + + + 3.987717 + calc headers and combine all tmp files + [2021 7 25 12 34 17.184901] + + + 58.819965 + whole sqw file generation + [2021 7 25 12 35 23.220157] + + + 3.879291 + calc headers and combine all tmp files + [2021 7 25 12 35 27.142321] + + + 37.174747 + whole sqw file generation + [2021 7 25 12 36 5.574616] + + + 4.068295 + calc headers and combine all tmp files + [2021 7 25 12 36 9.699058] + + + 38.537721 + whole sqw file generation + [2021 7 25 12 36 50.226341] + + + 3.892876 + calc headers and combine all tmp files + [2021 7 25 12 36 54.166089] + + + 42.406685 + whole sqw file generation + [2021 7 25 12 37 39.388689] + + + 3.986377 + calc headers and combine all tmp files + [2021 7 25 12 37 43.42733] + + + 39.194848 + whole sqw file generation + [2021 7 25 12 38 25.188802] + + + 6.582896 + calc headers and combine all tmp files + [2021 7 25 12 38 31.934388] + + + 64.284104 + whole sqw file generation + [2021 7 25 12 43 17.935509] + + + 4.388452 + calc headers and combine all tmp files + [2021 7 25 12 43 22.488739] + + + 53.695343 + whole sqw file generation + [2021 7 25 12 44 17.006729] + + + 3.944302 + calc headers and combine all tmp files + [2021 7 25 12 44 21.00929] + + + + + 132.627215 + whole sqw file generation + [2021 7 25 12 47 46.904728] + + + 27.290313 + calc headers and combine all tmp files + [2021 7 25 12 48 14.249642] + + + 204.245204 + whole sqw file generation + [2021 7 25 12 51 47.960798] + + + 35.395405 + calc headers and combine all tmp files + [2021 7 25 12 52 23.542936] + + + 127.431867 + whole sqw file generation + [2021 7 25 12 54 33.457247] + + + 26.270283 + calc headers and combine all tmp files + [2021 7 25 12 54 59.787993] + + + 87.711388 + whole sqw file generation + [2021 7 25 12 56 37.826397] + + + 25.956011 + calc headers and combine all tmp files + [2021 7 25 12 57 3.846535] + + + 103.854896 + whole sqw file generation + [2021 7 25 12 58 58.513819] + + + 25.74243 + calc headers and combine all tmp files + [2021 7 25 12 59 24.325265] + + + 108.977872 + whole sqw file generation + [2021 7 25 13 1 23.942721] + + + 40.437125 + calc headers and combine all tmp files + [2021 7 25 13 2 4.446712] + + + 107.402779 + whole sqw file generation + [2021 7 25 13 4 0.032524] + + + 29.850019 + calc headers and combine all tmp files + [2021 7 25 13 4 29.95511] + + + 108.306158 + whole sqw file generation + [2021 7 25 13 6 28.562489] + + + 39.526198 + calc headers and combine all tmp files + [2021 7 25 13 7 8.357515] + + + + + 296.283336 + whole sqw file generation + [2021 7 25 13 13 55.340395] + + + 151.228476 + calc headers and combine all tmp files + [2021 7 25 13 16 26.642466] + + + 437.031585 + whole sqw file generation + [2021 7 25 13 23 50.915464] + + + 194.494691 + calc headers and combine all tmp files + [2021 7 25 13 27 5.48643] + + + 293.616184 + whole sqw file generation + [2021 7 25 13 32 3.43655] + + + 200.302487 + calc headers and combine all tmp files + [2021 7 25 13 35 23.816788] + + + 214.846203 + whole sqw file generation + [2021 7 25 13 39 2.832526] + + + 196.019246 + calc headers and combine all tmp files + [2021 7 25 13 42 18.932942] + + + 181.956537 + whole sqw file generation + [2021 7 25 13 45 29.728294] + + + 210.653581 + calc headers and combine all tmp files + [2021 7 25 13 49 0.471152] + + + 225.130048 + whole sqw file generation + [2021 7 25 13 52 49.822784] + + + 214.073774 + calc headers and combine all tmp files + [2021 7 25 13 56 24.035385] + + + 220.232538 + whole sqw file generation + [2021 7 25 14 0 13.226745] + + + 219.319661 + calc headers and combine all tmp files + [2021 7 25 14 3 52.855007] + + + 217.338297 + whole sqw file generation + [2021 7 25 14 7 34.865515] + + + 225.99043 + calc headers and combine all tmp files + [2021 7 25 14 11 21.180649] + + + + + 288.659124 + whole sqw file generation + [2021 7 25 14 20 13.602016] + + + 167.736376 + calc headers and combine all tmp files + [2021 7 25 14 23 1.48769] + + + 835.901454 + whole sqw file generation + [2021 7 25 14 37 1.504316] + + + 1032.089346 + calc headers and combine all tmp files + [2021 7 25 14 54 13.678227] + + + 431.290717 + whole sqw file generation + [2021 7 25 15 1 29.500757] + + + 1111.335398 + calc headers and combine all tmp files + [2021 7 25 15 20 0.922121] + + + 246.870288 + whole sqw file generation + [2021 7 25 15 24 12.616205] + + + 1427.854284 + calc headers and combine all tmp files + [2021 7 25 15 48 0.56181] + + + 167.037372 + whole sqw file generation + [2021 7 26 11 39 17.688852] + + + 223.767823 + calc headers and combine all tmp files + [2021 7 26 12 24 18.896297] + + + 161.422147 + whole sqw file generation + [2021 7 25 16 50 45.761469] + + + 293.605367 + calc headers and combine all tmp files + [2021 7 25 16 55 39.545439] + + + 145.424951 + whole sqw file generation + [2021 7 25 16 58 13.95407] + + + 288.674741 + calc headers and combine all tmp files + [2021 7 25 17 3 4.542429] + + + 158.669128 + whole sqw file generation + [2021 7 25 17 5 55.634605] + + + 290.194862 + calc headers and combine all tmp files + [2021 7 25 17 10 45.941769] + + + 194.349356 + whole sqw file generation + [2021 7 25 19 1 2.576926] + + + 711.688733 + calc headers and combine all tmp files + [2021 7 25 19 12 54.359763] + + + 154.437277 + whole sqw file generation + [2021 7 25 19 15 34.976949] + + + 363.555633 + calc headers and combine all tmp files + [2021 7 25 19 21 39.567795] + + + 123.938349 + whole sqw file generation + [2021 7 25 19 23 55.839964] + + + 275.858159 + calc headers and combine all tmp files + [2021 7 25 19 28 36.686518] + + + 146.2628 + whole sqw file generation + [2021 7 25 19 31 14.073762] + + + 369.942443 + calc headers and combine all tmp files + [2021 7 25 19 37 24.158296] + + + 222.231753 + whole sqw file generation + [2021 7 26 12 20 34.488064] + + + + + 278.041622 + whole sqw file generation + [2021 7 25 19 48 49.306085] + + + 136.520628 + calc headers and combine all tmp files + [2021 7 25 19 51 5.942804] + + + 453.824362 + whole sqw file generation + [2021 7 25 19 58 43.547663] + + + 176.892175 + calc headers and combine all tmp files + [2021 7 25 20 1 40.545101] + + + 307.627289 + whole sqw file generation + [2021 7 25 20 6 52.154021] + + + 186.746809 + calc headers and combine all tmp files + [2021 7 25 20 9 59.020337] + + + 230.68412 + whole sqw file generation + [2021 7 25 20 13 54.036912] + + + 208.293255 + calc headers and combine all tmp files + [2021 7 25 20 17 22.932747] + + + 194.060204 + whole sqw file generation + [2021 7 25 20 20 41.415848] + + + 202.747285 + calc headers and combine all tmp files + [2021 7 25 20 24 4.305779] + + + 212.57112 + whole sqw file generation + [2021 7 25 20 27 41.260303] + + + 213.953108 + calc headers and combine all tmp files + [2021 7 25 20 31 15.380704] + + + 352.997362 + whole sqw file generation + [2021 7 25 20 37 12.712093] + + + 223.999265 + calc headers and combine all tmp files + [2021 7 25 20 40 56.931129] + + + 214.991214 + whole sqw file generation + [2021 7 25 20 44 36.31907] + + + 236.900651 + calc headers and combine all tmp files + [2021 7 25 20 48 33.643044] + + + + + 136.657941 + whole sqw file generation + [2021 7 25 22 13 29.701445] + + + 28.914993 + calc headers and combine all tmp files + [2021 7 25 22 13 58.933956] + + + 421.385456 + whole sqw file generation + [2021 7 25 22 21 10.101923] + + + 2476.472316 + calc headers and combine all tmp files + [2021 7 25 23 2 26.704157] + + + 246.882412 + whole sqw file generation + [2021 7 25 23 6 35.759327] + + + 3780.798377 + calc headers and combine all tmp files + [2021 7 26 0 9 36.683346] + + + 154.260421 + whole sqw file generation + [2021 7 26 0 12 14.014851] + + + 2533.298434 + calc headers and combine all tmp files + [2021 7 26 0 54 27.443707] + + + 122.804593 + whole sqw file generation + [2021 7 26 0 56 30.996919] + + + 1556.509975 + calc headers and combine all tmp files + [2021 7 26 1 22 27.6333] + + + 128.474455 + whole sqw file generation + [2021 7 26 1 24 38.75515] + + + 3079.925727 + calc headers and combine all tmp files + [2021 7 26 2 15 58.807749] + + + 114.783116 + whole sqw file generation + [2021 7 26 2 17 56.221599] + + + 235.859415 + calc headers and combine all tmp files + [2021 7 26 2 21 53.813991] + + + 77.695163 + whole sqw file generation + [2021 7 26 2 23 16.239861] + + + 332.327066 + calc headers and combine all tmp files + [2021 7 26 2 28 48.702562] + + + 84.537279 + whole sqw file generation + [2021 7 26 2 30 17.706461] + + + 352.815489 + calc headers and combine all tmp files + [2021 7 26 2 36 11.624695] + + + 103.912427 + whole sqw file generation + [2021 7 26 2 37 59.924284] + + + 395.870836 + calc headers and combine all tmp files + [2021 7 26 2 44 35.927492] + + + 84.664693 + whole sqw file generation + [2021 7 26 2 46 5.297949] + + + 132.450326 + calc headers and combine all tmp files + [2021 7 26 2 48 18.386122] + + + 139.315205 + whole sqw file generation + [2021 7 26 2 50 42.382584] + + + 141.39722 + calc headers and combine all tmp files + [2021 7 26 2 53 3.938761] + + + + + 134.677607 + whole sqw file generation + [2021 7 26 10 18 47.187536] + + + 26.063455 + calc headers and combine all tmp files + [2021 7 26 10 19 13.494313] + + + 226.053718 + whole sqw file generation + [2021 7 26 10 23 6.94605] + + + 27.33874 + calc headers and combine all tmp files + [2021 7 26 10 23 34.466471] + + + 140.50041 + whole sqw file generation + [2021 7 26 10 26 4.475146] + + + 28.064546 + calc headers and combine all tmp files + [2021 7 26 10 26 32.68203] + + + 97.064347 + whole sqw file generation + [2021 7 26 10 28 19.66475] + + + 27.32874 + calc headers and combine all tmp files + [2021 7 26 10 28 47.21356] + + + 106.307941 + whole sqw file generation + [2021 7 26 11 16 47.203099] + + + 151.368795 + calc headers and combine all tmp files + [2021 7 26 11 27 4.457615] + + + 229.281861 + whole sqw file generation + [2021 7 26 10 34 56.9895] + + + 70.632441 + calc headers and combine all tmp files + [2021 7 26 10 36 7.847831] + + + 109.605037 + whole sqw file generation + [2021 7 26 10 38 1.857939] + + + 53.049404 + calc headers and combine all tmp files + [2021 7 26 10 38 55.677074] + + + 149.445197 + whole sqw file generation + [2021 7 26 10 41 28.921017] + + + 67.929141 + calc headers and combine all tmp files + [2021 7 26 10 42 37.144768] + + + 114.703906 + whole sqw file generation + [2021 7 26 11 24 31.744382] + + + + + 905.328671 + whole sqw file generation + [2021 7 26 17 54 50.903103] + + + 617.561135 + calc headers and combine all tmp files + [2021 7 26 18 5 8.850827] + + + 1863.933346 + whole sqw file generation + [2021 7 26 18 36 14.269513] + + + 1090.379972 + calc headers and combine all tmp files + [2021 7 26 18 54 24.814503] + + + 986.973827 + whole sqw file generation + [2021 7 26 19 10 58.589706] + + + 2766.013745 + calc headers and combine all tmp files + [2021 7 26 19 57 4.77664] + + + 542.247235 + whole sqw file generation + [2021 7 26 20 6 14.686043] + + + 2526.030692 + calc headers and combine all tmp files + [2021 7 26 20 48 20.891103] + + + 427.232672 + whole sqw file generation + [2021 7 26 20 55 39.560849] + + + 702.841314 + calc headers and combine all tmp files + [2021 7 26 21 7 22.566816] + + + 362.961157 + whole sqw file generation + [2021 7 26 21 13 37.432497] + + + 1521.29428 + calc headers and combine all tmp files + [2021 7 26 21 38 58.900465] + + + 325.13376 + whole sqw file generation + [2021 7 26 21 44 41.590095] + + + 729.226486 + calc headers and combine all tmp files + [2021 7 26 21 56 50.997007] + + + 269.246307 + whole sqw file generation + [2021 7 26 22 1 35.446328] + + + 732.761821 + calc headers and combine all tmp files + [2021 7 26 22 13 48.695522] + + + 255.178431 + whole sqw file generation + [2021 7 26 22 18 19.389019] + + + 722.950774 + calc headers and combine all tmp files + [2021 7 26 22 30 22.919663] + + + 221.565851 + whole sqw file generation + [2021 7 26 22 34 20.205125] + + + 772.257564 + calc headers and combine all tmp files + [2021 7 26 22 47 12.722259] + + + 195.246971 + whole sqw file generation + [2021 7 26 22 50 50.186914] + + + 727.574206 + calc headers and combine all tmp files + [2021 7 26 23 3 0.825627] + + + 174.915308 + whole sqw file generation + [2021 7 26 23 6 14.209215] + + + 700.235905 + calc headers and combine all tmp files + [2021 7 26 23 17 55.155426] + + + + + 1098.583177 + whole sqw file generation + [2021 7 27 7 38 57.538381] + + + 693.32559 + calc headers and combine all tmp files + [2021 7 27 7 50 31.217104] + + + 1224.308722 + whole sqw file generation + [2021 7 27 8 11 2.029323] + + + 699.038651 + calc headers and combine all tmp files + [2021 7 27 8 22 41.427392] + + + 780.092925 + whole sqw file generation + [2021 7 27 8 35 49.017905] + + + 714.058752 + calc headers and combine all tmp files + [2021 7 27 8 47 43.403695] + + + 549.98285 + whole sqw file generation + [2021 7 27 8 57 1.463662] + + + 722.015364 + calc headers and combine all tmp files + [2021 7 27 9 9 4.383996] + + + 496.952857 + whole sqw file generation + [2021 7 27 9 17 35.093753] + + + 732.554631 + calc headers and combine all tmp files + [2021 7 27 9 29 48.094025] + + + 491.613575 + whole sqw file generation + [2021 7 27 9 38 7.703963] + + + 725.073454 + calc headers and combine all tmp files + [2021 7 27 9 50 13.461806] + + + 504.862574 + whole sqw file generation + [2021 7 27 9 58 51.195491] + + + 740.380232 + calc headers and combine all tmp files + [2021 7 27 10 11 12.559374] + + + 572.685478 + whole sqw file generation + [2021 7 27 10 20 47.803666] + + + 750.286496 + calc headers and combine all tmp files + [2021 7 27 10 33 18.603157] + + \ No newline at end of file diff --git a/_test/performance_test/test_SQW_GENCUT_perf_PerfRez_to07_2021.xml b/_test/performance_test/test_SQW_GENCUT_perf_PerfRez_to07_2021.xml new file mode 100644 index 0000000000..a9ec04bb01 --- /dev/null +++ b/_test/performance_test/test_SQW_GENCUT_perf_PerfRez_to07_2021.xml @@ -0,0 +1,3508 @@ + + + + + + 97.0657560425196 + whole sqw file generation + [2018 6 15 16 40 14.759] + + + 0.810486282035237 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 15 16 40 15.786] + + + 0.785347771414268 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 15 16 40 16.77] + + + 0.783746961440842 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 15 16 40 17.753] + + + 0.67700819707411 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 15 16 40 18.644] + + + 8.55921242135835 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 40 27.774] + + + 8.2038590942892 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 40 35.979] + + + 9.41925395302393 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 40 45.399] + + + 7.57954188030113 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 40 52.979] + + + 52.3608752109858 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 16 41 45.341] + + + 54.0405830987576 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 15 16 42 39.607] + + + 58.3227504398503 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 16 43 38.158] + + + 44.6629634485585 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 15 16 44 23.045] + + + 89.0166295517136 + whole sqw file generation + [2018 6 16 22 30 27.425] + + + 0.646961308406388 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 16 22 30 28.451] + + + 0.710750026652576 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 16 22 30 29.541] + + + 0.734722114618656 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 16 22 30 30.633] + + + 0.646947733802684 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 16 22 30 31.652] + + + 8.19573552169189 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 30 40.609] + + + 8.75523201646434 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 30 49.783] + + + 9.51111097867595 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 30 59.704] + + + 7.77258731284429 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 31 7.851] + + + 50.3433318566813 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 22 31 58.582] + + + 52.709266752882 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 16 22 32 51.706] + + + 61.1199918817248 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 22 33 53.238] + + + 47.063928437338 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 16 22 34 40.763] + + + 127.1933144 + whole sqw file generation + [2021 6 9 17 46 23.608] + + + 1.8220946 + small memory based 1D cut in non-axis aligned direction 1 + [2021 6 9 17 46 26.813] + + + 0.7797652 + small memory based 1D cut in non-axis aligned direction 2 + [2021 6 9 17 46 28.727] + + + 0.8233894 + small memory based 1D cut in non-axis aligned direction 3 + [2021 6 9 17 46 30.72] + + + 0.6371014 + small memory based 1D cut along energy direction (q are not axis aligned) + [2021 6 9 17 46 32.438] + + + 12.2528266 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 17 46 46.366] + + + 13.1130188 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 17 47 0.535] + + + 14.5441637 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 17 47 16.199] + + + 11.6119857 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 17 47 28.902] + + + 49.3741101 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2021 6 9 17 48 19.269] + + + 50.7675323 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2021 6 9 17 49 11.105] + + + 56.396151 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2021 6 9 17 50 8.564] + + + 46.1201896 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2021 6 9 17 50 55.741] + + + + + 543.352669197503 + whole sqw file generation + [2018 6 15 16 53 45.495] + + + 4.19056492203211 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 15 16 53 50.306] + + + 7.99662621434763 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 15 16 53 58.512] + + + 5.2512453871179 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 15 16 54 3.974] + + + 1.01142451891273 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 15 16 54 5.215] + + + 99.9928634004184 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 55 45.92] + + + 76.5263734684702 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 57 2.653] + + + 63.4304851166058 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 58 6.278] + + + 39.6669129960607 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 16 58 46.149] + + + 332.675538828995 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 17 4 19.029] + + + 337.705917136646 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 15 17 9 56.99] + + + 319.958899410862 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 17 15 17.237] + + + 265.150517192401 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 15 17 19 42.646] + + + 151.154215113103 + performance of the tmp-files combine procedure + [2018 6 16 23 16 46.342] + + + 630.50756469623 + whole sqw file generation + [2018 6 16 22 45 31.863] + + + 1.43762966229697 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 16 22 45 33.759] + + + 1.27461059097203 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 16 22 45 35.4] + + + 1.0207515960092 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 16 22 45 36.792] + + + 0.930726148593572 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 16 22 45 38.102] + + + 51.9917211471798 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 46 30.977] + + + 58.220826024568 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 47 29.615] + + + 55.7735034330504 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 48 25.764] + + + 39.6610742610284 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 22 49 5.819] + + + 346.069898945353 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 22 54 52.276] + + + 412.590868397197 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 16 23 1 45.35] + + + 389.736502374231 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 23 8 15.613] + + + 355.097812634711 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 16 23 14 11.194] + + + 1241.9291665 + whole sqw file generation + [2021 6 9 18 12 4.106] + + + 1.1134285 + small memory based 1D cut in non-axis aligned direction 1 + [2021 6 9 18 12 6.356] + + + 1.5154268 + small memory based 1D cut in non-axis aligned direction 2 + [2021 6 9 18 12 8.898] + + + 1.2263659 + small memory based 1D cut in non-axis aligned direction 3 + [2021 6 9 18 12 11.219] + + + 0.8181987 + small memory based 1D cut along energy direction (q are not axis aligned) + [2021 6 9 18 12 13.042] + + + 78.3471429 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 18 13 32.903] + + + 84.0248101 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 18 14 57.94] + + + 75.7927109 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 18 16 14.78] + + + 60.2764085 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 18 17 16.061] + + + 304.5434295 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2021 6 9 18 22 21.644] + + + 529.7862463 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2021 6 9 18 31 12.491] + + + 473.4029878 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2021 6 9 18 39 7.068] + + + 345.1834229 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2021 6 9 18 44 53.321] + + + 748.0398559 + performance of the tmp-files combine procedure + [2021 6 9 18 57 26.562] + + + + + 2741.79593927318 + whole sqw file generation + [2018 6 15 18 11 2.992] + + + 8.38725000380751 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 15 18 11 11.692] + + + 15.7735034330504 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 15 18 11 27.706] + + + 8.63151407156663 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 15 18 11 36.559] + + + 3.11729020449975 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 15 18 11 39.903] + + + 586.499980465814 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 18 21 28.03] + + + 671.785602709094 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 18 32 40.16] + + + 618.052557885752 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 18 42 58.549] + + + 586.628395223594 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 18 52 45.523] + + + 2214.39961746105 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 19 29 40.31] + + + 2392.12404009342 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 15 20 9 33.494] + + + 2210.29323660269 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 20 46 24.161] + + + 2106.77257142063 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 15 21 21 31.427] + + + 3718.91333741234 + whole sqw file generation + [2018 6 17 0 21 46.098] + + + 6.954681351077 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 17 0 21 53.558] + + + 14.9717277424507 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 17 0 22 8.956] + + + 8.59273738836544 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 17 0 22 17.978] + + + 3.16557308334873 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 17 0 22 21.566] + + + 589.802057446399 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 17 0 32 13.23] + + + 689.460136355239 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 17 0 43 43.324] + + + 607.673902261529 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 17 0 53 51.623] + + + 587.712641531798 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 17 1 3 39.974] + + + 3394.4848414718 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 17 2 0 15.088] + + + 3865.43966750829 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 17 3 4 41.802] + + + 3979.38511283144 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 17 4 11 2.267] + + + 4282.74699885377 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 17 5 22 26.09] + + + 6555.1893427 + whole sqw file generation + [2021 6 9 20 49 47.072] + + + 6.4760179 + small memory based 1D cut in non-axis aligned direction 1 + [2021 6 9 20 49 54.795] + + + 14.6690381 + small memory based 1D cut in non-axis aligned direction 2 + [2021 6 9 20 50 10.478] + + + 7.443178 + small memory based 1D cut in non-axis aligned direction 3 + [2021 6 9 20 50 18.947] + + + 2.1637333 + small memory based 1D cut along energy direction (q are not axis aligned) + [2021 6 9 20 50 22.143] + + + 699.7694373 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 21 2 3.892] + + + 734.7275244 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 21 14 19.891] + + + 727.1672901 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 21 26 28.261] + + + 718.5394986 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 21 38 28.017] + + + 5456.5679079 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2021 6 9 23 9 25.794] + + + 5370.8613508 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2021 6 10 0 38 57.969] + + + 5147.396207 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2021 6 10 2 4 46.516] + + + 2801.2644796 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2021 6 10 2 51 28.985] + + + + + + 106.825340540455 + whole sqw file generation + [2018 6 15 23 2 59.268] + + + 0.892788111030988 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 15 23 3 0.447] + + + 0.838905542610019 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 15 23 3 1.521] + + + 0.838375470889759 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 15 23 3 2.604] + + + 0.825990134905074 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 15 23 3 3.709] + + + 7.96009397598818 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 3 12.278] + + + 7.88791184851007 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 3 20.378] + + + 8.95912355736727 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 3 29.55] + + + 7.23340272935617 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 3 37.009] + + + 45.8472459777787 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 23 4 23.082] + + + 48.8625564753177 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 15 23 5 12.178] + + + 54.1320308997711 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 23 6 6.549] + + + 46.0814966232346 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 15 23 6 52.894] + + + 609.636678049469 + whole sqw file generation + [2018 6 18 9 52 22.137] + + + 1.10387518516091 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 18 9 52 23.833] + + + 0.921719564579687 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 18 9 52 25.209] + + + 0.926074032577725 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 18 9 52 26.567] + + + 0.771326861227157 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 18 9 52 27.789] + + + 8.96616182384402 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 9 52 37.741] + + + 9.61852416908526 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 9 52 47.362] + + + 10.8961042873896 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 9 52 58.676] + + + 8.60358713869206 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 9 53 7.676] + + + 57.1271751646997 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 9 54 5.251] + + + 58.5895168964086 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 18 9 55 4.365] + + + 69.1253766952528 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 9 56 14.006] + + + 54.5607195334574 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 18 9 57 9.082] + + + 159.573499526213 + whole sqw file generation + [2018 6 18 18 48 16.654] + + + 0.945719795016862 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 18 18 48 20.142] + + + 0.828471638679807 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 18 18 48 21.417] + + + 0.876284041629668 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 18 18 48 22.294] + + + 0.674374723955467 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 18 18 48 23.409] + + + 8.69158798362837 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 18 48 33.417] + + + 9.46888204199121 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 18 48 43.348] + + + 10.847997216213 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 18 48 54.642] + + + 8.48155277574159 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 18 49 3.602] + + + 58.9908762108712 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 18 50 3.045] + + + 59.5022136536675 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 18 18 51 3.041] + + + 75.2509305225295 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 18 52 18.817] + + + 52.6457180733598 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 18 18 53 11.953] + + + + + 507.112771847994 + whole sqw file generation + [2018 6 15 23 15 40.34] + + + 2.57866085541193 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 15 23 15 43.223] + + + 6.39414259161037 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 15 23 15 49.88] + + + 2.83371607094022 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 15 23 15 52.965] + + + 0.911370750238549 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 15 23 15 54.136] + + + 68.2791666914983 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 17 3.133] + + + 62.0049841971748 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 18 5.388] + + + 55.5259178915263 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 19 1.181] + + + 39.1203186654774 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 15 23 19 40.538] + + + 318.609362635936 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 23 24 59.391] + + + 329.834131586249 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 15 23 30 29.481] + + + 320.247994103987 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 15 23 35 50.227] + + + 268.77405403222 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 15 23 40 19.316] + + + 152.038766088389 + performance of the tmp-files combine procedure + [2018 6 18 20 12 7.225] + + + 534.093795876366 + whole sqw file generation + [2018 6 16 7 14 53.489] + + + 2.68005519897389 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 16 7 14 56.783] + + + 1.33960380698105 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 16 7 14 58.433] + + + 1.07208280110954 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 16 7 14 59.784] + + + 1.02806632087847 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 16 7 15 1.102] + + + 52.0540351999407 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 7 15 53.928] + + + 57.5314738774962 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 7 16 51.742] + + + 52.8302909666641 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 7 17 44.852] + + + 38.6870424779148 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 7 18 23.837] + + + 314.039364695303 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 7 23 38.166] + + + 411.872355683753 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 16 7 30 30.43] + + + 392.453197746219 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 7 37 3.497] + + + 355.790856411815 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 16 7 42 59.682] + + + 1282.8312034449 + whole sqw file generation + [2018 6 18 19 14 53.839] + + + 3.09183418058726 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 18 19 14 57.874] + + + 8.7711437696211 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 18 19 15 7.111] + + + 5.05865751804595 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 18 19 15 12.169] + + + 0.978569342717689 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 18 19 15 13.148] + + + 96.5880150817158 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 19 16 50.214] + + + 70.6839358801939 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 19 18 1.314] + + + 63.205404943672 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 19 19 4.521] + + + 45.728296691836 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 19 19 50.252] + + + 729.425723741585 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 19 32 0.113] + + + 847.376631352832 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 18 19 46 7.927] + + + 730.013663997436 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 19 58 18.551] + + + 674.820062337229 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 18 20 9 34.084] + + + 1119.08307690576 + whole sqw file generation + [2018 6 18 10 29 32.342] + + + + + 2635.70510994436 + whole sqw file generation + [2018 6 16 0 29 43.824] + + + 9.14222244736199 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 16 0 29 53.357] + + + 15.3562595146384 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 16 0 30 8.967] + + + 8.76857121667518 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 16 0 30 17.991] + + + 3.43374004170383 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 16 0 30 21.694] + + + 580.537258976289 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 0 40 3.939] + + + 669.796415708664 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 0 51 14.128] + + + 611.987990117688 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 1 1 26.481] + + + 617.811979488443 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 1 11 44.667] + + + 2234.00085685547 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 1 48 59.078] + + + 2361.73847830679 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 16 2 28 21.343] + + + 2232.70030751444 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 3 5 34.513] + + + 2216.28515176738 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 16 3 42 31.857] + + + 2771.87275994207 + whole sqw file generation + [2018 6 16 8 34 43.195] + + + 7.49114174336318 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 16 8 34 57.336] + + + 15.5117413700285 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 16 8 35 13.144] + + + 8.62234889645094 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 16 8 35 22.089] + + + 3.11011619198595 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 16 8 35 25.523] + + + 580.464226615096 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 8 45 7.728] + + + 665.947230217995 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 8 56 14.146] + + + 609.445600603375 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 9 6 24.001] + + + 587.396327771719 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 16 9 16 11.841] + + + 2174.62291009043 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 9 52 26.927] + + + 2377.4670163617 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 16 10 32 4.843] + + + 2235.61382371424 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 16 11 9 21.248] + + + 2149.21909575923 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 16 11 45 10.943] + + + 6045.00803782083 + whole sqw file generation + [2018 6 18 21 55 53.396] + + + 7.58296930219253 + small memory based 1D cut in non-axis aligned direction 1 + [2018 6 18 21 56 1.526] + + + 14.7180376023144 + small memory based 1D cut in non-axis aligned direction 2 + [2018 6 18 21 56 16.244] + + + 8.24904696349359 + small memory based 1D cut in non-axis aligned direction 3 + [2018 6 18 21 56 24.494] + + + 3.20822945450621 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 6 18 21 56 27.702] + + + 563.592097726552 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 22 5 52.754] + + + 669.141198392502 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 22 17 1.906] + + + 609.693090460497 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 22 27 11.608] + + + 586.887226496567 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 6 18 22 36 58.504] + + + 4434.32813591555 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 18 23 50 52.932] + + + 4598.55505395739 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 6 19 1 7 32.697] + + + 4544.96023402617 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 6 19 2 23 18.887] + + + 4439.77941302089 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 6 19 3 37 19.92] + + + + + + 352.827548 + whole sqw file generation + [2018 6 21 10 27 1.208812] + + + 283.547536 + whole sqw file generation + [2018 6 21 11 25 55.072464] + + + 254.934048 + whole sqw file generation + [2018 6 21 12 11 6.301359] + + + 260.923057 + whole sqw file generation + [2018 6 21 13 5 39.799325] + + + 266.170116 + whole sqw file generation + [2018 6 21 14 2 6.101395] + + + 265.239976 + whole sqw file generation + [2018 6 21 15 52 24.178905] + + + 440.452671 + whole sqw file generation + [2018 6 21 16 30 22.787302] + + + 245.213099 + whole sqw file generation + [2018 6 21 17 50 21.724114] + + + 228.247387 + whole sqw file generation + [2018 6 21 18 3 27.390375] + + + + + + 1939.337711 + whole sqw file generation + [2018 9 20 15 39 13.210396] + + + 557.848706 + whole sqw file generation + [2018 9 20 15 50 36.905163] + + + 288.076396 + whole sqw file generation + [2018 9 20 16 6 49.459222] + + + 268.338491 + whole sqw file generation + [2018 9 20 16 12 2.721499] + + + 306.781138 + whole sqw file generation + [2018 9 20 16 17 59.608481] + + + + + 176.566433 + whole sqw file generation + [2018 9 26 17 38 24.71337] + + + 0.839655 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 26 17 38 27.307025] + + + 0.485078 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 26 17 38 28.005875] + + + 0.437313 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 26 17 38 28.683096] + + + 0.365594 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 26 17 38 29.317309] + + + 6.699144 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 17 38 36.229787] + + + 6.593909 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 17 38 42.824612] + + + 8.414354 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 17 38 51.495107] + + + 5.555965 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 17 38 57.052155] + + + 653.037222 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 26 17 49 50.094926] + + + 119.540576 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 26 17 51 51.201965] + + + 64.561181 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 26 17 52 57.424553] + + + 81.998733 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 26 17 54 20.339464] + + + + + 503.611363 + whole sqw file generation + [2018 9 26 14 15 42.590341] + + + 5.067794 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 26 14 15 51.404954] + + + 1.205744 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 26 14 15 52.779401] + + + 0.951936 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 26 14 15 53.965473] + + + 0.843857 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 26 14 15 55.066236] + + + 49.420273 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 14 16 45.288871] + + + 45.386182 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 14 17 31.932325] + + + 41.490381 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 14 18 13.619415] + + + 35.142643 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 26 14 18 49.956683] + + + + + + 86.081466 + whole sqw file generation + [2018 9 27 10 38 29.927325] + + + 1.876971 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 27 10 38 33.449436] + + + 0.561829 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 27 10 38 34.227037] + + + 0.478438 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 27 10 38 34.871738] + + + 0.396749 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 27 10 38 35.45258] + + + 5.954419 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 10 38 41.875309] + + + 5.636303 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 10 38 47.692113] + + + 7.666804 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 10 38 55.533447] + + + 5.553034 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 10 39 1.267454] + + + 24.719926 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 27 10 39 26.177616] + + + 51.097204 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 27 10 40 17.459619] + + + 145.534413 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 27 10 42 44.217596] + + + 116.820975 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 27 10 44 42.921485] + + + + + 815.748016 + whole sqw file generation + [2018 9 27 10 58 22.04073] + + + 22.717454 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 27 10 58 52.334846] + + + 5.950516 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 27 10 58 58.679405] + + + 1.817509 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 27 10 59 0.789252] + + + 0.864035 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 27 10 59 1.912469] + + + 491.452011 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 11 7 14.091774] + + + 300.374264 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 11 12 16.644747] + + + 132.605803 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 11 14 31.346145] + + + 28.307777 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 27 11 15 0.889173] + + + 2804.92324 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 27 12 1 46.091114] + + + 3482.937658 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 27 12 59 51.685963] + + + 3375.317688 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 9 27 13 56 14.591097] + + + 3450.573954 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 27 14 53 50.868187] + + + + + + 101.238683 + whole sqw file generation + [2018 9 28 13 7 19.509309] + + + 0.797652 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 28 13 7 21.025775] + + + 0.686096 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 28 13 7 22.363469] + + + 0.750574 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 28 13 7 23.719673] + + + 0.831096 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 28 13 7 25.125957] + + + 28.871411 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 7 54.992317] + + + 27.976064 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 8 23.619671] + + + 33.691722 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 8 57.927743] + + + 26.348071 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 9 24.938411] + + + 75.913509 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 28 13 10 41.533608] + + + 78.053113 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 28 13 12 0.230212] + + + 84.294407 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 9 28 13 13 25.319378] + + + 64.78216 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 28 13 14 30.74741] + + + + + 312.839443 + performance of the tmp-files combine procedure + [2018 7 6 11 8 12.610498] + + + 240.826789 + whole sqw file generation + [2018 9 28 13 18 53.842277] + + + 2.174581 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 28 13 18 56.613789] + + + 12.116586 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 28 13 19 9.331429] + + + 4.798738 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 28 13 19 15.015245] + + + 1.210076 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 28 13 19 16.848965] + + + 183.972872 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 22 22.050255] + + + 174.699505 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 25 17.363336] + + + 130.819881 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 27 28.810441] + + + 111.35266 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 13 29 20.811339] + + + 596.356193 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 28 13 39 17.811081] + + + 427.968573 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 28 13 46 26.537612] + + + 389.796031 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 9 28 13 52 57.063978] + + + 360.976703 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 28 13 58 58.685097] + + + 73.141038 + performance of the tmp-files combine procedure + [2018 9 28 14 2 41.664294] + + + + + 1033.637482 + whole sqw file generation + [2018 9 28 14 20 9.254375] + + + 12.927324 + small memory based 1D cut in non-axis aligned direction 1 + [2018 9 28 14 20 23.10014] + + + 38.096308 + small memory based 1D cut in non-axis aligned direction 2 + [2018 9 28 14 21 1.860401] + + + 14.444515 + small memory based 1D cut in non-axis aligned direction 3 + [2018 9 28 14 21 16.984153] + + + 4.521745 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 9 28 14 21 22.165832] + + + 1322.279897 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 14 43 26.806801] + + + 1387.531131 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 15 6 35.203207] + + + 825.753014 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 15 20 21.913675] + + + 700.341196 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 9 28 15 32 2.937933] + + + 2558.317614 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 9 28 16 14 41.980211] + + + 2867.158164 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 9 28 17 2 30.024324] + + + 2866.464098 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 9 28 17 50 17.762239] + + + 3371.686919 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 9 28 18 47 2.576702] + + + 2212.095796 + whole sqw file generation + [2020 5 4 21 53 30.322488] + + + + + + 63.732373 + whole sqw file generation + [2018 10 2 12 22 12.091598] + + + 1.722002 + small memory based 1D cut in non-axis aligned direction 1 + [2018 10 2 12 22 14.856796] + + + 0.52436 + small memory based 1D cut in non-axis aligned direction 2 + [2018 10 2 12 22 15.87825] + + + 0.49395 + small memory based 1D cut in non-axis aligned direction 3 + [2018 10 2 12 22 16.906561] + + + 0.389828 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 10 2 12 22 17.800875] + + + 5.662735 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 22 24.142412] + + + 5.679151 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 22 30.319546] + + + 6.340497 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 22 37.162529] + + + 5.627124 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 22 43.288976] + + + 27.15797 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 10 2 12 23 10.926636] + + + 28.62873 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 10 2 12 23 40.227915] + + + 178.608188 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 10 2 12 26 39.746845] + + + 26.587102 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 10 2 12 27 7.288886] + + + + + 134.425342 + whole sqw file generation + [2018 10 2 12 29 36.555813] + + + 0.902002 + small memory based 1D cut in non-axis aligned direction 1 + [2018 10 2 12 29 38.379263] + + + 1.042517 + small memory based 1D cut in non-axis aligned direction 2 + [2018 10 2 12 29 40.062852] + + + 0.818659 + small memory based 1D cut in non-axis aligned direction 3 + [2018 10 2 12 29 41.373637] + + + 0.782689 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 10 2 12 29 42.711885] + + + 29.020796 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 30 12.635469] + + + 35.027705 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 30 48.146901] + + + 33.072049 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 31 22.230682] + + + 27.339543 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 12 31 50.065216] + + + 168.273166 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 10 2 12 34 39.22747] + + + 203.101244 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 10 2 12 38 3.271079] + + + 226.516673 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 10 2 12 41 50.737076] + + + 148.260979 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 10 2 12 44 19.914427] + + + 88.506984 + performance of the tmp-files combine procedure + [2018 10 2 12 45 56.364224] + + + + + 846.121918 + whole sqw file generation + [2018 10 2 13 1 20.564572] + + + 10.485779 + small memory based 1D cut in non-axis aligned direction 1 + [2018 10 2 13 1 33.020543] + + + 29.366102 + small memory based 1D cut in non-axis aligned direction 2 + [2018 10 2 13 2 2.972816] + + + 11.429862 + small memory based 1D cut in non-axis aligned direction 3 + [2018 10 2 13 2 14.955207] + + + 2.887145 + small memory based 1D cut along energy direction (q are not axis aligned) + [2018 10 2 13 2 18.358423] + + + 731.963577 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 13 14 32.16017] + + + 694.147223 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 13 26 7.178176] + + + 624.817088 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 13 36 32.902492] + + + 543.059481 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2018 10 2 13 45 36.842951] + + + 1918.744175 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2018 10 2 14 17 36.637245] + + + 1891.14147 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2018 10 2 14 49 8.949297] + + + 1816.039894 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2018 10 2 15 19 26.225944] + + + 5268.178321 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2018 10 2 16 47 16.320757] + + + + + + 79.886261 + whole sqw file generation + [2019 5 22 12 58 57.07777] + + + 0.542699 + small memory based 1D cut in non-axis aligned direction 1 + [2019 5 22 12 58 58.694148] + + + 0.57345 + small memory based 1D cut in non-axis aligned direction 2 + [2019 5 22 12 59 0.088025] + + + 0.584385 + small memory based 1D cut in non-axis aligned direction 3 + [2019 5 22 12 59 1.633284] + + + 0.50883 + small memory based 1D cut along energy direction (q are not axis aligned) + [2019 5 22 12 59 2.876837] + + + 7.329362 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 12 59 11.262793] + + + 7.859275 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 12 59 19.859639] + + + 8.397392 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 12 59 28.968273] + + + 7.016319 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 12 59 36.698962] + + + 39.458084 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2019 5 22 13 0 16.859088] + + + 42.983196 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2019 5 22 13 1 0.578707] + + + 48.979452 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2019 5 22 13 1 50.331256] + + + 36.447188 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2019 5 22 13 2 27.535763] + + + + + 809.215494 + whole sqw file generation + [2019 5 22 13 16 25.067886] + + + 3.134759 + small memory based 1D cut in non-axis aligned direction 1 + [2019 5 22 13 16 31.937996] + + + 10.545194 + small memory based 1D cut in non-axis aligned direction 2 + [2019 5 22 13 16 43.254783] + + + 5.758744 + small memory based 1D cut in non-axis aligned direction 3 + [2019 5 22 13 16 49.774437] + + + 1.074346 + small memory based 1D cut along energy direction (q are not axis aligned) + [2019 5 22 13 16 51.624154] + + + 118.646339 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 13 18 51.527622] + + + 99.225057 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 13 20 31.478133] + + + 56.44501 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 13 21 28.683487] + + + 35.897868 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 13 22 5.335246] + + + 499.422569 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2019 5 22 13 30 25.500682] + + + 587.289264 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2019 5 22 13 40 14.719483] + + + 537.860648 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2019 5 22 13 49 16.214707] + + + 432.896846 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2019 5 22 13 56 30.041509] + + + 425.819959 + performance of the tmp-files combine procedure + [2019 5 22 14 3 44.446144] + + + 803.73952 + whole sqw file generation + [2019 7 16 14 25 8.794333] + + + 819.736159 + whole sqw file generation + [2019 7 16 15 10 39.051073] + + + 693.034723 + whole sqw file generation + [2019 7 16 15 22 16.639388] + + + 667.242863 + whole sqw file generation + [2019 7 16 15 33 26.9294] + + + 730.035408 + whole sqw file generation + [2019 7 16 15 45 42.610362] + + + 713.365642 + whole sqw file generation + [2019 7 16 15 57 39.797344] + + + 1909.992739 + whole sqw file generation + [2019 7 16 16 29 34.287299] + + + 2827.568505 + whole sqw file generation + [2019 7 16 17 17 26.238498] + + + 2305.743257 + whole sqw file generation + [2019 7 16 17 56 11.820611] + + + 376.792128 + performance of the tmp-files combine procedure + [2019 7 17 17 34 4.388177] + + + 408.023812 + performance of the tmp-files combine procedure + [2019 7 17 17 40 53.657224] + + + 653.614958 + performance of the tmp-files combine procedure + [2019 7 17 17 51 49.871471] + + + 776.690457 + performance of the tmp-files combine procedure + [2019 7 17 18 4 48.555905] + + + 779.603034 + performance of the tmp-files combine procedure + [2019 7 17 18 17 51.357289] + + + 720.25436 + performance of the tmp-files combine procedure + [2019 7 17 18 29 52.800274] + + + 697.516411 + performance of the tmp-files combine procedure + [2019 7 17 18 41 32.286073] + + + 597.742346 + performance of the tmp-files combine procedure + [2019 7 17 18 51 31.610347] + + + 521.394432 + performance of the tmp-files combine procedure + [2019 7 17 19 0 17.227559] + + + + + 4509.011461 + whole sqw file generation + [2019 5 22 15 22 35.307652] + + + 11.929544 + small memory based 1D cut in non-axis aligned direction 1 + [2019 5 22 15 22 49.551487] + + + 28.935567 + small memory based 1D cut in non-axis aligned direction 2 + [2019 5 22 15 23 19.241499] + + + 13.950057 + small memory based 1D cut in non-axis aligned direction 3 + [2019 5 22 15 23 33.948068] + + + 4.244292 + small memory based 1D cut along energy direction (q are not axis aligned) + [2019 5 22 15 23 38.947659] + + + 651.214695 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 15 34 32.617095] + + + 704.3381 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 15 46 17.719443] + + + 677.782591 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 15 57 36.309235] + + + 698.143762 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2019 5 22 16 9 15.255445] + + + 3791.94072 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2019 5 22 17 12 28.056935] + + + 3827.057332 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2019 5 22 18 16 17.99922] + + + 3656.176791 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2019 5 22 19 17 16.428407] + + + 4541.914016 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2019 5 22 20 32 59.647295] + + + + + 38.51548 + whole sqw file generation + [2019 7 16 12 50 10.476884] + + + 55.083464 + whole sqw file generation + [2019 7 16 12 52 5.14253] + + + 55.240706 + whole sqw file generation + [2019 7 16 12 53 0.734015] + + + 58.034669 + whole sqw file generation + [2019 7 16 12 51 8.861853] + + + 46.544452 + whole sqw file generation + [2019 7 16 12 53 47.639236] + + + 51.45903 + whole sqw file generation + [2019 7 16 12 54 40.264167] + + + 50.9584 + whole sqw file generation + [2019 7 16 12 55 32.414904] + + + 51.542837 + whole sqw file generation + [2019 7 16 12 56 25.121158] + + + 46.486941 + whole sqw file generation + [2019 7 16 12 57 12.761242] + + + 46.820272 + whole sqw file generation + [2019 7 16 12 58 0.739055] + + + 29.143289 + performance of the tmp-files combine procedure + [2019 7 17 13 41 39.937883] + + + 7.901716 + performance of the tmp-files combine procedure + [2019 7 17 13 43 29.21725] + + + 5.287909 + performance of the tmp-files combine procedure + [2019 7 17 13 44 34.657423] + + + 10.951501 + performance of the tmp-files combine procedure + [2019 7 17 13 45 5.772702] + + + 5.626505 + performance of the tmp-files combine procedure + [2019 7 17 13 45 16.487014] + + + 5.584067 + performance of the tmp-files combine procedure + [2019 7 17 13 45 22.938375] + + + 5.579993 + performance of the tmp-files combine procedure + [2019 7 17 13 45 29.35584] + + + 5.618698 + performance of the tmp-files combine procedure + [2019 7 17 13 45 35.803233] + + + 5.631005 + performance of the tmp-files combine procedure + [2019 7 17 13 45 42.264742] + + + 5.672947 + performance of the tmp-files combine procedure + [2019 7 17 13 45 48.772495] + + + + + + + 68.902094 + whole sqw file generation + [2019 7 17 14 8 52.049367] + + + 115.21413 + whole sqw file generation + [2019 7 17 14 10 51.216806] + + + 80.806949 + whole sqw file generation + [2019 7 17 14 12 13.658608] + + + 80.247251 + whole sqw file generation + [2019 7 17 14 13 36.43051] + + + 77.865051 + whole sqw file generation + [2019 7 17 14 14 55.821486] + + + 88.245225 + whole sqw file generation + [2019 7 17 14 16 26.126182] + + + 66.832439 + whole sqw file generation + [2019 7 17 14 17 34.438206] + + + 66.012501 + whole sqw file generation + [2019 7 17 14 18 41.912985] + + + 67.605412 + whole sqw file generation + [2019 7 17 14 19 51.563044] + + + 70.560972 + whole sqw file generation + [2019 7 17 14 21 3.58414] + + + 43.086904 + performance of the tmp-files combine procedure + [2019 7 17 14 21 51.8585] + + + 21.027099 + performance of the tmp-files combine procedure + [2019 7 17 14 22 14.004524] + + + 13.364578 + performance of the tmp-files combine procedure + [2019 7 17 14 22 28.464727] + + + 10.142027 + performance of the tmp-files combine procedure + [2019 7 17 14 22 39.66727] + + + 18.574754 + performance of the tmp-files combine procedure + [2019 7 17 14 22 59.299474] + + + 17.410379 + performance of the tmp-files combine procedure + [2019 7 17 14 23 18.260121] + + + 16.341324 + performance of the tmp-files combine procedure + [2019 7 17 14 23 36.47872] + + + 14.998322 + performance of the tmp-files combine procedure + [2019 7 17 14 23 53.402666] + + + 13.615178 + performance of the tmp-files combine procedure + [2019 7 17 14 24 8.772248] + + + + + 518.144202 + whole sqw file generation + [2019 7 17 14 50 26.382142] + + + 648.412031 + whole sqw file generation + [2019 7 17 15 1 16.457274] + + + 417.644765 + whole sqw file generation + [2019 7 17 15 8 16.190422] + + + 299.641541 + whole sqw file generation + [2019 7 17 15 13 17.972339] + + + 272.803076 + whole sqw file generation + [2019 7 17 15 17 52.521346] + + + 292.058748 + whole sqw file generation + [2019 7 17 15 22 46.92283] + + + 335.190146 + whole sqw file generation + [2019 7 17 15 28 24.461873] + + + 367.259398 + whole sqw file generation + [2019 7 17 15 34 34.221864] + + + 315.750386 + whole sqw file generation + [2019 7 17 15 40 3.481758] + + + 364.770615 + whole sqw file generation + [2019 7 17 15 46 20.644724] + + + 411.477615 + performance of the tmp-files combine procedure + [2019 7 17 15 53 24.003618] + + + 87.217659 + performance of the tmp-files combine procedure + [2019 7 17 15 54 52.661857] + + + 87.744217 + performance of the tmp-files combine procedure + [2019 7 17 15 56 21.629066] + + + 74.82789 + performance of the tmp-files combine procedure + [2019 7 17 15 57 38.096735] + + + 83.322238 + performance of the tmp-files combine procedure + [2019 7 17 15 59 2.528416] + + + 69.461426 + performance of the tmp-files combine procedure + [2019 7 17 16 0 13.14778] + + + 74.240727 + performance of the tmp-files combine procedure + [2019 7 17 16 1 28.624209] + + + 86.172403 + performance of the tmp-files combine procedure + [2019 7 17 16 2 56.19077] + + + 99.21681 + performance of the tmp-files combine procedure + [2019 7 17 16 4 47.558328] + + + + + + + 501.751482 + whole sqw file generation + [2019 7 16 13 19 13.081771] + + + 509.179147 + whole sqw file generation + [2019 7 16 13 27 45.616389] + + + 469.014134 + whole sqw file generation + [2019 7 16 13 35 37.316824] + + + 474.485073 + whole sqw file generation + [2019 7 17 10 44 48.483544] + + + 507.305083 + whole sqw file generation + [2019 7 17 11 56 55.070455] + + + 416.322954 + whole sqw file generation + [2019 7 17 12 3 56.543698] + + + 386.817107 + whole sqw file generation + [2019 7 16 15 35 23.180427] + + + 420.714787 + whole sqw file generation + [2019 7 17 12 10 58.215468] + + + 249.191538 + performance of the tmp-files combine procedure + [2019 7 17 14 18 18.371943] + + + 136.470683 + performance of the tmp-files combine procedure + [2019 7 17 14 20 36.631869] + + + 143.776852 + performance of the tmp-files combine procedure + [2019 7 17 14 23 2.008306] + + + 153.822676 + performance of the tmp-files combine procedure + [2019 7 17 14 25 37.588726] + + + 138.836327 + performance of the tmp-files combine procedure + [2019 7 17 14 27 58.084239] + + + 146.917486 + performance of the tmp-files combine procedure + [2019 7 17 14 30 26.732337] + + + 161.796551 + performance of the tmp-files combine procedure + [2019 7 17 14 33 9.883987] + + + 167.777174 + performance of the tmp-files combine procedure + [2019 7 17 14 36 44.307218] + + + 149.387816 + performance of the tmp-files combine procedure + [2019 7 17 14 39 37.96956] + + + + + 183.042053073319 + whole sqw file generation + [2019 7 17 12 34 4.619] + + + 99.6553730527919 + whole sqw file generation + [2019 7 17 12 38 17.463] + + + 134.580932673366 + whole sqw file generation + [2019 7 17 12 40 33.26] + + + 131.9240174152 + whole sqw file generation + [2019 7 17 12 42 46.355] + + + 145.823728706938 + whole sqw file generation + [2019 7 17 13 3 33.029] + + + 124.918789875346 + whole sqw file generation + [2019 7 17 13 5 42.088] + + + + + 143.586897213899 + whole sqw file generation + [2019 7 17 13 20 39.051] + + + 199.137535384972 + whole sqw file generation + [2019 7 17 13 23 59.962] + + + 150.749321436257 + whole sqw file generation + [2019 7 17 13 26 32.619] + + + 124.531845978115 + whole sqw file generation + [2019 7 17 13 28 38.578] + + + 110.649172446902 + whole sqw file generation + [2019 7 17 13 30 31.029] + + + 102.469224096545 + whole sqw file generation + [2019 7 17 13 32 14.644] + + + 119.872675352194 + whole sqw file generation + [2019 7 17 13 34 16.707] + + + 129.890760673432 + whole sqw file generation + [2019 7 17 13 36 28.255] + + + 144.928134818812 + whole sqw file generation + [2019 7 17 13 38 58.31] + + + 171.049210190872 + whole sqw file generation + [2019 7 17 13 41 53.906] + + + + + + + 938.857086 + whole sqw file generation + [2019 7 17 18 31 34.404487] + + + 661.988997 + whole sqw file generation + [2019 7 17 18 42 46.121453] + + + 545.466816 + whole sqw file generation + [2019 7 17 18 51 53.490046] + + + 753.080147 + whole sqw file generation + [2019 7 17 15 34 9.188083] + + + 497.329568 + whole sqw file generation + [2019 7 17 19 0 12.074394] + + + 694.534157 + whole sqw file generation + [2019 7 17 19 11 59.512082] + + + 763.167765 + whole sqw file generation + [2019 7 17 19 25 3.525436] + + + 724.539261 + whole sqw file generation + [2019 7 17 19 37 42.698468] + + + 529.363347 + whole sqw file generation + [2019 7 17 16 17 34.752542] + + + 928.19213 + whole sqw file generation + [2019 7 17 16 33 24.45706] + + + 658.869942 + whole sqw file generation + [2019 7 17 16 44 54.551266] + + + 294.377405 + performance of the tmp-files combine procedure + [2019 7 17 16 50 12.258303] + + + 95.707908 + performance of the tmp-files combine procedure + [2019 7 17 16 51 50.666766] + + + 257.895869 + performance of the tmp-files combine procedure + [2019 7 17 16 56 11.088262] + + + 199.941027 + performance of the tmp-files combine procedure + [2019 7 17 16 59 33.509749] + + + 143.617905 + performance of the tmp-files combine procedure + [2019 7 17 17 1 59.710466] + + + 370.344874 + performance of the tmp-files combine procedure + [2019 7 17 17 8 16.892882] + + + 296.807564 + performance of the tmp-files combine procedure + [2019 7 17 17 13 17.669436] + + + 177.122027 + performance of the tmp-files combine procedure + [2019 7 17 17 16 16.442419] + + + 504.278019 + performance of the tmp-files combine procedure + [2019 7 17 17 24 44.871803] + + + 491.367185 + performance of the tmp-files combine procedure + [2019 7 17 17 53 51.144917] + + + + + + 201.18399 + whole sqw file generation + [2020 4 21 10 32 22.362145] + + + 1.874405 + small memory based 1D cut in non-axis aligned direction 1 + [2020 4 21 10 32 25.648808] + + + 0.545979 + small memory based 1D cut in non-axis aligned direction 2 + [2020 4 21 10 32 26.752512] + + + 0.488856 + small memory based 1D cut in non-axis aligned direction 3 + [2020 4 21 10 32 27.760756] + + + 0.415896 + small memory based 1D cut along energy direction (q are not axis aligned) + [2020 4 21 10 32 28.747238] + + + 6.211973 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2020 4 21 10 32 35.772075] + + + + + 689.638454 + whole sqw file generation + [2020 4 21 10 47 14.092582] + + + 5.475905 + small memory based 1D cut in non-axis aligned direction 1 + [2020 4 21 10 47 21.205623] + + + 1.682 + small memory based 1D cut in non-axis aligned direction 2 + [2020 4 21 10 47 26.712057] + + + 0.995129 + small memory based 1D cut in non-axis aligned direction 3 + [2020 4 21 10 47 31.09614] + + + 0.623344 + small memory based 1D cut along energy direction (q are not axis aligned) + [2020 4 21 10 47 32.395005] + + + 76.016984 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2020 4 21 10 48 49.322888] + + + 49.631907 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2020 4 21 10 49 40.060562] + + + 1108.389657 + whole sqw file generation + [2020 4 21 11 16 23.635784] + + + 1522.967328 + whole sqw file generation + [2020 4 21 11 41 47.885794] + + + 2020.562451 + whole sqw file generation + [2020 4 21 12 16 3.3705] + + + 1988.939533 + whole sqw file generation + [2020 4 21 12 49 14.401371] + + + 2236.444416 + whole sqw file generation + [2020 4 21 13 27 7.824067] + + + 680.650687 + performance of the tmp-files combine procedure + [2020 4 21 13 39 6.542542] + + + 740.129803 + performance of the tmp-files combine procedure + [2020 4 21 13 51 31.669244] + + + 707.479143 + performance of the tmp-files combine procedure + [2020 4 21 14 3 21.530788] + + + 634.196556 + performance of the tmp-files combine procedure + [2020 4 21 14 13 57.37213] + + + 621.21472 + performance of the tmp-files combine procedure + [2020 4 21 14 24 22.507575] + + + 772.913334 + performance of the tmp-files combine procedure + [2020 4 21 14 37 27.322522] + + + 490.844113 + performance of the tmp-files combine procedure + [2020 4 21 14 45 54.542516] + + + 435.139937 + performance of the tmp-files combine procedure + [2020 4 21 14 53 10.756114] + + + 522.3928 + performance of the tmp-files combine procedure + [2020 4 21 15 2 3.797033] + + + + + 11823.589859 + whole sqw file generation + [2020 4 23 15 36 17.22208] + + + 12522.032862 + whole sqw file generation + [2020 4 23 19 5 50.317784] + + + 10432.505119 + whole sqw file generation + [2020 4 23 22 0 15.686863] + + + 9016.736609 + whole sqw file generation + [2020 4 24 2 7 45.821591] + + + 9486.36589 + whole sqw file generation + [2020 4 24 4 46 30.947634] + + + + + + + 309.738872 + whole sqw file generation + [2020 4 30 16 23 33.71256] + + + 428.738987 + whole sqw file generation + [2020 4 30 16 30 44.191219] + + + 325.148681 + whole sqw file generation + [2020 4 30 16 36 10.414983] + + + 372.173824 + whole sqw file generation + [2020 4 30 16 42 23.861097] + + + 194.395254 + whole sqw file generation + [2020 4 30 16 45 39.21093] + + + 205.465275 + whole sqw file generation + [2020 4 30 16 49 6.142205] + + + 181.969448 + performance of the tmp-files combine procedure + [2020 4 30 16 52 11.356963] + + + 63.069975 + performance of the tmp-files combine procedure + [2020 4 30 16 53 15.003539] + + + 82.070733 + performance of the tmp-files combine procedure + [2020 4 30 16 54 37.943404] + + + 58.559823 + performance of the tmp-files combine procedure + [2020 4 30 16 55 37.263812] + + + 58.548919 + performance of the tmp-files combine procedure + [2020 4 30 16 56 36.865096] + + + 70.449209 + performance of the tmp-files combine procedure + [2020 4 30 16 57 47.933584] + + + 54.853658 + performance of the tmp-files combine procedure + [2020 4 30 16 58 52.022743] + + + 70.153242 + performance of the tmp-files combine procedure + [2020 4 30 17 0 3.736113] + + + 53.885278 + performance of the tmp-files combine procedure + [2020 4 30 17 0 58.700472] + + + + + 2434.798518 + whole sqw file generation + [2020 4 30 17 49 22.310421] + + + 2707.212954 + whole sqw file generation + [2020 4 30 18 34 31.893914] + + + 2173.28866 + whole sqw file generation + [2020 5 1 17 50 25.682681] + + + 2044.788267 + whole sqw file generation + [2020 5 1 18 24 33.073652] + + + 2030.222352 + whole sqw file generation + [2020 5 1 18 58 25.347656] + + + 1962.374383 + whole sqw file generation + [2020 5 1 19 31 9.877927] + + + 1451.627067 + performance of the tmp-files combine procedure + [2020 5 1 19 55 26.133719] + + + 1015.733692 + performance of the tmp-files combine procedure + [2020 5 1 20 12 22.596077] + + + 1148.428696 + performance of the tmp-files combine procedure + [2020 5 1 20 31 31.726476] + + + 1252.570105 + performance of the tmp-files combine procedure + [2020 5 1 20 52 25.2395] + + + 1075.406059 + performance of the tmp-files combine procedure + [2020 5 1 21 10 21.59124] + + + 1131.057859 + performance of the tmp-files combine procedure + [2020 5 1 21 29 13.567435] + + + 1101.610753 + performance of the tmp-files combine procedure + [2020 5 1 21 47 35.900081] + + + 1084.893654 + performance of the tmp-files combine procedure + [2020 5 1 22 5 41.489906] + + + 1117.490041 + performance of the tmp-files combine procedure + [2020 5 1 22 24 19.687747] + + + + + + + 2579.339004 + whole sqw file generation + [2020 5 5 10 28 39.67682] + + + 2730.222332 + whole sqw file generation + [2020 5 5 11 14 13.212553] + + + 1449.289501 + whole sqw file generation + [2020 5 5 12 29 3.874575] + + + 1223.657781 + whole sqw file generation + [2020 5 5 12 54 41.283676] + + + 1209.930274 + whole sqw file generation + [2020 5 5 13 14 55.015524] + + + 1217.043274 + whole sqw file generation + [2020 5 5 13 35 15.222849] + + + 567.549234 + whole sqw file generation + [2020 5 5 19 21 14.062416] + + + 1257.356419 + whole sqw file generation + [2020 5 5 21 3 22.944883] + + + 1362.166291 + whole sqw file generation + [2020 5 5 21 26 8.944933] + + + 1350.629186 + whole sqw file generation + [2020 5 5 21 48 43.079698] + + + 1166.679237 + performance of the tmp-files combine procedure + [2020 5 5 22 8 14.712728] + + + 361.599821 + performance of the tmp-files combine procedure + [2020 5 5 22 14 18.001292] + + + 303.49041 + performance of the tmp-files combine procedure + [2020 5 5 22 19 23.114394] + + + 284.500051 + performance of the tmp-files combine procedure + [2020 5 5 22 24 9.663979] + + + + + + 95.0863674 + whole sqw file generation + [2021 6 9 15 25 23.367] + + + 0.46045 + small memory based 1D cut in non-axis aligned direction 1 + [2021 6 9 15 25 23.828] + + + 0.4487759 + small memory based 1D cut in non-axis aligned direction 2 + [2021 6 9 15 25 24.277] + + + 0.451143 + small memory based 1D cut in non-axis aligned direction 3 + [2021 6 9 15 25 24.729] + + + 0.3850648 + small memory based 1D cut along energy direction (q are not axis aligned) + [2021 6 9 15 25 25.114] + + + 9.3026359 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 25 35.231] + + + 10.2489083 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 25 45.48] + + + 11.0363675 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 25 56.51] + + + 9.1873687 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 26 5.705] + + + 32.4748459 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2021 6 9 15 26 38.181] + + + 33.5339218 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2021 6 9 15 27 12.266] + + + 41.9314006 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2021 6 9 15 27 54.729] + + + 33.4618468 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2021 6 9 15 28 28.769] + + + + + 516.3904859 + whole sqw file generation + [2021 6 9 15 37 20.077] + + + 0.9014353 + small memory based 1D cut in non-axis aligned direction 1 + [2021 6 9 15 37 21.536] + + + 1.2160399 + small memory based 1D cut in non-axis aligned direction 2 + [2021 6 9 15 37 23.287] + + + 0.8981015 + small memory based 1D cut in non-axis aligned direction 3 + [2021 6 9 15 37 24.171] + + + 0.5611907 + small memory based 1D cut along energy direction (q are not axis aligned) + [2021 6 9 15 37 24.732] + + + 55.5005532 + large 1D cut direction 1 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 38 20.59] + + + 66.8795665 + large 1D cut direction 2 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 39 27.458] + + + 65.0762518 + large 1D cut direction 3 with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 40 32.547] + + + 57.5258582 + large 1D cut along energy direction with whole dataset integration along 3 other directions. -nopix mode + [2021 6 9 15 41 30.073] + + + 221.3410977 + large file-based 1D cut. Direction 1; Whole dataset integration along 3 other directions + [2021 6 9 15 45 11.416] + + + 256.7977594 + large file-based 1D cut. Direction 2; Whole dataset integration along 3 other directions + [2021 6 9 15 49 28.787] + + + 251.3642226 + large file-based 1D cut. Direction 3; Whole dataset integration along 3 other directions + [2021 6 9 15 53 40.748] + + + 220.4748572 + large file-based 1D cut. Energy direction; Whole dataset integration along 3 other directions + [2021 6 9 15 57 21.978] + + + 104.8600304 + performance of the tmp-files combine procedure + [2021 6 9 15 59 9.159] + + + + + + + 497.065661 + whole sqw file generation + [2021 7 22 11 2 30.401453] + + + 527.950558 + whole sqw file generation + [2021 7 22 11 48 43.286991] + + + 526.940898 + whole sqw file generation + [2021 7 22 11 57 32.234514] + + + 450.783247 + whole sqw file generation + [2021 7 22 12 5 4.746598] + + + 421.936312 + whole sqw file generation + [2021 7 22 12 12 8.785468] + + + 412.57181 + whole sqw file generation + [2021 7 22 12 19 4.317142] + + + 429.843792 + whole sqw file generation + [2021 7 22 12 26 16.60771] + + + 445.487759 + whole sqw file generation + [2021 7 22 12 33 44.149162] + + + 433.671953 + whole sqw file generation + [2021 7 22 12 40 59.670816] + + + 438.254899 + whole sqw file generation + [2021 7 22 12 48 20.13151] + + + + + + + 478.638048 + whole sqw file generation + [2021 7 22 20 3 37.139622] + + + 470.29913 + whole sqw file generation + [2021 7 22 20 39 58.105952] + + + 10269.758319 + whole sqw file generation + [2021 7 22 23 31 9.808379] + + + 5414.187918 + whole sqw file generation + [2021 7 23 1 1 25.317819] + + + 2120.677592 + whole sqw file generation + [2021 7 23 1 36 51.20206] + + + 1882.889249 + whole sqw file generation + [2021 7 23 2 8 16.038674] + + + 1587.433538 + whole sqw file generation + [2021 7 23 2 34 45.39586] + + + 1494.767623 + whole sqw file generation + [2021 7 23 2 59 41.904497] + + + 1279.104698 + whole sqw file generation + [2021 7 23 3 21 2.842873] + + + 1048.57103 + whole sqw file generation + [2021 7 23 3 38 33.269914] + + + 1024.818452 + whole sqw file generation + [2021 7 23 3 55 39.821095] + + + 925.294871 + whole sqw file generation + [2021 7 23 4 11 6.866426] + + + 880.054637 + whole sqw file generation + [2021 7 23 4 25 48.743121] + + + 1013.743939 + whole sqw file generation + [2021 7 23 22 14 37.901418] + + + 8461.512017 + whole sqw file generation + [2021 7 24 0 36 35.125535] + + + 7027.406315 + whole sqw file generation + [2021 7 24 2 35 9.839952] + + + \ No newline at end of file diff --git a/_test/test_gen_sqw_for_powders/test_gen_sqw_powder.m b/_test/test_gen_sqw_for_powders/test_gen_sqw_powder.m index bc6a9a71cd..3cedf9db79 100644 --- a/_test/test_gen_sqw_for_powders/test_gen_sqw_powder.m +++ b/_test/test_gen_sqw_for_powders/test_gen_sqw_powder.m @@ -123,7 +123,7 @@ function test_powder_cuts(this) this.assertEqualToTolWithSave(w1,'ignore_str',true,'reltol',1.e-5) this.assertEqualToTolWithSave(w2,'ignore_str',true,'reltol',1.e-5) this.assertEqualToTolWithSave(w2rings,'ignore_str',true,'reltol',1.e-5) - this.assertEqualToTolWithSave(w1rings,'ignore_str',true,'reltol',1.e-5) + this.assertEqualToTolWithSave(w1rings,'ignore_str',true,'abstol',3.e-5) end diff --git a/_test/test_gen_sqw_workflow/gen_sqw_accumulate_sqw_tests_common.m b/_test/test_gen_sqw_workflow/gen_sqw_accumulate_sqw_tests_common.m index 177f8e0d40..5ca523d1eb 100644 --- a/_test/test_gen_sqw_workflow/gen_sqw_accumulate_sqw_tests_common.m +++ b/_test/test_gen_sqw_workflow/gen_sqw_accumulate_sqw_tests_common.m @@ -236,7 +236,7 @@ % for the purposes of consistency, test files have to be always % generated by single thread, as multithreading causes pixels % permutation within a bin, and then random function adds - % various amout of noise to various detectors according to the + % various amounts of noise to various detectors according to the % ordering @@ -261,7 +261,7 @@ function test_gen_sqw(obj,varargin) %------------------------------------------------------------- if obj.skip_test - return + skipTest(fprintf('test_gen_sqw_%s is disabled',obj.test_pref)); end if nargin> 1 % running in single test method mode. @@ -317,8 +317,11 @@ function test_gen_sqw(obj,varargin) end function test_gen_sqw_sym(obj,varargin) %------------------------------------------------------------- + if obj.save_output + return; + end if obj.skip_test - return + skipTest(fprintf('test_gen_sqw_sym_%s is disabled',obj.test_pref)); end if nargin> 1 % running in single test method mode. @@ -385,7 +388,7 @@ function test_gen_sqw_sym(obj,varargin) function test_accumulate_sqw14(obj,varargin) %------------------------------------------------------------- if obj.skip_test - return + skipTest(fprintf('test_accumulate_sqw14_%s is disabled',obj.test_pref)); end if nargin> 1 % running in single test method mode. @@ -478,6 +481,15 @@ function test_accumulate_and_combine1to4(obj,varargin) new_names = gen_sqw_accumulate_sqw_tests_common.rename_file_list(spe_names(3:4),'.tnxs'); co3 = onCleanup(@()gen_sqw_accumulate_sqw_tests_common.rename_file_list(new_names,'.nxspe')); + % + hc = hor_config; + ohc = hc.get_data_to_store(); + hc.saveable = false; + co5 = onCleanup(@()set(hc,ohc)); + % Allow nan-s and inf-s to keep masked pixels, to ensure + % consistency of estimated and actual pix_ranges + hc.ignore_nan = false; + hc.ignore_inf = false; % --------------------------------------- Test accumulate_sqw % --------------------------------------- @@ -577,6 +589,14 @@ function test_accumulate_sqw11456(obj,varargin) obj.setUp(); co1 = onCleanup(@()obj.tearDown()); end + + %------------------------------------------------------------- + % Do not delete tmp file for future accumulation + hc = hor_config; + recovery = hc.get_data_to_store(); + hc.saveable = false; + hc.delete_tmp = false; + co2 = onCleanup(@()set(hc,recovery)); %------------------------------------------------------------- @@ -603,8 +623,9 @@ function test_accumulate_sqw11456(obj,varargin) emode, alatt, angdeg, u, v, psi([1,3,4,5,6]),... omega([1,3,4,5,6]), dpsi([1,3,4,5,6]), gl([1,3,4,5,6]), gs([1,3,4,5,6]),... 'replicate'); - assertEqual(exist(sqw_file_11456,'file'),2) clobT = onCleanup(@()obj.delete_files(tmp_files)); + assertEqual(exist(sqw_file_11456,'file'),2) + % Now use accumulate sqw ---------------------- obj.proj.u=u; diff --git a/_test/test_gen_sqw_workflow/test_gen_sqw_accumulate_sqw_parpool.m b/_test/test_gen_sqw_workflow/test_gen_sqw_accumulate_sqw_parpool.m index 254cae695e..f69d07ce3f 100644 --- a/_test/test_gen_sqw_workflow/test_gen_sqw_accumulate_sqw_parpool.m +++ b/_test/test_gen_sqw_workflow/test_gen_sqw_accumulate_sqw_parpool.m @@ -61,12 +61,21 @@ %------------------------------------------------------------------ % Block of code to disable some tests for debugging Jenkins jobs function test_gen_sqw(obj,varargin) +% if is_jenkins && ispc +% skipTest('Test disabled due to intermittent failure') +% end test_gen_sqw@gen_sqw_accumulate_sqw_tests_common(obj,varargin{:}); end function test_accumulate_sqw14(obj,varargin) +% if is_jenkins && ispc +% skipTest('Test disabled due to intermittent failure') +% end test_accumulate_sqw14@gen_sqw_accumulate_sqw_tests_common(obj,varargin{:}); end function test_accumulate_and_combine1to4(obj,varargin) +% if is_jenkins && ispc +% skipTest('Test disabled due to intermittent failure') +% end test_accumulate_and_combine1to4@gen_sqw_accumulate_sqw_tests_common(obj,varargin{:}); end function test_accumulate_sqw1456(obj,varargin) % TEST DISABLED @@ -74,6 +83,9 @@ function test_accumulate_sqw1456(obj,varargin) % TEST DISABLED % test_accumulate_sqw1456@gen_sqw_accumulate_sqw_tests_common(obj,varargin{:}); end function test_accumulate_sqw11456(obj,varargin) +% if is_jenkins && ispc +% skipTest('Test disabled due to intermittent failure') +% end test_accumulate_sqw11456@gen_sqw_accumulate_sqw_tests_common(obj,varargin{:}); end end diff --git a/_test/test_mex_nomex/test_main_mex.m b/_test/test_mex_nomex/test_main_mex.m index 0b1260f7b8..12261418fe 100644 --- a/_test/test_mex_nomex/test_main_mex.m +++ b/_test/test_mex_nomex/test_main_mex.m @@ -82,6 +82,11 @@ function tearDown(this) urange_step_pix(1,:) = Inf; urange_step_pix(2,:) = -Inf; + hc = hor_config; + current_state = hc.use_mex; + clob = onCleanup(@()set(hc,'use_mex',current_state)); + hc.saveable = false; + %check matlab-part set(hor_config,'use_mex',0,'-buffer'); dummy = sqw(); @@ -114,6 +119,8 @@ function tearDown(this) end % rd =calc_fake_data(this); hc = hor_config; + current_state = hc.use_mex; + clob = onCleanup(@()set(hc,'use_mex',current_state)); hc.saveable = false; % hc.use_mex = false; @@ -136,6 +143,9 @@ function test_calc_proj_options(this) cleanup_obj=onCleanup(@()set(hcf,'use_mex',1)); rd = calc_fake_data(this); + hcf = hor_config; + current_state = hcf.use_mex; + clob = onCleanup(@()set(hcf,'use_mex',current_state)); hcf.saveable=false; hcf.use_mex = 0; [u_to_rlu_matl,urange_matl]=rd.calc_projections(); @@ -184,8 +194,9 @@ function test_recompute_bin_data(this) assertElementsAlmostEqual((4*4)*e,npix); - if ~cur_mex - return + [~,n_errors] = check_horace_mex(); + if n_errors>0 + skipTest('MEX code is broken and can not be used to check against Matlab for recompute_bin_data'); end set(hor_config,'use_mex',true,'threads',1); new_sqw1 = recompute_bin_data_tester(test_sqw); @@ -202,6 +213,9 @@ function test_recompute_bin_data(this) function test_sort_pix(this) % prepare pixels to sort + [cur_mex,log_level,n_threads] = get(hor_config,'use_mex','log_level','threads'); + cleanup_obj=onCleanup(@()set(hor_config,'use_mex',cur_mex,'log_level',log_level,'threads',n_threads)); + pix=ones(9,40000); xs = 9.6:-1:0.6; xp = 0.1:0.5:10; @@ -228,8 +242,9 @@ function test_sort_pix(this) pix2 = sort_pix(pix,ix,npix,'-nomex'); assertElementsAlmostEqual(pix1.data,pix2.data); - if ~get(hor_config,'use_mex') - return + [~,n_errors] = check_horace_mex(); + if n_errors>0 + skipTest('MEX code is broken and can not be used to check against Matlab for sorting the pixels'); end % test mex pix1 = sort_pix(pix,ix,npix,'-force_mex'); @@ -243,7 +258,7 @@ function test_sort_pix(this) end - function profile_sort_pix(this) + function profile_sort_pix(~) xs = 9.99:-0.1:0.01; xp = 0.01:0.1:9.99; [ux,uy,uz,et]=ndgrid(xs,xp,xs,xp); diff --git a/admin/CMakeLists.txt b/admin/CMakeLists.txt index e8daf25cfc..9380765ba5 100644 --- a/admin/CMakeLists.txt +++ b/admin/CMakeLists.txt @@ -9,7 +9,7 @@ configure_file("${Herbert_ON_TEMPLATE}" "${LOCAL_INIT_DIR}/herbert_on.m") configure_file("horace_on.m.template" "${LOCAL_INIT_DIR}/horace_on.m") # Copy Horace worker templates -if(${BUILD_TESTS}) +if(BUILD_TESTING) configure_file("worker_4tests.m.template" "${LOCAL_INIT_DIR}/worker_4tests.m") endif() configure_file("worker_v2.m.template" "${LOCAL_INIT_DIR}/worker_v2.m") diff --git a/admin/horace_install.m b/admin/horace_install.m index f3dcd44a5b..cc8f0a7ae3 100644 --- a/admin/horace_install.m +++ b/admin/horace_install.m @@ -1,5 +1,6 @@ function horace_install(varargin) -%HORACE_INSTALL install an instance of Horace +% Install an instance of Horace at the place, where the Horace package have +% been unpacked. % % >> horace_install() % >> horace_install('herbert_root', /path/to/Herbert) @@ -14,52 +15,91 @@ function horace_install(varargin) HORACE_ON_PLACEHOLDER = '${Horace_CORE}'; HERBERT_ON_PLACEHOLDER = '${Herbert_CORE}'; -install_root = fileparts(mfilename('fullpath')); -opts = parse_args(install_root, varargin{:}); +try % remove from search path any possible previous version of Horace/Herbert + herbert_off(); +catch % ignore errors if the code has not been installed before and script +end % has not been found +try + horace_off(); +catch % ignore errors if the code has not been installed before and script +end % has not been found +% +code_root = fileparts(mfilename('fullpath')); +% is there an old installation present? +old_horace_on = which('horace_on'); +if ~isempty(old_horace_on) + delete(old_horace_on); + use_existing_path = true; + install_root = fileparts(old_horace_on); +else + use_existing_path = false; + install_root= fullfile(code_root,'ISIS'); +end +old_herbert_on = which('herbert_on'); +if ~isempty(old_herbert_on) + delete(old_herbert_on); +end + + +opts = parse_args(code_root, varargin{:}); + +if ~exist(install_root,'dir') + mkdir(install_root); +end +if ~use_existing_path % path have already been modified. Do not create mess + addpath(install_root); + err = savepath(); + if err + userpath = find_userpath(); + warning('HORACE:installation',... + ['Can not save installation-modified pathdef into system-restricted area.',... + ' Saving modified pathdef.m into userpath: %s'],... + userpath); + savepath(fullfile(userpath,'pathdef.m')); + end +end + % Find required files/directories % Do this first before installing any files, so that we know we have everything % before creating any files/directories hor_init_dir = find_directory( ... 'horace_init.m', ... - {fullfile(install_root, 'Horace'), fullfile(opts.horace_root, 'horace_core')} ... -); + {fullfile(code_root, 'Horace'), fullfile(opts.horace_root, 'horace_core')} ... + ); her_init_dir = find_directory( ... 'herbert_init.m', ... - {fullfile(install_root, 'Herbert'), fullfile(opts.herbert_root, 'herbert_core')} ... -); + {fullfile(code_root, 'Herbert'), fullfile(opts.herbert_root, 'herbert_core')} ... + ); horace_on_path = find_file( ... 'horace_on.m.template', ... - {install_root, fullfile(opts.horace_root, 'admin')} ... -); + {code_root, fullfile(opts.horace_root, 'admin')} ... + ); herbert_on_path = find_file( ... 'herbert_on.m.template', ... - {install_root, fullfile(opts.herbert_root, 'admin')} ... -); + {code_root, fullfile(opts.herbert_root, 'admin')} ... + ); worker_path = find_file( ... 'worker_v2.m.template', ... - {install_root, fullfile(opts.horace_root, 'admin')} ... -); - -% Find/create userpath - this is automatically added to Matlab path on launch -user_path = find_userpath(); + {code_root, fullfile(opts.horace_root, 'admin')} ... + ); % Install horace_on install_file( ... horace_on_path, ... - fullfile(user_path, 'horace_on.m'), ... + fullfile(install_root, 'horace_on.m'), ... {HORACE_ON_PLACEHOLDER, HERBERT_ON_PLACEHOLDER}, ... {hor_init_dir, her_init_dir} ... -); + ); % Install herbert_on install_file( ... herbert_on_path, ... - fullfile(user_path, 'herbert_on.m'), ... + fullfile(install_root, 'herbert_on.m'), ... {HERBERT_ON_PLACEHOLDER}, ... {her_init_dir} ... -); + ); % Install worker_v2 script (required by parallel routines) to userpath -install_file(worker_path, fullfile(user_path, 'worker_v2.m')); +install_file(worker_path, fullfile(install_root, 'worker_v2.m')); % Validate the installation validate_function(@herbert_on, @herbert_off); @@ -73,172 +113,171 @@ function horace_install(varargin) % ----------------------------------------------------------------------------- function opts = parse_args(install_root, varargin) - %PARSE_ARGS parse install script options - % - % Use defaults that will work for the common Git checkout set-up, i.e. - % Herbert and Horace cloned into a common directory - % +%PARSE_ARGS parse install script options +% +% Use defaults that will work for the common Git checkout set-up, i.e. +% Herbert and Horace cloned into a common directory +% function validate_path(x, arg_name) validateattributes( ... x, {'string', 'char'}, {'scalartext'}, 'horace_install', arg_name ... - ); + ); end - hor_root_default = fileparts(install_root); - her_root_default = fullfile(fileparts(hor_root_default), 'Herbert'); +hor_root_default = fileparts(install_root); +her_root_default = fullfile(fileparts(hor_root_default), 'Herbert'); - parser = inputParser(); - % Default herbert_root is "/../Herbert" - parser.addParameter( ... - 'herbert_root', ... - her_root_default, ... - @(x) validate_path(x, 'herbert_root') ... +parser = inputParser(); +% Default herbert_root is "/../Herbert" +parser.addParameter( ... + 'herbert_root', ... + her_root_default, ... + @(x) validate_path(x, 'herbert_root') ... ); - % Default horace_root is one directory above this script - parser.addParameter( ... - 'horace_root', ... - hor_root_default, ... - @(x) validate_path(x, 'horace_root') ... +% Default horace_root is one directory above this script +parser.addParameter( ... + 'horace_root', ... + hor_root_default, ... + @(x) validate_path(x, 'horace_root') ... ); - parser.parse(varargin{:}); - opts = parser.Results; +parser.parse(varargin{:}); +opts = parser.Results; end function install_file(source, dest, placeholders, replace_strs) - %INSTALL_FILE copy the given file to the given destination - % if placeholders and replace_strs are given, then replace the string values - % in placeholders with the string at the corresponding index in - % replace_strs. - % - if ~exist('placeholders', 'var') - copy_file(source, dest); - else - file_contents = fileread(source); - for i = 1:numel(placeholders) - file_contents = replace(file_contents, placeholders{i}, replace_strs{i}); - end - write_file(dest, file_contents); +%INSTALL_FILE copy the given file to the given destination +% if placeholders and replace_strs are given, then replace the string values +% in placeholders with the string at the corresponding index in +% replace_strs. +% +if ~exist('placeholders', 'var') + copy_file(source, dest); +else + file_contents = fileread(source); + for i = 1:numel(placeholders) + file_contents = replace(file_contents, placeholders{i}, replace_strs{i}); end + write_file(dest, file_contents); +end end function file_path = find_file(file_name, candidate_dirs) - %FIND_FILE search for the given file name in the candidate directories - % Throw 'HORACE:horace_install:file_not_found' if the file cannot be found. - % - file_dir = ''; - for i = 1:numel(candidate_dirs) - candidate_file_path = fullfile(candidate_dirs{i}, file_name); - if exist(candidate_file_path, 'file') == 2 - file_path = candidate_file_path; - return - end +%FIND_FILE search for the given file name in the candidate directories +% Throw 'HORACE:horace_install:file_not_found' if the file cannot be found. +% +file_dir = ''; +for i = 1:numel(candidate_dirs) + candidate_file_path = fullfile(candidate_dirs{i}, file_name); + if exist(candidate_file_path, 'file') == 2 + file_path = candidate_file_path; + return end - if isempty(file_dir) - error( ... - 'HORACE:horace_install:file_not_found', ... - ['Could not find file ''%s'' in any of the following ' ... - 'candidate paths:\n %s'], ... - file_name, ... - strjoin(candidate_dirs, '\n ') ... +end +if isempty(file_dir) + error( ... + 'HORACE:horace_install:file_not_found', ... + ['Could not find file ''%s'' in any of the following ' ... + 'candidate paths:\n %s'], ... + file_name, ... + strjoin(candidate_dirs, '\n ') ... ); - end end - - -function directory = find_directory(file_name, candidate_dirs) - %FIND_DIRECTORY find the directory that contains the given file name - % in 'candidate_dirs' - % - % Throw 'HORACE:horace_install:file_not_found' if a directory cannot be - % found. - % - directory = fileparts(find_file(file_name, candidate_dirs)); end - function user_path = find_userpath() - %FIND_USERPATH get the Matlab `userpath` - % If the userpath does not exist, create it in the default place - % - % See `help userpath` for more info on Matlab's userpath. - % - user_path = userpath(); - if isempty(user_path) - user_path = create_userpath(); - end +%FIND_USERPATH get the Matlab `userpath` +% If the userpath does not exist, create it in the default place +% +% See `help userpath` for more info on Matlab's userpath. +% +user_path = userpath(); +if isempty(user_path) + user_path = create_userpath(); +end end function user_path = create_userpath() - %CREATE_USERPATH create the Matlab userpath directory in the default place - % - if ispc - user_dir = getenv('USERPROFILE'); - else - user_dir = getenv('HOME'); - end - user_path = fullfile(user_dir, 'Documents', 'MATLAB'); - if ~exist(user_path, 'dir') - [ok, err_msg] = mkdir(user_path); - if ~ok - error( ... - 'HORACE:horace_install:io_error', ... - 'Could not create Matlab userpath directory ''%s'': %s.', ... - user_path, err_msg ... +%CREATE_USERPATH create the Matlab userpath directory in the default place +% +if ispc + user_dir = getenv('USERPROFILE'); +else + user_dir = getenv('HOME'); +end +user_path = fullfile(user_dir, 'Documents', 'MATLAB'); +if ~exist(user_path, 'dir') + [ok, err_msg] = mkdir(user_path); + if ~ok + error( ... + 'HORACE:horace_install:io_error', ... + 'Could not create Matlab userpath directory ''%s'': %s.', ... + user_path, err_msg ... ); - end end - % Now add it to path so we don't need to restart Matlab - addpath(userpath); +end +% Now add it to path so we don't need to restart Matlab +addpath(userpath); +end + + +function directory = find_directory(file_name, candidate_dirs) +%FIND_DIRECTORY find the directory that contains the given file name +% in 'candidate_dirs' +% +% Throw 'HORACE:horace_install:file_not_found' if a directory cannot be +% found. +% +directory = fileparts(find_file(file_name, candidate_dirs)); end function write_file(file_path, contents) - %WRITE_FILE create/overwrite file at the given path with the given text - % - [fid, err_msg] = fopen(file_path, 'w'); - if fid < 0 - error( ... - 'HORACE:horace_install:io_error', ... - 'Could not create file ''%s'': %s.', ... - file_path, err_msg ... +%WRITE_FILE create/overwrite file at the given path with the given text +% +[fid, err_msg] = fopen(file_path, 'w'); +if fid < 0 + error( ... + 'HORACE:horace_install:io_error', ... + 'Could not create file ''%s'': %s.', ... + file_path, err_msg ... ); - end - cleanup_fid = onCleanup(@() fclose(fid)); - fprintf(fid, '%s', contents); +end +cleanup_fid = onCleanup(@() fclose(fid)); +fprintf(fid, '%s', contents); end function copy_file(source, dest) - %COPY_FILE copy the file 'source' to 'dest', throw an error if unsuccessful - % - [ok, message] = copyfile(source, dest); - if ~ok - error( ... - 'HORACE:horace_install:io_error', ... - 'Could not copy file ''%s'' to ''%s'': %s.', ... - source, dest, message ... +%COPY_FILE copy the file 'source' to 'dest', throw an error if unsuccessful +% +[ok, message] = copyfile(source, dest); +if ~ok + error( ... + 'HORACE:horace_install:io_error', ... + 'Could not copy file ''%s'' to ''%s'': %s.', ... + source, dest, message ... ); - end +end end function validate_function(func, post_func) - %VALIDATE_FUNCTIONS validate the given function can ve called - % The second argument is called after the first, with the intended purpose - % being clean up. - % - try - func(); - catch ME - error( ... - 'HORACE:horace_install:failure', ... - 'Installation failed, error calling function: %s', ... - ME.message ... +%VALIDATE_FUNCTIONS validate the given function can ve called +% The second argument is called after the first, with the intended purpose +% being clean up. +% +try + func(); +catch ME + error( ... + 'HORACE:horace_install:failure', ... + 'Installation failed, error calling function: %s', ... + ME.message ... ); - end - post_func(); +end +post_func(); end diff --git a/admin/horace_on.m.template b/admin/horace_on.m.template index 46ada7faf9..6f70cd2e34 100644 --- a/admin/horace_on.m.template +++ b/admin/horace_on.m.template @@ -4,8 +4,6 @@ function path=horace_on(non_default_path) % horace_on(non_default_horace_path) -- calls Horace with non-default Horace folder; % % -% $Revision:: 1759 ($Date:: 2020-02-10 16:06:00 +0000 (Mon, 10 Feb 2020) $) -% % default_horace_path = '${Horace_CORE}'; default_herbert_path = '${Herbert_CORE}'; diff --git a/admin/pCode_Horace_kit.m b/admin/pCode_Horace_kit.m index 9d7ca243e6..8eea7ea8af 100644 --- a/admin/pCode_Horace_kit.m +++ b/admin/pCode_Horace_kit.m @@ -144,4 +144,3 @@ function directoryRecurse(directory, function_pointer, varargin) % execute the callback with any supplied parameters. % Due to recursion will execute in a bottom up manner function_pointer(directory, varargin{:}); - diff --git a/admin/version.h.template b/admin/version.h.template index c48280bcf6..ac2f71bd4a 100644 --- a/admin/version.h.template +++ b/admin/version.h.template @@ -1,4 +1,5 @@ -/* ${Herbert_AUTO_GENERATED_FILE_WARNING} */ +/* ${Horace_AUTO_GENERATED_FILE_WARNING} */ +#pragma once namespace Horace { constexpr char VERSION[] = "${Horace_SHORT_VERSION}"; diff --git a/cmake/PACE_Docs.cmake b/cmake/PACE_Docs.cmake new file mode 100644 index 0000000000..ead1c7dab8 --- /dev/null +++ b/cmake/PACE_Docs.cmake @@ -0,0 +1,143 @@ +#[=======================================================================[.rst: +PACE_Docs +----------------- + +Build Horace user documentation as either HTML pages or a LaTeX manual + +Variables required by the module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``${Horace_ROOT}`` +This is provided by the main CMakeLists.txt + +Variables defined by the module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``Horace_DOCS_WORK_DIR`` +Root work directory, docs will be built in ``${Horace_DOCS_WORK_DIR}/(html|latex)`` + +``Horace_DOCS_PACK_OUTPUT`` +Output filename (including extension) for compressed docs file +e.g. ``${CMAKE_CURRENT_BINARY_DIR}/docs.zip`` + +``Horace_MANUAL_OUTPUT_DIR`` +Output directory where compiled LaTeX PDF is placed + +Targets defined by the module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``docs`` +Build a HTML webpage variant of the user documentation in ``Horace_DOCS_OUTPUT_DIR`` + +``docs-pack`` +Build HTML docs and compress + +``manual`` +Build a LaTeX PDF manual of the user documentation + +#]=======================================================================] + +set(Horace_DOCS_ROOT_DIR "${Horace_ROOT}/documentation/user_docs") +set(Horace_DOCS_SOURCE_DIR "${Horace_DOCS_ROOT_DIR}/docs") +set(Horace_DOCS_WORK_DIR "${Horace_DOCS_ROOT_DIR}/build" CACHE FILEPATH "Directory to build docs") +set(Horace_DOCS_OUTPUT_DIR "${Horace_DOCS_WORK_DIR}/html") +set(Horace_MANUAL_WORK_DIR "${Horace_DOCS_WORK_DIR}/latex") +set(Horace_MANUAL_OUTPUT_DIR "${Horace_DOCS_WORK_DIR}/latex" CACHE FILEPATH "Directory to put compiled LaTeX manual") +if (WIN32) + set(Horace_DOCS_PACK_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/docs.zip" CACHE FILEPATH "File to store packed HTML documentation") +else() + set(Horace_DOCS_PACK_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/docs.tar.gz" CACHE FILEPATH "File to store packed HTML documentation") +endif() + +find_package(Python3) +find_program(sphinx-build NAMES sphinx-build HINTS ${Horace_DOCS_ROOT_DIR}) +find_program(pdflatex NAMES pdflatex) +find_program(latexmk NAMES latexmk) + +execute_process(COMMAND ${Python3_EXECUTABLE} ${sphinx-build} ERROR_VARIABLE test) +string(REGEX MATCH "ModuleNotFoundError" sphinx-build-failed ${test}) + +if (NOT sphinx-build-failed) + add_custom_target(docs + COMMENT "Building HTML user documentation" + BYPRODUCTS "${Horace_DOCS_OUTPUT_DIR}/*" + COMMAND ${Python3_EXECUTABLE} ${sphinx-build} -b html "${Horace_DOCS_SOURCE_DIR}" "${Horace_DOCS_OUTPUT_DIR}" ${SPHINX_OPTS} + -D "release=${${PROJECT_NAME}_SHORT_VERSION}" + -D "version=${${PROJECT_NAME}_SHORT_VERSION}" + ) + + if (WIN32) + + add_custom_command(TARGET docs POST_BUILD + COMMAND powershell -ExecutionPolicy Bypass -command + "Foreach($f in Get-ChildItem -Path '${Horace_DOCS_OUTPUT_DIR}' -Filter *.html) { \ + (Get-Content $f.FullName) | Where-Object {$_ -notmatch '\\[NULL\\]'} | Set-Content $f.FullName \ + }" + DEPENDS build-docs + VERBATIM + ) + + + add_custom_target(docs-pack + COMMENT "Zipping HTML documentation to ${Horace_DOCS_PACK_OUTPUT}" + COMMAND powershell -ExecutionPolicy Bypass -command + "Compress-Archive -Path \"${Horace_DOCS_OUTPUT_DIR}/*\" -DestinationPath \"${Horace_DOCS_PACK_OUTPUT}\"" + DEPENDS docs + ) + + else() + add_custom_command(TARGET docs POST_BUILD + COMMAND sed -i -r "/\[NULL\]/d" "${Horace_DOCS_OUTPUT_DIR}/*html" + DEPENDS build-docs + ) + + add_custom_target(docs-pack + COMMENT "Tarring HTML documentation to ${Horace_DOCS_PACK_OUTPUT}" + COMMAND tar -czf "${Horace_DOCS_PACK_OUTPUT}" "*" + WORKING_DIRECTORY "${Horace_DOCS_OUTPUT_DIR}" + DEPENDS docs + ) + + endif() + + if (pdflatex AND latexmk) + add_custom_command(OUTPUT horace.tex + COMMAND ${Python3_EXECUTABLE} ${sphinx-build} -b latex "${Horace_DOCS_SOURCE_DIR}" "${Horace_MANUAL_WORK_DIR}" ${SPHINX_OPTS} + -D "release=${${PROJECT_NAME}_SHORT_VERSION}" + -D "version=${${PROJECT_NAME}_SHORT_VERSION}" + WORKING_DIRECTORY "${Horace_DOCS_ROOT_DIR}" + ) + + add_custom_command(OUTPUT horace.pdf + COMMAND latexmk -pdf -ps- -dvi- -silent -f -r "${Horace_MANUAL_WORK_DIR}/latexmkrc" "${Horace_MANUAL_WORK_DIR}/horace.tex" + # Copy finished manual to output dir + COMMAND cmake -E rename "${Horace_MANUAL_WORK_DIR}/horace.pdf" "${Horace_MANUAL_OUTPUT_DIR}/horace.pdf" + DEPENDS horace.tex + BYPRODUCTS "${Horace_MANUAL_OUTPUT_DIR}/horace.pdf" + WORKING_DIRECTORY "${Horace_MANUAL_WORK_DIR}" + ) + + add_custom_target(manual + COMMENT "Building user manual - Will produce error 12 until docs fixed" + DEPENDS horace.pdf + ) + + else() + add_custom_target(manual + COMMENT "LaTeX manual requires latexmk and pdflatex to build" + ) + endif() + +else() + add_custom_target(docs + COMMENT "HTML Docs require sphinx and sphinx-rtd-theme to build" + ) + + add_custom_target(docs-pack + COMMENT "HTML Docs require sphinx and sphinx-rtd-theme to build" + ) + + add_custom_target(manual + COMMENT "LaTeX manual require sphinx and sphinx-rtd-theme to build" + ) +endif() diff --git a/horace_core/GUI/horace.m b/horace_core/GUI/horace.m index 2f2e71c666..29cc142517 100644 --- a/horace_core/GUI/horace.m +++ b/horace_core/GUI/horace.m @@ -43,6 +43,12 @@ end % End initialization code - DO NOT EDIT +function is_sqw_obj = is_sqw_dnd(element_class) +% Returns true if the test element, from evalin, is the name of a concrete SQW class type +is_sqw_obj = strcmp(element_class,'d1d') || strcmp(element_class,'d2d') ||... + strcmp(element_class,'d3d') || strcmp(element_class,'d4d') ||... + strcmp(element_class,'sqw'); + % --- Executes just before horace is made visible. function horace_OpeningFcn(hObject, eventdata, handles, varargin) @@ -76,13 +82,13 @@ function horace_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw') + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -195,13 +201,13 @@ function obj_list_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -248,7 +254,7 @@ function obj_list_popupmenu_Callback(hObject, eventdata, handles) [title_main, title_pax, title_iax, display_pax, display_iax, energy_axis] = plot_titles (sqw(w_in)); %Get the info about the object: -if is_sqw_type(sqw(w_in)) +if has_pixels(w_in) getit=get(w_in); gg=getit.data; else @@ -359,7 +365,7 @@ function plot_pushbutton_Callback(hObject, eventdata, handles) mess_initialise=['Plotting started at ',timestring,'...']; drawnow -if isfield(handles,'w_in'); +if isfield(handles,'w_in') win=handles.w_in; if numel(win)~=1 mess='No plot performed - object selected is an array of Horace objects'; @@ -494,13 +500,13 @@ function binary_ops_pushbutton_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -552,7 +558,7 @@ function overplot_pushbutton_Callback(hObject, eventdata, handles) mess_initialise=['Overplotting started at ',timestring,'...']; drawnow -if isfield(handles,'w_in'); +if isfield(handles,'w_in') win=handles.w_in; if numel(win)~=1 mess='No plot-over performed - object selected is an array of Horace objects'; @@ -931,13 +937,13 @@ function replicate_pushbutton_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class); cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -999,13 +1005,13 @@ function combine_pushbutton_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -1088,13 +1094,13 @@ function rebin_pushbutton_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -1432,10 +1438,10 @@ function Cut_do_cut_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(a1,'['); s2=strfind(a1,']'); if isempty(s1) && isempty(s2) - a1new=strread(a1,'%f','delimiter',','); + a1new=textscan(a1,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a1=a1(s1+1:s2-1); - a1new=strread(a1,'%f','delimiter',','); + a1new=textscan(a1,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -1445,10 +1451,10 @@ function Cut_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a2,'['); s2=strfind(a2,']'); if isempty(s1) && isempty(s2) - a2new=strread(a2,'%f','delimiter',','); + a2new=textscan(a2,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a2=a2(s1+1:s2-1); - a2new=strread(a2,'%f','delimiter',','); + a2new=textscan(a2,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -1458,10 +1464,10 @@ function Cut_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a3,'['); s2=strfind(a3,']'); if isempty(s1) && isempty(s2) - a3new=strread(a3,'%f','delimiter',','); + a3new=textscan(a3,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a3=a3(s1+1:s2-1); - a3new=strread(a3,'%f','delimiter',','); + a3new=textscan(a3,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -1471,10 +1477,10 @@ function Cut_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a4,'['); s2=strfind(a4,']'); if isempty(s1) && isempty(s2) - a4new=strread(a4,'%f','delimiter',','); + a4new=textscan(a4,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a4=a4(s1+1:s2-1); - a4new=strread(a4,'%f','delimiter',','); + a4new=textscan(a4,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -1666,20 +1672,7 @@ function Cut_do_cut_pushbutton_Callback(hObject, eventdata, handles) return; end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** cut failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** cut failed at: ') end @@ -1713,7 +1706,7 @@ function Rebin_template_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Rebin_template_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Rebin_lostephi_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -1732,13 +1725,13 @@ function Rebin_template_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -1802,7 +1795,7 @@ function Rebin_lostephi_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Rebin_lostephi_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Rebin_template_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -1975,7 +1968,7 @@ function Rebin_rebin_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(lostephi,'['); s2=strfind(lostephi,']'); if isempty(s1) && isempty(s2) - lostephinew{1}=strread(lostephi,'%f','delimiter',','); + lostephinew{1}=textscan(lostephi,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) if length(s1)~=length(s2) mess1='Ensure manual rebinning is of form [lo1,step1,hi1], [step], or []'; @@ -1991,7 +1984,7 @@ function Rebin_rebin_pushbutton_Callback(hObject, eventdata, handles) end for i=1:numel(s1) lostephi_tmp=lostephi(s1(i)+1:s2(i)-1); - lostephinew{i}=strread(lostephi_tmp,'%f','delimiter',','); + lostephinew{i}=textscan(lostephi_tmp,'%f','delimiter',','); end else mess1='Ensure manual rebinning is of form [lo1,step1,hi1], [step], or []'; @@ -2116,20 +2109,7 @@ function Rebin_rebin_pushbutton_Callback(hObject, eventdata, handles) end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** rebin failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** rebin failed at: ') end @@ -2147,7 +2127,7 @@ function Sym_midpoint_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Sym_midpoint_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Sym_plane_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -2185,7 +2165,7 @@ function Sym_plane_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Sym_plane_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Sym_midpoint_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -2381,10 +2361,10 @@ function Sym_symmetrise_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(midpoint,'['); s2=strfind(midpoint,']'); if isempty(s1) && isempty(s2) - midpointnew=strread(midpoint,'%f','delimiter',','); + midpointnew=textscan(midpoint,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) midpoint=midpoint(s1+1:s2-1); - midpointnew=strread(midpoint,'%f','delimiter',','); + midpointnew=textscan(midpoint,'%f','delimiter',','); else mess1='Ensure midpoint is of form [val] for 1d, or [val_x,val_y] for 2d'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -2417,10 +2397,10 @@ function Sym_symmetrise_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(v1,'['); s2=strfind(v1,']'); if isempty(s1) && isempty(s2) - v1new=strread(v1,'%f','delimiter',','); + v1new=textscan(v1,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) v1=v1(s1+1:s2-1); - v1new=strread(v1,'%f','delimiter',','); + v1new=textscan(v1,'%f','delimiter',','); else mess1='Ensure v1 is of form [a,b,c]'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -2439,10 +2419,10 @@ function Sym_symmetrise_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(v2,'['); s2=strfind(v2,']'); if isempty(s1) && isempty(s2) - v2new=strread(v2,'%f','delimiter',','); + v2new=textscan(v2,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) v2=v2(s1+1:s2-1); - v2new=strread(v2,'%f','delimiter',','); + v2new=textscan(v2,'%f','delimiter',','); else mess1='Ensure v2 is of form [a,b,c]'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -2463,10 +2443,10 @@ function Sym_symmetrise_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(v3,'['); s2=strfind(v3,']'); if isempty(s1) && isempty(s2) - v1new=strread(v3,'%f','delimiter',','); + v1new=textscan(v3,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) v3=v3(s1+1:s2-1); - v3new=strread(v3,'%f','delimiter',','); + v3new=textscan(v3,'%f','delimiter',','); else mess1='Ensure v3 is of form [a,b,c]'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -2576,20 +2556,7 @@ function Sym_symmetrise_pushbutton_Callback(hObject, eventdata, handles) end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** symmetrise failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** symmetrise failed at: ') end @@ -2616,13 +2583,13 @@ function Comb_obj2_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -2846,10 +2813,10 @@ function Comb_combine_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(tol,'['); s2=strfind(tol,']'); if isempty(s1) && isempty(s2) - tolnew=strread(tol,'%f','delimiter',','); + tolnew=textscan(tol,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) tol=tol(s1+1:s2-1); - tolnew=strread(tol,'%f','delimiter',','); + tolnew=textscan(tol,'%f','delimiter',','); else mess1='Ensure tolerance is of form [tol1,tol2,...], depending on the dimensionality'; set(handles.message_info_text,'String',mess1); @@ -2952,20 +2919,7 @@ function Comb_combine_pushbutton_Callback(hObject, eventdata, handles) end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** combine failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** combine failed at: ') end @@ -3016,13 +2970,13 @@ function Rep_obj2_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -3264,20 +3218,7 @@ function Rep_replicate_pushbutton_Callback(hObject, eventdata, handles) end end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** replication failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** replication failed at: ') end if ~sqw_flag @@ -3482,20 +3423,7 @@ function Bose_bose_pushbutton_Callback(hObject, eventdata, handles) save(out,outfilename); end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** bose_correction failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** bose_correction failed at: ') end assignin('base',outobjname,out); @@ -3623,13 +3551,13 @@ function Bin_obj2_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -3714,7 +3642,7 @@ function Bin_obj_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Bin_obj_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Bin_number_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -3729,7 +3657,7 @@ function Bin_number_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Bin_number_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Bin_obj_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -3914,21 +3842,7 @@ function Bin_operate_pushbutton_Callback(hObject, eventdata, handles) save(out,outfilename); end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** Formatting error? Unit operation failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); - + report_error(the_err,'**** Formatting error? Unit operation failed at: ') end @@ -4131,21 +4045,7 @@ function Unary_operate_pushbutton_Callback(hObject, eventdata, handles) save(out,outfilename); end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** unit operation failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); - + report_error(the_err,'**** unit operation failed at: ') end assignin('base',outobjname,out); @@ -4163,7 +4063,7 @@ function Cutfile_rlu_1_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_rlu_1_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_ang_1_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4178,7 +4078,7 @@ function Cutfile_ang_1_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_ang_1_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_rlu_1_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4193,7 +4093,7 @@ function Cutfile_rlu_2_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_rlu_2_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_ang_2_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4208,7 +4108,7 @@ function Cutfile_ang_2_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_ang_2_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_rlu_2_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4223,7 +4123,7 @@ function Cutfile_rlu_3_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_rlu_3_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_ang_3_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4237,7 +4137,7 @@ function Cutfile_ang_3_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_ang_3_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_rlu_3_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -4541,8 +4441,8 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) return; else try - u=strread(u,'%f','delimiter',','); - v=strread(v,'%f','delimiter',','); + u=textscan(u,'%f','delimiter',','); + v=textscan(v,'%f','delimiter',','); if numel(u)~=3 || numel(v)~=3 mess='u and v must comprise 3 numbers specifying h, k, and l of projection axes'; set(handles.message_info_text,'String',char({mess_initialise,mess})); @@ -4550,7 +4450,7 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) return; end if ~isempty(w) - w=strread(w,'%f','delimiter',','); + w=textscan(w,'%f','delimiter',','); end catch mess='Check the format of the vectors u, v, and/or w. They must be numeric with 3 elements'; @@ -4601,10 +4501,10 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(a1,'['); s2=strfind(a1,']'); if isempty(s1) && isempty(s2) - a1new=strread(a1,'%f','delimiter',','); + a1new=textscan(a1,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a1=a1(s1+1:s2-1); - a1new=strread(a1,'%f','delimiter',','); + a1new=textscan(a1,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -4614,10 +4514,10 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a2,'['); s2=strfind(a2,']'); if isempty(s1) && isempty(s2) - a2new=strread(a2,'%f','delimiter',','); + a2new=textscan(a2,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a2=a2(s1+1:s2-1); - a2new=strread(a2,'%f','delimiter',','); + a2new=textscan(a2,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -4627,10 +4527,10 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a3,'['); s2=strfind(a3,']'); if isempty(s1) && isempty(s2) - a3new=strread(a3,'%f','delimiter',','); + a3new=textscan(a3,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a3=a3(s1+1:s2-1); - a3new=strread(a3,'%f','delimiter',','); + a3new=textscan(a3,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -4640,10 +4540,10 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(a4,'['); s2=strfind(a4,']'); if isempty(s1) && isempty(s2) - a4new=strread(a4,'%f','delimiter',','); + a4new=textscan(a4,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) a4=a4(s1+1:s2-1); - a4new=strread(a4,'%f','delimiter',','); + a4new=textscan(a4,'%f','delimiter',','); else mess1=' Ensure binning values are entered if the form of lo,step,hi / step / lo,hi '; mess2='NB: enter 0 if you wish to use intrinsic binning and entire data range along axis'; @@ -4720,20 +4620,7 @@ function Cutfile_do_cut_pushbutton_Callback(hObject, eventdata, handles) a2,'],[',a3,'],[',a4,'],''',outfilename,''');']); end catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** Invalid inputs? Cut from file failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_text_field,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_error(the_err,'**** Invalid inputs? Cut from file failed at: ') end assignin('base',outobjname,out); @@ -4749,13 +4636,13 @@ function refresh_list_pushbutton_Callback(hObject, eventdata, handles) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); - if strcmp(test_el.class,'d1d') || strcmp(test_el.class,'d2d') ||... - strcmp(test_el.class,'d3d') || strcmp(test_el.class,'d4d') ||... - strcmp(test_el.class,'sqw'); + if is_sqw_dnd(test_el.class) cellofnames{counter}=test_el.name; cellofvars{counter}=[test_el.name,'.........',test_el.class]; counter=counter+1; @@ -4816,7 +4703,7 @@ function smoothplot_pushbutton_Callback(hObject, eventdata, handles) mess_initialise=['Smooth plotting started at ',timestring,'...']; drawnow -if isfield(handles,'w_in'); +if isfield(handles,'w_in') win=handles.w_in; if numel(win)~=1 mess='No plot performed - object selected is an array of Horace objects'; @@ -5346,10 +5233,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(u,'['); s2=strfind(u,']'); if isempty(s1) && isempty(s2) - unew=strread(u,'%f','delimiter',','); + unew=textscan(u,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) u=u(s1+1:s2-1); - unew=strread(u,'%f','delimiter',','); + unew=textscan(u,'%f','delimiter',','); else mess1='Ensure u is a 3-element vector with comma-separated elements'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5358,10 +5245,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(v,'['); s2=strfind(v,']'); if isempty(s1) && isempty(s2) - vnew=strread(v,'%f','delimiter',','); + vnew=textscan(v,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) v=v(s1+1:s2-1); - vnew=strread(v,'%f','delimiter',','); + vnew=textscan(v,'%f','delimiter',','); else mess1='Ensure v is a 3-element vector with comma-separated elements'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5370,10 +5257,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(efix,'['); s2=strfind(efix,']'); if isempty(s1) && isempty(s2) - efixnew=strread(efix,'%f','delimiter',','); + efixnew=textscan(efix,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) efix=efix(s1+1:s2-1); - efixnew=strread(efix,'%f','delimiter',','); + efixnew=textscan(efix,'%f','delimiter',','); else mess1='Ensure incident energy is a single number'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5382,10 +5269,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(alatt,'['); s2=strfind(alatt,']'); if isempty(s1) && isempty(s2) - alattnew=strread(alatt,'%f','delimiter',','); + alattnew=textscan(alatt,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) alatt=alatt(s1+1:s2-1); - alattnew=strread(alatt,'%f','delimiter',','); + alattnew=textscan(alatt,'%f','delimiter',','); else mess1='Ensure lattice parameters are a 3-element vector with comma-separated elements'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5394,10 +5281,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(angdeg,'['); s2=strfind(angdeg,']'); if isempty(s1) && isempty(s2) - angdegnew=strread(angdeg,'%f','delimiter',','); + angdegnew=textscan(angdeg,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) angdeg=angdeg(s1+1:s2-1); - angdegnew=strread(angdeg,'%f','delimiter',','); + angdegnew=textscan(angdeg,'%f','delimiter',','); else mess1='Ensure lattice angles are a 3-element vector with comma-separated elements'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5406,10 +5293,10 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) end s1=strfind(offsets,'['); s2=strfind(offsets,']'); if isempty(s1) && isempty(s2) - offsetsnew=strread(offsets,'%f','delimiter',','); + offsetsnew=textscan(offsets,'%f','delimiter',','); elseif ~isempty(s1) && ~isempty(s2) offsets=offsets(s1+1:s2-1); - offsetsnew=strread(offsets,'%f','delimiter',','); + offsetsnew=textscan(offsets,'%f','delimiter',','); else mess1='Ensure offset angles are a 4-element vector with comma-separated elements'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5445,7 +5332,7 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) emode=1; elseif strcmp(handles.gen_emode,'Indirect') emode=2; - elseif strcmp(handles.gen_emode,'Diffraction'); + elseif strcmp(handles.gen_emode,'Diffraction') emode=0; else mess1='Select a spectrometer geometry'; @@ -5465,6 +5352,7 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) %also ensure that every spe file has an associated value of psi. spe_psi_list=get(handles.gen_sqw_listbox,'String'); %convert to cell array: +spe_psi_cell = cell(size(spe_psi_list,1), 1); for i=1:size(spe_psi_list,1) spe_psi_cell{i}=strtrim(spe_psi_list(i,:));%get rid of leading and trailing white space end @@ -5503,20 +5391,7 @@ function gen_sqw_run_pushbutton_Callback(hObject, eventdata, handles) set(handles.message_info_text,'String',char({mess_initialise,mess1,mess2})); guidata(gcbo,handles); catch the_err - err = {sprintf('**** %s',mess_initialise),... - sprintf('**** Error %s Message: %s',... - the_err.identifier,the_err.message),... - '**** gen_sqw failed at: '}; - stack_depth = numel(the_err.stack); - for i=stack_depth-3:-1:1 - err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... - the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); - end - - set(handles.message_info_text,'String',char(err)); - guidata(gcbo,handles); - - rethrow(the_err); + report_erro(the_err,'**** gen_sqw failed at: ') end @@ -5554,10 +5429,10 @@ function gen_sqw_refresh_pushbutton_Callback(hObject, eventdata, handles) %must strip out square brackets, if user has inserted them: s1=strfind(psi_string,'['); s2=strfind(psi_string,']'); if isempty(s1) && isempty(s2) - psinew=strread(psi_string,'%s'); + psinew=textscan(psi_string,'%s'); elseif ~isempty(s1) && ~isempty(s2) psi_string=psi_string(s1+1:s2-1); - psinew=strread(psi_string,'%s'); + psinew=textscan(psi_string,'%s'); else mess1='check formatting of psi input - must be in form of a Matlab vector'; set(handles.message_info_text,'String',char({mess_initialise,mess1})); @@ -5890,7 +5765,7 @@ function Cutfile_orthaxes_radiobutton_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of Cutfile_orthaxes_radiobutton button_state=get(hObject,'Value'); -if button_state==get(hObject,'Max');%button is pressed +if button_state==get(hObject,'Max') %button is pressed set(handles.Cutfile_nonorth_axes_radiobutton,'Value',0); end guidata(gcbo, handles); @@ -5921,3 +5796,19 @@ function Cutfile_nonorth_axes_radiobutton_Callback(hObject, eventdata, handles) % -------------------------------------------------------------------- +function report_error(the_err,err_info) +err = {sprintf('**** %s',mess_initialise),... + sprintf('**** Error %s Message: %s',... + the_err.identifier,the_err.message),... + err_info}; +stack_depth = numel(the_err.stack); +for i=stack_depth-3:-1:1 + err{end+1} = sprintf('*** Row: %d, function: %20s file: %s',... + the_err.stack(i).line,the_err.stack(i).name,the_err.stack(i).file); +end + +set(handles.message_text_field,'String',char(err)); +guidata(gcbo,handles); + +rethrow(the_err); + diff --git a/horace_core/GUI/horace_fitting.m b/horace_core/GUI/horace_fitting.m index b269d573e3..e6c1e1914a 100644 --- a/horace_core/GUI/horace_fitting.m +++ b/horace_core/GUI/horace_fitting.m @@ -66,7 +66,9 @@ function horace_fitting_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); @@ -135,7 +137,9 @@ function obj_list_popupmenu_Callback(hObject, eventdata, handles) guidata(gcbo,handles); drawnow; % -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); @@ -206,7 +210,10 @@ function refresh_list_pushbutton_Callback(hObject, eventdata, handles) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) -vars = evalin('base','whos');%gives a structure array with all of the workspace variables in it + +% get a structure array with all of the workspace variables in it +% contains concrete name (.class) and variable name (.name) +vars = evalin('base','whos'); counter=1; for i=1:numel(vars) test_el=vars(i); @@ -392,7 +399,7 @@ function plot_pushbutton_Callback(hObject, eventdata, handles) flag=0; end -if isfield(handles,'w_in'); +if isfield(handles,'w_in') if flag==0 win=handles.w_in; if numel(win)~=1 @@ -678,20 +685,20 @@ function fit_pushbutton_Callback(hObject, eventdata, handles) x2array=str2num(x2list); bgon=strcmp(get(handles.background_edit,'Enable'),'on'); -slopeon=strcmp(get(handles.bgslope_edit,'Enable'),'on');; +slopeon=strcmp(get(handles.bgslope_edit,'Enable'),'on'); x2on=strcmp(get(handles.bgx2_edit,'Enable'),'on'); -if (isempty(constarray) & bgon) || (any(isnan(constarray)) & bgon) +if (isempty(constarray) && bgon) || (any(isnan(constarray)) && bgon) mess='Background must be a single number -- no fitting performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); return; -elseif (isempty(slopearray) & slopeon) || (any(isnan(slopearray)) & slopeon) +elseif (isempty(slopearray) && slopeon) || (any(isnan(slopearray)) && slopeon) mess='Slope must be a single number -- no fitting performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); return; -elseif (isempty(x2array) & x2on) || (any(isnan(x2array)) & x2on) +elseif (isempty(x2array) && x2on) || (any(isnan(x2array)) && x2on) mess='x^2 coefficient must be a single number -- no fitting performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); @@ -1136,20 +1143,20 @@ function simulate_pushbutton_Callback(hObject, eventdata, handles) x2array=str2num(x2list); bgon=strcmp(get(handles.background_edit,'Enable'),'on'); -slopeon=strcmp(get(handles.bgslope_edit,'Enable'),'on');; +slopeon=strcmp(get(handles.bgslope_edit,'Enable'),'on'); x2on=strcmp(get(handles.bgx2_edit,'Enable'),'on'); -if (isempty(constarray) & bgon) || (any(isnan(constarray)) & bgon) +if (isempty(constarray) && bgon) || (any(isnan(constarray)) && bgon) mess='Background must be a single number -- no simulation performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); return; -elseif (isempty(slopearray) & slopeon) || (any(isnan(slopearray)) & slopeon) +elseif (isempty(slopearray) && slopeon) || (any(isnan(slopearray)) && slopeon) mess='Slope must be a single number -- no simulation performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); return; -elseif (isempty(x2array) & x2on) || (any(isnan(x2array)) & x2on) +elseif (isempty(x2array) && x2on) || (any(isnan(x2array)) && x2on) mess='x^2 coefficient must be a single number -- no simulation performed'; set(handles.message_text_field,'String',char({mess_initialise,mess})); guidata(gcbo,handles); diff --git a/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/fit.m b/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/fit.m index cf78d40bce..88946d9086 100644 --- a/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/fit.m +++ b/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/fit.m @@ -150,7 +150,7 @@ obj_tmp.wrapfun.p_wrap = append_args (obj_tmp.wrapfun.p_wrap, obj.mc_contributions, obj.mc_points, xtal, modshape); % Perform fit -[data_out, fitdata, ok, mess] = fit@mfclass (obj_tmp, varargin{:}); +[data_out, fitdata] = fit@mfclass (obj_tmp, varargin{:}); % Extract crystal or moderator refinement parameters (if any) in a useful form if is_refine_crystal diff --git a/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/simulate.m b/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/simulate.m index 0da64f03b7..6713c184eb 100644 --- a/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/simulate.m +++ b/horace_core/Tobyfit/Tobyfit/@mfclass_tobyfit/simulate.m @@ -1,4 +1,4 @@ -function [data_out, calcdata, ok, mess] = simulate (obj, varargin) +function [data_out, calcdata] = simulate (obj, varargin) % Perform a simulation of the data using the current functions and parameter values % % Return calculated sum of foreground and background: @@ -100,4 +100,4 @@ obj_tmp.wrapfun.p_wrap = append_args (obj_tmp.wrapfun.p_wrap, obj.mc_contributions, obj.mc_points, [], []); % Perform simulation -[data_out, calcdata, ok, mess] = simulate@mfclass (obj_tmp, varargin{:}); +[data_out, calcdata] = simulate@mfclass (obj_tmp, varargin{:}); diff --git a/horace_core/admin/cache.m b/horace_core/admin/cache.m index 3af140972d..0823f7ba94 100644 --- a/horace_core/admin/cache.m +++ b/horace_core/admin/cache.m @@ -13,7 +13,6 @@ function cache(filename) % to have full information and control over the caching process. % % -% $Revision:: 1759 ($Date:: 2020-02-10 16:06:00 +0000 (Mon, 10 Feb 2020) $) % if ~isunix warning('CACHE:invalid_os',... @@ -34,4 +33,6 @@ function cache(filename) disp('*** to observe the progress of the caching. ***'); disp('******************************************************************************************'); -system(sprintf('python %s %s &',fullfile(script_location,'cache.py'),filename),'-echo');; \ No newline at end of file +system(sprintf('python %s %s &',fullfile(script_location,'cache.py'),filename),'-echo'); + +end diff --git a/horace_core/algorithms/accumulate_sqw.m b/horace_core/algorithms/accumulate_sqw.m index 92ac691e18..e347250fa6 100644 --- a/horace_core/algorithms/accumulate_sqw.m +++ b/horace_core/algorithms/accumulate_sqw.m @@ -6,10 +6,10 @@ % The standard way to use accumulate_sqw is to pass the file names and parameters for % all the runs that are *anticipated* to be combined, but might not yet exist. Initially % call with the keyword 'clean' to force a fresh sqw file to be created: -% +% % >> accumulate_sqw (spe_file, par_file, sqw_file, efix, emode, alatt, angdeg,... % u, v, psi, omega, dpsi, gl, gs, 'clean') -% +% % As the experiment continues, subsequent calls to accumulate_sqw can be made with the % same argument list, apart from removing the keyword 'clean'. A check is made in the % function to determine which of the spe files have already been accumulated to the sqw file @@ -37,7 +37,7 @@ % ----------------------------------------------------- % Include instrument and sample information: % -% >> accumulate_sqw (..., instrument, sample,...) +% >> accumulate_sqw (..., instrument, sample,...) % % If the sqw file does not yet exist, or you specify 'clean', you can give fix % the grid and data range: @@ -49,7 +49,7 @@ % --------------------------- % >> [tmp_file,grid_size,urange] = accumulate_sqw (...) % -% +% % Notes % ----- % The goal of accumulate_spe is to allow you to create an sqw file which has a data @@ -60,7 +60,7 @@ % been created are accumulated to the sqw file, and any that already exist in the sqw % file are skipped. That is, the original call to accumulate_sqw simply adds newly % create spe files. You can change any of the input arguments on the later call; any -% runs that were not in the original call will not be accumulated to the sqw file - +% runs that were not in the original call will not be accumulated to the sqw file - % but any data tha is outside the data range of the sqw file will be lost. % % @@ -95,7 +95,7 @@ % sample Structure or object containing sample geometry information [scalar or array length nfile] % % Optional keyword arguments: (can be used singly or together) -% 'clean' Create the sqw file from fresh. It is possible to get confused about what +% 'clean' Create the sqw file from fresh. It is possible to get confused about what % data has been included in an sqw file if it is built up slowly over % an experiment. Use this option to start afresh. % @@ -140,4 +140,3 @@ if nargout==0 clear tmp_file grid_size urange end - diff --git a/horace_core/algorithms/gen_sqw.m b/horace_core/algorithms/gen_sqw.m index 481739bfd0..56780d1c2b 100644 --- a/horace_core/algorithms/gen_sqw.m +++ b/horace_core/algorithms/gen_sqw.m @@ -1,4 +1,4 @@ -function [tmp_file,grid_size,urange] = gen_sqw (spe_file, par_file, sqw_file, efix, emode, alatt, angdeg,... +function [tmp_file,grid_size,urange,varargout] = gen_sqw (spe_file, par_file, sqw_file, efix, emode, alatt, angdeg,... u, v, psi, omega, dpsi, gl, gs, varargin) % Read one or more spe files and a detector parameter file, and create an output sqw file. % @@ -78,9 +78,6 @@ % would symmetrize pixels of the generated sqw file by % reflecting them in the plane specified by vectors % [0,1,0], and [0,0,1] (see symmeterise_sqw for details) - -% -% % Output: % -------- % tmp_file Cell array with list of temporary files created by this call to gen_sqw. @@ -89,7 +86,10 @@ % grid_size Actual size of grid used (size is unity along dimensions % where there is zero range of the data points) % urange Actual range of grid - +% +% parallel_cluster if job is executed in parallel and nargout >3, this +% variable would return the initialized instance of the +% job dispatcher, running a parallel job to continue % T.G.Perring 14 August 2007 % T.G.Perring 19 March 2013 Massively updated, also includes functionality of accumulate_sqw @@ -134,7 +134,9 @@ end end end - +if nargout>3 + varargout{1} = []; +end %If we are to run in 'time' mode, where execution waits for some period, %then must do so here, because any later we check whether or not spe files @@ -420,10 +422,15 @@ end end + keep_par_cl_running = ~opt.tmp_only || nargout>3; + % Generate unique temporary sqw files, one for each of the spe files [grid_size,urange,tmp_file,parallel_job_dispatcher]=convert_to_tmp_files(run_files,sqw_file,... - instrument,sample,urange_in,grid_size_in,opt.tmp_only); + instrument,sample,urange_in,grid_size_in,keep_par_cl_running); + if keep_par_cl_running + varargout{1} = parallel_job_dispatcher; + end if use_partial_tmp delete_tmp = false; @@ -701,7 +708,7 @@ function report_nothing_to_do(spe_only,spe_exist) end disp('--------------------------------------------------------------------------------') %--------------------------------------------------------------------------------------- -function [grid_size,urange,tmp_file,jd]=convert_to_tmp_files(run_files,sqw_file,... +function [grid_size,urange,tmp_generated,jd]=convert_to_tmp_files(run_files,sqw_file,... instrument,sample,urange_in,grid_size_in,gen_tmp_files_only) % log_level = ... @@ -714,17 +721,35 @@ function report_nothing_to_do(spe_only,spe_exist) spe_file = cellfun(@(x)(x.loader.file_name),run_files,... 'UniformOutput',false); tmp_file=gen_tmp_filenames(spe_file,sqw_file); +tmp_generated = tmp_file; if gen_tmp_files_only - f_exist = cellfun(@(fn)(exist(fn,'file')==2),tmp_file,'UniformOutput',true); - if any(f_exist) + [f_valid_exist,pix_ranges] = cellfun(@(fn)(check_tmp_files_range(fn,urange_in,grid_size_in)),... + tmp_file,'UniformOutput',false); + f_valid_exist = [f_valid_exist{:}]; + if any(f_valid_exist) if log_level >0 warning([' some tmp files exist while generating tmp files only.'... ' Generating only new tmp files.'... ' Delete all existing tmp files to avoid this']) end - run_files = run_files(~f_exist); - tmp_file = tmp_file(~f_exist); + run_files = run_files(~f_valid_exist); + tmp_file = tmp_file(~f_valid_exist); + pix_ranges = pix_ranges(f_valid_exist); + urange = pix_ranges{1}; + for i=2:numel(pix_ranges) + urange = [min([urange(1,:);pix_ranges{i}(1,:)]);... + max([urange(2,:);pix_ranges{i}(2,:)])]; + end + if isempty(run_files) + grid_size = grid_size_in; + jd = []; + return; + end + else + urange = []; end +else + urange = []; end nt=bigtic(); @@ -743,12 +768,9 @@ function report_nothing_to_do(spe_only,spe_exist) job_name = ['gen_sqw_',fn]; % jd = JobDispatcher(job_name); - if gen_tmp_files_only - keep_parallel_pool_running = false; - else % if further operations are necessary to perform with generated tmp files, - % keep parallel pool running to save time on restarting it - keep_parallel_pool_running = true; - end + % if further operations are necessary to perform with generated tmp files, + % keep parallel pool running to save time on restarting it. + keep_parallel_pool_running = ~gen_tmp_files_only; % aggregate the conversion parameters into array of structures, % suitable for splitting jobs between workers @@ -761,7 +783,7 @@ function report_nothing_to_do(spe_only,spe_exist) if n_failed == 0 outputs = outputs{1}; grid_size = outputs.grid_size; - urange = outputs.urange; + urange1 = outputs.urange; else jd.display_fail_job_results(outputs,n_failed,num_matlab_sessions,'GEN_SQW:runtime_error'); end @@ -780,10 +802,17 @@ function report_nothing_to_do(spe_only,spe_exist) % effective but much easier to identify problem with % failing parallel job - [grid_size,urange]=gen_sqw_files_job.runfiles_to_sqw(run_files,tmp_file,... + [grid_size,urange1]=gen_sqw_files_job.runfiles_to_sqw(run_files,tmp_file,... grid_size_in,urange_in,true); %--------------------------------------------------------------------- end +% +if isempty(urange) + urange = urange1; +else + urange= [min([urange(1,:);urange1(1,:)]);... + max([urange(2,:);urange1(2,:)])]; +end if log_level>-1 disp('--------------------------------------------------------------------------------') bigtoc(nt,'Time to create all temporary sqw files:',log_level); @@ -791,3 +820,23 @@ function report_nothing_to_do(spe_only,spe_exist) disp('--------------------------------------------------------------------------------') end +% +function [present_and_valid,pix_range] = check_tmp_files_range(tmp_file,pix_db_range,grid_size_in) +% TODO: +% write check for grid_size_in which has to be equal to grid_size of head. +% but head (without s,e,npix) does not have method to idnentify grid_size +% (it should be written and tested) +if ~is_file(tmp_file) + present_and_valid = false; + pix_range = []; + return; +end +toll = 1.e-7; +ldr = sqw_formats_factory.instance().get_loader(tmp_file); +head = ldr.get_data('-head'); +pix_range = head.urange; % this is incorrect. Fixed in rel 4. +if any(abs(pix_range-pix_db_range)>toll) + present_and_valid = false; +else + present_and_valid = true; +end diff --git a/horace_core/algorithms/private/gen_sqw_check_distinct_input.m b/horace_core/algorithms/private/gen_sqw_check_distinct_input.m index 1ca6bd9c1b..4596bb49d8 100644 --- a/horace_core/algorithms/private/gen_sqw_check_distinct_input.m +++ b/horace_core/algorithms/private/gen_sqw_check_distinct_input.m @@ -232,5 +232,3 @@ end end - - diff --git a/horace_core/lattice_functions/calc_proj_matrix.m b/horace_core/lattice_functions/calc_proj_matrix.m deleted file mode 100644 index ed4b40faeb..0000000000 --- a/horace_core/lattice_functions/calc_proj_matrix.m +++ /dev/null @@ -1,69 +0,0 @@ -function [spec_to_u, u_to_rlu, spec_to_rlu] = calc_proj_matrix (alatt, angdeg, u, v, psi, omega, dpsi, gl, gs) -% Calculate matrix that convert momentum from coordinates in spectrometer frame to -% projection axes defined by u1 || a*, u2 in plane of a* and b* i.e. crystal Cartesian axes -% Allows for correction scattering plane (omega, dpsi, gl, gs) - see Tobyfit for conventions -% -% >> [spec_to_u, u_to_rlu, spec_to_rlu] = ... -% calc_proj_matrix (alatt, angdeg, u, v, psi, omega, dpsi, gl, gs) -% -% Input: -% ------ -% alatt Lattice parameters (Ang^-1) -% angdeg Lattice angles (deg) -% u First vector (1x3) defining scattering plane (r.l.u.) -% v Second vector (1x3) defining scattering plane (r.l.u.) -% psi Angle of u w.r.t. ki (rad) -% omega Angle of axis of small goniometer arc w.r.t. notional u -% dpsi Correction to psi (rad) -% gl Large goniometer arc angle (rad) -% gs Small goniometer arc angle (rad) -% -% Output: -% ------- -% spec_to_u Matrix (3x3)to convert momentum from coordinates in spectrometer -% frame to crystal Cartesian axes: -% v_crystal_Cart = spec_to_u * v_spec -% -% u_to_rlu Matrix (3x3) of crystal Cartesian axes in reciprocal lattice units -% i.e. u_to_rlu(:,1) first vector - u(1:3,1) r.l.u. etc. -% This matrix can be used to convert components of a vector in -% crystal Cartesian axes to r.l.u.: -% v_rlu = u_to_rlu * v_crystal_Cart -% (Same as inv(B) in Busing and Levy convention) -% -% spec_to_rlu Matrix (3x3) to convert from spectrometer coordinates to -% r.l.u.: -% v_rlu = spec_to_rlu * v_spec -% (This matrix is entirely equivalent to u_to_rlu*spec_to_u) - -% T.G.Perring 15/6/07 -% -% $Revision:: 1759 ($Date:: 2020-02-10 16:06:00 +0000 (Mon, 10 Feb 2020) $) - - -% Get matrix to convert from rlu to orthonormal frame defined by u,v; and -b_matrix = bmatrix(alatt, angdeg); % bmat takes Vrlu to Vxtal_cart -ub_matrix = ubmatrix(u, v, b_matrix); % ubmat takes Vrlu to V in orthonormal frame defined by u, v -u_matrix = ub_matrix / b_matrix; % u matrix takes V in crystal Cartesian coords to orthonormal frame defined by u, v - - -% Matrix to convert coords in orthormal frame defined by notional directions of u, v, to -% coords in orthonormal frame defined by true directions of u, v: -rot_dpsi= [cos(dpsi),-sin(dpsi),0; sin(dpsi),cos(dpsi),0; 0,0,1]; -rot_gl = [cos(gl),0,sin(gl); 0,1,0; -sin(gl),0,cos(gl)]; -rot_gs = [1,0,0; 0,cos(gs),-sin(gs); 0,sin(gs),cos(gs)]; -rot_om = [cos(omega),-sin(omega),0; sin(omega),cos(omega),0; 0,0,1]; -corr = (rot_om * (rot_dpsi*rot_gl*rot_gs) * rot_om')'; - -% Matrix to convert from spectrometer coords to orthormal frame defined by notional directions of u, v -cryst = [cos(psi),sin(psi),0; -sin(psi),cos(psi),0; 0,0,1]; - -% Combine to get matrix to convert from spectrometer coordinates to crystal Cartesian coordinates -spec_to_u = u_matrix\corr*cryst; - -% Matrix to convert from crystal Cartesian coords to r.l.u. -u_to_rlu = inv(b_matrix); - -% Matrix to convert from spectrometer coordinates to r.l.u. -spec_to_rlu = b_matrix\spec_to_u; - diff --git a/horace_core/spaghetti_plot.m b/horace_core/spaghetti_plot.m index b95a60e553..ae874d2faa 100644 --- a/horace_core/spaghetti_plot.m +++ b/horace_core/spaghetti_plot.m @@ -526,5 +526,3 @@ function plot_labels(labels,xvals) set(gca,'XTick',xvals); set(gca,'XTickLabel',labels); - - diff --git a/horace_core/sqw/@gen_sqw_files_job/private/rundata_write_to_sqw_.m b/horace_core/sqw/@gen_sqw_files_job/private/rundata_write_to_sqw_.m index 8e4a77a753..021f11943c 100644 --- a/horace_core/sqw/@gen_sqw_files_job/private/rundata_write_to_sqw_.m +++ b/horace_core/sqw/@gen_sqw_files_job/private/rundata_write_to_sqw_.m @@ -26,6 +26,11 @@ % Original author: T.G.Perring nfiles = numel(run_files); +if nfiles == 0 + grid_size = grid_size_in; + urange = urange_in; + return +end [hor_log_level,use_mex]=get(hor_config,'log_level','use_mex'); % diff --git a/horace_core/sqw/@sqw/private/binary_op_manager_single.m b/horace_core/sqw/@sqw/private/binary_op_manager_single.m index ec5f04eaac..74fffde6d4 100644 --- a/horace_core/sqw/@sqw/private/binary_op_manager_single.m +++ b/horace_core/sqw/@sqw/private/binary_op_manager_single.m @@ -137,7 +137,7 @@ w2_rhs = fake_pixels(w2); end wout.data.pix = wout.data.pix.do_binary_op(w2_rhs.data.pix, binary_op, 'flip', flip); - wout = recompute_bin_data(wout); + wout = recompute_bin_data(wout); wout.data.npix = npix; wout.data.pix = PixelData(); end diff --git a/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw.m b/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw.m index 430dbcb261..951036b9d4 100644 --- a/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw.m +++ b/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw.m @@ -626,7 +626,7 @@ end end - function [data_out, calcdata, ok, mess] = simulate (obj, varargin) + function [data_out, calcdata] = simulate (obj, varargin) % Perform a simulation of the data using the current functions and parameter values % % Return calculated sum of foreground and background: @@ -724,10 +724,10 @@ wrapfun.p_wrap = append_args (wrapfun.p_wrap, 'ave'); obj_tmp.wrapfun = wrapfun; end - [data_out, calcdata, ok, mess] = simulate@mfclass (obj_tmp, varargin{:}); + [data_out, calcdata] = simulate@mfclass (obj_tmp, varargin{:}); end - function [data_out, calcdata, ok, mess] = fit (obj, varargin) + function [data_out, calcdata] = fit (obj, varargin) % Perform a fit of the data using the current functions and parameter values % % Return calculated fitted datasets and parameters: @@ -819,7 +819,7 @@ wrapfun.p_wrap = append_args (wrapfun.p_wrap, 'ave'); obj_tmp.wrapfun = wrapfun; end - [data_out, calcdata, ok, mess] = fit@mfclass (obj_tmp, varargin{:}); + [data_out, calcdata] = fit@mfclass (obj_tmp, varargin{:}); end end end diff --git a/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw_sqw.m b/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw_sqw.m index 5827989081..df64355f02 100644 --- a/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw_sqw.m +++ b/horace_core/sqw/multifit_subclasses/mfclass_Horace_sqw_sqw.m @@ -725,7 +725,7 @@ obj_tmp.wrapfun = wrapfun; end - [data_out, calcdata, ok, mess] = simulate@mfclass (obj_tmp, varargin{:}); + [data_out, calcdata] = simulate@mfclass (obj_tmp, varargin{:}); end function [data_out, calcdata, ok, mess] = fit (obj, varargin) @@ -821,7 +821,7 @@ wrapfun.bp_wrap = append_args (wrapfun.bp_wrap, 'ave'); obj_tmp.wrapfun = wrapfun; end - [data_out, calcdata, ok, mess] = fit@mfclass (obj_tmp, varargin{:}); + [data_out, calcdata] = fit@mfclass (obj_tmp, varargin{:}); end end end diff --git a/tools/bash/clone_herbert_branch.sh b/tools/bash/clone_herbert_branch.sh index 91cedcbe98..4a6c4faeaa 100755 --- a/tools/bash/clone_herbert_branch.sh +++ b/tools/bash/clone_herbert_branch.sh @@ -37,6 +37,6 @@ fi run_in_dir "echo -e \"\nBuilding Herbert revision \$(git rev-parse HEAD)...\"" \ "${HERBERT_DIR}" -build_cmd="${HERBERT_DIR}/tools/build_config/build.sh --build" +build_cmd="${HERBERT_DIR}/tools/build_config/build.sh --configure --build" build_cmd+=" --build_tests OFF ${build_args}" echo_and_run "${build_cmd}" diff --git a/tools/build_config/Jenkinsfile b/tools/build_config/Jenkinsfile index d0a54d4c6e..815aec38dc 100644 --- a/tools/build_config/Jenkinsfile +++ b/tools/build_config/Jenkinsfile @@ -1,223 +1,77 @@ #!groovy -def get_matlab_release(String job_name) { - return 'R' + job_name[-5..-1] -} - -def get_build_type(String job_name) { - if (job_name.startsWith('Release-')) { - return 'Release' - } else if (job_name.startsWith('Branch-')) { - return 'Branch' - } else if(job_name.startsWith('PR-')) { - return 'Pull-request' - } else { - return 'Nightly' - } -} - -def get_agent(String job_name) { - if (job_name.contains('Scientific-Linux-7')) { - withCredentials([string(credentialsId: 'sl7_agent', variable: 'agent')]) { - return "${agent}" - } - } else if (job_name.contains('Windows-10')) { - withCredentials([string(credentialsId: 'win10_agent', variable: 'agent')]) { - return "${agent}" - } - } else { - return '' - } -} - -def get_release_type(String job_name) { - String build_type = get_build_type(job_name); - - switch(build_type) { - case 'Release': - return 'release' - - case 'Pull-request': - return 'pull_request' - - case 'Nightly': - return 'nightly' - - default: - return '' - } -} - -def get_branch_name(String job_name) { - String build_type = get_build_type(job_name); - - switch(build_type) { - case 'Nightly': - return 'master' - - default: - return '' - } -} - -def get_default_herbert_branch(String job_name) { - String build_type = get_build_type(job_name) - - switch(build_type) { - case 'Release': - return '' - - case 'Nightly': - return 'None' - - default: - return 'master' - } -} +@Library('PACE-shared-lib') import pace.common.PipeLineInfo - /* Parse the string of Git issue labels for a label that matches Herbert_*. - * If a match is found, build using the Herbert branch of that name. - * - * This function will return a message beginning 'Error: ' if more than one - * matching Herbert branch label is found. Throwing an error directly inside - * this function will not fail the pipeline build. - */ -def get_herbert_ref_from_labels(String labels, String herbert_branch) { - def match = (labels =~ "Herbert_([a-zA-Z0-9_-]+)") - try { - match[1] - // Return an error here as there must be, at most, one Herbert branch label - // on the pull request. If the above line does not error, then there must - // be at least two. - return("Error: Found more than one Herbert branch label on the pull request.") - } catch (IndexOutOfBoundsException e1) { - try { - // There is exactly one matching label on the pull request - return match[0][1] - } catch (IndexOutOfBoundsException e2) { - // We get here if there are no matching labels on the pull request - return herbert_branch - } - } -} +pli = new PipeLineInfo(env.JOB_BASE_NAME) properties([ parameters([ string( - defaultValue: get_branch_name(env.JOB_BASE_NAME), - description: 'The name of the branch to build.', + defaultValue: pli.branch_name, + description: 'The name of the branch to build. *', name: 'BRANCH_NAME', trim: true ), string( - defaultValue: get_default_herbert_branch(env.JOB_BASE_NAME), - description: 'The name of the branch or tag of Herbert to use.', + defaultValue: pli.herbert_branch, + description: 'The name of the branch or tag of Herbert to use. *', name: 'HERBERT_BRANCH_NAME', trim: true ), string( - defaultValue: get_matlab_release(env.JOB_BASE_NAME), + defaultValue: '', description: 'The release number of the Matlab to load e.g. R2019b.', name: 'MATLAB_VERSION', trim: true ), string( - defaultValue: get_release_type(env.JOB_BASE_NAME), - description: 'The type of the build e.g. "nightly", "release", "pull_request".', + defaultValue: pli.release_type, + description: 'The type of the build e.g. "nightly", "release", "pull_request". *', name: 'RELEASE_TYPE', trim: true ), string( - defaultValue: get_agent(env.JOB_BASE_NAME), - description: 'The agent to execute the pipeline on.', + defaultValue: utilities.get_agent(pli.os), + description: 'The agent to execute the pipeline on. *', name: 'AGENT', trim: true ), string( - defaultValue: '3.7.2', - description: 'The version of CMake to run the build with.', + defaultValue: '3.19', + description: 'The version of CMake to run the build with. Affects Linux builds only.', name: 'CMAKE_VERSION', trim: true ), string( defaultValue: '6.3.0', - description: 'The version of GCC to build with.', + description: 'The version of GCC to build with. Affects Linux builds only.', name: 'GCC_VERSION', trim: true ), string( defaultValue: '2017', - description: 'The year of the version of Visual Studio to build with.', + description: 'The year of the version of Visual Studio to build with. Affects Windows builds only.', name: 'VS_VERSION', trim: true ), string( - defaultValue: '1.77', - description: 'The version of CppCheck tooling to load to provide the code-style checks.', + defaultValue: '', + description: 'The version of CppCheck tooling to load to provide the code-style checks. Affects Linux builds only.', name: 'CPPCHECK_VERSION', trim: true + ), + booleanParam( + defaultValue: true, + description: 'If this pipeline is to build docs.', + name: 'BUILD_DOCS' + ), + booleanParam( + description: 'If this pipeline is to push docs.', + name: 'PUSH_DOCS' ) ]) ]) -def post_github_status(String state, String message) { - // Non-PR builds will not set PR_STATUSES_URL - in which case we do not - // want to post any statuses to Git - if (env.PR_STATUSES_URL) { - script { - withCredentials([string(credentialsId: 'GitHub_API_Token', - variable: 'api_token')]) { - if (isUnix()) { - sh """ - curl -H "Authorization: token ${api_token}" \ - --request POST \ - --data '{"state": "${state}", \ - "description": "${message}", \ - "target_url": "$BUILD_URL", \ - "context": "$JOB_BASE_NAME"}' \ - $PR_STATUSES_URL > /dev/null - """ - } - else { - powershell """ - [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" - \$payload = @{ - "state" = "${state}"; - "description" = "${message}"; - "target_url" = "$BUILD_URL"; - "context" = "$JOB_BASE_NAME"} - - Invoke-RestMethod -URI "$PR_STATUSES_URL" \ - -Headers @{Authorization = "token ${api_token}"} \ - -Method 'POST' \ - -Body (\$payload|ConvertTo-JSON) \ - -ContentType "application/json" - """ - } - } - } - } -} - -def write_git_revision_to_file(String file_name) { - script { - def git_rev_cmd = "git rev-parse HEAD" - echo "Writing Git revision to ${file_name}..." - if (isUnix()) { - sh """ - echo "\$(${git_rev_cmd})" > ${file_name} - """ - } else { - powershell """ - Write-Output "\$(${git_rev_cmd})" > ${file_name} - """ - } - } -} - - -def base_job_name = "${env.JOB_BASE_NAME}".replace("PR-", "").replace("Branch-", "") - if (env.BRANCH_NAME) { currentBuild.description = "Branch: ${env.BRANCH_NAME}" } else if (env.PR_NUMBER) { @@ -225,39 +79,39 @@ if (env.BRANCH_NAME) { currentBuild.description = "Git-SHA: ${env.PR_COMMIT_SHA.take(7)}" } +def base_job_name = "${env.JOB_BASE_NAME}".replace("PR-", "").replace("Branch-", "") +Boolean run_build_stage = !(env?.PR_LABELS =~ "do-not-build") +Boolean run_test_stage = !(env?.PR_LABELS =~ "(do-not-build|do-not-test)") +Boolean run_push_docs_stage = (pli.matlab_release == 'R2019b' && + pli.build_type == 'Nightly' && + utilities.get_agent(pli.os) == 'sl7') pipeline { + agent { label env.AGENT } + environment { + MATLAB_VERSION = utilities.get_param('MATLAB_VERSION', pli.matlab_release) + CMAKE_VERSION = utilities.get_param('CMAKE_VERSION', '3.19') + GCC_VERSION = utilities.get_param('GCC_VERSION', '6.3.0') + VS_VERSION = utilities.get_param('VS_VERSION', '2017') + CPPCHECK_VERSION = utilities.get_param('CPPCHECK_VERSION', '1.77') + BUILD_DOCS = utilities.get_param('BUILD_DOCS', 'true') + PUSH_DOCS = utilities.get_param('PUSH_DOCS', 'false') + } + stages { stage('Notify') { - steps { - post_github_status("pending", "The build is running") - } - } - - stage('Analyze') { steps { script { - if (isUnix()) { - sh ''' - module load cmake/\$CMAKE_VERSION && - module load matlab/\$MATLAB_VERSION && - module load gcc/\$GCC_VERSION && - module load cppcheck/\$CPPCHECK_VERSION && - ./tools/build_config/build.sh --print_versions --analyze - ''' - } - else { - powershell ''' - ./tools/build_config/build.ps1 -print_versions - Write-Output \"Static Analysis in not performed on Windows\" - ''' + if (env.PR_LABELS) { + echo "Found PR labels: ${env.PR_LABELS}" } } + post_github_status("pending", "The build is running") } } @@ -297,18 +151,14 @@ pipeline { } } else { - if (env.PR_LABELS) { - echo "Found PR labels: ${env.PR_LABELS}" - } - def herbert_ref = get_herbert_ref_from_labels( + def herbert_ref = utilities.get_herbert_ref_from_labels( env.PR_LABELS, env.HERBERT_BRANCH_NAME ) if (herbert_ref.startsWith('Error: ')) { error(herbert_ref) } - // Get Herbert from GitHub and call the build script if (isUnix()) { sh """ @@ -335,24 +185,108 @@ pipeline { } } - stage('Build') { + stage('Configure') { steps { script { + if (env.BUILD_DOCS?.toBoolean()) { + if (isUnix()) { + sh ''' + module load python/3.6 && + pip install --user sphinx && + pip install --user sphinx_rtd_theme + ''' + } else { + powershell ''' + pip install --user sphinx + pip install --user sphinx_rtd_theme + ''' + } + } if (isUnix()) { sh ''' + module load python/3.6 && + export PATH=${PATH}:~/.local/bin && module load cmake/\$CMAKE_VERSION && module load matlab/\$MATLAB_VERSION && module load gcc/\$GCC_VERSION && - ./tools/build_config/build.sh --build \ + module load cppcheck/\$CPPCHECK_VERSION && + ./tools/build_config/build.sh \ --cmake_flags \"-DHorace_RELEASE_TYPE=\$RELEASE_TYPE\" \ - --matlab_release \$MATLAB_VERSION + --matlab_release \$MATLAB_VERSION \ + --print_versions --configure + ''' + } else { + powershell ''' + ./tools/build_config/build.ps1 -print_versions -configure \ + -cmake_flags \"-DHorace_RELEASE_TYPE=\$env:RELEASE_TYPE\" \ + -matlab_release \$env:MATLAB_VERSION \ + -vs_version \$env:VS_VERSION + ''' + } + } + } + } + + stage('Analyze') { + steps { + script { + if (isUnix()) { + sh ''' + module load cmake/\$CMAKE_VERSION && + module load matlab/\$MATLAB_VERSION && + module load gcc/\$GCC_VERSION && + module load cppcheck/\$CPPCHECK_VERSION && + ./tools/build_config/build.sh --analyze + ''' + } + else { + powershell ''' + Write-Output \"Static Analysis in not performed on Windows\" ''' } + } + } + } + + stage('Build') { + when { + expression { + run_build_stage == true + } + } + steps { + script { + if (isUnix()) { + sh ''' + module load cmake/\$CMAKE_VERSION && + module load matlab/\$MATLAB_VERSION && + module load gcc/\$GCC_VERSION && + ./tools/build_config/build.sh --build + ''' + } else { powershell ''' - ./tools/build_config/build.ps1 -build \ - -cmake_flags \"-DHorace_RELEASE_TYPE=\$env:RELEASE_TYPE\" \ - -matlab_release \$env:MATLAB_VERSION + ./tools/build_config/build.ps1 -build + ''' + } + } + } + } + + stage('Build-Docs') { + when { + expression {env.BUILD_DOCS?.toBoolean()} + } + steps { + script { + if (isUnix()) { + sh ''' + echo "building docs are not implemented for release 3.5" + ''' + } + else { + powershell ''' + echo "building docs are not implemented for release 3.5" ''' } } @@ -360,6 +294,11 @@ pipeline { } stage('Test') { + when { + expression { + run_test_stage == true + } + } steps { script { if (isUnix()) { @@ -378,10 +317,18 @@ pipeline { } stage('Package') { + when { + expression { + run_build_stage == true + } + } steps { script { if (isUnix()) { - sh './tools/build_config/build.sh --package' + sh ''' + module load cmake/\$CMAKE_VERSION && + ./tools/build_config/build.sh --package + ''' } else { powershell './tools/build_config/build.ps1 -package' @@ -389,9 +336,9 @@ pipeline { // Archive a file containing the git revision being built. This // enables the Deploy pipelines to validate against this SHA, and // ensure the correct revision is tagged in Git. - if (get_build_type(env.JOB_BASE_NAME) == 'Release') { + if (pli.build_type == 'Release') { def git_rev_file_name = "${env.JOB_BASE_NAME}-git-revision.sha" - write_git_revision_to_file(git_rev_file_name) + utilities.write_git_revision_to_file(git_rev_file_name) archiveArtifacts(artifacts: git_rev_file_name, fingerprint: true) } } @@ -403,22 +350,50 @@ pipeline { ) } } + + + stage('Push-Docs') { + when { + expression {env.BUILD_DOCS?.toBoolean() && (env.PUSH_DOCS?.toBoolean() || run_push_docs_stage)} + } + steps { + withCredentials([string(credentialsId: 'GitHub_API_Token', + variable: 'api_token')]) { + script { + if (isUnix()) { + sh './tools/build_config/build.sh --push-docs' + } + else { + powershell './tools/build_config/build.ps1 -push_docs' + + } + } + } + } + } } post { always { - // archive CTest results file and static analysis report + // archive static analysis report archiveArtifacts( - artifacts: 'build/Testing/**/*.xml,**/cppcheck.xml', + artifacts: '**/cppcheck.xml,**/mlint.json', + allowEmptyArchive: true, fingerprint: true ) - publishCppcheck ( - displayAllErrors: true, - allowNoReport: true, - pattern: '**/cppcheck.xml' + recordIssues( + tools: [ + cppCheck(pattern: '**/cppcheck.xml', reportEncoding: 'UTF-8'), + issues(id: 'mlint', name: 'MLint', pattern: '**/mlint.json') + ] ) + archiveArtifacts( + artifacts: 'build/Testing/**/*.xml', + allowEmptyArchive: true, + fingerprint: true + ) xunit ( testTimeMargin: '3000', thresholdMode: 1, @@ -436,6 +411,7 @@ pipeline { ) ] ) + } success { diff --git a/tools/build_config/build.ps1 b/tools/build_config/build.ps1 index 025dae016e..2cd5229cd1 100644 --- a/tools/build_config/build.ps1 +++ b/tools/build_config/build.ps1 @@ -28,6 +28,8 @@ https://github.com/pace-neutrons/Horace #> param ( + # Run the Horace configure commands. + [switch][Alias("g")]$configure, # Run the Horace build commands. [switch][Alias("b")]$build, # Run all Horace tests. @@ -36,6 +38,10 @@ param ( [switch][Alias("p")]$package, # Print the versions of libraries being used e.g. Matlab. [switch][Alias("v")]$print_versions, + # Build docs + [switch][Alias("d")]$docs, + # Push docs to github + [switch]$push_docs, # Call Get-Help on this script and exit. [switch][Alias("h")]$help, @@ -160,7 +166,7 @@ function Invoke-Configure { function Invoke-Build { param([string]$build_dir, [string]$build_config) Write-Output "`nRunning CMake build step..." - Write-And-Invoke "cmake --build ""$build_dir""" + Write-And-Invoke "cmake --build ""$build_dir"" --config ""$build_config""" if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } @@ -173,7 +179,7 @@ function Invoke-Test { $test_cmd += " -T Test --no-compress-output" $test_cmd += " --output-on-failure" $test_cmd += " --test-output-size-passed $MAX_CTEST_SUCCESS_OUTPUT_LENGTH" - Invoke-In-Dir -directory $build_dir -command $test_cmd + Invoke-In-Dir -directory "$build_dir" -command "$test_cmd" if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } @@ -186,7 +192,37 @@ function Invoke-Package { if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } +} + +function Invoke-Docs { + param([string]$build_dir) + Write-And-Invoke "cmake --build ""$build_dir"" --target docs-pack" + + if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE + } +} + +function Invoke-Push { + git config --local user.name "PACE CI Build Agent" + git config --local user.email "pace.builder.stfc@gmail.com" + git remote set-url --push origin "https://pace-builder:$(${env:api_token}.trim())@github.com/pace-neutrons/Horace" + git checkout gh-pages + # Keep up to date + git pull + + Set-Content -Value "Bypassing Jekyll on GitHub Pages" -Path .nojekyll + git add .nojekyll + git rm -rf --ignore-unmatch ./unstable + Copy-Item -Path "./documentation/user_docs/build/html" -Destination "./unstable" -Recurse + git add unstable + + (Get-Content "./build/CPackConfig.cmake" | + Where-Object {$_ -match 'CPACK_PACKAGE_FILE_NAME'}) -match '.*"Horace-([^"]+)".*' + $build_id = $Matches[1] + git commit -m "Document build from CI (${build_id})" + git push origin gh-pages if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } @@ -224,3 +260,10 @@ if ($package) { Invoke-Package -build_dir "$build_dir" } +if ($docs) { + Invoke-Docs -build_dir "$build_dir" +} + +if ($push_docs) { + Invoke-Push +} diff --git a/tools/build_config/build.sh b/tools/build_config/build.sh index e683e87160..967a312d13 100755 --- a/tools/build_config/build.sh +++ b/tools/build_config/build.sh @@ -40,7 +40,7 @@ function run_configure() { cmake_cmd+=" -G \"${CMAKE_GENERATOR}\"" cmake_cmd+=" -DMatlab_ROOT_DIR=${MATLAB_ROOT}" cmake_cmd+=" -DCMAKE_BUILD_TYPE=${build_config}" - cmake_cmd+=" -DBUILD_TESTS=${build_tests}" + cmake_cmd+=" -DBUILD_TESTING=${build_tests}" cmake_cmd+=" -DMatlab_RELEASE=${matlab_release}" cmake_cmd+=" ${cmake_flags}" @@ -67,18 +67,8 @@ function run_tests() { } function run_analysis() { - local output_dir=$1 - - if [ -f "$(which cppcheck)" ]; then - echo -e "\nRunning analysis step..." - - analysis_cmd="cppcheck --enable=all --inconclusive" - analysis_cmd+=" --xml --xml-version=2" - analysis_cmd+=" -I ${HORACE_ROOT}/_LowLevelCode/cpp" - analysis_cmd+=" ${HORACE_ROOT}/_LowLevelCode/" - analysis_cmd+=" 2> ${output_dir}/cppcheck.xml" - echo_and_run "${analysis_cmd}" - fi + local build_dir=$1 + echo_and_run "cmake --build ${build_dir} -- analyse" } function run_package() { @@ -87,6 +77,27 @@ function run_package() { echo_and_run "cpack -G TGZ" } +function build_docs() { + # Update release numbers + echo_and_run "cmake --build ${build_dir} --target docs-pack" +} + +function push_built_docs() { + build_id=$(sed -nr '/CPACK_PACKAGE_FILE_NAME/{s/.*"Horace-([^"]+)".*/\1/p};' ./build/CPackConfig.cmake) + git config --local user.name "PACE CI Build Agent" + git config --local user.email "pace.builder.stfc@gmail.com" + git remote set-url --push origin "https://pace-builder:"${api_token## }"@github.com/pace-neutrons/Horace" + git checkout gh-pages + git pull + echo "Bypassing Jekyll on GitHub Pages" > .nojekyll + git add .nojekyll + git rm -rf --ignore-unmatch ./unstable + cp -r ./documentation/user_docs/build/html ./unstable + git add unstable + git commit -m "Document build from CI ("$build_id")" + git push origin gh-pages +} + function print_help() { readonly local help_msg="Script to build, run static analysis, test and package Horace. @@ -105,12 +116,18 @@ flags: Run the Horace build commands. -t, --test Run all Horace tests. + -c, --configure + Run cmake configuration stage -a, --analyze - Run static analysis on Horace C++ code. + Run static analysis on Horace code. -p, --package Pacakge Horace into a .tar.gz file. -v, --print_versions Print the versions of libraries being used e.g. Matlab. + -d, --docs + Build user docs + --push_docs + Push docs up to Horace GitHub repo -h, --help Print help message and exit. options: @@ -137,8 +154,11 @@ function main() { # set default parameter values local build=$FALSE local test=$FALSE + local configure=$FALSE local analyze=$FALSE local package=$FALSE + local docs=$FALSE + local push_docs=$FALSE local print_versions=$FALSE local build_tests="ON" local build_config='Release' @@ -153,8 +173,11 @@ function main() { # flags -b|--build) build=$TRUE; shift ;; -t|--test) test=$TRUE; shift ;; + -g|--configure) configure=$TRUE; shift;; -a|--analyze) analyze=$TRUE; shift ;; -p|--package) package=$TRUE; shift ;; + -d|--docs) docs=$TRUE; shift;; + --push-docs) push_docs=$TRUE; shift;; -v|--print_versions) print_versions=$TRUE; shift ;; -h|--help) print_help; exit 0 ;; # options @@ -171,15 +194,15 @@ function main() { print_package_versions fi + if ((configure)) || [ ! -e ${build_dir}/CMakeCache.txt ]; then + run_configure "${build_dir}" "${build_config}" "${build_tests}" "${matlab_release}" "${cmake_flags}" + fi + if ((analyze)); then - run_analysis "${HORACE_ROOT}" + run_analysis "${build_dir}" fi if ((build)); then - warning_msg="Warning: Build directory ${build_dir} already exists.\n\ - This may not be a clean build." - echo_and_run "mkdir ${build_dir}" || warning "${warning_msg}" - run_configure "${build_dir}" "${build_config}" "${build_tests}" "${matlab_release}" "${cmake_flags}" run_build "${build_dir}" fi @@ -190,6 +213,14 @@ function main() { if ((package)); then run_package fi + + if ((docs)); then + build_docs + fi + + if ((push_docs)); then + push_built_docs + fi } main "$@" diff --git a/tools/pwsh/clone_herbert_branch.ps1 b/tools/pwsh/clone_herbert_branch.ps1 index 5a7f1e1a92..1c5a715142 100644 --- a/tools/pwsh/clone_herbert_branch.ps1 +++ b/tools/pwsh/clone_herbert_branch.ps1 @@ -27,7 +27,7 @@ Invoke-In-Dir ` -directory $HERBERT_DIR ` -command "Write-Output ""``nBuilding Herbert revision `$(git rev-parse HEAD)...""" ` -$build_cmd = "$HERBERT_DIR/tools/build_config/build.ps1 -build" +$build_cmd = "$HERBERT_DIR/tools/build_config/build.ps1 -configure -build" $build_cmd += " -build_tests OFF" $build_cmd += " $build_args" Write-And-Invoke "$build_cmd"