Public Types | Public Member Functions | Private Member Functions | Private Attributes

creaImageIO::tree::Descriptor Class Reference
[Attributed tree management]

Descriptor of the structure of a Tree (number of levels, descriptors of each level, ...). More...

#include <creaImageIOTreeDescriptor.h>

List of all members.

Public Types

typedef std::vector
< LevelDescriptor
LevelDescriptorListType
 The type of LevelDescriptor container.

Public Member Functions

 Descriptor ()
 Ctor : creates the mandatory level 0 descriptor called "Root".
 ~Descriptor ()
 Destructor.
void LoadXML (const std::string &filename)
 Loads from a xml description file.
void CreateDefault ()
 Creates the default descriptor.
unsigned int GetNumberOfLevels ()
 Returns the number of levels of the tree.
const LevelDescriptorGetLevelDescriptor (int level) const
 Returns the LevelDescriptor of a given level (const ref).
const
LevelDescriptor::AttributeDescriptorListType
GetAttributeDescriptorList (int level, int type=0) const
 type = 1 without ID and PATIENT_ID
void CopyAttributeDescriptorList (int level)
 Copy the AttributeDescriptorList without ID tag.
void Add (const LevelDescriptor &)
 Adds a LevelDescriptor at the end of the list.
void Add (const AttributeDescriptor &, int l)
 Adds an AttributeDescriptor to level l.
void BuildAttributeMap (AttributeMapType &) const
 Builds the key to value map of all the attributes of the tree.
const LevelDescriptorListTypeGetLevelDescriptorList () const
 Returns the list of tree levels (const).
void Clear ()
 Clears the Descriptor.
void createDescriptorfromFile (const std::string &i_file)
const std::string isExist (const std::string i_attr)

Private Member Functions

void CreateLevel0Descriptor ()

Private Attributes

LevelDescriptorListType mLevelDescriptorList

Detailed Description

Descriptor of the structure of a Tree (number of levels, descriptors of each level, ...).

Definition at line 21 of file creaImageIOTreeDescriptor.h.


Member Typedef Documentation

The type of LevelDescriptor container.

Definition at line 67 of file creaImageIOTreeDescriptor.h.


Constructor & Destructor Documentation

creaImageIO::tree::Descriptor::Descriptor (  ) 

Ctor : creates the mandatory level 0 descriptor called "Root".

Definition at line 29 of file creaImageIOTreeDescriptor.cpp.

References CreateLevel0Descriptor().

Here is the call graph for this function:

creaImageIO::tree::Descriptor::~Descriptor (  ) 

Destructor.

Definition at line 36 of file creaImageIOTreeDescriptor.cpp.

    {
    }


Member Function Documentation

void creaImageIO::tree::Descriptor::Add ( const LevelDescriptor d  ) 
void creaImageIO::tree::Descriptor::Add ( const AttributeDescriptor d,
int  l 
)

Adds an AttributeDescriptor to level l.

Definition at line 240 of file creaImageIOTreeDescriptor.cpp.

References mLevelDescriptorList.

    {
      mLevelDescriptorList[l].Add(d);
      // TO DO : update DicomTagToName and NameToDicomTag map
    }

void creaImageIO::tree::Descriptor::BuildAttributeMap ( AttributeMapType  )  const

Builds the key to value map of all the attributes of the tree.

Referenced by creaImageIO::TreeHandlerImageAdder::AddFile(), creaImageIO::Synchronizer::AttributesMatch(), and creaImageIO::TreeHandlerImageAdder::CheckAttributes().

Here is the caller graph for this function:

void creaImageIO::tree::Descriptor::Clear (  ) 

Clears the Descriptor.

Definition at line 249 of file creaImageIOTreeDescriptor.cpp.

References mLevelDescriptorList.

Referenced by CreateDefault(), createDescriptorfromFile(), and creaImageIO::SQLiteTreeHandler::DBImportTreeDescription().

    {
      mLevelDescriptorList.clear();
    }

Here is the caller graph for this function:

void creaImageIO::tree::Descriptor::CopyAttributeDescriptorList ( int  level  )  [inline]

Copy the AttributeDescriptorList without ID tag.

Definition at line 51 of file creaImageIOTreeDescriptor.h.

Referenced by creaImageIO::tree::Tree::CopyAttributeDescriptorList().

          {
                  mLevelDescriptorList[level].CopyAttributeDescriptorList();
          }

Here is the caller graph for this function:

void creaImageIO::tree::Descriptor::CreateDefault (  ) 

Creates the default descriptor.

Definition at line 50 of file creaImageIOTreeDescriptor.cpp.

References Add(), Clear(), CreateLevel0Descriptor(), creaImageIO::tree::AttributeDescriptor::IDENTIFIER, and creaImageIO::tree::AttributeDescriptor::LABEL.

    {
      // clears the existing one
      Clear();
      
      // Creates the level 0 descriptor 
      CreateLevel0Descriptor();
      // Creates the attribute "Name"
      Add(AttributeDescriptor("Name","Name",
                              AttributeDescriptor::LABEL),0);
      
      // Patient level
      Add(LevelDescriptor("Patient"));
      Add(AttributeDescriptor("NumberOfChildren","#Series",0),1);   // Number of Series
      Add(AttributeDescriptor(0x0010,0x0010,   // Patient name
                              AttributeDescriptor::LABEL),1);
      Add(AttributeDescriptor(0x0010,0x0040),1); // Patient sex
      Add(AttributeDescriptor(0x0010,0x0030),1); // Patient birthday
      Add(AttributeDescriptor(0x0010,0x0020,   // Patient ID
                              AttributeDescriptor::IDENTIFIER),1);

      // Study-series level
      Add(LevelDescriptor("Series"));
      Add(AttributeDescriptor("NumberOfChildren","#Images",0),2);   // Number of images
      Add(AttributeDescriptor(0x0008,0x0060,    // Modality
                              AttributeDescriptor::LABEL),2);
      Add(AttributeDescriptor(0x0008,0x1030),2); // Study Description
      Add(AttributeDescriptor(0x0008,0x103E),2); // Description
      Add(AttributeDescriptor(0x0008,0x0080),2); // Institution Name
      Add(AttributeDescriptor(0x0008,0x0081),2); // Institution Adress
      Add(AttributeDescriptor(0x0008,0x1010),2); // Station Name
      Add(AttributeDescriptor(0x0008,0x1048),2); // Physician of Record
      Add(AttributeDescriptor(0x0008,0x1050),2); // Performing Physician's Name
      Add(AttributeDescriptor(0x0018,0x1030),2); // Protocol Name

      Add(AttributeDescriptor(0x0020,0x0010),2); // Study ID
      Add(AttributeDescriptor(0x0008,0x0020),2); // Study Date
      Add(AttributeDescriptor(0x0008,0x0030),2); // Study Time
      Add(AttributeDescriptor(0x0008,0x0050),2); // Study Accession Number
      Add(AttributeDescriptor(0x0008,0x0005),2); // Specific character set
      Add(AttributeDescriptor(0x0008,0x0021),2); // Series Date
      Add(AttributeDescriptor(0x0008,0x0031),2); // Series time

      Add(AttributeDescriptor(0x0020,0x000D   // Study Instance UID  
                                                    ),2);//AttributeDescriptor::IDENTIFIER),2);
      Add(AttributeDescriptor(0x0020,0x000E,   // Series Instance UID  
                                AttributeDescriptor::IDENTIFIER),2);
      // |
      //                        AttributeDescriptor::LABEL),2);
     

      // Image level
      Add(LevelDescriptor("Image"));

      Add(AttributeDescriptor(0x0020,0x0013),3); // Image Number

      Add(AttributeDescriptor(0x0028,0x0010),3); // Rows
      Add(AttributeDescriptor(0x0028,0x0011),3); // Columns
      Add(AttributeDescriptor(0x0028,0x0012),3); // Planes
      Add(AttributeDescriptor(0x0028,0x0002),3); // Sample per pixels
      Add(AttributeDescriptor(0x0028,0x0008),3); // Number of Frames 
      Add(AttributeDescriptor(0x0028,0x0004),3); // Photometric Interpretation
      Add(AttributeDescriptor(0x0028,0x0103),3); // Pixel Representation

      Add(AttributeDescriptor(0x0020,0x0032),3); // Image Position Patient
      Add(AttributeDescriptor(0x0020,0x0037),3); // Image Orientation Patient
      Add(AttributeDescriptor(0x0020,0x1041),3); // Slice Location
      Add(AttributeDescriptor(0x0028,0x0006),3); // Planar Configuration

      Add(AttributeDescriptor(0x0028,0x0030),3); // Pixel Spacing
      Add(AttributeDescriptor(0x0028,0x0100),3); // AlocatedBits
      Add(AttributeDescriptor(0x0028,0x0101),3); // StoredBits

      Add(AttributeDescriptor(0x0008,0x0008),3); // Image Type
      Add(AttributeDescriptor(0x0008,0x0023),3); // Content Date
      Add(AttributeDescriptor(0x0008,0x0033),3); // Content Time

      Add(AttributeDescriptor(0x0020,0x4000),3); // Image Comments

      Add(AttributeDescriptor(0x0004,0x1500,   // File Name
                                AttributeDescriptor::LABEL),3);
      Add(AttributeDescriptor(0x0028,0x1052),3); // Rescale Intercept
      Add(AttributeDescriptor(0x0028,0x1053),3); // Rescale Slope

      Add(AttributeDescriptor(0x0050,0x0004),3); // Calibration Image

      Add(AttributeDescriptor(0x0020,0x0052   // Frame Reference UID
                                           ),3);
      Add(AttributeDescriptor(0x0008,0x0016),3); // SOP Class UID
      Add(AttributeDescriptor("FullFileName",  // Full file name
                                "Full file name",
                                AttributeDescriptor::IDENTIFIER),3); 

    }

Here is the call graph for this function:

void creaImageIO::tree::Descriptor::createDescriptorfromFile ( const std::string &  i_file  ) 

Definition at line 150 of file creaImageIOTreeDescriptor.cpp.

References Add(), and Clear().

Referenced by creaImageIO::Gimmick::createDB().

        {
                Clear();
                
                // read file and put in buffer
                std::ifstream i_file(i_name.c_str());
                std::stringstream buffer;
                buffer << i_file.rdbuf();
                std::string line;
                bool bname;
                int ilevel = -1;

                
                while(std::getline(buffer, line))
                {
                        if(line =="<level>")
                        {       //increment levels.
                                ilevel++;
                                bname = true;
                        }
                        else if(bname)
                        {
                                // For each level, a name to describe it
                                Add(LevelDescriptor(line));
                                bname = false;
                        }
                        else if(line.empty()) // to avoid end line
                        {
                                return;
                        }
                        else
                        { 
                                // split line to find all tags
                                std::vector<std::string> descriptors;
                                std::string separator = " ";
                                std::string::size_type last_pos = line.find_first_not_of(separator);
                                //find first separator
                                std::string::size_type pos = line.find_first_of(separator, last_pos);
                                while(std::string::npos != pos || std::string::npos != last_pos)
                                {
                                        descriptors.push_back(line.substr(last_pos, pos - last_pos));
                                        last_pos = line.find_first_not_of(separator, pos);
                                        pos = line.find_first_of(separator, last_pos);
                                }
                                
                                // By default, the last tag is at zero and not recorded but if take in count
                                unsigned int flag = 0;
                                if(descriptors.size() == 4)
                                {
                                        std::stringstream val;
                                        val << std::dec << descriptors[3];
                                        val>> flag;
                                }

                                // if Dicom tag, use "group" and "element" descriptor
                                if(descriptors[0] == "D")
                                {       std::stringstream val, val2;
                                        unsigned short group;
                                        unsigned short element;
                                        val <<   std::dec << descriptors[1] ;
                                        val >> std::hex >> group;
                                        val2 << std::dec <<  descriptors[2];
                                        val2 >> std::hex >> element;
                                        Add(AttributeDescriptor( group,element,flag), ilevel);
                                }

                                else if(descriptors[0].find("#") != -1)
                                {
                                        // commented line continue to next line
                                }
                                else
                                {       boost::algorithm::replace_all(descriptors[2],"_"," ");
                                        Add(AttributeDescriptor( descriptors[1].c_str(),descriptors[2].c_str(),flag), ilevel);
                                }
                        }
                }
        }

Here is the call graph for this function:

Here is the caller graph for this function:

void creaImageIO::tree::Descriptor::CreateLevel0Descriptor (  )  [private]

Creates the mandatory level 0 descriptor called "Root" (assumes the list is empty)

Definition at line 42 of file creaImageIOTreeDescriptor.cpp.

References Add().

Referenced by CreateDefault(), and Descriptor().

    {
      Add(LevelDescriptor("Root"));
    }

Here is the call graph for this function:

Here is the caller graph for this function:

const LevelDescriptor::AttributeDescriptorListType& creaImageIO::tree::Descriptor::GetAttributeDescriptorList ( int  level,
int  type = 0 
) const [inline]

type = 1 without ID and PATIENT_ID

Returns the AttributeDescriptorList of a given level (const ref) type = 0 all attributes

Definition at line 46 of file creaImageIOTreeDescriptor.h.

Referenced by creaImageIO::tree::Tree::GetAttributeDescriptorList().

      { return mLevelDescriptorList[level].GetAttributeDescriptorList(type); }

Here is the caller graph for this function:

const LevelDescriptor& creaImageIO::tree::Descriptor::GetLevelDescriptor ( int  level  )  const [inline]

Returns the LevelDescriptor of a given level (const ref).

Definition at line 39 of file creaImageIOTreeDescriptor.h.

Referenced by creaImageIO::tree::Tree::GetLevelDescriptor().

      { return mLevelDescriptorList[level]; }

Here is the caller graph for this function:

const LevelDescriptorListType& creaImageIO::tree::Descriptor::GetLevelDescriptorList (  )  const [inline]

Returns the list of tree levels (const).

Definition at line 70 of file creaImageIOTreeDescriptor.h.

Referenced by isExist().

Here is the caller graph for this function:

unsigned int creaImageIO::tree::Descriptor::GetNumberOfLevels (  )  [inline]

Returns the number of levels of the tree.

Definition at line 35 of file creaImageIOTreeDescriptor.h.

Referenced by creaImageIO::tree::Tree::GetNumberOfLevels().

      { return mLevelDescriptorList.size(); }

Here is the caller graph for this function:

const std::string creaImageIO::tree::Descriptor::isExist ( const std::string  i_attr  ) 

test if an attribute is present in DescriptionList return level's name

Definition at line 280 of file creaImageIOTreeDescriptor.cpp.

References GetLevelDescriptorList().

Referenced by creaImageIO::tree::Tree::isAttributeExist().

        {
                std::string name = "";
                LevelDescriptorListType::const_iterator l = GetLevelDescriptorList().begin();
                for (;     l!= GetLevelDescriptorList().end(); ++l)
                {
                        LevelDescriptor::AttributeDescriptorListType::const_iterator a = l->GetAttributeDescriptorList().begin();
                for(;a!= l->GetAttributeDescriptorList().end(); ++a)
                        {
                                if (a->GetKey() == i_attr)
                                {
                                        name = l->GetName();
                                        break;
                                }
                        }
                }
                return name.c_str();
        }

Here is the call graph for this function:

Here is the caller graph for this function:

void creaImageIO::tree::Descriptor::LoadXML ( const std::string &  filename  ) 

Loads from a xml description file.


Member Data Documentation

Definition at line 84 of file creaImageIOTreeDescriptor.h.

Referenced by Add(), and Clear().


The documentation for this class was generated from the following files: