]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New class GridStepper.
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Mar 2007 11:51:17 +0000 (11:51 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Mar 2007 11:51:17 +0000 (11:51 +0000)
EVE/Reve/GridStepper.cxx [new file with mode: 0644]
EVE/Reve/GridStepper.h [new file with mode: 0644]
EVE/Reve/LinkDef.h

diff --git a/EVE/Reve/GridStepper.cxx b/EVE/Reve/GridStepper.cxx
new file mode 100644 (file)
index 0000000..3e8f129
--- /dev/null
@@ -0,0 +1,82 @@
+// $Header$
+
+#include "GridStepper.h"
+#include "ZTrans.h"
+
+using namespace Reve;
+
+//______________________________________________________________________
+// GridStepper
+//
+
+ClassImp(GridStepper)
+
+GridStepper::GridStepper(Int_t sm) : Mode(StepMode_e(sm))
+{
+  switch(Mode) {
+  default:
+  case SM_XYZ:
+    ls[0] = &Nx; ls[1] = &Ny; ls[2] = &Nz;
+    ns[0] = &nx; ns[1] = &ny; ns[2] = &nz;
+    break;
+  case SM_YXZ:
+    ls[0] = &Ny; ls[1] = &Nx; ls[2] = &Nz;
+    ns[0] = &ny; ns[1] = &nx; ns[2] = &nz;
+    break;
+  case SM_XZY:
+    ls[0] = &Nx; ls[1] = &Nz; ls[2] = &Ny;
+    ns[0] = &nx; ns[1] = &nz; ns[2] = &ny;
+    break;
+  }
+
+  nx = ny = nz = 0;
+  Nx = Ny = Nz = 16;
+  Dx = Dy = Dz = 1;
+  Ox = Oy = Oz = 0;
+}
+
+void GridStepper::Reset()
+{
+  nx = ny = nz = 0;
+}
+
+void GridStepper::Subtract(GridStepper& s)
+{
+  Ox = -(s.Ox + s.nx*s.Dx);
+  Oy = -(s.Oy + s.ny*s.Dy);
+  Oz = -(s.Oz + s.nz*s.Dz);
+}
+/**************************************************************************/
+
+bool GridStepper::Step()
+{
+  (*ns[0])++;
+  if(*ns[0] >= *ls[0]) {
+    *ns[0] = 0; (*ns[1])++;
+    if(*ns[1] >= *ls[1]) {
+      *ns[1] = 0; (*ns[2])++;
+      if(*ns[2] >= *ls[2]) {
+       return false;
+      }
+    }
+  }
+  return true;
+}
+
+/**************************************************************************/
+
+void GridStepper::GetPosition(Float_t* p)
+{
+  p[0] = Ox + nx*Dx; p[1] = Oy + ny*Dy; p[2] = Oz + nz*Dz;
+}
+
+void GridStepper::SetTrans(ZTrans* mx)
+{
+  mx->SetPos(Ox + nx*Dx, Oy + ny*Dy, Oz + nz*Dz);
+}
+
+void GridStepper::SetTransAdvance(ZTrans* mx)
+{
+  SetTrans(mx);
+  Step();
+}
diff --git a/EVE/Reve/GridStepper.h b/EVE/Reve/GridStepper.h
new file mode 100644 (file)
index 0000000..54e90b1
--- /dev/null
@@ -0,0 +1,52 @@
+// $Header$
+
+#ifndef REVE_GridStepper_H
+#define REVE_GridStepper_H
+
+#include <Reve/Reve.h>
+
+#include <TObject.h>
+
+namespace Reve {
+
+class ZTrans;
+
+class GridStepper : public TObject
+{
+  Int_t *ls[3], *ns[3];
+private:
+  GridStepper(const GridStepper&);            // Not implemented
+  GridStepper& operator=(const GridStepper&); // Not implemented
+
+public: 
+  enum StepMode_e { SM_XYZ, SM_YXZ, SM_XZY };
+  StepMode_e Mode; 
+
+  Int_t   nx, ny, nz;
+  Int_t   Nx, Ny, Nz;
+  Float_t Dx, Dy, Dz;
+  Float_t Ox, Oy, Oz;
+
+  GridStepper(Int_t sm=SM_XYZ);
+  virtual ~GridStepper() {}
+
+  void Reset();
+  void Subtract(GridStepper& s);
+  void SetNs(Int_t nx, Int_t ny, Int_t nz=1)
+  { Nx = nx; Ny = ny; Nz = nz; }
+  void SetDs(Float_t dx, Float_t dy, Float_t dz=0)
+  { Dx = dx; Dy = dy; Dz = dz; }
+  
+  bool Step();
+
+  void GetPosition(Float_t* p);
+
+  void SetTrans(ZTrans* mx);
+  void SetTransAdvance(ZTrans* mx);
+
+  ClassDef(GridStepper, 1);
+}; // end class GridStepper
+
+}  // namespace Reve
+
+#endif
index 8616d58f5f7ff6ea796a1c4af6055f2beb83858e..62a6541d8124a9af00145e51ed2ce923bbe21455 100644 (file)
@@ -45,6 +45,9 @@
 #pragma link C++ class Reve::ZTransSubEditor+;
 #pragma link C++ class Reve::ZTransEditor+;
 
+// Stepper
+#pragma link C++ class Reve::GridStepper+;
+
 // RGBAPalette
 #pragma link C++ class Reve::RGBAPalette+;
 #pragma link C++ class Reve::RGBAPaletteEditor+;