Informática para Ciências e Engenharias B Trabalho Prático 2016/17 1 Objetivo do Trabalho A depuração plasmática é o processo de remoção de uma substância do plasma sanguíneo, principalmente por acção dos rins. A constante de depuração plasmática é normalmente calculada em mililitro por minuto e representada pela letra C (de clearance em Inglês). Esta constante corresponde ao volume de plasma do qual a substância pode ser eliminada em cada unidade de tempo. O objectivo deste trabalho é criar um programa em Matlab e SQL que facilite a organização de dados sobre a eliminação de um fármaco do sangue de um conjunto de pacientes voluntários. Como os médicos responsáveis não sabem programar mas precisam de obter vários relatórios, gráficos e processar vários conjuntos de dados, o programa irá ler um ficheiro com um conjunto de comandos, escrito pelos médicos, e irá executar cada um desses comandos pela ordem dada. 1.1 Cálculo das constantes de depuração Se um fármaco estiver presente no sangue com concentração [F ], a variação na sua concentração é dada pela equação: V d[f ] = C [F ] (1) dt onde V é o volume total de plasma sanguíneo e C a constante de depuração plasmática. Integrando esta equação, considerando que o fármaco foi introduzido no sangue com concentração inicial F 0, a sua concentração plasmática ao longo do tempo é dada por: [F ] t = [F ] 0 e C V t (2) onde C é a constante de depuração, t o tempo, [F ] 0 a concentração inicial do fármaco e V o volume plasmático total. Também é útil considerar um parâmetro independente do volume de plasma. Assim, podemos definir a constante relativa de depuração, C r, como sendo: C r = C V (3) Desta forma, podemos escrever assim a equação diferencial 2: e calcular C r pela regressão linear dos logaritmos das concentrações: C r = 1 N [F ] t = [F ] 0 e Crt (4) N n=1 ln([f ] n /[F ] 0 ) t n (5) onde C r é a constante relativa de depuração, N o número de amostras consideradas, [F ] n a concentração da amostra n, t n o tempo da amostra n (em horas) e [F ] 0 a concentração inicial do fármaco, nas mesmas unidades que [F ] n (mg/l, neste caso). Note que o logaritmo é o logaritmo natural, de base e. 1
Para calcular a constante de depuração de um paciente podemos calcular a constante relativa de depuração pela equação (5) e depois multiplicar o resultado pelo volume plasmático do paciente. Se for do sexo masculino, o seu volume plasmático será aproximadamente 39ml por Kg de peso. Se for do sexo feminino, será 40ml por Kg de peso. Finalmente, é preciso notar que o tempo das amostras é dado em horas e a constante de depuração deve ter unidades de mililitro por minuto. Assim, é preciso dividir por 60 para converter as unidades antes de apresentar o resultado final. 2 Descrição do Problema 2.1 Programa Pretende-se um programa cuja função principal se chame processar receba como argumento o nome de um ficheiro com os comandos a processar: function processar(nomefichcomandos) O ficheiro nomefichcomandos contém um comando por linha. Os comandos podem surgir por qualquer ordem, sendo aceites os seguintes: CONFIG nomebd concinicial O comando CONFIG vem sempre seguido de um espaço, depois o nome da base de dados usar, outro espaço e o valor da concentração inicial do fármaco dada em miligrama por litro de plasma sanguíneo do paciente. Estes parâmetros são persistentes. Ou seja, para todos os comandos que se seguirem a um comando CONFIG deve ser considerada a base de dados e a concentração inicial indicadas nesse comando CONFIG até que seja encontrado outro comando CONFIG que especifique outros valores. CRIAR TABELAS Ao encontrar este comando o programa deve criar duas tabelas na base de dados indicada no parâmetro nomebd do último comando CONFIG encontrado até ao momento: Tabela Pacientes com campos para o identificador do paciente (um número inteiro único para cada paciente), o sexo (um carácter, M ou F), a idade (um número inteiro) e o peso (um número real). Tabela Amostra com campos para o identificador de cada amostra de plasma retirada do paciente (um número inteiro único para cada amostra), o identificador do paciente (um número inteiro), o número de horas após a administração do fármaco (um número real) e a concentração do fármaco no plasma, em miligrama por litro de plasma (um número real). PACIENTES nomeficheiro Ler um ficheiro com o nome indicado e carregar a informação para a tabelas dos pacientes na base de dados indicada pelo último comando CONFIG. Cada paciente está descrito numa linha do ficheiro com o seguinte formato: o identificador do paciente, o seu sexo, a sua idade (em anos) e o seu peso (em Kg), separados pelo carácter ; Exemplo de parte de um ficheiro dos pacientes: 2
1;F;53;56.1 2;M;66;87.8 3;F;54;50.0 4;M;38;85.6 5;F;54;55.4... AMOSTRAS nomeficheiro Ler um ficheiro com o nome indicado e carregar a informação para a tabelas das amostras na base de dados indicada pelo último comando CONFIG. Cada amostra está descrita numa linha do ficheiro com o seguinte formato: o identificador da amostra, o identificador do paciente, o tempo decorrido desde a injecção do fármaco (em hora) e a concentração do fármaco no plasma sanguíneo (em miligrama por litro), separados pelo carácter ; Exemplo de parte de um ficheiro das amostras: 1;8;15.01;101.34 2;28;10.11;100.61 3;21;12.80;74.92 4;10;14.61;72.63 5;20;18.05;42.61... RELATORIO nomeficheiro sexo minidade maxidade Escrever no ficheiro nomefich o identificador de cada paciente, e a constante de depuração calculada pelas amostras correspondentes, para cada paciente que cumpra as restrições indicadas nos argumentos do comando: sexo seleccionar apenas pacientes do sexo indicado (M ou F) ou qualquer sexo se o carácter neste argumento for *. minidade seleccionar apenas pacientes com idade maior ou igual ao valor indicado, ou sem mínimo de idade se o valor indicado for *. maxidade seleccionar apenas pacientes com idade menor ou igual ao valor indicado, ou sem máximo de idade se o valor indicado for *. Exemplos de comandos de relatório: RELATORIO todos.txt * * * RELATORIO masculino.txt M * * RELATORIO feminino.txt F * * RELATORIO menos_30.txt M * 30 RELATORIO mais_30.txt M 30 * 3
Para calcular a constante de depuração para cada paciente deve calcular primeiro a constante relativa usando os dados para esse paciente (pela equação 5) e depois multiplicar pelo volume plasmático do paciente (39ml por Kg de peso se do sexo masculino; 40ml por Kg de peso se do sexo feminino). Finalmente, como isto irá dar a constante de depuração em mililitro por hora, deverá dividir por 60 para obter a constante nas unidades desejadas de mililitro por minuto. Este é o exemplo do relatório gerado com o comando RELATORIO menos 30.txt M * 30, em que cada linha tem o identificador do paciente e a constante de depuração calculada para esse paciente, com as suas amostras correspondentes: 19;2.778285 24;2.779689 GRAFICO nomeficheiro sexo minidade maxidade Gravar num ficheiro um gráfico com todos os valores obtidos para o conjunto seleccionado de pacientes, e indicando com uma linha a curva teórica prevista para a concentração do fármaco no sangue calculando a constante de depuração usando todos os pontos deste conjunto e traçando o gráfico para um período de 100 horas. As condições de selecção dos pacientes são as mesmas para o relatório, incluindo a possibilidade de usar um carácter * para indicar qualquer valor nesse parâmetro (sexo, idade mínima ou idade máxima). Para o cálculo da curva teórica, deve usar a equação 5 para obter a constante relativa de depuração usando todas as amostras dos pacientes seleccionados, e depois calcular a curva usando a equação 4. Note que, sendo as ordenadas em horas, esta constante C r deve estar nas unidades de hora 1, senão a curva não ficará correcta. O título do gráfico deve incluir o valor da constante de depuração C calculada a partir de todas as amostras de todos os pacientes seleccionados. Esta constante deve vir nas unidades de mililitro por minuto. Para obter a constante de depuração a partir da constante relativa C r calculada deverá considerar um valor de volume plasmático igual à média dos valores associados a todas as amostras. Para gravar o gráfico pode usar a função saveas. Esta função recebe o identificador do gráfico, que é fornecido pela função figure, e o nome do ficheiro onde gravar o gráfico. Por exemplo: id = figure; plot([1,2,3,4],[3,1,2,5]); saveas(id, teste.png ); As imagens abaixo mostram os dois gráficos do ficheiro de comandos fornecido, para pacientes com menos de 30 anos (esquerda) ou mais de 30 anos (direita). 4
3 Dados do Trabalho O arquivo trabalho.zip, disponibilizado no CLIP e na página da cadeira tem os ficheiros orders.txt, pacientes.txt e amostras.txt, que podem ser usados como exemplos para testar o seu programa. Deve também incluir na sua pasta de trabalho os ficheiros sqlite3.exe, sqlite.m e parserecords.m para o acesso às base de dados. Estes ficheiros foram usados na ficha 8 e estão disponíveis na página da cadeira. Além disso, sugerimos que crie também outros ficheiros de comandos para testar partes do seu programa. Por exemplo, um que apenas cria as tabelas e insere os dados; outro que usa uma base de dados já existente e só faz relatórios ou gráficos, e assim por diante. Desta forma pode ser mais fácil testar partes específicas do seu programa. 4 Critérios de Avaliação do Trabalho De acordo com o Regulamento de Avaliação de Conhecimentos da FCT/UNL, 1 os estudantes diretamente envolvidos numa fraude são liminarmente reprovados na disciplina. Em ICE, considera-se que um aluno que dá ou que recebe código num trabalho comete fraude. Os alunos que cometerem fraude num trabalho não obterão frequência. Os trabalhos serão avaliados de acordo com os seguintes critérios. Utilização correta dos elementos básicos da linguagem Matlab. Decomposição adequada do problema em sub-problemas. Código legível (nomes, indentação, etc.) e comentado. Criação correta da tabela Pacientes na base de dados nomebd. Criação correta da tabela Amostras na base de dados nomebd. Inserção correta dos dados dos ficheiros nas tabelas respectivas da base de dados nomebd. Criação dos ficheiros de relatórios e cálculo das constantes dos pacientes. Criação dos gráficos com os dados e a curva correctamente calculada. 1 Em http://www.fct.unl.pt/sites/default/files/documentos/estudante/informacao_academica/reg_ Aval.pdf 5
Selecção correcta dos registos usados no relatório e nos dados. Implementação genérica. O programa deve ser capaz de processar qualquer ficheiro de comandos cujos comandos possam ser processados. Só deve assumir que: as tabelas da base de dados são Pacientes e Amostras, com os campos indicados no enunciado; os comandos a processar são dos tipos indicados; os ficheiros referidos nos comandos PACIENTES e AMOSTRASexistem na pasta de trabalho; os comandos PACIENTES e AMOSTRAS só irão aparecer no ficheiro de comandos depois de seleccionada uma base de dados que já tenha as tabelas criadas. Para a nota do trabalho ser 20, tudo tem de estar certo. Mas a nota do trabalho será um número entre zero e vinte. Portanto, se o programa for decomposto em funções, a incorrecção de uma função não deve impedir a programação das outras. Por exemplo, é preferível fazer um programa que processe só alguns comandos a não fazer programa nenhum. Pode também simplificar o programa ignorando alguma funcionalidade. No entanto, estas simplificações penalizarão a nota final: Ignorar os critérios de selecção e usar todos os registos nos comandos RELATORIO e GRA- FICO: penaliza 3 valores. Ignorar o comando RELATORIO: penaliza 5 valores. Ignorar o comando GRAFICO: penaliza 3 valores. Não gravar o gráfico para ficheiro: penaliza 1 valor. 6