1 #include "AntennaPositions.h" 2 #include "AnitaGeomTool.h" 10 #define RAD2DEG (180/M_PI) 22 UCorrelator::AntennaPositions::AntennaPositions(
int version)
25 printf(
"AntennaPositions(%d)\n",version);
27 #ifdef MULTIVERSION_ANITA_ENABLED 30 int old_ver = AnitaVersion::get();
31 AnitaVersion::set(version);
33 AnitaVersion::set(old_ver);
40 for (
int ant = 0; ant < NUM_SEAVEYS; ant++)
52 UCorrelator::AntennaPositions::AntennaPositions(
int version,
AnitaGeomTool *geom)
56 printf(
"AntennaPositions(%d)\n",version);
60 for (
int ant = 0; ant < NUM_SEAVEYS; ant++)
75 assert(N < NUM_SEAVEYS);
78 std::multimap<double,int> dphis;
79 for (
int i = 0; i < NUM_SEAVEYS; i++)
82 double dphi = disallowed & (1ul << i) ? 360 : fabs(
FFTtools::wrap(phi-phiAnt[pol_ind][i], 360, 0));
83 dphis.insert(std::pair<double,int>(dphi,i));
89 for (std::multimap<double,int>::const_iterator it = dphis.begin(); it !=dphis.end(); it++)
93 if ((*it).second >=360)
break;
94 closest[Nused++] = (*it).second;
95 if (Nused == N)
break;
106 #ifdef MULTIVERSION_ANITA_ENABLED 109 int old_ver = AnitaVersion::get();
110 AnitaVersion::set(v);
112 AnitaVersion::set(old_ver);
124 return sqrt( dx*dx + dy*dy + dz*dz);
128 static TMutex instance_lock;
132 if (!v) v = AnitaVersion::get();
134 const AntennaPositions * tmp = instances[v];
135 __asm__ __volatile__ (
"" :::
"memory");
138 instance_lock.Lock();
142 tmp =
new AntennaPositions(v);
143 __asm__ __volatile__ (
"" :::
"memory");
146 instance_lock.UnLock();
157 if (!v) v = AnitaVersion::get();
159 const AntennaPositions * tmp = instances[v];
160 __asm__ __volatile__ (
"" :::
"memory");
163 instance_lock.Lock();
167 tmp =
new AntennaPositions(v, geom);
168 __asm__ __volatile__ (
"" :::
"memory");
171 instance_lock.UnLock();
double zAnt[2][NUM_SEAVEYS]
int getClosestAntennas(double phi, int N, int *closest, ULong64_t disallowed=0, AnitaPol::AnitaPol_t pol=AnitaPol::kHorizontal) const
double rAnt[2][NUM_SEAVEYS]
double phiAnt[2][NUM_SEAVEYS]
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.