1 #include "ResponseManager.h" 2 #include "SystemResponse.h" 5 #include "AnalysisWaveform.h" 11 #include "AnitaGeomTool.h" 19 int AnitaResponse::ResponseManager::loadResponsesFromDir(
const char * raw_dir,
int npad,
unsigned int evTime)
36 dp = opendir(dir.Data());
39 indexF.Form(
"%s/index.txt", dir.Data());
40 std::ifstream inf(indexF.Data());
46 while(inf >> tempStr >> tempTime)
54 indexF.Form(dir.Data());
55 dir.Form(
"%s/%s", indexF.Data(), str.c_str());
56 dp = opendir(dir.Data());
62 dir.Form(
"./data/responses/%s",raw_dir);
63 dp = opendir(dir.Data());
67 indexF.Form(
"%s/index.txt", dir.Data());
68 std::ifstream inf2(indexF.Data());
74 while(inf2 >> tempStr >> tempTime)
82 indexF.Form(dir.Data());
83 dir.Form(
"%s/%s", indexF.Data(), str.c_str());
84 dp = opendir(dir.Data());
91 dir.Form(
"%s/share/AnitaAnalysisFramework/responses/%s", getenv(
"ANITA_UTIL_INSTALL_DIR"), raw_dir);
92 dp = opendir(dir.Data());
95 indexF.Form(
"%s/index.txt", dir.Data());
96 std::ifstream inf3(indexF.Data());
102 while(inf3 >> tempStr >> tempTime)
104 if(evTime < tempTime)
110 indexF.Form(dir.Data());
111 dir.Form(
"%s/%s", indexF.Data(), str.c_str());
112 dp = opendir(dir.Data());
119 fprintf(stderr,
"Could not open response dir %s\n",raw_dir);
120 fprintf(stderr,
"Last directory checked: %s\n", dir.Data());
124 std::map<const char *, AbstractResponse *> prefix_map;
126 while ( (ep = readdir(dp)) )
129 char * entry = ep->d_name;
130 char * prefix = strdup(entry);
132 if (entry[0]==
'.')
continue;
137 char * dot = strstr(prefix,
".");
140 fprintf(stderr,
"Entry %s contains no .\n", entry);
146 char * suffix = dot+1;
153 char * angstr=strstr(prefix,
"_");
158 angle = atof(angstr+1);
165 if (prefix_map.count(prefix))
167 r = prefix_map[prefix];
176 if (!strcasecmp(suffix,
"imp"))
179 fname.Form(
"%s/%s", dir.Data(), entry);
183 r =
new Response(&imp, npad);
184 response_store.push_back(r);
189 AnalysisWaveform aw (imp.GetN(), imp.GetY(), imp.GetX()[1] - imp.GetX()[0], imp.GetX()[0]);
195 else if (!strcasecmp(suffix,
"freq"))
199 fprintf(stderr,
"Reading of .freq format not implemented yet!\n");
203 else if (!strcasecmp(suffix,
"iir"))
206 fprintf(stderr,
"Reading of .iir format not implemented yet!\n");
214 int start_ant, stop_ant, start_pol, stop_pol;
216 if (!strcasecmp(prefix,
"all"))
218 start_pol = 0; start_ant = 0;
219 stop_pol = 1; stop_ant = NUM_SEAVEYS-1;
222 else if (!strcasecmp(prefix,
"allHpol"))
224 start_pol = 0; start_ant = 0;
225 stop_pol = 0; stop_ant = NUM_SEAVEYS-1;
228 else if (!strcasecmp(prefix,
"allVpol"))
230 start_pol = 1; start_ant = 0;
231 stop_pol = 1; stop_ant = NUM_SEAVEYS-1;
239 sscanf(prefix,
"%02d%c%c", &phi,&ring,&pol);
241 if (pol ==
'h' || pol ==
'H')
246 else if (pol ==
'v' || pol ==
'V')
253 fprintf(stderr,
"Something wrong with %s\n",prefix);
260 if (ring ==
'T' || ring ==
't')
264 else if (ring ==
'M' || ring ==
'm')
268 else if (ring ==
'B' || ring ==
'b')
275 fprintf(stderr,
"Something wrong with %s\n",prefix);
286 for (
int pol = start_pol; pol <= stop_pol; pol++)
288 for (
int ant = start_ant; ant <= stop_ant; ant++)
290 responses[ant][pol] = r;
298 for (
int ant = 0; ant < NUM_SEAVEYS; ant++)
300 for (
int pol = 0; pol <2; pol++)
302 if (! responses[ant][pol])
304 printf(
"%d %d\n",ant,pol);
306 assert(responses[ant][pol]);
330 void AnitaResponse::ResponseManager::checkTime(
unsigned int evTime)
332 if(!hasIndex)
return;
339 dp = opendir(dir.Data());
346 bool diffResponses =
false;
347 if(!evTime) diffResponses =
true;
351 indexF.Form(
"%s/index.txt", dir.Data());
352 std::ifstream inf(indexF.Data());
355 indexF.Form(
"%s", dir.Data());
356 while(inf >> tempStr >> tempTime)
358 if(evTime > timePrev && evTime < tempTime) loadStr = tempStr;
359 if(lastTime > timePrev && lastTime < tempTime)
361 if(evTime < timePrev || evTime > tempTime)
363 diffResponses =
true;
373 dir.Form(
"./data/responses/%s",whichDir);
374 dp = opendir(dir.Data());
377 indexF.Form(
"%s/index.txt", dir.Data());
378 std::ifstream inf2(indexF.Data());
381 indexF.Form(
"%s", dir.Data());
382 while(inf2 >> tempStr >> tempTime)
384 if(evTime > timePrev && evTime < tempTime) loadStr = tempStr;
385 if(lastTime > timePrev && lastTime < tempTime)
387 if(evTime < timePrev || evTime > tempTime)
389 diffResponses =
true;
398 dir.Form(
"%s/share/AnitaAnalysisFramework/responses/%s", getenv(
"ANITA_UTIL_INSTALL_DIR"), whichDir);
399 dp = opendir(dir.Data());
402 indexF.Form(
"%s/index.txt", dir.Data());
403 std::ifstream inf3(indexF.Data());
406 indexF.Form(
"%s", dir.Data());
407 while(inf3 >> tempStr >> tempTime)
409 if(evTime > timePrev && evTime < tempTime) loadStr = tempStr;
410 if(lastTime > timePrev && lastTime < tempTime)
412 if(evTime < timePrev || evTime > tempTime)
414 diffResponses =
true;
427 dir.Form(
"%s/%s", indexF.Data(), loadStr.c_str());
428 for (
size_t i = 0; i < response_store.size(); i++)
430 delete response_store[i];
432 response_store.clear();
433 loadResponsesFromDir(dir, savePad, evTime);
434 fprintf(stderr,
"changed responses\n");
443 memset(responses,0,
sizeof(responses));
444 loadResponsesFromDir(dir,npad, evTime);
445 method = methodPtr == NULL ? &AnitaResponse::kDefaultDeconvolution : methodPtr;
452 AnitaResponse::ResponseManager::~ResponseManager()
455 for (
size_t i = 0; i < response_store.size(); i++)
457 delete response_store[i];
enum AnitaRing::EAnitaRing AnitaRing_t
Ring enumeration.