
| Current Path : /proc/thread-self/root/usr/include/gdcm-3.0/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //proc/thread-self/root/usr/include/gdcm-3.0/gdcmCSAHeader.h |
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#ifndef GDCMCSAHEADER_H
#define GDCMCSAHEADER_H
#include "gdcmTypes.h"
#include "gdcmDataSet.h"
#include "gdcmCSAElement.h"
#include "gdcmMrProtocol.h"
namespace gdcm
{
/*
* Everything done in this code is for the sole purpose of writing interoperable
* software under Sect. 1201 (f) Reverse Engineering exception of the DMCA.
* If you believe anything in this code violates any law or any of your rights,
* please contact us (gdcm-developers@lists.sourceforge.net) so that we can
* find a solution.
*/
//-----------------------------------------------------------------------------
class DataElement;
class PrivateTag;
/**
* \brief Class for CSAHeader
* \details SIEMENS store private information in tag (0x0029,0x10,"SIEMENS CSA
* HEADER") this class is meant for user wishing to access values stored within
* this private attribute.
* There are basically two main 'format' for this attribute : SV10/NOMAGIC and
* DATASET_FORMAT SV10 and NOMAGIC are from a user prospective identical, see
* CSAHeader.xml for possible name / value stored in this format.
* DATASET_FORMAT is in fact simply just another DICOM dataset (implicit) with
* -currently unknown- value. This can be only be printed for now.
*
* \warning
* Everything you do with this code is at your own risk, since decoding process
* was not written from specification documents.
*
* \warning the API of this class might change.
*
* \todo
* MrEvaProtocol in 29,1020 contains ^M that would be nice to get rid of on UNIX system...
*
* \see PDBHeader
*
* External references:
* 5.1.3.2.4.1 MEDCOM History Information
* and 5.1.4.3 CSA Non-Image Module
* in
* http://tamsinfo.toshiba.com/docrequest/pdf/E.Soft_v2.0.pdf
*/
class GDCM_EXPORT CSAHeader
{
friend std::ostream& operator<<(std::ostream &_os, const CSAHeader &d);
public :
CSAHeader():InternalDataSet(),InternalType(UNKNOWN),InterfileData(nullptr) {};
~CSAHeader() = default;
/// Divers format of CSAHeader as found 'in the wild'
typedef enum {
UNKNOWN = 0,
SV10,
NOMAGIC,
DATASET_FORMAT,
INTERFILE,
ZEROED_OUT
} CSAHeaderType;
/// Decode the CSAHeader from element 'de'
bool LoadFromDataElement(DataElement const &de);
/// Print the CSAHeader (use only if Format == SV10 or NOMAGIC)
void Print(std::ostream &os) const;
/// Return the DataSet output (use only if Format == DATASET_FORMAT )
const DataSet& GetDataSet() const { return InternalDataSet; }
/// Return the string output (use only if Format == Interfile)
const char * GetInterfile() const { return InterfileData; }
/// return the format of the CSAHeader
/// SV10 and NOMAGIC are equivalent.
CSAHeaderType GetFormat() const;
/// Return the private tag used by SIEMENS to store the CSA Image Header
/// This is: PrivateTag(0x0029,0x0010,"SIEMENS CSA HEADER");
static const PrivateTag & GetCSAImageHeaderInfoTag();
/// Return the private tag used by SIEMENS to store the CSA Series Header
/// This is: PrivateTag(0x0029,0x0020,"SIEMENS CSA HEADER");
static const PrivateTag & GetCSASeriesHeaderInfoTag();
/// Return the private tag used by SIEMENS to store the CSA Data Info
/// This is: PrivateTag(0x0029,0x0010,"SIEMENS CSA NON-IMAGE");
static const PrivateTag & GetCSADataInfo();
/// Return the CSAElement corresponding to name 'name'
/// \warning Case Sensitive
const CSAElement &GetCSAElementByName(const char *name);
/// Return true if the CSA element matching 'name' is found or not
/// \warning Case Sensitive
bool FindCSAElementByName(const char *name);
/// Retrieve the ASCII portion stored within the MrProtocol/MrPhoenixProtocol:
bool GetMrProtocol( const DataSet & ds, MrProtocol & mrProtocol );
protected:
const CSAElement& GetCSAEEnd() const;
private:
std::set<CSAElement> InternalCSADataSet;
DataSet InternalDataSet;
CSAHeaderType InternalType;
Tag DataElementTag;
static CSAElement CSAEEnd;
const char *InterfileData;
};
//-----------------------------------------------------------------------------
inline std::ostream& operator<<(std::ostream &os, const CSAHeader &d)
{
d.Print( os );
return os;
}
} // end namespace gdcm
//-----------------------------------------------------------------------------
#endif //GDCMCSAHEADER_H