Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CreateMNGDDistribution.C
Go to the documentation of this file.
1 {
2  //
3  // Create Miyamoto-Nagai Galactic Disk Model Sky Distribution
4  // Author : Gabriele Vedovato
5 
6  // Miyamoto-Nagai Galactic Disk Model
7  // www.astro.utu.fi/~cflynn/galdyn/lecture4.html
8 
9  // a=[0]
10  // b=[1] scale length
11  // R=x, z=y
12 
13  #define NUMERATOR "([0]*((x-[3])*(x-[3])+y*y)+([0]+3*sqrt(z*z+[1]*[1]))*pow([0]+sqrt(z*z+[1]*[1]),2))"
14  #define DENOMINATOR "(pow(((x-[3])*(x-[3])+y*y)+pow([0]+sqrt(z*z+[1]*[1]),2),5./2.)*pow(z*z+[1]*[1],3./2.))"
15 
16  #define B 0.3 // Kpc
17  #define Md1 6.6e10 // Msol
18  #define A1 5.81 // Kpc
19  #define Md2 -2.9e10 // Msol
20  #define A2 17.43 // Kpc
21  #define Md3 3.3e9 // Msol
22  #define A3 34.86 // Kpc
23 
24  #define XMAX 40
25  #define YMAX 4
26 
27  #define SOLAR_SISTEM_DISTANCE_FROM_GC 7.62 // 7.62 [+/-0.32] Kpc it.wikipedia.org/wiki/Via_Lattea
28  //#define SOLAR_SISTEM_DISTANCE_FROM_GC 0.0 // 7.62 [+/-0.32] Kpc it.wikipedia.org/wiki/Via_Lattea
29 
30  //#define NEVENTS 10000
31  //#define NEVENTS 100000
32  #define NEVENTS 1000000
33 
34  #define MNGD_FILENAME "MNGDDistribution.txt"
35  //#define WRITE_FILE
36 
37  //#define XCHECK
38  #define DRAW_H2
39  //#define DRAW_H1
40 
41  using namespace ROOT::Math;
42 
43  double grad2rad = TMath::Pi()/180.;
44  double rad2grad = 180./TMath::Pi();
45 
46 #if defined (DRAW_H1) || defined (DRAW_H2)
47  gStyle->SetTitleH(0.050);
48  gStyle->SetTitleW(0.95);
49  gStyle->SetTitleY(0.98);
50  gStyle->SetTitleFont(12,"D");
51  gStyle->SetTitleColor(kBlue,"D");
52  gStyle->SetTextFont(12);
53  gStyle->SetTitleFillColor(kWhite);
54  gStyle->SetLineColor(kWhite);
55  gStyle->SetNumberContours(256);
56  gStyle->SetMarkerStyle(7);
57  gStyle->SetMarkerSize(2);
58  gStyle->SetCanvasColor(kWhite);
59  gStyle->SetStatBorderSize(1);
60 
61  TCanvas* canvas = new TCanvas("AUNA", "GD", 300,40, 800, 800);
62  canvas->Clear();
63  canvas->ToggleEventStatus();
64  canvas->SetGridx();
65  canvas->SetGridy();
66  canvas->SetFillColor(kWhite);
67 
68 #ifdef DRAW_H1
69  TH1F* h1gd = new TH1F("h1gd","h1gd",360,0,360);
70 // TH1F* h1gd = new TH1F("h1gd","h1gd",360,-180,180);
71 // TH1F* h1gd = new TH1F("h1gd","h1gd",180,-90,90);
72  h1gd->SetLineColor(kRed);
73  h1gd->SetStats(kFALSE);
74  h1gd->SetFillColor(kRed);
75  h1gd->GetXaxis()->SetLabelFont(22);
76  h1gd->GetYaxis()->SetLabelFont(22);
77 // h1gd->GetXaxis()->SetRangeUser(-90,90);
78  h1gd->GetXaxis()->SetTitleFont(22);
79  h1gd->GetYaxis()->SetTitleFont(22);
80  h1gd->GetYaxis()->SetTitle("");
81  h1gd->GetXaxis()->SetTitle("");
82 #endif
83 
84  // define the Miyamoto-Nagai Galactic Disk Model
85 
86 #ifdef DRAW_H2
87  TH2D* h2gd = new TH2D("h2gd","h2gd", 100, -20, 20, 100, -20, 20);
88  h2gd->SetStats(kFALSE);
89  h2gd->GetXaxis()->SetNdivisions(-804);
90  h2gd->GetXaxis()->SetTitleFont(42);
91  h2gd->GetXaxis()->SetTitleOffset(1.2);
92  h2gd->GetXaxis()->SetLabelFont(42);
93  h2gd->GetXaxis()->SetLabelOffset(0.014);
94  h2gd->GetXaxis()->SetTitle("X (kpc)");
95  h2gd->GetXaxis()->CenterTitle(true);
96 
97  h2gd->GetYaxis()->SetNdivisions(-804);
98  h2gd->GetYaxis()->SetTitleFont(42);
99  h2gd->GetYaxis()->SetTitleOffset(1.0);
100  h2gd->GetYaxis()->SetLabelFont(42);
101  h2gd->GetYaxis()->SetLabelOffset(0.01);
102  h2gd->GetYaxis()->SetTitle("Y (kpc)");
103  h2gd->GetYaxis()->CenterTitle(true);
104 
105  h2gd->GetZaxis()->SetLabelFont(42);
106  h2gd->GetZaxis()->SetNoExponent(false);
107  h2gd->SetTitle("h2gd");
108 #endif
109 
110 #endif
111 
112  char formula[256];
113  sprintf(formula,"[1]*[1]*[2]*%s/%s",NUMERATOR,DENOMINATOR);
114 
115  TF3 *gd1 = new TF3("gd1",formula,-XMAX,XMAX,-XMAX,XMAX,-YMAX,YMAX);
116  gd1->SetParameter(0,A1); // a
117  gd1->SetParameter(1,B); // b
118  gd1->SetParameter(2,Md1); // b
119  gd1->SetParameter(3,SOLAR_SISTEM_DISTANCE_FROM_GC);
120 
121  TF3 *gd2 = new TF3("gd2",formula,-XMAX,XMAX,-XMAX,XMAX,-YMAX,YMAX);
122  gd2->SetParameter(0,A2); // a
123  gd2->SetParameter(1,B); // b
124  gd2->SetParameter(2,Md2); // b
125  gd2->SetParameter(3,SOLAR_SISTEM_DISTANCE_FROM_GC);
126 
127  TF3 *gd3 = new TF3("gd3",formula,-XMAX,XMAX,-XMAX,XMAX,-YMAX,YMAX);
128  gd3->SetParameter(0,A3); // a
129  gd3->SetParameter(1,B); // b
130  gd3->SetParameter(2,Md3); // b
131  gd3->SetParameter(3,SOLAR_SISTEM_DISTANCE_FROM_GC);
132 
133  TF3 *gd = new TF3("gd","gd1+gd2+gd3",-XMAX,XMAX,-XMAX,XMAX,-YMAX,YMAX);
134 
135  gd->SetNpx(100);
136  gd->SetNpy(100);
137  gd->SetNpz(100);
138 
139  // Generate randomly sources from the Gatactic Disk
140 
141  double gd_phi[NEVENTS];
142  double gd_theta[NEVENTS];
143  double gd_rho[NEVENTS];
144 
145 #ifdef WRITE_FILE
146  char ofileName[256]="";
147  sprintf(ofileName,"%s",MNGD_FILENAME);
148  cout << ofileName << endl;
149 
150  ofstream fout;
151  fout.open(ofileName, ios::out);
152  if (!fout.good()) {cout << "Error Opening File : " << ofileName << endl;exit(1);}
153 #endif
154 
155  TVector3 xyz;
157  xyz.SetXYZ(xgc,ygc,zgc);
158 
159  double ilongitude;
160  double ilatitude;
161  double olongitude;
162  double olatitude;
163 
164  ilongitude = xyz.Phi()*rad2grad;
165  ilatitude = -(xyz.Theta()-TMath::Pi()/2.)*rad2grad;
166 
167  GalacticToEquatorial(ilongitude,ilatitude,olongitude,olatitude);
168 
169  double gc_phi = olongitude;
170  double gc_theta = olatitude;
171  double gc_rho = sqrt(xyz.Mag2());
172 
173  cout << "gc_phi : " << gc_phi << " gc_theta : " << gc_theta << " " << gc_rho << endl;
174 
175  for (int n=0;n<NEVENTS;n++) {
176 
177  if(n%10000==0) cout << n << endl;
178 
179  double x,y,z;
180  gd->GetRandom3(x,y,z);
181  xyz.SetXYZ(x,y,z);
182 
183  ilongitude = xyz.Phi()*rad2grad;
184  ilatitude = -(xyz.Theta()-TMath::PiOver2())*rad2grad;
185 
186  GalacticToEquatorial(ilongitude,ilatitude,olongitude,olatitude);
187 
188  gd_phi[n] = olongitude;
189  gd_theta[n] = olatitude;
190  gd_rho[n] = sqrt(xyz.Mag2());
191 
192  // compute distance fron galactic center
193  double xgc = (x-SOLAR_SISTEM_DISTANCE_FROM_GC);
194  double gc_rho=sqrt(xgc*xgc+y*y+z*z);
195 
196 #ifdef DRAW_H1
197  //h1gd->Fill(ilatitude);
198  //h1gd->Fill(ilongitude);
199  //h1gd->Fill(olatitude);
200  //h1gd->Fill(olongitude);
201 #endif
202 
203 #ifdef DRAW_H2
204  h2gd->Fill(x,y);
205 #endif
206 
207 #ifdef XCHECK
208 // cout << "x : " << x << " y : " << y << " z : " << z << endl;
209 // cout << n << " " << gd_theta[n] << " " << gd_phi[n] << " " << gd_rho[n] << " " << gc_rho << endl;
210 
211  double Ilongitude=gd_phi[n];
212  double Ilatitude=gd_theta[n];
213  double Olongitude;
214  double Olatitude;
215  EquatorialToGalactic(Ilongitude,Ilatitude,Olongitude,Olatitude);
216 // cout << ilongitude << " " << ilatitude << " " << olongitude << " " << olatitude << endl;
217 // cout << Ilongitude << " " << Ilatitude << " " << Olongitude << " " << Olatitude << endl;
218 // cout << "X : " << xyz.X() << " Y : " << xyz.Y() << " Z : " << xyz.Z() << endl;
219  xyz.SetMagThetaPhi(gd_rho[n],-(Olatitude*grad2rad-TMath::PiOver2()),Olongitude*grad2rad
220 // cout << "X : " << xyz.X() << " Y : " << xyz.Y() << " Z : " << xyz.Z() << endl;
221 #ifdef DRAW_H1
222  h1gd->Fill(xyz.Theta()*rad2grad);
223  //h1gd->Fill(xyz.Phi()*rad2grad);
224 #endif
225 #ifdef DRAW_H2
226 // h2gd->Fill(xyz.X(),xyz.Y());
227 #endif
228  //exit(0);
229 #endif
230 
231 #ifdef WRITE_FILE
232  fout << n << " " << gd_theta[n] << " " << gd_phi[n] << " " << gd_rho[n] << " " << gc_rho << endl;
233 #endif
234  }
235 
236 #ifdef WRITE_FILE
237  fout.close();
238 #endif
239 
240 #ifdef DRAW_H1
241  h1gd->Draw();
242 #endif
243 #ifdef DRAW_H2
244  h2gd->Draw("colfz");
245 #endif
246 
247 // exit(0);
248 }
TVector3 xyz
#define NUMERATOR
#define SOLAR_SISTEM_DISTANCE_FROM_GC
double gd_theta[NEVENTS]
double xgc
GalacticToEquatorial(ilongitude, ilatitude, olongitude, olatitude)
double ygc
double gc_theta
#define DENOMINATOR
TH2D * h2gd
#define XMAX
#define B
int n
Definition: cwb_net.C:10
wavearray< double > z
Definition: Test10.C:32
double olatitude
#define A3
cout<< endl;cout<< "ts size = "<< ts.size()<< " ts rate = "<< ts.rate()<< endl;tf.Forward(ts, wdm);int levels=tf.getLevel();cout<< "tf size = "<< tf.size()<< endl;double dF=tf.resolution();double dT=1./(2 *dF);cout<< "rate(hz) : "<< RATE<< "\t layers : "<< nLAYERS<< "\t dF(hz) : "<< dF<< "\t dT(ms) : "<< dT *1000.<< endl;int itime=TIME_PIXEL_INDEX;int ifreq=FREQ_PIXEL_INDEX;int index=(levels+1)*itime+ifreq;double time=itime *dT;double freq=(ifreq >0)?ifreq *dF:dF/4;cout<< endl;cout<< "PIXEL TIME = "<< time<< " sec "<< endl;cout<< "PIXEL FREQ = "<< freq<< " Hz "<< endl;cout<< endl;wavearray< double > x
TF3 * gd3
double ilatitude
double olongitude
TCanvas * canvas
#define A1
#define Md2
ofstream out
Definition: cwb_merge.C:196
#define Md1
TF3 * gd1
double gd_phi[NEVENTS]
#define MNGD_FILENAME
double Pi
double rad2grad
double grad2rad
#define A2
void EquatorialToGalactic(double ilongitude, double ilatitude, double &olongitude, double &olatitude)
Definition: skycoord.hh:72
#define Md3
TString ofileName
Definition: MergeTrees.C:37
double gc_rho
double zgc
TF3 * gd2
double ilongitude
double gc_phi
#define NEVENTS
#define YMAX
sprintf(formula,"[1]*[1]*[2]*%s/%s", NUMERATOR, DENOMINATOR)
TF3 * gd
double gd_rho[NEVENTS]
char formula[256]
wavearray< double > y
Definition: Test10.C:31
exit(0)