Skip to content
Snippets Groups Projects
Unverified Commit d9ecb80d authored by Tomi Karjalainen's avatar Tomi Karjalainen Committed by GitHub
Browse files

Merge pull request #66 from tkkarjal/aivo_get_subjects_simplified

Add files via upload
parents 3a0e525b 8fc5200b
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,8 @@ function subjects = aivo_get_subjects(varargin) ...@@ -39,6 +39,8 @@ function subjects = aivo_get_subjects(varargin)
conn = aivo_connect(); conn = aivo_connect();
refresh(conn); %Refresh materia view
where_statement = 'WHERE '; where_statement = 'WHERE ';
table = {}; table = {};
...@@ -50,16 +52,13 @@ if((~mod(nargin,2))) ...@@ -50,16 +52,13 @@ if((~mod(nargin,2)))
field = varargin{i+l}; field = varargin{i+l};
value = varargin{i+l+1}; value = varargin{i+l+1};
l=l+1; l=l+1;
% Study table - Values % Materia view - Values
if(ismember(field,{'study_date','mri_code','dose','scan_start_time','injection_time'})) %value if(ismember(field,{'study_date','mri_code','dose','scan_start_time','injection_time','height','weight','age'}))
if ~ismember('study', table)
table{end+1}= 'study';
end
if(ischar(value)) %only one value if(ischar(value)) %only one value
if(ismember('~',value)) %exclude spesific 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 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 end
else else
lb = value{1}; % lower bound lb = value{1}; % lower bound
...@@ -69,19 +68,16 @@ if((~mod(nargin,2))) ...@@ -69,19 +68,16 @@ if((~mod(nargin,2)))
else else
value = [num2str(lb),' AND ',num2str(ub)]; value = [num2str(lb),' AND ',num2str(ub)];
end end
where_statement = [where_statement,'study.',lower(field),' BETWEEN ',value]; where_statement = [where_statement,'materia.',lower(field),' BETWEEN ',value];
end end
if(i~=nargin/2) if(i~=nargin/2)
where_statement = [where_statement,' AND ']; where_statement = [where_statement,' AND '];
end end
end end
%Study table - Chars %Materia view - Chars or integers
if(ismember(field,{'frames','mri_code','scanner','tracer'})) %integer or char 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('study', table)
table{end+1}= 'study';
end
if(ismember('~',value)) %user excludes spesified values, value is char 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)]; where_statement = [where_statement,' NOT ','materia.',lower(field),'=',char(39),value(2:length(value)),char(39)];
if(i~=nargin/2) if(i~=nargin/2)
where_statement = [where_statement,' AND ']; where_statement = [where_statement,' AND '];
end end
...@@ -89,119 +85,24 @@ if((~mod(nargin,2))) ...@@ -89,119 +85,24 @@ if((~mod(nargin,2)))
if(isnumeric(value)) % value may be char or numeric if(isnumeric(value)) % value may be char or numeric
value = num2str(value); value = num2str(value);
end end
where_statement = [where_statement,'study.',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
%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) if(i~=nargin/2)
where_statement = [where_statement,' AND ']; where_statement = [where_statement,' AND '];
end end
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
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)];
if(i~=nargin/2)
where_statement = [where_statement,' AND '];
end
else
if(isnumeric(value)) % value may be char or numeric
value = num2str(value);
end end
where_statement = [where_statement,'inventory.',lower(field),' =',char(39),value,char(39)];
if(i~=nargin/2)
where_statement = [where_statement,' AND '];
end end
q = 'SELECT materia.image_id FROM "megabase"."aivo2".materia ';
if(nargin>0)
q = [q,where_statement,' ORDER BY image_id ASC;'];
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)];
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;'];
end
curs = exec(conn,q); curs = exec(conn,q);
curs = fetch(curs); curs = fetch(curs);
close(curs); close(curs);
if(strcmp(curs.Data{1},'No Data')) if(strcmp(curs.Data{1},'No Data'))
subjects = []; subjects = [];
else else
...@@ -215,3 +116,11 @@ end ...@@ -215,3 +116,11 @@ end
close(conn); close(conn);
end 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment