dcmsend: SCU simples de armazenamento DICOM (remetente)
SINOPSE
dcmsend [options] peer port dcmfile-in...
DESCRIÇÃO
O aplicativo dcmsend implementa um SCU (Service Class User) para a Classe de Serviço Storage. Diferentemente do conhecido utilitário storescu, o dcmsend tem menos opções e, portanto, é mais fácil de usar - o que também explica o termo "simples" no título. O principal objetivo deste aplicativo é enviar um grande número de arquivos DICOM para um Provedor da Classe de Serviço Storage (SCP). O dcmsend oferece suporte tanto a múltiplas associações (uma após a outra) quanto à descompressão de instâncias SOP DICOM, se necessário, para transferi-las.
PARÂMETROS
peer hostname of DICOM peer
port tcp/ip port number of peer
dcmfile-in DICOM file or directory to be transmitted
OPÇÕES
opções gerais
-h --help- exibe este texto de ajuda e sai
--version- exibe as informações de versão e sai
--list-decoders- lista as sintaxes de transferência dos decoders e sai
--arguments- exibe os argumentos de linha de comando expandidos
-q --quiet- modo silencioso, não exibe avisos nem erros
-v --verbose- modo detalhado, exibe os detalhes do processamento
-d --debug- modo de depuração, exibe informações de depuração
-ll --log-level [l]evel: string constant- (fatal, error, warn, info, debug, trace) usa o nível l para o logger
-lc --log-config [f]ilename: string- usa o arquivo de configuração f para o logger
+v --verbose-pc- exibe os contextos de apresentação no modo detalhado
opções de entrada
+f --read-file- lê o formato de arquivo ou o conjunto de dados
+fo --read-file-only- lê apenas o formato de arquivo (padrão)
-f --read-dataset- lê o conjunto de dados sem as informações de metadados do arquivo. arquivos de entrada:
+rd --read-from-dicomdir- lê as informações dos arquivos de entrada a partir do DICOMDIR
+sd --scan-directories- varre diretórios em busca de arquivos de entrada (dcmfile-in)
+sp --scan-pattern [p]attern: string (only with --scan-directories)- padrão para correspondência de nomes de arquivo (curingas) # possivelmente não disponível em todos os sistemas
-r --no-recurse- não percorre os diretórios recursivamente (padrão)
+r --recurse- percorre recursivamente os diretórios especificados
opções de processamento
-dn --decompress-never- nunca descomprime conjuntos de dados comprimidos
+dls --decompress-lossless- descomprime apenas compressão sem perdas (padrão)
+dly --decompress-lossy- descomprime tanto a compressão com perdas quanto a sem perdas. nível de compressão deflate:
+cl --compression-level [l]evel: integer (default: 6)- 0=sem compressão, 1=mais rápido, 9=melhor compressão. outras opções de processamento:
-nh --no-halt- não interrompe no primeiro arquivo de entrada inválido nem em caso de falha de armazenamento
-nip --no-illegal-proposal- não propõe nenhum contexto de apresentação que não contenha a sintaxe de transferência padrão (se necessário)
-nuc --no-uid-checks- não verifica os valores de UID dos arquivos de entrada
opções de rede
-i4 --ipv4- usa somente IPv4 (padrão)
-i6 --ipv6- usa somente IPv6
-i0 --ip-auto- usa consulta DNS para determinar o protocolo IP. títulos de entidade de aplicação:
-aet --aetitle [a]etitle: string- define o meu AE Title de chamada (padrão: DCMSEND)
-aec --call [a]etitle: string- define o AE Title chamado do peer (padrão: ANY-SCP). tratamento de associações:
+ma --multi-associations- usa múltiplas associações (uma após a outra), se necessário, para transferir as instâncias (padrão)
-ma --single-association- usa sempre uma única associação. outras opções de rede:
-to --timeout [s]econds: integer (default: unlimited)- tempo limite para solicitações de conexão
-ta --acse-timeout [s]econds: integer (default: 30)- tempo limite para mensagens ACSE
-td --dimse-timeout [s]econds: integer (default: unlimited)- tempo limite para mensagens DIMSE
-pdu --max-pdu [n]umber of bytes: integer (4096..131072)- define a pdu máxima recebida em n bytes (padrão: 16384)
--max-send-pdu [n]umber of bytes: integer (4096..131072)- restringe a PDU máxima de envio a n bytes
opções de saída
general:
+crf --create-report-file [f]ilename: string
create a detailed report on the transfer
(if successful) and write it to text file f
NOTAS
Uso típico
Um caso de uso típico do dcmsend é enviar instâncias SOP arbitrárias armazenadas como arquivos DICOM para um SCP de armazenamento. O comando a seguir faz exatamente isso:
dcmsend --verbose <peer> <port> *.dcm
Se os arquivos DICOM estiverem armazenados em uma hierarquia de diretórios abaixo do diretório "IMAGES", o seguinte comando pode ser usado:
dcmsend -v <peer> <port> --scan-directories --recurse IMAGES
Também é possível especificar vários diretórios e combinar as abordagens mencionadas acima (usando tanto nomes de arquivo quanto de diretório):
dcmsend -v +sd +r <peer> <port> IMAGES_1 IMAGES_2 test.img *.dcm
Se as instâncias SOP forem referenciadas a partir de um arquivo DICOMDIR, a opção –read-from-dicomdir (ou +rd) pode ser usada para enviar todos os arquivos DICOM referenciados sem já carregá-los para a negociação da associação:
dcmsend -v <peer> <port> --read-from-dicomdir DICOMDIR
E, novamente, todas as abordagens acima podem ser combinadas da seguinte forma:
dcmsend -v +sd +r +rd <peer> <port> IMAGES_1 IMAGES_2 test.img DICOMDIR *.dcm
A opção padrão –read-file-only garante que apenas arquivos DICOM (ou seja, aqueles com meta-cabeçalho e a palavra mágica "DICM" após o preâmbulo) sejam processados. Geralmente, ao processar um grande número de arquivos, também é uma boa prática não interromper no primeiro arquivo de entrada inválido ou em caso de falha de armazenamento. Isso pode ser obtido usando a opção –no-halt. Observe, no entanto, que "falha de armazenamento" não significa que o status DIMSE da resposta C-STORE indica um erro. Significa que a solicitação C-STORE não pôde ser enviada ao SCP de armazenamento.
Se forem necessários mais de 128 contextos de apresentação, que é o número máximo permitido de acordo com o padrão DICOM, uma nova associação é iniciada após a conclusão da anterior. Nos casos em que esse comportamento não é desejado, ele pode ser desativado usando a opção –single-association. Além disso, é possível especificar, por meio das opções –decompress-xxx, se apenas os conjuntos de dados comprimidos sem perdas são descomprimidos (se necessário), o que é o padrão, ou se os conjuntos de dados comprimidos com perdas também são.
Para obter tanto uma visão geral quanto informações detalhadas sobre a transferência das instâncias SOP DICOM, a opção –create-report-file pode ser usada para criar um arquivo de texto correspondente. No entanto, esse arquivo só é criado como etapa final se o aplicativo não tiver sido encerrado antes (com um erro).
Varredura de diretórios
Informar diretórios como parâmetro na linha de comando só faz sentido se a opção –scan-directories também for especificada. Caso os arquivos nos diretórios informados precisem ser selecionados de acordo com um padrão de nome específico (por exemplo, usando correspondência por curingas), a opção –scan-pattern deve ser usada. Observe que esse padrão de arquivo se aplica apenas aos arquivos dentro dos diretórios varridos e que, se outros padrões forem especificados na linha de comando fora da opção –scan-pattern (por exemplo, para selecionar outros arquivos), eles não se aplicam aos diretórios especificados.
Assim, o terceiro dos exemplos acima percorrerá recursivamente os diretórios IMAGES_1 e IMAGES_2 e transmitirá os arquivos contidos nessas duas pastas e em todas as suas subpastas (devido à opção +r). Além disso, o dcmsend transferirá "test.img" e todos os arquivos com extensão "dcm" da pasta de trabalho atual. Observe que informar nomes de diretórios sem habilitar a opção +sd não faz sentido.
Conformidade DICOM
Basicamente, o aplicativo dcmsend oferece suporte a todas as classes SOP Storage como SCU, incluindo as privadas. Por padrão, o aplicativo verifica o UID de classe SOP do arquivo DICOM para garantir que apenas instâncias SOP válidas sejam enviadas. Com a opção –no-uid-checks, essa verificação pode ser desativada.
O aplicativo dcmsend também oferece suporte a todas as sintaxes de transferência definidas no padrão DICOM. Sintaxes de transferência privadas só podem ser usadas se a verificação de UID for desativada com a opção –no-uid-checks. Observe, no entanto, que apenas um número limitado de sintaxes de transferência tem suporte para conversão para a sintaxe de transferência padrão do DICOM (Implicit VR Little Endian). Com a opção –list-decoders, são listadas as sintaxes de transferência com suporte nativo ou por decoders. A saída normalmente é semelhante a esta:
Transfer Syntaxes supported natively:
- Little Endian Implicit
- Little Endian Explicit
- Big Endian Explicit
Transfer Syntaxes supported by decoders:
- Deflated Explicit VR Little Endian
- JPEG Baseline
- JPEG Extended, Process 2+4
- JPEG Spectral Selection, Non-hierarchical, Process 6+8
- JPEG Full Progression, Non-hierarchical, Process 10+12
- JPEG Lossless, Non-hierarchical, Process 14
- JPEG Lossless, Non-hierarchical, 1st Order Prediction
- JPEG-LS Lossless
- JPEG-LS Lossy (Near-lossless)
- RLE Lossless
Como o dcmsend procura ser o mais simples possível para o usuário, por padrão podem ser propostos ao SCP contextos de apresentação que, a rigor, são "ilegais". Isso ocorre porque, segundo o padrão DICOM, o SCU sempre deve propor a sintaxe de transferência padrão do DICOM em pelo menos um contexto de apresentação associado a cada sintaxe abstrata (ou seja, a cada classe SOP). Esse requisito é dispensado se o SCU tiver acesso à instância SOP apenas em forma comprimida com perdas ou se os dados de pixel descomprimidos forem grandes demais para serem codificados. Com a opção –no-illegal-proposal, é possível impor o comportamento estritamente conforme ao DICOM, ou seja, nenhum contexto de apresentação potencialmente ilegal será proposto, mas a instância SOP correspondente será rejeitada (se necessário). Observe, no entanto, que o tamanho dos dados de pixel descomprimidos não é verificado.
A sintaxe de transferência padrão para "Lossless JPEG Compression", "Lossy JPEG Compression" e assim por diante nem sempre é proposta, conforme também exige o padrão DICOM. A mesma limitação se aplica a outros esquemas de compressão. Consulte a seção 10 do DICOM PS 3.5 para mais detalhes.
REGISTRO DE LOG
O nível de detalhamento do log das diversas ferramentas de linha de comando e das bibliotecas subjacentes pode ser especificado pelo usuário. Por padrão, apenas erros e avisos são gravados no fluxo de erro padrão. Ao usar a opção –verbose, mensagens informativas, como detalhes do processamento, também são relatadas. A opção –debug pode ser usada para obter mais detalhes sobre a atividade interna, por exemplo, para fins de depuração. Outros níveis de log podem ser selecionados com a opção –log-level. No modo –quiet, apenas erros fatais são relatados. Nesses casos de erro muito graves, o aplicativo normalmente é encerrado. Para mais detalhes sobre os diferentes níveis de log, consulte a documentação do módulo "oflog".
Caso a saída do log deva ser gravada em arquivo (opcionalmente com rotação de arquivo de log), no syslog (Unix) ou no log de eventos (Windows), pode-se usar a opção –log-config. Esse arquivo de configuração também permite direcionar apenas determinadas mensagens para um fluxo de saída específico e filtrar certas mensagens com base no módulo ou aplicativo em que são geradas. Um arquivo de configuração de exemplo é fornecido em < etcdir>/logger.cfg.
LINHA DE COMANDO
Todas as ferramentas de linha de comando usam a seguinte notação para os parâmetros: colchetes delimitam valores opcionais (0-1), reticências no final indicam que múltiplos valores são permitidos (1-n), e a combinação dos dois significa de 0 a n valores.
As opções de linha de comando se distinguem dos parâmetros por um sinal '+' ou '-' à frente. Normalmente, a ordem e a posição das opções de linha de comando são arbitrárias (ou seja, podem aparecer em qualquer lugar). No entanto, se as opções forem mutuamente exclusivas, é usada a ocorrência mais à direita. Esse comportamento está em conformidade com as regras de avaliação padrão dos shells Unix comuns.
Além disso, um ou mais arquivos de comando podem ser especificados usando um sinal '@' como prefixo do nome do arquivo (por exemplo, @command.txt). Esse argumento de comando é substituído pelo conteúdo do arquivo de texto correspondente (múltiplos espaços em branco são tratados como um único separador, a menos que apareçam entre duas aspas) antes de qualquer avaliação posterior. Observe que um arquivo de comando não pode conter outro arquivo de comando. Essa abordagem simples, mas eficaz, permite agrupar combinações comuns de opções/parâmetros e evita linhas de comando longas e confusas (um exemplo é fornecido no arquivo < datadir>/dumppat.txt).
CÓDIGOS DE SAÍDA
O utilitário dcmsend usa os seguintes códigos de saída ao ser encerrado. Isso permite que o usuário verifique o motivo pelo qual o aplicativo foi encerrado.
geral
EXITCODE_NO_ERROR 0
EXITCODE_COMMANDLINE_SYNTAX_ERROR 1
erros de arquivo de entrada
EXITCODE_CANNOT_READ_INPUT_FILE 20 (*)
EXITCODE_NO_INPUT_FILES 21
EXITCODE_INVALID_INPUT_FILE 22
EXITCODE_NO_VALID_INPUT_FILES 23
erros de arquivo de saída
EXITCODE_CANNOT_WRITE_OUTPUT_FILE 40 (*)
EXITCODE_CANNOT_WRITE_REPORT_FILE 43
erros de rede
EXITCODE_CANNOT_INITIALIZE_NETWORK 60
EXITCODE_CANNOT_NEGOTIATE_ASSOCIATION 61
EXITCODE_CANNOT_SEND_REQUEST 62
EXITCODE_CANNOT_ADD_PRESENTATION_CONTEXT 65
() Na verdade, esses códigos não são usados atualmente pelo dcmsend*, mas servem como espaço reservado para o grupo correspondente de códigos de saída.
AMBIENTE
O utilitário dcmsend tentará carregar os dicionários de dados DICOM especificados na variável de ambiente DCMDICTPATH. Por padrão, ou seja, se a variável de ambiente DCMDICTPATH não estiver definida, o arquivo < datadir>/dicom.dic será carregado, a menos que o dicionário esteja embutido no aplicativo (padrão no Windows).
É preferível manter o comportamento padrão e usar a variável de ambiente DCMDICTPATH apenas quando dicionários de dados alternativos forem necessários. A variável de ambiente DCMDICTPATH tem o mesmo formato da variável PATH dos shells Unix, em que dois-pontos (":") separam as entradas. Em sistemas Windows, um ponto e vírgula (";") é usado como separador. O código do dicionário de dados tenta carregar cada arquivo especificado na variável de ambiente DCMDICTPATH. Ocorre um erro se nenhum dicionário de dados puder ser carregado.
VEJA TAMBÉM
dcmrecv(1), storescu(1), storescp(1)
COPYRIGHT
Copyright (C) 2011-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.