MdcDetector Class Reference

#include <MdcDetector.h>

List of all members.

Public Member Functions

 MdcDetector ()
 ~MdcDetector ()
const MdcSWireWire (unsigned id) const
const MdcSWireWire (const Identifier &id) const
const MdcSWireWire (unsigned lyrid, unsigned wirid) const
const MdcLayerLayer (unsigned id) const
const MdcLayerLayer (const Identifier &id) const
MdcLayergetMdcLayer (int laynum) const
const MdcLayerfirstLayer () const
const MdcLayerlastLayer () const
const MdcLayernextLayer (int lay) const
const MdcLayerprevLayer (int lay) const
const MdcLayernextLayer (const MdcLayer *layer) const
const MdcLayerprevLayer (const MdcLayer *layer) const
const MdcSuperLayerSuperLayer (unsigned id) const
const MdcSuperLayerfirstSlay (void) const
const MdcSuperLayerlastSlay (void) const
const MdcSuperLayerfirstSlayInView (int iview) const
const MdcSuperLayerlastSlayInView (int iview) const
int nSuper () const
int nLayer () const
int nAxialSuper (void) const
int nStereoSuper (int iview) const
void Dump ()

Static Public Member Functions

static MdcDetectorinstance (bool doSag)
static MdcDetectorinstance ()

Private Member Functions

void buildpointers (void)
void buildSuperLayers (void)

Private Attributes

MdcSWire ** _senseWire
MdcLayer ** _dclayer
int _wires_in_layer [43]
const MdcLayer_nextlay [43]
const MdcLayer_nextlayinvw [43]
const MdcLayer_prevlay [43]
const MdcLayer_prevlayinvw [43]
MdcSuperLayer ** _slayList
const MdcSuperLayer_firstSlayInView [3]
const MdcSuperLayer_lastSlayInView [3]
const MdcSuperLayer_firstSlay
const MdcSuperLayer_lastSlay
int _version
bool _debug
int _firstLayer
int _nSWire
int _nLayer
int _firstSlayNum
int _lastSlayNum
int _nSlay
int _nAxSlay
int _nSterSlay [2]

Static Private Attributes

static MdcDetector_myself = 0
static bool _doSag = false


Detailed Description

Definition at line 19 of file MdcDetector.h.


Constructor & Destructor Documentation

MdcDetector::MdcDetector (  ) 

Definition at line 29 of file MdcDetector.cxx.

References _dclayer, _doSag, _nLayer, _nSlay, _nSWire, _senseWire, _slayList, _wires_in_layer, buildpointers(), buildSuperLayers(), MdcGeomSvc::getLayerSize(), MdcGeomSvc::getSuperLayerSize(), MdcGeomSvc::getWireSize(), Layer(), MdcGeomSvc::Layer(), MdcGeoLayer::NCell(), MdcLayer::rMid(), and MdcGeomSvc::Wire().

Referenced by instance().

