Logo coherent WaveBurst  
Config Reference Guide
Logo
Create_O3_LH_ChunkSlagRndFiles.C
Go to the documentation of this file.
1 #include <algorithm> // std::random_shuffle
2 #include <vector> // std::vector
3 #include <ctime> // std::time
4 #include <cstdlib> // std::rand, std::srand
5 #include "../../MACROS/ReadChunkList.C"
6 
7 #define SEED 150914
8 
9 #define CHUNK_FILE_LIST "Chunk_List.txt"
10 #define CHUNK_MAX_SIZE 100
11 
12 #define EXECUTE
13 
14 void Create_SlagRndFile(TString slags_dir, int chunkID, int slagMax, char* cwb_config_env, char* calibVer, char* search);
15 void shuffle(std::vector<int>& vector, int seed=150914);
16 
17 void Create_O3_LH_ChunkSlagRndFiles(TString slags_dir, TString calibVer, TString calibType, TString search="") {
18 
19  CWB::Toolbox TB;
20 
21  // get CWB_CONFIG
22  char cwb_config_env[1024] = "";
23  if(gSystem->Getenv("CWB_CONFIG")!=NULL) {
24  strcpy(cwb_config_env,TString(gSystem->Getenv("CWB_CONFIG")).Data());
25  }
26 
27  // get O3_GPS_START_CXX, O3_GPS_STOP_CXX
28  TString o3_gps_start_cxx = TString::Format("O3_GPS_START_%s",calibVer.Data());
29  double gps_start=0;
30  if(gSystem->Getenv(o3_gps_start_cxx.Data())!=NULL) {
31  gps_start=TString(gSystem->Getenv(o3_gps_start_cxx.Data())).Atof();
32  } else {
33  cout << "Error: O3_GPS_START_CXX env not defined" << endl;exit(1);
34  }
35  TString o3_gps_stop_cxx = TString::Format("O3_GPS_STOP_%s",calibVer.Data());
36  double gps_stop=0;
37  if(gSystem->Getenv(o3_gps_stop_cxx.Data())!=NULL) {
38  gps_stop=TString(gSystem->Getenv(o3_gps_stop_cxx.Data())).Atof();
39  } else {
40  cout << "Error: O3_GPS_STOP_CXX env not defined" << endl;exit(1);
41  }
42 
43  char chunk_file_list[1024];
44  sprintf(chunk_file_list,"%s/O3/CHUNKS/%s/%s",cwb_config_env,search.Data(),CHUNK_FILE_LIST);
45  cout << chunk_file_list << endl;
46 
47  int chunk[CHUNK_MAX_SIZE];
48  double start[CHUNK_MAX_SIZE];
49  double stop[CHUNK_MAX_SIZE];
50 
51  int nChunks = ReadChunkList(chunk_file_list,chunk,start,stop);
52 
53 
54  int nIFO = 2;
55 
56  char ifo[NIFO_MAX][8];
57  strcpy(ifo[0],"L1");
58  strcpy(ifo[1],"H1");
59 
60  vector<TString> ifos(nIFO);
61  for(int n=0;n<nIFO;n++) ifos[n]=ifo[n];
62 
63  int slagMin = 0; // if slagMax=0 -> slagMin must be < slagMax
64  int slagOff = 0;
65  size_t* slagSite = NULL; // site index starting with 0
66  char* slagFile = NULL; // slag file list
67 
68  //jobs
69  int segLen = 1200;
70 
71  // dq file list
72  // {ifo, dqcat_file, dqcat[0/1/2], shift[sec], inverse[false/true], 4columns[true/false]}
73  int nDQF=10;
74  dqfile DQF[10]={
75 
76  {"L1" ,"", CWB_CAT0, 0., false, false},
77  {"H1" ,"", CWB_CAT0, 0., false, false},
78 
79  {"L1" ,"", CWB_CAT1, 0., true, false},
80  {"H1" ,"", CWB_CAT1, 0., true, false},
81 
82  {"L1" ,"", CWB_CAT2, 0., true, false},
83  {"H1" ,"", CWB_CAT2, 0., true, false},
84 
85  {"L1" ,"", CWB_CAT1, 0., true, false},
86  {"H1" ,"", CWB_CAT1, 0., true, false},
87 
88  {"L1" ,"", CWB_CAT0, 0., false, false},
89  {"H1" ,"", CWB_CAT0, 0., false, false}
90 
91  };
92 
93  sprintf(DQF[0].file, "%s/O3/DATA/%s/DQ/%s/L1_cat0.txt",cwb_config_env,calibVer.Data(),calibType.Data());
94  sprintf(DQF[1].file, "%s/O3/DATA/%s/DQ/%s/H1_cat0.txt",cwb_config_env,calibVer.Data(),calibType.Data());
95 
96  sprintf(DQF[2].file, "%s/O3/DATA/%s/DQ/%s/L1_cat1.txt",cwb_config_env,calibVer.Data(),calibType.Data());
97  sprintf(DQF[3].file, "%s/O3/DATA/%s/DQ/%s/H1_cat1.txt",cwb_config_env,calibVer.Data(),calibType.Data());
98 
99  sprintf(DQF[4].file, "%s/O3/DATA/%s/DQ/%s/L1_cat2.txt",cwb_config_env,calibVer.Data(),calibType.Data());
100  sprintf(DQF[5].file, "%s/O3/DATA/%s/DQ/%s/H1_cat2.txt",cwb_config_env,calibVer.Data(),calibType.Data());
101 
102  sprintf(DQF[6].file, "%s/O3/DATA/%s/DQ/%s/L1_cat4.txt",cwb_config_env,calibVer.Data(),calibType.Data());
103  sprintf(DQF[7].file, "%s/O3/DATA/%s/DQ/%s/H1_cat4.txt",cwb_config_env,calibVer.Data(),calibType.Data());
104 
105 #ifdef EXECUTE
106  char ofile[1024];
107  if(search=="") {
108  sprintf(ofile,"%s/%s/slagSizeMax.lst",slags_dir.Data(),calibType.Data());
109  } else {
110  sprintf(ofile,"%s/%s/slagSizeMax.lst",slags_dir.Data(),search.Data());
111  }
112  cout << ofile << endl;
113  ofstream out;
114  out.open(ofile);
115  if (!out.good()) {cout << "Error Opening File : " << ofile << endl;exit(1);}
116  out << "# chunk slagSize" << endl << endl;
117 
118  char ofile2[1024];
119  if(search=="") {
120  sprintf(ofile2,"%s/%s/liveTimes.lst",slags_dir.Data(),calibType.Data());
121  } else {
122  sprintf(ofile2,"%s/%s/liveTimes.lst",slags_dir.Data(),search.Data());
123  }
124  cout << ofile2 << endl;
125  ofstream out2;
126  out2.open(ofile2);
127  if (!out2.good()) {cout << "Error Opening File : " << ofile2 << endl;exit(1);}
128  out2 << "# chunk liveTime_cat0\tliveTime_cat1\tliveTime_cat2" << endl << endl;
129  // write header
130  char sout2[1024];
131  sprintf(sout2,"%s %*s %*s %*s %*s %*s %*s",
132  "# chunk", 22, "liveTime_cat0(sec)", 22, "liveTime_cat0(days)",
133  22, "liveTime_cat1(sec)", 22, "liveTime_cat1(days)",
134  22, "liveTime_cat2(sec)", 22, "liveTime_cat2(days)");
135  out2 << sout2 << endl;
136 #endif
137  cout << "# chunk slagSize" << endl << endl;
138 
139  for(int k=0;k<nChunks;k++) {
140 
141  if(stop[k]<=gps_start || start[k]>=gps_stop || stop[k]>gps_stop) continue;
142 
143  sprintf(DQF[8].file, "%s/O3/CHUNKS/%s/K%02d.period",cwb_config_env,search.Data(),chunk[k]);
144  sprintf(DQF[9].file, "%s/O3/CHUNKS/%s/K%02d.period",cwb_config_env,search.Data(),chunk[k]);
145 
146  vector<waveSegment> cat0List=TB.readSegList(nDQF, DQF, CWB_CAT0);
147  double live_time_cat0 = CWB::Toolbox::getTimeSegList(cat0List);
148  cout << endl << "live_time_cat0 : " << (int)live_time_cat0 << " (sec) - " << live_time_cat0/(24.*3600.) << " (days)" << endl;
149 
150  vector<waveSegment> cat1List=TB.readSegList(nDQF, DQF, CWB_CAT1);
151  double live_time_cat1 = CWB::Toolbox::getTimeSegList(cat1List);
152  cout << endl << "live_time_cat1 : " << (int)live_time_cat1 << " (sec) - " << live_time_cat1/(24.*3600.) << " (days)" << endl;
153 
154  vector<waveSegment> cat2List=TB.readSegList(nDQF, DQF, CWB_CAT2);
155  double live_time_cat2 = CWB::Toolbox::getTimeSegList(cat2List);
156  cout << endl << "live_time_cat2 : " << (int)live_time_cat2 << " (sec) - " << live_time_cat2/(24.*3600.) << " (days)" << endl << endl;
157 
158 #ifdef EXECUTE
159  sprintf(sout2,"K%02d %*d %*.2f %*d %*.2f %*d %*.2f",
160  chunk[k], 22, (int)live_time_cat0, 22, (live_time_cat0/(24.*3600.)),
161  22, (int)live_time_cat1, 22, (live_time_cat1/(24.*3600.)),
162  22, (int)live_time_cat2, 22, (live_time_cat2/(24.*3600.)));
163  out2 << sout2 << endl;
164 #endif
165 
166  int slagMax=TB.getSlagJobList(cat1List, segLen).size();
167 
168  char string[64]; sprintf(string,"K%02d\t%d",chunk[k],2*slagMax+1);
169  cout << "slagSize = \t" << string << endl;
170 
171  if(search=="") {
172  Create_SlagRndFile(slags_dir, chunk[k], slagMax, cwb_config_env, (char*)calibVer.Data(), (char*)calibType.Data());
173  } else {
174  Create_SlagRndFile(slags_dir, chunk[k], slagMax, cwb_config_env, (char*)calibVer.Data(), (char*)search.Data());
175  }
176 
177 #ifdef EXECUTE
178  out << string << endl;
179 #endif
180 
181  }
182 
183 #ifdef EXECUTE
184  out.close();
185  out2.close();
186 #endif
187 
188  exit(0);
189 }
190 
191 void Create_SlagRndFile(TString slags_dir, int chunkID, int slagMax, char* cwb_config_env, char* calibVer, char* search) {
192 
193  std::vector<int> RND(2*slagMax);
194  for(int n=0; n<slagMax; n++) {
195  RND[2*n+0]=+(n+1);
196  RND[2*n+1]=-(n+1);
197  }
198 
199  shuffle(RND,SEED); // shuffle data
200 
201  // check
202  for(int n=0; n<slagMax; n++) {
203  int A = +(n+1);
204  int B = -(n+1);
205  int nA=0;
206  int nB=0;
207  for(int n=0; n<2*slagMax; n++) {
208  if(RND[n]==A) nA++;
209  if(RND[n]==B) nB++;
210  }
211  if(nA!=1 && nB!=1) {
212  cout << "ERROR !!!" << endl;
213  exit(1);
214  }
215  }
216 
217  //for(int n=0; n<2*slagMax; n++) cout << n << "\t" << RND[n] << endl;;
218 
219  char ofile[1024];
220  sprintf(ofile,"%s/%s/K%02d.slags",slags_dir.Data(),search,chunkID);
221  cout << endl << ofile << endl << endl;
222 
223 #ifdef EXECUTE
224  ofstream out;
225  out.open(ofile);
226  if (!out.good()) {cout << "Error Opening File : " << ofile << endl;exit(1);}
227  out << 0 << "\t" << 0 << "\t" << 0 << endl;
228  for(int n=0; n<2*slagMax; n++) {
229  out << n+1 << "\t" << 0 << "\t" << RND[n] << endl;
230  }
231  out.close();
232 #endif
233 
234  return;
235 }
236 
237 void shuffle(std::vector<int>& vector, int seed) {
238 
239  TRandom3 rnd3(seed);
240 
241  size_t size = vector.size();
242 
243  if(size > 1) {
244  size_t i;
245  for(size_t i=0; i<size; i++) {
246  size_t j = int(rnd3.Uniform(0,size));
247  int t = vector[j];
248  vector[j] = vector[i];
249  vector[i] = t;
250  }
251  }
252 }
slagMin
slagMax
slagOff
nDQF
segLen
slagFile
nIFO
strcpy(analysis,"2G")
TString calibVer
#define CHUNK_FILE_LIST
#define CHUNK_MAX_SIZE
void Create_SlagRndFile(TString slags_dir, int chunkID, int slagMax, char *cwb_config_env, char *calibVer, char *search)
void shuffle(std::vector< int > &vector, int seed=150914)
void Create_O3_LH_ChunkSlagRndFiles(TString slags_dir, TString calibVer, TString calibType, TString search="")
int ReadChunkList(TString ifile, int *chunk=NULL, double *start=NULL, double *stop=NULL)
Definition: ReadChunkList.C:22
shift breaksw case t
Definition: cwb_clchunk.csh:85
shift breaksw case n
Definition: cwb_clchunk.csh:75
shift breaksw case B
string search
Definition: cWB_conf.py:63
list ifos
Definition: cWB_conf.py:23