Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkSiemensVisionImageIO.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkSiemensVisionImageIO.h,v $
00005   Language:  C++
00006   Date:      $Date: 2009-06-14 12:30:13 $
00007   Version:   $Revision: 1.13 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even 
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00014      PURPOSE.  See the above copyright notices for more information.
00015 
00016 =========================================================================*/
00030 #ifndef __itkSiemensVisionImageIO_h
00031 #define __itkSiemensVisionImageIO_h
00032 
00033 #ifdef _MSC_VER
00034 #pragma warning ( disable : 4786 )
00035 #endif
00036 
00037 #include "itkIPLCommonImageIO.h"
00038 
00039 namespace itk
00040 {
00048 class ITK_EXPORT SiemensVisionImageIO : public IPLCommonImageIO
00049 {
00050 public:
00052   typedef SiemensVisionImageIO Self;
00053   typedef IPLCommonImageIO     Superclass;
00054   typedef SmartPointer<Self>   Pointer;
00055 
00057   itkNewMacro(Self);
00058 
00060   itkTypeMacro(SiemensVisionImageIO, Superclass);
00061 
00062   /*-------- This part of the interfaces deals with reading data. ----- */
00063 
00070   virtual bool CanReadFile(const char* FileNameToRead);
00071 
00072   /* * Set the spacing and dimension information for the set filename. */
00073   // Implemented in superclass
00074   //      virtual void ReadImageInformation();
00075 
00076   /* * Get the type of the pixel.  */
00077   // Implemented in superclass
00078   //      virtual const std::type_info& GetPixelType() const;
00079 
00080   /* * Reads the data from disk into the memory buffer provided. */
00081   // Implemented in superclass
00082   //      virtual void Read(void* buffer);
00083 
00084   /* * Compute the size (in bytes) of the components of a pixel. For
00085    * example, and RGB pixel of unsigned char would have a
00086    * component size of 1 byte. */
00087   // Implemented in superclass
00088   //      virtual unsigned int GetComponentSize() const;
00089 
00090   /*-------- This part of the interfaces deals with writing data. ----- */
00091 
00092   /* * Determine if the file can be written with this ImageIO implementation.
00093    * \param FileNameToWrite The name of the file to test for writing.
00094    * \author Hans J. Johnson
00095    * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
00096    * \return Returns true if this ImageIO can write the file specified.
00097    */
00098   // Implemented in superclass
00099   //      virtual bool CanWriteFile(const char * FileNameToWrite);
00100 
00101   /* * Set the spacing and dimension information for the set filename. */
00102   // Implemented in superclass
00103   //      virtual void WriteImageInformation();
00104 
00105   /* * Writes the data to disk from the memory buffer provided. Make sure
00106    * that the IORegions has been set properly. */
00107   // Implemented in superclass
00108   //      virtual void Write(const void* buffer);
00109 protected:
00110   SiemensVisionImageIO();
00111   ~SiemensVisionImageIO();
00112   // Implemented in superclass
00113   //      void PrintSelf(std::ostream& os, Indent indent) const;
00114   virtual GEImageHeader *ReadHeader(const char *FileNameToRead);
00115 private:
00116   typedef enum {
00117     HDR_STUDY_YEAR= 0,      // Study date year, u_int
00118     HDR_STUDY_YEAR_LEN= 4,
00119     HDR_STUDY_MONTH= 4,     // Study date month, u_int
00120     HDR_STUDY_MONTH_LEN= 4,
00121     HDR_STUDY_DAY= 8,       // Study date day, u_int
00122     HDR_STUDY_DAY_LEN= 4,
00123     HDR_ACQ_YEAR= 12,       // Acquisition date year, u_int
00124     HDR_ACQ_YEAR_LEN= 4,
00125     HDR_ACQ_MONTH= 16,      // Acquisition date month, u_int
00126     HDR_ACQ_MONTH_LEN= 4,
00127     HDR_ACQ_DAY= 20,        // Acquisition date day, u_int
00128     HDR_ACQ_DAY_LEN= 4,
00129     HDR_IMAGE_YEAR= 24,     // Image date year, u_int
00130     HDR_IMAGE_YEAR_LEN= 4,
00131     HDR_IMAGE_MONTH= 28,    // Image date month, u_int
00132     HDR_IMAGE_MONTH_LEN= 4,
00133     HDR_IMAGE_DAY= 32,      // Image date day, u_int
00134     HDR_IMAGE_DAY_LEN= 4,
00135     HDR_STUDY_HOUR= 36,     // Study time hour, u_int
00136     HDR_STUDY_HOUR_LEN= 4,
00137     HDR_STUDY_MIN= 40,      // Study time minute, u_int
00138     HDR_STUDY_MIN_LEN= 4,
00139     HDR_STUDY_SEC= 44,      // Study time second, u_int
00140     HDR_STUDY_SEC_LEN= 4,
00141     HDR_ACQ_HOUR= 52,       // Acquisition time second, u_int
00142     HDR_ACQ_HOUR_LEN= 4,
00143     HDR_ACQ_MIN= 56,        // Acquisition time second, u_int
00144     HDR_ACQ_MIN_LEN= 4,
00145     HDR_ACQ_SEC= 60,        // Acquisition time second, u_int
00146     HDR_ACQ_SEC_LEN= 4,
00147     HDR_IMAGE_HOUR= 68,     // Image Creation time second, u_int
00148     HDR_IMAGE_HOUR_LEN= 4,
00149     HDR_IMAGE_MIN= 72,      // Image Creation time second, u_int
00150     HDR_IMAGE_MIN_LEN= 4,
00151     HDR_IMAGE_SEC= 76,      // Image Creation time second, u_int
00152     HDR_IMAGE_SEC_LEN= 4,
00153     HDR_MANUFAC= 96,        // Scanner Manufacturer, char
00154     HDR_MANUFAC_LEN= 7,
00155     HDR_INSTUTE_NAME= 105,  // Institution Name, char
00156     HDR_INSTUTE_NAME_LEN= 25,
00157     HDR_ANNOTATION= 186,    // Annotation, char
00158     HDR_ANNOTATION_LEN= 32,
00159     HDR_MODEL_NAME= 281,    // Scanner Model Name, char
00160     HDR_MODEL_NAME_LEN= 12,
00161     HDR_LMOVE_YEAR= 412,  // Date of Last Image Move - year, u_int
00162     HDR_LMOVE_YEAR_LEN= 4,
00163     HDR_LMOVE_MONTH= 416, // Date of Last Image Move - month, u_int
00164     HDR_LMOVE_MONTH_LEN= 4,
00165     HDR_LMOVE_DAY= 420,    // Date of Last Image Move - day, u_int
00166     HDR_LMOVE_DAY_LEN= 4,
00167     HDR_LMOVE_HOUR= 424,  // Date of Last Image Move - hour, u_int
00168     HDR_LMOVE_HOUR_LEN= 4,
00169     HDR_LMOVE_MIN= 428, // Date of Last Image Move - minute, u_int
00170     HDR_LMOVE_MIN_LEN= 4,
00171     HDR_LMOVE_SEC= 432, // Date of Last Image Move - second, u_int
00172     HDR_LMOVE_SEC_LEN= 4,
00173     HDR_PAT_NAME= 768,      // Patient Name, char
00174     HDR_PAT_NAME_LEN= 25,
00175     HDR_PAT_ID= 795,        // Patient ID Number, char
00176     HDR_PAT_ID_LEN= 12,
00177     HDR_DOB_YEAR= 808,      // Date of Birth year, u_int
00178     HDR_DOB_YEAR_LEN= 4,
00179     HDR_DOB_MONTH= 812,     // Date of Birth month, u_int
00180     HDR_DOB_MONTH_LEN= 4,
00181     HDR_DOB_DAY= 816,       // Date of Birth day, u_int
00182     HDR_DOB_DAY_LEN= 4,
00183     HDR_PAT_AGE= 851,       // Patient Age, char
00184     HDR_PAT_AGE_LEN= 3,
00185     HDR_AGE_UNIT= 854,      // Patient Age Unit, char
00186     HDR_AGE_UNIT_LEN= 1,
00187     HDR_REG_YEAR= 1052,     // Registration Date year, u_int
00188     HDR_REG_YEAR_LEN= 4,
00189     HDR_REG_MONTH= 1056,    // Registration Date month, u_int
00190     HDR_REG_MONTH_LEN= 4,
00191     HDR_REG_DAY= 1060,      // Registration Date day, u_int
00192     HDR_REG_DAY_LEN= 4,
00193     HDR_REG_HOUR= 1064,     // Registration Time hour, u_int
00194     HDR_REG_HOUR_LEN= 4,
00195     HDR_REG_MIN= 1068,      // Registration Time minute, u_int
00196     HDR_REG_MIN_LEN= 4,
00197     HDR_REG_SEC= 1072,      // Registration Time second, u_int
00198     HDR_REG_SEC_LEN= 4,
00199     HDR_SLICE_THCK= 1544,   // Slice thickness, double
00200     HDR_SLICE_THCK_LEN= 8,
00201     HDR_TR= 1560,           // TR, double
00202     HDR_TR_LEN= 8,
00203     HDR_TE= 1568,           // TE, double
00204     HDR_TE_LEN= 8,
00205     HDR_FREQ= 1592,         // Center Frequency, double
00206     HDR_FREQ_LEN= 8,
00207     HDR_STATION= 1639,      // Station Name, char
00208     HDR_STATION_LEN= 5,
00209     HDR_CAL_YEAR= 1712,     // Calibration Date - year, u_int
00210     HDR_CAL_YEAR_LEN= 4,
00211     HDR_CAL_MONTH= 1716,    // Calibration Date - month, u_int
00212     HDR_CAL_MONTH_LEN= 4,
00213     HDR_CAL_DAY= 1720,      // Calibration Date - day, u_int
00214     HDR_CAL_DAY_LEN= 4,
00215     HDR_CAL_HOUR= 1724,     // Calibration Time - hour, u_int
00216     HDR_CAL_HOUR_LEN= 4,
00217     HDR_CAL_MIN= 1728,      // Calibration Time - minute, u_int
00218     HDR_CAL_MIN_LEN= 4,
00219     HDR_CAL_SEC= 1732,      // Calibration Time - second, u_int
00220     HDR_CAL_SEC_LEN= 4,
00221     HDR_COIL= 1767,         // Recieve Coil, char
00222     HDR_COIL_LEN= 16,
00223     HDR_IMAGE_NUC= 1828,    // Imaged Nucleus, char
00224     HDR_IMAGE_NUC_LEN= 4,
00225     HDR_FLIP_ANGLE= 2112,   // Flip Angle, double
00226     HDR_FLIP_ANGLE_LEN= 8,
00227     HDR_FIELD= 2560,        // Field Strength, double
00228     HDR_FIELD_LEN= 8,
00229     HDR_DISPLAY_SIZE= 2864, // Displayed Matrix Size, u_int
00230     HDR_DISPLAY_SIZE_LEN= 4,
00231     HDR_SEQPROG_NAME= 2944, // Pulse Sequence Program Name, cha
00232     HDR_SEQPROG_NAME_LEN= 65,
00233     HDR_WKC_NAME= 3009,     // Pulse Sequence Name, char
00234     HDR_WKC_NAME_LEN= 65,
00235     HDR_AUTHOR= 3074,       // Pulse Sequence Author, char
00236     HDR_AUTHOR_LEN= 9,
00237     HDR_SEQUENCE_TYPE= 3083, // Pulse Sequence Type, char
00238     HDR_SEQUENCE_TYPE_LEN= 8,
00239     HDR_FOV_ROW= 3744,      // Row FOV, double
00240     HDR_FOV_ROW_LEN= 8,
00241     HDR_FOV_COLUMN= 3752,   // Column FOV, double
00242     HDR_FOV_COLUMN_LEN= 8,
00243     HDR_CENTER_X= 3768,     // X Center Point, double
00244     HDR_CENTER_X_LEN= 8,
00245     HDR_CENTER_Y= 3776,     // Y Center Point, double
00246     HDR_CENTER_Y_LEN= 8,
00247     HDR_CENTER_Z= 3784,     // Z Center Point, double
00248     HDR_CENTER_Z_LEN= 8,
00249     HDR_NORMV_X= 3792,      // Nornal Vector X, double
00250     HDR_NORMV_X_LEN= 8,
00251     HDR_NORMV_Y= 3800,      // Nornal Vector Y, double
00252     HDR_NORMV_Y_LEN= 8,
00253     HDR_NORMV_Z= 3808,      // Nornal Vector Z, double
00254     HDR_NORMV_Z_LEN= 8,
00255     HDR_DIST_ISO= 3816,     // Distance from Isocenter, double
00256     HDR_DIST_ISO_LEN= 8,
00257     HDR_ROWV_X= 3832,       // Row vector X, double
00258     HDR_ROWV_X_LEN= 8,
00259     HDR_ROWV_Y= 3840,       // Row vector Y, double
00260     HDR_ROWV_Y_LEN= 8,
00261     HDR_ROWV_Z= 3848,       // Row vector Z, double
00262     HDR_ROWV_Z_LEN= 8,
00263     HDR_COLMNV_X= 3856,     // Column vector X, double
00264     HDR_COLMNV_X_LEN= 8,
00265     HDR_COLMNV_Y= 3864,     // Column vector Y, double
00266     HDR_COLMNV_Y_LEN= 8,
00267     HDR_COLMNV_Z= 3872,     // Column vector Z, double
00268     HDR_COLMNV_Z_LEN= 8,
00269     HDR_ORNT_SET1X= 3880,   // Orientation Set 1 - X, char
00270     HDR_ORNT_SET1X_LEN= 3,
00271     HDR_ORNT_SET1Y= 3884,   // Orientation Set 1 - Y, char
00272     HDR_ORNT_SET1Y_LEN= 3,
00273     HDR_ORNT_SET1Z= 3888,   // Orientation Set 1 - Z, char
00274     HDR_ORNT_SET1Z_LEN= 3,
00275     HDR_ORNT_SET2X= 3892,   // Orientation Set 2 - X, char
00276     HDR_ORNT_SET2X_LEN= 3,
00277     HDR_ORNT_SET2Y= 3896,   // Orientation Set 2 - Y, char
00278     HDR_ORNT_SET2Y_LEN= 3,
00279     HDR_ORNT_SET2Z= 3900,   // Orientation Set 2 - Z, char
00280     HDR_ORNT_SET2Z_LEN= 3,
00281     HDR_PROTOCOL_NAME= 2944, // Pulse Sequence Name, char
00282     HDR_PROTOCOL_NAME_LEN= 64,
00283     HDR_PIXELSIZE_ROW= 5000, // Row Pixel Size, double
00284     HDR_PIXELSIZE_ROW_LEN= 8,
00285     HDR_PIXELSIZE_CLMN= 5008, // Column Pixel Size, double
00286     HDR_PIXELSIZE_CLMN_LEN= 8,
00287     TEXT_PAT_ID= 5504,      // Text Patient ID, char
00288     TEXT_PAT_ID_LEN= 12,
00289     TEXT_PAT_SEX= 5517,     // Text Patient Sex, char
00290     TEXT_PAT_SEX_LEN= 1,
00291     TEXT_PAT_AGE= 5518,     // Text Patient Age, char
00292     TEXT_PAT_AGE_LEN= 3,
00293     TEXT_AGE_UNIT= 5521,   // Text Patient Age Unit (Y=year), char
00294     TEXT_AGE_UNIT_LEN= 1,
00295     TEXT_PAT_POS= 5529,     // Text Patient Postion, char
00296     TEXT_PAT_POS_LEN= 7,
00297     TEXT_IMG_FLAG= 5541,    // Text Image Flag (IMAGE=image), char
00298     TEXT_IMG_FLAG_LEN= 5,
00299     TEXT_IMG_NUMBER= 5546,  // Text Image Number, char
00300     TEXT_IMG_NUMBER_LEN= 4,
00301     TEXT_IMG_DAY= 5559,     // Text Date - Day, char
00302     TEXT_IMG_DAY_LEN= 2,
00303     TEXT_IMG_MONTH= 5562,   // Text Date - Month, char
00304     TEXT_IMG_MONTH_LEN= 3,
00305     TEXT_IMG_YEAR= 5566,    // Text Date - Year, char
00306     TEXT_IMG_YEAR_LEN= 4,
00307     TEXT_IMG_HOUR= 5571,    // Text Time - hour, char
00308     TEXT_IMG_HOUR_LEN= 2,
00309     TEXT_IMG_MIN= 5574,     // Text Time - minute, char
00310     TEXT_IMG_MIN_LEN= 2,
00311     TEXT_ACQ_FLAG= 5577, // Text Acq. Time Flag (TA=time of acq), char
00312     TEXT_ACQ_FLAG_LEN= 2,
00313     TEXT_ACQ_MIN= 5583,     // Text Acq Time - minute, char
00314     TEXT_ACQ_MIN_LEN= 2,
00315     TEXT_ACQ_SEC= 5586,     // Text Acq Time - second, char
00316     TEXT_ACQ_SEC_LEN= 2,
00317     TEXT_ANNOTATION= 5601,  // Text Annotation, char
00318     TEXT_ANNOTATION_LEN= 32,
00319     TEXT_ORGANIZATION= 5655, // Text Organization, char
00320     TEXT_ORGANIZATION_LEN= 25,
00321     TEXT_STATION= 5682,     // Text Station Name, char
00322     TEXT_STATION_LEN= 5,
00323     TEXT_ACQ_MTRX_PHASE= 5695, // Acq. Matrix Phase Axis, char
00324     TEXT_ACQ_MTRX_PHASE_LEN= 3,
00325     TEXT_ACQ_PHASE_DIR= 5698, // Acq. phase direction (h=hor, v=vert), char
00326     TEXT_ACQ_PHASE_DIR_LEN= 1,
00327     TEXT_ACQ_MTRX_FREQ= 5700, // Acq. matrix Freq Axis, char 
00328     TEXT_ACQ_MTRX_FREQ_LEN= 3,
00329     TEXT_ACQ_MTRX_FREQO= 5703, // Acq freq (o=o  " "=blank), char
00330     TEXT_ACQ_MTRX_FREQO_LEN= 1,
00331     TEXT_ACQ_MTRX_FREQS= 5704, // Acq freq (s=s  " "=blank), char
00332     TEXT_ACQ_MTRX_FREQS_LEN= 1,
00333     TEXT_SEQUENCE= 5706,    // Sequence Type, char
00334     TEXT_SEQUENCE_LEN= 8,
00335     TEXT_FLIP_ANGLE= 5714,  // Flip Angle, char
00336     TEXT_FLIP_ANGLE_LEN= 3,
00337     TEXT_SCAN_FLAG= 5718,   // Scan flag ("SCAN"), char */ 
00338     TEXT_SCAN_FLAG_LEN= 4,
00339     TEXT_SCANA_NUM= 5723,   // Scan Number A, char
00340     TEXT_SCANA_NUM_LEN= 3,
00341     TEXT_SCANB_NUM= 5726,   // Scan Number B, char
00342     TEXT_SCANB_NUM_LEN= 3,
00343     TEXT_TR_FLAG= 5730,     // TR flag ("TR"), char
00344     TEXT_TR_FLAG_LEN= 2,
00345     TEXT_TR= 5734,          // TR, char
00346     TEXT_TR_LEN= 7,
00347     TEXT_TE_FLAG= 5742,     // TE flag ("TE"), char
00348     TEXT_TE_FLAG_LEN= 2,
00349     TEXT_TE= 5746,          // TE, char
00350     TEXT_TE_LEN= 5,
00351     TEXT_ECHO_NUM= 5752,    // Echo number, char
00352     TEXT_ECHO_NUM_LEN= 1,
00353     TEXT_THCK_FLAG= 5790,   // SLice thickness flag ("SL"), char
00354     TEXT_THCK_FLAG_LEN= 2,
00355     TEXT_SLICE_THCK= 5794,  // Slice thickness
00356     TEXT_SLICE_THCK_LEN= 7,
00357     TEXT_POS_FLAG= 5802,    // Slice postion flag ("SP"), char
00358     TEXT_POS_FLAG_LEN= 2,
00359     TEXT_SLICE_POS= 5806,   // Slice postion, char
00360     TEXT_SLICE_POS_LEN= 7,
00361     TEXT_ANGLE_FLAG1= 5814, // Angle flag 1 ("Sag","Cor",or,"Tra"), char
00362     TEXT_ANGLE_FLAG1_LEN= 3,
00363     TEXT_ANGLE_FLAG2= 5817, // Angle flag 2 ("<", or ">"), char
00364     TEXT_ANGLE_FLAG2_LEN= 1,
00365     TEXT_ANGLE_FLAG3= 5818, // Angle flag 3 ("Sag","Cor",or,"Tra"), char
00366     TEXT_ANGLE_FLAG3_LEN= 3,
00367     TEXT_ANGLE= 5821,       // Angle, char
00368     TEXT_ANGLE_LEN= 4,
00369     TEXT_FOV_FLAG= 5838,    // FOV flag ("FOV"), char
00370     TEXT_FOV_FLAG_LEN= 3,
00371     TEXT_FOVH= 5842,        // Horizontal FOV, char
00372     TEXT_FOVH_LEN= 3,
00373     TEXT_FOVV= 5846,        // Vertical FOV, char
00374     TEXT_FOVV_LEN= 3,
00375     TEXT_TABLEPOS_FLAG= 5874, // Table Postion flag ("TP"), char
00376     TEXT_TABLEPOS_FLAG_LEN= 2,
00377     TEXT_TABLE_POS= 5878,   // Table postion
00378     TEXT_TABLE_POS_LEN= 7,
00379     TEXT_STUDY_FLAG= 5938,  // Study flag ("STUDY"), char
00380     TEXT_STUDY_FLAG_LEN= 5,
00381     TEXT_STUDY_NUM= 5943,   // Study number, char
00382     TEXT_STUDY_NUM_LEN= 2,
00383     TEXT_DOB_DAY= 5956,     // Date of Birth - day, char
00384     TEXT_DOB_DAY_LEN= 2,
00385     TEXT_DOB_MONTH= 5959,   // Date of Birth - month, char
00386     TEXT_DOB_MONTH_LEN= 3,
00387     TEXT_DOB_YEAR= 5963,    // Date of Birth - year, char
00388     TEXT_DOB_YEAR_LEN= 4,
00389     TEXT_STUDY_FLAG2= 5992, // Study flag 2 ("STU"), char
00390     TEXT_STUDY_FLAG2_LEN= 3,
00391     TEXT_IMAGE_FLAG2= 5996, // Image flag 2 ("IMA"), char
00392     TEXT_IMAGE_FLAG2_LEN= 3,
00393     TEXT_STUDY_NUM2= 5999,  // Study number 2, char
00394     TEXT_STUDY_NUM2_LEN= 2,
00395     TEXT_IMAGE_NUM2= 6002,  // Image number 2, char
00396     TEXT_IMAGE_NUM2_LEN= 2,
00397     TEXT_IMAGE_NUM3= 6013,  // Image number 3, char
00398     TEXT_IMAGE_NUM3_LEN= 5,
00399     TEXT_MODEL_NAME= 6031,  // Model Name, char
00400     TEXT_MODEL_NAME_LEN= 15,
00401     TEXT_PAT_NAME= 6058,    // Patient Name, char
00402     TEXT_PAT_NAME_LEN= 25,
00403     TEXT_START_HOUR= 6085,  // Scan start time - hour, char
00404     TEXT_START_HOUR_LEN= 2,
00405     TEXT_START_MIN= 6088,   // Scan start time - minute, char
00406     TEXT_START_MIN_LEN= 2,
00407     TEXT_START_SEC= 6091,   // Scan start time - second, char
00408     TEXT_START_SEC_LEN= 2,
00409     HDR_TOTAL_LENGTH= 6144 // Total length of Siemens Header
00410   } SiemensVisionHeaderInfo;
00411   SiemensVisionImageIO(const Self&); //purposely not implemented
00412   void operator=(const Self&); //purposely not implemented
00413 };
00414 
00415 } // end namespace itk
00416 
00417 #endif // __itkSiemensVisionImageIO_h
00418 

Generated at Tue Sep 15 04:57:24 2009 for ITK by doxygen 1.5.8 written by Dimitri van Heesch, © 1997-2000