sibbr / sdm-workflows

Scientific workflow for species distribution modeling implemented in Swift

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

O workflow para em caso de erro do algoritmo

gmgall opened this issue · comments

O workflow para de executar em pontos arbitrários caso exista alguma espécie no arquivo de ocorrências que gere um erro com o algoritmo e parâmetros escolhidos. Reproduzo um exemplo do problema abaixo.

Considere o seguinte arquivo de ocorrências:

id      especies        longitude       latitude        pres
1       Abarema adenophora      -59.974722      -2.929444       1
2       Abarema arenaria        -65.63333333    1.516666667     1
3       Abarema brachystachya   -48.501389      -25.652222      1
4       Abarema brachystachya   -46.063889      -23.809444      1
5       Abarema brachystachya   -38     -12.05  1
6       Abarema cochleata       -59.974722      -2.929444       1
7       Abarema cochliacarpos   -41.8   -12.283333      1
8       Abarema cochliacarpos   -41.794444      -12.247778      1
9       Abarema cochliacarpos   -41.793611      -12.2425        1
10      Abarema cochliacarpos   -41.514722      -12.467222      1
11      Abarema cochliacarpos   -41.514167      -12.86  1
12      Abarema cochliacarpos   -41.5   -12.716667      1
13      Abarema cochliacarpos   -41.5   -12.433333      1
14      Abarema cochliacarpos   -41.4725        -12.4575        1
15      Abarema cochliacarpos   -41.466667      -12.633333      1
16      Abarema cochliacarpos   -41.466667      -12.45  1
17      Abarema cochliacarpos   -41.383333      -12.533333      1
18      Abarema cochliacarpos   -41.366667      -12.516667      1
19      Abarema cochliacarpos   -41.333889      -13.559722      1
20      Abarema cochliacarpos   -41.266667      -11.516667      1
21      Abarema cochliacarpos   -41.258611      -11.520833      1
22      Abarema cochliacarpos   -41.208056      -11.591389      1
23      Abarema cochliacarpos   -41.206667      -11.590833      1
24      Abarema cochliacarpos   -41.203333      -11.584722      1
25      Abarema cochliacarpos   -41.2   -11.866667      1
26      Abarema cochliacarpos   -41.188611      -11.445 1
27      Abarema cochliacarpos   -41.185556      -11.833056      1
28      Abarema cochliacarpos   -41.181667      -11.573056      1
29      Abarema cochliacarpos   -41.179444      -11.482222      1
30      Abarema cochliacarpos   -41.158333      -11.638056      1
31      Abarema cochliacarpos   -41.141944      -11.761667      1
32      Abarema cochliacarpos   -41.133333      -11.75  1
33      Abarema cochliacarpos   -41.053611      -11.76  1
34      Abarema cochliacarpos   -41.033333      -12.016667      1
35      Abarema cochliacarpos   -40.992778      -11.625278      1
36      Abarema cochliacarpos   -40.884444      -11.466111      1
37      Abarema cochliacarpos   -40.75  -11.383333      1
38      Abarema cochliacarpos   -40.423056      -13.485 1
39      Abarema cochliacarpos   -39.884167      -13.120556      1
40      Abarema cochliacarpos   -39.603333      -14.705833      1
41      Abarema cochliacarpos   -39.154444      -13.7725        1
42      Abarema cochliacarpos   -39.045278      -13.689444      1
43      Abarema cochliacarpos   -38.433333      -9.966667       1
44      Abarema cochliacarpos   -38.428056      -12.185 1
45      Abarema cochliacarpos   -38.416667      -12.95  1
46      Abarema cochliacarpos   -38.4   -12.166667      1
47      Abarema cochliacarpos   -38.35  -12.933333      1
48      Abarema cochliacarpos   -37.916667      -11.716667      1
49      Abarema cochliacarpos   -37.866667      -12.216667      1

E o seguinte request file, gerado pelo próprio workflow (a maior parte das linhas comentadas foi apagada por concisão):

#####################
### Input section ###

WKT Coord System = GEOGCS[WGS84, DATUM[WGS84, SPHEROID[WGS84, 6378137.0, 298.257223563]], PRIMEM[Greenwich, 0.0], UNIT[degree, 0.017453292519943295], AXIS[Longitude,EAST], AXIS[Latitude,NORTH]]

Occurrences source = teste.txt

Occurrences group = Abarema arenaria

Map = workshop/Brasil_ASC/alt.asc
Map = workshop/Brasil_ASC/bio1.asc
Map = workshop/Brasil_ASC/bio12.asc

Mask = workshop/Brasil_ASC/bio12.asc

######################
### Output section ###

Output format = workshop/Brasil_ASC/bio12.asc

Output map = workshop/Brasil_ASC/alt.asc
Output map = workshop/Brasil_ASC/bio1.asc
Output map = workshop/Brasil_ASC/bio12.asc

Output mask = workshop/Brasil_ASC/bio12.asc

Output model = output_Abarema arenaria.xml

Output file = output_Abarema arenaria.img

Output file type = GreyBMP

########
# SVM
#
Algorithm = SVM
Parameter = SvmType 0
Parameter = KernelType 2
Parameter = Degree 3
Parameter = Gamma 0
Parameter = C 1
Parameter = Coef0 0
Parameter = Nu 0.5
Parameter = ProbabilisticOutput 0
Parameter = NumberOfPseudoAbsences 500

