Run for uniform,gauss,layer
This commit is contained in:
		
							parent
							
								
									fb42b93a5f
								
							
						
					
					
						commit
						a3ac1c6d3d
					
				|  | @ -10,22 +10,19 @@ | |||
| 
 | ||||
| class BM1DProcess { | ||||
| public: | ||||
|   BM1DProcess(Int_t n); //n is the number of steps
 | ||||
|   BM1DProcess();  | ||||
|   ~BM1DProcess(); | ||||
|    | ||||
|   void SetP0(Double_t p0_new){p0 = p0_new;} | ||||
|   void SetP1(Double_t p1_new){p1 = p1_new;} | ||||
| 
 | ||||
|   void Init(); | ||||
|   void Run(); | ||||
|   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); | ||||
|    | ||||
|   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; | ||||
|   TRandom* randomGeneratorGauss; | ||||
|   Double_t rand1; | ||||
|   std::vector<Double_t> t; | ||||
|   std::vector<Double_t> x; | ||||
|  |  | |||
|  | @ -1,39 +1,112 @@ | |||
| #include "BM1DProcess.hh" | ||||
| 
 | ||||
| BM1DProcess::BM1DProcess(Int_t nP) :  | ||||
|   nSteps (nP), p0(0.5), p1(0.3) | ||||
| BM1DProcess::BM1DProcess()  | ||||
| { | ||||
|   randomGenerator = new TRandom(); | ||||
|   randomGeneratorGauss = new TRandom(); | ||||
| } | ||||
| 
 | ||||
| BM1DProcess::~BM1DProcess() | ||||
| { | ||||
|   ; | ||||
|   delete randomGenerator; | ||||
|   delete randomGeneratorGauss; | ||||
| } | ||||
| 
 | ||||
| void BM1DProcess::Init(){ | ||||
| 
 | ||||
| void BM1DProcess::Run(int nRuns, int nSteps, double p0, double p1) | ||||
| { | ||||
| 	for(int i = 0; i < nRuns; i++) //multiple runs
 | ||||
| 		{ | ||||
| 			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); | ||||
| 			 | ||||
| 			for(int ii = 0; ii < nSteps ; ii++) | ||||
| 				{ | ||||
| 				 | ||||
| 					rand1 = randomGenerator->Uniform(); | ||||
| 						 | ||||
| 					if(rand1 < p0)	//step in time, but no step in x
 | ||||
| 						{   | ||||
| 							t.push_back(t.back() + 1); | ||||
| 							x.push_back(x.back()); | ||||
| 						} | ||||
| 					 | ||||
| void BM1DProcess::Run(){ | ||||
|   for (Int_t i = 1;i < nSteps;i++) | ||||
| 					else	//step left or right
 | ||||
| 						{	 | ||||
|       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
 | ||||
| 									t.push_back(t.back()+1); | ||||
| 									x.push_back(x.back()+1); //one step right
 | ||||
| 								} | ||||
| 							else | ||||
| 								{ | ||||
| 	      t.push_back(t[i-1]+1); | ||||
| 	      x.push_back(x[i-1]-1); //one step left
 | ||||
| 									t.push_back(t.back() + 1); | ||||
| 									x.push_back(x.back() - 1); //one step left
 | ||||
| 								}			 | ||||
| 						} | ||||
| 				}						 | ||||
| 		} | ||||
| } | ||||
| 
 | ||||
| void BM1DProcess::Run(int nRuns, int nSteps, double p0, double mu, double sigma) | ||||
| { | ||||
| 	for(int i = 0; i < nRuns; i++) //multiple runs
 | ||||
| 		{ | ||||
| 			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); | ||||
| 			 | ||||
| 			for(int ii = 0; ii < nSteps ; ii++) | ||||
| 				{ | ||||
| 					rand1 = randomGenerator->Uniform(); | ||||
| 						 | ||||
| 					if(rand1 < p0)	//step in time, but no step in x
 | ||||
| 						{   | ||||
| 							t.push_back(t.back() + 1); | ||||
| 							x.push_back(x.back()); | ||||
| 						} | ||||
| 					 | ||||
| 					else	//step left or right
 | ||||
| 						{	 | ||||
| 							double randGauss = randomGeneratorGauss -> Gaus(mu,sigma); | ||||
| 							t.push_back(t.back() + 1); | ||||
| 							x.push_back(x.back() + randGauss); //one step right
 | ||||
| 						} | ||||
| 				}						 | ||||
| 		} | ||||
| } | ||||
| 
 | ||||
| void BM1DProcess::Run(int nRuns, int nSteps, double p0, double x1, double x2, double mu1, double sigma1, double mu2, double sigma2) | ||||
| { | ||||
| 	for(int i = 0; i < nRuns; i++) //multiple runs
 | ||||
| 		{ | ||||
| 			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); | ||||
| 			 | ||||
| 			double randGauss; | ||||
| 			 | ||||
| 			for(int ii = 0; ii < nSteps ; ii++) | ||||
| 				{ | ||||
| 					rand1 = randomGenerator->Uniform(); | ||||
| 					 | ||||
| 					if(rand1 < p0)	//step in time, but no step in x
 | ||||
| 						{   | ||||
| 							t.push_back(t.back() + 1); | ||||
| 							x.push_back(x.back()); | ||||
| 						} | ||||
| 					 | ||||
| 					else	//step left or right
 | ||||
| 						{	 | ||||
| 							if(x.back() < x2 && x.back() > x1) | ||||
| 								{ | ||||
| 									randGauss = randomGeneratorGauss -> Gaus(mu1,sigma1); | ||||
| 								} | ||||
| 							else  | ||||
| 								{ | ||||
| 									randGauss = randomGeneratorGauss -> Gaus(mu2,sigma2); | ||||
| 								}	 | ||||
| 						 | ||||
| 							t.push_back(t.back() + 1); | ||||
| 							x.push_back(x.back() + randGauss); //one step right
 | ||||
| 						} | ||||
| 				}						 | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue