Пример #1
0
 void tst1() {
     std::cerr << singleton(10) << "\n";
     std::cerr << all() << "\n";
     std::cerr << l(-10) << "\n";
     std::cerr << r(10) << "\n";
     std::cerr << l(-10, true) << "\n";
     std::cerr << r(10, true) << "\n";
     std::cerr << b(2, 10) << "\n";
     std::cerr << wd(b(-5, 5, true, false, 1, 2) * b(-5, 5, false, true, 3, 4)) << "\n";
     std::cerr << wd(l(2, false, 1) / b(2, 6, false, false, 2, 3)) << "\n";
     std::cerr << wd(expt(b(-2, 3, true, false, 1, 2), 2)) << "\n";
     std::cerr << wd(expt(b(-4, 3, true, false, 1, 2), 2)) << "\n";
     std::cerr << wd(expt(b(2, 4, true, false, 1, 2), 2)) << "\n";
     std::cerr << wd(expt(b(0, 3, true, false, 1, 2), 2)) << "\n";
     std::cerr << wd(expt(b(-4, -2, true, false, 1, 2), 2)) << "\n";
     std::cerr << b(2, 10, false, false, 1, 2) << " * " << l(10, false, 3).inv() << " = " << wd(b(2, 10, false, false, 1, 2) / l(10, false, 3)) << "\n";
     std::cerr << b(-2, -1, false, true) << " * " << b(-3,0) << " = "; std::cerr.flush();
     std::cerr << (b(-2, -1, false, true) * b(-3,0)) << "\n";
     std::cerr << b(1, 2, true, false) << " * " << b(0,3) << " = "; std::cerr.flush();
     std::cerr << (b(1, 2, true, false) * b(0,3)) << "\n";
     std::cerr << b(1, 2, true, true) << " * " << b(-3,0) << " = "; std::cerr.flush();
     std::cerr << (b(1, 2, true, true) * b(-3,0)) << "\n";
     std::cerr << b(10,20) << " / " << b(0,1,true,false) << " = "; std::cerr.flush();
     std::cerr << (b(10,20)/b(0,1,true,false)) << "\n";
     std::cerr << (b(10,20)/b(0,2,true,false)) << "\n";
 }
Пример #2
0
void QxrdSimpleServerThread::run()
{
  {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt && qcepDebug(DEBUG_THREADS)) {
      expt->printMessage("Starting Simple Server Thread");
    }

    QxrdSimpleServerPtr server(new QxrdSimpleServer(m_Saver, m_Experiment, m_Name));

    if (server) {
      m_Mutex.lock();
//      server->moveToThread(g_Application->thread());
      m_Server = server;
      m_Mutex.unlock();
    }
  }

  int rc = -1;

  rc = exec();

  {
    QxrdExperimentPtr expt(m_Experiment);
    if (expt && qcepDebug(DEBUG_THREADS)) {
      expt->printMessage(tr("Simple Server Thread Terminated with rc %1").arg(rc));
    }
  }
}
Пример #3
0
static double nicenum(double x, int round)
{
    int exp;				/* exponent of x */
    double f;				/* fractional part of x */
    double nf;				/* nice, rounded fraction */
	double sign = (x >= 0) ? 1.0 : -1.0;
	double ax = x / sign;	/* Absolute value of x*/

    exp = floor(log10(ax));
    f = ax/expt(10., exp);		/* between 1 and 10 */
    if (round)
		{
		if (f<1.5)
			nf = 1.;
		else if (f<3.)
			nf = 2.;
		else if (f<7.)
			nf = 5.;
		else
			nf = 10.;
		}
    else
		{
		if (f<=1.)
			nf = 1.;
		else if (f<=2.)
			nf = 2.;
		else if (f<=5.)
			nf = 5.;
		else
			nf = 10.;
		}
   return sign*nf*expt(10., exp);
}
Пример #4
0
int main(int argc, char *argv[]) {
  printf("%d\n", expt(2, 10));
  printf("%d\n", expt(2, 11));
  printf("%d\n", expt(7, 3));
  printf("%d\n", expt(7, 0));
  printf("%d\n", expt(3, 6));
  return 0;
}
Пример #5
0
void evidence_expt()
{
  printf("Tests for expt\n");
  printf("Expecting 1024: %ld\n", expt(2,10));  /* 1024 */
  printf("Expecting 134217728: %ld\n", expt(8,9));   /* 134217728 */
  printf("Expecting 96059601: %ld\n", expt(99,4));  /* 96059601 */
  printf("Expecting 184528125: %ld\n", expt(45,5));  /* 184528125 */
}
Пример #6
0
QcepIntegratedDataPtr QxrdIntegrator::performIntegration(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask)
{
  if (qcepDebug(DEBUG_INTEGRATOR)) {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      expt->printMessage(tr("QxrdIntegrator::performIntegration(\"%1\")")
                         .arg(dimg->get_FileName()));
    }
  }

  QThread::currentThread()->setObjectName("performIntegration");

  QxrdIntegratorCachePtr cache = m_IntegratorCache;

  if (cache == NULL ||
      dimg->get_Width() != cache->get_NCols() ||
      dimg->get_Height() != cache->get_NRows()) {

    cache = QxrdIntegratorCachePtr(
          new QxrdIntegratorCache(m_Experiment, sharedFromThis(), m_CenterFinder));

    m_IntegratorCache = cache;
  }

  return cache->performIntegration(integ, dimg, mask, true);
}
Пример #7
0
QcepDoubleImageDataPtr QxrdCenterFinder::newData()
{
  int wd, ht;

  if (m_Data) {
    wd = m_Data->get_Width();
    ht = m_Data->get_Height();
  } else {
    wd = 2048;
    ht = 2048;
  }

  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QxrdDataProcessorPtr proc(expt->dataProcessor());

    if (proc) {
      QcepDoubleImageDataPtr res = proc->takeNextFreeImage(wd,ht);

      return res;
    }
  }

  return QcepDoubleImageDataPtr();
}
Пример #8
0
/* A^pという行列のべき乗計算 */
Matrix2x2 expt(Matrix2x2 A, ll p) {
    if (p == 0) {
        Matrix2x2 I;
        I.a = 1; I.b = 0; I.c = 0; I.d = 1;
        return I;
    }
    if (p == 1) {
        return A;
    } else if (p % 2) {
        Matrix2x2 T = expt(A, p-1);
        return mult(A, T);
    } else {
        Matrix2x2 T = expt(A, p/2);
        return mult(T, T);
    }
}
Пример #9
0
int main(int argc, char** argv)
{
	CppUnit::TestSuite suite;

	ExpTest	 expt("ExpTest");
	ProgTest progt("ProgTest");
	ProcTest proct("ProcTest");
	RtlTest rtlt("RtlTest");
	ParserTest parsert("ParserTest");
	TypeTest typet("TypeTest");

	expt.registerTests(&suite);
	progt.registerTests(&suite);
	proct.registerTests(&suite);
	rtlt.registerTests(&suite);
	parsert.registerTests(&suite);
	typet.registerTests(&suite);

	CppUnit::TextTestResult res;

	suite.run( &res );
	std::cout << res << std::endl;

	return 0;
}
Пример #10
0
QcepIntegratedDataPtr QxrdIntegrator::slicePolygon(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr image, QVector<QPointF> poly, double /*width*/)
{
  QThread::currentThread()->setObjectName("slicePolygon");

  if (integ && image) {
    double length = 0;

    if (poly.size() >= 2) {
      QPointF p0 = poly[0];

      for (int i=1; i<poly.size(); i++) {
        QPointF p1 = poly[i];
        double dx = p1.x() - p0.x();
        double dy = p1.y() - p0.y();
        length += sqrt(dx*dx + dy*dy);
        p0=p1;
      }

      p0 = poly[0];
      double r = 0;
      double r0 = 0;

      //    QVector<double> xs,ys;
      integ -> resize(0);

      for (int i=1; i<poly.size(); i++) {
        QPointF p1 = poly[i];
        double dx = p1.x() - p0.x();
        double dy = p1.y() - p0.y();
        double len = sqrt(dx*dx + dy*dy);

        if (len > 0) {
          for (; r<len; r+=1) {
            double x = p0.x() + r*dx/len;
            double y = p0.y() + r*dy/len;

            integ -> append(r+r0, image->value((int) x, (int) y));
          }
        }

        p0 = p1;
        r0 += len;
        r  -= len;
      }
      //
      //    emit newIntegrationAvailable(image->get_Title(),xs,ys);
    }
  } else {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      expt->printMessage("QxrdIntegrator::slicePolygon failed");
    }
  }

  return integ;
}
Пример #11
0
QxrdDataProcessorWPtr QxrdIntegrator::dataProcessor() const
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    return expt->dataProcessor();
  } else {
    return QxrdDataProcessorWPtr();
  }
}
Пример #12
0
void QxrdIntegrator::onIntegrationParametersChanged()
{
  if (qcepDebug(DEBUG_INTEGRATOR)) {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      expt->printMessage("Integration parameters changed");
    }
  }

  m_IntegratorCache = QxrdIntegratorCachePtr();
}
Пример #13
0
void QxrdScriptEditWidget::executeSelectedText()
{
  QString sel = textCursor().selectedText();

  if (sel.length() == 0) {
    sel = this->toPlainText();
  }

  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    expt->executeCommand(sel);
  }
}
Пример #14
0
BOOLEAN rabin_miller(unsigned long int number, short witness) {

	int i, k;
	int q = number - 1;
	int result;
	BOOLEAN prime = FALSE;

	/* Shift q right and increment k while q is even
	   At the end k and q will be such that number - 1 = q*(2^k)
	 */
	for (k = 0; !(q & 1); k++, q >>= 1) ;

	for (i = 0, result = expt(witness, q, number);
	     i < k && !prime;
	     i++, result = expt(result, 2, number)) {

		prime = (result == number - 1) || (result == 1 && i == 0);

	}

	/* Return true if witness considers the number prime */
	return prime;

}
Пример #15
0
void QxrdIntegrator::saveAccumulator(QString resPath, QString &fileName, QString filter)
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QcepDatasetModelPtr ds = expt->dataset();

    if (ds) {
      QcepDoubleImageDataPtr data = ds->image(resPath);

      if (data) {
        data -> saveData(fileName, filter);
      }
    }
  }
}
Пример #16
0
QxrdDetectorThread::~QxrdDetectorThread()
{
  if (qcepDebug(DEBUG_APP)) {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      expt->printMessage("QxrdDetectorThread::~QxrdDetectorThread");
    }
  }

  shutdown();

  if (qcepDebug(DEBUG_CONSTRUCTORS)) {
    printf("QxrdDetectorThread::~QxrdDetectorThread(%p)\n", this);
  }
}
Пример #17
0
void QxrdIntegrator::prepareAccumulator(QString resPath, int nImages)
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QcepDatasetModelPtr ds = expt->dataset();

    if (ds) {
      QcepDoubleImageDataPtr data = ds->image(resPath);

      if (!data) {
        data = ds->newImage(resPath);
      }
    }
  }
}
Пример #18
0
QcepIntegratedDataPtr QxrdIntegrator::sliceLine(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr image, double x0, double y0, double x1, double y1, double width)
{
  try {
    QVector<QPointF> poly;
    poly.append(QPointF(x0,y0));
    poly.append(QPointF(x1,y1));

    return slicePolygon(integ, image, poly, width);
  }

  catch (...) {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      expt->printMessage("QxrdIntegrator::sliceLine failed");
    }
  }

  return QcepIntegratedDataPtr();
}
Пример #19
0
void QxrdIntegrator::appendIntegration(QString resPath, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask)
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QcepDatasetModelPtr ds = expt->dataset();

    if (ds) {
      QcepDoubleImageDataPtr data = ds->image(resPath);

      if (!data) {
        data = ds->newImage(resPath);
      }

      if (data) {
        appendIntegration(data, dimg, mask);
      }
    }
  }
}
Пример #20
0
void QxrdIntegrator::clearAccumulator(QString resPath)
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QcepDatasetModelPtr ds = expt->dataset();

    if (ds) {
      QcepDoubleImageDataPtr data = ds->image(resPath);

      if (!data) {
        data = ds->newImage(resPath);
      }

      if (data) {
        data->resize(0, 0);
      }
    }
  }
}
Пример #21
0
void QxrdIntegrator::appendIntegration(QString resPath, QcepIntegratedDataPtr integ)
{
  QxrdExperimentPtr expt(m_Experiment);

  if (expt) {
    QcepDatasetModelPtr ds = expt->dataset();

    if (ds) {
      QcepDoubleImageDataPtr data = ds->image(resPath);

      if (!data) {
        data = ds->newImage(resPath);
      }

      if (data) {
        appendIntegration(data, integ);
      } else {
        printMessage(tr("Unable to accumulate integrated data into %1").arg(resPath));
      }
    }
  }
}
Пример #22
0
void QxrdDetectorThread::run()
{
  QxrdDetectorPtr p;

  {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt && qcepDebug(DEBUG_THREADS)) {
      expt->printMessage("Starting Detector Thread");
    }

    if (qcepDebug(DEBUG_THREADS)) {
      printf("Starting Detector Thread\n");

    }
    if (expt) {
      switch(expt->get_DetectorType()) {
      case SimulatedDetector:
        setObjectName("simulatedDetector");
        p = QxrdDetectorPtr(new QxrdDetectorSimulated(m_Experiment, m_Acquisition));
        break;

#ifdef HAVE_PERKIN_ELMER
      case PerkinElmerDetector:
        setObjectName("perkinElmerDetector");
        p = QxrdDetectorPtr(new QxrdDetectorPerkinElmer(m_Experiment, m_Acquisition));
        break;
#endif

#ifdef HAVE_PILATUS
      case PilatusDetector:
        setObjectName("pilatusDetector");
        p = QxrdDetectorPtr(new QxrdDetectorPilatus(m_Experiment, m_Acquisition));
        break;
#endif

#ifdef HAVE_AREADETECTOR
      case EpicsAreaDetector:
        setObjectName("epicsAreaDetector");
        p = QxrdDetectorPtr(new QxrdDetectorEpicsArea(m_Experiment, m_Acquisition));
        break;
#endif

      case FileWatcherDetector:
        setObjectName("fileWatcherDetector");
        p = QxrdDetectorPtr(new QxrdDetectorFileWatcher(m_Experiment, m_Acquisition));
        break;
      }
    }
  }

  if (p == NULL) {
    p = QxrdDetectorPtr(new QxrdDetectorSimulated(m_Experiment, m_Acquisition));
  }

  int rc = -1;

  if (p) {
    p -> initialize();

    m_Mutex.lock();
    m_Detector = p;
    m_Mutex.unlock();

    rc = exec();
  }

  {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt && qcepDebug(DEBUG_THREADS)) {
      expt->printMessage(tr("Detector Thread Terminated with rc %1").arg(rc));
    }

    if (qcepDebug(DEBUG_THREADS)) {
      printf("Detector Thread Terminated with rc %d\n", rc);
    }
  }
}
//
//  Find a root of a complex polynomial by Laguerre iteration.
//
//  The polynomial is                                    Poly
//  The order is                                         Maxpow
//
//  The precision:                                       Digit
cln::cl_N HighPrecisionComplexPolynom::Lasolv(cln::cl_N* Poly, int Maxpow, cln::cl_N root, int itemax) {
   int  pow, ite;
   
   root = complex(ZERO,ZERO);
   
   cln::cl_F angl, small = As(cln::cl_F)(expt(cln::cl_float(0.1,clnDIGIT),DIGIT/2));

   cln::cl_N dif1[Maxpow], dif2[Maxpow-1];
   cln::cl_N val0, val, val1, val2, denp, denm, las1, las2, sqrv;
   //   cln::cl_N root;
    for(pow = 0; pow < Maxpow; pow++)
    dif1[pow] = (pow+1)*Poly[pow+1];

    for(pow = 0; pow < Maxpow-1; pow++)
    dif2[pow] = (pow+1)*dif1[pow+1];

// The maximal allowed number of iterations is set here;
// this can be chosen larger, but 100 usually suffices

//   root = As(cln::cl_N)(complex(ZERO,ZERO));
   val0 = EvalPoly(Poly,Maxpow,root);

// Iteration

    for(ite = 0; ite < itemax; ite++)
     { 
       val = val0;
       val1 = EvalPoly(dif1,Maxpow-1,root);
       val2 = EvalPoly(dif2,Maxpow-2,root);

       sqrv = (Maxpow-1)*((Maxpow-1)*val1*val1-Maxpow*val0*val2);
       angl = HALF*cln::cl_float(phase(sqrv),clnDIGIT);
       sqrv = sqrt(abs(sqrv))*complex(cos(angl),sin(angl));
       denp = val1+sqrv;
       denm = val1-sqrv;

        if(denp == complex(ZERO,ZERO))
        root = root-Maxpow*val0/denm;

        else
         {  if(denm == complex(ZERO,ZERO))
            root = root-Maxpow*val0/denp;

            else
             { las1 = -Maxpow*val0/denp;
               las2 = -Maxpow*val0/denm;

                if(realpart(las1*conjugate(las1)) <
                   realpart(las2*conjugate(las2)))
                root = root+las1;

                else
                root = root+las2; } }

//  Look whether the root is good enough

       val0 = EvalPoly(Poly,Maxpow,root);

        if(abs(val0) == ZERO || (abs(val0) < small) && abs(val0/val) > 0.7) {
            if(LogLevel>4) { 
	       printf("Laguerre iterations: %d\n", ite);
               printf("root = %f +i* %f\n", double_approx(realpart(root)), double_approx(imagpart(root)));
               printf("value at root: %f +i* %f\n", double_approx(realpart(val0)), double_approx(imagpart(val0))); 
	    }

           break; 
	} 
    }

    if(ite >= itemax) {
      printf("Laguerre iteration did not converge\n");
      exit(5);
    }

   return root;

}
Пример #24
0
void QxrdHistogramDialog::recalculateHistogram()
{
  QxrdHistogramDialogSettingsPtr set(m_HistogramDialogSettings);

  if (set && m_Image) {
    QxrdExperimentPtr expt(m_Experiment);

    if (expt) {
      QTime tic;
      tic.start();

      QRectF rect = set->get_HistogramRect();

      int nsum = m_Image->get_SummedExposures();

      if (nsum < 1) {
        nsum = 1;
      }

      QxrdAcquisitionPtr acq(expt->acquisition());

      double satlev = 60000;

      if (acq) {
        satlev = acq->get_OverflowLevel();
      }

      double min = 0, max = satlev*nsum;

      const int nbins=1000;

      QcepDoubleVector x0(nbins), h0(nbins), h1(nbins);

      for (int i=0; i<nbins; i++) {
//        double x = min+i*(max-min)/1000.0;
        x0[i] = i*100.0/(double)nbins;
        h0[i] = 0;
        h1[i] = 0;
      }

      int width = m_Image->get_Width();
      int height= m_Image->get_Height();

      double *data = m_Image->data();

      for (int i=0; i<width; i++) {
        for (int j=0; j<height; j++) {
          double v = *data++;

          int n;

          if (v<min) {
            n=0;
          } else if (v>max) {
            n=nbins-1;
          } else {
            n=(nbins-1)*(v-min)/(max-min);
          }

          if (n<0) {
            n=0;
          }

          if (n>=nbins) {
            n=nbins-1;
          }

          h0[n]++;

          if (rect.contains(i,j)) {
            h1[n]++;
          }
        }
      }

      m_HistogramPlot->detachItems();

      QwtPlotPiecewiseCurve *pc0 = new QwtPlotPiecewiseCurve(m_HistogramPlot, "Entire Image");

      pc0->setSamples(x0, h0);
      pc0->setPen(QPen(Qt::red));

      pc0->attach(m_HistogramPlot);

      QwtPlotPiecewiseCurve *pc1 = new QwtPlotPiecewiseCurve(m_HistogramPlot,
                                                             tr("[%1,%2]-[%3,%4]")
                                                             .arg(rect.left()).arg(rect.bottom())
                                                             .arg(rect.right()).arg(rect.top()));

      pc1->setSamples(x0, h1);
      pc1->setPen(QPen(Qt::darkRed));

      pc1->attach(m_HistogramPlot);

      m_HistogramPlot->replot();

      if (qcepDebug(DEBUG_HISTOGRAM)) {
        expt -> printMessage(tr("Histogram of data took %1 msec").arg(tic.elapsed()));
      }
    }
  }
}