ARA ROOT v3.13 Software

AraEvent/AraGeomTool.cxx

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 #include "AraGeomTool.h"
00011 #include <iostream>
00012 #include <fstream>
00013 #include <cstring>
00014 #include <zlib.h>
00015 #include <cstdlib>
00016 
00017 
00018 //sqlite includes
00019 #include <sqlite3.h>
00020 
00021 #include "TString.h"
00022 #include "TObjArray.h"
00023 #include "TObjString.h"
00024 #include "TVector3.h"
00025 
00026 AraGeomTool * AraGeomTool::fgInstance=0;
00027 Double_t AraGeomTool::nTopOfIce=1.48;
00028 const Double_t fFtInm=0.3048;
00029 
00030 //Some locations in ARA global coordinates
00031 Double_t fSouthPole2010_11[3]={27344.05*fFtInm,-3395.14*fFtInm,-35.63*fFtInm};
00032 Double_t fSouthPole2011_12[3]={27322.88*fFtInm,-3369.89*fFtInm,-36.02*fFtInm};
00033 Double_t fSouthPoleTelescope[3]={24774.18*fFtInm,-871.35*fFtInm,-30*fFtInm};  
00034 Double_t fICL2011_12[4][3]={{24011.58*fFtInm,-1702.53*fFtInm,0},
00035                             {24060.51*fFtInm,-1723.09*fFtInm,0},
00036                             {24049.7*fFtInm,-1749.02*fFtInm,0},
00037                             {24000.78*fFtInm,-1728.47*fFtInm,0}};
00038 
00039 Double_t fWindTurbine2011_12[3][3]={{46166.49*fFtInm,52159.43*fFtInm,0},
00040                                     {22546.95*fFtInm,-2594.03*fFtInm,0},
00041                                     {18662.31*fFtInm,-3552.64*fFtInm,0}};
00042 
00043 
00044 
00045 Double_t *AraGeomTool::getSouthPole2010_11()
00046 {
00047   return fSouthPole2010_11;
00048 }
00049 
00050 Double_t *AraGeomTool::getSouthPole2011_12()
00051 {
00052   return fSouthPole2011_12;
00053 }
00054 
00055 Double_t *AraGeomTool::getSouthPoleTelescope()
00056 {
00057   return fSouthPoleTelescope;
00058 }
00059 
00060 Double_t *AraGeomTool::getICLCorner(int corner)  
00061 {
00062   return fICL2011_12[corner];
00063 }
00064 
00065 Double_t *AraGeomTool::getWindTurbine(int tbNumber) 
00066 {
00067   return fWindTurbine2011_12[tbNumber-1];
00068 }
00069 
00070 AraGeomTool::AraGeomTool() 
00071 {
00072    //Default Constructor
00073 
00074   //Read in the channel maps for the TestBed and Station1
00075   // readChannelMapDbIcrr(ARA_TESTBED);
00076   // readChannelMapDbIcrr(ARA_STATION1);
00077   // readChannelMapDbAtri(ARA_STATION1B);
00078   for(int i=0;i<ICRR_NO_STATIONS;i++) {
00079     fStationInfoICRR[i]=NULL;
00080     fArrayToStationRotationICRR[i]=NULL;
00081     fStationToArrayRotationICRR[i]=NULL;
00082   }
00083   for(int i=0;i<ATRI_NO_STATIONS;i++) {
00084     fStationInfoATRI[i]=0;
00085     fArrayToStationRotationATRI[i]=NULL;
00086     fStationToArrayRotationATRI[i]=NULL;
00087   }
00088   
00089   readAraArrayCoords();
00090 }
00091 
00092 AraGeomTool::~AraGeomTool() {
00093    //Default Destructor
00094   for(int i=0;i<ICRR_NO_STATIONS;i++)  {
00095     if(fStationInfoICRR[i]) delete fStationInfoICRR[i];
00096   }
00097   for(int i=0;i<ATRI_NO_STATIONS;i++) {
00098     if(fStationInfoATRI[i]) delete fStationInfoATRI[i];
00099   }
00100 }
00101 
00102 //______________________________________________________________________________
00103 AraGeomTool*  AraGeomTool::Instance()
00104 {
00105   //static function
00106   if(fgInstance)
00107     return fgInstance;
00108 
00109   fgInstance = new AraGeomTool();
00110   return fgInstance;
00111 }
00112 
00113 int AraGeomTool::getRFChanByPolAndAnt(AraAntPol::AraAntPol_t antPol, int antNum, AraStationId_t stationId)
00114 {
00115   
00116   //  fprintf(stderr, "antPol %i antNum %i stationId %i\n", (int)antPol, antNum, (int)stationId);
00117   return getStationInfo(stationId)->getRFChanByPolAndAnt(antNum,antPol);
00118 }
00119 
00120 
00121 AraAntPol::AraAntPol_t AraGeomTool::getPolByRFChan(int rfChan, AraStationId_t stationId)
00122 {
00123   //RJN Should add a check here for safety
00124   if(getStationInfo(stationId)) {
00125     return getStationInfo(stationId)->getAntennaInfo(rfChan)->polType;
00126   }
00127    return AraAntPol::kNotAPol;
00128 }
00129 
00130 Int_t AraGeomTool::getAntNumByRFChan(int rfChan, AraStationId_t stationId)
00131 {
00132   //RJN Should add a check here for safety
00133   if(getStationInfo(stationId))
00134     return getStationInfo(stationId)->getAntennaInfo(rfChan)->antPolNum;
00135   return -1;
00136 }
00137 
00138 
00139 // //FIXME //jpd this is most definitely a hack to make AraCanvasMaker work -> this will only
00140 // //return the testbed lookup stuff not station1
00141 // int AraGeomTool::getRFChanByPolAndAnt(AraAntPol::AraAntPol_t antPol, int antNum)
00142 // {
00143 //   return getRFChanByPolAndAnt(antPol,antNum,ARA_STATION1);
00144 // }//FIXME -- this just loads the stuff for station1
00145 
00146 Double_t AraGeomTool::calcDeltaTSimple(Double_t ant1[3], Double_t ant2[3], Double_t source[3]) {
00147   Double_t d1=TMath::Sqrt(TMath::Power(ant1[0]-source[0],2)+TMath::Power(ant1[1]-source[1],2)+TMath::Power(ant1[2]-source[2],2));
00148   Double_t d2=TMath::Sqrt(TMath::Power(ant2[0]-source[0],2)+TMath::Power(ant2[1]-source[1],2)+TMath::Power(ant2[2]-source[2],2));
00149   Double_t t1t2=(d2-d1)*nTopOfIce/TMath::C();
00150   t1t2*=1e9;
00151   return t1t2;
00152 }
00153 
00154 
00155 Double_t AraGeomTool::calcDeltaTInfinity(Double_t ant1[3], Double_t ant2[3],Double_t phiWave, Double_t thetaWave)
00156 {
00157   //Calc some cylindrical coordinates
00158   Double_t rho1=TMath::Sqrt(ant1[0]*ant1[0]+ant1[1]*ant1[1]);
00159   Double_t phi1=TMath::ATan2(ant1[1],ant1[0]);
00160   Double_t rho2=TMath::Sqrt(ant2[0]*ant2[0]+ant2[1]*ant2[1]);
00161   Double_t phi2=TMath::ATan2(ant2[1],ant2[0]);
00162   Double_t d1=TMath::Cos(thetaWave)*(ant1[2]*TMath::Tan(thetaWave)+rho1*TMath::Cos(phi1-phiWave));
00163   Double_t d2=TMath::Cos(thetaWave)*(ant2[2]*TMath::Tan(thetaWave)+rho2*TMath::Cos(phi2-phiWave));
00164   Double_t t1t2=(d2-d1)*nTopOfIce/TMath::C();
00165   t1t2*=1e9;
00166   return t1t2;
00167 
00168 }
00169 
00170 //jd
00171 Double_t AraGeomTool::calcDeltaTInfinity(Int_t chan1, Int_t chan2,Double_t phiWave, Double_t thetaWave, AraStationId_t stationId)
00172 {
00173   if(chan1<0 || chan1>=TOTAL_ANTS_PER_ICRR)
00174     return 0;
00175   if(chan2<0 || chan2>=TOTAL_ANTS_PER_ICRR)
00176     return 0;
00177   return calcDeltaTInfinity(getStationInfo(stationId)->fAntInfo[chan1].antLocation,getStationInfo(stationId)->fAntInfo[chan2].antLocation,phiWave,thetaWave);            
00178 }
00179 
00180 Double_t AraGeomTool::calcDeltaTR(Double_t ant1[3], Double_t ant2[3], Double_t phiWave, Double_t thetaWave,Double_t R)
00181 {
00182 
00183   Double_t xs=R*TMath::Cos(thetaWave)*TMath::Cos(phiWave);
00184   Double_t ys=R*TMath::Cos(thetaWave)*TMath::Sin(phiWave);
00185   Double_t zs=R*TMath::Sin(thetaWave);
00186 
00187   
00188   Double_t d1=TMath::Sqrt((xs-ant1[0])*(xs-ant1[0])+(ys-ant1[1])*(ys-ant1[1])+(zs-ant1[2])*(zs-ant1[2]));
00189   Double_t d2=TMath::Sqrt((xs-ant2[0])*(xs-ant2[0])+(ys-ant2[1])*(ys-ant2[1])+(zs-ant2[2])*(zs-ant2[2]));
00190          
00191   Double_t t1t2=(d1-d2)*nTopOfIce/TMath::C();
00192   t1t2*=1e9;
00193   return t1t2;
00194 
00195 }
00196 
00197 //jd
00198 Double_t AraGeomTool::calcDeltaTR(Int_t chan1, Int_t chan2, Double_t phiWave, Double_t thetaWave,Double_t R, AraStationId_t stationId)
00199 {
00200   if(chan1<0 || chan1>=TOTAL_ANTS_PER_ICRR)
00201     return 0;
00202   if(chan2<0 || chan2>=TOTAL_ANTS_PER_ICRR)
00203     return 0;
00204   return calcDeltaTR(getStationInfo(stationId)->fAntInfo[chan1].antLocation,getStationInfo(stationId)->fAntInfo[chan2].antLocation,phiWave,thetaWave,R);   
00205 
00206 }
00207 
00208 
00209 
00210 bool AraGeomTool::isIcrrStation(AraStationId_t stationId){ 
00211    //RJN changed
00212   if(stationId==ARA_TESTBED||stationId==ARA_STATION1) return true; 
00213   else return false;
00214   
00215 }
00216 
00217 bool AraGeomTool::isAtriStation(AraStationId_t stationId){
00218 
00219   if(isIcrrStation(stationId)) return false;
00220   else return true;
00221 
00222 }
00223 
00224 Int_t AraGeomTool::getStationNumber(AraStationId_t stationId){
00225    if(ARA_TESTBED) 
00226       return 0;
00227    if(ARA_STATION1B || ARA_STATION1) 
00228       return 1;
00229    return (int)stationId;
00230 }
00231 
00232 
00233 Int_t AraGeomTool::getStationCalibIndex(AraStationId_t stationId){
00234   
00235   switch(stationId){
00236     
00237   case ARA_TESTBED:
00238      return 0;
00239      break;
00240   case ARA_STATION1:
00241      return 1;
00242      break;
00243   case ARA_STATION1B:
00244      return 0;
00245      break;
00246   case ARA_STATION2:
00247      return 1;
00248      break;
00249   case ARA_STATION3:
00250      return 2;
00251     break;
00252   case ARA_STATION4:
00253     return 3;
00254     break;
00255   case ARA_STATION5:
00256     return 4;
00257     break;
00258   case ARA_STATION6:
00259     return 5;
00260     break;
00261   case ARA_STATION7:
00262     return 6;
00263     break;
00264   case ARA_STATION8:
00265     return 7;
00266     break;
00267   case ARA_STATION9:
00268     return 8;
00269     break;
00270   case ARA_STATION10:
00271     return 9;
00272     break;
00273   case ARA_STATION11:
00274     return 10;
00275     break;
00276   case ARA_STATION12:
00277     return 11;
00278     break;
00279   case ARA_STATION13:
00280     return 12;
00281     break;
00282   case ARA_STATION14:
00283     return 13;
00284     break;
00285   case ARA_STATION15:
00286     return 14;
00287     break;
00288   case ARA_STATION16:
00289     return 15;
00290     break;
00291   case ARA_STATION17:
00292     return 16;
00293     break;
00294   case ARA_STATION18:
00295     return 17;
00296     break;
00297   case ARA_STATION19:
00298     return 18;
00299     break;
00300   case ARA_STATION20:
00301     return 19;
00302     break;
00303   case ARA_STATION21:
00304     return 20;
00305     break;
00306   case ARA_STATION22:
00307     return 21;
00308     break;
00309   case ARA_STATION23:
00310     return 22;
00311     break;
00312   case ARA_STATION24:
00313     return 23;
00314     break;
00315   case ARA_STATION25:
00316     return 24;
00317     break;
00318   case ARA_STATION26:
00319     return 25;
00320     break;
00321   case ARA_STATION27:
00322     return 26;
00323     break;
00324   case ARA_STATION28:
00325     return 27;
00326     break;
00327   case ARA_STATION29:
00328     return 28;
00329     break;
00330   case ARA_STATION30:
00331     return 29;
00332     break;
00333   case ARA_STATION31:
00334     return 30;
00335     break;
00336   case ARA_STATION32:
00337     return 31;
00338     break;
00339   case ARA_STATION33:
00340     return 32;
00341     break;
00342   case ARA_STATION34:
00343     return 33;
00344     break;
00345   case ARA_STATION35:
00346     return 34;
00347     break;
00348   case ARA_STATION36:
00349     return 35;
00350     break;
00351   case ARA_STATION37:
00352     return 36;
00353     break;
00354   default:
00355     fprintf(stderr, "AraGeomTool::getStationCalibIndex -- Error - Unknown stationId %i\n", stationId);
00356     return -1;
00357   }
00358 }
00359 
00360 
00361 
00362 
00363 void AraGeomTool::printStationName(AraStationId_t stationId){
00364 
00365   std::cout << getStationName(stationId) << "\n";
00366 }
00367 
00368 const char* AraGeomTool::getStationName(AraStationId_t stationId){
00369 
00370   switch(stationId){
00371 
00372   case ARA_TESTBED:
00373     return "TESTBED";
00374     break;
00375   case ARA_STATION1:
00376     return "STATION1";
00377     break;
00378   case ARA_STATION1B:
00379     return "STATION1B";
00380     break;
00381   case ARA_STATION2:
00382     return "STATION2";
00383     break;
00384   case ARA_STATION3:
00385     return "STATION3";
00386     break;
00387   case ARA_STATION4:
00388     return "STATION4";
00389     break;
00390   case ARA_STATION5:
00391     return "STATION5";
00392     break;
00393   case ARA_STATION6:
00394     return "STATION6";
00395     break;
00396   case ARA_STATION7:
00397     return "STATION7";
00398     break;
00399   case ARA_STATION8:
00400     return "STATION8";
00401     break;
00402   case ARA_STATION9:
00403     return "STATION9";
00404     break;
00405   case ARA_STATION10:
00406     return "STATION10";
00407     break;
00408   case ARA_STATION11:
00409     return "STATION11";
00410     break;
00411   case ARA_STATION12:
00412     return "STATION12";
00413     break;
00414   case ARA_STATION13:
00415     return "STATION13";
00416     break;
00417   case ARA_STATION14:
00418     return "STATION14";
00419     break;
00420   case ARA_STATION15:
00421     return "STATION15";
00422     break;
00423   case ARA_STATION16:
00424     return "STATION16";
00425     break;
00426   case ARA_STATION17:
00427     return "STATION17";
00428     break;
00429   case ARA_STATION18:
00430     return "STATION18";
00431     break;
00432   case ARA_STATION19:
00433     return "STATION19";
00434     break;
00435   case ARA_STATION20:
00436     return "STATION20";
00437     break;
00438   case ARA_STATION21:
00439     return "STATION21";
00440     break;
00441   case ARA_STATION22:
00442     return "STATION22";
00443     break;
00444   case ARA_STATION23:
00445     return "STATION23";
00446     break;
00447   case ARA_STATION24:
00448     return "STATION24";
00449     break;
00450   case ARA_STATION25:
00451     return "STATION25";
00452     break;
00453   case ARA_STATION26:
00454     return "STATION26";
00455     break;
00456   case ARA_STATION27:
00457     return "STATION27";
00458     break;
00459   case ARA_STATION28:
00460     return "STATION28";
00461     break;
00462   case ARA_STATION29:
00463     return "STATION29";
00464     break;
00465   case ARA_STATION30:
00466     return "STATION30";
00467     break;
00468   case ARA_STATION31:
00469     return "STATION31";
00470     break;
00471   case ARA_STATION32:
00472     return "STATION32";
00473     break;
00474   case ARA_STATION33:
00475     return "STATION33";
00476     break;
00477   case ARA_STATION34:
00478     return "STATION34";
00479     break;
00480   case ARA_STATION35:
00481     return "STATION35";
00482     break;
00483   case ARA_STATION36:
00484     return "STATION36";
00485     break;
00486   case ARA_STATION37:
00487     return "STATION37";
00488     break;
00489   default:
00490     return "Unkown StationId";
00491     break;
00492   }
00493 
00494 }
00495 
00496 
00497 AraStationInfo *AraGeomTool::getStationInfo(AraStationId_t stationId)
00498 {
00499   int calibIndex=getStationCalibIndex(stationId);
00500   if(isIcrrStation(stationId)) {
00501     if(!fStationInfoICRR[calibIndex]) {
00502       fStationInfoICRR[calibIndex] = new AraStationInfo(stationId);
00503     }
00504     if(calibIndex>=0 && calibIndex<ICRR_NO_STATIONS)
00505       return fStationInfoICRR[calibIndex];
00506   }
00507   if(isAtriStation(stationId)) {
00508     if(!fStationInfoATRI[calibIndex]) {
00509       fStationInfoATRI[calibIndex] = new AraStationInfo(stationId);
00510     }
00511     if(calibIndex>=0 && calibIndex<ATRI_NO_STATIONS)
00512       return fStationInfoATRI[calibIndex];
00513   }
00514   return NULL;
00515 }
00516 
00517 
00518 
00519 
00520 
00521 AraStationId_t AraGeomTool::getAtriStationId(int stationNumber) {
00523   if(stationNumber==1) return ARA_STATION1B;
00524   return (AraStationId_t)stationNumber;
00525 }
00526 
00527 
00528 void AraGeomTool::readAraArrayCoords() {
00529   sqlite3 *db;
00530   char *zErrMsg = 0;
00531   sqlite3_stmt *stmt;
00532 
00533   char calibDir[FILENAME_MAX];
00534   char fileName[FILENAME_MAX];
00535   char *calibEnv=getenv("ARA_CALIB_DIR");
00536   if(!calibEnv) {
00537      char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR");
00538      if(!utilEnv)
00539         sprintf(calibDir,"calib");
00540      else
00541         sprintf(calibDir,"%s/share/araCalib",utilEnv);
00542   }
00543   else {
00544     strncpy(calibDir,calibEnv,FILENAME_MAX);
00545   }  
00546   sprintf(fileName, "%s/AraArrayCoords.sqlite", calibDir);
00547 
00548   //open the database
00549   //  int rc = sqlite3_open_v2(fileName, &db, SQLITE_OPEN_READONLY, NULL);
00550   int rc = sqlite3_open(fileName, &db);;
00551   if(rc!=SQLITE_OK){
00552     printf("AraGeomTool::readAraArrayCoords() - Can't open database: %s\n", sqlite3_errmsg(db));
00553     sqlite3_close(db);
00554     return;
00555   }
00556 
00557   //All the station coordinate information is stored in the ARA table (one row per station)
00558   const char *query = "select * from ARA";
00559 
00560   //prepare an sql statment which will be used to obtain information from the data base
00561   //  rc=sqlite3_prepare_v2(db, query, strlen(query)+1, &stmt, NULL);
00562   rc=sqlite3_prepare(db, query, strlen(query)+1, &stmt, NULL);
00563 
00564   if(rc!=SQLITE_OK){
00565     printf("statement not prepared OK\n");
00566     //should close the data base and exit the function
00567     sqlite3_close(db);
00568     return;
00569   }
00570 
00571   AraStationId_t thisStationId;
00572   int calibIndex=0;
00573   int row=0;
00574 
00575   while(1){  //This loop is over station
00576     //printf("row number %i\n", row);
00577     rc=sqlite3_step(stmt);
00578     if(rc==SQLITE_DONE) break;
00579     int nColumns=sqlite3_column_count(stmt);
00580 
00581     row=sqlite3_column_int(stmt, 2)-1;//forcing the row to be correct
00582     //printf("row number %i\n", row);
00583 
00584     int column=0;
00585     
00586     const char* temp;    
00587     double tempVal;
00588 
00589     //primary key - stationId
00590     thisStationId=sqlite3_column_int(stmt,column);
00591     calibIndex=getStationCalibIndex(thisStationId);
00592 
00593 
00594     column++;  //station name
00595     temp = (const char*)sqlite3_column_text(stmt, column);
00596     //Ignore for now
00597     
00598     column++; //2: //electronics tupe
00599     temp = (const char*)sqlite3_column_text(stmt, column);
00600     //Ignore for now
00601     
00602     //Station Coords
00603     for(int i=0;i<3;i++) {
00604       column++;
00605       tempVal=sqlite3_column_double(stmt, column);
00606       if(isIcrrStation(thisStationId)) {
00607         fStationCoordsICRR[calibIndex][i]=tempVal;
00608       }
00609       else {
00610         fStationCoordsAtri[calibIndex][i]=tempVal;
00611       }
00612     }
00613     if(isIcrrStation(thisStationId)) {
00614       fStationVectorICRR[calibIndex].SetXYZ(fStationCoordsICRR[calibIndex][0],fStationCoordsICRR[calibIndex][1],fStationCoordsICRR[calibIndex][2]);
00615     }
00616     else {
00617       fStationVectorATRI[calibIndex].SetXYZ(fStationCoordsAtri[calibIndex][0],fStationCoordsAtri[calibIndex][1],fStationCoordsAtri[calibIndex][2]);
00618     }
00619 
00620 
00621     //Station Local Coordinates
00622     for(int i=0;i<3;i++) {
00623       for(int j=0;j<3;j++) {    
00624         column++;
00625         tempVal=sqlite3_column_double(stmt, column);
00626         if(isIcrrStation(thisStationId)) {
00627           fStationLocalCoordsICRR[calibIndex][i][j]=tempVal;
00628         }
00629         else {
00630           fStationLocalCoordsATRI[calibIndex][i][j]=tempVal;
00631         }
00632       }
00633     } 
00634 
00635 
00636     if(isIcrrStation(thisStationId)) {
00637       fStationToArrayRotationICRR[calibIndex] = new TRotation();      
00638       TVector3 localx(fStationLocalCoordsICRR[calibIndex][0]);
00639       TVector3 globale(1,0,0);
00640       Double_t angleRotate=globale.Angle(localx);
00641       TVector3 axisRotate=globale.Cross(localx);
00642       fStationToArrayRotationICRR[calibIndex]->Rotate(angleRotate,axisRotate);
00643       fArrayToStationRotationICRR[calibIndex]=new TRotation(fStationToArrayRotationICRR[calibIndex]->Inverse());
00644 
00645     }
00646     else {
00647       fStationToArrayRotationATRI[calibIndex] = new TRotation();     
00648 
00649       //In the end this remarkably simple bit of code is all we need to define the matrix rotations necessary to switch
00650       // between array centric and station centric coordinates 
00651       // The basic idea is simply:
00652       // a) Find the angle between the array centric easting(x) and the station centric x
00653       // b) Find the vector that is perpendiculat to both of them using a cross product
00654       // c) Create a rotation matrix by rotating the identity matrix by this angle about this axis
00655       // d) Create the invere rotation to go the other way
00656       // e) Remember we also need to translate to actually convert between station and array and vice-versa
00657       TVector3 localx(fStationLocalCoordsATRI[calibIndex][0]);
00658       TVector3 globale(1,0,0);
00659       Double_t angleRotate=globale.Angle(localx);
00660       TVector3 axisRotate=globale.Cross(localx);
00661       fStationToArrayRotationATRI[calibIndex]->Rotate(angleRotate,axisRotate);
00662 
00663       fArrayToStationRotationATRI[calibIndex]=new TRotation(fStationToArrayRotationATRI[calibIndex]->Inverse());
00664 
00665       //      fArrayToStationRotationATRI[calibIndex]->Dump();
00666     }
00667     
00668 
00669 
00670   }//while(1)
00671 
00672   //now need to destroy the sqls statement prepared earlier
00673   rc = sqlite3_finalize(stmt);
00674   if(rc!=SQLITE_OK) printf("error finlizing sql statement\n");
00675   //  printf("sqlite3_finalize(stmt) = %i\n", rc);
00676 
00677   //now close the connection to the database
00678   rc = sqlite3_close(db);
00679   if(rc!=SQLITE_OK) printf("error closing db\n");
00680 
00681 }
00682 
00683 
00684 TVector3 AraGeomTool::convertStationToArrayCoords(AraStationId_t stationId, TVector3 inputCoords) {
00685   TVector3 output=inputCoords;
00686   TRotation *mPtr = getStationToArrayRotation(stationId);
00687   output.Transform(*mPtr);
00688   output+=getStationVector(stationId);
00689   return TVector3(output); 
00690 }
00691 
00692 TVector3 AraGeomTool::convertArrayToStationCoords(AraStationId_t stationId, TVector3 inputCoords) {
00693   TVector3 output=inputCoords;
00694   //std::cout << "Station Vector: " << getStationVector(stationId).x() << "\t" << getStationVector(stationId).y() << "\t" << getStationVector(stationId).z() << "\n";
00695   output-=getStationVector(stationId);
00696   //  output.Print();
00697   TRotation *mPtr = getArrayToStationRotation(stationId);
00698   output.Transform(*mPtr);
00699   return TVector3(output); 
00700 }
00701 
00702 
00703 TRotation *AraGeomTool::getStationToArrayRotation(AraStationId_t stationId)
00704 {
00705   int calibIndex=getStationCalibIndex(stationId);
00706   if(isIcrrStation(stationId)) {
00707     return fStationToArrayRotationICRR[calibIndex];
00708   }
00709   return fStationToArrayRotationATRI[calibIndex];
00710 }
00711 
00712 TRotation *AraGeomTool::getArrayToStationRotation(AraStationId_t stationId)
00713 {
00714   int calibIndex=getStationCalibIndex(stationId);
00715   if(isIcrrStation(stationId)) {
00716     return fArrayToStationRotationICRR[calibIndex];
00717   }
00718   return fArrayToStationRotationATRI[calibIndex];
00719 }
00720 
00721 
00722 TVector3 &AraGeomTool::getStationVector(AraStationId_t stationId)
00723 {
00724   int calibIndex=getStationCalibIndex(stationId);
00725   if(isIcrrStation(stationId)) {
00726     return fStationVectorICRR[calibIndex];
00727   }
00728 
00729   return fStationVectorATRI[calibIndex];
00730 
00731 }
00732 
00733 
00734 
00735 void AraGeomTool::convertStationToArrayCoords(AraStationId_t stationId, Double_t inputCoords[3], Double_t outputCoords[3] )
00736 {
00737   TVector3 input(inputCoords);
00738   TVector3 output=convertStationToArrayCoords(stationId,input);
00739   outputCoords[0]=output.x();
00740   outputCoords[1]=output.y();
00741   outputCoords[2]=output.z();
00742 
00743 }
00744 void AraGeomTool::convertArrayToStationCoords(AraStationId_t stationId, Double_t inputCoords[3], Double_t outputCoords[3] )
00745 {
00746 
00747   TVector3 input(inputCoords);
00748   TVector3 output=convertArrayToStationCoords(stationId,input);
00749   outputCoords[0]=output.x();
00750   outputCoords[1]=output.y();
00751   outputCoords[2]=output.z();
00752 
00753 
00754 }

Generated on Mon Dec 9 13:20:21 2013 for ARA ROOT v3.13 Software by doxygen 1.4.7