NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
itk::RegistrationBasedCTEFilter< TInputImage, TScalarType > Class Template Reference
Inheritance diagram for itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >:
Inheritance graph
[legend]
Collaboration diagram for itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >:
Collaboration graph
[legend]

Public Types

typedef TScalarType VectorDataType
 
typedef RegistrationBasedCTEFilter Self
 
typedef ImageToImageFilter
< TInputImage, TInputImage > 
Superclass
 
typedef SmartPointer< SelfPointer
 
typedef SmartPointer< const SelfConstPointer
 
typedef TInputImage ImageType
 
typedef ImageType::PixelType PixelType
 
typedef ImageType::Pointer ImagePointer
 
typedef ImageType::SizeType SizeType
 
typedef ImageType::IndexType IndexType
 
typedef ImageType::RegionType RegionType
 
typedef ImageType::SpacingType SpacingType
 
typedef ImageType::PointType OriginType
 
typedef ImageType::DirectionType DirectionType
 
typedef Vector< VectorDataType,
itkGetStaticConstMacro(Dimension) > 
VectorPixelType
 
typedef Image< VectorPixelType,
itkGetStaticConstMacro(Dimension) > 
VectorImageType
 
typedef VectorImageType::Pointer VectorImagePointer
 
typedef VectorImageType::SizeType VectorImageSizeType
 
typedef VectorImageType::IndexType VectorImageIndexType
 
typedef VectorImageType::RegionType VectorImageRegionType
 
typedef
VectorImageType::SpacingType 
VectorImageSpacingType
 
typedef VectorImageType::PointType VectorImagePointType
 
typedef VectorImageType::PointType VectorImageOriginType
 
typedef
VectorImageType::DirectionType 
VectorImageDirectionType
 
typedef ImageFileReader
< VectorImageType
VectorImageReaderType
 
typedef ImageFileWriter
< VectorImageType
VectorImageWriterType
 
typedef ImageFileWriter
< ImageType
ScalarImageWriterType
 
typedef
LinearInterpolateImageFunction
< TInputImage, TScalarType > 
LinearInterpolatorType
 
typedef
GaussianSmoothVectorFieldFilter
< TScalarType,
itkGetStaticConstMacro(Dimension),
itkGetStaticConstMacro(Dimension) > 
ConvolveFilterType
 
typedef
DisplacementFieldJacobianDeterminantFilter
< VectorImageType, TScalarType,
TInputImage > 
JacobianFilterType
 
typedef
MinimumMaximumImageCalculator
< TInputImage > 
MinMaxJacobianType
 
typedef
SetOutputVectorToCurrentPositionFilter
< TScalarType,
itkGetStaticConstMacro(Dimension)> 
InitializePhiFilterType
 
typedef SubtractImageFilter
< VectorImageType,
VectorImageType
SubtractImageFilterType
 
typedef
VectorMagnitudeImageFilter
< VectorImageType, TInputImage > 
VectorMagnitudeFilterType
 
typedef
VectorVPlusLambdaUImageFilter
< TScalarType,
itkGetStaticConstMacro(Dimension)> 
VectorVPlusLambdaUFilterType
 
typedef
VectorPhiPlusDeltaTTimesVFilter
< TScalarType,
itkGetStaticConstMacro(Dimension)> 
VectorPhiPlusDeltaTTimesVFilterType
 
typedef DasGradientFilter
< TScalarType,
itkGetStaticConstMacro(Dimension)> 
DasGradientFilterType
 
typedef
DasTransformImageFilter
< TScalarType,
itkGetStaticConstMacro(Dimension)> 
DasTransformImageFilterType
 
typedef
DiscreteGaussianImageFilter
< ImageType, ImageType
GaussianSmoothImageFilterType
 

Public Member Functions

virtual const char * GetClassName () const
 
 itkStaticConstMacro (Dimension, unsigned int, TInputImage::ImageDimension)
 
void SetWhiteMatterPVMap (ImagePointer image)
 
void SetWhitePlusGreyMatterPVMap (ImagePointer image)
 
void SetThicknessPriorMap (ImagePointer image)
 
void SetGWI (ImagePointer image)
 
virtual void SetMaxIterations (unsigned int _arg)
 