O resultado da execução do workflow é o seguinte:

$ ~/swift-0.93/bin/swift -tc.file tc.data -sites.file sites.xml workflow-openmodeller.swift -o=teste.txt 
Swift 0.93 swift-r5483 cog-r3339

RunID: 20140121-1545-vk9vin9a
 (input): found 20 files
Progress:  time: Ter, 21 Jan 2014 15:45:19 -0200
Progress:  time: Ter, 21 Jan 2014 15:45:21 -0200  Checking status:1
Progress:  time: Ter, 21 Jan 2014 15:45:22 -0200  Stage in:4  Submitting:1  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 15:45:25 -0200  Active:4  Checking status:1  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 15:45:27 -0200  Active:4  Checking status:1  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 15:45:30 -0200  Active:4  Checking status:1  Finished successfully:1
Execution failed:
        File not found: /var/tmp/gmgall/swiftwork/workflow-openmodeller-20140121-1545-vk9vin9a/shared/output_Abarema arenaria.xml

E nenhum arquivo de saída é gerado (arquivos nomeados output_):

$ ls output*
ls: impossível acessar output*: Arquivo ou diretório não encontrado

Uma execução isolada do om_console mostra que foi um erro específico do algoritmo:

$ om_console request_Abarema\ arenaria.txt 
[Info] openModeller version 1.4.0
[Info] Reading occurrences...done
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/alt.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio1.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Info] Reading layers...done
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] Presence Point "2" at (-65.633333,1.516667) has no environment. It will be discarded.
[Info] Creating model
[Error] Cannot create model without any presence or absence point.
[Info] Exception occurred: Cannot create model without any presence or absence point.

Removendo a linha referente à espécie problemática (Abarema arenaria), o workflow executa até o fim e gera os arquivos de saída:

$ # Remove as linhas contendo Abarema arenaria
$ sed '/Abarema arenaria/d' -i teste.txt 

$ # Reexecuta o workflow
$ ~/swift-0.93/bin/swift -tc.file tc.data -sites.file sites.xml workflow-openmodeller.swift -o=teste.txt 
Swift 0.93 swift-r5483 cog-r3339

RunID: 20140121-1559-i2sh2hif
 (input): found 20 files
Progress:  time: Ter, 21 Jan 2014 15:59:50 -0200
Progress:  time: Ter, 21 Jan 2014 15:59:51 -0200  Checking status:1
Progress:  time: Ter, 21 Jan 2014 15:59:53 -0200  Stage in:3  Submitting:1  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 16:00:20 -0200  Active:4  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 16:00:41 -0200  Active:3  Checking status:1  Finished successfully:1
Progress:  time: Ter, 21 Jan 2014 16:00:50 -0200  Active:2  Finished successfully:3
Progress:  time: Ter, 21 Jan 2014 16:00:52 -0200  Active:1  Checking status:1  Finished successfully:3
Progress:  time: Ter, 21 Jan 2014 16:01:20 -0200  Active:1  Finished successfully:4
Progress:  time: Ter, 21 Jan 2014 16:01:23 -0200  Checking status:1  Finished successfully:4
Final status:  time: Ter, 21 Jan 2014 16:01:23 -0200  Finished successfully:5

$ # Os arquivos de saída são gerados normalmente
$ ls output*
output_Abarema adenophora.img  output_Abarema brachystachya.img  output_Abarema cochleata.img  output_Abarema cochliacarpos.img
output_Abarema adenophora.xml  output_Abarema brachystachya.xml  output_Abarema cochleata.xml  output_Abarema cochliacarpos.xml

Portanto, atualmente o workflow só executará até o fim se for garantido que a combinação algoritmo + pontos de ocorrência não gerará erros para todas as espécies que aparecerem no arquivo de ocorrências.

Tentei verificar o código de retorno do om_console em caso de erro, mas ele sempre retorna 0 (sucesso) independente da modelagem ter sido concluída ou não.

Mudar para MAXENT (commit e28f288) não muda muito a situação. Só resolve o problema no caso específico do erro ser a existência de apenas um ponto de ocorrência para a espécie. Se existir um ponto, mas ele precisar ser excluído pelo openModeller por falta de camadas ambientais, por exemplo, o erro permanece.

É isso que acontece com a espécie Abarema arenaria no exemplo acima, mesmo mudando o algoritmo:

$ om_console request_Abarema\ arenaria.txt 
[Info] openModeller version 1.4.0
[Info] Reading occurrences...done
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/alt.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio1.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Info] Reading layers...done
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] The raster workshop/Brasil_ASC/bio12.asc is not georeferenced. Assuming LatLong WGS84
[Warn] Presence Point "2" at (-65.633333,1.516667) has no environment. It will be discarded.
[Info] Creating model
[Error] Cannot create model without any presence or absence point.
[Info] Exception occurred: Cannot create model without any presence or absence point.

Para o workflow executar até o fim do jeito que está hoje, ainda é preciso garantir que o algoritmo escolhido não gerará nenhum erro no openModeller para todas as espécies que aparecem no arquivo de ocorrências.

Parar é o comportamento desejado para garantir consistência na execução dos workflows em vários casos.

Para fazer o laço foreach continuar mesmo em caso de erro, basta setar lazy.errors=true no arquivo swift.properties.