Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BfldMeshRect2d.h

Go to the documentation of this file.
00001 
00002 // $Id: BfldMeshRect2d.h,v 1.6 2005/10/25 06:40:06 rhatcher Exp $
00003 //
00004 // BfldMeshRect2d
00005 //
00006 // This structure provides services for a 2d mesh representing an array of
00007 // points where magnetic field map is "known".
00008 //
00009 // This particular type is specialized to deal with a rectangular grid.
00010 //
00011 // Author:  R. Hatcher 2000.06.20
00012 //
00014 #ifndef BFLDMESHRECT2D_H
00015 #define BFLDMESHRECT2D_H
00016 
00017 #include "BField/BfldMesh.h"
00018 #include "BField/BfldMapRect2d.h"
00019 
00020 class BfldMeshRect2d : public BfldMesh {
00021  public:
00022    BfldMeshRect2d();
00023    BfldMeshRect2d(BfldMapRect2d* map);
00024    virtual ~BfldMeshRect2d();
00025 
00026    virtual TVector3  GetGeneratorPosition(Int_t generator);
00027                                   // return geometry (x,y) given node number
00028 
00029 
00030    virtual Bool_t    InBounds(Float_t x, Float_t y);
00031    virtual Int_t     InQuadrant(Float_t x, Float_t y);
00032 
00033    virtual Int_t     GetQuadFlag(Int_t iquadrant)
00034      { return fQuadFlags[iquadrant]; }
00035    virtual Int_t     GetQuadFlag(Float_t x, Float_t y)
00036      { return fQuadFlags[InQuadrant(x,y)]; }
00037    
00038    virtual void      Pick3Generators(Float_t x, Float_t y, Int_t& gen_near,
00039                                      Int_t& gen_cw, Int_t& gen_ccw);
00040                                         
00041    
00042    virtual void      Pick4Generators(Float_t x, Float_t y,
00043                                      Int_t& gen_ll, Int_t& gen_lr,
00044                                      Int_t& gen_ur, Int_t& gen_ul);
00045 
00046    virtual Int_t     IndicesToGenerator(Int_t ix, Int_t iy);
00047    virtual void      GeneratorToIndices(Int_t gen, Int_t &ix, Int_t &iy);
00048 
00049    virtual Int_t     NearestGenerator(Float_t x, Float_t y);
00050    virtual Int_t     NearestGenerator(TVector3 xyz);
00051    virtual Int_t     LowerLeftGenerator(Float_t x, Float_t y);
00052    virtual Int_t     LowerLeftGenerator(TVector3 xyz);
00053 
00054    virtual Int_t     NeighborGenerator(Int_t gen, Int_t dnx, Int_t dny);
00055 
00056  protected:
00057 
00058    virtual void      CopyMapRect2d(BfldMapRect2d *map);
00059    virtual void      GeneratorToXY(Int_t gen, Float_t &x, Float_t &y);
00060 
00061    Float_t  fX0;           // lowest x value
00062    Float_t  fDx;           // x increment (std length unit)
00063    Int_t    fNx;           // number of x values
00064    Float_t  fXmax;     
00065 
00066    Float_t  fY0;           // lowest y value
00067    Float_t  fDy;           // y increment (std length unit)
00068    Int_t    fNy;           // number of y values
00069    Float_t  fYmax;     
00070 
00071    Bool_t   fQuadrant;     // true if map only has one quadrant
00072    Int_t    fQuadFlags[4]; // sign flips for different quadrants
00073 
00074  private:
00075 
00076    ClassDef(BfldMeshRect2d,1)
00077 };
00078 #endif // BFLDMESHRECT2D_H

Generated on Mon Feb 15 11:06:25 2010 for loon by  doxygen 1.3.9.1