29 #include "TLorentzVector.h"
38 primaryVertexGen::primaryVertexGen(
string histfilename,
39 double beam_part_mass,
40 double mean_beam_energy,
41 double mean_beam_energy_spread)
42 : _histogramfile(NULL),
44 _hist_angles_vert_mean(NULL),
45 _hist_angles_horiz_mean(NULL),
46 _hist_angles_vert_sigma(NULL),
47 _hist_angles_horiz_sigma(NULL),
48 _hist_vertex_distr_xy(NULL),
49 _hist_vertex_distr_z(NULL),
50 _beam_part_mass(beam_part_mass),
51 _beam_energy_mean(mean_beam_energy),
52 _beam_energy_sigma(mean_beam_energy_spread)
75 gROOT->SetStyle(
"Plain");
76 gStyle->SetPalette(1);
79 TFile* histogramfile =
new TFile(filename.c_str());
80 if(histogramfile->IsZombie()) {
81 cout <<
" Error: Could not read the given file containing histograms! " << endl;
98 cout <<
" Error: histograms not found!" << endl;
113 TCanvas *analyze_beam_properties_output =
new TCanvas(
"analyze_beam_properties_output",
"analyze_beam_properties_output method output", 600, 900);
114 analyze_beam_properties_output->Divide(2,3);
115 analyze_beam_properties_output->cd(1);
118 analyze_beam_properties_output->cd(2);
121 analyze_beam_properties_output->cd(3);
124 analyze_beam_properties_output->cd(4);
127 analyze_beam_properties_output->cd(5);
131 analyze_beam_properties_output->cd(6);
134 analyze_beam_properties_output->Print(
"Fitted_beam_property_distributions.pdf");
147 const float cutZ_low,
148 const float cutZ_high)
151 TVector3* result =
new TVector3();
161 if((sqrt(x*x+y*y) < cutR) && (z > cutZ_low) && (z < cutZ_high)) {
165 TVector3* result =
new TVector3(x,y,z);
171 TVector3* result =
new TVector3(0.,0.,1.);
180 if((sigma_horiz == 0.) || (sigma_vert == 0.)) {
191 double angle_horiz = gRandom->Gaus(mean_horiz, sigma_horiz);
192 double angle_vert = gRandom->Gaus(mean_vert , sigma_vert);
193 result->RotateX(-angle_vert);
194 result->RotateY(angle_horiz);
200 TVector3 _beam_dir(beam_dir);
203 TLorentzVector* result =
new TLorentzVector(_beam_dir.X(), _beam_dir.Y(), _beam_dir.Z(), energy);
210 const Int_t NRGBs = 5;
211 const Int_t NCont = 255;
212 Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
213 Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
214 Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
215 Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
216 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
217 gStyle->SetNumberContours(NCont);
221 const UInt_t Number = 3;
222 Double_t Red[Number] = { 1.00, 0.00, 0.00};
223 Double_t Green[Number] = { 0.00, 1.00, 0.00};
224 Double_t Blue[Number] = { 1.00, 0.00, 1.00};
225 Double_t Length[Number] = { 0.00, 0.50, 1.00 };
227 TColor::CreateGradientColorTable(Number,Length,Red,Green,Blue,nb);
228 gStyle->SetNumberContours(nb);
234 if(!primaryVertexGen.
check()) {
243 TH2F *hist_vertex_distr_xy_sim =
new TH2F(
"hist_vertex_distr_xy_sim",
"simulated vertex X Y distribution", 200, -2., 2., 200, -2., 2.);
244 TH1F *hist_vertex_distr_z_sim =
new TH1F(
"hist_vertex_distr_z_sim",
"simulated vertex Z distribution",1000, -100, 0);
245 TH1F *hist_angle_distr_horiz =
new TH1F(
"hist_angle_distr_horiz",
"horizontal angle distribution",1000, -0.001, 0.001);
246 TH1F *hist_angle_distr_vert =
new TH1F(
"hist_angle_distr_vert ",
"vertical angle distribution",1000, -0.001, 0.001);
247 TH1F *hist_energy_distr_sim =
new TH1F(
"hist_energy_distr_sim",
"simulated energy distribution",1000, 170, 210);
248 TH2F* hist_beamtrack_horiz_plane =
new TH2F(
"hist_beamtrack_horiz_plane",
"beamtrack in horizontal plane", 1000, 0, 6000, 100, -5, 5);
249 TH2F* hist_beamtrack_vert_plane =
new TH2F(
"hist_beamtrack_vert_plane",
"beamtrack in vertical plane", 1000, 0, 6000, 100, -5, 5);
250 TH1F* hist_horiz_beamdivergence_at_CEDAR =
new TH1F(
"hist_horiz_beamdivergence_at_CEDAR",
"horizontal beam divergence at CEDAR region", 1000, -400e-6, 400e-6);
251 TH1F* hist_vert_beamdivergence_at_CEDAR =
new TH1F(
"hist_vert_beamdivergence_at_CEDAR",
"vertical beam divergence at CEDAR region", 1000, -400e-6, 400e-6);
254 TCanvas* canvas =
new TCanvas(
"canvas",
"simulated distributions", 900, 600);
256 TCanvas* canvas2 =
new TCanvas(
"canvas2",
"simulated tracks", 600, 600);
257 canvas2->Divide(1,2);
258 TCanvas* canvas3 =
new TCanvas(
"canvas3",
"simulated distributions at CEDAR region", 600, 400);
259 canvas3->Divide(2,1);
260 for(
int i = 0;
i < 1000000;
i++) {
261 TVector3 vertex = primaryVertexGen.
getVertex();
262 TVector3 beam_dir = primaryVertexGen.
getBeamDir(vertex);
263 if(beam_dir.Mag() == 0) {
267 hist_vertex_distr_xy_sim->Fill(vertex.X(), vertex.Y());
268 hist_vertex_distr_z_sim->Fill(vertex.Z());
269 TLorentzVector beam_part = primaryVertexGen.
getBeamPart(beam_dir);
271 double azi = beam_part.Px()/beam_part.Pz();
272 double dip = beam_part.Py()/beam_part.Pz();
273 hist_angle_distr_horiz->Fill(azi);
274 hist_angle_distr_vert->Fill(dip);
275 hist_energy_distr_sim->Fill(beam_part.E());
278 for(
int i = 0;
i < 1000;
i++) {
282 float extrapol_dist_z = pos_z - vertex.Z();
284 float extrapol_fac = extrapol_dist_z/beam_dir.Z();
286 hist_beamtrack_horiz_plane->Fill(pos_z, vertex.X()+beam_dir.X()*extrapol_fac);
287 hist_beamtrack_vert_plane ->Fill(pos_z, vertex.Y()+beam_dir.Y()*extrapol_fac);
292 float extrapol_dist_z = pos_z - vertex.Z();
293 float extrapol_fac = extrapol_dist_z/beam_dir.Z();
294 vertex.SetXYZ(vertex.X()+beam_dir.X()*extrapol_fac,
295 vertex.Y()+beam_dir.Y()*extrapol_fac,
320 float x_displacement_upstream = vertex.X()*(0.398) + azi*(47.160*100);
321 float y_displacement_upstream = vertex.Y()*(0.749) + dip*(73.374*100);
323 float x_displacement_downstream = vertex.X()*(0.670) + azi*(47.160*100);
324 float y_displacement_downstream = vertex.Y()*(0.924) + dip*(73.374*100);
326 float divergence_horiz = (x_displacement_downstream-x_displacement_upstream) / ((82.230-69.396) * 100);
327 float divergence_vert = (y_displacement_downstream-y_displacement_upstream) / ((82.230-69.396) * 100);
328 hist_horiz_beamdivergence_at_CEDAR->Fill(divergence_horiz);
329 hist_vert_beamdivergence_at_CEDAR->Fill(divergence_vert);
332 if((counter % 10000) == 0) {
336 hist_vertex_distr_xy_sim->Draw(
"COLZ");
340 hist_vertex_distr_z_sim->Draw(
"");
344 hist_angle_distr_horiz->Draw(
"");
348 hist_angle_distr_vert->Draw(
"");
352 hist_energy_distr_sim->Draw(
"");
356 hist_beamtrack_horiz_plane->Draw(
"COLZ");
360 hist_beamtrack_vert_plane->Draw(
"COLZ");
364 hist_horiz_beamdivergence_at_CEDAR->Draw();
368 hist_vert_beamdivergence_at_CEDAR->Draw();
372 canvas2->Print(
"Simulated_tracks.pdf");
373 canvas->Print(
"Simulated_distributions.pdf");
374 canvas3->Print(
"Simulated_distributions_at_CEDAR.pdf");