FairRoot/PandaRoot
drawdal.C
Go to the documentation of this file.
1 // ****************************************************************
2 // drawdal.C(double m0, double m1, double m2, double m3, TString opt="Lsame", int n=200)
3 // ****************************************************************
4 //
5 // Simple macro to draw Dalitz Plot border (m0+m2)^2:(m1+m2)^2 above a histogram
6 // USAGE: .x drawdal.C(M, m0, m1, m2, <opt>, <n>)
7 // M : Mass of mother system
8 // m0,m1,m2 : masses of three daughters
9 // <opt> : draw option for the TGraph; default: "Lsame"
10 // <n> : number of points in TGraph: default: 200
11 //
12 // ****************************************************************
13 // K.Goetzen, GSI, 10/2015
14 // ****************************************************************
15 
17 {
18  Double_t result = 0.;
19 
20  switch (i)
21  {
22  case 1: result = (m2+m3)*(m2+m3);
23  break;
24  case 2: result = (m1+m3)*(m1+m3);
25  break;
26  case 3: result = (m1+m2)*(m1+m2);
27  break;
28  }
29  return result;
30 }
31 
33 {
34  Double_t result = 0.;
35 
36  switch (i)
37  {
38  case 1: result = (m0-m1)*(m0-m1);
39  break;
40  case 2: result = (m0-m2)*(m0-m2);
41  break;
42  case 3: result = (m0-m3)*(m0-m3);
43  break;
44  }
45  return result;
46 }
47 
49 {
50  return x*x + y*y + z*z - 2.*x*y - 2.*y*z - 2.*z*x;
51 }
52 
54 {
55  Double_t s = m0*m0;
56  Double_t lamterm = sqrt( lambda(s1,s,m1*m1) ) * sqrt( lambda(s1, m2*m2, m3*m3) );
57 
58  Double_t result = m1*m1 + m3*m3 + ( (s-s1-m1*m1)*(s1-m2*m2+m3*m3) - lamterm )/(2.*s1);
59 
60  return result;
61 }
62 
64 {
65  Double_t s = m0*m0;
66  Double_t lamterm = sqrt( lambda(s1,s,m1*m1) ) * sqrt( lambda(s1, m2*m2, m3*m3) );
67 
68  Double_t result = m1*m1 + m3*m3 + ( (s-s1-m1*m1)*(s1-m2*m2+m3*m3) + lamterm )/(2.*s1);
69 
70  return result;
71 }
72 
73 
74 void CreateGraph(TGraph* g, Int_t n, Double_t m, Double_t m1, Double_t m2, Double_t m3)
75 {
76  Double_t s1minl = simin(1, m, m1, m2, m3);
77  Double_t s1maxl = simax(1, m, m1, m2, m3);
78 
79  Double_t binw = (s1maxl-s1minl)/(Double_t)(n);
80 
81  Int_t i=0;
82 
83  Double_t ymin,ymax,x;
84 
85  for (i=0; i<n; i++)
86  {
87  x = i*binw + s1minl;
88  if (x<=s1minl) x=s1minl+binw/20;
89  if (x>=s1maxl) x=s1maxl-binw/20;
90 
91  ymin = s2min(x, m, m1, m2, m3);
92  ymax = s2max(x, m, m1, m2, m3);
93 
94  g->SetPoint(i,x,ymin);
95  g->SetPoint(n*2-i,x,ymax);
96  }
97 
98  g->SetPoint(n,s1maxl,s2min(s1maxl-binw/20,m,m1,m2,m3));
99  g->GetPoint(0,x,ymin);
100  g->SetPoint(n*2,x,ymin);
101 
102 }
103 
104 drawdal(double m0, double m1, double m2, double m3, TString opt="Lsame", int n=200)
105 {
106  TGraph *g=new TGraph(n);
107  g->SetLineColor(2);
108  g->SetLineStyle(2);
109  g->SetLineWidth(2);
110  CreateGraph(g,n,m0,m1,m2,m3);
111  g->Draw(opt);
112 }
Double_t s2min(Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
Definition: drawdal.C:53
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: drawdal.C:48
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Double_t s2max(Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
Definition: drawdal.C:63
TLorentzVector s
Definition: Pnd2DStar.C:50
int n
TFile * g
void CreateGraph(TGraph *g, Int_t n, Double_t m, Double_t m1, Double_t m2, Double_t m3)
Definition: drawdal.C:74
drawdal(double m0, double m1, double m2, double m3, TString opt="Lsame", int n=200)
Definition: drawdal.C:104
TString m2(TString pts, TString exts="e px py pz")
Definition: invexp.C:117
Double_t
Double_t z
Double_t simax(Int_t i, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
Definition: drawdal.C:32
Double_t x
Double_t simin(Int_t i, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
Definition: drawdal.C:16
Double_t y