ARA ROOT v3.10 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     column++;  //station name
00594     temp = (const char*)sqlite3_column_text(stmt, column);
00595     //Ignore for now
00596     
00597     column++; //2: //electronics tupe
00598     temp = (const char*)sqlite3_column_text(stmt, column);
00599     //Ignore for now
00600     
00601     //Station Coords
00602     for(int i=0;i<3;i++) {
00603       column++;
00604       tempVal=sqlite3_column_double(stmt, column);
00605       if(isIcrrStation(thisStationId)) {
00606         fStationCoordsICRR[calibIndex][i]=tempVal;
00607       }
00608       else {
00609         fStationCoordsAtri[calibIndex][i]=tempVal;
00610       }
00611     }
00612     if(isIcrrStation(thisStationId)) {
00613       fStationVectorICRR[calibIndex].SetXYZ(fStationCoordsICRR[calibIndex][0],fStationCoordsICRR[calibIndex][1],fStationCoordsICRR[calibIndex][2]);
00614     }
00615     else {
00616       fStationVectorATRI[calibIndex].SetXYZ(fStationCoordsAtri[calibIndex][0],fStationCoordsAtri[calibIndex][1],fStationCoordsAtri[calibIndex][2]);
00617     }
00618 
00619     //Station Local Coordinates
00620     for(int i=0;i<3;i++) {
00621       for(int j=0;j<3;j++) {    
00622         column++;
00623         tempVal=sqlite3_column_double(stmt, column);
00624         if(isIcrrStation(thisStationId)) {
00625           fStationLocalCoordsICRR[calibIndex][i][j]=tempVal;
00626         }
00627         else {
00628           fStationLocalCoordsATRI[calibIndex][i][j]=tempVal;
00629         }
00630       }
00631     } 
00632 
00633     if(isIcrrStation(thisStationId)) {
00634       fStationToArrayRotationICRR[calibIndex] = new TRotation();      
00635       TVector3 localx(fStationLocalCoordsICRR[calibIndex][0]);
00636       TVector3 globale(1,0,0);
00637       Double_t angleRotate=globale.Angle(localx);
00638       TVector3 axisRotate=globale.Cross(localx);
00639       fStationToArrayRotationICRR[calibIndex]->Rotate(angleRotate,axisRotate);
00640       fArrayToStationRotationICRR[calibIndex]=new TRotation(fStationToArrayRotationICRR[calibIndex]->Inverse());
00641 
00642     }
00643     else {
00644       fStationToArrayRotationATRI[calibIndex] = new TRotation();     
00645       //In the end this remarkably simple bit of code is all we need to define the matrix rotations necessary to switch
00646       // between array centric and station centric coordinates 
00647       // The basic idea is simply:
00648       // a) Find the angle between the array centric easting(x) and the station centric x
00649       // b) Find the vector that is perpendiculat to both of them using a cross product
00650       // c) Create a rotation matrix by rotating the identity matrix by this angle about this axis
00651       // d) Create the invere rotation to go the other way
00652       // e) Remember we also need to translate to actually convert between station and array and vice-versa
00653       TVector3 localx(fStationLocalCoordsATRI[calibIndex][0]);
00654       TVector3 globale(1,0,0);
00655       Double_t angleRotate=globale.Angle(localx);
00656       TVector3 axisRotate=globale.Cross(localx);
00657       fStationToArrayRotationATRI[calibIndex]->Rotate(angleRotate,axisRotate);
00658       fArrayToStationRotationATRI[calibIndex]=new TRotation(fStationToArrayRotationATRI[calibIndex]->Inverse());
00659     }
00660     
00661 
00662   }//while(1)
00663 
00664   //now need to destroy the sqls statement prepared earlier
00665   rc = sqlite3_finalize(stmt);
00666   if(rc!=SQLITE_OK) printf("error finlizing sql statement\n");
00667   //  printf("sqlite3_finalize(stmt) = %i\n", rc);
00668 
00669   //now close the connection to the database
00670   rc = sqlite3_close(db);
00671   if(rc!=SQLITE_OK) printf("error closing db\n");
00672 
00673 }
00674 
00675 
00676 TVector3 AraGeomTool::convertStationToArrayCoords(AraStationId_t stationId, TVector3 inputCoords) {
00677   TVector3 output=inputCoords;
00678   TRotation *mPtr = getStationToArrayRotation(stationId);
00679   output.Transform(*mPtr);
00680   output+=getStationVector(stationId);
00681   return TVector3(output); 
00682 }
00683 
00684 TVector3 AraGeomTool::convertArrayToStationCoords(AraStationId_t stationId, TVector3 inputCoords) {
00685   TVector3 output=inputCoords;
00686   //  std::cout << "Station Vector: " << getStationVector(stationId).x() << "\t" << getStationVector(stationId).y() << "\t" << getStationVector(stationId).z() << "\n";
00687   output-=getStationVector(stationId);
00688   //  output.Print();
00689   TRotation *mPtr = getArrayToStationRotation(stationId);
00690   output.Transform(*mPtr);
00691   return TVector3(output); 
00692 }
00693 
00694 
00695 TRotation *AraGeomTool::getStationToArrayRotation(AraStationId_t stationId)
00696 {
00697   int calibIndex=getStationCalibIndex(stationId);
00698   if(isIcrrStation(stationId)) {
00699     return fStationToArrayRotationICRR[calibIndex];
00700   }
00701   return fStationToArrayRotationATRI[calibIndex];
00702 }
00703 
00704 TRotation *AraGeomTool::getArrayToStationRotation(AraStationId_t stationId)
00705 {
00706   int calibIndex=getStationCalibIndex(stationId);
00707   if(isIcrrStation(stationId)) {
00708     return fArrayToStationRotationICRR[calibIndex];
00709   }
00710   return fArrayToStationRotationATRI[calibIndex];
00711 }
00712 
00713 
00714 TVector3 &AraGeomTool::getStationVector(AraStationId_t stationId)
00715 {
00716   int calibIndex=getStationCalibIndex(stationId);
00717   if(isIcrrStation(stationId)) {
00718     return fStationVectorICRR[calibIndex];
00719   }
00720 
00721   return fStationVectorATRI[calibIndex];
00722 
00723 }
00724 
00725 
00726 
00727 void AraGeomTool::convertStationToArrayCoords(AraStationId_t stationId, Double_t inputCoords[3], Double_t outputCoords[3] )
00728 {
00729   TVector3 input(inputCoords);
00730   TVector3 output=convertStationToArrayCoords(stationId,input);
00731   outputCoords[0]=output.x();
00732   outputCoords[1]=output.y();
00733   outputCoords[2]=output.z();
00734 
00735 }
00736 void AraGeomTool::convertArrayToStationCoords(AraStationId_t stationId, Double_t inputCoords[3], Double_t outputCoords[3] )
00737 {
00738 
00739   TVector3 input(inputCoords);
00740   TVector3 output=convertArrayToStationCoords(stationId,input);
00741   outputCoords[0]=output.x();
00742   outputCoords[1]=output.y();
00743   outputCoords[2]=output.z();
00744 
00745 
00746 }

Generated on Tue Jul 16 16:58:01 2013 for ARA ROOT v3.10 Software by doxygen 1.4.7