All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions
DinverDCCore::DCReportBlock Class Reference

#include <DCReportBlock.h>

List of all members.

Public Member Functions

bool autocorr () const
 DCReportBlock (QDataStream &s)
bool dispersion () const
bool ellipticity () const
bool magnetoTelluric () const
bool modalStorage (int i) const
bool pitch () const
bool profile (int i) const
Resistivity1DModelreadElectricModel ()
void readModalStorages (int nStorages)
void readProfiles (int version)
Seismic1DModelreadSeismicModel ()
bool refractionVp () const
bool refractionVs () const
bool res () const
bool rho () const
void setStorageReader (ModalStorageReader *r)
ModalStorageReaderstorageReader () const
QDataStream & stream ()
bool vp () const
bool vs () const
 ~DCReportBlock ()

Static Public Member Functions

static Seismic1DModelsurfaceWaveModel (const QVector< double > &zProf, QVector< double > &vpProf, const QVector< double > &vsProf, const QVector< double > &rhoProf, const QVector< double > *nuMinProf=0, const QVector< double > *nuMaxProf=0)
static Seismic1DModelvpModel (const QVector< double > &zProf, const QVector< double > &vpProf)
static Seismic1DModelvsModel (const QVector< double > &zProf, const QVector< double > &vsProf)
static Seismic1DModelvspModel (const QVector< double > &zProf, const QVector< double > &vpProf, const QVector< double > &vsProf)
static void write (ReportWriter *report, const TargetList &tl, const Profile *vp=0, const Profile *vs=0, const Profile *rho=0, const Profile *pitch=0, const Profile *res=0)
static void write (ReportWriter *outReport, ReportReader *inReport)
static void writeBeta (ReportWriter *outReport, ReportReader *inReport)
static void writeNaViewer (ReportWriter *outReport, CompatInversionReport *inReport)

Detailed Description

DISP block containing the following sub-blocks:

4 Tag "DISP" 20*8 Offsets to sub-blocks (currently only 9 are in use) 0 if block not available


Constructor & Destructor Documentation

References TRACE.

{
  TRACE;
  _profileOffsets=new qint64[20];
  _modalStorageOffsets=0;
  _s=&s;
  _reader=0;
}

References TRACE.

{
  TRACE;
  delete [] _profileOffsets;
  delete [] _modalStorageOffsets;
  delete _reader;
}

Member Function Documentation

bool DinverDCCore::DCReportBlock::autocorr ( ) const [inline]
bool DinverDCCore::DCReportBlock::dispersion ( ) const [inline]
bool DinverDCCore::DCReportBlock::modalStorage ( int  i) const [inline]

References TRACE.

Referenced by DinverDCGui::EllipticityViewer::hasCurves(), outputDCModel(), DinverDCGui::AutocorrViewer::report2plot(), DinverDCGui::DispersionViewer::seekMode(), and DinverDCGui::AutocorrViewer::setSampleCount().

{
  TRACE;
  if(_modalStorageOffsets[ i ] > 0) {
    _s->device()->seek(_modalStorageOffsets[ i ] );
    return true;
  } else return false;
}
bool DinverDCCore::DCReportBlock::pitch ( ) const [inline]

Referenced by outputDCModel(), readSeismicModel(), and reportMode().

{return profile(3);}
bool DinverDCCore::DCReportBlock::profile ( int  i) const [inline]

References TRACE.

Referenced by DinverDCGui::GroundModelViewer::report2plot(), DinverDCGui::GroundModelViewer::setSampleCount(), and writeBeta().

{
  TRACE;
  if(_profileOffsets[ i ] > 0) {
    _s->device()->seek(_profileOffsets[ i ] );
    return true;
  } else return false;
}

Reads profiles and build a resistivity layered model according to available profiles.

References QGpCoreWave::Profile::count(), QGpCoreWave::Profile::readReport(), res(), and TRACE.

Referenced by reportMode().

{
  TRACE;
  Profile resProf;
  if(res()) resProf.readReport(*_s);
  QVector<double> depths;
  if(resProf.count()>0) {
    return new Resistivity1DModel(resProf);
  } else {
    return 0;
  }
}

Read the modal storage offset table and cache it

References TRACE.

Referenced by DinverDCGui::EllipticityViewer::hasCurves(), DinverDCGui::DispersionViewer::hasCurves(), outputDCModel(), DinverDCGui::AutocorrViewer::report2plot(), and DinverDCGui::AutocorrViewer::setSampleCount().

{
  TRACE;
  delete [] _modalStorageOffsets;
  _modalStorageOffsets=new qint64[nStorages];
  for(int i=0;i<nStorages;i++) stream() >> _modalStorageOffsets[i];
}

Read the profile offset table and cache it

References DCREPORTBLOCK_CURRENT_VERSION, QGpCoreTools::endl(), stream(), QGpCoreTools::tr(), and TRACE.

Referenced by DinverDCGui::GroundModelViewer::exportModels(), DinverDCGui::DCModelViewer::loadModels(), DinverDCGui::GroundModelViewer::minMaxProfiles(), outputDCModel(), DinverDCGui::DCModelViewer::rejectModels(), reportMode(), DinverDCGui::DCModelViewer::selectModels(), write(), and writeBeta().

{
  TRACE;
  switch (version) {
  case 0:
  case 1:
    for(int i=0;i<9;i++)
      stream() >> _profileOffsets[i];
    for(int i=9;i<20;i++)
      _profileOffsets[i]=0;
    break;
  case 2:
    for(int i=0;i<20;i++)
      stream() >> _profileOffsets[i];
    break;
  default:
    App::stream() << tr("Report has been produced by a more recent version of this library %1 (current=%2).")
                 .arg(version).arg(DCREPORTBLOCK_CURRENT_VERSION) << endl;
    for(int i=0;i<20;i++)
      _profileOffsets[i]=0;
    break;
  }
}

Reads profiles and build a layered model according to available profiles.

References QGpCoreWave::Profile::count(), QGpCoreWave::Profile::depths(), pitch(), QGpCoreWave::Profile::readReport(), QGpCoreWave::Profile::resample(), rho(), surfaceWaveModel(), QGpCoreTools::unique(), QGpCoreWave::Profile::values(), vp(), vpModel(), vs(), vsModel(), and vspModel().

Referenced by outputDCModel(), and reportMode().

{
  // Read all profiles available to produce a full sampling of the depths
  Profile vpProf, vsProf, rhoProf, pitchProf;
  if(vp()) vpProf.readReport(*_s);
  if(vs()) vsProf.readReport(*_s);
  if(rho()) rhoProf.readReport(*_s);
  if(pitch()) pitchProf.readReport(*_s); // Used only to ensure complete sampling
  QVector<double> depths;
  if(vpProf.count()==0) {
    if(vsProf.count()==0) {
      return 0;
    } else {
      depths << vsProf.depths();
      depths << pitchProf.depths(); // It matters only if pitch is not empty
      qSort(depths);
      unique(depths);
      vsProf.resample(depths);
      return vsModel(vsProf.depths() ,vsProf.values());
    }
  } else {
    if(vsProf.count()==0) {
      depths << vpProf.depths();
      depths << pitchProf.depths(); // It matters only if pitch is not empty
      qSort(depths);
      unique(depths);
      vpProf.resample(depths);
      return vpModel(vpProf.depths() ,vpProf.values());
    } else if(rhoProf.count()==0) {
      depths << vpProf.depths();
      depths << vsProf.depths();
      depths << pitchProf.depths();
      qSort(depths);
      unique(depths);
      vpProf.resample(depths);
      vsProf.resample(depths);
      return vspModel(depths ,vpProf.values() ,vsProf.values());
    } else {
      depths << vpProf.depths();
      depths << vsProf.depths();
      depths << rhoProf.depths();
      depths << pitchProf.depths();
      qSort(depths);
      unique(depths);
      vpProf.resample(depths);
      vsProf.resample(depths);
      rhoProf.resample(depths);
      QVector<double> vp=vpProf.values();
      return surfaceWaveModel(depths ,vp, vsProf.values(), rhoProf.values());
    }
  }
}
bool DinverDCCore::DCReportBlock::res ( ) const [inline]

Referenced by outputDCModel(), and readElectricModel().

{return profile(4);}
bool DinverDCCore::DCReportBlock::rho ( ) const [inline]

Referenced by outputDCModel(), and readSeismicModel().

{return profile(2);}
{delete _reader; _reader=r;};
{return _reader;};
QDataStream& DinverDCCore::DCReportBlock::stream ( ) [inline]
Seismic1DModel * DinverDCCore::DCReportBlock::surfaceWaveModel ( const QVector< double > &  zProf,
QVector< double > &  vpProf,
const QVector< double > &  vsProf,
const QVector< double > &  rhoProf,
const QVector< double > *  nuMinProf = 0,
const QVector< double > *  nuMaxProf = 0 
) [static]

References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), QGpCoreTools::sqrt(), and TRACE.

Referenced by DinverDCCore::TargetList2D::misfit(), DinverDCCore::TargetList::misfit(), and readSeismicModel().

{
  TRACE;
  ASSERT(!nuMinProf || (nuMinProf && nuMaxProf));
  int nLayers=zProf.size();
  Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
  int i;
  int nLayers1=nLayers - 1;
  double z=0.0;
  for(i=0;i < nLayers1;i++ ) {
    surfModel->setH(i, zProf[i] - z);
    z=zProf[i];
    surfModel->setSlowS(i, 1.0/vsProf[i] );
    if(nuMinProf && nuMinProf->at(i)>=nuMaxProf->at(i)) {
      vpProf[i]=vsProf[i]*sqrt(2.0*(nuMinProf->at(i)-1.0)/(2.0*nuMinProf->at(i)-1.0));
      surfModel->setSlowP(i, 1.0/vpProf[i] );
    }
    surfModel->setSlowP(i, 1.0/vpProf[i] );
    surfModel->setRho(i, rhoProf[i] );
    surfModel->setQp(i, 0.0);
    surfModel->setQs(i, 0.0);
  }
  if(nuMinProf && nuMinProf->at(i)>=nuMaxProf->at(i)) {
    vpProf[i]=vsProf[i]*sqrt(2.0*(nuMinProf->at(i)-1.0)/(2.0*nuMinProf->at(i)-1.0));
  }
  surfModel->setSlowP(i, 1.0/vpProf[i] );
  surfModel->setSlowS(i, 1.0/vsProf[i] );
  surfModel->setRho(i, rhoProf[i] );
  surfModel->setQp(i, 0.0);
  surfModel->setQs(i, 0.0);
  return surfModel;
}
bool DinverDCCore::DCReportBlock::vp ( ) const [inline]

Referenced by outputDCModel(), and readSeismicModel().

{return profile(0);}
Seismic1DModel * DinverDCCore::DCReportBlock::vpModel ( const QVector< double > &  zProf,
const QVector< double > &  vpProf 
) [static]

References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.

Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().

{
  TRACE;
  int nLayers=zProf.size();
  Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
  int i;
  int nLayers1=nLayers - 1;
  double z=0.0;
  for(i=0;i < nLayers1;i++ ) {
    surfModel->setH(i, zProf[i] - z);
    z=zProf[i];
    surfModel->setSlowP(i, 1.0/vpProf[i] );
    surfModel->setSlowS(i, 0.0);
    surfModel->setRho(i, 0.0);
    surfModel->setQp(i, 0.0);
    surfModel->setQs(i, 0.0);
  }
  surfModel->setSlowP(i, 1.0/vpProf[i] );
  surfModel->setSlowS(i, 0.0);
  surfModel->setRho(i, 0.0);
  surfModel->setQp(i, 0.0);
  surfModel->setQs(i, 0.0);
  return surfModel;
}
bool DinverDCCore::DCReportBlock::vs ( ) const [inline]

Referenced by outputDCModel(), and readSeismicModel().

{return profile(1);}
Seismic1DModel * DinverDCCore::DCReportBlock::vsModel ( const QVector< double > &  zProf,
const QVector< double > &  vsProf 
) [static]

References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.

Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().

{
  TRACE;
  int nLayers=zProf.size();
  Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
  int i;
  int nLayers1=nLayers - 1;
  double z=0.0;
  for(i=0;i < nLayers1;i++ ) {
    surfModel->setH(i, zProf[i] - z);
    z=zProf[i];
    surfModel->setSlowP(i, 0.0);
    surfModel->setSlowS(i, 1.0/vsProf[i] );
    surfModel->setRho(i, 0.0);
    surfModel->setQp(i, 0.0);
    surfModel->setQs(i, 0.0);
  }
  surfModel->setSlowP(i, 0.0);
  surfModel->setSlowS(i, 1.0/vsProf[i] );
  surfModel->setRho(i, 0.0);
  surfModel->setQp(i, 0.0);
  surfModel->setQs(i, 0.0);
  return surfModel;
}
Seismic1DModel * DinverDCCore::DCReportBlock::vspModel ( const QVector< double > &  zProf,
const QVector< double > &  vpProf,
const QVector< double > &  vsProf 
) [static]

References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.

Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().