00030 {
00031 
00032   std::cout << " +---------------------------------------------------+\n"
00033     << " |  Creating Mdc Geometry information                |\n"
00034     << " +---------------------------------------------------+\n";    
00035 
00036   IService* ser;
00037   StatusCode sc = Gaudi::svcLocator()->getService("MdcGeomSvc",ser);
00038   if (!sc.isSuccess())
00039     std::cout <<" MdcDetector::Could not open Geometry Service"<<std::endl;
00040   MdcGeomSvc *mdcsvc = dynamic_cast<MdcGeomSvc*> (ser);
00041   if(!mdcsvc) std::cout <<"MdcDetector::Could not open Geometry Service"<<std::endl;
00042 
00043   _nSWire = mdcsvc->getWireSize();
00044   _nLayer = mdcsvc->getLayerSize();
00045   _nSlay  = mdcsvc->getSuperLayerSize();
00046 
00047   _senseWire = new MdcSWire* [_nSWire];
00048   _dclayer   = new MdcLayer* [_nLayer];
00049   _slayList  = new MdcSuperLayer* [_nSlay];
00050 
00051   // build the sense wires
00052   for( int iwire = 0; iwire < _nSWire; iwire++ ) {
00053     const MdcGeoWire *geowir = mdcsvc->Wire(iwire);
00054     HepPoint3D eastP = geowir->Backward()/10.0;
00055     HepPoint3D westP = geowir->Forward() /10.0;
00056     //std::cout<< "wire ("<<geowir->Layer()<<","<<geowir->Cell()<<") east "<<eastP <<",west " <<westP << std::endl;//yzhang debug
00057     double sag=0.;
00058     if(_doSag) sag = geowir->Sag()/10.;//mm->cm
00059 
00060     //std::cout<<"sag = "<<sag<<" "<< geowir->Sag()<<std::endl;
00061     _senseWire[iwire] = new MdcSWire(eastP, westP, sag, geowir->Id(), geowir->Cell());
00062 
00063 
00064   }
00065 
00066   // build sense wire layers
00067   for( int ilay = 0; ilay < _nLayer; ilay++ ) {
00068     const MdcGeoLayer *geolay = mdcsvc->Layer(ilay);
00069     int nwir = geolay->NCell();
00070     int firstwir = geolay->Wirst();
00071     _dclayer[ilay] = new MdcLayer(ilay, nwir, &_senseWire[firstwir],*this);
00072     _wires_in_layer[ilay] = nwir;
00073   }
00074 
00075   // build pointers to make navigation faster
00076   buildpointers();
00077 
00078   // do superlayers
00079   // --------------
00080   buildSuperLayers();
00081   // set nominal cell height for each layer!!!! check!!!!
00082   double rOther;
00083   for(int ilay = 0; ilay < _nLayer; ilay++) {
00084     if( ilay == 0) {
00085       rOther = Layer(ilay + 1)->rMid();
00086     } else {
00087       rOther = Layer(ilay - 1)->rMid();
00088     }
00089     double height = fabs(Layer(ilay)->rMid() - rOther);
00090     const_cast<MdcLayer*>(Layer(ilay))->setCellHeight(height);
00091   }
00092 }

MdcDetector::~MdcDetector (  ) 

Definition at line 96 of file MdcDetector.cxx.

References _dclayer, _nLayer, _nSlay, _nSWire, _senseWire, and _slayList.

00097 {
00098   for( int iwire = 0; iwire < _nSWire; iwire++ ) {
00099     delete _senseWire[iwire];
00100   }
00101   for( int ilay = 0; ilay < _nLayer; ilay++ ) {
00102     delete _dclayer[ilay];
00103   }
00104   for( int islay =0; islay < _nSlay; islay++ ) {
00105     _slayList[islay]->print(std::cout);
00106     delete _slayList[islay];
00107   }
00108 
00109   delete [] _senseWire;
00110   delete [] _dclayer;
00111   delete [] _slayList;
00112 }


Member Function Documentation

void MdcDetector::buildpointers ( void   )  [private]

Definition at line 116 of file MdcDetector.cxx.

References _nextlay, _nextlayinvw, _nLayer, _prevlay, _prevlayinvw, Layer(), and MdcLayer::view().

Referenced by MdcDetector().

00117 {
00118   // first layers
00119   //  for (int index=0; index<lastLayNum()-firstLayNum()+1; index++) {
00120   for (int index=0; index<_nLayer; index++) {
00121     // initialize
00122     _nextlay[index]=0; _prevlay[index]=0; 
00123     _nextlayinvw[index]=0; _prevlayinvw[index]=0;
00124     //    int layi=index+firstLayNum();
00125 
00126     //    if ( !existDet(layi) ) {
00127     //      ErrMsg(fatal) << " layer # " << layi << " does not exist!" <<endmsg;
00128     //    }
00129     //    _dclayer[index] = dchLayer(layi);
00130 
00131     //next and previous pointers
00132     //    if (existDet(layi+1)) { _nextlay[index] = dchLayer(layi+1); }
00133     //    if (existDet(layi-1)) { _prevlay[index] = _dclayer[index-1]; }
00134 
00135     if ( index + 1 < _nLayer ) { _nextlay[index] = Layer(index+1); }
00136     if ( index > 0                  ) { _prevlay[index] = Layer(index-1); }
00137 
00138     //next in view pointer
00139     //    int iview=dchLayer(layi)->view();
00140     int iview = Layer(index)->view();
00141     int jndex;
00142     //    for (jndex=index+1; jndex<lastLayNum()-firstLayNum()+1; jndex++) {
00143     for (jndex=index+1; jndex<_nLayer; jndex++) {
00144       //      int layj=jndex+firstLayNum();
00145       //      if ( !existDet(layj) ) {
00146       //        ErrMsg(fatal) << " layer # " << layj << " does not exist!" <<endmsg;
00147       //      }
00148       if ( iview != Layer(jndex)->view() ) continue;
00149       _nextlayinvw[index] = Layer(jndex+1);
00150       break;
00151     } //(int jndex=index+1; _dclayer[jndex].Exist(); jndex++) 
00152 
00153     //prev in view pointer
00154     for (jndex=index-1; jndex>=0 ; jndex--) {
00155       //      int layj=jndex+firstLayNum();
00156       //      if ( !existDet(layj) ) {
00157       //        ErrMsg(fatal) << " layer # " << layj << " does not exist!" <<endmsg;
00158       //      }
00159       if ( iview!=Layer(jndex)->view() ) continue;
00160       _prevlayinvw[index] = Layer(jndex);
00161       break;
00162     } //(int jndex=index+1; _dclayer[jndex].exist(); jndex++) 
00163 
00164   } //(int index=0; _dclayer[index].exist(); index++)
00165   }

void MdcDetector::buildSuperLayers ( void   )  [private]

Definition at line 169 of file MdcDetector.cxx.

References _firstSlay, _firstSlayInView, _firstSlayNum, _lastSlay, _lastSlayInView, _lastSlayNum, _layPerSL, _nAxSlay, _nLayer, _nSlay, _nSterSlay, _slayList, MdcSuperLayer::addLayer(), firstSlayInView(), getMdcLayer(), MdcSuperLayer::layer(), next, EvtCyclic3::prev(), MdcSuperLayer::setNextInView(), MdcSuperLayer::setPrevInView(), MdcSuperLayer::updateInfo(), and MdcLayer::view().

Referenced by MdcDetector().

00170     {
00171       // some initializations
00172       _nAxSlay = 0;
00173       _nSterSlay[0] = _nSterSlay[1] = 0;
00174 
00175       //  _nSlay = _nLayer/_layPerSL;
00176 
00177       _firstSlayNum = 1;
00178       _lastSlayNum = _nSlay;
00179       //  _slayList = new MdcSuperLayer*[_nSlay];
00180 
00181       // initialize pointers 
00182       _firstSlayInView[0] = _firstSlayInView[1] =_firstSlayInView[2] = 0;
00183       _lastSlayInView[0] = _lastSlayInView[1] =_lastSlayInView[2] = 0;
00184 
00185       int islay;
00186 
00187       // build the SuperLayers
00188       for (islay = 0; islay < _nSlay; islay++) {
00189         //    MdcSuperLayer* superlay = new MdcSuperLayer("Dch SuperLayer",1001+islay);
00190         MdcSuperLayer* superlay = new MdcSuperLayer(islay);
00191         //    *_dchslayerset += *superlay;
00192         _slayList[islay] = superlay;
00193       } 
00194       _firstSlay = _slayList[0];
00195       _lastSlay = _slayList[_nSlay-1];
00196 
00197       // set pointers to Layers in SuperLayers
00198       //  for (int lay=firstLayNum(); lay<=lastLayNum(); lay++) {
00199       for (int lay = 0; lay < _nLayer; lay++) {
00200         int superlayer = lay / _layPerSL;
00201         int index = lay % _layPerSL;
00202         _slayList[superlayer]->addLayer(index,getMdcLayer(lay)); 
00203       }
00204       // update SuperLayer data members
00205       MdcSuperLayer* oldSlayByView[3] = {0,0,0};
00206 
00207       for (islay = 0; islay < _nSlay; islay++) {
00208         const MdcSuperLayer* prev = 0;
00209         const MdcSuperLayer* next = 0;
00210         //    const MdcSuperLayer* prevInView = 0;
00211         //    const MdcSuperLayer* nextInView = 0;
00212 
00213         // SuperLayer view
00214         int iview = _slayList[islay]->layer(0)->view();
00215         int viewIndex = iview+1;
00216         // count SuperLayer types
00217         if ( iview == 0 ) _nAxSlay++;
00218         else if ( iview == -1 ) _nSterSlay[0]++;
00219         else if ( iview == 1 ) _nSterSlay[1]++;
00220 
00221         // build pointer links
00222         if ( islay > 0 ) prev = _slayList[islay - 1];
00223         if ( islay < _nSlay-1 ) next = _slayList[islay + 1];
00224 
00225         // fill first and last SuperLayer pointers
00226         if (firstSlayInView(iview) == 0) _firstSlayInView[viewIndex] =
00227           _slayList[islay];
00228         _lastSlayInView[viewIndex] = _slayList[islay];
00229 
00230         _slayList[islay]->updateInfo(prev, next);
00231         // now the poiters to SuperLayers of the same view
00232         if (oldSlayByView[viewIndex] != 0) {
00233           oldSlayByView[viewIndex]->setNextInView(_slayList[islay]);
00234           _slayList[islay]->setPrevInView(oldSlayByView[viewIndex]);
00235         }
00236 
00237         oldSlayByView[viewIndex] = _slayList[islay];
00238       }
00239     }

