Exemplo n.º 1
0
	void RunTestFile(const char *file, bool trace = false)
	{
		// TODO!
		return;

		Runtime runtime;
		try
		{
			runtime.compiler->PrintTree = runtime.New(trace);
			long long start = timer.GetTime();
			Pointer<Continuation> continuation = runtime.CompileFile(file);
			long long end = timer.GetTime();
			long long compile_delta_millis = end - start;
			//OM_TRACE_2(0, file, compile_delta_millis);
			ASSERT_TRUE(continuation);
			runtime.executor->EnableTrace(trace);
			start = timer.GetTime();
			runtime.Continue(continuation);
			end = timer.GetTime();
			long long run_delta_millis = end - start;
			//OM_TRACE_2(0, file, run_delta_millis);
		}
		catch (ExceptionBase &e)
		{
			FileLocation file_location = runtime.executor->GetLastFileLocation();
			file_location.file = file;
			OM_TRACE(0) << e << endl << file_location;// << endl << outdent;
			//ASSERT_TRUE(false);
		}
	}
Exemplo n.º 2
0
// QueryExpression
QueryExpression::QueryExpression(const std::string &query, XmlQueryContext &context, Transaction *txn, bool debug)
	: query_(query),
	  context_(context),
	  qec_(context_, /*debugging*/false),
	  conf_(context, txn, &ci_),
	  xqContext_(XQilla::createContext(XQilla::XQUERY_UPDATE, &conf_, Globals::defaultMemoryManager)),
	  expr_(0)
{
	((Manager &)((QueryContext &)getContext()).getManager())
		.log(Log::C_OPTIMIZER, Log::L_INFO, "Started parse");

	HighResTimer t;
	t.start();

	conf_.setMinder(&minder_);
	conf_.setQueryExecutionContext(&qec_);
	conf_.setProjectionInfo(&pi_);

	try {
		((QueryContext&)context_).startQuery();
		expr_ = XQilla::parse(UTF8ToXMLCh(getQuery()).str(), xqContext_, 0,
			XQilla::NO_STATIC_RESOLUTION | XQilla::NO_ADOPT_CONTEXT);

		ScopedPtr<Optimizer> optimizer(createOptimizer(xqContext_, minder_, debug));
		optimizer->startOptimize(expr_);
	}
	catch(const QueryInterruptedException &) {
		delete expr_;
		throw XmlException(XmlException::OPERATION_INTERRUPTED,
			"Query was interrupted by the application");
	}
	catch(const QueryTimeoutException &) {
		delete expr_;
		throw XmlException(XmlException::OPERATION_TIMEOUT,
			"Query timed out");
	}
	catch(const XQException &e) {
		delete expr_;
		throw XmlException(XmlException::QUERY_PARSER_ERROR, e);
	}
	catch(...) {
		delete expr_;
		throw;
	}
	t.stop();

	if(Log::isLogEnabled(Log::C_OPTIMIZER, Log::L_INFO)) {
		ostringstream s;
		s << "Finished parse, time taken = " << (t.durationInSeconds() * 1000) << "ms";
		((Manager &)((QueryContext &)getContext()).getManager())
			.log(Log::C_OPTIMIZER, Log::L_INFO, s);
	}
}
Exemplo n.º 3
0
/** \brief this function implements the acquisition thread */
static void *acquisitionThreadFunc(void* val) {
    std::string basename=*(static_cast<std::string*>(val));
	// write basename.txt file
	FILE* ftxt=fopen(std::string(basename+".txt").c_str(), "w");
	if (ftxt) {
	    fprintf(ftxt, "example_image_server.cpp demo acquisition");
		fclose(ftxt);
	}
	// start basename.tif file for acquired frames
	uint16_t* frame=(uint16_t*)malloc(img_width*img_height*sizeof(uint16_t));
	TinyTIFFFile* tif=TinyTIFFWriter_open(std::string(basename+".tif").c_str(), 16, img_width, img_height);	
	maxWriteFrames=floor(acquisition_duration/exposure);
    framesCompleted=0;
    if (tif) {
		HighResTimer timer;
		timer.start();
		double seconds=timer.get_time()/1e6;
		double lastt=seconds;
		// perform acquisition
		bool canceled=!cam_acquisition_running;
		while (seconds<acquisition_duration && !canceled) {			
			seconds = timer.get_time()/1e6;
			if (fabs(seconds-lastt)>=exposure) {
				getNextFrame(framesCompleted, frame, img_width, img_height);
				TinyTIFFWriter_writeImage(tif, frame);
				pthread_mutex_lock(&mutexframesCompleted);
				// count acquired frames
				framesCompleted++;
				// cancel ancquisition, when cam_acquisition_running is reset
				if (!cam_acquisition_running) canceled=true;				
				pthread_mutex_unlock(&mutexframesCompleted);
				lastt=seconds;
				printf("*** acquired frame %d/%d @ %fs ***", framesCompleted, maxWriteFrames, float(seconds));
			}
	    }     
	    TinyTIFFWriter_close(tif);
    }
    free(frame);
	pthread_mutex_lock(&mutexframesCompleted);
    cam_acquisition_running=false;
	pthread_mutex_unlock(&mutexframesCompleted);
    return NULL;
}
Exemplo n.º 4
0
void Server::beginServer ()
{
  if (_log) _log->write ("Server starting");

  if (_daemon)
  {
    daemonize ();  // Only the child returns.
    writePidFile ();
  }

  signal (SIGHUP,  signal_handler);  // Graceful stop
  signal (SIGUSR1, signal_handler);  // Config reload
  signal (SIGUSR2, signal_handler);

  TLSServer server;
  if (_config)
  {
    server.debug (_config->getInteger ("debug.tls"));

    std::string ciphers = _config->get ("ciphers");
    if (ciphers != "")
    {
      server.ciphers (ciphers);
      if (_log) _log->format ("Using ciphers: %s", ciphers.c_str ());
    }

    std::string trust = _config->get ("trust");
    if (trust == "allow all")
      server.trust (TLSServer::allow_all);
    else if (trust == "strict")
      server.trust (TLSServer::strict);
    else if (_log)
      _log->format ("Invalid 'trust' setting value of '%s'", trust.c_str ());
  }

  server.init (_ca_file,        // CA
               _crl_file,       // CRL
               _cert_file,      // Cert
               _key_file);      // Key
  server.queue (_queue_size);
  server.bind (_host, _port, _family);
  server.listen ();

  if (_log) _log->write ("Server ready");

  _request_count = 0;
  while (1)
  {
    try
    {
      TLSTransaction tx;
      tx.trust (server.trust ());
      server.accept (tx);

      if (_sighup)
        throw "SIGHUP shutdown.";

      // Get client address and port, for logging.
      if (_log_clients)
        tx.getClient (_client_address, _client_port);

      // Metrics.
      HighResTimer timer;
      timer.start ();

      std::string input;
      tx.recv (input);

      // Handle the request.
      ++_request_count;

      // Call the derived class handler.
      std::string output;
      handler (input, output);
      if (output.length ())
        tx.send (output);

      if (_log)
      {
        timer.stop ();
        _log->format ("[%d] Serviced in %.6fs", _request_count, timer.total ());
      }
    }

    catch (std::string& e) { if (_log) _log->write (std::string ("Error: ") + e); }
    catch (char* e)        { if (_log) _log->write (std::string ("Error: ") + e); }
    catch (...)            { if (_log) _log->write ("Error: Unknown exception"); }
  }
}
Exemplo n.º 5
0
Set<OERegion, RealDescriptor> computeSIFT(const Image<float>& image)
{
  // Time everything.
  HighResTimer timer;
  double elapsed = 0.;
  double DoGDetTime, oriAssignTime, siftCompTime, gradGaussianTime;

  // We describe the work flow of the feature detection and description.
  Set<OERegion, RealDescriptor> keys;
  vector<OERegion>& DoGs = keys.features;
  DescriptorMatrix<float>& SIFTs = keys.descriptors;

  // 1. Feature extraction.
  printStage("Computing DoG extrema");
  timer.restart();
  ImagePyramidParams pyrParams(0);
  ComputeDoGExtrema computeDoGs(pyrParams);
  vector<Point2i> scaleOctPairs;
  DoGs = computeDoGs(image, &scaleOctPairs);
  DoGDetTime = timer.elapsedMs();
  elapsed += DoGDetTime;
  cout << "DoG detection time = " << DoGDetTime << " ms" << endl;
  cout << "DoGs.size() = " << DoGs.size() << endl;

  // 2. Feature orientation.
  // Prepare the computation of gradients on gaussians.
  printStage("Computing gradients of Gaussians");
  timer.restart();
  ImagePyramid<Vector2f> gradG;
  const ImagePyramid<float>& gaussPyr = computeDoGs.gaussians();
  gradG = gradPolar(gaussPyr);
  gradGaussianTime = timer.elapsedMs();
  elapsed += gradGaussianTime;
  cout << "gradient of Gaussian computation time = " << gradGaussianTime << " ms" << endl;
  cout << "DoGs.size() = " << DoGs.size() << endl;


  // Find dominant gradient orientations.
  printStage("Assigning (possibly multiple) dominant orientations to DoG extrema");
  timer.restart();
  ComputeDominantOrientations assignOrientations;
  assignOrientations(gradG, DoGs, scaleOctPairs);
  oriAssignTime = timer.elapsedMs();
  elapsed += oriAssignTime;
  cout << "orientation assignment time = " << oriAssignTime << " ms" << endl;
  cout << "DoGs.size() = " << DoGs.size() << endl;


  // 3. Feature description.
  printStage("Describe DoG extrema with SIFT descriptors");
  timer.restart();
  ComputeSIFTDescriptor<> computeSIFT;
  SIFTs = computeSIFT(DoGs, scaleOctPairs, gradG);
  siftCompTime = timer.elapsedMs();
  elapsed += siftCompTime;
  cout << "description time = " << siftCompTime << " ms" << endl;
  cout << "sifts.size() = " << SIFTs.size() << endl;


  // 4. Rescale  the feature position and scale $(x,y,\sigma)$ with the octave
  //    scale.
  for (size_t i = 0; i != DoGs.size(); ++i)
  {
    float octScaleFact = gradG.octaveScalingFactor(scaleOctPairs[i](1));
    DoGs[i].center() *= octScaleFact;
    DoGs[i].shapeMat() /= pow(octScaleFact, 2);
  }

  removeRedundancies(keys.features, keys.descriptors);

  return keys;
}
Exemplo n.º 6
0
int main() {

    HighResTimer timer;
    DATATYPE period=151;
    long Nflush=0;
    long Nsim=100000;
    long N=Nsim+Nflush;
    DATATYPE A=1e-5;

    int S=10;
    int m=2;
    int P=16;

    MTRand rand1;
    MTRand rand_p0(12345);
    MTRand rand_p1(98765);

    int randprocess_period=N/100;

    for (int mode=0; mode<7; mode++) {
        DATATYPE* timetrace=new DATATYPE [N];
        DATATYPE* timetrace2=new DATATYPE [N];

        MultiTauCorrelator<DATATYPE, DATATYPE> corr(S,m,P,1);
        correlatorjb<DATATYPE, DATATYPE> corrjb(S, P);

        MultiTauCorrelator<DATATYPE, DATATYPE> ccorr(S,m,P,1);
        correlatorjb<DATATYPE, DATATYPE> ccorrjb(S, P);

        long* taus=(long*)malloc(S*P*sizeof(long));
        statisticsAutocorrelateCreateMultiTau(taus, S, m, P);
        double* acf=(double*)malloc(S*P*sizeof(double));
        double* ccf=(double*)malloc(S*P*sizeof(double));

        if (mode==0) {
            printf("\n\n======================================================================================\nTEST 1: SINE/COSINE ==================================================================\n======================================================================================\n");
            for (long i=0; i<N; i++) {
                DATATYPE t=(DATATYPE)i*M_PI/period;
                DATATYPE v=(1.0+sin(t))*A;
                DATATYPE v2=(1.0+cos(t))*A;

                if (i>=Nsim) v=v2=0;
                timetrace[i]=v;
                timetrace2[i]=v2;



            }
        } else if (mode>0 && mode<7) {
            int randprocess_period=pow(10,mode-1);
            printf("\n\n======================================================================================\nTEST 2: DECAYING CORRELATION ==================================================================\n======================================================================================\n");
            DATATYPE p0=0;
            for (long i=0; i<N; i++) {
                DATATYPE t=(DATATYPE)i*M_PI/period;

                DATATYPE v=p0+2.0*rand1.rand()-1.0;
                DATATYPE v2=p0+2.0*rand1.rand()-1.0;
                if (i>=Nsim) v=v2=0;


                timetrace[i]=v;
                timetrace2[i]=v2;

                if (i%randprocess_period==0) {
                    p0=rand_p0.randNorm(5, 2);
                }


            }
        }




        printf("\n\nSIMPLE: ==================================================================\n");
        timer.start();
        statisticsAutocorrelateMultiTauSymmetric(acf, timetrace, N, taus, S*P);
        printf("  ACF: %lf ms\n", timer.get_time()/1e3);
        FILE* pFile = fopen(format("%dacorr_simple.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<S*P; i++) {
                if (mode==0) {
                    DATATYPE e=acf[i]-1.0-0.5*cos(taus[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)taus[i], (double)acf[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)taus[i], (double)acf[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }

        timer.start();
        statisticsCrosscorrelateMultiTauSymmetric(ccf, timetrace2, timetrace, N, taus, S*P);
        printf("  CCF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dccorr_simple.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<S*P; i++) {
                if (mode==0) {
                    DATATYPE e=ccf[i]-1.0+0.5*sin(taus[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)taus[i], (double)ccf[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)taus[i], (double)ccf[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }



        printf("\n\nSIMPLE AVG: ==============================================================\n");
        timer.start();
        statisticsAutocorrelateMultiTauAvgSymmetric<DATATYPE, DATATYPE>(acf, timetrace, N, S, m, P);
        printf("  ACF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dacorr_simpleavg.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<S*P; i++) {
                if (mode==0) {
                    DATATYPE e=acf[i]-1.0-0.5*cos(taus[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)taus[i], (double)acf[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)taus[i], (double)acf[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }

        timer.start();
        statisticsCrosscorrelateMultiTauAvgSymmetric<DATATYPE, DATATYPE>(ccf, timetrace2, timetrace, N, S, m, P);
        printf("  CCF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dccorr_simpleavg.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<S*P; i++) {
                if (mode==0) {
                    double e=ccf[i]-1.0+0.5*sin(taus[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)taus[i], (double)ccf[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)taus[i], (double)ccf[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }

        printf("\n\nJK: ======================================================================\n");
        timer.start();
        for (long i=0; i<N; i++) {
            const DATATYPE v=timetrace[i];
            const DATATYPE v2=timetrace2[i];
            corr.correlate_step(v);
        }
        corr.normalize();
        double* tau=corr.getCorTau();
        double* c=corr.getCor();
        unsigned int cN=corr.getSlots();
        printf("  ACF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dacorr_jk.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<cN; i++) {
                if (mode==0) {
                    double e=c[i]-1.0-0.5*cos(tau[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)tau[i], (double)c[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)tau[i], (double)c[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }

        timer.start();
        for (long i=0; i<N; i++) {
            const DATATYPE v=timetrace[i];
            const DATATYPE v2=timetrace2[i];
            ccorr.crosscorrelate_step(v,v2);
        }
        ccorr.crossnormalize();
        tau=ccorr.getCorTau();
        c=ccorr.getCor();
        cN=ccorr.getSlots();
        printf("  CCF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dccorr_jk.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            for (unsigned int i=0; i<cN; i++) {
                if (mode==0) {
                    double e=c[i]-1.0+0.5*sin(tau[i]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)tau[i], (double)c[i], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)tau[i], (double)c[i]);
                }
            }
            fprintf(pFile, "\n\n");
            fclose (pFile);
        }


        printf("\n\nJB: ======================================================================\n");
        timer.start();
        for (long i=0; i<N; i++) {
            const DATATYPE v=timetrace[i];
            const DATATYPE v2=timetrace2[i];
                corrjb.run(v,v);
        }
        printf("  ACF: %lf ms\n", timer.get_time()/1e3);


        pFile = fopen(format("%dacorr_jb.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            DATATYPE** corr1=corrjb.get_array_G();
            for (int j=0; j<S*P; j++) {
                if (mode==0) {
                    DATATYPE e=corr1[1][j]-1.0-0.5*cos(corr1[0][j]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", corr1[0][j], corr1[1][j], e, fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", corr1[0][j], corr1[1][j]);
                }
            }
            fprintf(pFile, "\n\n");
            free(corr1[0]);
            free(corr1[1]);
            fclose (pFile);
        }

        timer.start();
        for (long i=0; i<N; i++) {
            const DATATYPE v=timetrace[i];
            const DATATYPE v2=timetrace2[i];
                ccorrjb.run(v2,v);
        }
        printf("  CCF: %lf ms\n", timer.get_time()/1e3);
        pFile = fopen(format("%dccorr_jb.txt", mode).c_str(),"w");
        if (pFile!=NULL) {
            DATATYPE** corr1=ccorrjb.get_array_G();
            for (int j=0; j<S*P; j++) {
                if (mode==0) {
                    DATATYPE e=corr1[1][j]-1.0+0.5*sin(corr1[0][j]*M_PI/period);
                    fprintf(pFile, "%lg, %lg, %lg, %lg\n", (double)corr1[0][j], (double)corr1[1][j], (double)e, (double)fabs(e));
                } else {
                    fprintf(pFile, "%lg, %lg\n", (double)corr1[0][j], (double)corr1[1][j]);
                }
            }
            fprintf(pFile, "\n\n");
            free(corr1[0]);
            free(corr1[1]);
            fclose (pFile);
        }



        printf("\n\nWRITING GNUPLOT FILE: ====================================================\n");
        pFile = fopen (format("%dcorr.plt", mode).c_str(),"w");
        if (pFile!=NULL) {
            if (mode==0) {
                for (int i=0; i<2; i++) {
                    if (i==0) {
                        fprintf(pFile, "set terminal pdfcairo color solid font \"Arial,12\" linewidth 2 size 20cm,20cm\n");
                        fprintf(pFile, "set output \"%dcorr.pdf\"\n", mode);
                    } else {
                        fprintf(pFile, "set terminal wxt\n");
                        fprintf(pFile, "set output \n");
                    }
                    fprintf(pFile, "set multiplot layout 3,1 title \"Autocorrelation\"\n");
                    fprintf(pFile, "set logscale x\n");
                    fprintf(pFile, "set samples 10000\n");
                    fprintf(pFile, "acf(x)=1.0+0.5*cos(x*pi/%lf)\n", period);
                    fprintf(pFile, "plot acf(x) title 'theoretical' with lines ls 1, \\\n");
                    fprintf(pFile, "     \"%dacorr_simple.txt\" title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_simpleavg.txt\" title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jk.txt\" title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jb.txt\" title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "plot \"%dacorr_simple.txt\" using 1:3 title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_simpleavg.txt\" using 1:3 title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jk.txt\" using 1:3 title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jb.txt\" using 1:3 title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "set logscale y\n");
                    fprintf(pFile, "plot \"%dacorr_simple.txt\" using 1:4 title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_simpleavg.txt\" using 1:4 title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jk.txt\" using 1:4 title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jb.txt\" using 1:4 title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "unset logscale y\n");
                    fprintf(pFile, "unset multiplot\n");
                    if (i==1) fprintf(pFile, "pause -1\n");

                    fprintf(pFile, "set multiplot layout 3,1 title \"Crosscorrelation\"\n");
                    fprintf(pFile, "set logscale x\n");
                    fprintf(pFile, "set samples 10000\n");
                    fprintf(pFile, "ccf(x)=1.0-0.5*sin(x*pi/%lf)\n", period);
                    fprintf(pFile, "plot ccf(x) title 'theoretical' with lines ls 1, \\\n");
                    fprintf(pFile, "     \"%dccorr_simple.txt\" title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_simpleavg.txt\" title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jk.txt\" title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jb.txt\" title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "plot \"%dccorr_simple.txt\" using 1:3 title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_simpleavg.txt\" using 1:3 title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jk.txt\" using 1:3 title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jb.txt\" using 1:3 title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "set logscale y\n");
                    fprintf(pFile, "plot \"%dccorr_simple.txt\" using 1:4 title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_simpleavg.txt\" using 1:4 title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jk.txt\" using 1:4 title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jb.txt\" using 1:4 title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "unset logscale y\n");
                    fprintf(pFile, "unset multiplot\n");
                    if (i==1) fprintf(pFile, "pause -1\n");
                }
                fclose (pFile);
            } else {
                for (int i=0; i<2; i++) {
                    if (i==0) {
                        fprintf(pFile, "set terminal pdfcairo color solid font \"Arial,12\" linewidth 2 size 20cm,20cm\n");
                        fprintf(pFile, "set output \"%dcorr.pdf\"\n", mode);
                    } else {
                        fprintf(pFile, "set terminal wxt\n");
                        fprintf(pFile, "set output \n");
                    }
                    fprintf(pFile, "set multiplot layout 1,1 title \"Autocorrelation\"\n");
                    fprintf(pFile, "set logscale x\n");
                    fprintf(pFile, "set samples 10000\n");
                    fprintf(pFile, "plot \"%dacorr_simple.txt\" title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_simpleavg.txt\" title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jk.txt\" title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dacorr_jb.txt\" title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "unset multiplot\n");
                    if (i==1) fprintf(pFile, "pause -1\n");

                    fprintf(pFile, "set multiplot layout 1,1 title \"Crosscorrelation\"\n");
                    fprintf(pFile, "set logscale x\n");
                    fprintf(pFile, "set samples 10000\n");
                    fprintf(pFile, "plot \"%dccorr_simple.txt\" title 'simple' with points ls 2, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_simpleavg.txt\" title 'simple, avg' with points ls 5, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jk.txt\" title 'jk' with points ls 3, \\\n", mode);
                    fprintf(pFile, "     \"%dccorr_jb.txt\" title 'jb' with points ls 4\n", mode);
                    fprintf(pFile, "unset multiplot\n");
                    if (i==1) fprintf(pFile, "pause -1\n");
                }
                fclose (pFile);
            }
        }
        std::string gnuplot="C:\\Programme\\gnuplot\\binary\\wgnuplot.exe";
        if (gnuplot.size()>0) {
            std::string f=format("%dcorr.plt", mode);
            std::cout<<"running gnuplot on '"<<f<<"' ... ";
            system((gnuplot+" "+f).c_str());
            std::cout<<"OK\n";
        }

        delete[] timetrace;
        delete[] timetrace2;
        free(taus);
        free(acf);
        free(ccf);
    }
    return 0;
}