{
  TRACE;
  int nLayers=zProf.size();
  Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
  int i;
  int nLayers1=nLayers - 1;
  double z=0.0;
  for(i=0;i < nLayers1;i++ ) {
    surfModel->setH(i, zProf[i] - z);
    z=zProf[i];
    surfModel->setSlowP(i, 1.0/vpProf[i] );
    surfModel->setSlowS(i, 1.0/vsProf[i] );
    surfModel->setRho(i, 0.0);
    surfModel->setQp(i, 0.0);
    surfModel->setQs(i, 0.0);
  }
  surfModel->setSlowP(i, 1.0/vpProf[i] );
  surfModel->setSlowS(i, 1.0/vsProf[i] );
  surfModel->setRho(i, 0.0);
  surfModel->setQp(i, 0.0);
  surfModel->setQs(i, 0.0);
  return surfModel;
}
void DinverDCCore::DCReportBlock::write ( ReportWriter report,
const TargetList tl,
const Profile vp = 0,
const Profile vs = 0,
const Profile rho = 0,
const Profile pitch = 0,
const Profile res = 0 
) [static]

References DCREPORTBLOCK_CURRENT_VERSION, DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), QGpCoreWave::Profile::writeReport(), QGpCoreWave::MagnetoTelluricFactory::writeReport(), and QGpCoreWave::RefractionFactory::writeReport().

Referenced by DinverDCCore::TargetList2D::writeReport(), and DinverDCCore::TargetList::writeReport().

{
  TRACE;
  // Tag and block version
  report->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
  QDataStream& s=report->stream();
  qint64 tableOffset=s.device()->pos();
  writeOffsetTable(s);
  // Save profiles
  if(vp) {
    ReportWriter::setCurrentOffset(s, tableOffset);
    vp->writeReport(s);
  }
  if(vs) {
    ReportWriter::setCurrentOffset(s, tableOffset+8);
    vs->writeReport(s);
  }
  if(rho) {
    ReportWriter::setCurrentOffset(s, tableOffset+16);
    rho->writeReport(s);
  }
  if(pitch) {
    ReportWriter::setCurrentOffset(s, tableOffset+24);
    pitch->writeReport(s);
  }
  if(res) {
    ReportWriter::setCurrentOffset(s, tableOffset+32);
    res->writeReport(s);
  }
  // Surface waves
  if(tl._dispersionFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+40);
    writeFactory(s, *tl._dispersionFactory);
  }
  if(tl._autocorrFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+48);
    writeFactory(s, *tl._autocorrFactory);
  }
  if(tl._ellipticityFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+56);
    writeFactory(s, *tl._ellipticityFactory);
  }
  // Refraction
  if(tl._refractionVpFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+64);
    tl._refractionVpFactory->writeReport(s);
  }
  if(tl._refractionVsFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+72);
    tl._refractionVsFactory->writeReport(s);
  }
  // Magneto-telluric
  if(tl._magnetoTelluricFactory) {
    ReportWriter::setCurrentOffset(s, tableOffset+80);
    tl._magnetoTelluricFactory->writeReport(s);
  }
}
void DinverDCCore::DCReportBlock::write ( ReportWriter outReport,
ReportReader inReport 
) [static]

Copy one model from inReport to outReport. inReport must point to the beginning of the user block ("DISP"), after tag and version. The model is appended to outReport.

References DCREPORTBLOCK_CURRENT_VERSION, readProfiles(), QGpCoreWave::Profile::readReport(), QGpCoreWave::MagnetoTelluricFactory::readReport(), QGpCoreWave::RefractionFactory::readReport(), sOut(), DinverCore::ReportReader::stream(), DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), DinverCore::ReportReader::userBlockVersion(), QGpCoreWave::Profile::writeReport(), QGpCoreWave::MagnetoTelluricFactory::writeReport(), and QGpCoreWave::RefractionFactory::writeReport().

