Version 1.4 - New structure
This commit is contained in:
parent
4adbdad44b
commit
fc790d0de7
77
BM1D.cc
77
BM1D.cc
|
@ -1,81 +1,20 @@
|
||||||
/// BM1D program. Date: 2017-10-29 Creators: Balázs Demeter, Balázs Ujvári, Dávid Baranyai
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "Progress.hh"
|
#include "BM1DProcess.hh"
|
||||||
|
#include "Plotter.hh"
|
||||||
#include "TApplication.h"
|
#include "TApplication.h"
|
||||||
#include "TGraph.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void OpenRootFile()
|
|
||||||
{
|
|
||||||
TFile *fIn = TFile::Open("Plot1.root", "READ");
|
|
||||||
fIn->ls();
|
|
||||||
TGraph *Ga;
|
|
||||||
TGraph *Gb;
|
|
||||||
fIn->GetObject("1", Ga);
|
|
||||||
fIn->GetObject("2", Gb);
|
|
||||||
Ga->Draw();
|
|
||||||
Gb->Draw("same");
|
|
||||||
delete fIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
Int_t n = 1000, p0 = 1, start = 0;
|
|
||||||
|
|
||||||
TApplication App("tapp", &argc, argv);
|
TApplication App("tapp", &argc, argv);
|
||||||
TCanvas* Canv = new TCanvas("c10","Live display",800,400);
|
Int_t n = 1000;
|
||||||
|
BM1DProcess *myBM1DProcess = new BM1DProcess(n);
|
||||||
if(argc==2)
|
myBM1DProcess->Init();
|
||||||
{
|
myBM1DProcess->Run();
|
||||||
OpenRootFile();
|
Plotter* myPlotter = new Plotter();
|
||||||
}
|
myPlotter->Plot(n, myBM1DProcess->GetT(), myBM1DProcess->GetX());
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
Progress* Pr1 = new Progress(n,p0,start);
|
|
||||||
Progress* Pr2 = new Progress(n,p0,start);
|
|
||||||
|
|
||||||
Pr1->Count('u');
|
|
||||||
Pr2->Count('g');
|
|
||||||
|
|
||||||
vector<Double_t> x1 = Pr1->GetX();
|
|
||||||
vector<Double_t> y1 = Pr1->GetY();
|
|
||||||
vector<Double_t> x2 = Pr2->GetX();
|
|
||||||
vector<Double_t> y2 = Pr2->GetY();
|
|
||||||
|
|
||||||
TGraph* G1 = new TGraph(n,&x1[0],&y1[0]);
|
|
||||||
TGraph* G2 = new TGraph(n,&x2[0],&y2[0]);
|
|
||||||
|
|
||||||
TFile* fOut = new TFile("Plot1.root", "RECREATE");
|
|
||||||
|
|
||||||
G1->SetLineColor(1);
|
|
||||||
G1->SetLineWidth(1);
|
|
||||||
G1->SetMarkerColor(1);
|
|
||||||
G1->SetMarkerStyle(0);
|
|
||||||
G1->SetTitle("Brownian Movement D=1");
|
|
||||||
G1->GetXaxis()->SetTitle("X");
|
|
||||||
G1->GetYaxis()->SetTitle("Time");
|
|
||||||
G2->SetLineColor(2);
|
|
||||||
G2->SetLineWidth(1);
|
|
||||||
G2->SetMarkerColor(2);
|
|
||||||
G2->SetMarkerStyle(0);
|
|
||||||
G2->SetTitle("Brownian Movement D=1");
|
|
||||||
G2->GetXaxis()->SetTitle("X");
|
|
||||||
G2->GetYaxis()->SetTitle("Time");
|
|
||||||
|
|
||||||
G1->Draw();
|
|
||||||
G2->Draw("same");
|
|
||||||
G1->Write("1");
|
|
||||||
G2->Write("2");
|
|
||||||
|
|
||||||
fOut->Close();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
App.Run();
|
App.Run();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,8 @@ If there's command line argument, then program opens the created root file. Name
|
||||||
|
|
||||||
## Updates
|
## Updates
|
||||||
|
|
||||||
|
* 2017/10/30 - 'v1.4' - New Structure
|
||||||
|
|
||||||
* 2017/10/29 - 'v1.3.1' - Release Candidate
|
* 2017/10/29 - 'v1.3.1' - Release Candidate
|
||||||
|
|
||||||
* 2017/10/29 - 'v1.3' - Minor fixes in Progress
|
* 2017/10/29 - 'v1.3' - Minor fixes in Progress
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
#ifndef BM1DProcess_h
|
||||||
|
#define BM1DProcess_h 1
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include "TRandom.h"
|
||||||
|
|
||||||
|
class BM1DProcess {
|
||||||
|
public:
|
||||||
|
BM1DProcess(Int_t n); //n is the number of steps
|
||||||
|
~BM1DProcess();
|
||||||
|
|
||||||
|
void SetP0(Double_t p0_new){p0 = p0_new;}
|
||||||
|
void SetP1(Double_t p1_new){p1 = p1_new;}
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void Run();
|
||||||
|
|
||||||
|
std::vector<Double_t> GetT(){return t;}
|
||||||
|
std::vector<Double_t> GetX(){return x;}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Int_t nSteps;
|
||||||
|
Double_t p0,p1,p2,p3,p4;
|
||||||
|
TRandom* randomGenerator;
|
||||||
|
Double_t rand1;
|
||||||
|
std::vector<Double_t> t;
|
||||||
|
std::vector<Double_t> x;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef Plotter_h
|
||||||
|
#define Plotter_h 1
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include "TROOT.h"
|
||||||
|
#include "TF1.h"
|
||||||
|
#include "TH1.h"
|
||||||
|
#include "TH2.h"
|
||||||
|
#include "TH3.h"
|
||||||
|
#include "TNtuple.h"
|
||||||
|
#include "TFile.h"
|
||||||
|
#include "TMath.h"
|
||||||
|
#include "TCanvas.h"
|
||||||
|
#include "TGraph.h"
|
||||||
|
#include "TTree.h"
|
||||||
|
|
||||||
|
class Plotter {
|
||||||
|
public:
|
||||||
|
Plotter();
|
||||||
|
void Plot(Int_t n, std::vector<Double_t> t, std::vector<Double_t> x);
|
||||||
|
private:
|
||||||
|
TGraph* g1;
|
||||||
|
TFile* fOut;
|
||||||
|
TCanvas* canv;
|
||||||
|
TTree *BM1DTree;
|
||||||
|
Double_t tl,xl;
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -1,58 +0,0 @@
|
||||||
/// BM1D program. Date: 2017-10-29 Creators: Balázs Demeter, Balázs Ujvári, Dávid Baranyai
|
|
||||||
|
|
||||||
#ifndef Progress_h
|
|
||||||
#define Progress_h 1
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
#include <fstream>
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
#include "TROOT.h"
|
|
||||||
#include "TF1.h"
|
|
||||||
#include "TH1.h"
|
|
||||||
#include "TH2.h"
|
|
||||||
#include "TH3.h"
|
|
||||||
#include "TNtuple.h"
|
|
||||||
#include "TFile.h"
|
|
||||||
#include "TRandom.h"
|
|
||||||
#include "TMath.h"
|
|
||||||
#include "TCanvas.h"
|
|
||||||
|
|
||||||
class Progress {
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Progress(Int_t n);
|
|
||||||
Progress(Int_t n, Double_t p0_Set);
|
|
||||||
Progress(Int_t n, Double_t p0_Set, Double_t startposition);
|
|
||||||
~Progress();
|
|
||||||
|
|
||||||
void Count(char a);
|
|
||||||
|
|
||||||
Double_t GetP0();
|
|
||||||
Int_t GetSteps();
|
|
||||||
Double_t GetNext(char a);
|
|
||||||
Double_t GetPrevious();
|
|
||||||
|
|
||||||
void SetP0(double p0_new);
|
|
||||||
|
|
||||||
std::vector<Double_t> GetX();
|
|
||||||
std::vector<Double_t> GetY();
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
TRandom* random1;
|
|
||||||
const Int_t n;
|
|
||||||
std::vector<Double_t> x;
|
|
||||||
std::vector<Double_t> y;
|
|
||||||
|
|
||||||
Double_t p0;
|
|
||||||
Double_t preVstate;
|
|
||||||
Int_t steps;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -1,10 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
|
||||||
# Author: Balázs Demeter (balazsdemeter92@gmail.com)
|
|
||||||
# Version: 1.0
|
|
||||||
#
|
|
||||||
# Script for build and make Brownian movement in one dimension
|
|
||||||
|
|
||||||
|
rm -rf bm1d_build
|
||||||
mkdir bm1d_build
|
mkdir bm1d_build
|
||||||
cd bm1d_build
|
cd bm1d_build
|
||||||
cmake ../
|
cmake ../
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#include "BM1DProcess.hh"
|
||||||
|
|
||||||
|
BM1DProcess::BM1DProcess(Int_t nP) :
|
||||||
|
nSteps (nP), p0(0.5), p1(0.3)
|
||||||
|
{
|
||||||
|
randomGenerator = new TRandom();
|
||||||
|
}
|
||||||
|
|
||||||
|
BM1DProcess::~BM1DProcess()
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BM1DProcess::Init(){
|
||||||
|
t.push_back(0.0); //let's start at t=0, x=0, you can change it if you vant, please use Set methods
|
||||||
|
x.push_back(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BM1DProcess::Run(){
|
||||||
|
for (Int_t i = 1;i < nSteps;i++)
|
||||||
|
{
|
||||||
|
rand1 = randomGenerator->Uniform();
|
||||||
|
if(rand1 < p0) { //step in time, but no step in x
|
||||||
|
t.push_back(t[i-1] + 1);
|
||||||
|
x.push_back(x[i-1]);
|
||||||
|
}
|
||||||
|
else {//step left or right
|
||||||
|
if(rand1 < p0 + p1)
|
||||||
|
{
|
||||||
|
t.push_back(t[i-1]+1);
|
||||||
|
x.push_back(x[i-1]+1); //one step right
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t.push_back(t[i-1]+1);
|
||||||
|
x.push_back(x[i-1]-1); //one step left
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
#
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include "Plotter.hh"
|
||||||
|
|
||||||
|
Plotter::Plotter()
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
void Plotter::Plot(Int_t n, std::vector<Double_t> t, std::vector<Double_t> x){
|
||||||
|
fOut = new TFile("result.root", "RECREATE");
|
||||||
|
g1 = new TGraph(n,&t[0],&x[0]);
|
||||||
|
canv = new TCanvas("canc","display",800,400);
|
||||||
|
TTree *BM1DTree = new TTree("BM1DTree","BM1DTree");
|
||||||
|
|
||||||
|
g1->Draw();
|
||||||
|
g1->SetLineColor(1);
|
||||||
|
g1->SetLineWidth(1);
|
||||||
|
g1->SetMarkerColor(1);
|
||||||
|
g1->SetMarkerStyle(0);
|
||||||
|
g1->SetTitle("Brownian Movement D=1");
|
||||||
|
g1->GetYaxis()->SetTitle("X");
|
||||||
|
g1->GetXaxis()->SetTitle("Time");
|
||||||
|
|
||||||
|
BM1DTree->Branch("tl",&tl, "tl/D");
|
||||||
|
BM1DTree->Branch("xl",&xl, "xl/D");
|
||||||
|
for (unsigned int i = 0; i < t.size(); i++){
|
||||||
|
tl = t[i];
|
||||||
|
xl = x[i];
|
||||||
|
BM1DTree->Fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
g1->Write();
|
||||||
|
BM1DTree->Write();
|
||||||
|
fOut->Close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
/// BM1D program. Date: 2017-10-29 Creators: Balázs Demeter, Balázs Ujvári, Dávid Baranyai
|
|
||||||
|
|
||||||
#include "Progress.hh"
|
|
||||||
|
|
||||||
Progress::Progress(Int_t nP) :
|
|
||||||
n (nP), p0(1), preVstate(0), steps(0)
|
|
||||||
{
|
|
||||||
random1 = new TRandom();
|
|
||||||
}
|
|
||||||
|
|
||||||
Progress::Progress(Int_t nP, Double_t p0_Set) :
|
|
||||||
n (nP), p0(p0_Set), preVstate(0), steps(0)
|
|
||||||
{
|
|
||||||
random1 = new TRandom();
|
|
||||||
}
|
|
||||||
|
|
||||||
Progress::Progress(Int_t nP, Double_t p0_Set, Double_t startposition) :
|
|
||||||
n (nP), p0(p0_Set), preVstate(startposition), steps(0)
|
|
||||||
{
|
|
||||||
random1 = new TRandom();
|
|
||||||
}
|
|
||||||
|
|
||||||
Progress::~Progress()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Progress::Count(char a)
|
|
||||||
{
|
|
||||||
for (Int_t i=0;i<n;i++)
|
|
||||||
{
|
|
||||||
if(i==0)
|
|
||||||
{
|
|
||||||
x.push_back(p0);
|
|
||||||
y.push_back(0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
x.push_back(GetNext(a));
|
|
||||||
y.push_back(steps);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Double_t Progress::GetNext(char a)
|
|
||||||
{
|
|
||||||
switch(a){
|
|
||||||
case 'u':
|
|
||||||
preVstate+=random1->Uniform(-p0,p0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'g':
|
|
||||||
preVstate+=random1->Gaus(-p0,p0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
std::cout<<"Invalid argument!"<<std::endl;
|
|
||||||
preVstate+=0.0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
steps++;
|
|
||||||
return preVstate;
|
|
||||||
}
|
|
||||||
|
|
||||||
Double_t Progress::GetPrevious()
|
|
||||||
{
|
|
||||||
return preVstate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Progress::SetP0(Double_t p0_new)
|
|
||||||
{
|
|
||||||
p0=p0_new;
|
|
||||||
}
|
|
||||||
|
|
||||||
Double_t Progress::GetP0()
|
|
||||||
{
|
|
||||||
return p0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Int_t Progress::GetSteps()
|
|
||||||
{
|
|
||||||
return steps;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<Double_t> Progress::GetX()
|
|
||||||
{
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<Double_t> Progress::GetY()
|
|
||||||
{
|
|
||||||
return y;
|
|
||||||
}
|
|
Loading…
Reference in New Issue