Main Page | Class List | Directories | File List | Class Members | File Members

ObitDConCleanWindow.h File Reference

ObitDConCleanWindow class defining CLEAN windows. More...

#include "Obit.h"
#include "ObitImageMosaic.h"
#include "ObitErr.h"
#include "ObitDef.h"
#include "ObitClassDef.h"

Go to the source code of this file.

Classes

struct  ObitDConCleanWindow
 ObitDConCleanWindow Class structure. More...
struct  ObitDConCleanWindowClassInfo
 ClassInfo Structure. More...

Defines

#define ObitDConCleanWindowUnref(in)   ObitUnref (in)
 Macro to unreference (and possibly destroy) an ObitDConCleanWindow returns a ObitDConCleanWindow*.
#define ObitDConCleanWindowRef(in)   ObitRef (in)
 Macro to reference (update reference count) an ObitDConCleanWindow.
#define ObitDConCleanWindowIsA(in)   ObitIsA (in, ObitDConCleanWindowGetClass())
 Macro to determine if an object is the member of this or a derived class.

Typedefs

typedef ObitDConCleanWindow *(* ObitDConCleanWindowCreateFP )(gchar *name, ObitImageMosaic *mosaic, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef ObitDConCleanWindow *(* ObitDConCleanWindowCreate1FP )(gchar *name, glong naxis[2], ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowInfoFP )(ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType *type, glong **window, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef glong(* ObitDConCleanWindowSearchFP )(ObitDConCleanWindow *in, glong field, glong pixel[2], glong toler, gint *which, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef glong(* ObitDConCleanWindowAddFP )(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef void(* ObitDConCleanWindowDelFP )(ObitDConCleanWindow *in, glong field, glong Id, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef void(* ObitDConCleanWindowUpdateFP )(ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef void(* ObitDConCleanWindowOuterFP )(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowImageFP )(ObitDConCleanWindow *in, glong field, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowRowFP )(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowInnerRowFP )(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowUnrowFP )(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowOuterRowFP )(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef glong(* ObitDConCleanWindowSizeFP )(ObitDConCleanWindow *in, glong field, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef glong(* ObitDConCleanWindowCountFP )(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef gboolean(* ObitDConCleanWindowAutoWindowFP )(ObitDConCleanWindow *in, glong field, ObitFArray *image, gfloat *PeakIn, glong *PeakInPos, gfloat *PeakOut, gfloat *RMS, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef void(* ObitDConCleanWindowReplaceFieldFP )(ObitDConCleanWindow *in, glong ifield, ObitDConCleanWindow *out, glong ofield, ObitErr *err)
 Typedef for definition of class pointer structure.
typedef glong(* ObitDConCleanWindowAddFieldFP )(ObitDConCleanWindow *in, glong inaxes[2], ObitErr *err)
 Typedef for definition of class pointer structure.

Enumerations

enum  ObitDConCleanWindowType { OBIT_DConCleanWindow_rectangle = 0, OBIT_DConCleanWindow_round, OBIT_DConCleanWindow_unrectangle, OBIT_DConCleanWindow_unround }
 enum for window types Should be coordinated with ObitErrorLevelString in ObitErr.c. More...

Functions

void ObitDConCleanWindowClassInit (void)
 Public: Class initializer.
ObitDConCleanWindownewObitDConCleanWindow (gchar *name)
 Public: Default Constructor.
ObitDConCleanWindowObitDConCleanWindowCreate (gchar *name, ObitImageMosaic *mosaic, ObitErr *err)
 Public: Create/initialize ObitDConCleanWindow structures.
ObitDConCleanWindowObitDConCleanWindowCreate1 (gchar *name, glong naxis[2], ObitErr *err)
 Public: Create/initialize ObitDConCleanWindow structure with 1 field.
gconstpointer ObitDConCleanWindowGetClass (void)
 Public: ClassInfo pointer.
ObitDConCleanWindowObitDConCleanWindowCopy (ObitDConCleanWindow *in, ObitDConCleanWindow *out, ObitErr *err)
 Public: Copy (deep) constructor.
void ObitDConCleanWindowClone (ObitDConCleanWindow *in, ObitDConCleanWindow *out, ObitErr *err)
 Public: Copy structure.
gboolean ObitDConCleanWindowInfo (ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType *type, glong **window, ObitErr *err)
 Public: Ask window definition.
glong ObitDConCleanWindowSearch (ObitDConCleanWindow *in, glong field, glong pixel[2], glong toler, gint *which, ObitErr *err)
 Public: Search for a window near a given pixel.
glong ObitDConCleanWindowAdd (ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Public: Add a new window definition.
void ObitDConCleanWindowDel (ObitDConCleanWindow *in, glong field, glong Id, ObitErr *err)
 Public: Delete a window.
void ObitDConCleanWindowUpdate (ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Public: Modify an existing window.
void ObitDConCleanWindowOuter (ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 Public: Set outer window for a field.
gboolean ObitDConCleanWindowImage (ObitDConCleanWindow *in, glong field, ObitErr *err)
 Public: Are there any valid pixels in this field's image?
gboolean ObitDConCleanWindowRow (ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Public: Are there any valid pixels in a specified row within inner window?
gboolean ObitDConCleanWindowInnerRow (ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Public: Are there any valid pixels in a specified row in positive boxes?
gboolean ObitDConCleanWindowUnrow (ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Public: Are there any valid pixels in a specified row in unboxes?
gboolean ObitDConCleanWindowOuterRow (ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 Public: Are there any valid pixels in a specified row with outer window?
glong ObitDConCleanWindowSize (ObitDConCleanWindow *in, glong field, ObitErr *err)
 Public: What is the maximum region covered in x or y?
glong ObitDConCleanWindowCount (ObitDConCleanWindow *in, glong field, ObitErr *err)
 Public: How many pixels are selected.
gboolean ObitDConCleanWindowAutoWindow (ObitDConCleanWindow *in, glong field, ObitFArray *image, gboolean doAbs, gfloat *PeakIn, glong *PeakInPos, gfloat *PeakOut, gfloat *RMS, ObitErr *err)
 Public: find values needed for autoWindow.
void ObitDConCleanWindowReplaceField (ObitDConCleanWindow *in, glong ifield, ObitDConCleanWindow *out, glong ofield, ObitErr *err)
 Public: Replace all windows for a given field with those from another window.
glong ObitDConCleanWindowAddField (ObitDConCleanWindow *in, glong inaxes[2], ObitErr *err)
 Public: Add a field to a window object.


Detailed Description

ObitDConCleanWindow class defining CLEAN windows.

This class is derived from the Obit class.

This class contains specifications of which pixels in the images of an ObitImageMosaic are candidates for a CLEAN component. The current implementation uses a GList for each field so that the number of windows is arbitrary. However, this should be transparent outside the class. Each field in an ImageMosaic has two potential sets of CLEAN windows, the traditional "inner" window with an arbitrary number of components and an "outer", single window which sets the region in which the autoWindow feature is allowed to place windows. "Unwindows" are inner windows in which CLEANing is NOT allowed.

Creators and Destructors

An ObitDConCleanWindow will usually be created using ObitDConCleanWindowCreate which allows specifying a name for the object as well as dimensionality of the array.

A copy of a pointer to an ObitDConCleanWindow should always be made using the ObitDConCleanWindowRef function which updates the reference count in the object. Then whenever freeing an ObitDConCleanWindow or changing a pointer, the function ObitDConCleanWindowUnref will decrement the reference count and destroy the object when the reference count hits 0. There is no explicit destructor.

The contents can be modified using the ObitDConCleanWindowAdd and ObitDConCleanWindowUpdate functions. The presence of valid pixels in an image is indicated by ObitDConCleanWindowImage and in a row by ObitDConCleanWindowRow this also computes a mask for the row indicating valid pixels.

This class supports the autoWindow facility and has different behavior when the autoWindow member is TRUE or FALSE. If TRUE then if no inner window is specified then all pixels are invalid. If FALSE then the default is that all pixels are selected.


Define Documentation

#define ObitDConCleanWindowIsA in   )     ObitIsA (in, ObitDConCleanWindowGetClass())
 

Macro to determine if an object is the member of this or a derived class.

Returns TRUE if a member, else FALSE in = object to reference

#define ObitDConCleanWindowRef in   )     ObitRef (in)
 

Macro to reference (update reference count) an ObitDConCleanWindow.

returns a ObitDConCleanWindow*. in = object to reference

#define ObitDConCleanWindowUnref in   )     ObitUnref (in)
 

Macro to unreference (and possibly destroy) an ObitDConCleanWindow returns a ObitDConCleanWindow*.

in = object to unreference


Typedef Documentation

typedef glong(* ObitDConCleanWindowAddFieldFP)(ObitDConCleanWindow *in, glong inaxes[2], ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef glong(* ObitDConCleanWindowAddFP)(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowAutoWindowFP)(ObitDConCleanWindow *in, glong field, ObitFArray *image, gfloat *PeakIn, glong *PeakInPos, gfloat *PeakOut, gfloat *RMS, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef glong(* ObitDConCleanWindowCountFP)(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef ObitDConCleanWindow*(* ObitDConCleanWindowCreate1FP)(gchar *name, glong naxis[2], ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef ObitDConCleanWindow*(* ObitDConCleanWindowCreateFP)(gchar *name, ObitImageMosaic *mosaic, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef void(* ObitDConCleanWindowDelFP)(ObitDConCleanWindow *in, glong field, glong Id, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowImageFP)(ObitDConCleanWindow *in, glong field, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowInfoFP)(ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType *type, glong **window, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowInnerRowFP)(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef void(* ObitDConCleanWindowOuterFP)(ObitDConCleanWindow *in, glong field, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowOuterRowFP)(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef void(* ObitDConCleanWindowReplaceFieldFP)(ObitDConCleanWindow *in, glong ifield, ObitDConCleanWindow *out, glong ofield, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowRowFP)(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef glong(* ObitDConCleanWindowSearchFP)(ObitDConCleanWindow *in, glong field, glong pixel[2], glong toler, gint *which, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef glong(* ObitDConCleanWindowSizeFP)(ObitDConCleanWindow *in, glong field, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef gboolean(* ObitDConCleanWindowUnrowFP)(ObitDConCleanWindow *in, glong field, glong row, gboolean **mask, ObitErr *err)
 

Typedef for definition of class pointer structure.

typedef void(* ObitDConCleanWindowUpdateFP)(ObitDConCleanWindow *in, glong field, glong Id, ObitDConCleanWindowType type, glong *window, ObitErr *err)
 

Typedef for definition of class pointer structure.


Enumeration Type Documentation

enum ObitDConCleanWindowType
 

enum for window types Should be coordinated with ObitErrorLevelString in ObitErr.c.

Enumeration values:
OBIT_DConCleanWindow_rectangle  rectangle, specified by blc, trc corners
OBIT_DConCleanWindow_round  round, specified by radius, center x, center y pixel
OBIT_DConCleanWindow_unrectangle  rectangle unwindow, specified by blc, trc corners
OBIT_DConCleanWindow_unround  round unwindow, specified by radius, center x, center y pixel


Function Documentation

ObitDConCleanWindow* newObitDConCleanWindow gchar *  name  ) 
 

Public: Default Constructor.

Initializes class if needed on first call.

Parameters:
name An optional name for the object.
Returns:
the new object.

glong ObitDConCleanWindowAdd ObitDConCleanWindow in,
glong  field,
ObitDConCleanWindowType  type,
glong *  window,
ObitErr err
 

Public: Add a new window definition.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
type Window type
window parameters, depends on type
err Obit error stack object.
Returns:
Id of new window, -1 on failure

glong ObitDConCleanWindowAddField ObitDConCleanWindow in,
glong  inaxes[2],
ObitErr err
 

Public: Add a field to a window object.

Parameters:
in Source Window object
inaxes Dimension of image
err Obit error stack object.
Returns:
added field number (1-rel)

gboolean ObitDConCleanWindowAutoWindow ObitDConCleanWindow in,
glong  field,
ObitFArray image,
gboolean  doAbs,
gfloat *  PeakIn,
glong *  PeakInPos,
gfloat *  PeakOut,
gfloat *  RMS,
ObitErr err
 

Public: find values needed for autoWindow.

If the peak in the image is > n*RMS and occurs inside of the outer window but outside the previous inner window, a new round box is added at that position. n=4 for small boxes, 3 large. The added window is round and of a size where the structure function about the center drops to 10% or 3 sigma whichever is less (max=20)

Parameters:
in The Window object
field Which field (1-rel) is of interest?
image pixel array, will be returned blanked outside the outer window and inside the inner window
doAbs If TRUE look for max. abs., otherwise max.
PeakIn [out] Peak value inside of outer window
PeakInPos [out] pixel position (1-rel) of PeakIn
PeakOut [out] Peak value outside of inner window but within outer
RMS [out] RMS within outer Window
err Obit error stack object.
Returns:
TRUE if PeakIn occurs outside of the current inner window

void ObitDConCleanWindowClassInit void   ) 
 

Public: Class initializer.

void ObitDConCleanWindowClone ObitDConCleanWindow in,
ObitDConCleanWindow out,
ObitErr err
 

Public: Copy structure.

Parameters:
in The object to copy
out An existing object pointer for output, must be defined.
err Obit error stack object.

ObitDConCleanWindow* ObitDConCleanWindowCopy ObitDConCleanWindow in,
ObitDConCleanWindow out,
ObitErr err
 

Public: Copy (deep) constructor.

Parameters:
in The object to copy
out An existing object pointer for output or NULL if none exists.
err Obit error stack object.
Returns:
pointer to the new object.

glong ObitDConCleanWindowCount ObitDConCleanWindow in,
glong  field,
ObitErr err
 

Public: How many pixels are selected.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
err Obit error stack object.
Returns:
number of valid pixels

ObitDConCleanWindow* ObitDConCleanWindowCreate gchar *  name,
ObitImageMosaic mosaic,
ObitErr err
 

Public: Create/initialize ObitDConCleanWindow structures.

Parameters:
name An optional name for the object.
mosaic The image mosaic which this object is to describe.
Returns:
the new object.

ObitDConCleanWindow* ObitDConCleanWindowCreate1 gchar *  name,
glong  naxis[2],
ObitErr err
 

Public: Create/initialize ObitDConCleanWindow structure with 1 field.

Parameters:
name An optional name for the object.
mosaic The image mosaic which this object is to describe.
Returns:
the new object.

void ObitDConCleanWindowDel ObitDConCleanWindow in,
glong  field,
glong  Id,
ObitErr err
 

Public: Delete a window.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
Id Window Id, -1 => all
err Obit error stack object, if NULL, no error reporting

gconstpointer ObitDConCleanWindowGetClass void   ) 
 

Public: ClassInfo pointer.

Returns:
pointer to the class structure.

gboolean ObitDConCleanWindowImage ObitDConCleanWindow in,
glong  field,
ObitErr err
 

Public: Are there any valid pixels in this field's image?

Parameters:
in The Window object
field Which field (1-rel) is of interest?
err Obit error stack object.
Returns:
TRUE if there are valid pixels, else FALSE

gboolean ObitDConCleanWindowInfo ObitDConCleanWindow in,
glong  field,
glong  Id,
ObitDConCleanWindowType type,
glong **  window,
ObitErr err
 

Public: Ask window definition.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
ID Window Id, -1=outer
type [out] Window type
window [out] parameters, depends on type Pointer into list
err Obit error stack object.
Returns:
TRUE if window found, else False.

gboolean ObitDConCleanWindowInnerRow ObitDConCleanWindow in,
glong  field,
glong  row,
gboolean **  mask,
ObitErr err
 

Public: Are there any valid pixels in a specified row in positive boxes?

If there are no windows and autoWindow is not selected, then all pixels are selected.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
row Which row (1-rel)
mask [in/out] Mask for pixels in inner boxes, TRUE indicates pixel is in an inner window. If NULL it is created. Should always be allocated/deallocated using ObitMem
err Obit error stack object.
Returns:
TRUE if there are selected pixels, else FALSE

void ObitDConCleanWindowOuter ObitDConCleanWindow in,
glong  field,
ObitDConCleanWindowType  type,
glong *  window,
ObitErr err
 

Public: Set outer window for a field.

Window types are:

  • OBIT_DConCleanWindow_rectangle a rectangular box defined by the blc (1-rel) (window[0],(window[1]) and trc corners (window[2],(window[3]) inclusive
  • OBIT_DConCleanWindow_round a round box defined by the radius in cells (window[0]) and the central pixel (1-rel) (window[1],(window[2])
    Parameters:
    in The Window object
    field Which field (1-rel) is of interest?
    type Window type
    window parameters, depends on type
    err Obit error stack object.

gboolean ObitDConCleanWindowOuterRow ObitDConCleanWindow in,
glong  field,
glong  row,
gboolean **  mask,
ObitErr err
 

Public: Are there any valid pixels in a specified row with outer window?

Unwindows not supported.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
row Which row (1-rel)
mask [in/out] Mask for valid pixels, If NULL, it is created. Should always be allocated/deallocated using ObitMem
err Obit error stack object.
Returns:
TRUE if there are valid pixels, else FALSE

void ObitDConCleanWindowReplaceField ObitDConCleanWindow in,
glong  ifield,
ObitDConCleanWindow out,
glong  ofield,
ObitErr err
 

Public: Replace all windows for a given field with those from another window.

Naxis must correspond between windows

Parameters:
in Source Window object
ifield Which field (1-rel) is of interest in in?
out Source Window object
ofield Which field (1-rel) is of interest in out?
err Obit error stack object.

gboolean ObitDConCleanWindowRow ObitDConCleanWindow in,
glong  field,
glong  row,
gboolean **  mask,
ObitErr err
 

Public: Are there any valid pixels in a specified row within inner window?

If there are no windows and autoWindow is selected then no pixels are selected. If there are no windows and autoWindow is not selected, then all pixels are selected.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
row Which row (1-rel)
mask [in/out] Mask for pixels in inner boxes, TRUE indicates in an inner window but not in unwindow. If NULL it is created. Should always be Should always be allocated/deallocated using ObitMem
err Obit error stack object.
Returns:
TRUE if there are selected pixels, else FALSE

glong ObitDConCleanWindowSearch ObitDConCleanWindow in,
glong  field,
glong  pixel[2],
glong  toler,
gint *  which,
ObitErr err
 

Public: Search for a window near a given pixel.

Returns first found meeting criteria

Parameters:
in The Window object
field Which field (1-rel) is of interest?
pixel pixel coordinate (1-rel)
toler how close in pixels is required
which [out] which part selected, 1=blc or center, 2=trc or radius
err Obit error stack object.
Returns:
iD if window found, else -1.

glong ObitDConCleanWindowSize ObitDConCleanWindow in,
glong  field,
ObitErr err
 

Public: What is the maximum region covered in x or y?

Parameters:
in The Window object
field Which field (1-rel) is of interest?
err Obit error stack object.
Returns:
number of pixels in extent

gboolean ObitDConCleanWindowUnrow ObitDConCleanWindow in,
glong  field,
glong  row,
gboolean **  mask,
ObitErr err
 

Public: Are there any valid pixels in a specified row in unboxes?

Parameters:
in The Window object
field Which field (1-rel) is of interest?
row Which row (1-rel)
mask [in/out] Mask for pixels in unboxes, TRUE indicates pixel is in an unwindow. If NULL it is created. Should always be allocated/deallocated using ObitMem
err Obit error stack object.
Returns:
TRUE if there are selected pixels, else FALSE

void ObitDConCleanWindowUpdate ObitDConCleanWindow in,
glong  field,
glong  Id,
ObitDConCleanWindowType  type,
glong *  window,
ObitErr err
 

Public: Modify an existing window.

Parameters:
in The Window object
field Which field (1-rel) is of interest?
Id Window Id
type Window type
window Parameters, depends on type
err Obit error stack object.


Generated on Fri Aug 31 22:13:05 2007 for Obit by  doxygen 1.3.9.1