Logo ROOT  
Reference Guide
waves.C File Reference

Detailed Description

View in nbviewer Open in SWAN Hint: Spherical waves

#include "TROOT.h"
#include "TCanvas.h"
#include "TColor.h"
#include "TArc.h"
#include "TGraph.h"
#include "TF2.h"
#include "TLine.h"
#include "TLatex.h"
#include "TMath.h"
#include "TStyle.h"
#include "Riostream.h"
TF2 * finter;
//______________________________________________________________
Double_t interference( Double_t *x, Double_t *par)
{
Double_t x_p2 = x[0] * x[0];
Double_t d_2 = 0.5 * par[2];
Double_t ym_p2 = (x[1] - d_2) * (x[1] - d_2);
Double_t yp_p2 = (x[1] + d_2) * (x[1] + d_2);
Double_t tpi_l = TMath::Pi() / par[1];
Double_t amplitude = par[0] * (cos(tpi_l * sqrt(x_p2 + ym_p2))
+ par[3] * cos(tpi_l * sqrt(x_p2 + yp_p2)));
return amplitude * amplitude;
}
//_____________________________________________________________
Double_t result( Double_t *x, Double_t *par)
{
Double_t xint[2];
Double_t maxintens = 0, xcur = 14;
Double_t dlambda = 0.1 * par[1];
for(Int_t i=0; i<10; i++){
xint[0] = xcur;
xint[1] = x[1];
Double_t intens = interference(xint, par);
if(intens > maxintens) maxintens = intens;
xcur -= dlambda;
}
return maxintens;
}
//_____________________________________________________________
void waves( Double_t d = 3, Double_t lambda = 1, Double_t amp = 10)
{
TCanvas *c1 = new TCanvas("waves", "A double slit experiment",
300,40, 1004, 759);
c1->Range(0, -10, 30, 10);
c1->SetFillColor(0);
TPad *pad = new TPad("pr","pr", 0.5, 0 , 1., 1);
pad->Range(0, -10, 15, 10);
pad->Draw();
const Int_t colNum = 30;
Int_t palette[colNum];
for (Int_t i=0;i<colNum;i++) {
TColor *color = new TColor(1001+i
, pow(i/((colNum)*1.0),0.3)
, pow(i/((colNum)*1.0),0.3)
,0.5*(i/((colNum)*1.0)),"");
palette[i] = 1001+i;
}
gStyle->SetPalette(colNum,palette);
c1->cd();
TF2 * f0 = new TF2("ray_source",interference, 0.02, 15, -8, 8, 4);
f0->SetParameters(amp, lambda, 0, 0);
f0->SetNpx(200);
f0->SetNpy(200);
f0->SetContour(colNum-2);
f0->Draw("samecolz");
TLatex title;
title.DrawLatex(1.6, 8.5, "A double slit experiment");
TGraph *graph = new TGraph(4);
graph->SetFillColor(0);
graph->SetFillStyle(1001);
graph->SetLineWidth(0);
graph->SetPoint(0, 0., 0.1);
graph->SetPoint(1, 14.8, 8);
graph->SetPoint(2, 0, 8);
graph->SetPoint(3, 0, 0.1);
graph->Draw("F");
graph = new TGraph(4);
graph->SetFillColor(0);
graph->SetFillStyle(1001);
graph->SetLineWidth(0);
graph->SetPoint(0, 0, -0.1);
graph->SetPoint(1, 14.8, -8);
graph->SetPoint(2, 0, -8);
graph->SetPoint(3, 0, -0.1);
graph->Draw("F");
line = new TLine(15,-10, 15, 0 - 0.5*d -0.2);
line->SetLineWidth(10); line->Draw();
line = new TLine(15, 0 - 0.5*d +0.2 ,15, 0 + 0.5*d -0.2);
line->SetLineWidth(10); line->Draw();
line = new TLine(15,0 + 0.5*d + 0.2,15, 10);
line->SetLineWidth(10); line->Draw();
pad ->cd();
finter = new TF2("interference",interference, 0.01, 14, -10, 10, 4);
finter->SetParameters(amp, lambda, d, 1);
finter->SetNpx(200);
finter->SetNpy(200);
finter->SetContour(colNum-2);
finter->Draw("samecolorz");
TArc *arc = new TArc();;
arc->SetFillStyle(0);
arc->SetLineWidth(2);
arc->SetLineColor(5);
Float_t r = 0.5 * lambda, dr = lambda;
for (Int_t i = 0; i < 16; i++) {
arc->DrawArc(0, 0.5*d, r, 0., 360., "only");
arc->DrawArc(0, -0.5*d, r, 0., 360., "only");
r += dr;
}
pad ->cd();
TF2 * fresult = new TF2("result",result, 14, 15, -10, 10, 4);
fresult->SetParameters(amp, lambda, d, 1);
fresult->SetNpx(300);
fresult->SetNpy(300);
fresult->SetContour(colNum-2);
fresult->Draw("samecolor");
line = new TLine(13.8,-10, 14, 10);
line->SetLineWidth(10); line->SetLineColor(0); line->Draw();
c1->Modified(kTRUE);
c1->Update();
c1->SetEditable(kTRUE);
}
Author
Otto Schaile

Definition in file waves.C.

kTRUE
const Bool_t kTRUE
Definition: RtypesCore.h:91
TLine.h
TArc
Definition: TArc.h:26
TLine
Definition: TLine.h:22
TPad::Range
virtual void Range(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Set world coordinate system for the pad.
Definition: TPad.cxx:5174
TPad
Definition: TPad.h:26
TF1::SetNpx
virtual void SetNpx(Int_t npx=100)
Set the number of points used to draw the function.
Definition: TF1.cxx:3453
TF2::SetNpy
virtual void SetNpy(Int_t npy=100)
Set the number of points used to draw the function.
Definition: TF2.cxx:932
r
ROOT::R::TRInterface & r
Definition: Object.C:4
TGraph.h
TArc.h
Float_t
float Float_t
Definition: RtypesCore.h:57
TStyle.h
Int_t
int Int_t
Definition: RtypesCore.h:45
TF2::SetContour
virtual void SetContour(Int_t nlevels=20, const Double_t *levels=0)
Set the number and values of contour levels.
Definition: TF2.cxx:897
x
Double_t x[n]
Definition: legend1.C:17
cos
double cos(double)
TLatex::DrawLatex
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
Make a copy of this object with the new parameters And copy object attributes.
Definition: TLatex.cxx:1927
TLatex
Definition: TLatex.h:18
TColor.h
TCanvas.h
TROOT.h
TF1::SetParameters
virtual void SetParameters(const Double_t *params)
Definition: TF1.h:640
TMath::Pi
constexpr Double_t Pi()
Definition: TMath.h:43
TF2.h
gStyle
R__EXTERN TStyle * gStyle
Definition: TStyle.h:412
TColor
Definition: TColor.h:19
TF2::Draw
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
Definition: TF2.cxx:241
sqrt
double sqrt(double)
line
TLine * line
Definition: entrylistblock_figure1.C:235
TArc::DrawArc
virtual void DrawArc(Double_t x1, Double_t y1, Double_t radius, Double_t phimin=0, Double_t phimax=360, Option_t *option="")
Draw this arc with new coordinates.
Definition: TArc.cxx:79
TF2
Definition: TF2.h:29
TObject::Draw
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition: TObject.cxx:197
Double_t
double Double_t
Definition: RtypesCore.h:59
TGraph
Definition: TGraph.h:41
TStyle::SetPalette
void SetPalette(Int_t ncolors=kBird, Int_t *colors=0, Float_t alpha=1.)
See TColor::SetPalette.
Definition: TStyle.cxx:1785
TCanvas
Definition: TCanvas.h:23
TLatex.h
TPad::cd
TVirtualPad * cd(Int_t subpadnumber=0)
Set Current pad.
Definition: TPad.cxx:594
graph
Definition: graph.py:1
d
#define d(i)
Definition: RSha256.hxx:120
Riostream.h
pow
double pow(double, double)
TMath.h
c1
return c1
Definition: legend1.C:41
TPad::Draw
virtual void Draw(Option_t *option="")
Draw Pad in Current pad (re-parent pad if necessary).
Definition: TPad.cxx:1285