qavrg 0.0.28
Public Types | Public Slots | Public Member Functions | Properties | Private Member Functions | Private Attributes
QavrgFitter Class Reference

#include <qavrgfitter.h>

List of all members.

Public Types

enum  { Background, Slope, PeakHeight }

Public Slots

void performCalculation ()
QVector< double > readResult (int parm, int start, int nbins)
QVector< double > readResult (int parm)
double readResult (int parm, int bin)
double readResultAverage (int parm, int start, int nbins)
double readResultBunchAverage (int parm, int bunch, int norbits)
QVector< double > get_RawData (int start, int nbins)
QVector< double > get_RawData ()
double get_RawData (int bin)
QVector< double > get_ReferenceData (int start, int nbins)
QVector< double > get_ReferenceData ()
double get_ReferenceData (int bin)
QVector< double > get_DarkData (int start, int nbins)
QVector< double > get_DarkData ()
double get_DarkData (int bin)
QVector< double > get_FitData (int start, int nbins)
QVector< double > get_FitData ()
double get_FitData (int bin)

Public Member Functions

 QavrgFitter (QavrgAcquisition *acq, int chan)
 ~QavrgFitter ()
void resize (int nsamples)
void setReferenceData ()
void saveReferenceData ()
void loadReferenceData ()
void setDarkData ()
void saveDarkData ()
void loadDarkData ()
QMutex * mutex ()
double * rawDataPtr ()
double * referenceDataPtr ()
double * darkDataPtr ()
int resultSize ()
void prepareCalculation ()
void readSettings (QSettings *settings)
void writeSettings (QSettings *settings)
double inputFullScale (int index) const
double get_InputFullScale () const
void set_InputFullScale (double val)
 QCEP_INTEGER_PROPERTY (InputGain)
 QCEP_DOUBLE_PROPERTY (InputOffset)
 QCEP_INTEGER_PROPERTY (InputBandwidth)
 QCEP_INTEGER_PROPERTY (InputCoupling)
 QCEP_DOUBLE_PROPERTY (FittingOffset)
 QCEP_INTEGER_PROPERTY (FittingStart)
 QCEP_INTEGER_PROPERTY (FittingEnd)
 QCEP_BOOLEAN_PROPERTY (DisplayData)
 QCEP_BOOLEAN_PROPERTY (DisplayRaw)
 QCEP_BOOLEAN_PROPERTY (DisplayReference)
 QCEP_BOOLEAN_PROPERTY (DisplayDark)
 QCEP_BOOLEAN_PROPERTY (DisplayFit)
 QCEP_BOOLEAN_PROPERTY (DarkAvailable)
 QCEP_BOOLEAN_PROPERTY (ReferenceAvailable)

Properties

double inputFullScale
int inputGain
double inputOffset
int inputBandwidth
int inputCoupling
double fittingOffset
int fittingStart
int fittingEnd
bool displayData
bool displayRaw
bool displayReference
bool displayDark
bool displayFit
bool darkAvailable
bool referenceAvailable

Private Member Functions

QString referenceDataPath ()
QString darkDataPath ()

Private Attributes

QMutex m_Mutex
QavrgAcquisitionm_Acquisition
int m_Channel
int m_NSamples
QVector< double > m_RawData
QVector< double > m_DarkData
QVector< double > m_ReferenceData
QVector< double > m_FitData
QVector< QVector< double > > m_Results
int m_ResultSize

Detailed Description

Definition at line 11 of file qavrgfitter.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
Background 
Slope 
PeakHeight 

Definition at line 73 of file qavrgfitter.h.


Constructor & Destructor Documentation

QavrgFitter::QavrgFitter ( QavrgAcquisition acq,
int  chan 
)

Definition at line 11 of file qavrgfitter.cpp.

References prepareCalculation().

  : QObject(),
    m_Mutex(QMutex::Recursive),
    m_Acquisition(acq),
    m_Channel(chan),
    m_NSamples(0),
    m_InputGain(m_Acquisition->saver(), this, "inputGain", 0, "Channel Input Gain"),
    m_InputOffset(m_Acquisition->saver(), this, "inputOffset", 0, "Channel Input Offset"),
    m_InputBandwidth(m_Acquisition->saver(), this, "inputBandwidth", 0, "Channel Input Bandwidth"),
    m_InputCoupling(m_Acquisition->saver(), this, "inputCoupling", 3, "Channel Input Coupling"),
    m_FittingOffset(m_Acquisition->saver(), this, "fittingOffset", 0, "Channel Fitting Offset"),
    m_FittingStart(m_Acquisition->saver(), this, "fittingStart", 0, "Channel Fitting Start"),
    m_FittingEnd(m_Acquisition->saver(), this, "fittingEnd", 32, "Channel Fitting End"),
    m_DisplayData(m_Acquisition->saver(), this, "displayData", false, "Display Channel Data"),
    m_DisplayRaw(m_Acquisition->saver(), this, "displayRaw", false, "Display Channel Raw Data"),
    m_DisplayReference(m_Acquisition->saver(), this, "displayReference", false, "Display Channel Reference Data"),
    m_DisplayDark(m_Acquisition->saver(), this, "displayDark", false, "Display Channel Dark Data"),
    m_DisplayFit(m_Acquisition->saver(), this, "displayFit", false, "Display Channel Fit Data"),
    m_DarkAvailable(QcepSettingsSaverWPtr(), this, "darkAvailable", false, "Channel Dark Data Available"),
    m_ReferenceAvailable(QcepSettingsSaverWPtr(), this, "referenceAvailable", false, "Channel Reference Data Available")
//    m_DarkChanged(this, "darkChanged", false),
//    m_ReferenceChanged(this, "referenceChanged", false),
{
//  printf("Fitter channel %d started\n", chan);

  prepareCalculation();
}
QavrgFitter::~QavrgFitter ( )

Definition at line 39 of file qavrgfitter.cpp.

{
//  printf("Fitter channel %d stopped\n", m_Channel);
}

Member Function Documentation

QString QavrgFitter::darkDataPath ( ) [private]

Definition at line 552 of file qavrgfitter.cpp.

References m_Channel, and QavrgSettings::settingsDirectory().

Referenced by loadDarkData(), and saveDarkData().

{
  return QavrgSettings::settingsDirectory().filePath(tr("dark%1").arg(m_Channel));
}
double * QavrgFitter::darkDataPtr ( )

Definition at line 643 of file qavrgfitter.cpp.

References m_DarkData.

Referenced by QavrgAcquisitionSimulated::calculateSimulatedAcquisition(), and QavrgAcquisition::readoutAcquisition().

{
//  if (!m_Mutex.locked()) {
//    printf("Warning: QavrgFitter::darkDataPtr called on unlocked object\n");
//  }

  return m_DarkData.data();
}
QVector< double > QavrgFitter::get_DarkData ( int  start,
int  nbins 
) [slot]

Definition at line 366 of file qavrgfitter.cpp.

References m_DarkData, and m_Mutex.

Referenced by QavrgWindow::updateGraph().

{
  QMutexLocker lock(&m_Mutex);

  return m_DarkData.mid(start,nbins);
}
QVector< double > QavrgFitter::get_DarkData ( ) [slot]

Definition at line 373 of file qavrgfitter.cpp.

References m_DarkData, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  return m_DarkData;
}
double QavrgFitter::get_DarkData ( int  bin) [slot]

Definition at line 380 of file qavrgfitter.cpp.

References m_DarkData, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  return m_DarkData.value(bin);
}
QVector< double > QavrgFitter::get_FitData ( int  start,
int  nbins 
) [slot]

Definition at line 387 of file qavrgfitter.cpp.

References m_FitData, and m_Mutex.

Referenced by QavrgWindow::updateGraph().

{
  QMutexLocker lock(&m_Mutex);

  return m_FitData.mid(start,nbins);
}
QVector< double > QavrgFitter::get_FitData ( ) [slot]

Definition at line 394 of file qavrgfitter.cpp.

References m_FitData, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  return m_FitData;
}
double QavrgFitter::get_FitData ( int  bin) [slot]

Definition at line 401 of file qavrgfitter.cpp.

References m_FitData, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  return m_FitData.value(bin);
}
double QavrgFitter::get_InputFullScale ( ) const

Definition at line 433 of file qavrgfitter.cpp.

References inputFullScale.

{
//  QMutexLocker lock(&m_Mutex);

  return inputFullScale(get_InputGain());
}
QVector< double > QavrgFitter::get_RawData ( ) [slot]

Definition at line 331 of file qavrgfitter.cpp.

References m_Mutex, and m_RawData.

{
  QMutexLocker lock(&m_Mutex);

  return m_RawData;
}
double QavrgFitter::get_RawData ( int  bin) [slot]

Definition at line 338 of file qavrgfitter.cpp.

References m_Mutex, and m_RawData.

{
  QMutexLocker lock(&m_Mutex);

  return m_RawData.value(bin);
}
QVector< double > QavrgFitter::get_RawData ( int  start,
int  nbins 
) [slot]

Definition at line 324 of file qavrgfitter.cpp.

References m_Mutex, and m_RawData.

Referenced by QavrgAcquisition::saveData(), and QavrgWindow::updateGraph().

{
  QMutexLocker lock(&m_Mutex);

  return m_RawData.mid(start,nbins);
}
QVector< double > QavrgFitter::get_ReferenceData ( int  start,
int  nbins 
) [slot]

Definition at line 345 of file qavrgfitter.cpp.

References m_Mutex, and m_ReferenceData.

Referenced by QavrgWindow::updateGraph().

{
  QMutexLocker lock(&m_Mutex);

  return m_ReferenceData.mid(start,nbins);
}
QVector< double > QavrgFitter::get_ReferenceData ( ) [slot]

Definition at line 352 of file qavrgfitter.cpp.

References m_Mutex, and m_ReferenceData.

{
  QMutexLocker lock(&m_Mutex);

  return m_ReferenceData;
}
double QavrgFitter::get_ReferenceData ( int  bin) [slot]

Definition at line 359 of file qavrgfitter.cpp.

References m_Mutex, and m_ReferenceData.

{
  QMutexLocker lock(&m_Mutex);

  return m_ReferenceData.value(bin);
}
double QavrgFitter::inputFullScale ( int  index) const

Definition at line 422 of file qavrgfitter.cpp.

{
  const double vals[] = {0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0};

  if (index < 0 || index > 6) {
    return 0;
  } else {
    return vals[index];
  }
}
void QavrgFitter::loadDarkData ( )

Definition at line 583 of file qavrgfitter.cpp.

References darkDataPath(), m_Channel, m_DarkData, m_Mutex, m_NSamples, and resize().

{
  QMutexLocker lock(&m_Mutex);

  QFile file(darkDataPath());

  if (!file.open(QIODevice::ReadOnly)) {
    printf("Couldn't load dark data for channel %d\n", m_Channel);
    return;
  }

  int sz = file.size();

  int nsamp = sz / sizeof(double);
  int nread = nsamp*sizeof(double);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  if (nsamp > m_NSamples) {
    resize(nsamp);
  }

  m_DarkData.fill(0);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  int szrd = file.read((char*) m_DarkData.data(), nread);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  if (szrd != nread) {
    printf("Incomplete read, read %ld of %ld.\n", (long) szrd, (long) nread);
  }

  set_DarkAvailable(true);
}
void QavrgFitter::loadReferenceData ( )

Definition at line 506 of file qavrgfitter.cpp.

References m_Channel, m_Mutex, m_NSamples, m_ReferenceData, referenceDataPath(), and resize().

{
  QMutexLocker lock(&m_Mutex);

  QFile file(referenceDataPath());

  if (!file.open(QIODevice::ReadOnly)) {
    printf("Couldn't load reference data for channel %d\n", m_Channel);
    return;
  }

  int sz = file.size();

  int nsamp = sz / sizeof(double);
  int nread = nsamp*sizeof(double);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  if (nsamp > m_NSamples) {
    resize(nsamp);
  }

  m_ReferenceData.fill(0);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  int szrd = file.read((char*) m_ReferenceData.data(), nread);

  //   printf("File size %d, nsamp %d, nread %d\n", sz, nsamp, nread);

  if (szrd != nread) {
    printf("Incomplete read, read %d of %d.\n", szrd, nread);
  }

  set_ReferenceAvailable(true);
}
QMutex * QavrgFitter::mutex ( )

Definition at line 620 of file qavrgfitter.cpp.

References m_Mutex.

{
  return &m_Mutex;
}
void QavrgFitter::performCalculation ( ) [slot]

Definition at line 155 of file qavrgfitter.cpp.

References QavrgMatrix::gaussj(), m_Acquisition, m_Channel, m_DarkData, m_FitData, m_Mutex, m_RawData, m_ReferenceData, and m_Results.

Referenced by QavrgAcquisitionSimulated::calculateSimulatedAcquisition(), and QavrgAcquisition::readoutAcquisition().

{
  QMutexLocker lock(&m_Mutex);

//  printf("Fitter channel %d calculation started\n", m_Channel);
//  printf("Current thread %p, this->thread() %p\n", QThread::currentThread(), thread());

  QTime tm;
  tm.start();

  int sz = m_Acquisition -> get_NSamples();

  if (sz > m_RawData.size()) {
    printf("data record for channel %d shorter than expected (expected %d, actual %d, adjusting\n",
           m_Channel, sz, m_RawData.size());

    sz = m_RawData.size();
  }

  if (!get_ReferenceAvailable()) {
    printf("can't perform fitting if no reference is available\n");
    return;
  }

  if (sz > m_ReferenceData.size()) {
    printf("reference data record for channel %d shorter than expected (expected %d, actual %d, adjusting\n",
           m_Channel, sz, m_ReferenceData.size());

    sz = m_ReferenceData.size();
  }

  if (get_DarkAvailable() && sz > m_DarkData.size()) {
    printf("dark data record for channel %d shorter than expected (expected %d, actual %d, adjusting\n",
           m_Channel, sz, m_DarkData.size());

    sz = m_DarkData.size();
  }

  m_FitData.resize(sz);
  m_FitData.fill(0);

  double bucketsperorbit = m_Acquisition -> get_BucketsPerOrbit();
  double orbitperiod = m_Acquisition -> get_SamplesPerOrbit();
  double bunchperiod = orbitperiod/bucketsperorbit;

  QVector<int> filledBuckets = m_Acquisition -> get_FilledBuckets();

  if (filledBuckets.size() == 0) {
//    printf("Constructing fake fill pattern");

    for (int i=0; i<24; i++) {
      filledBuckets.append(i*bucketsperorbit/24.0);
    }
  }

  double* d = m_RawData.data();
  double* ref = m_ReferenceData.data();
  double* drk = m_DarkData.data();
  double* fit = m_FitData.data();

  m_Results.resize(3);
  m_Results[0].resize(0);
  m_Results[1].resize(0);
  m_Results[2].resize(0);

  double t0 = 0;

//  printf("Ch%d: Samples per orbit %g, samples per bunch %g\n", m_Channel, orbitperiod, bunchperiod);
//  printf("%d filled buckets\n", filledBuckets.size());

  int fitStart = get_FittingStart();
  int fitEnd   = get_FittingEnd();
  double fitOffset = get_FittingOffset();

  while (t0 < sz) {
    int b;
    foreach(b,filledBuckets) {
      double t = t0 + b*bunchperiod;

      int i0 = (int) (t + fitStart);
      int i1 = (int) (t + fitEnd);

      if (i1 < sz) {
        QavrgMatrix m(3,3);
        QVector<double> v(3);

        for (int i=0; i<3; i++) {
          for (int j=0; j<3; j++) {
            m(i,j) = 0;
          }
          v[i]=0;
        }

        if (get_DarkAvailable()) {
          for (int i=i0; i<i1; i++) {
            double x=i-i0;
            double r=ref[i] - drk[i] - fitOffset;
            double y=(d[i] - drk[i] - fitOffset);

            m(0,0) += 1;
            m(0,1) += x;
            m(0,2) += r;
            v[0]   += y;

            m(1,0) += x;
            m(1,1) += x*x;
            m(1,2) += x*r;
            v[1]   += y*x;

            m(2,0) += r;
            m(2,1) += r*x;
            m(2,2) += r*r;
            v[2]   += y*r;
          }
        } else {
          for (int i=i0; i<i1; i++) {
            double x=i-i0;
            double r=ref[i] - fitOffset;
            double y=(d[i] - fitOffset);

            m(0,0) += 1;
            m(0,1) += x;
            m(0,2) += r;
            v[0]   += y;
            
            m(1,0) += x;
            m(1,1) += x*x;
            m(1,2) += x*r;
            v[1]   += y*x;
            
            m(2,0) += r;
            m(2,1) += r*x;
            m(2,2) += r*r;
            v[2]   += y*r;
          }
        }

        QavrgMatrix::gaussj(m,v);

//        printf("Ch%d:Bnch%d:v0=%g:v1=%g:v2=%g\n", m_Channel, b, v[0], v[1], v[2]);

        if (get_DarkAvailable()) {
          for (int i=i0; i<i1; i++) {
            double x=i-i0;
            double r=ref[i] - drk[i] - fitOffset;

            fit[i] = v[0]+x*v[1]+r*v[2] + fitOffset;
          }
        } else {
          for (int i=i0; i<i1; i++) {
            double x=i-i0;
            double r=ref[i] - fitOffset;

            fit[i] = v[0]+x*v[1]+r*v[2] + fitOffset;
          }
        }

        m_Results[0].append(v[0]);
        m_Results[1].append(v[1]);
        m_Results[2].append(v[2]);

//        printf("Ch%d: Fit %g + %g*x +%g*ref\n", m_Channel, v[0], v[1], v[2]);
      }
    }

    t0 += orbitperiod;
  }
}
void QavrgFitter::prepareCalculation ( )

Definition at line 104 of file qavrgfitter.cpp.

References m_Acquisition, m_Mutex, and m_ResultSize.

Referenced by QavrgFitter(), and resultSize().

{
  QMutexLocker lock(&m_Mutex);

  double bucketsperorbit = m_Acquisition -> get_BucketsPerOrbit();
  double orbitperiod = m_Acquisition -> get_SamplesPerOrbit();
  double bunchperiod = orbitperiod/bucketsperorbit;

  QVector<int> filledBuckets = m_Acquisition -> get_FilledBuckets();

  if (filledBuckets.size() == 0) {
//    printf("Constructing fake fill pattern");

    for (int i=0; i<24; i++) {
      filledBuckets.append(i*bucketsperorbit/24.0);
    }
  }

  int sz = m_Acquisition -> get_NSamples();

  m_ResultSize = 0;

  double t0 = 0;

//  printf("Ch%d: Samples per orbit %g, samples per bunch %g, buckets per orbit %g samples %d\n",
//         m_Channel, orbitperiod, bunchperiod, bucketsperorbit, sz);
//  printf("%d filled buckets\n", filledBuckets.size());

//   if (filledBuckets.size() == 24) {
//     for (int i=0; i<24; i++) {
//       printf("%d\t%d\t%g\n", i, filledBuckets.value(i), (i*bucketsperorbit/24.0));
//     }
//   }

  while (t0 < sz) {
    int b;
    foreach(b,filledBuckets) {
      double t = t0 + b*bunchperiod;

//      int i0 = (int) (t + get_FittingStart());
      int i1 = (int) (t + get_FittingEnd());

      if (i1 < sz) {
        m_ResultSize += 1;
      }
    }

    t0 += orbitperiod;
  }
}
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DisplayRaw  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( ReferenceAvailable  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DisplayData  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DisplayReference  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DisplayFit  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DarkAvailable  )
QavrgFitter::QCEP_BOOLEAN_PROPERTY ( DisplayDark  )
QavrgFitter::QCEP_DOUBLE_PROPERTY ( InputOffset  )
QavrgFitter::QCEP_DOUBLE_PROPERTY ( FittingOffset  )
QavrgFitter::QCEP_INTEGER_PROPERTY ( FittingStart  )
QavrgFitter::QCEP_INTEGER_PROPERTY ( FittingEnd  )
QavrgFitter::QCEP_INTEGER_PROPERTY ( InputGain  )
QavrgFitter::QCEP_INTEGER_PROPERTY ( InputBandwidth  )
QavrgFitter::QCEP_INTEGER_PROPERTY ( InputCoupling  )
double * QavrgFitter::rawDataPtr ( )

Definition at line 625 of file qavrgfitter.cpp.

References m_RawData.

Referenced by QavrgAcquisitionSimulated::calculateSimulatedAcquisition(), and QavrgAcquisition::readoutAcquisition().

{
//  if (!m_Mutex.locked()) {
//    printf("Warning: QavrgFitter::rawDataPtr called on unlocked object\n");
//  }

  return m_RawData.data();
}
double QavrgFitter::readResult ( int  parm,
int  bin 
) [slot]

Definition at line 67 of file qavrgfitter.cpp.

References m_Mutex, and m_Results.

{
  QMutexLocker lock(&m_Mutex);

  return m_Results.value(parm).value(bin);
}
QVector< double > QavrgFitter::readResult ( int  parm,
int  start,
int  nbins 
) [slot]

Definition at line 53 of file qavrgfitter.cpp.

References m_Mutex, and m_Results.

Referenced by QavrgAcquisition::readResult().

{
  QMutexLocker lock(&m_Mutex);

  return m_Results.value(parm).mid(start,nbins);
}
QVector< double > QavrgFitter::readResult ( int  parm) [slot]

Definition at line 60 of file qavrgfitter.cpp.

References m_Mutex, and m_Results.

{
  QMutexLocker lock(&m_Mutex);

  return m_Results.value(parm);
}
double QavrgFitter::readResultAverage ( int  parm,
int  start,
int  nbins 
) [slot]

Definition at line 74 of file qavrgfitter.cpp.

References m_Mutex, and m_Results.

Referenced by QavrgAcquisition::readResultAverage().

{
  QMutexLocker lock(&m_Mutex);

  double res = 0;
  QVector<double> vec = m_Results.value(parm);

  for (int i=0; i<nbins; i++) {
    res += vec.value(i+start);
  }

  return res / nbins;
}
double QavrgFitter::readResultBunchAverage ( int  parm,
int  bunch,
int  norbits 
) [slot]

Definition at line 88 of file qavrgfitter.cpp.

References m_Acquisition, m_Mutex, and m_Results.

Referenced by QavrgAcquisition::readResultBunchAverage().

{
  QMutexLocker lock(&m_Mutex);

  double res = 0;
  QVector<double> vec = m_Results.value(parm);

  for (int i=0; i<norbits; i++) {
    int nb = i*m_Acquisition -> get_FilledBucketsPerOrbit() + bunch;

    res += vec.value(nb);
  }

  return res/norbits;
}
void QavrgFitter::readSettings ( QSettings *  settings)

Definition at line 408 of file qavrgfitter.cpp.

References m_Channel, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  QcepProperty::readSettings(this, &staticMetaObject, tr("channels%1").arg(m_Channel), settings);
}
QString QavrgFitter::referenceDataPath ( ) [private]

Definition at line 475 of file qavrgfitter.cpp.

References m_Channel, and QavrgSettings::settingsDirectory().

Referenced by loadReferenceData(), and saveReferenceData().

{
  return QavrgSettings::settingsDirectory().filePath(tr("ref%1").arg(m_Channel));
}
double * QavrgFitter::referenceDataPtr ( )

Definition at line 634 of file qavrgfitter.cpp.

References m_ReferenceData.

Referenced by QavrgAcquisitionSimulated::calculateSimulatedAcquisition(), and QavrgAcquisition::readoutAcquisition().

{
//  if (!m_Mutex.locked()) {
//    printf("Warning: QavrgFitter::referenceDataPtr called on unlocked object\n");
//  }

  return m_ReferenceData.data();
}
void QavrgFitter::resize ( int  nsamples)

Definition at line 452 of file qavrgfitter.cpp.

References m_DarkData, m_FitData, m_Mutex, m_NSamples, m_RawData, and m_ReferenceData.

Referenced by loadDarkData(), and loadReferenceData().

{
  QMutexLocker lock(&m_Mutex);

  if (nsamples != m_NSamples) {
    m_NSamples = nsamples;

    m_RawData.resize(m_NSamples);
    m_DarkData.resize(m_NSamples);
    m_ReferenceData.resize(m_NSamples);
    m_FitData.resize(m_NSamples);
  }
}
int QavrgFitter::resultSize ( )

Definition at line 44 of file qavrgfitter.cpp.

References m_Mutex, m_ResultSize, and prepareCalculation().

Referenced by QavrgAcquisition::saveAcquisitionResult(), and QavrgAcquisition::startNewScan().

{
  QMutexLocker lock(&m_Mutex);

  prepareCalculation();

  return m_ResultSize;
}
void QavrgFitter::saveDarkData ( )

Definition at line 557 of file qavrgfitter.cpp.

References darkDataPath(), m_Channel, m_DarkData, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  QFile file(darkDataPath());

  if (!file.open(QIODevice::WriteOnly)) {
    printf("Couldn't save dark data for channel %d\n", m_Channel);
    return;
  }

  //   printf("File size = %ld\n", file.size());

  qint64 sz = m_DarkData.size()*sizeof(double);

  //   printf("Dark data size = %ld elems\n", m_ReferenceData.size());

  qint64 szwrt = file.write((char*) m_DarkData.data(), sz);

  //   printf("New file size = %ld\n", file.size());

  if (szwrt != sz) {
    printf("Incomplete write, wrote %ld of %ld.\n", (long) szwrt, (long) sz);
  }
}
void QavrgFitter::saveReferenceData ( )

Definition at line 480 of file qavrgfitter.cpp.

References m_Channel, m_Mutex, m_ReferenceData, and referenceDataPath().

{
  QMutexLocker lock(&m_Mutex);

  QFile file(referenceDataPath());

  if (!file.open(QIODevice::WriteOnly)) {
    printf("Couldn't save reference data for channel %d\n", m_Channel);
    return;
  }

  //   printf("File size = %ld\n", file.size());

  qint64 sz = m_ReferenceData.size()*sizeof(double);

  //   printf("Reference data size = %ld elems\n", m_ReferenceData.size());

  qint64 szwrt = file.write((char*) m_ReferenceData.data(), sz);

  //   printf("New file size = %ld\n", file.size());

  if (szwrt != sz) {
    printf("Incomplete write, wrote %ld of %ld.\n", (long) szwrt, (long) sz);
  }
}
void QavrgFitter::set_InputFullScale ( double  val)

Definition at line 440 of file qavrgfitter.cpp.

References inputFullScale, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  for (int i=0; i<7; i++) {
    if (inputFullScale(i) >= val) {
      set_InputGain(i);
      return;
    }
  }
}
void QavrgFitter::setDarkData ( )

Definition at line 543 of file qavrgfitter.cpp.

References m_DarkData, m_Mutex, and m_RawData.

{
  QMutexLocker lock(&m_Mutex);

  m_DarkData = m_RawData;

  set_DarkAvailable(true);
}
void QavrgFitter::setReferenceData ( )

Definition at line 466 of file qavrgfitter.cpp.

References m_Mutex, m_RawData, and m_ReferenceData.

{
  QMutexLocker lock(&m_Mutex);

  m_ReferenceData = m_RawData;

  set_ReferenceAvailable(true);
}
void QavrgFitter::writeSettings ( QSettings *  settings)

Definition at line 415 of file qavrgfitter.cpp.

References m_Channel, and m_Mutex.

{
  QMutexLocker lock(&m_Mutex);

  QcepProperty::writeSettings(this, &staticMetaObject, tr("channels%1").arg(m_Channel), settings);
}

Member Data Documentation

Definition at line 85 of file qavrgfitter.h.

Referenced by performCalculation(), prepareCalculation(), and readResultBunchAverage().

int QavrgFitter::m_Channel [private]
QVector<double> QavrgFitter::m_DarkData [private]
QVector<double> QavrgFitter::m_FitData [private]

Definition at line 92 of file qavrgfitter.h.

Referenced by get_FitData(), performCalculation(), and resize().

QMutex QavrgFitter::m_Mutex [private]
int QavrgFitter::m_NSamples [private]

Definition at line 88 of file qavrgfitter.h.

Referenced by loadDarkData(), loadReferenceData(), and resize().

QVector<double> QavrgFitter::m_RawData [private]
QVector<double> QavrgFitter::m_ReferenceData [private]
QVector< QVector<double> > QavrgFitter::m_Results [private]

Definition at line 95 of file qavrgfitter.h.

Referenced by prepareCalculation(), and resultSize().


Property Documentation

bool QavrgFitter::darkAvailable [read, write]

Definition at line 126 of file qavrgfitter.h.

bool QavrgFitter::displayDark [read, write]

Definition at line 121 of file qavrgfitter.h.

bool QavrgFitter::displayData [read, write]

Definition at line 115 of file qavrgfitter.h.

bool QavrgFitter::displayFit [read, write]

Definition at line 123 of file qavrgfitter.h.

bool QavrgFitter::displayRaw [read, write]

Definition at line 117 of file qavrgfitter.h.

bool QavrgFitter::displayReference [read, write]

Definition at line 119 of file qavrgfitter.h.

int QavrgFitter::fittingEnd [read, write]

Definition at line 112 of file qavrgfitter.h.

double QavrgFitter::fittingOffset [read, write]

Definition at line 108 of file qavrgfitter.h.

int QavrgFitter::fittingStart [read, write]

Definition at line 110 of file qavrgfitter.h.

int QavrgFitter::inputBandwidth [read, write]

Definition at line 103 of file qavrgfitter.h.

int QavrgFitter::inputCoupling [read, write]

Definition at line 105 of file qavrgfitter.h.

double QavrgFitter::inputFullScale [read, write]

Definition at line 98 of file qavrgfitter.h.

Referenced by get_InputFullScale(), and set_InputFullScale().

int QavrgFitter::inputGain [read, write]

Definition at line 98 of file qavrgfitter.h.

double QavrgFitter::inputOffset [read, write]

Definition at line 101 of file qavrgfitter.h.

bool QavrgFitter::referenceAvailable [read, write]

Definition at line 128 of file qavrgfitter.h.


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