ARA ROOT v3.13 Software

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 doxygen 1.4.7