test2_p.C
1 |
// Global declarations
|
---|---|
2 |
TGraph* gr, igr; |
3 |
|
4 |
// C++ defined function
|
5 |
Double_t f(Double_t *x, Double_t *par) |
6 |
{ |
7 |
return igr->Eval(x[0]); |
8 |
} |
9 |
|
10 |
ofstream out("CMom_B11_N15.txt");
|
11 |
|
12 |
void test2_p()
|
13 |
{ |
14 |
// Read the text file into the tree
|
15 |
// TFile file("myfile.root","RECREATE");
|
16 |
TTree* MyTree = new TTree("MyTree", "MyTree"); |
17 |
Double_t tetta, crossSection; |
18 |
Double_t CMmom, shorty,phi, px,py,pz,pz_B,px_B,py_B; |
19 |
MyTree->ReadFile("cos_tetta_cross.txt", "tetta/D:crossSection/D"); |
20 |
TBranch *bpt = MyTree->Branch("px",&px,"px/F"); |
21 |
|
22 |
MyTree->SetBranchAddress("tetta", &tetta);
|
23 |
MyTree->SetBranchAddress("crossSection", &crossSection);
|
24 |
/*
|
25 |
MyTree->SetBranchAddress("pz", &pz);
|
26 |
MyTree->SetBranchAddress("px", &px);
|
27 |
MyTree->SetBranchAddress("py", &py);
|
28 |
MyTree->SetBranchAddress("pz_B", &pz_B);
|
29 |
MyTree->SetBranchAddress("px_B", &px_B);
|
30 |
MyTree->SetBranchAddress("py_B", &py_B);
|
31 |
*/
|
32 |
// Create two vectors to be filled from the tree
|
33 |
const Int_t nEntries = MyTree->GetEntries(); // number of entries in the input file |
34 |
TVectorD tet(nEntries); |
35 |
TVectorD sigma(nEntries); |
36 |
|
37 |
// Fill two vectors from the tree
|
38 |
for (int i=0; i<nEntries; i++) { |
39 |
MyTree->GetEntry(i); |
40 |
tet(i) = tetta; |
41 |
sigma(i) = crossSection; |
42 |
} |
43 |
|
44 |
// Create the graph
|
45 |
gr = new TGraph(tet, sigma);
|
46 |
igr = new TGraph(sigma,tet);
|
47 |
// Draw the graph
|
48 |
TCanvas *c1 = new TCanvas("c1", "c1", 800, 600); |
49 |
c1->cd(); |
50 |
igr->Draw(); |
51 |
igr->SetLineColor(kRed); |
52 |
igr->SetLineWidth(3);
|
53 |
gPad->SetGrid(1, 1); |
54 |
|
55 |
// ROOT-TF1 object with the reference to the C++ defined function
|
56 |
TF1* func = new TF1("func", f, 0, 1, 0); |
57 |
|
58 |
// Draw the func
|
59 |
TCanvas *c2 = new TCanvas("c2", "c2", 800, 600); |
60 |
c2->cd(); |
61 |
func->Draw(); |
62 |
func->SetLineColor(kGreen); |
63 |
func->SetLineWidth(3);
|
64 |
gPad->SetGrid(1, 1); |
65 |
|
66 |
// Uniform random number generator
|
67 |
TRandom3* rndGen = new TRandom3();
|
68 |
|
69 |
TH1D* histo1 = new TH1D("histo1", "histo1", 1800, 0., 1.); |
70 |
TH1D* histo2 = new TH1D("histo2", "histo2", 1800, 0., 180.); |
71 |
TH1D* histo3 = new TH1D("histo3", "histo3", 1800, 0., 180.); |
72 |
TH1D* histo4 = new TH1D("histo4", "histo4", 1800, 0., 180.); |
73 |
TH1D* histo5 = new TH1D("histo5", "histo5", 1800, 0., 180.); |
74 |
|
75 |
UInt_t nIterations = 500000;
|
76 |
// Loop over all iterations
|
77 |
for (UInt_t iIter=0; iIter<nIterations; iIter++) |
78 |
{ |
79 |
if (iIter%100000 == 0) cout << "Iteration " << iIter << endl; |
80 |
|
81 |
Double_t x = rndGen->Rndm(); // from 0.0 to 1.0
|
82 |
Double_t y = func->Eval(x); |
83 |
//___________fill px py pz -----------------
|
84 |
|
85 |
Double_t invariant; |
86 |
Double_t AMU=931.5 ; |
87 |
Double_t m11B=AMU*11.; |
88 |
Double_t m15N=AMU*15;
|
89 |
Double_t T_N15=43;
|
90 |
Double_t CMmom, shorty,phi, px,py,pz; |
91 |
invariant = (m11B+m15N)*(m11B+m15N)+2*m11B*T_N15;
|
92 |
|
93 |
Double_t shorty=(invariant-m11B*m11B-m15N*m15N)*(invariant-m11B*m11B-m15N*m15N); |
94 |
CMmom = sqrt((shorty-4*m15N*m15N*m11B*m11B)/(4*invariant)); |
95 |
//phi= CLHEP::RandFlat::shoot(0.0,2*double(CLHEP::pi));
|
96 |
Double_t PI = 3.14159265358; |
97 |
phi = rand()% 2*PI;
|
98 |
pz=CMmom*cos(y); |
99 |
px=CMmom*sin(y)*cos(phi*180/PI) ;//cos(phi); |
100 |
py=CMmom*sin(y)*sin(phi*180/PI); //sin(phi); |
101 |
pz_B=-pz; |
102 |
px_B=-px; |
103 |
py_B=-py; |
104 |
|
105 |
out<<pz<<"\t"<<px<<"\t"<< py<<"\t"<<-pz<<"\t"<<-px<<"\t"<< -py<<endl; |
106 |
|
107 |
// Histograms filling
|
108 |
histo1->Fill(x); |
109 |
histo2->Fill(y); |
110 |
histo3->Fill(pz); |
111 |
histo4->Fill(px); |
112 |
histo5->Fill(py); |
113 |
//file.Write();
|
114 |
|
115 |
} |
116 |
|
117 |
// Draw
|
118 |
TCanvas* canv1 = new TCanvas("canv1", "canv1"); |
119 |
canv1->cd(); |
120 |
histo1->Draw(); |
121 |
gStyle->SetOptStat(111111);
|
122 |
gPad->SetGrid(1, 1); |
123 |
|
124 |
// Draw
|
125 |
TCanvas* canv2 = new TCanvas("canv2", "canv2"); |
126 |
canv2->cd(); |
127 |
histo2->Draw(); |
128 |
gStyle->SetOptStat(111111);
|
129 |
gPad->SetGrid(1, 1); |
130 |
|
131 |
TCanvas* canv3 = new TCanvas("canv3", "canv3"); |
132 |
canv3->cd(); |
133 |
histo3->Draw(); |
134 |
gStyle->SetOptStat(111111);
|
135 |
gPad->SetGrid(1, 1); |
136 |
|
137 |
TCanvas* canv4 = new TCanvas("canv4", "canv4"); |
138 |
canv3->cd(); |
139 |
histo4->Draw(); |
140 |
gStyle->SetOptStat(111111);
|
141 |
gPad->SetGrid(1, 1); |
142 |
|
143 |
TCanvas* canv5 = new TCanvas("canv5", "canv5"); |
144 |
canv3->cd(); |
145 |
histo5->Draw(); |
146 |
gStyle->SetOptStat(111111);
|
147 |
gPad->SetGrid(1, 1); |
148 |
|
149 |
} |