virtual unsigned int GetMaxIterations ()
 
virtual void SetM (unsigned int _arg)
 
virtual unsigned int GetM ()
 
virtual void SetN (unsigned int _arg)
 
virtual unsigned int GetN ()
 
virtual void SetLambda (double _arg)
 
virtual double GetLambda ()
 
virtual void SetSigma (double _arg)
 
virtual double GetSigma ()
 
virtual void SetEpsilon (double _arg)
 
virtual double GetEpsilon ()
 
virtual void SetAlpha (double _arg)
 
virtual double GetAlpha ()
 
void WriteDisplacementField (std::string filename)
 
virtual void SetOutputAbsoluteLocation (bool _arg)
 
virtual bool GetOutputAbsoluteLocation ()
 
virtual void SetTrackJacobian (bool _arg)
 
virtual bool GetTrackJacobian ()
 
virtual void SetWriteMagnitudeOfDisplacementImage (bool _arg)
 
virtual bool GetWriteMagnitudeOfDisplacementImage ()
 
virtual void SetWriteTSurfImage (bool _arg)
 
virtual bool GetWriteTSurfImage ()
 
virtual void SetWriteGradientImage (bool _arg)
 
virtual bool GetWriteGradientImage ()
 
virtual void SetWriteVelocityImage (bool _arg)
 
virtual bool GetWriteVelocityImage ()
 
virtual void SetWriteTransformedMovingImage (bool _arg)
 
virtual bool GetWriteTransformedMovingImage ()
 
virtual void SetSmoothPVMaps (bool _arg)
 
virtual bool GetSmoothPVMaps ()
 
virtual void SetSmoothPVMapSigma (double _arg)
 
virtual double GetSmoothPVMapSigma ()
 
virtual void SetUseGradientMovingImage (bool _arg)
 
virtual bool GetUseGradientMovingImage ()
 

Static Public Member Functions

static Pointer New ()
 

Protected Member Functions

 RegistrationBasedCTEFilter ()
 
 ~RegistrationBasedCTEFilter ()
 
void PrintSelf (std::ostream &os, Indent indent) const
 
virtual void GenerateData ()
 

Member Typedef Documentation

template<class TInputImage , typename TScalarType >
typedef SmartPointer<const Self> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::ConstPointer
template<class TInputImage , typename TScalarType >
typedef GaussianSmoothVectorFieldFilter<TScalarType, itkGetStaticConstMacro(Dimension), itkGetStaticConstMacro(Dimension) > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::ConvolveFilterType
template<class TInputImage , typename TScalarType >
typedef DasGradientFilter<TScalarType, itkGetStaticConstMacro(Dimension)> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::DasGradientFilterType
template<class TInputImage , typename TScalarType >
typedef DasTransformImageFilter<TScalarType, itkGetStaticConstMacro(Dimension)> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::DasTransformImageFilterType
template<class TInputImage , typename TScalarType >
typedef ImageType::DirectionType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::DirectionType
template<class TInputImage , typename TScalarType >
typedef DiscreteGaussianImageFilter<ImageType,ImageType> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GaussianSmoothImageFilterType
template<class TInputImage , typename TScalarType >
typedef ImageType::Pointer itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::ImagePointer
template<class TInputImage , typename TScalarType >
typedef TInputImage itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::ImageType

Any further typedefs.

template<class TInputImage , typename TScalarType >
typedef ImageType::IndexType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::IndexType
template<class TInputImage , typename TScalarType >
typedef SetOutputVectorToCurrentPositionFilter<TScalarType, itkGetStaticConstMacro(Dimension)> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::InitializePhiFilterType
template<class TInputImage , typename TScalarType >
typedef DisplacementFieldJacobianDeterminantFilter<VectorImageType, TScalarType, TInputImage> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::JacobianFilterType
template<class TInputImage , typename TScalarType >
typedef LinearInterpolateImageFunction< TInputImage, TScalarType > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::LinearInterpolatorType
template<class TInputImage , typename TScalarType >
typedef MinimumMaximumImageCalculator<TInputImage> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::MinMaxJacobianType
template<class TInputImage , typename TScalarType >
typedef ImageType::PointType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::OriginType
template<class TInputImage , typename TScalarType >
typedef ImageType::PixelType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::PixelType
template<class TInputImage , typename TScalarType >
typedef SmartPointer<Self> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::Pointer
template<class TInputImage , typename TScalarType >
typedef ImageType::RegionType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::RegionType
template<class TInputImage , typename TScalarType >
typedef ImageFileWriter< ImageType > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::ScalarImageWriterType
template<class TInputImage , typename TScalarType >
typedef RegistrationBasedCTEFilter itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::Self
template<class TInputImage , typename TScalarType >
typedef ImageType::SizeType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SizeType
template<class TInputImage , typename TScalarType >
typedef ImageType::SpacingType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SpacingType
template<class TInputImage , typename TScalarType >
typedef SubtractImageFilter<VectorImageType, VectorImageType> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SubtractImageFilterType
template<class TInputImage , typename TScalarType >
typedef ImageToImageFilter<TInputImage, TInputImage> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::Superclass
template<class TInputImage , typename TScalarType >
typedef TScalarType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorDataType

Standard ITK typedefs.

template<class TInputImage , typename TScalarType >
typedef VectorImageType::DirectionType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageDirectionType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::IndexType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageIndexType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::PointType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageOriginType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::Pointer itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImagePointer
template<class TInputImage , typename TScalarType >
typedef VectorImageType::PointType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImagePointType
template<class TInputImage , typename TScalarType >
typedef ImageFileReader< VectorImageType > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageReaderType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::RegionType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageRegionType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::SizeType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageSizeType
template<class TInputImage , typename TScalarType >
typedef VectorImageType::SpacingType itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageSpacingType
template<class TInputImage , typename TScalarType >
typedef Image< VectorPixelType, itkGetStaticConstMacro(Dimension) > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageType
template<class TInputImage , typename TScalarType >
typedef ImageFileWriter< VectorImageType > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorImageWriterType
template<class TInputImage , typename TScalarType >
typedef VectorMagnitudeImageFilter<VectorImageType, TInputImage> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorMagnitudeFilterType
template<class TInputImage , typename TScalarType >
typedef VectorPhiPlusDeltaTTimesVFilter<TScalarType, itkGetStaticConstMacro(Dimension)> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorPhiPlusDeltaTTimesVFilterType
template<class TInputImage , typename TScalarType >
typedef Vector< VectorDataType, itkGetStaticConstMacro(Dimension) > itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorPixelType
template<class TInputImage , typename TScalarType >
typedef VectorVPlusLambdaUImageFilter<TScalarType, itkGetStaticConstMacro(Dimension)> itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::VectorVPlusLambdaUFilterType

Constructor & Destructor Documentation

template<class TInputImage , typename TScalarType >
itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::RegistrationBasedCTEFilter ( )
protected
template<class TInputImage , typename TScalarType >
itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::~RegistrationBasedCTEFilter ( )
inlineprotected

Member Function Documentation

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GenerateData ( )
protectedvirtual
template<class TInputImage , typename TScalarType >
virtual double itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetAlpha ( )
virtual
template<class TInputImage , typename TScalarType >
virtual const char* itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetClassName ( ) const
virtual

Run-time type information (and related methods).

template<class TInputImage , typename TScalarType >
virtual double itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetEpsilon ( )
virtual
template<class TInputImage , typename TScalarType >
virtual double itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetLambda ( )
virtual
template<class TInputImage , typename TScalarType >
virtual unsigned int itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetM ( )
virtual
template<class TInputImage , typename TScalarType >
virtual unsigned int itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetMaxIterations ( )
virtual
template<class TInputImage , typename TScalarType >
virtual unsigned int itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetN ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetOutputAbsoluteLocation ( )
virtual
template<class TInputImage , typename TScalarType >
virtual double itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetSigma ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetSmoothPVMaps ( )
virtual
template<class TInputImage , typename TScalarType >
virtual double itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetSmoothPVMapSigma ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetTrackJacobian ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetUseGradientMovingImage ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetWriteGradientImage ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetWriteMagnitudeOfDisplacementImage ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetWriteTransformedMovingImage ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetWriteTSurfImage ( )
virtual
template<class TInputImage , typename TScalarType >
virtual bool itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::GetWriteVelocityImage ( )
virtual
template<class TInputImage , typename TScalarType >
itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::itkStaticConstMacro ( Dimension  ,
unsigned  int,
TInputImage::ImageDimension   
)

Get the number of dimensions we are working in.

template<class TInputImage , typename TScalarType >
static Pointer itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::New ( )
static

Method for creation through the object factory.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::PrintSelf ( std::ostream &  os,
Indent  indent 
) const
protected
template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetAlpha ( double  _arg)
virtual

Set/Get the Alpha, the weighting in the cost function between image similarity and velocity field energy. Default 1.0. The cost function (equation 2 in paper) is weighted:

(1-alpha)*(velocity field energy) + alpha*(image similarity)

so an alpha of 0.9 gives 90% image similarity, and 10% velocity field energy.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetEpsilon ( double  _arg)
virtual

Set/Get the epsilon, the fractional tolerance between successive evaluations of equation 2 in paper. Default 0.0001.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetGWI ( ImagePointer  image)
inline

Set the GWI image.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetLambda ( double  _arg)
virtual

Set/Get the lambda, the gradient descent parameter. Default 1.0

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetM ( unsigned int  _arg)
virtual

Set/Get the number of steps in integration of the ODE. Default 10.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetMaxIterations ( unsigned int  _arg)
virtual

Set/Get the maximum number of iterations. Default 100.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetN ( unsigned int  _arg)
virtual

Set/Get the number of steps in the temporal discretization of the velocity field. Default 10.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetOutputAbsoluteLocation ( bool  _arg)
virtual

Set/Get a flag to determine if (when we write the displacement field), we output the absolute location, or a vector offset. Default is false, so the output will be a vector offset at each position, as this is more easily visualized.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetSigma ( double  _arg)
virtual

Set/Get the sigma, isotropic standard deviation of the gaussian kernel used for smoothing. Default 1.5

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetSmoothPVMaps ( bool  _arg)
virtual

Set/Get a flag to decide if we smooth the GM and GM+WM Pv maps. Default false.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetSmoothPVMapSigma ( double  _arg)
virtual

Set/Get the Gaussian standard deviation for when we are smoothing the GM and GM+WM PV maps. Default 2mm.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetThicknessPriorMap ( ImagePointer  image)
inline

Set the thickness prior image

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetTrackJacobian ( bool  _arg)
virtual

Set/Get a flag to decide if we bother tracking jacobian. Default true. When we say tracking, it just means that the min and max Jacobian are printed in the debug output.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetUseGradientMovingImage ( bool  _arg)
virtual

Set/Get flag to use the gradient of the moving image, as opposed to the gradient of the transformed moving image. Default false.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWhiteMatterPVMap ( ImagePointer  image)
inline

Set the white matter PV image.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWhitePlusGreyMatterPVMap ( ImagePointer  image)
inline

Set the white+grey matter PV image.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWriteGradientImage ( bool  _arg)
virtual

Set/Get a flag to decide if we write out the gradient image. Default false. For N discretisations of the velocity field, we write to file tmp.gradient..nii. So after each iteration you have N gradient images.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWriteMagnitudeOfDisplacementImage ( bool  _arg)
virtual

Set/Get a flag to write an image showing the magnitude of the displacement field. Default false. So for each iteration you get one magnitude image in file tmp.mag.nii. This gives a relatively simple way of checking that the registration is progressing.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWriteTransformedMovingImage ( bool  _arg)
virtual

Set/Get a flag to decide if we write out the transformed moving image. Default false.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWriteTSurfImage ( bool  _arg)
virtual

Set/Get a flag to decide if we write out TSurf. Default false. This is done after registration to file tmp.tsurf.nii, just before we propogate the thickness value through the grey matter.

template<class TInputImage , typename TScalarType >
virtual void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::SetWriteVelocityImage ( bool  _arg)
virtual

Set/Get a flag to decide if we write out the velocity image. Default false. For N discretisations of the velocity field, we write to file tmp.velocity..nii. So after each iteration you have N velocity images.

template<class TInputImage , typename TScalarType >
void itk::RegistrationBasedCTEFilter< TInputImage, TScalarType >::WriteDisplacementField ( std::string  filename)

So we can write the displacement field after registration


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