- storescp를 띄워놓고 DICOM을 받는다.
- DICOM tag 0011,1003 의 값을 확인한다
- 값이 ("SCMAPAUGMENTED" "SCREPORTAUGMENTED" "SC_ADDITIONAL") 중 하나면
- 0008,103E tag의 값을 COMPARISON 으로 추가한다
- 수정한 DICOM 파일을 다른 서버로 전송한다.
sc-tag-editor.env
필요한 변수를 저장한다.
ROOT_DIR="/opt/jihoon/bin/sc-tag-editor"
# AE_tittle of the sc-tag-editor service
AE_TITLE="JIHOON"
# Listen port to receive DICOM files
LISTEN_PORT=13823
# New tag to input to the received DICOM
NEW_SC_TAG_NUMBER="(0008,103E)"
NEW_SC_TAG_VALUE="COMPARISON"
#Store Destination config
PACS_IP=10.10.60.40
PACS_PORT=14025
PACS_AETITLE="PACSNAME"
dicom-receiver
- DICOM을 전달받을 storescp 를 실행하는 스크립트
- sc-tag-editor.env 의 변수를 불러온다
- DICOM file을 받으면 sc-tag-editor 스크립트를 실행한다
- storescp 옵션에 따라 DICOM을 전달받으면 파라미터로 1. AE title, 2. DICOM file name 을 받는다
#!/bin/bash
. /etc/sc-tag-editor.env
echo_with_time() {
echo $(date "+%F %T") $1
}
/usr/bin/storescp +xa +uf -dhl -xs --aetitle $AE_TITLE $LISTEN_PORT --exec-on-reception "$ROOT_DIR/sc-tag-editor #a #f"
echo
echo "--------------------Setting INFO------------------------"
echo "ROOT Directory : $ROOT_DIR"
echo "STORE PORT : $LISTEN_PORT "
echo "AE TITLE : $AE_TITLE"
echo "PACS IP : $PACS_IP"
echo "PACS PORT : $PACS_PORT"
echo "PACS AETITLE : $PACS_AETITLE"
echo "---------------------------------------------------------"
echo
sc-tag-editor
- 전송받은 DICOM 의 tag 정보를 체크하고 tag 값을 추가하는 스크립트
- 0011,1003 tag의 값을 변수 TARGET로 저장한다.
- 변수 TARGET의 값이 변수 SC에 저장된 값 중에 하나와 일치하는지 비교한다
- 일치하면 sc-tag-editor.env에 저장된 NEWSCTAGNUMBER tag Number의 값을 NEWSCTAGVALUE로 입력한다
- 일치 하지 않으면 0011,1003 tag내용을 출력하고 tag 수정을 하지 않는다
- env 값에 저장된 PACS 정보로 DICOM을 전송한다
#!/bin/bash
. /etc/sc-tag-editor.env
echo_with_time() {
echo $(date "+%F %T") $1
}
AETITLE=$1
DICOM=$2
ACCNO=`dcmdump -s +P 0008,"0050" "$DICOM" | cut -d "[" -f2 | cut -d "]" -f1`
TARGET=`dcmdump +P 0011,"1003" "$DICOM" | cut -d "[" -f2 | cut -d "]" -f1`
SC=("SC_MAP_AUGMENTED" "SC_REPORT_AUGMENTED" "SC_ADDITIONAL")
if [[ " ${SC[@]} " =~ " $TARGET " ]]; then
echo_with_time "Auto-comparison result is received....... : file = $DICOM / account no. = $ACCNO"
#Modify tag
dcmodify -i "$NEW_SC_TAG_NUMBER=$NEW_SC_TAG_VALUE" $DICOM
echo "Modified $NEW_SC_TAG_NUMBER tag to $NEW_SC_TAG_VALUE"
else
echo_with_time "Received image is not the auto-comparison result. 0011,1003 is $TARGET"
fi
#Send Modified SC to Destination
echo "Sending DICOM.....to Destination"
dcmsend --aetitle $AETITLE --call $PACS_AETITLE $PACS_IP $PACS_PORT $DICOM
echo "Sent ACCNO: $ACCNO , AETITLE: $AETITLE SC to Destination($PACS_AETITLE , $PACS_IP , $PACS_PORT)!"
sc-tag-editor.service
- sc-tag-editor 와 dicom-receiver 스크립트를 서비스로 관리한다.
- 네트워크가 연결된 상태면 실행된다
- 문제가 생기면 3초마다 재시작을 시도한다
/opt/jihoon/bin/sc-tag-editor/dicom-receiver
스크립트를 실행한다
[Unit]
Description = SC tag editor
After = network.target
[Service]
Type = simple
Restart=always
RestartSec=3
WorkingDirectory = /opt/jihoon/bin/sc-tag-editor
ExecStart = /opt/jihoon/bin/sc-tag-editor/dicom-receiver
[Install]
WantedBy = default.target
setup
- /opt/jihoon/bin/sc-tag-editor 디렉토리를 생성하고 모든 파일을 복사한다
- sc-tag-editor 서비스를 실행한다
#!/bin/bash
mkdir -p /opt/jihoon/bin/sc-tag-editor
if [ $? -ne 0 ]; then
echo "failed to make sc-tag-editor directory... please check permission in /opt/jihoon"
exit 1
fi
#Transfer scripts
cp dicom-receiver /opt/jihoon/bin/sc-tag-editor/
cp sc-tag-editor /opt/jihoon/bin/sc-tag-editor/
cp sc-tag-editor.env /etc/
cp sc-tag-editor.service /usr/lib/systemd/system/
cp sc-tag-editor.env /etc/
ln -s /etc/sc-tag-editor.env .env
#Start sc-tag-editor
systemctl start sc-tag-editor
systemctl status sc-tag-editor
0 댓글