diff --git a/aivo/aivo_get_subjects.m b/aivo/aivo_get_subjects.m index 4172515e25a2a5b92789f19b475b017a153c9742..685db259cc132eed9f2814c37fc64c46b59b7b6f 100644 --- a/aivo/aivo_get_subjects.m +++ b/aivo/aivo_get_subjects.m @@ -39,6 +39,8 @@ function subjects = aivo_get_subjects(varargin) conn = aivo_connect(); +refresh(conn); %Refresh materia view + where_statement = 'WHERE '; table = {}; @@ -50,16 +52,13 @@ if((~mod(nargin,2))) field = varargin{i+l}; value = varargin{i+l+1}; l=l+1; - % Study table - Values - if(ismember(field,{'study_date','mri_code','dose','scan_start_time','injection_time'})) %value - if ~ismember('study', table) - table{end+1}= 'study'; - end + % Materia view - Values + if(ismember(field,{'study_date','mri_code','dose','scan_start_time','injection_time','height','weight','age'})) if(ischar(value)) %only one value if(ismember('~',value)) %exclude spesific value - where_statement = [where_statement,' NOT ','study.',lower(field),' = ',char(39),value(2:length(value)),char(39)]; + where_statement = [where_statement,' NOT ','materia.',lower(field),' = ',char(39),value(2:length(value)),char(39)]; else - where_statement = [where_statement,'study.',lower(field),' = ',char(39),value,char(39)]; + where_statement = [where_statement,'materia.',lower(field),' = ',char(39),value,char(39)]; end else lb = value{1}; % lower bound @@ -69,60 +68,16 @@ if((~mod(nargin,2))) else value = [num2str(lb),' AND ',num2str(ub)]; end - where_statement = [where_statement,'study.',lower(field),' BETWEEN ',value]; + where_statement = [where_statement,'materia.',lower(field),' BETWEEN ',value]; end if(i~=nargin/2) where_statement = [where_statement,' AND ']; end end - %Study table - Chars - if(ismember(field,{'frames','mri_code','scanner','tracer'})) %integer or char - if ~ismember('study', table) - table{end+1}= 'study'; - end - if(ismember('~',value)) %user excludes spesified values, value is char - where_statement = [where_statement,' NOT ','study.',lower(field),'=',char(39),value(2:length(value)),char(39)]; - if(i~=nargin/2) - where_statement = [where_statement,' AND ']; - end - else - if(isnumeric(value)) % value may be char or numeric - value = num2str(value); - end - where_statement = [where_statement,'study.',lower(field),'=',char(39),value,char(39)]; - if(i~=nargin/2) - where_statement = [where_statement,' AND ']; - end - end - end - %Patient table - Values - if(ismember(field,{'height','weight','age'})) %value - if ~ismember('patient', table) - table{end+1}= 'patient'; - end - if(ischar(value)) %only one value - if(ismember('~',value)) %exclude spesific value - where_statement = [where_statement,' NOT ','patient.',lower(field),' = ',char(39),value(2:length(value)),char(39)]; - else - where_statement = [where_statement,'patient.',lower(field),' = ',char(39),value,char(39)]; - end - else - lb = value{1}; % lower bound - ub = value{2}; % upper bound - value = [num2str(lb),' AND ',num2str(ub)]; - where_statement = [where_statement,'patient.',lower(field),' BETWEEN ',value]; - end - if(i~=nargin/2) - where_statement = [where_statement,' AND ']; - end - end - %Inventory table - Chars - if(ismember(field,{'analyzed','found','freesurfed','magia_time','error','magia_githash'})) %integer or char - if ~ismember('inventory', table) - table{end+1}= 'inventory'; - end + %Materia view - Chars or integers + if(ismember(field,{'frames','mri_code','scanner','tracer','analyzed','found','freesurfed','magia_time','error','magia_githash','project','group_name','description','notes'})) %integer or char if(ismember('~',value)) %user excludes spesified values, value is char - where_statement = [where_statement,' NOT ','inventory.',lower(field),' =',char(39),value(2:length(value)),char(39)]; + where_statement = [where_statement,' NOT ','materia.',lower(field),'=',char(39),value(2:length(value)),char(39)]; if(i~=nargin/2) where_statement = [where_statement,' AND ']; end @@ -130,78 +85,24 @@ if((~mod(nargin,2))) if(isnumeric(value)) % value may be char or numeric value = num2str(value); end - where_statement = [where_statement,'inventory.',lower(field),' =',char(39),value,char(39)]; - if(i~=nargin/2) - where_statement = [where_statement,' AND ']; - end - end - end - %Main table - Chars - if(ismember(field,{'project','group_name','description','scanner','notes','type','source'})) %integer or char - if ~ismember('main', table) - table{end+1}= 'main'; - end - if(ismember('~',value)) %user excludes spesified values, value is char - where_statement = [where_statement,' NOT ','main.',lower(field),' =',char(39),value(2:length(value)),char(39)]; - if(i~=nargin/2) - where_statement = [where_statement,' AND ']; - end - else - if(isnumeric(value)) % value may be char or numeric - value = num2str(value); - end - where_statement = [where_statement,'main.',lower(field),' =',char(39),value,char(39)]; + where_statement = [where_statement,'materia.',lower(field),'=',char(39),value,char(39)]; if(i~=nargin/2) where_statement = [where_statement,' AND ']; end end end end - if(nargin==0) - q = 'SELECT study.image_id FROM "megabase"."aivo2".study'; - else - if (numel(table) == 1) - %Only one table selected - select_statement = ['SELECT ' table{1} '.image_id FROM "megabase"."aivo2".' table{1} ' ']; - elseif(ismember('study',table)) - %More than one table and study is one of them - select_statement = 'SELECT study.image_id FROM "megabase"."aivo2".study,'; - table(ismember('study',table))=[]; - for t=1:numel(table) - select_statement = [select_statement,'"megabase"."aivo2".' table{t} ' ']; - where_statement = [where_statement, ' AND "aivo2".study.image_id = "aivo2".' table{t} '.image_id']; - if(numel(table)-t > 0) - select_statement = [select_statement,' , ']; - end - end - elseif(ismember('main',table)) - %More than one table and main is one of them - select_statement = 'SELECT main.image_id FROM "megabase"."aivo2".main, '; - table(ismember('main',table))=[]; - for t=1:numel(table) - select_statement = [select_statement,'"megabase"."aivo2".' table{t} ' ']; - where_statement = [where_statement, ' AND "aivo2".main.image_id = "aivo2".' table{t} '.image_id']; - if(numel(table)-t > 0) - select_statement = [select_statement,' , ']; - end - end - elseif(ismember('inventory',table)) - %More than one table and main is one of them - select_statement = 'SELECT inventory.image_id FROM "megabase"."aivo2".inventory, '; - table(ismember('inventory',table))=[]; - for t=1:numel(table) - select_statement = [select_statement,'"megabase"."aivo2".' table{t} ' ']; - where_statement = [where_statement, ' AND "aivo2".inventory.image_id = "aivo2".' table{t} '.image_id']; - if(numel(table)-t > 0) - select_statement = [select_statement,' , ']; - end - end - end - q = [select_statement,where_statement,' ORDER BY image_id ASC;']; + + q = 'SELECT materia.image_id FROM "megabase"."aivo2".materia '; + + if(nargin>0) + q = [q,where_statement,' ORDER BY image_id ASC;']; end + curs = exec(conn,q); curs = fetch(curs); close(curs); + if(strcmp(curs.Data{1},'No Data')) subjects = []; else @@ -214,4 +115,12 @@ end close(conn); +end + +function refresh(conn) + +refresh_cmd = 'REFRESH MATERIALIZED VIEW aivo2.materia'; +curs = exec(conn,refresh_cmd); +close(curs); + end \ No newline at end of file