Added simulate functions(Crusher.cc, Draw2D.cc) created by K.Berta and Gy.Balazs Minor fixes and optimisation on other modules
This commit is contained in:
parent
ae3084b1fd
commit
4d0b94e145
|
@ -15,17 +15,17 @@ public:
|
|||
BM1DProcess();
|
||||
~BM1DProcess();
|
||||
|
||||
void Run(int nSteps, int nRuns, double p0, double p1);
|
||||
void Run(int nSteps, int nRuns, double p0, double mu, double sigma);
|
||||
void Run(int nSteps, int nRuns, double p0, double x1, double x2, double mu1, double sigma1, double mu2, double sigma2);
|
||||
void Run(int nRuns, int nSteps, double p0, double x1, double x2, double mu1, double sigma1, double mu2, double sigma2, double j_mu1, double j_sigma1, double rat);
|
||||
void Run(const int & nRuns, const int & nSteps, const double & p0, const double & p1);
|
||||
void Run(const int & nRuns, const int & nSteps, const double & p0, const double & mu, const double & sigma);
|
||||
void Run(const int & nRuns, const int & nSteps, const double & p0, const double & x1, const double & x2, const double & mu1, const double & sigma1, const double &mu2, const double & sigma2);
|
||||
void Run(const int & nRuns, const int & nSteps, const double & p0, const double & x1, const double & x2, const double & mu1, const double & sigma1, const double &mu2, const double & sigma2, const double & j_mu1, const double & j_sigma1, const double & rat);
|
||||
|
||||
std::vector<Double_t> GetT(){return t;}
|
||||
std::vector<Double_t> GetX(){return x;}
|
||||
const std::vector<Double_t> & GetT(){return t;}
|
||||
const std::vector<Double_t> & GetX(){return x;}
|
||||
|
||||
private:
|
||||
TRandom* randomGenerator;
|
||||
TRandom* randomGeneratorGauss;
|
||||
TRandom3* randomGenerator;
|
||||
TRandom3* randomGeneratorGauss;
|
||||
//TF1* jump;
|
||||
Double_t rand1;
|
||||
std::vector<Double_t> t;
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef Crusher_h
|
||||
#define Crusher_h 1
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
#include "BM1DProcess.hh"
|
||||
#include "Analyse.hh"
|
||||
#include "Lattice.hh"
|
||||
|
||||
class Crusher
|
||||
{
|
||||
public:
|
||||
Crusher(std::vector<Double_t> tp, std::vector<Double_t> xp, double p0p);
|
||||
Crusher(std::vector<Double_t> tp, std::vector<Double_t> xp);
|
||||
~Crusher();
|
||||
|
||||
bool RunMachine(const int & nRunsm, const MuSigma & parameters);
|
||||
|
||||
const std::vector<Double_t> & GetMulT() {return multipleRunVectorT;}
|
||||
const std::vector<Double_t> & GetMulX() {return multipleRunVectorX;}
|
||||
|
||||
private:
|
||||
int nSteps;
|
||||
double p0;
|
||||
std::vector<Double_t> t;
|
||||
std::vector<Double_t> x;
|
||||
|
||||
BM1DProcess *myBM1DProcess;
|
||||
Analyse *myAnalyse;
|
||||
|
||||
bool Bigger(double percent);
|
||||
|
||||
std::vector<Double_t> multipleRunVectorT;
|
||||
std::vector<Double_t> multipleRunVectorX;
|
||||
};
|
||||
#endif
|
|
@ -0,0 +1,43 @@
|
|||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
|
||||
|
||||
#include "Analyse.hh"
|
||||
#include "Lattice.hh"
|
||||
#include "Crusher.hh"
|
||||
#include "Plotter.hh"
|
||||
|
||||
#include "TH2.h"
|
||||
#include "TCanvas.h"
|
||||
#include "TGraph.h"
|
||||
|
||||
class Draw2D
|
||||
{
|
||||
public:
|
||||
|
||||
Draw2D(int nop, double percent, int nRunsp, std::vector<Double_t> tp, std::vector<Double_t> xp);
|
||||
~Draw2D();
|
||||
|
||||
void Histo2D();
|
||||
|
||||
private:
|
||||
std::vector<Double_t> t;
|
||||
std::vector<Double_t> x;
|
||||
int nRuns;
|
||||
|
||||
Analyse *myAnalyse;
|
||||
Crusher *myCrusher;
|
||||
Lattice *myLattice;
|
||||
TCanvas* canvasB;
|
||||
TCanvas* canvasB2;
|
||||
TH2D *BM1D_histo;
|
||||
TH2D *BM1D_histo2;
|
||||
TGraph *gr;
|
||||
|
||||
|
||||
};
|
|
@ -1,5 +1,6 @@
|
|||
#ifndef Lattice_h
|
||||
#define LAttice_h 1
|
||||
//#ifndef Lattice_h
|
||||
//#define LAttice_h 1
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
@ -29,15 +30,20 @@ public:
|
|||
~Lattice();
|
||||
|
||||
void SetNop(Int_t num); //set the width of the lattice
|
||||
void SetPercent(Int_t num); //set the interval of mu, sigma
|
||||
void SetPercent(Double_t num); //set the interval of mu, sigma
|
||||
|
||||
void SetLattice(Double_t mu_est, Double_t sigma_est); //set the lattice around mu_est, sigma_est
|
||||
|
||||
MuSigma GetMuSigma(Int_t index);
|
||||
const MuSigma & GetMuSigma(Int_t index);
|
||||
|
||||
Int_t GetLatticeSize(); //number of points in the lattice
|
||||
Int_t GetWidth(); //number of mu values
|
||||
Int_t GetHeight(); //number of sigma values
|
||||
const Int_t & GetWidth(); //number of mu values
|
||||
const Int_t & GetHeight(); //number of sigma values
|
||||
|
||||
const double & GetMuMin();
|
||||
const double & GetMuMax();
|
||||
const double & GetSigmaMin();
|
||||
const double & GetSigmaMax();
|
||||
|
||||
|
||||
private:
|
||||
|
@ -66,4 +72,4 @@ private:
|
|||
|
||||
************************************************************************/
|
||||
|
||||
#endif
|
||||
//#endif
|
||||
|
|
|
@ -24,7 +24,7 @@ class Plotter
|
|||
public:
|
||||
Plotter(bool draw);
|
||||
~Plotter();
|
||||
void Plot(Int_t numRuns, Int_t nSteps, std::vector<Double_t> t, std::vector<Double_t> x);
|
||||
void Plot(Int_t numRuns, Int_t nSteps, const std::vector<Double_t> & t, const std::vector<Double_t> & x);
|
||||
TMultiGraph * GetTmultiGraph();
|
||||
|
||||
static unsigned int IDCounter;
|
||||
|
|
|
@ -2,10 +2,16 @@
|
|||
|
||||
Analyse::Analyse() : _p0(0), _mu(0), _sigma(0) {
|
||||
canvA = new TCanvas("cancA","display",800,400);
|
||||
dxhisto = new TH1D("dxhisto","dxhisto", 50, -5.0,5.0);
|
||||
//dxhisto = new TH1D("dxhisto","dxhisto", 50, -5.0,5.0);
|
||||
}
|
||||
|
||||
Analyse::~Analyse() {;}
|
||||
Analyse::~Analyse()
|
||||
{
|
||||
canvA->Clear();
|
||||
canvA->Closed();
|
||||
delete canvA;
|
||||
delete dxhisto;
|
||||
}
|
||||
|
||||
|
||||
Double_t Analyse::GetP0() {
|
||||
|
@ -96,5 +102,5 @@ void Analyse::AnalyseGaus(std::vector<Double_t> t, std::vector<Double_t> x){
|
|||
std::cout << "mu = " << _mu << std::endl;
|
||||
std::cout << "sigma = " << _sigma << std::endl;
|
||||
|
||||
|
||||
std::cout << "Analyse done" << std::endl;
|
||||
}
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
|
||||
BM1DProcess::BM1DProcess()
|
||||
{
|
||||
randomGenerator = new TRandom();
|
||||
randomGeneratorGauss = new TRandom();
|
||||
randomGenerator = new TRandom3();
|
||||
randomGenerator -> SetSeed();
|
||||
randomGeneratorGauss = new TRandom3();
|
||||
randomGeneratorGauss -> SetSeed();
|
||||
std::cout << "seed:" << randomGeneratorGauss -> GetSeed() << std::endl;
|
||||
|
||||
//jump = new TF1("jump","gaus(0)+gaus(3)",-30,30);
|
||||
}
|
||||
|
@ -16,7 +19,7 @@ BM1DProcess::~BM1DProcess()
|
|||
}
|
||||
|
||||
|
||||
void BM1DProcess::Run(int nRuns, int nSteps, double p0, double p1)
|
||||
void BM1DProcess::Run(const int & nRuns, const int & nSteps, const double & p0, const double & p1)
|
||||
{
|
||||
t.clear();
|
||||
x.clear();
|
||||
|
@ -54,8 +57,11 @@ void BM1DProcess::Run(int nRuns, int nSteps, double p0, double p1)
|
|||
}
|
||||
}
|
||||
|
||||
void BM1DProcess::Run(int nRuns, int nSteps, double p0, double mu, double sigma)
|
||||
|
||||
|
||||
void BM1DProcess::Run(const int & nRuns, const int & nSteps, const double & p0, const double & mu, const double & sigma)
|
||||
{
|
||||
|
||||
t.clear();
|
||||
x.clear();
|
||||
|
||||
|
@ -82,9 +88,11 @@ void BM1DProcess::Run(int nRuns, int nSteps, double p0, double mu, double sigma)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void BM1DProcess::Run(int nRuns, int nSteps, double p0, double x1, double x2, double mu1, double sigma1, double mu2, double sigma2)
|
||||
void BM1DProcess::Run(const int & nRuns, const int & nSteps, const double & p0, const double & x1, const double & x2, const double & mu1, const double & sigma1, const double &mu2, const double & sigma2)
|
||||
{
|
||||
t.clear();
|
||||
x.clear();
|
||||
|
@ -125,7 +133,7 @@ void BM1DProcess::Run(int nRuns, int nSteps, double p0, double x1, double x2, do
|
|||
}
|
||||
|
||||
|
||||
void BM1DProcess::Run(int nRuns, int nSteps, double p0, double x1, double x2, double mu1, double sigma1, double mu2, double sigma2, double j_mu1, double j_sigma1, double rat)
|
||||
void BM1DProcess::Run(const int & nRuns, const int & nSteps, const double & p0, const double & x1, const double & x2, const double & mu1, const double & sigma1, const double &mu2, const double & sigma2, const double & j_mu1, const double & j_sigma1, const double & rat)
|
||||
{
|
||||
t.clear();
|
||||
x.clear();
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
#include "Crusher.hh"
|
||||
|
||||
Crusher::Crusher(std::vector<Double_t> tp, std::vector<Double_t> xp, double p0p)
|
||||
{
|
||||
nSteps = tp.size();
|
||||
t = tp;
|
||||
x = xp;
|
||||
p0 = p0p;
|
||||
|
||||
myBM1DProcess = new BM1DProcess();
|
||||
|
||||
}
|
||||
|
||||
Crusher::Crusher(std::vector<Double_t> tp, std::vector<Double_t> xp)
|
||||
{
|
||||
nSteps = tp.size();
|
||||
t = tp;
|
||||
x = xp;
|
||||
p0 = 0.5;
|
||||
|
||||
myBM1DProcess = new BM1DProcess();
|
||||
}
|
||||
|
||||
Crusher::~Crusher()
|
||||
{
|
||||
delete myBM1DProcess;
|
||||
}
|
||||
|
||||
bool Crusher::Bigger(double percent)
|
||||
{
|
||||
int counterBig = 0;
|
||||
double limit = nSteps * percent;
|
||||
|
||||
for(int i = 0; i < nSteps; i++)
|
||||
{
|
||||
|
||||
if(myBM1DProcess -> GetX()[i] < x[i]) // reference < origin
|
||||
{
|
||||
counterBig ++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(counterBig >= limit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
else return false;
|
||||
}
|
||||
|
||||
bool Crusher::RunMachine(const int & nRuns, const MuSigma & parameters)
|
||||
{
|
||||
int counter = 0;
|
||||
|
||||
multipleRunVectorT.clear();
|
||||
multipleRunVectorX.clear();
|
||||
|
||||
for(int i = 0; i < nRuns; i++ )
|
||||
{
|
||||
|
||||
|
||||
myBM1DProcess->Run(1, nSteps, p0, parameters.mu, parameters.sigma);
|
||||
|
||||
//std::cout << "paramter mu:" << parameters.mu << " paramter sigma:" << parameters.sigma << std::endl;
|
||||
|
||||
for(int i = 0; i < nSteps; i++)
|
||||
{
|
||||
multipleRunVectorT.push_back(myBM1DProcess -> GetT()[i]);
|
||||
multipleRunVectorX.push_back(myBM1DProcess -> GetX()[i]);
|
||||
}
|
||||
|
||||
|
||||
if(Bigger(0.5))
|
||||
{
|
||||
counter ++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::cout <<"mu:" << parameters.mu << " sigma:" << parameters.sigma << " in:" << counter <<std::endl;
|
||||
|
||||
if(!(counter < (0.05 * nRuns) || (nRuns - counter) < (0.05 * nRuns)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
else return false;
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
#include "Draw2D.hh"
|
||||
|
||||
Draw2D::Draw2D(int nop, double percent, int nRunsp, std::vector<Double_t> tp, std::vector<Double_t> xp) //int nop, double percent, int nRunsp, std::vector<Double_t> tp, std::vector<Double_t> xp
|
||||
{
|
||||
t = tp;
|
||||
x = xp;
|
||||
nRuns = nRunsp;
|
||||
|
||||
|
||||
myAnalyse = new Analyse();
|
||||
myAnalyse -> AnalyseGaus(t,x);
|
||||
|
||||
myCrusher = new Crusher(t,x);
|
||||
|
||||
myLattice = new Lattice();
|
||||
|
||||
myLattice -> SetNop(nop);
|
||||
myLattice -> SetPercent(percent*100);
|
||||
myLattice -> SetLattice(myAnalyse -> GetMu(), myAnalyse -> GetSigma());
|
||||
|
||||
canvasB = new TCanvas("draw2Dcanv", "Lattice",800,400);
|
||||
canvasB -> Divide(2,1);
|
||||
|
||||
canvasB2 = new TCanvas("draw2Dcanv2", "Lattice2",800,400);
|
||||
|
||||
BM1D_histo = new TH2D("BM1D_histo", "BM1D_histo", myLattice -> GetWidth() , myLattice -> GetMuMin(), (myLattice -> GetMuMax()) , myLattice -> GetHeight() , myLattice -> GetSigmaMin(), (myLattice -> GetSigmaMax()) );
|
||||
BM1D_histo2 = new TH2D("BM1D_histo2", "BM1D_histo2", myLattice -> GetWidth() , myLattice -> GetMuMin(), (myLattice -> GetMuMax()) , myLattice -> GetHeight() , myLattice -> GetSigmaMin(), (myLattice -> GetSigmaMax()) );
|
||||
gr = new TGraph();
|
||||
|
||||
delete myAnalyse;
|
||||
}
|
||||
|
||||
Draw2D::~Draw2D()
|
||||
{
|
||||
canvasB->Clear();
|
||||
canvasB->Closed();
|
||||
delete canvasB;
|
||||
delete BM1D_histo;
|
||||
delete BM1D_histo2;
|
||||
|
||||
canvasB2->Clear();
|
||||
canvasB2->Closed();
|
||||
delete canvasB2;
|
||||
delete gr;
|
||||
|
||||
delete myLattice;
|
||||
delete myCrusher;
|
||||
}
|
||||
|
||||
void Draw2D::Histo2D()
|
||||
{
|
||||
double XbinSize = (myLattice -> GetMuMax() - myLattice -> GetMuMin())/ myLattice -> GetWidth() ;
|
||||
double YbinSize =( myLattice -> GetSigmaMax() - myLattice -> GetSigmaMin() ) / myLattice -> GetHeight();
|
||||
|
||||
double graphArrayX[myLattice -> GetLatticeSize()] = {};
|
||||
double graphArrayY[myLattice -> GetLatticeSize()] = {};
|
||||
|
||||
std::cout << "maxSigma:" << myLattice -> GetSigmaMax() << std::endl;
|
||||
std::cout << "maxMu:" << myLattice -> GetMuMax() << std::endl;
|
||||
std::cout << "minSigma:" << myLattice -> GetSigmaMin() << std::endl;
|
||||
std::cout << "minMu:" << myLattice -> GetMuMin() << std::endl;
|
||||
|
||||
for(int i = 0; i < (myLattice -> GetLatticeSize()); i++)
|
||||
{
|
||||
std::cout<<"progress: "<<i<<"/"<<myLattice -> GetLatticeSize()<<"point\n";
|
||||
|
||||
if(myCrusher -> RunMachine(nRuns, myLattice -> GetMuSigma(i)))
|
||||
{
|
||||
BM1D_histo -> Fill((i / myLattice -> GetHeight()) * XbinSize + (XbinSize/2) + myLattice -> GetMuMin(),(i % myLattice -> GetHeight()) * YbinSize + (YbinSize/2) + myLattice -> GetSigmaMin() );
|
||||
BM1D_histo2 -> Fill((i / myLattice -> GetHeight()) * XbinSize + (XbinSize/2) + myLattice -> GetMuMin(),(i % myLattice -> GetHeight()) * YbinSize + (YbinSize/2) + myLattice -> GetSigmaMin());
|
||||
|
||||
graphArrayX[i] = (i / myLattice -> GetHeight()) * XbinSize;
|
||||
graphArrayY[i] = (i % myLattice -> GetHeight()) * YbinSize;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
std::cout << "RunMachine done" << std::endl;
|
||||
|
||||
//TGraph *gr = new TGraph(myLattice -> GetLatticeSize(),graphArrayX,graphArrayY);
|
||||
|
||||
gr -> SetMarkerColor(46);
|
||||
canvasB2 -> cd();
|
||||
//gr -> LineStyle()
|
||||
gr -> DrawGraph(myLattice -> GetLatticeSize(),graphArrayX,graphArrayY,"AP*");
|
||||
|
||||
BM1D_histo -> SetMarkerStyle(kFullCircle);
|
||||
BM1D_histo-> SetMarkerStyle(21);
|
||||
canvasB -> cd(1);
|
||||
BM1D_histo -> Draw("PLC PMC");
|
||||
|
||||
canvasB -> cd(2);
|
||||
BM1D_histo2 -> Draw("COLZ");
|
||||
|
||||
std::cout << "Histo done" << std::endl;
|
||||
}
|
|
@ -12,17 +12,18 @@ void Lattice::SetNop(Int_t num){
|
|||
}
|
||||
|
||||
|
||||
void Lattice::SetPercent(Int_t num){
|
||||
void Lattice::SetPercent(Double_t num){
|
||||
|
||||
if((num > 1) && (num <= 100))
|
||||
_percent = num/100.0;
|
||||
|
||||
else
|
||||
else{
|
||||
_percent = num;
|
||||
std::cout << "Invalid value for percent, set to default" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MuSigma Lattice::GetMuSigma(Int_t index){
|
||||
const MuSigma & Lattice::GetMuSigma(Int_t index){
|
||||
|
||||
return ms_vect[index];
|
||||
|
||||
|
@ -34,18 +35,38 @@ Int_t Lattice::GetLatticeSize(){
|
|||
|
||||
}
|
||||
|
||||
Int_t Lattice::GetWidth(){
|
||||
const Int_t & Lattice::GetWidth(){
|
||||
|
||||
return _width;
|
||||
|
||||
}
|
||||
|
||||
Int_t Lattice::GetHeight(){
|
||||
const Int_t & Lattice::GetHeight(){
|
||||
|
||||
return _height;
|
||||
|
||||
}
|
||||
|
||||
const double & Lattice::GetMuMin()
|
||||
{
|
||||
return ms_vect[0].mu;
|
||||
}
|
||||
|
||||
const double & Lattice::GetMuMax()
|
||||
{
|
||||
return ms_vect[ _height * (_width-1)].mu;
|
||||
}
|
||||
|
||||
const double & Lattice::GetSigmaMin()
|
||||
{
|
||||
return ms_vect[0].sigma;
|
||||
}
|
||||
|
||||
const double & Lattice::GetSigmaMax()
|
||||
{
|
||||
return ms_vect[_height -1].sigma;
|
||||
}
|
||||
|
||||
void Lattice::SetLattice(Double_t mu_est, Double_t sigma_est){
|
||||
|
||||
Double_t loc_sigma, loc_mu;
|
||||
|
|
|
@ -26,7 +26,7 @@ TMultiGraph * Plotter::GetTmultiGraph()
|
|||
}
|
||||
|
||||
|
||||
void Plotter::Plot(Int_t numRuns, Int_t nSteps, std::vector<Double_t> t, std::vector<Double_t> x)
|
||||
void Plotter::Plot(Int_t numRuns, Int_t nSteps,const std::vector<Double_t> & t, const std::vector<Double_t> & x)
|
||||
{
|
||||
char str[30];
|
||||
snprintf(str, 30, "BM1D Plotter canvas%d", ID);
|
||||
|
@ -45,7 +45,10 @@ void Plotter::Plot(Int_t numRuns, Int_t nSteps, std::vector<Double_t> t, std::ve
|
|||
|
||||
if(draw)
|
||||
{
|
||||
canv -> cd();
|
||||
mg -> Draw("APL");
|
||||
std::cout << "Plotter done" << std::endl;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue