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 "Progress.hh"
|
||||
#include "BM1DProcess.hh"
|
||||
#include "Plotter.hh"
|
||||
#include "TApplication.h"
|
||||
#include "TGraph.h"
|
||||
|
||||
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_t n = 1000, p0 = 1, start = 0;
|
||||
|
||||
TApplication App("tapp", &argc, argv);
|
||||
TCanvas* Canv = new TCanvas("c10","Live display",800,400);
|
||||
|
||||
if(argc==2)
|
||||
{
|
||||
OpenRootFile();
|
||||
}
|
||||
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();
|
||||
|
||||
}
|
||||
Int_t n = 1000;
|
||||
BM1DProcess *myBM1DProcess = new BM1DProcess(n);
|
||||
myBM1DProcess->Init();
|
||||
myBM1DProcess->Run();
|
||||
Plotter* myPlotter = new Plotter();
|
||||
myPlotter->Plot(n, myBM1DProcess->GetT(), myBM1DProcess->GetX());
|
||||
|
||||
App.Run();
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
|
|
@ -51,6 +51,8 @@ If there's command line argument, then program opens the created root file. Name
|
|||
|
||||
## Updates
|
||||
|
||||
* 2017/10/30 - 'v1.4' - New Structure
|
||||
|
||||
* 2017/10/29 - 'v1.3.1' - Release Candidate
|
||||
|
||||
* 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
|
||||
#
|
||||
# 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
|
||||
cd bm1d_build
|
||||
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