1 |
#include <string>
|
2 |
#include <vector>
|
3 |
#include <iostream>
|
4 |
#include <map>
|
5 |
#include <utility>
|
6 |
|
7 |
//#include "HistogramManager.h"
|
8 |
//#include "Map.h"
|
9 |
|
10 |
#include "TNtuple.h"
|
11 |
#include "TRandom.h"
|
12 |
|
13 |
#include "TTree.h"
|
14 |
#include "TFile.h"
|
15 |
#include "TH1I.h"
|
16 |
#include "TH1F.h"
|
17 |
#include "TH2F.h"
|
18 |
#include "TProfile.h"
|
19 |
#include "TString.h"
|
20 |
#include "TMath.h"
|
21 |
#include "TF1.h"
|
22 |
#include "TString.h"
|
23 |
#include <fstream>
|
24 |
#include <vector>
|
25 |
#include <iomanip>
|
26 |
#include <iostream>
|
27 |
|
28 |
using namespace std;
|
29 |
|
30 |
|
31 |
class Laser{
|
32 |
public:
|
33 |
Laser(double rin = 0.5){
|
34 |
r = rin;
|
35 |
s1 = 100.;
|
36 |
s2 = r*s1;
|
37 |
|
38 |
w = 0.1;
|
39 |
|
40 |
f1 = new TF1("f1","gaus",-10,20);
|
41 |
f2 = new TF1("f2","gaus",-10,20);
|
42 |
|
43 |
f1->SetParameter(0,s1);
|
44 |
f2->SetParameter(0,s2);
|
45 |
|
46 |
f1->SetParameter(1,0);
|
47 |
f2->SetParameter(1,1);
|
48 |
|
49 |
f1->SetParameter(2,w);
|
50 |
f2->SetParameter(2,w);
|
51 |
|
52 |
}
|
53 |
|
54 |
void fillHit(TH1* h, double phase = 0){
|
55 |
|
56 |
h->Reset();
|
57 |
for(int i = 0; i < h->GetNbinsX(); ++i){
|
58 |
double low = h->GetBinLowEdge(i);
|
59 |
double high = h->GetBinLowEdge(i+1);
|
60 |
double mid = (low+high)/2.;
|
61 |
|
62 |
low = low + phase - 4;
|
63 |
high = high + phase - 4;
|
64 |
|
65 |
double adc = f1->Integral(low,high)+f2->Integral(low,high);
|
66 |
|
67 |
h->Fill(mid,adc);
|
68 |
}
|
69 |
|
70 |
h->Draw();
|
71 |
|
72 |
};
|
73 |
|
74 |
|
75 |
|
76 |
double s1,s2,r,w;
|
77 |
TF1* f1, *f2;
|
78 |
|
79 |
|
80 |
|
81 |
};
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
void simulate(double inputR = 0.5){
|
89 |
|
90 |
Laser *laz = new Laser(inputR);
|
91 |
|
92 |
|
93 |
TF1* f0 = new TF1("f0","pol0",-1,3);
|
94 |
f0->SetParameter(0,1);
|
95 |
// f0->SetParameter(1,4);
|
96 |
// f0->SetParameter(2,1);
|
97 |
|
98 |
TNtuple* nt = new TNtuple(Form("nt%d",(int)(100.*inputR)),"","s1:s2:r:p");
|
99 |
|
100 |
TH1D* hit = new TH1D("hit","",10,0,10);
|
101 |
|
102 |
double noiseFactor = 10;
|
103 |
|
104 |
int Nev = 10000;
|
105 |
|
106 |
for(int iev = 0; iev < Nev; iev++){
|
107 |
|
108 |
hit->Reset();
|
109 |
|
110 |
double p = f0->GetRandom();
|
111 |
laz->fillHit(hit,p);
|
112 |
|
113 |
for(int i = 0; i < 10; ++i){
|
114 |
hit->Fill(i+0.5,noiseFactor*(gRandom->Uniform()-0.5));
|
115 |
}
|
116 |
|
117 |
double s1 = hit->GetBinContent(4);
|
118 |
double s2 = hit->GetBinContent(5);
|
119 |
|
120 |
double r = s2/s1;
|
121 |
nt->Fill(s1,s2,r,p);
|
122 |
|
123 |
// cout<<"r : "<<r<<endl;
|
124 |
}
|
125 |
|
126 |
|
127 |
nt->Draw("r:p","r > -0.2 &&r < 1.2","colz");
|
128 |
nt->Draw("r:p","r > -0.2 &&r < 1.2","prof same");
|
129 |
|
130 |
// hit->Draw();
|
131 |
|
132 |
}
|
133 |
|
134 |
|
135 |
void toy(){
|
136 |
|
137 |
simulate();
|
138 |
|
139 |
}
|
140 |
|
141 |
|