void MdcDetector::Dump (  ) 

const MdcLayer* MdcDetector::firstLayer (  )  const [inline]

Definition at line 36 of file MdcDetector.h.

References Layer().

Referenced by MdcTrackList::pickHits().

00036 { return Layer(0); }

const MdcSuperLayer* MdcDetector::firstSlay ( void   )  const [inline]

Definition at line 46 of file MdcDetector.h.

References _firstSlay.

Referenced by MdcSegFinder::createSegs(), MdcSegGrouperSt::resetComb(), MdcSegGrouperCsmc::resetComb(), and MdcSegGrouperAx::resetComb().

00046 {return _firstSlay;}

const MdcSuperLayer* MdcDetector::firstSlayInView ( int  iview  )  const [inline]

Definition at line 48 of file MdcDetector.h.

References _firstSlayInView.

Referenced by buildSuperLayers().

00049     {return _firstSlayInView[iview+1];}

MdcLayer* MdcDetector::getMdcLayer ( int  laynum  )  const [inline]

Definition at line 35 of file MdcDetector.h.

References _dclayer.

Referenced by buildSuperLayers(), and Wire().

00035 { return _dclayer[laynum]; }

MdcDetector * MdcDetector::instance (  )  [static]

Definition at line 21 of file MdcDetector.cxx.

References _myself, and MdcDetector().

Referenced by MdcxTrackFinder::beginRun(), MdcxCosmicSewer::beginRun(), MdcTrkRecon::beginRun(), MdcMergeDups::beginRun(), MdcMakeHits::beginRun(), MdcHoughFinder::beginRun(), HoughValidUpdate::beginRun(), MdcNavigation::beginRun(), instance(), and MdcxFindSegs::MdcxFindSegs().

00022 {
00023   if( 0 == _myself ) {
00024     _myself = new MdcDetector();
00025   }
00026   return _myself;
00027 } 

MdcDetector * MdcDetector::instance ( bool  doSag  )  [static]

Definition at line 16 of file MdcDetector.cxx.

References _doSag, and instance().

00016                                              {
00017   _doSag = doSag;
00018   return instance();
00019 }

const MdcLayer* MdcDetector::lastLayer (  )  const [inline]

Definition at line 37 of file MdcDetector.h.

References _nLayer, and Layer().

Referenced by MdcTrackList::pickHits().

00037 { return Layer(_nLayer - 1); }

const MdcSuperLayer* MdcDetector::lastSlay ( void   )  const [inline]

Definition at line 47 of file MdcDetector.h.

References _lastSlay.

00047 {return _lastSlay;}

const MdcSuperLayer* MdcDetector::lastSlayInView ( int  iview  )  const [inline]

Definition at line 50 of file MdcDetector.h.

References _lastSlayInView.

Referenced by MdcSegList::resetSeed().

00051     {return _lastSlayInView[iview+1];}

const MdcLayer * MdcDetector::Layer ( const Identifier id  )  const

Definition at line 260 of file MdcDetector.cxx.

References Layer(), and MdcID::layer().

00261       {
00262         unsigned layerid = MdcID::layer(id);
00263         return Layer(layerid);
00264         //  if (layerid < fLayers.size())
00265         //         return fLayers[layerid];
00266         //
00267         //         return 0;
00268       }

const MdcLayer* MdcDetector::Layer ( unsigned  id  )  const [inline]

Definition at line 33 of file MdcDetector.h.

References _dclayer.

Referenced by buildpointers(), MdcHoughFinder::digiToHots(), HoughValidUpdate::digiToHots(), MdcHoughFinder::digiToHots2(), HoughValidUpdate::digiToHots2(), MdcTrkRecon::fillEvent(), MdcTrkRecon::fillTrackList(), firstLayer(), lastLayer(), Layer(), MdcDetector(), MdcHit::MdcHit(), MdcHitMapGuts::MdcHitMapGuts(), MdcNavigation::poca(), MdcSegData::poisonHits(), MdcxTrackFinder::printTrack(), MdcxHit::process(), MdcxFindSegs::process(), and MdcMergeDups::testByOverlapHit().

00033 { return _dclayer[id]; }

int MdcDetector::nAxialSuper ( void   )  const [inline]

Definition at line 55 of file MdcDetector.h.

References _nAxSlay.

00055 {return _nAxSlay;}

const MdcLayer* MdcDetector::nextLayer ( const MdcLayer layer  )  const [inline]

Definition at line 40 of file MdcDetector.h.

References _nextlay, and MdcLayer::layNum().

00041     { return _nextlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::nextLayer ( int  lay  )  const [inline]

Definition at line 38 of file MdcDetector.h.

References _nextlay.

Referenced by MdcTrackList::pickHits().

00038 { return _nextlay[lay]; }

int MdcDetector::nLayer ( void   )  const [inline]

Definition at line 54 of file MdcDetector.h.

References _nLayer.

Referenced by MdcHoughFinder::execute(), MdcSegData::poisonHits(), and MdcxFindSegs::process().

00054 { return _nLayer;}

int MdcDetector::nStereoSuper ( int  iview  )  const [inline]

Definition at line 56 of file MdcDetector.h.

References _nSterSlay.

00057     { return iview == 0 ? 0 : _nSterSlay[(iview+1)/2]; }

int MdcDetector::nSuper (  )  const [inline]

Definition at line 53 of file MdcDetector.h.

References _nSlay.

Referenced by MdcTrkRecon::beginRun(), MdcTrkRecon::fillSegList(), MdcSegGrouperSt::fillWithSegs(), MdcSegGrouperCsmc::fillWithSegs(), MdcSegGrouperAx::fillWithSegs(), MdcxFindSegs::initWireGroups(), MdcSegGrouper::MdcSegGrouper(), MdcSegGrouperSt::plotStereo(), MdcxFindSegs::process(), MdcSegGrouperSt::resetList(), MdcSegGrouperCsmc::storePar(), and MdcSegGrouperAx::storePar().

00053 { return _nSlay; }

const MdcLayer* MdcDetector::prevLayer ( const MdcLayer layer  )  const [inline]

Definition at line 42 of file MdcDetector.h.

References _prevlay, and MdcLayer::layNum().

00043     { return _prevlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::prevLayer ( int  lay  )  const [inline]

Definition at line 39 of file MdcDetector.h.

References _prevlay.

Referenced by MdcTrackList::pickHits().

00039 { return _prevlay[lay]; }

const MdcSuperLayer* MdcDetector::SuperLayer ( unsigned  id  )  const [inline]

Definition at line 45 of file MdcDetector.h.

References _slayList.

Referenced by MdcxFindSegs::initWireGroups(), and MdcxFindSegs::process().

00045 { return _slayList[id];}

const MdcSWire* MdcDetector::Wire ( unsigned  lyrid,
unsigned  wirid 
) const [inline]

Definition at line 30 of file MdcDetector.h.

References getMdcLayer(), and MdcLayer::getWire().

00031     { return getMdcLayer(lyrid)->getWire(wirid); }  

const MdcSWire * MdcDetector::Wire ( const Identifier id  )  const

Definition at line 245 of file MdcDetector.cxx.

References MdcID::layer(), Wire(), and MdcID::wire().

00246       {
00247         int  wire = MdcID::wire(id);
00248         int  layer= MdcID::layer(id);
00249         return Wire(layer, wire);
00250         //  unsigned wireid= Layer(layer)->Wirst()+wire;
00251         //  if( wireid < fWires.size()){
00252         //          return fWires[wireid];
00253         //  }
00254         //  else {
00255         //  return 0;
00256         //  }
00257       }

const MdcSWire* MdcDetector::Wire ( unsigned  id  )  const [inline]

Definition at line 28 of file MdcDetector.h.

References _senseWire.

Referenced by MdcHit::MdcHit(), and Wire().

00028 { return _senseWire[id];}


Member Data Documentation

MdcLayer** MdcDetector::_dclayer [private]

Definition at line 69 of file MdcDetector.h.

Referenced by getMdcLayer(), Layer(), MdcDetector(), and ~MdcDetector().

bool MdcDetector::_debug [private]

Definition at line 83 of file MdcDetector.h.

bool MdcDetector::_doSag = false [static, private]

Definition at line 64 of file MdcDetector.h.

Referenced by instance(), and MdcDetector().

int MdcDetector::_firstLayer [private]

Definition at line 84 of file MdcDetector.h.

const MdcSuperLayer* MdcDetector::_firstSlay [private]

Definition at line 78 of file MdcDetector.h.

Referenced by buildSuperLayers(), and firstSlay().

const MdcSuperLayer* MdcDetector::_firstSlayInView[3] [private]

Definition at line 76 of file MdcDetector.h.

Referenced by buildSuperLayers(), and firstSlayInView().

int MdcDetector::_firstSlayNum [private]

Definition at line 87 of file MdcDetector.h.

Referenced by buildSuperLayers().

const MdcSuperLayer* MdcDetector::_lastSlay [private]

Definition at line 79 of file MdcDetector.h.

Referenced by buildSuperLayers(), and lastSlay().

const MdcSuperLayer* MdcDetector::_lastSlayInView[3] [private]

Definition at line 77 of file MdcDetector.h.

Referenced by buildSuperLayers(), and lastSlayInView().

int MdcDetector::_lastSlayNum [private]

Definition at line 88 of file MdcDetector.h.

Referenced by buildSuperLayers().

MdcDetector * MdcDetector::_myself = 0 [static, private]

Definition at line 63 of file MdcDetector.h.

Referenced by instance().

int MdcDetector::_nAxSlay [private]

Definition at line 90 of file MdcDetector.h.

Referenced by buildSuperLayers(), and nAxialSuper().

const MdcLayer* MdcDetector::_nextlay[43] [private]

Definition at line 71 of file MdcDetector.h.

Referenced by buildpointers(), and nextLayer().

const MdcLayer* MdcDetector::_nextlayinvw[43] [private]

Definition at line 72 of file MdcDetector.h.

Referenced by buildpointers().

int MdcDetector::_nLayer [private]

Definition at line 86 of file MdcDetector.h.

Referenced by buildpointers(), buildSuperLayers(), lastLayer(), MdcDetector(), nLayer(), and ~MdcDetector().

int MdcDetector::_nSlay [private]

Definition at line 89 of file MdcDetector.h.

Referenced by buildSuperLayers(), MdcDetector(), nSuper(), and ~MdcDetector().

int MdcDetector::_nSterSlay[2] [private]

Definition at line 91 of file MdcDetector.h.

Referenced by buildSuperLayers(), and nStereoSuper().

int MdcDetector::_nSWire [private]

Definition at line 85 of file MdcDetector.h.

Referenced by MdcDetector(), and ~MdcDetector().

const MdcLayer* MdcDetector::_prevlay[43] [private]

Definition at line 73 of file MdcDetector.h.

Referenced by buildpointers(), and prevLayer().

const MdcLayer* MdcDetector::_prevlayinvw[43] [private]

Definition at line 74 of file MdcDetector.h.

Referenced by buildpointers().

MdcSWire** MdcDetector::_senseWire [private]

Definition at line 68 of file MdcDetector.h.

Referenced by MdcDetector(), Wire(), and ~MdcDetector().

MdcSuperLayer** MdcDetector::_slayList [private]

Definition at line 75 of file MdcDetector.h.

Referenced by buildSuperLayers(), MdcDetector(), SuperLayer(), and ~MdcDetector().

int MdcDetector::_version [private]

Definition at line 82 of file MdcDetector.h.

int MdcDetector::_wires_in_layer[43] [private]

Definition at line 70 of file MdcDetector.h.

Referenced by MdcDetector().


Generated on Tue Nov 29 23:20:11 2016 for BOSS_7.0.2 by  doxygen 1.4.7