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

BfldMap.cxx

Go to the documentation of this file.
00001 
00002 // $Id: BfldMap.cxx,v 1.9 2007/12/11 22:53:34 rhatcher Exp $
00003 // 
00004 // BfldMap 
00005 // 
00006 // BfldMap is a structure for holding Bfield maps
00007 // these associate field vectors with node positions but don't know
00008 // where those nodes are in 3-space.
00009 //
00010 // Author:  R. Hatcher 2000.06.20
00011 //
00013 #include "BField/BfldMap.h"
00014 
00015 #include "MessageService/MsgService.h"
00016 CVSID("$Id: BfldMap.cxx,v 1.9 2007/12/11 22:53:34 rhatcher Exp $");
00017 
00018 ClassImp(BfldMap)
00019 
00020 //_____________________________________________________________________________
00021 BfldMap::BfldMap() 
00022   : fGrid(BfldGrid::kUndefined)
00023   , fVariant(-1)
00024   , fIs3d(false)
00025   , fGeneratedCoilCurrent(0.0)
00026   , fFilledOkay(false)
00027   , fNumGenerators(0)
00028 {
00029   // default ctor
00030 }
00031 
00032 //_____________________________________________________________________________
00033 BfldMap::BfldMap(BfldGrid::Grid_t grid, Int_t variant) 
00034   : fGrid(grid)
00035   , fVariant(variant)
00036   , fIs3d(false)
00037   , fGeneratedCoilCurrent(0.0)
00038   , fFilledOkay(false)
00039   , fNumGenerators(0)
00040 {
00041 
00042 }
00043 
00044 //_____________________________________________________________________________
00045 BfldMap::~BfldMap()
00046 {
00047    fGrid       = BfldGrid::kUndefined;
00048    fVariant    = -1;
00049    fFilledOkay = false;
00050 
00051 }
00052 
00053 //_____________________________________________________________________________
00054 
00055 TVector3 BfldMap::GetBField(Int_t generator)
00056 {
00057    // Return just a simple copy of the vector at this generator point
00058    // BfldMap probably isn't the place to do the slot, B-H, etc.
00059    // corrections anyway because:
00060    //  (1) we don't have the necessary info to do more than 
00061    //      simple linear scaling by the current ratio
00062    //  (2) it's expensive to do this *before* interpolating
00063    //      and probably no more correct
00064    //MAXMSG("Bfld",Msg::kDebug,5) 
00065    //  << "BfldMap::GetBField is same as GetRawField (no scaling)!"
00066    //  << endl;
00067 
00068    return GetRawField(generator);
00069 
00070 }
00071 
00072 //_____________________________________________________________________________
00073 TVector3 BfldMap::GetRawField(Int_t generator)
00074 {
00075    // Return a copy of the vector at this generator point
00076 
00077    if ( fFilledOkay &&
00078         generator >= 0 && (UInt_t)generator <= fNumGenerators ) {
00079      if (fIs3d) {
00080        return TVector3(fBx[generator],fBy[generator],fBz[generator]);
00081      }
00082      else {
00083        return TVector3(fBx[generator],fBy[generator],0.0);
00084      }
00085    }
00086 
00087    MAXMSG("Bfld",Msg::kDebug,20)
00088      << "BfldMap::GetRawField no raw field for generator " 
00089      << generator << " of " << fNumGenerators << endl;
00090    return TVector3(0.,0.,0.);
00091 
00092 }
00093 
00094 //_____________________________________________________________________________
00095 void BfldMap::ResizeVectors(UInt_t size)
00096 {
00097    // Allocate whatever's holding the data if necessary
00098    // Make sure we can add a generator value
00099 
00100    // When using vector<Double_t> or vector<Float_t> x,y,z
00101    // then we have to resize and make sure everything is hunky dory
00102    if ( size > fNumGenerators ) {
00103      fBx.resize(size);
00104      fBy.resize(size);
00105      if ( fIs3d ) fBz.resize(size);
00106      fNumGenerators = size;
00107    }
00108 
00109 }
00110 
00111 //_____________________________________________________________________________
00112 void BfldMap::AddGenerator(UInt_t generator, 
00113                            Double_t bx, Double_t by, Double_t bz)
00114 {
00115    // add a field vector for generator point
00116 
00117   // Check if the third component is non-zero
00118   // If so, and we haven't done so already make sure there's
00119   // enough space in the fBz vector
00120   bool hasbz = ( bz != 0.0 );
00121   if ( hasbz && ! fIs3d ) { fIs3d = true; fBz.resize(fNumGenerators); }
00122   // Make sure all arrays can hold this next entry
00123   // If we're expanding, be generous with an extra 128 to avoid 
00124   // multiple single expansions.
00125   if ( generator >= fNumGenerators ) ResizeVectors(generator+128);
00126   // Store the components of the generator's data
00127   fBx[generator] = bx;
00128   fBy[generator] = by;
00129   if ( hasbz ) fBz[generator] = bz;
00130 
00131 }
00132 
00133 //_____________________________________________________________________________
00134 void BfldMap::AddGenerator(UInt_t generator, TVector3& bfld)
00135 {
00136    // add a field vector for generator point
00137    AddGenerator(generator,bfld.x(),bfld.y(),bfld.z());
00138 }
00139 
00140 //_____________________________________________________________________________

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