Logo coherent WaveBurst  
Library Reference Guide
Logo
CreateWhitenedInspirals.C
Go to the documentation of this file.
1 //#define GENERATE_XML
2 
3 #define ADV_LIGO_PSD "detectors_PSD/LIGO_zero_det_HP.txt"
4 #define SRATE 16384
5 
6 #define FREQ_MIN 32
7 #define FREQ_MAX 2048
8 
9 #define OFILE "inspirals.root"
10 
11 #define nWAVEFORM 1000
12 
13 #define WHITENING
14 
16 double GetBoundaries(wavearray<double> x, double P, double& bT, double& eT);
17 
18 void
20  //
21  // generate LAL whitened inspiral waveforms
22  // Author : Gabriele Vedovato
23 
25  cout << "PSD : " << " rate : " << psd.rate() << " size : " << psd.size() << endl;
26 
27  CWB::mdc MDC;
28 
29 #ifdef GENERATE_XML
30  // ---------------------------------
31  // set inspiral parms
32  // ---------------------------------
34  inspOptions = "--time-step 60.0 --time-interval 3 ";
35  inspOptions+= "--l-distr random ";
36  inspOptions+= "--gps-start-time 931072130 --gps-end-time 933491330 ";
37  inspOptions+= "--d-distr volume --m-distr totalMassRatio --i-distr uniform ";
38  inspOptions+= "--f-lower 10.000000 ";
39  inspOptions+= "--min-mass1 25.000000 --max-mass1 225.000000 ";
40  inspOptions+= "--min-mass2 25.000000 --max-mass2 225.000000 ";
41  inspOptions+= "--min-mtotal 50.000000 --max-mtotal 250.000000 ";
42  inspOptions+= "--min-mratio 0.25 --max-mratio 1.000000 ";
43  inspOptions+= "--min-distance 1000000.0 --max-distance 1500000.0 ";
44  inspOptions+= "--approximant EOBNRv2pseudoFourPN --disable-spin ";
45  inspOptions+= "--taper-injection start --seed 123456789 ";
46  inspOptions+= "--output inspirals.xml "; // set output xml file
47 
48  // set and write xml file
49  MDC.SetInspiral("EOBNRv2",inspOptions);
50 #endif
51 
52  // set inspiral using xml file (speedup GetInspiral method)
53  TString inspOptions="--xml inspirals.xml";
54  MDC.SetInspiral("EOBNRv2",inspOptions);
55 
56  int gps_start_time = 931072131;
57  int gps_end_time = gps_start_time+100;
58 
60  w.start(0);
61  w.rate(SRATE);
63 
64  TFile ofile(OFILE,"RECREATE");
65 
66  // Get the first waveform hp,hx components starting from gps = 931072130
67  for(int n=0;n<nWAVEFORM;n++) {
68  cout << n << " gps_start_time " << gps_start_time << " gps_end_time " << gps_end_time << endl;
69  hp = MDC.GetInspiral("hp",gps_start_time,gps_end_time);
70  cout << "size : " << hp.size() << " rate : " << hp.rate() << " start : " << (int)hp.start() << endl;
71 
72  if(hp.size()>w.size() || (hp.size()==0)) {
73  gps_start_time += 50;
74  gps_end_time = gps_start_time+100;
75  continue;
76  }
77 
78  for(int i=0;i<hp.size();i++) w[i]=hp[i];
79  for(int i=hp.size();i<w.size();i++) w[i]=0;
80 
81 #ifdef WHITENING
82  // waveform whitening
83  w.FFTW(1);
84  double df = w.rate()/w.size();
85  for(int i=0;i<w.size();i++) {
86  double f=i*df;
87  if(f<FREQ_MIN || f>FREQ_MAX) {
88  w[i]=0.;
89  } else {
90  w[i]/=psd[int(i/2)];
91  }
92  }
93  w.FFTW(-1);
94  w*=1./w.rms(); // normalization
95 #endif
96 
97  double bT,eT;
98  GetBoundaries(w, 0.99, bT, eT);
99  cout << w.start() << " " << bT << " " << eT << " " << eT-bT << endl;
100 
101  double dt = 1./w.rate();
102  int size = (eT-bT)/dt;
103  int os = bT/dt;
104  wavearray<double> W(size);
105  W.start(0);
106  W.rate(w.rate());
107  for(int i=0;i<size;i++) W[i]=w[i+os];
108 
109  // save whitened waveform to root file
110  W.Write("Inspiral");
111 
112 // MDC.Draw(W,MDC_TIME);break;
113 // MDC.Draw(W,MDC_FFT); // draw hp in frequency domain
114 // MDC.Draw(W,MDC_TF); // draw hp in time-frequency domain;
115 
116  //gps_start_time = hp.start()+ hp.size()/hp.rate();
117  gps_start_time += 50;
118  gps_end_time = gps_start_time+100;
119  }
120 
121  ofile.Close();
122 }
123 
126 
127  #define FREQ_RES 0.125 // Hz
128 
130 
131  // read PSD
132  ifstream in;
133  in.open(fName.Data(),ios::in);
134  if (!in.good()) {cout << "ReadDetectorPSD - Error Opening File : " << fName.Data() << endl;exit(1);}
135  cout << "ReadDetectorPSD - Read File : " << fName.Data() << endl;
136 
137  int size=0;
138  char str[1024];
139  while(true) {
140  in.getline(str,1024);
141  if (!in.good()) break;
142  if(str[0] != '#') size++;
143  }
144  //cout << "size " << size << endl;
145  in.clear(ios::goodbit);
146  in.seekg(0, ios::beg);
147 
148  wavearray<double> ifr(size);
149  wavearray<double> ish(size);
150 
151  int cnt=0;
152  while (1) {
153  in >> ifr.data[cnt] >> ish.data[cnt];
154  if (!in.good()) break;
155  if(ish.data[cnt]<=0)
156  {cout << "ReadDetectorPSD - input sensitivity file : " << fName.Data()
157  << " contains zero at frequency : " << ifr.data[cnt] << " Hz " << endl;exit(1);}
158  cnt++;
159  }
160  in.close();
161 
162  // convert frequency sample
163  size=int((SRATE/2)/FREQ_RES);
164  wavearray<double> ofr(size);
165  wavearray<double> osh(size);
166 
167  for(int i=0;i<(int)ofr.size();i++) ofr[i]=i*FREQ_RES;
168  TB.convertSampleRate(ifr,ish,ofr,osh);
169 
170  osh.rate(SRATE/2);
171  osh*=1./sqrt(osh.size()/(SRATE/2)); // normalization
172 
173  return osh;
174 }
175 
176 double
177 GetBoundaries(wavearray<double> x, double P, double& bT, double& eT) {
178 
179  if(P<0) P=0;
180  if(P>1) P=1;
181 
182  int N = x.size();
183 
184  double E = 0; // signal energy
185  double avr = 0; // average
186  for(int i=0;i<N;i++) {avr+=i*x[i]*x[i]; E+=x[i]*x[i];}
187  int M=int(avr/E); // central index
188 
189  // search range which contains percentage P of the total energy E
190  int jB=0;
191  int jE=N-1;
192  double a,b;
193  double sum = ((M>=0)&&(M<N)) ? x[M]*x[M] : 0.;
194  for(int j=1; j<N; j++) {
195  a = ((M-j>=0)&&(M-j<N)) ? x[M-j] : 0.;
196  b = ((M+j>=0)&&(M+j<N)) ? x[M+j] : 0.;
197  if(a) jB=M-j;
198  if(b) jE=M+j;
199  sum += a*a+b*b;
200  if(sum/E > P) break;
201  }
202 
203  bT = x.start()+jB/x.rate();
204  eT = x.start()+jE/x.rate();
205 
206  return eT-bT;
207 }
208 
209 
char ofile[1024]
#define SRATE
double M
Definition: DrawEBHH.C:13
#define FREQ_RES
virtual void rate(double r)
Definition: wavearray.hh:141
wavearray< double > a(hp.size())
int n
Definition: cwb_net.C:28
double GetBoundaries(wavearray< double > x, double P, double &bT, double &eT)
TString("c")
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<< "\ layers : "<< nLAYERS<< "\ dF(hz) : "<< dF<< "\ 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
wavearray< double > psd(33)
CWB::Toolbox TB
CWB::mdc * MDC
Long_t size
wavearray< double > hp
Definition: DrawInspiral.C:43
virtual void start(double s)
Definition: wavearray.hh:137
int j
Definition: cwb_net.C:28
i drho i
#define N
cout<< "SNR "<< xsnr<< endl;wavearray< double > f
Definition: ComputeSNR.C:75
virtual double rms()
Definition: wavearray.cc:1206
wavearray< double > w
Definition: Test1.C:27
virtual size_t size() const
Definition: wavearray.hh:145
char str[1024]
Definition: mdc.hh:248
wavearray< double > ReadDetectorPSD(TString fName)
static void convertSampleRate(wavearray< double > iw, wavearray< double > ow)
Definition: Toolbox.cc:5829
i() int(T_cor *100))
void CreateWhitenedInspirals()
TString inspOptions
#define ADV_LIGO_PSD
double dt
virtual void FFTW(int=1)
Definition: wavearray.cc:896
ifstream in
#define OFILE
int cnt
double df
#define FREQ_MAX
DataType_t * data
Definition: wavearray.hh:319
char fName[256]
#define nWAVEFORM
exit(0)
char os[1024]
double avr