AraEvent/AraStationInfo.cxx
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 //Includes 00011 #include <iostream> 00012 #include <sqlite3.h> 00013 00014 //Ara Includes 00015 #include "AraStationInfo.h" 00016 #include "AraGeomTool.h" 00017 00018 00019 00020 00021 00022 ClassImp(AraStationInfo); 00023 00024 AraStationInfo::AraStationInfo() 00025 :fAntInfo(ANTS_PER_ATRI),fCalAntInfo(CAL_ANTS_PER_ATRI) 00026 { 00027 numberRFChans=0; 00028 fNumberAntennas=0; 00029 fNumberCalAntennas=0; 00030 00031 } 00032 00033 00034 AraStationInfo::AraStationInfo(AraStationId_t stationId) 00035 :fAntInfo(ANTS_PER_ATRI),fCalAntInfo(CAL_ANTS_PER_ATRI) 00036 { 00037 fStationId=stationId; 00038 numberRFChans=0; 00039 fNumberAntennas=0; 00040 fNumberCalAntennas=0; 00041 if(AraGeomTool::isIcrrStation(fStationId)) { 00042 readChannelMapDbIcrr(); 00043 } 00044 else { 00045 readChannelMapDbAtri_2(); 00046 // readChannelMapDbAtri(); 00047 } 00048 readCalPulserDb(); 00049 00050 } 00051 00052 00053 00054 AraStationInfo::~AraStationInfo() 00055 { 00056 00057 } 00058 00059 Double_t AraStationInfo::getCableDelay(int rfChanNum) { 00060 if(rfChanNum>=0 && rfChanNum<numberRFChans) { 00061 return fAntInfo[rfChanNum].getCableDelay(); 00062 } 00063 return 0; 00064 } 00065 00066 AraCalAntennaInfo *AraStationInfo::getCalAntennaInfo(int calAntId) { 00067 if(calAntId>=0 && calAntId<=fNumberCalAntennas) 00068 return &fCalAntInfo[calAntId]; 00069 return NULL; 00070 } 00071 00072 AraAntennaInfo *AraStationInfo::getAntennaInfoForTrigChan(int trigChan) { 00073 00074 if(trigChan>=0 && trigChan<fTrigChanVec.size()) { 00075 return &fAntInfo[fTrigChanVec[trigChan]]; 00076 } 00077 return NULL; 00078 } 00079 00080 00081 AraAntennaInfo *AraStationInfo::getAntennaInfo(int antNum) { 00082 if(antNum>=0 && antNum<numberRFChans) { 00083 return &fAntInfo[antNum]; 00084 } 00085 return NULL; 00086 } 00087 00088 AraAntennaInfo *AraStationInfo::getNewAntennaInfo(int antNum){ 00089 //Assume this creates a new AraAntennaInfo; 00090 fNumberAntennas++; 00091 numberRFChans++; 00092 // std::cout << "getNewAntennaInfo(" << antNum << ") fNumberAntennas=" << fNumberAntennas << "\n"; 00093 //Magic lines below, may remove at some point 00094 int temp=fAntInfo[antNum].chanNum; 00095 fAntInfo[antNum].chanNum=temp; 00096 fAntInfo[antNum].fStationId=fStationId; 00097 return &fAntInfo[antNum]; 00098 } 00099 00100 00101 AraCalAntennaInfo *AraStationInfo::getNewCalAntennaInfo(int calAntId){ 00102 //Assume this creates a new AraCalAntennaInfo; 00103 fNumberCalAntennas++; 00104 // std::cout << "getNewCalAntennaInfo(" << calAntId << ") fNumberCalAntennas=" << fNumberCalAntennas << "\n"; 00105 //Magic lines below, may remove at some point 00106 // int temp=fCalAntInfo[calAntId].calAntId; 00107 fCalAntInfo[calAntId].calAntId=calAntId; 00108 fCalAntInfo[calAntId].fStationId=fStationId; 00109 return &fCalAntInfo[calAntId]; 00110 } 00111 00112 void AraStationInfo::fillTrigChanVec() { 00113 fTrigChanVec.resize(fNumberAntennas); 00114 for(int ant=0;ant<fNumberAntennas;++ant){ 00115 int trigChan=fAntInfo[ant].getTrigChan(); 00116 if(trigChan<=fNumberAntennas) { 00117 fTrigChanVec[trigChan]=ant; 00118 } 00119 else { 00120 std::cerr << "Got trigger channel: " << trigChan << " but only have " << fNumberAntennas << " antennas"; 00121 } 00122 00123 } 00124 } 00125 00126 void AraStationInfo::fillAntIndexVec() { 00127 //For now will use hard coded numbers 00128 fAntIndexVec[0].resize(20); 00129 fAntIndexVec[1].resize(20); 00130 fAntIndexVec[2].resize(20); 00131 00132 Int_t countPols[3]={0}; 00133 for(int ant=0;ant<fNumberAntennas;++ant){ 00134 int polTypeInt=(int)fAntInfo[ant].polType; 00135 int antNum=fAntInfo[ant].antPolNum; 00136 int daqNum=fAntInfo[ant].daqChanNum; 00137 // std::cerr << ant << "\t" << polTypeInt << "\t" << antNum << "\t" << daqNum << "\n"; 00138 fAntIndexVec[polTypeInt][antNum]=ant;//daqNum; 00139 countPols[polTypeInt]++; 00140 } 00141 for(int pol=0;pol<3;pol++) { 00142 fAntIndexVec[pol].resize(countPols[pol]); 00143 } 00144 } 00145 00146 Int_t AraStationInfo::getRFChanByPolAndAnt(Int_t antNum, AraAntPol::AraAntPol_t polType) { 00147 //RJN will add checking here at some point 00148 if(polType>=0 && polType<=2) { 00149 if(antNum>=0 && antNum<=fAntIndexVec[polType].size()) { 00150 return fAntIndexVec[polType][antNum]; 00151 } 00152 } 00153 return -1; 00154 } 00155 00156 00157 Int_t AraStationInfo::getElecChanFromRFChan(Int_t rfChan) { 00158 //Should add error checking here 00159 if(rfChan >=fAntInfo.size()){ 00160 fprintf(stderr, "%s : rfChan %i too high\n", __FUNCTION__, rfChan); 00161 return -1; 00162 } 00163 00164 return fAntInfo[rfChan].daqChanNum; 00165 } 00166 00167 00168 00169 00170 void AraStationInfo::readChannelMapDbAtri(){ 00171 sqlite3 *db; 00172 char *zErrMsg = 0; 00173 sqlite3_stmt *stmt; 00174 // int calibIndex=getStationCalibIndex(fStationId); 00175 00176 char calibDir[FILENAME_MAX]; 00177 char fileName[FILENAME_MAX]; 00178 char *calibEnv=getenv("ARA_CALIB_DIR"); 00179 if(!calibEnv) { 00180 char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR"); 00181 if(!utilEnv) 00182 sprintf(calibDir,"calib"); 00183 else 00184 sprintf(calibDir,"%s/share/araCalib",utilEnv); 00185 } 00186 else { 00187 strncpy(calibDir,calibEnv,FILENAME_MAX); 00188 } 00189 sprintf(fileName, "%s/AntennaInfo.sqlite", calibDir); 00190 00191 //open the database 00192 // int rc = sqlite3_open_v2(fileName, &db, SQLITE_OPEN_READONLY, NULL); 00193 int rc = sqlite3_open(fileName, &db);; 00194 if(rc!=SQLITE_OK){ 00195 printf("AraStationInfo::readChannelMapDbAtri() - Can't open database: %s\n", sqlite3_errmsg(db)); 00196 sqlite3_close(db); 00197 return; 00198 } 00199 00200 const char *query; 00201 00202 //This is where we decide which table to access in the database 00203 if(fStationId==ARA_STATION1B) query = "select * from ARA01"; 00204 else if(fStationId==ARA_STATION2) query = "select * from ARA02"; 00205 else if(fStationId==ARA_STATION3) query = "select * from ARA03"; 00206 else{ 00207 fprintf(stderr, "%s : fStationId %i is not ARA1-3\n", __FUNCTION__, fStationId); 00208 return; 00209 } 00210 00211 //prepare an sql statment which will be used to obtain information from the data base 00212 rc=sqlite3_prepare(db, query, strlen(query)+1, &stmt, NULL); 00213 00214 if(rc!=SQLITE_OK){ 00215 printf("AraStationInfo::readChannelMapDbAtri() : statement not prepared OK\n"); 00216 //should close the data base and exit the function 00217 sqlite3_close(db); 00218 return; 00219 } 00220 00221 00222 int row=0; 00223 while(1){ 00224 //printf("row number %i\n", row); 00225 rc=sqlite3_step(stmt); 00226 if(rc==SQLITE_DONE) break; 00227 int nColumns=sqlite3_column_count(stmt); 00228 00229 row=sqlite3_column_int(stmt, 2)-1;//forcing the row to be correct 00230 //printf("row number %i\n", row); 00231 AraAntennaInfo *thisAntInfo=this->getNewAntennaInfo(row); 00232 00233 for(int column=0;column<nColumns;column++){ 00234 00235 const char* temp; 00236 00237 switch(column){ 00238 case 0: //primary key - fStationId+labChip+channel 00239 00240 break; 00241 case 1: //antDir 00242 00243 temp = (const char*)sqlite3_column_text(stmt, column); 00244 00245 if(strcmp (temp,"kReceiver")==0){ 00246 thisAntInfo->antDir=AraAntDir::kReceiver; 00247 //printf("fStationInfoATRI[%i].fAntInfo[%i].antDir %i\n", fStationId, row, thisAntInfo->antDir); 00248 } 00249 00250 break; 00251 case 2: //chanNum 00252 00253 thisAntInfo->chanNum=sqlite3_column_int(stmt, column); 00254 00255 00256 //printf("fStationInfoATRI[%i].fAntInfo[%i].chanNum %i\n", fStationId, row, thisAntInfo->chanNum); 00257 00258 break; 00259 case 3: //daqChanType 00260 00261 temp = (const char*)sqlite3_column_text(stmt, column); 00262 if(strcmp (temp,"kDisconeChan")==0) thisAntInfo->daqChanType=AraDaqChanType::kDisconeChan; 00263 if(strcmp (temp,"kBatwingChan")==0) thisAntInfo->daqChanType=AraDaqChanType::kBatwingChan; 00264 00265 //printf("fStationInfoATRI[%i].fAntInfo[%i].daqChanType %i\n", fStationId, row, thisAntInfo->daqChanType); 00266 00267 break; 00268 case 4: //daqChanNum 00269 00270 thisAntInfo->daqChanNum=sqlite3_column_int(stmt, column); 00271 //printf("fStationInfoATRI[%i].fAntInfo[%i].daqChanNum %i\n", fStationId, row, thisAntInfo->daqChanNum); 00272 00273 break; 00274 case 5: //highPassFilterMhz 00275 00276 thisAntInfo->highPassFilterMhz=sqlite3_column_double(stmt, column); 00277 //printf("fStationInfoATRI[%i].fAntInfo[%i].highPassFilterMhz %f\n", fStationId, row, thisAntInfo->highPassFilterMhz); 00278 00279 break; 00280 case 6: //lowPassFilterMhz 00281 thisAntInfo->lowPassFilterMhz=sqlite3_column_double(stmt, column); 00282 //printf("fStationInfoATRI[%i].fAntInfo[%i].lowPassFilterMhz %f\n", fStationId, row, thisAntInfo->lowPassFilterMhz); 00283 00284 break; 00285 case 7: //daqTrigChan 00286 thisAntInfo->daqTrigChan=sqlite3_column_int(stmt, column); 00287 //printf("fStationInfoATRI[%i].fAntInfo[%i].daqTrigChan %i\n", fStationId, row, thisAntInfo->daqTrigChan); 00288 00289 break; 00290 case 8: //numLabChans 00291 00292 thisAntInfo->numLabChans=sqlite3_column_int(stmt, column); 00293 //printf("fStationInfoATRI[%i].fAntInfo[%i].numLabChans %i\n", fStationId, row, thisAntInfo->numLabChans); 00294 00295 break; 00296 case 9: //labChip 00297 00298 temp = (const char*)sqlite3_column_text(stmt, column); 00299 if(strcmp (temp,"kA")==0) thisAntInfo->labChip=AraLabChip::kA; 00300 if(strcmp (temp,"kB")==0) thisAntInfo->labChip=AraLabChip::kB; 00301 if(strcmp (temp,"kC")==0) thisAntInfo->labChip=AraLabChip::kC; 00302 00303 //printf("fStationInfoATRI[%i].fAntInfo[%i].labChip %i\n", fStationId, row, thisAntInfo->labChip); 00304 00305 break; 00306 case 10: //labChans[0] 00307 00308 thisAntInfo->labChans[0]=sqlite3_column_int(stmt, column)-1; 00309 //printf("fStationInfoATRI[%i].fAntInfo[%i].labChans[0] %i\n", fStationId, row, thisAntInfo->labChans[0]); 00310 00311 break; 00312 case 11: //labChans[1] 00313 00314 thisAntInfo->labChans[1]=sqlite3_column_int(stmt, column)-1; 00315 //printf("fStationInfoATRI[%i].fAntInfo[%i].labChans[1] %i\n", fStationId, row, thisAntInfo->labChans[1]); 00316 00317 break; 00318 case 12: //isDiplexed 00319 00320 thisAntInfo->isDiplexed=sqlite3_column_int(stmt, column); 00321 //printf("fStationInfoATRI[%i].fAntInfo[%i].isDiplexed %i\n", fStationId, row, thisAntInfo->isDiplexed); 00322 00323 break; 00324 case 13: //diplexedChans[0] 00325 00326 thisAntInfo->diplexedChans[0]=sqlite3_column_int(stmt, column); 00327 //printf("fStationInfoATRI[%i].fAntInfo[%i].diplexedChans[0] %i\n", fStationId, row, thisAntInfo->diplexedChans[0]); 00328 00329 break; 00330 case 14: //diplexedChans[1] 00331 00332 thisAntInfo->diplexedChans[1]=sqlite3_column_int(stmt, column); 00333 //printf("fStationInfoATRI[%i].fAntInfo[%i].diplexedChans[1] %i\n", fStationId, row, thisAntInfo->diplexedChans[1]); 00334 00335 break; 00336 case 15: //preAmpNum 00337 00338 thisAntInfo->preAmpNum=sqlite3_column_int(stmt, column); 00339 //printf("fStationInfoATRI[%i].fAntInfo[%i].preAmpNum %i\n", fStationId, row, thisAntInfo->preAmpNum); 00340 00341 break; 00342 case 16: //avgNoiseFigure 00343 00344 thisAntInfo->avgNoiseFigure=sqlite3_column_double(stmt, column); 00345 //printf("fStationInfoATRI[%i].fAntInfo[%i].avgNoiseFigure %f\n", fStationId, row, thisAntInfo->avgNoiseFigure); 00346 00347 break; 00348 case 17: //rcvrNum 00349 00350 thisAntInfo->rcvrNum=sqlite3_column_int(stmt, column); 00351 //printf("fStationInfoATRI[%i].fAntInfo[%i].rcvrNum %i\n", fStationId, row, thisAntInfo->rcvrNum); 00352 00353 break; 00354 case 18: //designator 00355 00356 temp = (const char*)sqlite3_column_text(stmt, column); 00357 strncpy(thisAntInfo->designator, temp, 3); 00358 //printf("fStationInfoATRI[%i].fAntInfo[%i].designator %s\n", fStationId, row, thisAntInfo->designator); 00359 00360 break; 00361 case 19: //antPolNum 00362 00363 thisAntInfo->antPolNum=sqlite3_column_int(stmt, column); 00364 //printf("fStationInfoATRI[%i].fAntInfo[%i].antPolNum %i\n", fStationId, row, thisAntInfo->antPolNum); 00365 00366 break; 00367 case 20: //antType 00368 00369 temp = (const char*)sqlite3_column_text(stmt, column); 00370 if(strcmp (temp,"kBicone")==0) thisAntInfo->antType=AraAntType::kBicone; 00371 if(strcmp (temp,"kBowtieSlot")==0) thisAntInfo->antType=AraAntType::kBowtieSlot; 00372 if(strcmp (temp,"kDiscone")==0) thisAntInfo->antType=AraAntType::kDiscone; 00373 if(strcmp (temp,"kBatwing")==0) thisAntInfo->antType=AraAntType::kBatwing; 00374 if(strcmp (temp,"kFatDipole")==0) thisAntInfo->antType=AraAntType::kFatDipole; 00375 if(strcmp (temp,"kQuadSlot")==0) thisAntInfo->antType=AraAntType::kQuadSlot; 00376 00377 //printf("fStationInfoATRI[%i].fAntInfo[%i].antType %i\n", fStationId, row, thisAntInfo->antType); 00378 00379 break; 00380 case 21: //polType 00381 00382 temp = (const char*)sqlite3_column_text(stmt, column); 00383 if(strcmp (temp,"kVertical")==0) thisAntInfo->polType=AraAntPol::kVertical; 00384 if(strcmp (temp,"kHorizontal")==0) thisAntInfo->polType=AraAntPol::kHorizontal; 00385 if(strcmp (temp,"kSurface")==0) thisAntInfo->polType=AraAntPol::kSurface; 00386 00387 //printf("fStationInfoATRI[%i].fAntInfo[%i].AraAntPol %i\n", fStationId, row, thisAntInfo->polType); 00388 00389 break; 00390 case 22: //locationName 00391 00392 temp = (const char*)sqlite3_column_text(stmt, column); 00393 strncpy(thisAntInfo->locationName, temp, 4); 00394 //printf("fStationInfoATRI[%i].fAntInfo[%i].locationName %s\n", fStationId, row, thisAntInfo->locationName); 00395 00396 00397 break; 00398 case 23: //antLocation[0] 00399 00400 thisAntInfo->antLocation[0]=sqlite3_column_double(stmt, column); 00401 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[0] %f\n", fStationId, row, thisAntInfo->antLocation[0]); 00402 00403 break; 00404 case 24: //antLocation[1] 00405 00406 thisAntInfo->antLocation[1]=sqlite3_column_double(stmt, column); 00407 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[1] %f\n", fStationId, row, thisAntInfo->antLocation[1]); 00408 00409 break; 00410 case 25: //antLocation[2] 00411 00412 thisAntInfo->antLocation[2]=sqlite3_column_double(stmt, column); 00413 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[2] %f\n", fStationId, row, thisAntInfo->antLocation[2]); 00414 00415 break; 00416 case 26: //cableDelay 00417 00418 thisAntInfo->cableDelay=sqlite3_column_double(stmt, column); 00419 //printf("fStationInfoATRI[%i].fAntInfo[%i].cableDelay %f\n", fStationId, row, thisAntInfo->cableDelay); 00420 00421 break; 00422 case 27: //debugHolePosition[0] 00423 00424 thisAntInfo->debugHolePosition[0]=sqlite3_column_double(stmt, column); 00425 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugHolePosition[0] %f\n", fStationId, row, thisAntInfo->debugHolePosition[0]); 00426 00427 break; 00428 case 28: //debugHolePosition[1] 00429 00430 thisAntInfo->debugHolePosition[1]=sqlite3_column_double(stmt, column); 00431 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugHolePosition[1] %f\n", fStationId, row, thisAntInfo->debugHolePosition[1]); 00432 00433 break; 00434 case 29: //debugHolePosition[2] 00435 00436 thisAntInfo->debugHolePosition[2]=sqlite3_column_double(stmt, column); 00437 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugHolePosition[2] %f\n", fStationId, row, thisAntInfo->debugHolePosition[2]); 00438 00439 break; 00440 case 30: //debugPreAmpDz 00441 00442 thisAntInfo->debugPreAmpDz=sqlite3_column_double(stmt, column); 00443 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugPreAmpDz %f\n", fStationId, row, thisAntInfo->debugPreAmpDz); 00444 00445 break; 00446 case 31: //debugHolePositionZft 00447 00448 thisAntInfo->debugHolePositionZft=sqlite3_column_double(stmt, column); 00449 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugHolePositionZft %f\n", fStationId, row, thisAntInfo->debugHolePositionZft); 00450 00451 break; 00452 case 32: //debugHolePositionZm 00453 00454 thisAntInfo->debugHolePositionZm=sqlite3_column_double(stmt, column); 00455 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugHolePositionZm %f\n", fStationId, row, thisAntInfo->debugHolePositionZm); 00456 00457 break; 00458 case 33: //debugTrueAsBuiltPosition[0] 00459 00460 thisAntInfo->debugTrueAsBuiltPositon[0]=sqlite3_column_double(stmt, column); 00461 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugTrueAsBuiltPositon[0] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[0]); 00462 00463 break; 00464 case 34: //debugTrueAsBuiltPosition[1] 00465 00466 thisAntInfo->debugTrueAsBuiltPositon[1]=sqlite3_column_double(stmt, column); 00467 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugTrueAsBuiltPositon[1] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[1]); 00468 00469 break; 00470 case 35: //debugTrueAsBuiltPosition[2] 00471 00472 thisAntInfo->debugTrueAsBuiltPositon[2]=sqlite3_column_double(stmt, column); 00473 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugTrueAsBuiltPositon[2] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[2]); 00474 00475 break; 00476 case 36: //debugCableDelay2 00477 00478 thisAntInfo->debugCableDelay2=sqlite3_column_double(stmt, column); 00479 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugCableDelay2 %f\n", fStationId, row, thisAntInfo->debugCableDelay2); 00480 00481 break; 00482 case 37: //debugFeedPointDelay 00483 00484 thisAntInfo->debugFeedPointDelay=sqlite3_column_double(stmt, column); 00485 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugFeedPointDelay %f\n", fStationId, row, thisAntInfo->debugFeedPointDelay); 00486 00487 break; 00488 case 38: //debugTotalCableDelay 00489 00490 thisAntInfo->debugTotalCableDelay=sqlite3_column_double(stmt, column); 00491 //printf("fStationInfoATRI[%i].fAntInfo[%i].debugTotalCableDelay %f\n", fStationId, row, thisAntInfo->debugTotalCableDelay); 00492 00493 break; 00494 case 40: //antOrient[0] 00495 00496 thisAntInfo->antOrient[0]=sqlite3_column_double(stmt, column); 00497 //printf("fStationInfoATRI[%i].fAntInfo[%i].antOrient[0] %1.10f\n", fStationId, row, thisAntInfo->antOrient[0]); 00498 00499 break; 00500 00501 case 41: //antOrient[1] 00502 00503 thisAntInfo->antOrient[1]=sqlite3_column_double(stmt, column); 00504 //printf("fStationInfoATRI[%i].fAntInfo[%i].antOrient[1] %1.10f\n", fStationId, row, thisAntInfo->antOrient[1]); 00505 00506 break; 00507 00508 case 42: //antOrient[2] 00509 00510 thisAntInfo->antOrient[2]=sqlite3_column_double(stmt, column); 00511 //printf("fStationInfoATRI[%i].fAntInfo[%i].antOrient[2] %1.10f\n", fStationId, row, thisAntInfo->antOrient[2]); 00512 00513 break; 00514 00515 00516 default: 00517 00518 break; 00519 00520 }//switch(column) 00521 00522 }//column 00523 thisAntInfo->fillArrayCoords(); 00524 00525 }//while(1) 00526 00527 //now need to destroy the sqls statement prepared earlier 00528 rc = sqlite3_finalize(stmt); 00529 if(rc!=SQLITE_OK) printf("error finlizing sql statement\n"); 00530 // printf("sqlite3_finalize(stmt) = %i\n", rc); 00531 00532 //now close the connection to the database 00533 rc = sqlite3_close(db); 00534 if(rc!=SQLITE_OK) printf("error closing db\n"); 00535 00536 this->fillAntIndexVec(); 00537 this->fillTrigChanVec(); 00538 00539 } 00540 00541 00542 //______________________________________________________________________________ 00543 00544 void AraStationInfo::readChannelMapDbIcrr(){ 00545 sqlite3 *db; 00546 char *zErrMsg = 0; 00547 sqlite3_stmt *stmt; 00548 // int calibIndex=getStationCalibIndex(fStationId); 00549 00550 char calibDir[FILENAME_MAX]; 00551 char fileName[FILENAME_MAX]; 00552 char *calibEnv=getenv("ARA_CALIB_DIR"); 00553 if(!calibEnv) { 00554 char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR"); 00555 if(!utilEnv) 00556 sprintf(calibDir,"calib"); 00557 else 00558 sprintf(calibDir,"%s/share/araCalib",utilEnv); 00559 } 00560 else { 00561 strncpy(calibDir,calibEnv,FILENAME_MAX); 00562 } 00563 sprintf(fileName, "%s/AntennaInfo.sqlite", calibDir); 00564 00565 //open the database 00566 // int rc = sqlite3_open_v2(fileName, &db, SQLITE_OPEN_READONLY, NULL); 00567 int rc = sqlite3_open(fileName, &db);; 00568 if(rc!=SQLITE_OK){ 00569 printf("AraStationInfo::readChannelMapDbIcrr() - Can't open database: %s\n", sqlite3_errmsg(db)); 00570 sqlite3_close(db); 00571 return; 00572 } 00573 00574 const char *query; 00575 00576 //This is where we decide which table to access in the database 00577 if(fStationId==ARA_TESTBED) query = "select * from TestBed"; 00578 if(fStationId==ARA_STATION1) query = "select * from Station1"; 00579 00580 //prepare an sql statment which will be used to obtain information from the data base 00581 // rc=sqlite3_prepare_v2(db, query, strlen(query)+1, &stmt, NULL); 00582 rc=sqlite3_prepare(db, query, strlen(query)+1, &stmt, NULL); 00583 00584 if(rc!=SQLITE_OK){ 00585 printf("AraStationInfo::readChannelMapDbIcrr() : statement not prepared OK\n"); 00586 //should close the data base and exit the function 00587 sqlite3_close(db); 00588 return; 00589 } 00590 int row=0; 00591 while(1){ 00592 //printf("row number %i\n", row); 00593 rc=sqlite3_step(stmt); 00594 if(rc==SQLITE_DONE) break; 00595 int nColumns=sqlite3_column_count(stmt); 00596 00597 row=sqlite3_column_int(stmt, 2)-1;//forcing the row to be correct 00598 //printf("row number %i\n", row); 00599 00600 AraAntennaInfo *thisAntInfo=this->getNewAntennaInfo(row); 00601 00602 for(int column=0;column<nColumns;column++){ 00603 00604 const char* temp; 00605 00606 switch(column){ 00607 case 0: //primary key - fStationId+labChip+channel 00608 00609 break; 00610 case 1: //antDir 00611 00612 temp = (const char*)sqlite3_column_text(stmt, column); 00613 00614 if(strcmp (temp,"kReceiver")==0){ 00615 thisAntInfo->antDir=AraAntDir::kReceiver; 00616 //printf("fStationInfoICRR[%i].fAntInfo[%i].antDir %i\n", fStationId, row, thisAntInfo->antDir); 00617 } 00618 00619 break; 00620 case 2: //chanNum 00621 00622 thisAntInfo->chanNum=sqlite3_column_int(stmt, column); 00623 00624 00625 //printf("fStationInfoICRR[%i].fAntInfo[%i].chanNum %i\n", fStationId, row, thisAntInfo->chanNum); 00626 00627 break; 00628 case 3: //daqChanType 00629 00630 temp = (const char*)sqlite3_column_text(stmt, column); 00631 if(strcmp (temp,"kDisconeChan")==0) thisAntInfo->daqChanType=AraDaqChanType::kDisconeChan; 00632 if(strcmp (temp,"kBatwingChan")==0) thisAntInfo->daqChanType=AraDaqChanType::kBatwingChan; 00633 00634 //printf("fStationInfoICRR[%i].fAntInfo[%i].daqChanType %i\n", fStationId, row, thisAntInfo->daqChanType); 00635 00636 break; 00637 case 4: //daqChanNum 00638 00639 thisAntInfo->daqChanNum=sqlite3_column_int(stmt, column); 00640 //printf("fStationInfoICRR[%i].fAntInfo[%i].daqChanNum %i\n", fStationId, row, thisAntInfo->daqChanNum); 00641 00642 break; 00643 case 5: //highPassFilterMhz 00644 00645 thisAntInfo->highPassFilterMhz=sqlite3_column_double(stmt, column); 00646 //printf("fStationInfoICRR[%i].fAntInfo[%i].highPassFilterMhz %f\n", fStationId, row, thisAntInfo->highPassFilterMhz); 00647 00648 break; 00649 case 6: //lowPassFilterMhz 00650 thisAntInfo->lowPassFilterMhz=sqlite3_column_double(stmt, column); 00651 //printf("fStationInfoICRR[%i].fAntInfo[%i].lowPassFilterMhz %f\n", fStationId, row, thisAntInfo->lowPassFilterMhz); 00652 00653 break; 00654 case 7: //daqTrigChan 00655 thisAntInfo->daqTrigChan=sqlite3_column_int(stmt, column); 00656 //printf("fStationInfoICRR[%i].fAntInfo[%i].daqTrigChan %i\n", fStationId, row, thisAntInfo->daqTrigChan); 00657 00658 break; 00659 case 8: //numLabChans 00660 00661 thisAntInfo->numLabChans=sqlite3_column_int(stmt, column); 00662 //printf("fStationInfoICRR[%i].fAntInfo[%i].numLabChans %i\n", fStationId, row, thisAntInfo->numLabChans); 00663 00664 break; 00665 case 9: //labChip 00666 00667 temp = (const char*)sqlite3_column_text(stmt, column); 00668 if(strcmp (temp,"kA")==0) thisAntInfo->labChip=AraLabChip::kA; 00669 if(strcmp (temp,"kB")==0) thisAntInfo->labChip=AraLabChip::kB; 00670 if(strcmp (temp,"kC")==0) thisAntInfo->labChip=AraLabChip::kC; 00671 00672 //printf("fStationInfoICRR[%i].fAntInfo[%i].labChip %i\n", fStationId, row, thisAntInfo->labChip); 00673 00674 break; 00675 case 10: //labChans[0] 00676 00677 thisAntInfo->labChans[0]=sqlite3_column_int(stmt, column)-1; 00678 //printf("fStationInfoICRR[%i].fAntInfo[%i].labChans[0] %i\n", fStationId, row, thisAntInfo->labChans[0]); 00679 00680 break; 00681 case 11: //labChans[1] 00682 00683 thisAntInfo->labChans[1]=sqlite3_column_int(stmt, column)-1; 00684 //printf("fStationInfoICRR[%i].fAntInfo[%i].labChans[1] %i\n", fStationId, row, thisAntInfo->labChans[1]); 00685 00686 break; 00687 case 12: //isDiplexed 00688 00689 thisAntInfo->isDiplexed=sqlite3_column_int(stmt, column); 00690 //printf("fStationInfoICRR[%i].fAntInfo[%i].isDiplexed %i\n", fStationId, row, thisAntInfo->isDiplexed); 00691 00692 break; 00693 case 13: //diplexedChans[0] 00694 00695 thisAntInfo->diplexedChans[0]=sqlite3_column_int(stmt, column); 00696 //printf("fStationInfoICRR[%i].fAntInfo[%i].diplexedChans[0] %i\n", fStationId, row, thisAntInfo->diplexedChans[0]); 00697 00698 break; 00699 case 14: //diplexedChans[1] 00700 00701 thisAntInfo->diplexedChans[1]=sqlite3_column_int(stmt, column); 00702 //printf("fStationInfoICRR[%i].fAntInfo[%i].diplexedChans[1] %i\n", fStationId, row, thisAntInfo->diplexedChans[1]); 00703 00704 break; 00705 case 15: //preAmpNum 00706 00707 thisAntInfo->preAmpNum=sqlite3_column_int(stmt, column); 00708 //printf("fStationInfoICRR[%i].fAntInfo[%i].preAmpNum %i\n", fStationId, row, thisAntInfo->preAmpNum); 00709 00710 break; 00711 case 16: //avgNoiseFigure 00712 00713 thisAntInfo->avgNoiseFigure=sqlite3_column_double(stmt, column); 00714 //printf("fStationInfoICRR[%i].fAntInfo[%i].avgNoiseFigure %f\n", fStationId, row, thisAntInfo->avgNoiseFigure); 00715 00716 break; 00717 case 17: //rcvrNum 00718 00719 thisAntInfo->rcvrNum=sqlite3_column_int(stmt, column); 00720 //printf("fStationInfoICRR[%i].fAntInfo[%i].rcvrNum %i\n", fStationId, row, thisAntInfo->rcvrNum); 00721 00722 break; 00723 case 18: //designator 00724 00725 temp = (const char*)sqlite3_column_text(stmt, column); 00726 strncpy(thisAntInfo->designator, temp, 3); 00727 //printf("fStationInfoICRR[%i].fAntInfo[%i].designator %s\n", fStationId, row, thisAntInfo->designator); 00728 00729 break; 00730 case 19: //antPolNum 00731 00732 thisAntInfo->antPolNum=sqlite3_column_int(stmt, column); 00733 //printf("fStationInfoICRR[%i].fAntInfo[%i].antPolNum %i\n", fStationId, row, thisAntInfo->antPolNum); 00734 00735 break; 00736 case 20: //antType 00737 00738 temp = (const char*)sqlite3_column_text(stmt, column); 00739 if(strcmp (temp,"kBicone")==0) thisAntInfo->antType=AraAntType::kBicone; 00740 if(strcmp (temp,"kBowtieSlot")==0) thisAntInfo->antType=AraAntType::kBowtieSlot; 00741 if(strcmp (temp,"kDiscone")==0) thisAntInfo->antType=AraAntType::kDiscone; 00742 if(strcmp (temp,"kBatwing")==0) thisAntInfo->antType=AraAntType::kBatwing; 00743 if(strcmp (temp,"kFatDipole")==0) thisAntInfo->antType=AraAntType::kFatDipole; 00744 if(strcmp (temp,"kQuadSlot")==0) thisAntInfo->antType=AraAntType::kQuadSlot; 00745 00746 //printf("fStationInfoICRR[%i].fAntInfo[%i].antType %i\n", fStationId, row, thisAntInfo->antType); 00747 00748 break; 00749 case 21: //polType 00750 00751 temp = (const char*)sqlite3_column_text(stmt, column); 00752 if(strcmp (temp,"kVertical")==0) thisAntInfo->polType=AraAntPol::kVertical; 00753 if(strcmp (temp,"kHorizontal")==0) thisAntInfo->polType=AraAntPol::kHorizontal; 00754 if(strcmp (temp,"kSurface")==0) thisAntInfo->polType=AraAntPol::kSurface; 00755 00756 //printf("fStationInfoICRR[%i].fAntInfo[%i].AraAntPol %i\n", fStationId, row, thisAntInfo->polType); 00757 00758 break; 00759 case 22: //locationName 00760 00761 temp = (const char*)sqlite3_column_text(stmt, column); 00762 strncpy(thisAntInfo->locationName, temp, 4); 00763 //printf("fStationInfoICRR[%i].fAntInfo[%i].locationName %s\n", fStationId, row, thisAntInfo->locationName); 00764 00765 00766 break; 00767 case 23: //antLocation[0] 00768 00769 thisAntInfo->antLocation[0]=sqlite3_column_double(stmt, column); 00770 //printf("fStationInfoICRR[%i].fAntInfo[%i].antLocation[0] %f\n", fStationId, row, thisAntInfo->antLocation[0]); 00771 00772 break; 00773 case 24: //antLocation[1] 00774 00775 thisAntInfo->antLocation[1]=sqlite3_column_double(stmt, column); 00776 //printf("fStationInfoICRR[%i].fAntInfo[%i].antLocation[1] %f\n", fStationId, row, thisAntInfo->antLocation[1]); 00777 00778 break; 00779 case 25: //antLocation[2] 00780 00781 thisAntInfo->antLocation[2]=sqlite3_column_double(stmt, column); 00782 //printf("fStationInfoICRR[%i].fAntInfo[%i].antLocation[2] %f\n", fStationId, row, thisAntInfo->antLocation[2]); 00783 00784 break; 00785 case 26: //cableDelay 00786 00787 thisAntInfo->cableDelay=sqlite3_column_double(stmt, column); 00788 //printf("fStationInfoICRR[%i].fAntInfo[%i].cableDelay %f\n", fStationId, row, thisAntInfo->cableDelay); 00789 00790 break; 00791 case 27: //debugHolePosition[0] 00792 00793 thisAntInfo->debugHolePosition[0]=sqlite3_column_double(stmt, column); 00794 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugHolePosition[0] %f\n", fStationId, row, thisAntInfo->debugHolePosition[0]); 00795 00796 break; 00797 case 28: //debugHolePosition[1] 00798 00799 thisAntInfo->debugHolePosition[1]=sqlite3_column_double(stmt, column); 00800 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugHolePosition[1] %f\n", fStationId, row, thisAntInfo->debugHolePosition[1]); 00801 00802 break; 00803 case 29: //debugHolePosition[2] 00804 00805 thisAntInfo->debugHolePosition[2]=sqlite3_column_double(stmt, column); 00806 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugHolePosition[2] %f\n", fStationId, row, thisAntInfo->debugHolePosition[2]); 00807 00808 break; 00809 case 30: //debugPreAmpDz 00810 00811 thisAntInfo->debugPreAmpDz=sqlite3_column_double(stmt, column); 00812 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugPreAmpDz %f\n", fStationId, row, thisAntInfo->debugPreAmpDz); 00813 00814 break; 00815 case 31: //debugHolePositionZft 00816 00817 thisAntInfo->debugHolePositionZft=sqlite3_column_double(stmt, column); 00818 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugHolePositionZft %f\n", fStationId, row, thisAntInfo->debugHolePositionZft); 00819 00820 break; 00821 case 32: //debugHolePositionZm 00822 00823 thisAntInfo->debugHolePositionZm=sqlite3_column_double(stmt, column); 00824 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugHolePositionZm %f\n", fStationId, row, thisAntInfo->debugHolePositionZm); 00825 00826 break; 00827 case 33: //debugTrueAsBuiltPosition[0] 00828 00829 thisAntInfo->debugTrueAsBuiltPositon[0]=sqlite3_column_double(stmt, column); 00830 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugTrueAsBuiltPositon[0] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[0]); 00831 00832 break; 00833 case 34: //debugTrueAsBuiltPosition[1] 00834 00835 thisAntInfo->debugTrueAsBuiltPositon[1]=sqlite3_column_double(stmt, column); 00836 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugTrueAsBuiltPositon[1] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[1]); 00837 00838 break; 00839 case 35: //debugTrueAsBuiltPosition[2] 00840 00841 thisAntInfo->debugTrueAsBuiltPositon[2]=sqlite3_column_double(stmt, column); 00842 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugTrueAsBuiltPositon[2] %f\n", fStationId, row, thisAntInfo->debugTrueAsBuiltPositon[2]); 00843 00844 break; 00845 case 36: //debugCableDelay2 00846 00847 thisAntInfo->debugCableDelay2=sqlite3_column_double(stmt, column); 00848 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugCableDelay2 %f\n", fStationId, row, thisAntInfo->debugCableDelay2); 00849 00850 break; 00851 case 37: //debugFeedPointDelay 00852 00853 thisAntInfo->debugFeedPointDelay=sqlite3_column_double(stmt, column); 00854 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugFeedPointDelay %f\n", fStationId, row, thisAntInfo->debugFeedPointDelay); 00855 00856 break; 00857 case 38: //debugTotalCableDelay 00858 00859 thisAntInfo->debugTotalCableDelay=sqlite3_column_double(stmt, column); 00860 //printf("fStationInfoICRR[%i].fAntInfo[%i].debugTotalCableDelay %f\n", fStationId, row, thisAntInfo->debugTotalCableDelay); 00861 00862 break; 00863 case 40: //antOrient[0] 00864 00865 thisAntInfo->antOrient[0]=sqlite3_column_double(stmt, column); 00866 //printf("fStationInfoICRR[%i].fAntInfo[%i].antOrient[0] %1.10f\n", fStationId, row, thisAntInfo->antOrient[0]); 00867 00868 break; 00869 00870 case 41: //antOrient[1] 00871 00872 thisAntInfo->antOrient[1]=sqlite3_column_double(stmt, column); 00873 //printf("fStationInfoICRR[%i].fAntInfo[%i].antOrient[1] %1.10f\n", fStationId, row, thisAntInfo->antOrient[1]); 00874 00875 break; 00876 00877 case 42: //antOrient[2] 00878 00879 thisAntInfo->antOrient[2]=sqlite3_column_double(stmt, column); 00880 //printf("fStationInfoICRR[%i].fAntInfo[%i].antOrient[2] %1.10f\n", fStationId, row, thisAntInfo->antOrient[2]); 00881 00882 break; 00883 00884 00885 default: 00886 00887 break; 00888 00889 }//switch(column) 00890 00891 }//column 00892 00893 00894 }//while(1) 00895 //now insert the no of rfchannels 00896 00897 // if(fStationId==ARA_TESTBED) { 00898 // fStationInfoICRR[0].setNumRFChans(RFCHANS_TESTBED); 00899 // fStationInfoICRR[0].setNumAnts(RFCHANS_TESTBED); 00900 // } 00901 // else if(fStationId==ARA_STATION1) { 00902 // fStationInfoICRR[1].setNumRFChans(RFCHANS_STATION1); 00903 // fStationInfoICRR[1].setNumAnts(RFCHANS_STATION1); 00904 // } 00905 00906 //now need to destroy the sqls statement prepared earlier 00907 rc = sqlite3_finalize(stmt); 00908 if(rc!=SQLITE_OK) printf("error finlizing sql statement\n"); 00909 // printf("sqlite3_finalize(stmt) = %i\n", rc); 00910 00911 //now close the connection to the database 00912 rc = sqlite3_close(db); 00913 if(rc!=SQLITE_OK) printf("error closing db\n"); 00914 00915 this->fillAntIndexVec(); 00916 this->fillTrigChanVec(); 00917 00918 } 00919 00920 00921 // ---------------------------------------------------------------------- 00922 00923 00924 void AraStationInfo::readCalPulserDb(){ 00925 sqlite3 *db; 00926 char *zErrMsg = 0; 00927 sqlite3_stmt *stmt; 00928 00929 char calibDir[FILENAME_MAX]; 00930 char fileName[FILENAME_MAX]; 00931 char *calibEnv=getenv("ARA_CALIB_DIR"); 00932 if(!calibEnv) { 00933 char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR"); 00934 if(!utilEnv) 00935 sprintf(calibDir,"calib"); 00936 else 00937 sprintf(calibDir,"%s/share/araCalib",utilEnv); 00938 } 00939 else { 00940 strncpy(calibDir,calibEnv,FILENAME_MAX); 00941 } 00942 sprintf(fileName, "%s/CalPulserInfo.sqlite", calibDir); 00943 00944 //open the database 00945 // int rc = sqlite3_open_v2(fileName, &db, SQLITE_OPEN_READONLY, NULL); 00946 int rc = sqlite3_open(fileName, &db);; 00947 if(rc!=SQLITE_OK){ 00948 printf("AraStationInfo::readCalPulserDb() - Can't open database: %s\n", sqlite3_errmsg(db)); 00949 sqlite3_close(db); 00950 return; 00951 } 00952 00953 const char *query; 00954 00955 //This is where we decide which table to access in the database 00956 if(fStationId==ARA_TESTBED) query = "select * from TESTBED"; 00957 else if(fStationId==ARA_STATION1B) query = "select * from ARA01"; 00958 else if(fStationId==ARA_STATION2) query = "select * from ARA02"; 00959 else if(fStationId==ARA_STATION3) query = "select * from ARA03"; 00960 else{ 00961 fprintf(stderr, "%s : Not loading calpulser information - fStationId %i is not ARA1-3\n", __FUNCTION__, fStationId); 00962 return; 00963 } 00964 //prepare an sql statment which will be used to obtain information from the data base 00965 // rc=sqlite3_prepare_v2(db, query, strlen(query)+1, &stmt, NULL); 00966 rc=sqlite3_prepare(db, query, strlen(query)+1, &stmt, NULL); 00967 00968 if(rc!=SQLITE_OK){ 00969 printf("AraStationInfo::readCalPulserDb() statement not prepared OK\n"); 00970 //should close the data base and exit the function 00971 sqlite3_close(db); 00972 return; 00973 } 00974 00975 int calAntId=0; 00976 int row=0; 00977 while(1){ 00978 //printf("row number %i\n", row); 00979 rc=sqlite3_step(stmt); 00980 if(rc==SQLITE_DONE) break; 00981 int nColumns=sqlite3_column_count(stmt); 00982 00983 row=sqlite3_column_int(stmt, 2)-1;//forcing the row to be correct 00984 //printf("row number %i\n", row); 00985 AraCalAntennaInfo *thisAntInfo=NULL; 00986 00987 for(int column=0;column<nColumns;column++){ 00988 00989 const char* temp; 00990 00991 switch(column){ 00992 case 0: //primary key - fStationId+labChip+channel 00993 calAntId=sqlite3_column_int(stmt,column); 00994 thisAntInfo=this->getNewCalAntennaInfo(calAntId); 00995 break; 00996 case 1: //locationName 00997 temp = (const char*)sqlite3_column_text(stmt, column); 00998 strncpy(thisAntInfo->locationName, temp, 4); 00999 break; 01000 case 2: //antName 01001 temp = (const char*)sqlite3_column_text(stmt, column); 01002 strncpy(thisAntInfo->antName, temp, 4); 01003 break; 01004 case 3: //pulserName 01005 temp = (const char*)sqlite3_column_text(stmt, column); 01006 strncpy(thisAntInfo->pulserName, temp, 4); 01007 break; 01008 case 4: //antType 01009 temp = (const char*)sqlite3_column_text(stmt, column); 01010 if(strcmp (temp,"kBicone")==0) thisAntInfo->antType=AraAntType::kBicone; 01011 if(strcmp (temp,"kBowtieSlot")==0) thisAntInfo->antType=AraAntType::kBowtieSlot; 01012 if(strcmp (temp,"kDiscone")==0) thisAntInfo->antType=AraAntType::kDiscone; 01013 if(strcmp (temp,"kBatwing")==0) thisAntInfo->antType=AraAntType::kBatwing; 01014 if(strcmp (temp,"kFatDipole")==0) thisAntInfo->antType=AraAntType::kFatDipole; 01015 if(strcmp (temp,"kQuadSlot")==0) thisAntInfo->antType=AraAntType::kQuadSlot; 01016 //printf("fStationInfoATRI[%i].fAntInfo[%i].antType %i\n", fStationId, row, thisAntInfo->antType); 01017 break; 01018 case 5: //polType 01019 temp = (const char*)sqlite3_column_text(stmt, column); 01020 if(strcmp (temp,"kVertical")==0) thisAntInfo->polType=AraAntPol::kVertical; 01021 if(strcmp (temp,"kHorizontal")==0) thisAntInfo->polType=AraAntPol::kHorizontal; 01022 if(strcmp (temp,"kSurface")==0) thisAntInfo->polType=AraAntPol::kSurface; 01023 //printf("fStationInfoATRI[%i].fAntInfo[%i].AraAntPol %i\n", fStationId, row, thisAntInfo->polType); 01024 break; 01025 case 6: //antLocation[0] 01026 01027 thisAntInfo->antLocation[0]=sqlite3_column_double(stmt, column); 01028 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[0] %f\n", fStationId, row, thisAntInfo->antLocation[0]); 01029 01030 break; 01031 case 7: //antLocation[1] 01032 01033 thisAntInfo->antLocation[1]=sqlite3_column_double(stmt, column); 01034 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[1] %f\n", fStationId, row, thisAntInfo->antLocation[1]); 01035 01036 break; 01037 case 8: //antLocation[2] 01038 01039 thisAntInfo->antLocation[2]=sqlite3_column_double(stmt, column); 01040 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocation[2] %f\n", fStationId, row, thisAntInfo->antLocation[2]); 01041 01042 break; 01043 case 9: //cableDelay 01044 01045 thisAntInfo->cableDelay=sqlite3_column_double(stmt, column); 01046 //printf("fStationInfoATRI[%i].fAntInfo[%i].cableDelay %f\n", fStationId, row, thisAntInfo->cableDelay); 01047 01048 break; 01049 01050 01051 case 10: //antLocationCalib[0] 01052 01053 thisAntInfo->antLocationCalib[0]=sqlite3_column_double(stmt, column); 01054 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocationCalib[0] %f\n", fStationId, row, thisAntInfo->antLocationCalib[0]); 01055 01056 break; 01057 case 11: //antLocationCalib[1] 01058 01059 thisAntInfo->antLocationCalib[1]=sqlite3_column_double(stmt, column); 01060 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocationCalib[1] %f\n", fStationId, row, thisAntInfo->antLocationCalib[1]); 01061 01062 break; 01063 case 12: //antLocationCalib[2] 01064 01065 thisAntInfo->antLocationCalib[2]=sqlite3_column_double(stmt, column); 01066 //printf("fStationInfoATRI[%i].fAntInfo[%i].antLocationCalib[2] %f\n", fStationId, row, thisAntInfo->antLocationCalib[2]); 01067 01068 break; 01069 case 13: //cableDelayCalib 01070 01071 thisAntInfo->cableDelayCalib=sqlite3_column_double(stmt, column); 01072 //printf("fStationInfoATRI[%i].fAntInfo[%i].cableDelay %f\n", fStationId, row, thisAntInfo->cableDelay); 01073 01074 break; 01075 01076 01077 default: 01078 01079 break; 01080 01081 }//switch(column) 01082 01083 }//column 01084 thisAntInfo->fillArrayCoords(); 01085 }//while(1) 01086 01087 //now need to destroy the sqls statement prepared earlier 01088 rc = sqlite3_finalize(stmt); 01089 if(rc!=SQLITE_OK) printf("error finlizing sql statement\n"); 01090 // printf("sqlite3_finalize(stmt) = %i\n", rc); 01091 01092 //now close the connection to the database 01093 rc = sqlite3_close(db); 01094 if(rc!=SQLITE_OK) printf("error closing db\n"); 01095 01096 } 01097 01098 // ---------------------------------------------------------------------- 01099 01100 01101 void AraStationInfo::readChannelMapDbAtri_2(){ 01102 sqlite3 *db; 01103 char *zErrMsg = 0; 01104 sqlite3_stmt *stmt; 01105 01106 char calibDir[FILENAME_MAX]; 01107 char fileName[FILENAME_MAX]; 01108 char *calibEnv=getenv("ARA_CALIB_DIR"); 01109 if(!calibEnv) { 01110 char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR"); 01111 if(!utilEnv) 01112 sprintf(calibDir,"calib"); 01113 else 01114 sprintf(calibDir,"%s/share/araCalib",utilEnv); 01115 } 01116 else { 01117 strncpy(calibDir,calibEnv,FILENAME_MAX); 01118 } 01119 sprintf(fileName, "%s/AntennaInfo.sqlite", calibDir); 01120 //open the database 01121 int rc = sqlite3_open(fileName, &db);; 01122 if(rc!=SQLITE_OK){ 01123 fprintf(stderr, "%s - Can't open database: %s\n", __FUNCTION__, sqlite3_errmsg(db)); 01124 sqlite3_close(db); 01125 return; 01126 } 01127 01128 const char *query; 01129 01130 //This is where we decide which table to access in the database 01131 if(fStationId==ARA_STATION1B) query = "select * from ARA01"; 01132 else if(fStationId==ARA_STATION2) query = "select * from ARA02"; 01133 else if(fStationId==ARA_STATION3) query = "select * from ARA03"; 01134 else{ 01135 fprintf(stderr, "%s : fStationId %i is not ARA1-3\n", __FUNCTION__, fStationId); 01136 return; 01137 } 01138 01139 rc=sqlite3_prepare(db, query, strlen(query)+1, &stmt, NULL); 01140 01141 if(rc!=SQLITE_OK){ 01142 fprintf(stderr, "%s : statement not prepared OK\n", __FUNCTION__); 01143 sqlite3_close(db); 01144 return; 01145 } 01146 01147 int antId=0; 01148 AraAntennaInfo *thisAntInfo=NULL; 01149 while(1){ 01150 //printf("row number %i\n", row); 01151 rc=sqlite3_step(stmt); 01152 if(rc==SQLITE_DONE) break; 01153 int nColumns=sqlite3_column_count(stmt); 01154 01155 for(int column=0;column<nColumns;column++){ 01156 01157 const char* temp; 01158 01159 switch(column){ 01160 case 0: //primary key 01161 antId=sqlite3_column_int(stmt,column); 01162 thisAntInfo=this->getNewAntennaInfo(antId); 01163 thisAntInfo->chanNum=antId; 01164 // printf("\n\nthisAntInfo->chanNum=antId %i\n", thisAntInfo->chanNum=antId); 01165 break; 01166 case 1://holeName 01167 temp = (const char*)sqlite3_column_text(stmt, column); 01168 strncpy(thisAntInfo->holeName, temp, 6); 01169 // printf("thisAntInfo->holeName %s\n", thisAntInfo->holeName, temp); 01170 break; 01171 case 2://antName 01172 temp = (const char*)sqlite3_column_text(stmt, column); 01173 strncpy(thisAntInfo->antName, temp, 6); 01174 // printf("thisAntInfo->holeName %s\n", thisAntInfo->holeName, temp); 01175 // printf("thisAntInfo->antName %s\n", thisAntInfo->antName, temp); 01176 break; 01177 case 3://polType 01178 temp = (const char*)sqlite3_column_text(stmt, column); 01179 if(strcmp (temp,"kVertical")==0) thisAntInfo->polType=AraAntPol::kVertical; 01180 if(strcmp (temp,"kHorizontal")==0) thisAntInfo->polType=AraAntPol::kHorizontal; 01181 if(strcmp (temp,"kSurface")==0) thisAntInfo->polType=AraAntPol::kSurface; 01182 //printf("thisAntInfo->polType %i\n", thisAntInfo->polType); 01183 break; 01184 case 4://antPolNum 01185 thisAntInfo->antPolNum=sqlite3_column_int(stmt, column); 01186 //printf("thisAntInfo->antPolNum %i\n", thisAntInfo->antPolNum); 01187 break; 01188 case 5://daqChanNum 01189 thisAntInfo->daqChanNum=sqlite3_column_int(stmt, column); 01190 //printf("thisAntInfo->daqChanNum %i\n", thisAntInfo->daqChanNum); 01191 break; 01192 case 6://daqTrigChan 01193 thisAntInfo->daqTrigChan=sqlite3_column_int(stmt, column); 01194 //printf("thisAntInfo->daqTrigChan %i\n", thisAntInfo->daqTrigChan); 01195 break; 01196 case 7://foamId 01197 thisAntInfo->foamId=sqlite3_column_int(stmt, column); 01198 //printf("thisAntInfo->foamId %i\n", thisAntInfo->foamId); 01199 break; 01200 case 8://foamChanNum 01201 thisAntInfo->foamChanNum=sqlite3_column_int(stmt, column); 01202 //printf("thisAntInfo->foamChanNum %i\n", thisAntInfo->foamChanNum); 01203 break; 01204 case 9://antType 01205 temp = (const char*)sqlite3_column_text(stmt, column); 01206 if(strcmp (temp,"kBicone")==0) thisAntInfo->antType=AraAntType::kBicone; 01207 if(strcmp (temp,"kBowtieSlot")==0) thisAntInfo->antType=AraAntType::kBowtieSlot; 01208 if(strcmp (temp,"kDiscone")==0) thisAntInfo->antType=AraAntType::kDiscone; 01209 if(strcmp (temp,"kBatwing")==0) thisAntInfo->antType=AraAntType::kBatwing; 01210 if(strcmp (temp,"kFatDipole")==0) thisAntInfo->antType=AraAntType::kFatDipole; 01211 if(strcmp (temp,"kQuadSlot")==0) thisAntInfo->antType=AraAntType::kQuadSlot; 01212 //printf("thisAntInfo->antType %s\n", AraAntType::antTypeAsString(thisAntInfo->antType)); 01213 break; 01214 case 10://antLocationX 01215 thisAntInfo->antLocation[0]=sqlite3_column_double(stmt, column); 01216 //printf("thisAntInfo->antLocation[0] %f\n", thisAntInfo->antLocation[0]); 01217 break; 01218 case 11://antLocationY 01219 thisAntInfo->antLocation[1]=sqlite3_column_double(stmt, column); 01220 //printf("thisAntInfo->antLocation[1] %f\n", thisAntInfo->antLocation[1]); 01221 break; 01222 case 12://antLocationZ 01223 thisAntInfo->antLocation[2]=sqlite3_column_double(stmt, column); 01224 //printf("thisAntInfo->antLocation[2] %f\n", thisAntInfo->antLocation[2]); 01225 break; 01226 case 13://cableDelay 01227 thisAntInfo->cableDelay=sqlite3_column_double(stmt, column); 01228 break; 01229 case 14://calibAntLocationX 01230 thisAntInfo->calibAntLocation[0]=sqlite3_column_double(stmt, column); 01231 //printf("thisAntInfo->calibAntLocation[0] %f\n", thisAntInfo->calibAntLocation[0]); 01232 break; 01233 case 15://calibAntLocationY 01234 thisAntInfo->calibAntLocation[1]=sqlite3_column_double(stmt, column); 01235 //printf("thisAntInfo->calibAntLocation[1] %f\n", thisAntInfo->calibAntLocation[1]); 01236 break; 01237 case 16://calibAntLocationZ 01238 thisAntInfo->calibAntLocation[2]=sqlite3_column_double(stmt, column); 01239 //printf("thisAntInfo->calibAntLocation[2] %f\n", thisAntInfo->calibAntLocation[2]); 01240 break; 01241 case 17://calibCableDelay 01242 thisAntInfo->calibCableDelay=sqlite3_column_double(stmt, column); 01243 break; 01244 case 18://antOrientX 01245 thisAntInfo->antOrient[0]=sqlite3_column_double(stmt, column); 01246 //printf("thisAntInfo->antOrient[0] %f\n", thisAntInfo->antOrient[0]); 01247 break; 01248 case 19://antOrientY 01249 thisAntInfo->antOrient[1]=sqlite3_column_double(stmt, column); 01250 //printf("thisAntInfo->antOrient[1] %f\n", thisAntInfo->antOrient[1]); 01251 break; 01252 case 20://antOrientZ 01253 thisAntInfo->antOrient[2]=sqlite3_column_double(stmt, column); 01254 //printf("thisAntInfo->antOrient[2] %f\n", thisAntInfo->antOrient[2]); 01255 break; 01256 case 21://highPassFilterMhz 01257 thisAntInfo->highPassFilterMhz=sqlite3_column_double(stmt, column); 01258 //printf("thisAntInfo->highPassFilterMhz %f\n", thisAntInfo->highPassFilterMhz); 01259 break; 01260 case 22://lowPassFilterMhz 01261 thisAntInfo->lowPassFilterMhz=sqlite3_column_double(stmt, column); 01262 //printf("thisAntInfo->lowPassFilterMhz %f\n", thisAntInfo->lowPassFilterMhz); 01263 break; 01264 case 23://avgNoiseFigure 01265 thisAntInfo->avgNoiseFigure=sqlite3_column_double(stmt, column); 01266 //printf("thisAntInfo->avgNoiseFigure %f\n", thisAntInfo->avgNoiseFigure); 01267 break; 01268 default: 01269 break; 01270 01271 }//switch(column) 01272 01273 }//column 01274 //RJN fixed string copying bug 01275 strncpy(thisAntInfo->designator, thisAntInfo->getRFChanName(),12); 01276 01277 thisAntInfo->fillArrayCoords(); 01278 01279 }//while(1) 01280 01281 rc = sqlite3_finalize(stmt); 01282 if(rc!=SQLITE_OK) fprintf(stderr, "%s : error finlizing sql statement\n", __FUNCTION__); 01283 rc = sqlite3_close(db); 01284 if(rc!=SQLITE_OK) fprintf(stderr, "%s : error closing db\n", __FUNCTION__); 01285 01286 this->fillAntIndexVec(); 01287 this->fillTrigChanVec(); 01288 01289 01290 } 01291 01292 01293 01294 //Labelling for TDA channels just for the ATRI stations 01295 const char *AraStationInfo::getAtriSingleChannelLabel(Int_t tda, Int_t channel) 01296 { 01297 AraAntennaInfo *antInfo = getAntennaInfoForTrigChan(getTrigChan(tda,channel)); 01298 if(antInfo) 01299 return antInfo->getRFChanName(); 01300 return NULL; 01301 01302 } 01303 01304 const char *AraStationInfo::getAtriL2Label(Int_t index) 01305 { 01306 switch(index) { 01307 case 0: return "S1/2 VPol"; 01308 case 1: return "S3/4 VPol"; 01309 case 2: return "S1/2 HPol"; 01310 case 3: return "S3/4 HPol"; 01311 default: return "Unknown"; 01312 } 01313 01314 } 01315 01316 const char *AraStationInfo::getAtriL3Label(Int_t index) 01317 { 01318 switch(index) { 01319 case 0: return "VPol"; 01320 case 1: return "HPol"; 01321 default: return "Unknown"; 01322 } 01323 01324 } 01325 01326 const char *AraStationInfo::getAtriL4Label(Int_t index) 01327 { 01328 01329 switch(index) { 01330 case 0: return "Deep"; 01331 case 1: return "Surface"; 01332 case 2: return "Software"; 01333 case 3: return "Timed"; 01334 default: return "Unknown"; 01335 } 01336 01337 }
Generated on Mon Dec 9 13:20:21 2013 for ARA ROOT v3.13 Software by
