Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DrawNRI.C
Go to the documentation of this file.
1 //
2 // Draw Network Response Index skymap
3 // Author : Gabriele Vedovato
4 
5 
6 #define L1_ENABLED
7 #define H1_ENABLED
8 #define V1_ENABLED
9 #define H2_ENABLED
10 //#define G1_ENABLED
11 //#define T1_ENABLED
12 //#define A1_ENABLED
13 //#define A2_ENABLED
14 //#define J1_ENABLED
15 
16 #define H1_SIGMA 1
17 #define L1_SIGMA 1
18 #define G1_SIGMA 1
19 #define V1_SIGMA 1
20 #define T1_SIGMA 1
21 //#define H2_SIGMA 2
22 #define H2_SIGMA 1
23 #define A1_SIGMA 1
24 #define A2_SIGMA 1
25 #define J1_SIGMA 1
26 
27 
28 #define NTRIES 1000000
29 //#define NTRIES 100000
30 
31 //#define USE_NOISE
32 
33 //#define WRITE_PLOT
34 #define PLOT_POSTFIX "_WM"
35 
36 #define SNR 10
37 
38 #define RESOLUTION 1
39 //#define RESOLUTION 2
40 //#define RESOLUTION 4
41 
42 
43 //#define WRONG_DIRECTION
44 
45 
46 //#define COORDINATES "cWB"
47 #define COORDINATES "Geographic"
48 
49 #define PROJECTION ""
50 //#define PROJECTION "hammer"
51 //#define PROJECTION "sinusoidal"
52 
53 #define DISPLAY_WORLD_MAP
54 
55 //#define DISPLAY_PERC_UNDER2
56 
57 //#define NET_GAMMA 0.02
58 #define NET_GAMMA 0.2
59 //#define NET_GAMMA 0.0
60 
61 
62 static inline int net9(double*, double, double*, double, double);
63 
64 int GetSkyMapSensitivity(double*& x, double*& y, double*& z, double*& t,
65  TString& title, TString& ofileName, int& ndet);
66 
67 void DrawNRI() {
68 
69  int ndet=0;
70  double *x,*y,*z,*t;
71  TString title;
73 
74  int size = GetSkyMapSensitivity(x,y,z,t,title,ofileName,ndet);
75  if (ndet==0) {cout << "No detector !!!" << endl;exit(0);}
76 
77  TH2D* Fx = new TH2D("Fx","Fx", 360*RESOLUTION, 0, 360, 180*RESOLUTION, 0, 180);
78  TH2D* h2 = new TH2D("angle","angle", 360*RESOLUTION, 0, 360, 180*RESOLUTION, 0, 180);
79  h2->SetStats(kFALSE);
80 
81  h2->GetXaxis()->SetNdivisions(70318);
82  h2->GetXaxis()->SetLabelFont(42);
83  h2->GetXaxis()->SetLabelOffset(0.012);
84  h2->GetXaxis()->SetTitleOffset(1.1);
85  h2->GetXaxis()->SetTitleFont(72);
86  h2->GetYaxis()->SetNdivisions(409);
87  h2->GetYaxis()->SetLabelFont(42);
88  h2->GetYaxis()->SetLabelOffset(0.01);
89  h2->GetZaxis()->SetLabelFont(42);
90  h2->GetXaxis()->SetTitleFont(42);
91  h2->GetXaxis()->SetTitle("Phi");
92  h2->GetXaxis()->CenterTitle(true);
93  h2->GetYaxis()->SetTitleFont(42);
94  h2->GetYaxis()->SetTitle("Theta");
95  h2->GetYaxis()->CenterTitle(true);
96  h2->GetZaxis()->SetLabelOffset(0.00001);
97  h2->GetZaxis()->SetNoExponent(false);
98 
99  h2->SetTitle(title);
100 #ifdef DISPLAY_PERC_UNDER2
101  int ncnt_under2[360*RESOLUTION][180*RESOLUTION];
102  for(int i=0;i<360*RESOLUTION;i++) for(int j=0;j<180*RESOLUTION;j++) ncnt_under2[i][j]=0;
103 #endif
104  int ncnt[360*RESOLUTION][180*RESOLUTION];
105  for(int i=0;i<360*RESOLUTION;i++) for(int j=0;j<180*RESOLUTION;j++) ncnt[i][j]=0;
106  for (int i=0;i<size;i++) {
107  int ii=int(x[i]); if(ii>359) ii=359;
108  int jj=int(y[i]); if(jj>179) jj=179;
109  ii*=RESOLUTION;
110  jj*=RESOLUTION;
111  ncnt[ii][jj]++;
112 #ifdef DISPLAY_PERC_UNDER2
113  if(z[i]<2) ncnt_under2[ii][jj]++;
114  Fx->SetBinContent(ii+1,jj+1,t[i]);
115 #else
116  double binc = h2->GetBinContent(ii+1,jj+1);
117  h2->SetBinContent(ii+1,jj+1,binc+z[i]);
118 #endif
119  }
120  for(int i=0;i<360*RESOLUTION;i++) for(int j=0;j<180*RESOLUTION;j++) {
121 #ifdef DISPLAY_PERC_UNDER2
122  if(ncnt[i][j]>0) h2->SetBinContent(i+1,j+1,100.*(double(ncnt_under2[i][j])/double(ncnt[i][j])));
123 #else
124  double binc = h2->GetBinContent(i+1,j+1);
125  if(ncnt[i][j]>0) binc/=ncnt[i][j];
126  h2->SetBinContent(i+1,j+1,binc);
127 #endif
128  }
129  //h2->Draw("colfz");
130 
131  size=180*RESOLUTION*360*RESOLUTION;
132  double* xx = new double[size];
133  double* yy = new double[size];
134  double* zz = new double[size];
135 
136  int cnt=0;
137  for(int i=0;i<360*RESOLUTION;i++) for(int j=0;j<180*RESOLUTION;j++) {
138 #ifdef DISPLAY_PERC_UNDER2
139  double perc_under2 = h2->GetBinContent(i+1,j+1);
140  double fx = Fx->GetBinContent(i+1,j+1);
141 #else
142  double nri = h2->GetBinContent(i+1,j+1);
143 #endif
144  xx[cnt]=i;
145  yy[cnt]=j;
146 #ifdef DISPLAY_PERC_UNDER2
147  zz[cnt]=perc_under2;
148  //if(perc_under2>90) zz[cnt]=perc_under2;
149  //if(perc_under2>0) zz[cnt]=fx;
150  //if(perc_under2>0) zz[cnt]=fx*(100.-perc_under2);
151  //zz[cnt]=fx;
152 #else
153  zz[cnt]=nri;
154 #endif
155  cnt++;
156  }
157 
158 
159  gskymap* gSM = new gskymap(int(7));
160  gSM->SetOptions(PROJECTION,COORDINATES,RESOLUTION);
161 
162 #ifdef DISPLAY_WORLD_MAP
163  gSM->SetWorldMap();
164 #endif
165  TH2D* hh2 = (TH2D*)gSM->GetHistogram();
166 // hh2->GetZaxis()->SetRangeUser(0,1);
167  gSM->SetTitle(title);
168  if(COORDINATES=="Geographic") {
169  for (int i=0;i<size;i++) {
170  CwbToGeographic(xx[i],yy[i],xx[i],yy[i]);
171  }
172  }
173  gSM->FillData(size, xx, yy, zz);
174 // gSM->SetPalette(1);
175  gSM->Draw(0);
176 
177 
178 #ifdef WRITE_PLOT
179  cout << "Print File : " << ofileName.Data() << endl;
180  canvas->Print(ofileName);
181 #endif
182 
183 }
184 
185 #define NDETECTORS 9
186 
187 int
188 GetSkyMapSensitivity(double*& x, double*& y, double*& z, double*& t, TString& title, TString& ofileName, int& ndet) {
189 
190  bool detector_selected[NDETECTORS];
191 #ifdef H1_ENABLED
192  detector_selected[0]=true; // LHO1
193 #else
194  detector_selected[0]=false; // LHO1
195 #endif
196 #ifdef L1_ENABLED
197  detector_selected[1]=true; // LLO
198 #else
199  detector_selected[1]=false; // LLO
200 #endif
201 #ifdef G1_ENABLED
202  detector_selected[2]=true; // GEO
203 #else
204  detector_selected[2]=false; // GEO
205 #endif
206 #ifdef V1_ENABLED
207  detector_selected[3]=true; // VIRGO
208 #else
209  detector_selected[3]=false; // VIRGO
210 #endif
211 #ifdef T1_ENABLED
212  detector_selected[4]=true; // TAMA
213 #else
214  detector_selected[4]=false; // TAMA
215 #endif
216 #ifdef H2_ENABLED
217  detector_selected[5]=true; // LHO2
218 #else
219  detector_selected[5]=false; // LHO2
220 #endif
221 #ifdef A1_ENABLED
222  detector_selected[6]=true; // AIGO
223 #else
224  detector_selected[6]=false; // AIGO
225 #endif
226 #ifdef A2_ENABLED
227  detector_selected[7]=true; // AIGO2
228 #else
229  detector_selected[7]=false; // AIGO2
230 #endif
231 #ifdef J1_ENABLED
232  detector_selected[8]=true; // LCGT
233 #else
234  detector_selected[8]=false; // LCGT
235 #endif
236 
237  TString detector_name[NDETECTORS];
238  detector_name[0]="H1"; // LHO1
239  detector_name[1]="L1"; // LLO
240  detector_name[2]="G1"; // GEO
241  detector_name[3]="V1"; // VIRGO
242  detector_name[4]="T1"; // TAMA
243  detector_name[5]="H2"; // LHO2
244  detector_name[6]="A1"; // AIGO
245  detector_name[7]="A2"; // AIGO2
246  detector_name[8]="J1"; // LCGT
247 
248  double detector_sensitivity[NDETECTORS];
249  detector_sensitivity[0]=H1_SIGMA; // LHO1
250  detector_sensitivity[1]=L1_SIGMA; // LLO
251  detector_sensitivity[2]=G1_SIGMA; // GEO
252  detector_sensitivity[3]=V1_SIGMA; // VIRGO
253  detector_sensitivity[4]=T1_SIGMA; // TAMA
254  detector_sensitivity[5]=H2_SIGMA; // LHO2
255  detector_sensitivity[6]=A1_SIGMA; // AIGO
256  detector_sensitivity[7]=A2_SIGMA; // AIGO2
257  detector_sensitivity[8]=J1_SIGMA; // LCGT
258 
259  TString sdetectors;
260  if (detector_selected[0]) sdetectors+="LHO1 ";
261  if (detector_selected[1]) sdetectors+="LLO ";
262  if (detector_selected[2]) sdetectors+="GEO ";
263  if (detector_selected[3]) sdetectors+="VIRGO ";
264  if (detector_selected[4]) sdetectors+="TAMA ";
265  if (detector_selected[5]) sdetectors+="LHO2 ";
266  if (detector_selected[6]) sdetectors+="AIGO ";
267  if (detector_selected[7]) sdetectors+="AIGO2 ";
268  if (detector_selected[8]) sdetectors+="LCGT ";
269 
270  for (int k=0;k<NDETECTORS;k++) {
271  if (detector_selected[k]) {
272  ndet++;
273  }
274  }
275 
276  char hacc_title[256];
277 #ifdef USE_NOISE
278  sprintf(hacc_title,"%s Network Response Index (gamma=%2.2f)",sdetectors.Data(),NET_GAMMA);
279 #else
280  sprintf(hacc_title,"%s Network Response Index (gamma=%2.2f)",sdetectors.Data(),NET_GAMMA);
281 #endif
282  title = hacc_title;
283 
284 
285  char ofile_title[256];
286 #ifdef USE_NOISE
287  sprintf(ofile_title,"%sNRI%s",sdetectors.Data(),PLOT_POSTFIX);
288 #else
289  sprintf(ofile_title,"%sNRI%s",sdetectors.Data(),PLOT_POSTFIX);
290 #endif
291  if(PROJECTION=="hammer") sprintf(ofile_title,"%s_hammer.png",ofile_title);
292  else sprintf(ofile_title,"%s.png",ofile_title);
293  ofileName = ofile_title;
294  ofileName.ReplaceAll(" ","_");
295 
297 
298  for(int n=0;n<NDETECTORS;n++) D[n] = new detector((char*)detector_name[n].Data());
299 
300  skymap sm(0.4,0,180,0,360);
301  int L = sm.size();
302 
303  double pi = TMath::Pi();
306  double X[NDETECTORS];
307  int size = NTRIES;
308  x = new double[size];
309  y = new double[size];
310  z = new double[size];
311  t = new double[size];
312  int cnt=0;
313  gRandom->SetSeed(0);
314  for (int i=0;i<NTRIES;i++) {
315  if(i%100000==0) cout << i << endl;
316  int idx = int(gRandom->Uniform(0,L));
317 
318  //double phi=sm.getPhi(idx);
319  //double theta=sm.getTheta(idx);
320  //double psi=0;
321 
322  double phi=gRandom->Uniform(0,360);
323  double theta=gRandom->Uniform(0,180);
324  double psi=gRandom->Uniform(0,180);
325 
326  double Hp=gRandom->Uniform(-1,1);
327  double Hx=gRandom->Uniform(-1,1);
328 
329  double E=0;
330  for (int k=0;k<NDETECTORS;k++) {
331  if (detector_selected[k]) {
332  sF[k] = D[k]->antenna(theta,phi,psi);
333  F[k] = D[k]->antenna(theta,phi,0);
334 #ifdef USE_NOISE
335 // X[k] = gRandom->Uniform(-1,1); // non GW signals
336 double A=1.;
337 //if (k==3) A=1.;
338  X[k] = A*gRandom->Gaus(0,1); // non GW signals
339 #else
340  X[k] = Hp*sF[k].real()+Hx*sF[k].imag();
341 #endif
342  E+=X[k]*X[k];
343 #ifdef WRONG_DIRECTION
344  F[k] = D[k]->antenna(gRandom->Uniform(0,180),gRandom->Uniform(0,360),0);
345 #endif
346  }
347  }
348  E=sqrt(E);
349  for (int k=0;k<NDETECTORS;k++) {
350  if (detector_selected[k]) {
351  X[k] = X[k]*SNR/E + gRandom->Gaus(0.,1.);
352  }
353  }
354 
355  double gp=0;
356  double gx=0;
357  double gI=0;
358  for (int k=0;k<NDETECTORS;k++) {
359  if (detector_selected[k]) {
360  gp+=F[k].real()*F[k].real();
361  gx+=F[k].imag()*F[k].imag();
362  gI+=F[k].real()*F[k].imag();
363  }
364  }
365  double gR = (gp-gx)/2.;
366  double gr = (gp+gx)/2.;
367  double gc = sqrt(gR*gR+gI*gI); // norm of complex antenna pattern
368 
369  double co = (gc+gR); // cos to DPF
370  double si = gI; // sin to DPF
371  double Fp_dpf[NDETECTORS];
372  double Fx_dpf[NDETECTORS];
373  double mFp_dpf = 0;
374  double mFx_dpf = 0;
375  for (int k=0;k<NDETECTORS;k++) {
376  if (detector_selected[k]) {
377  Fp_dpf[k]=F[k].real()*co+F[k].imag()*si;
378  mFp_dpf+=Fp_dpf[k]*Fp_dpf[k];
379  Fx_dpf[k]=-F[k].real()*si+F[k].imag()*co;
380  mFx_dpf+=Fx_dpf[k]*Fx_dpf[k];
381  } else {
382  Fp_dpf[k]=0;
383  Fx_dpf[k]=0;
384  }
385  }
386  double rip=0;
387  double rix=0;
388  for (int k=0;k<NDETECTORS;k++) {
389  if (detector_selected[k]) {
390  rip+=Fp_dpf[k];
391  rix+=Fx_dpf[k];
392  }
393  }
394  double ri=rip*rip/mFp_dpf+rix*rix/mFx_dpf;
395 
396 
397  double Xp=0;
398  double Xx=0;
399  for (int k=0;k<NDETECTORS;k++) {
400  if (detector_selected[k]) {
401  Xp+=X[k]*F[k].real();
402  Xx+=X[k]*F[k].imag();
403  }
404  }
405  double uc = (Xp*gx - Xx*gI); // u cos of rotation to PCF
406  double us = (Xx*gp - Xp*gI); // u sin of rotation to PCF
407  double vc = (gp*uc + gI*us); // (u*f+)/|u|^2 - 'cos' for v
408  double vs = (gx*us + gI*uc); // (u*fx)/|u|^2 - 'sin' for v
409  double u[NDETECTORS];
410  double v[NDETECTORS];
411  double um=0;
412  double vm=0;
413  for (int k=0;k<NDETECTORS;k++) {
414  u[k]=0;
415  v[k]=0;
416  if (detector_selected[k]) {
417  u[k]=F[k].real()*uc+F[k].imag()*us;
418  um+=u[k]*u[k];
419  v[k]=-F[k].imag()*vc+F[k].real()*vs;
420  vm+=v[k]*v[k];
421  }
422  }
423  double Xrip=0;
424  double Xrix=0;
425  for (int k=0;k<NDETECTORS;k++) {
426  if (detector_selected[k]) {
427  Xrip+=u[k];
428  Xrix+=v[k];
429  }
430  }
431  double Xri=Xrip*Xrip/um+Xrix*Xrix/vm;
432 
433 // Compute Network Detector Index
434  double gamma=NET_GAMMA;
435  double GAMMA = 1.-gamma*gamma; // network regulator
436  double ndi=net9(u,um,v,vm,GAMMA);
437  //double ndi=net9(Fp_dpf,mFp_dpf,Fx_dpf,mFx_dpf,GAMMA);
438  double uFp=0;
439  double uFx=0;
440  for (int k=0;k<NDETECTORS;k++) {
441  if (detector_selected[k]) {
442  uFp+=u[k]*Fp_dpf[k];
443  uFx+=u[k]*Fx_dpf[k];
444  }
445  }
446  uFp/=sqrt(mFp_dpf*um);
447  uFx/=sqrt(mFx_dpf*um);
448  double angle = fabs(atan2(uFx,uFp)*180./pi);
449  if (angle>90) angle=180.-angle;
450 
451  double wm=0; // weak cos
452  double om=0; // hard cos
453  double cw=0; // weak cos
454  double ch=0; // hard cos
455  double Et=0; // energy
456  for (int k=0;k<NDETECTORS;k++) {
457  if (detector_selected[k]) {
458  cw+=u[k]*X[k];
459  ch+=Fp_dpf[k]*X[k];
460  Et+=X[k]*X[k];
461  wm+=u[k]*u[k];
462  om+=Fp_dpf[k]*Fp_dpf[k];
463  }
464  }
465  double sh = (1-cw*cw/(wm*Et))/(1-ch*ch/(om*Et)); // sin^2 between the planes
466  if (sh<0) sh=0;
467 
468  x[cnt]=phi;
469  y[cnt]=theta;
470  //z[cnt]=sh;
471  z[cnt]=ndi;
472 
473  double Fp = sqrt(gr+gc);
474  double Fx = sqrt(gr-gc);
475  t[cnt]=Fx;
476 
477  cnt++;
478  }
479  return size;
480 }
481 
482 inline int net9(double* u, double um, double* v, double vm, double g) {
483  double q = (1.-g)*um;
484 
485  return int(u[0]*u[0]>q) - int((u[0]*u[0]/um+v[0]*v[0]/vm)>g) +
486  int(u[1]*u[1]>q) - int((u[1]*u[1]/um+v[1]*v[1]/vm)>g) +
487  int(u[2]*u[2]>q) - int((u[2]*u[2]/um+v[2]*v[2]/vm)>g) +
488  int(u[3]*u[3]>q) - int((u[3]*u[3]/um+v[3]*v[3]/vm)>g) +
489  int(u[4]*u[4]>q) - int((u[4]*u[4]/um+v[4]*v[4]/vm)>g) +
490  int(u[5]*u[5]>q) - int((u[5]*u[5]/um+v[5]*v[5]/vm)>g) +
491  int(u[6]*u[6]>q) - int((u[6]*u[6]/um+v[6]*v[6]/vm)>g) +
492  int(u[7]*u[7]>q) - int((u[7]*u[7]/um+v[7]*v[7]/vm)>g) +
493  int(u[8]*u[8]>q) - int((u[8]*u[8]/um+v[8]*v[8]/vm)>g);
494 }
495 
wavearray< double > t(hp.size())
TH2D * GetHistogram()
Definition: gskymap.hh:120
gskymap * gSM
double imag() const
Definition: wavecomplex.hh:52
static double g(double e)
Definition: GNGen.cc:98
#define T1_SIGMA
Definition: DrawNRI.C:20
detector D
Definition: TestBandPass.C:15
#define RESOLUTION
Definition: DrawNRI.C:38
#define A1_SIGMA
Definition: DrawNRI.C:23
void DrawNRI()
Definition: DrawNRI.C:67
WSeries< float > v[nIFO]
Definition: cwb_net.C:62
#define NDETECTORS
Definition: DrawNRI.C:185
int n
Definition: cwb_net.C:10
wavearray< double > z
Definition: Test10.C:32
double angle
TString("c")
static int net9(double *, double, double *, double, double)
Definition: DrawNRI.C:482
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
float theta
return wmap canvas
double real() const
Definition: wavecomplex.hh:51
Long_t size
int j
Definition: cwb_net.C:10
#define G1_SIGMA
Definition: DrawNRI.C:18
i drho i
void Draw(int dpaletteId=0, Option_t *option="colfz")
Definition: gskymap.cc:442
#define H1_SIGMA
Definition: DrawNRI.C:16
double pi
Definition: TestChirp.C:18
#define L1_SIGMA
Definition: DrawNRI.C:17
#define V1_SIGMA
Definition: DrawNRI.C:19
#define COORDINATES
Definition: DrawNRI.C:47
void FillData(int size, double *phi, double *theta, double *binc)
Definition: gskymap.cc:376
float phi
wavecomplex antenna(double, double, double=0.)
param: source theta,phi, polarization angle psi in degrees
Definition: detector.cc:473
float psi
wavearray< double > xx
Definition: TestFrame1.C:11
#define J1_SIGMA
Definition: DrawNRI.C:25
TGraph * gr
i() int(T_cor *100))
double Pi
gwavearray< double > * gx
#define PLOT_POSTFIX
Definition: DrawNRI.C:34
#define NET_GAMMA
Definition: DrawNRI.C:58
int k
static double A
Definition: geodesics.cc:8
x *double Et
Definition: ComputeSNR.C:40
double F
Definition: skymap.hh:45
wavearray< double > yy
Definition: TestFrame5.C:12
TString ofileName
Definition: MergeTrees.C:37
void SetTitle(TString title)
Definition: gskymap.hh:134
char title[256]
Definition: SSeriesExample.C:1
#define PROJECTION
Definition: DrawNRI.C:49
int GetSkyMapSensitivity(double *&x, double *&y, double *&z, double *&t, TString &title, TString &ofileName, int &ndet)
Definition: DrawNRI.C:188
void SetWorldMap(bool drawWorldMap=true)
Definition: gskymap.hh:136
double fabs(const Complex &x)
Definition: numpy.cc:37
#define NTRIES
Definition: DrawNRI.C:28
void CwbToGeographic(double ilongitude, double ilatitude, double &olongitude, double &olatitude)
Definition: skycoord.hh:396
int cnt
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
#define A2_SIGMA
Definition: DrawNRI.C:24
size_t size()
Definition: skymap.hh:118
wavearray< double > y
Definition: Test10.C:31
void SetOptions(TString projection="hammer", TString coordinate="Geographic", double resolution=1, bool goff=false)
Definition: gskymap.cc:66
#define SNR
Definition: DrawNRI.C:36
#define H2_SIGMA
Definition: DrawNRI.C:22
exit(0)
#define GAMMA(TYPE)
Definition: xroot.hh:5