RdPolarGrid.cc
Go to the documentation of this file.
1 
9 #include "RdPolarGrid.h"
10 
11 #include <evt/Event.h>
12 #include <evt/ShowerRecData.h>
13 #include <evt/ShowerRRecData.h>
14 #include <evt/ShowerSimData.h>
15 #include <evt/BeamMap.h>
16 #include <revt/REvent.h>
17 #include <revt/Header.h>
18 #include <revt/Station.h>
19 #include <revt/StationRecData.h>
20 
21 #include <det/Detector.h>
22 #include <rdet/RDetector.h>
23 
24 #include <utl/Trace.h>
25 #include <utl/TraceAlgorithm.h>
26 #include <utl/ErrorLogger.h>
27 #include <utl/Reader.h>
28 #include <utl/config.h>
29 #include <utl/AugerUnits.h>
30 #include <utl/Triple.h>
31 #include <utl/PhysicalConstants.h>
32 
33 #include <fwk/CoordinateSystemRegistry.h>
34 #include <fwk/LocalCoordinateSystem.h>
35 #include <fwk/CentralConfig.h>
36 
37 #include <cmath>
38 
39 using namespace std;
40 using namespace revt;
41 using namespace utl;
42 using namespace fwk;
43 
44 //Just an abbreviation of repeated code from UserModule.cc skeleton
45 #define PRINT(...) {stringstream msg; msg << __VA_ARGS__; INFO(msg.str());}
46 
47 namespace RdPolarGrid {
48 
50  {
51  }
52 
53  RdPolarGrid::~RdPolarGrid()
54  {
55  }
56 
59  {
60  DEBUGLOG ("RdPolarGrid::Init()");
61 
62  //read in the configurations of the xml file
63  Branch conf = CentralConfig::GetInstance()->GetTopBranch("RdPolarGrid");
64 
65  conf.GetChild("UseTrueDirection").GetData(fUseTrueDirection);
66 
67  conf.GetChild("UseStepFromTrueDirection").GetData(fUseStepFromTrueDirection);
68 
69  conf.GetChild("StepFromTrueDirection").GetData(fStepFromTrueDirection);
70  conf.GetChild("NumberOfStepsFromTrueDirection").GetData(fNumberOfStepsFromTrueDirection);
71 
72  conf.GetChild("minTheta").GetData(minTh);
73  conf.GetChild("maxTheta").GetData(maxTh);
74 
75  conf.GetChild("minPhi").GetData(minPhi);
76  conf.GetChild("maxPhi").GetData(maxPhi);
77 
78  conf.GetChild("stepsTheta").GetData(nTh);
79  conf.GetChild("stepsPhi").GetData(nPhi);
80 
81  conf.GetChild("waveModel").GetData(waveModel);
82 
83  conf.GetChild("minR").GetData(minR);
84  conf.GetChild("maxR").GetData(maxR);
85  conf.GetChild("stepsR").GetData(nR);
86 
87  conf.GetChild("minRho").GetData(minRho);
88  conf.GetChild("maxRho").GetData(maxRho);
89  conf.GetChild("stepsRho").GetData(nRho);
90 
91  conf.GetChild("minB").GetData(minB);
92  conf.GetChild("maxB").GetData(maxB);
93  conf.GetChild("stepsB").GetData(nB);
94 
95  //check if we need to scan for every particular parameter
96  if (minTh == maxTh)
97  nTh = -1;
98  if (minTh == maxTh && minTh == 0) {
99  nTh = -1;
100  nPhi = -1;
101  }
102  if (minPhi == maxPhi)
103  nPhi = -1;
104  if (minR == maxR)
105  nR = -1;
106  if (minRho == maxRho)
107  nRho = -1;
108  if (minB == maxB)
109  nB = -1;
110 
111  return eSuccess;
112  }
113 
114  bool RdPolarGrid::step(){
115  DEBUGLOG ("stepping …");
116 
117  if (!fUseTrueDirection) {
118 
119  if (waveModel == "ePlane") {
120 
121  if (minPhi==0 && maxPhi==360)
122  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi-1) || (iPhi=0) || (++iTh<=nTh);
123  else
124  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh);
125  }
126 
127  else if (waveModel == "eSpherical") {
128 
129  if (minPhi==0 && maxPhi==360)
130  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi-1) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iR<=nR);
131  else
132  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iR<=nR);
133  }
134 
135  else if (waveModel == "eConical") {
136 
137  if (minPhi==0 && maxPhi==360)
138  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi-1) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iRho<=nRho);
139  else
140  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iRho<=nRho);
141  }
142 
143  else if (waveModel == "eHyperbolic") {
144 
145  if (minPhi==0 && maxPhi==360)
146  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi-1) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) ||
147  (++iRho<=nRho) || (iRho=0) || (++iB<=nB);
148  else
149  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) ||
150  (++iRho<=nRho) || (iRho=0) || (++iB<=nB);
151  }
152  }
153  else {
154  if (!fUseStepFromTrueDirection) {
155  if (waveModel == "ePlane")
156  return false;
157  else if (waveModel == "eSpherical")
158  return (++iR<=nR);
159  else if (waveModel == "eConical")
160  return (++iRho<=nRho);
161  else if (waveModel == "eHyperbolic")
162  return (++iRho<=nRho) || (iRho=0) || (++iB<=nB);
163  }
164  else {
165  if (waveModel == "ePlane") {
166  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh);
167  }
168  else if (waveModel == "eSpherical") {
169  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iR<=nR);
170  }
171  else if (waveModel == "eConical") {
172  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) || (++iRho<=nRho);
173  }
174  else if (waveModel == "eHyperbolic") {
175  return (minTh==0 && iTh==0 && ++iTh<=nTh) || (++iPhi<=nPhi) || (iPhi=0) || (++iTh<=nTh) || (iTh=0) ||
176  (++iRho<=nRho) || (iRho=0) || (++iB<=nB);
177  }
178  }
179  }
180  }
181 
182  evt::ShowerRRecData& RdPolarGrid::RRecShower(evt::Event& event) {
183 
184  if (!event.HasRecShower()) {
185  event.MakeRecShower();
186  INFO ("Making RecShower");
187  }
188 
189  if (!event.GetRecShower().HasRRecShower()) {
190  event.GetRecShower().MakeRRecShower();
191  INFO ("Making RRecShower");
192  }
193 
194  //set reference coordinate system (usually PampaAmarilla)
195  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
196  evt::ShowerRRecData& rrec=event.GetRecShower().GetRRecShower();
197  evt::ShowerSimData& MCShower = event.GetSimShower();
198  //set core position to the true MC core position
199  corePos = MCShower.GetPosition();
200  //set local coordinate system to the core position
201  coreCS = fwk::LocalCoordinateSystem::Create(corePos);
202  rrec.SetParameter(eCoreX, corePos.GetX(referenceCS));
203  rrec.SetParameter(eCoreY, corePos.GetY(referenceCS));
204  rrec.SetParameter(eCoreZ, corePos.GetZ(referenceCS));
205  //PRINT ("Core_position"<<" "<<corePos.GetX(referenceCS)<<" "<<corePos.GetY(referenceCS)<<" "<<corePos.GetZ(referenceCS));
206 
207  /*
208  If one wants to analyze the data then the core position should be taken from SD reconstruction for example (or alternatively defined as a barycenter of radio stations etc.):
209 
210  if (!event.GetRecShower().HasRRecShower()) {
211  event.GetRecShower().MakeRRecShower();
212  INFO ("Making RRecShower");
213  }
214  if (!event.GetRecShower().HasSRecShower()) {
215  ERROR("No SRecShower available!");
216  return eFailure;
217  }
218  else {
219  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
220  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
221  evt::ShowerSRecData& srec = event.GetRecShower().GetSRecShower();
222  corePos = srec.GetCorePosition();
223  coreCS = fwk::LocalCoordinateSystem::Create(corePos);
224  rrec.SetParameter(eCoreX, corePos.GetX(referenceCS));
225  rrec.SetParameter(eCoreY, corePos.GetY(referenceCS));
226  rrec.SetParameter(eCoreZ, corePos.GetZ(referenceCS));
227  //PRINT ("Core_position"<<" "<<corePos.GetX(coreCS)<<" "<<corePos.GetY(coreCS)<<" "<<corePos.GetZ(coreCS));
228  }
229  */
230 
231  return event.GetRecShower().GetRRecShower();
232  }
233 
234  void RdPolarGrid::start (evt::Event& event){
235  DEBUGLOG ("starting raster");
236  iTh = 0;
237  iPhi = 0;
238  iR = 0;
239  iRho = 0;
240  iB= 0;
241 
242  evt::ShowerRRecData& rrec = RRecShower(event);
243 
244  //delete for every new? memory leak?
245 
246  evt::BeamGrid &thetaGrid = *new evt::BeamGrid ( minTh*M_PI/180.0, maxTh*M_PI/180.0, (maxTh-minTh)/nTh*M_PI/180.0);
247  evt::BeamGrid &phiGrid = *new evt::BeamGrid ( minPhi*M_PI/180.0, maxPhi*M_PI/180.0, (maxPhi-minPhi)/nTh*M_PI/180.0);
248 
249  //in future need some intelligent decision wether to create new map or to append to existing
250  //probably a configure variable should do
251  //alternative seperate module -> more flexible but overkill
252 
253  evt::BeamMap *map;
254  if (rrec.HasCurrentBeamMap())
255  map = &rrec.GetCurrentBeamMap();
256  else {
257  map = new evt::BeamMap();
258  rrec.AddBeamMap(*map);
259  }
260  map->AddDimension(thetaGrid);
261  map->AddDimension(phiGrid);
262  }
263 
264  //create a vector for every step of scanning with a particular set of parameters
265  Vector RdPolarGrid::skyVector(evt::Event& event) {
266  double th, phi, r, rho, b;
267 
268  if (!fUseTrueDirection) {
269 
270  th=minTh+iTh*(maxTh-minTh)/nTh;
271  phi=minPhi+iPhi*(maxPhi-minPhi)/nPhi;
272 
273  if (waveModel == "ePlane") {
274  r=5;
275  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
276  //PRINT("Wavemodel is "<<waveModel);
277  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi);
278  return skyVec;
279  }
280 
281  else if (waveModel == "eSpherical") {
282  r=minR+iR*(maxR-minR)/nR;
283  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
284  //PRINT("Wavemodel is "<<waveModel);
285  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi);
286  return skyVec;
287  }
288 
289  else if (waveModel == "eConical") {
290  rho = minRho+iRho*(maxRho-minRho)/nRho;
291  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
292  rrec.SetParameter(eRho, rho*M_PI/180.0);
293  r=5;
294  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
295  //PRINT("Wavemodel is "<<waveModel);
296  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi<<" and oppening angle= "<<rho);
297  return skyVec;
298  }
299 
300  else if (waveModel == "eHyperbolic") {
301  rho = minRho+iRho*(maxRho-minRho)/nRho;
302  b = minB+iB*(maxB-minB)/nB;
303  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
304  rrec.SetParameter(eRho, rho*M_PI/180.0);
305  rrec.SetParameter(eB, b*ns);
306  r=5;
307  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
308  //PRINT("Wavemodel is "<<waveModel);
309  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi<<" and oppening angle= "<<rho<<" and b= "<<b);
310  return skyVec;
311  }
312  }
313 
314  else {
315  if (!fUseStepFromTrueDirection) {
316 
317  evt::ShowerSimData& MCShower = event.GetSimShower();
318  utl::Vector trueDirection = MCShower.GetDirection();
319  const utl::Triple polarCoords = trueDirection.GetSphericalCoordinates(coreCS);
320  double true_th = polarCoords.get<1>();
321  double true_phi = polarCoords.get<2>();
322 
323  if (waveModel == "ePlane") {
324  r=5;
325  Vector skyVec (-r*km, true_th, true_phi, coreCS, Vector::kSpherical);
326  const utl::Triple skyCoords = skyVec.GetSphericalCoordinates(coreCS);
327  double sky_r = skyCoords.get<0>();
328  double sky_th = skyCoords.get<1>();
329  double sky_phi = skyCoords.get<2>();
330  //PRINT("Wavemodel is "<<waveModel);
331  //PRINT("New sky vector: R="<<sky_r/km<<" Theta="<<sky_th/degree<<" Phi="<<sky_phi/degree);
332  return skyVec;
333  }
334 
335  else if (waveModel == "eSpherical") {
336  r=minR+iR*(maxR-minR)/nR;
337  Vector skyVec (-r*km, true_th, true_phi, coreCS, Vector::kSpherical);
338  const utl::Triple skyCoords = skyVec.GetSphericalCoordinates(coreCS);
339  double sky_r = skyCoords.get<0>();
340  double sky_th = skyCoords.get<1>();
341  double sky_phi = skyCoords.get<2>();
342  //PRINT("Wavemodel is "<<waveModel);
343  //PRINT("New sky vector: R="<<sky_r/km<<" Theta="<<sky_th/degree<<" Phi="<<sky_phi/degree);
344  return skyVec;
345  }
346 
347  else if (waveModel == "eConical") {
348  r=5;
349  rho = minRho+iRho*(maxRho-minRho)/nRho;
350  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
351  rrec.SetParameter(eRho, rho*M_PI/180.0);
352  Vector skyVec (-r*km, true_th, true_phi, coreCS, Vector::kSpherical);
353  const utl::Triple skyCoords = skyVec.GetSphericalCoordinates(coreCS);
354  double sky_r = skyCoords.get<0>();
355  double sky_th = skyCoords.get<1>();
356  double sky_phi = skyCoords.get<2>();
357  //PRINT("Wavemodel is "<<waveModel);
358  //PRINT("New sky vector: R="<<sky_r/km<<" Theta="<<sky_th/degree<<" Phi="<<sky_phi/degree
359  //<<" and oppening angle= "<<rho);
360  return skyVec;
361  }
362 
363  else if (waveModel == "eHyperbolic") {
364  r=5;
365  rho = minRho+iRho*(maxRho-minRho)/nRho;
366  b = minB+iB*(maxB-minB)/nB;
367  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
368  rrec.SetParameter(eRho, rho*M_PI/180.0);
369  rrec.SetParameter(eB, b*ns);
370  Vector skyVec (-r*km, true_th, true_phi, coreCS, Vector::kSpherical);
371  const utl::Triple skyCoords = skyVec.GetSphericalCoordinates(coreCS);
372  double sky_r = skyCoords.get<0>();
373  double sky_th = skyCoords.get<1>();
374  double sky_phi = skyCoords.get<2>();
375  //PRINT("Wavemodel is "<<waveModel);
376  //PRINT("New sky vector: R="<<sky_r/km<<" Theta="<<sky_th/degree<<" Phi="<<sky_phi/degree
377  //<<" and oppening angle= "<<rho<<" and b= "<<b);
378  return skyVec;
379  }
380  }
381  else {
382 
383  evt::ShowerSimData& MCShower = event.GetSimShower();
384  utl::Vector trueDirection = MCShower.GetDirection();
385  const utl::Triple polarCoords = trueDirection.GetSphericalCoordinates(coreCS);
386  double true_th = polarCoords.get<1>();
387  double true_phi = polarCoords.get<2>();
388  r = 5;
389 
390  Vector skyVec (-r*km, true_th, true_phi, coreCS, Vector::kSpherical);
391  const utl::Triple skyCoords = skyVec.GetSphericalCoordinates(coreCS);
392  double sky_r = skyCoords.get<0>()/km;
393  double sky_th = skyCoords.get<1>()/degree;
394  double sky_phi = skyCoords.get<2>()/degree;
395 
396  minTh = sky_th - fStepFromTrueDirection;
397  maxTh = sky_th + fStepFromTrueDirection;
398  minPhi = sky_phi - fStepFromTrueDirection;
399  maxPhi = sky_phi + fStepFromTrueDirection;
400  nTh = 2*fNumberOfStepsFromTrueDirection;
401  nPhi = 2*fNumberOfStepsFromTrueDirection;
402 
403  th=minTh+iTh*(maxTh-minTh)/nTh;
404  phi=minPhi+iPhi*(maxPhi-minPhi)/nPhi;
405 
406  if (waveModel == "ePlane") {
407  r=5;
408  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
409  //PRINT("Wavemodel is "<<waveModel);
410  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi);
411  return skyVec;
412  }
413 
414  else if (waveModel == "eSpherical") {
415  r=minR+iR*(maxR-minR)/nR;
416  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
417  //PRINT("Wavemodel is "<<waveModel);
418  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi);
419  return skyVec;
420  }
421 
422  else if (waveModel == "eConical") {
423  rho = minRho+iRho*(maxRho-minRho)/nRho;
424  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
425  rrec.SetParameter(eRho, rho*M_PI/180.0);
426  r=5;
427  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
428  //PRINT("Wavemodel is "<<waveModel);
429  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi<<" and oppening angle= "<<rho);
430  return skyVec;
431  }
432 
433  else if (waveModel == "eHyperbolic") {
434  rho = minRho+iRho*(maxRho-minRho)/nRho;
435  b = minB+iB*(maxB-minB)/nB;
436  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
437  rrec.SetParameter(eRho, rho*M_PI/180.0);
438  rrec.SetParameter(eB, b*ns);
439  r=5;
440  Vector skyVec (r*km, th*degree, phi*degree, coreCS, Vector::kSpherical);
441  //PRINT("Wavemodel is "<<waveModel);
442  //PRINT("New sky vector: R="<<r<<" Theta="<<th<<" Phi="<<phi<<" and oppening angle= "<<rho<<" and b= "<<b);
443  return skyVec;
444  }
445  }
446  }
447  }
448 
449  void RdPolarGrid::setRRecDirection(Vector dir, evt::Event& event)
450  {
451  evt::ShowerRRecData& rrec = event.GetRecShower().GetRRecShower();
452  //set reference coordinate system (usually PampaAmarilla)
453  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
454  rrec.SetParameter(eShowerAxisX, dir.GetX(coreCS));
455  rrec.SetParameter(eShowerAxisY, dir.GetY(coreCS));
456  rrec.SetParameter(eShowerAxisZ, dir.GetZ(coreCS));
457  rrec.SetParameter(eRecStage, 1);
458  }
459 
461  RdPolarGrid::Run(evt::Event& event)
462  {
463  DEBUGLOG ("RdPolarGrid::Run()");
464 
465  //check if there is a radio event at all
466  if (!event.HasREvent()) {
467  WARNING("RdPolarGrid::No radio event found!");
468  return eBreakLoop;
469  }
470 
471  REvent& rEvent = event.GetREvent();
472 
473  const Header& rHeader = rEvent.GetHeader();
474  int id = rHeader.GetId();
475  PRINT ("Found header with ID " << id);
476 
477  static int oldEvt = 0;
478  if (id == oldEvt) {
479  if (!step()) {
480  WARNING ("Attempt to step out of scanned sky cube.");
481  return eBreakLoop;
482  }
483  }
484  else {
485  start (event);
486  oldEvt = id;
487  }
488 
489  Vector skyVec = skyVector(event);
490 
491  setRRecDirection (skyVec, event);
492 
493  return eSuccess;
494  }
495 
497  RdPolarGrid::Finish()
498  {
499  DEBUGLOG ("RdPolarGrid::Finish()");
500 
501  return eSuccess;
502  }
503 
504 }
505 
506 #undef PRINT
Branch GetTopBranch() const
Definition: Branch.cc:63
void SetParameter(Parameter i, double value, bool lock=true)
const double degree
bool HasRecShower() const
Interface class to access to the Radio part of an event.
Definition: REvent.h:42
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
#define INFO(message)
Macro for logging informational messages.
Definition: ErrorLogger.h:161
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Definition: Branch.cc:211
bool HasREvent() const
Interface class to access Shower Simulated parameters.
Definition: ShowerSimData.h:49
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
Class representing a document branch.
Definition: Branch.h:107
boost::tuple< double, double, double > Triple
Coordinate triple for easy getting or setting of coordinates.
Definition: Triple.h:15
const utl::Vector & GetDirection() const
Get the direction of the shower axis. This is the true direction of shower movement.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:206
const double ns
#define DEBUGLOG(message)
Macro for logging debugging messages.
Definition: ErrorLogger.h:157
const utl::Point & GetPosition() const
Get the position of the shower core.
bool HasRRecShower() const
Header & GetHeader()
access to REvent Header
Definition: REvent.h:239
const double km
#define WARNING(message)
Macro for logging warning messages.
Definition: ErrorLogger.h:163
void GetData(bool &b) const
Overloads of the GetData member template function.
Definition: Branch.cc:644
double GetY(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:209
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
#define PRINT(...)
Definition: RdPolarGrid.cc:45
Header file holding the RD Event Trigger class definition (based on SD)
Definition: REvent/Header.h:14
Vector object.
Definition: Vector.h:30
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:212
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
int GetId() const
Definition: REvent/Header.h:21

, generated on Tue Sep 26 2023.