{
  TRACE;
  int inVersion=inReport->userBlockVersion( "DISP" );
  if(inVersion<0) {
    return;
  }
  DCReportBlock dcBlock(inReport->stream());
  dcBlock.readProfiles(inVersion);
  // Tag and block version
  outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
  QDataStream& sOut=outReport->stream();
  qint64 tableOffset=sOut.device()->pos();
  writeOffsetTable(sOut);
  // Save profiles
  for(int i=0;i<5;i++) {
    if(dcBlock.profile(i)) {
      Profile p;
      ReportWriter::setCurrentOffset(sOut, tableOffset + i*8);
      p.readReport(inReport->stream());
      p.writeReport(sOut);
    }
  }
  if(dcBlock.profile(5)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+40);
    writeFactory(sOut, dcBlock, 4);
  }
  if(dcBlock.profile(6)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+48);
    int nRings;
    dcBlock.stream() >> nRings;
    writeFactory(sOut, dcBlock, 3*nRings);
  }
  if(dcBlock.profile(7)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+56);
    writeFactory(sOut, dcBlock, 1);
  }
  if(dcBlock.profile(8)) { // Refraction Vp
    ReportWriter::setCurrentOffset(sOut, tableOffset+64);
    RefractionFactory f;
    f.readReport(dcBlock.stream());
    f.writeReport(sOut);
  }
  if(dcBlock.profile(9)) { // Refraction Vs
    ReportWriter::setCurrentOffset(sOut, tableOffset+72);
    RefractionFactory f;
    f.readReport(dcBlock.stream());
    f.writeReport(sOut);
  }
  if(dcBlock.profile(10)) { // Magneto-telluric
    ReportWriter::setCurrentOffset(sOut, tableOffset+80);
    MagnetoTelluricFactory f;
    f.readReport(dcBlock.stream());
    f.writeReport(sOut);
  }
}
void DinverDCCore::DCReportBlock::writeBeta ( ReportWriter outReport,
ReportReader inReport 
) [static]

Compatibility with reports generated by Beta release from June 2006

References DCREPORTBLOCK_CURRENT_VERSION, profile(), readProfiles(), QGpCoreWave::Profile::readReport(), sOut(), DinverCore::ReportReader::stream(), DinverCore::ReportWriter::stream(), stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), DinverCore::ReportReader::userBlockVersion(), and QGpCoreWave::Profile::writeReport().

{
  TRACE;
  int inVersion=inReport->userBlockVersion( "DISP" );
  if(inVersion<0) {
    return;
  }
  DCReportBlock dcBlock(inReport->stream());
  dcBlock.readProfiles(inVersion);
  // Tag and block version
  outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
  QDataStream& sOut=outReport->stream();
  qint64 tableOffset=sOut.device()->pos();
  writeOffsetTable(sOut);
  // Save profiles
  for(int i=0;i<5;i++) {
    if(dcBlock.profile(i)) {
      Profile p;
      ReportWriter::setCurrentOffset(sOut, tableOffset + i*8);
      p.readReport(inReport->stream());
      p.writeReport(sOut);
    }
  }
  if(dcBlock.profile(5)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+40);
    writeFactoryBeta(sOut, dcBlock, 4);
  }
  if(dcBlock.profile(6)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+48);
    int nRings;
    dcBlock.stream() >> nRings;
    writeFactory(sOut, dcBlock, 3*nRings);
  }
  if(dcBlock.profile(7)) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+56);
    writeFactory(sOut, dcBlock, 1);
  }
}
void DinverDCCore::DCReportBlock::writeNaViewer ( ReportWriter outReport,
CompatInversionReport inReport 
) [static]

Compatibility with reports generated by Na_viewer

References QGpCompatibility::CompatInversionReport::currentDispersion(), QGpCompatibility::CompatInversionReport::currentModel(), DCREPORTBLOCK_CURRENT_VERSION, QGpCoreWave::Seismic1DModel::rhoProfile(), sOut(), DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), QGpCoreWave::Seismic1DModel::vpProfile(), QGpCoreWave::Seismic1DModel::vsProfile(), and QGpCoreWave::Profile::writeReport().

{
  TRACE;
  // Tag and block version
  outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
  QDataStream& sOut=outReport->stream();
  qint64 tableOffset=sOut.device()->pos();
  writeOffsetTable(sOut);
  // Save profiles
  Seismic1DModel * m=inReport->currentModel();
  ReportWriter::setCurrentOffset(sOut, tableOffset);
  m->vpProfile().writeReport(sOut);
  ReportWriter::setCurrentOffset(sOut, tableOffset+8);
  m->vsProfile().writeReport(sOut);
  ReportWriter::setCurrentOffset(sOut, tableOffset+16);
  m->rhoProfile().writeReport(sOut);
  if(inReport->currentDispersion()) {
    ReportWriter::setCurrentOffset(sOut, tableOffset+40);
    writeFactoryNaViewer(sOut, inReport->currentDispersion(), 4);
  }
  // Autocorr and ellipticities not implemented
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines