bfconvert에서는 Object 위치를 좌표로 보내는 기능이 있다. 문제라면 소수점이 있는 실수라는 것이다. 그러나 픽셀에서는 소수점 값이 없으므로 정수로 변환이 필요하다. bc는 기본적으로 내림으로 결과를 처리한다고 하므로 이를 이용한다. 1로 나눈 값을 버림으로 처리하면 정수로 된다.
echo "$Location_Center_X/1" | bc
bfconvert에서는 Object 위치를 좌표로 보내는 기능이 있다. 문제라면 소수점이 있는 실수라는 것이다. 그러나 픽셀에서는 소수점 값이 없으므로 정수로 변환이 필요하다. bc는 기본적으로 내림으로 결과를 처리한다고 하므로 이를 이용한다. 1로 나눈 값을 버림으로 처리하면 정수로 된다.
echo "$Location_Center_X/1" | bc
Shell에서는 기본적으로 정수만 사칙 연산이 된다. 그래서 8.0이 0보다 크냐고 조건문을 만들면 integer 값이 필요하다며 거부한다. 매우 빡치는 일이지만 해결 방법은 있다. 내가 이용한 방법은 bc를 이요한 것이다.
echo "사칙연산" | bc
이렇게 하면 연산이 가능하다.
12.0 > 0의 참/거짓을 판단을 하면 된다. 참일 경우는 1, 거짓일 경우는 0을 출력한다. 이를 이용한다.
if [ $(echo "${NUM1} > 0" | bc) -eq 1 ]; then
명령어
fi
R의 matrix나 data.frame 구조로 받아오는 방법을 몰라서 일단 한 줄씩 값을 읽어서 판별하는 방법을 기반으로 하였다.
INPUT1=/home/byun1114/work/MyExpt_Image.csv
while IFS=, read [컬럼 이름 모두를 빈 칸으로 구별]
do
if [ "${첫 번째 컬럼}" != "첫 번째 컬럼" ]; then
{명령어}
fi
done < $INPUT1
여러 방법이 있는 듯 한데, 결국 쉽게 할 수 있는 것은 IFS에서 구분 기호를 ,로 입력해서 불러오는 것이었다. SQL에서와 비슷하게 read 이후에 모든 컬럼 이름을 써야 헷갈리지 않는다.
if 구절이 있는 이유는 header 값이 있는 경우를 구별할 수 없기 때문이다. 제목의 첫 줄에 명령어를 바로 적용하지 않도록 해야 한다.
bfconvert에서 SVS 파일을 TIFF 로 변환하다 보면 series 라는 표현이 나온다. 처음에는 왜 용량이 다르지라고 생각해서 파일을 살펴 보았는데 동일한 이미지 2개가 하나에 있는 경우도 있었다. 뭔가 숨은게 있구나 싶었다. 오늘 자료를 좀 찾아보았는데, 명확한 것은 찾지 못했다. OME의 관련 문서들을 보면 다른 해상도 정보가 들어간 것이 아니니 Z축의 정보가 반영된 것이 아닐까 싶었다. 페이지나 레이어가 반영될 수 있는 TIFF 포맷이기 때문에 과감하게 그냥 버리고 파일을 처리하기로 했다.
bfconvert -series 0
이와 같이 series를 고정시키고 변환을 하면 파일 픽셀이 동일한 파일에서는 파일 용량이 동일하게 생성된다. 아마 이렇게 처리하는것이 맞는 것 같다.
https://docs.openmicroscopy.org/ome-model/6.0.0/ome-tiff/specification.html