Commit in lcdd on MAIN | |||
include/Cartesian3DMagneticFieldMap.hh | +44 | added 1.1 | |
/FieldMap3DType.hh | +22 | added 1.1 | |
/field_map_3d.hh | +26 | added 1.1 | |
/FieldMapType.hh | +14 | -15 | 1.4 -> 1.5 |
src/Cartesian3DMagneticFieldMap.cc | +226 | added 1.1 | |
/field_map_3dProcess.cc | +56 | added 1.1 | |
/field_map_3dSubscriber.cc | +62 | added 1.1 | |
/LCDDLibLoad.cc | +98 | -98 | 1.28 -> 1.29 |
+548 | -113 |
checkpoint work on 3D mag field; 3D field can be read from hard-coded file name into LCDD now; still needs file name attribute on XML element and schema impl
diff -N Cartesian3DMagneticFieldMap.hh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Cartesian3DMagneticFieldMap.hh 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,44 @@
+// $Header: /cvs/lcd/lcdd/include/Cartesian3DMagneticFieldMap.hh,v 1.1 2012/10/03 00:48:25 jeremy Exp $ + +#include "G4MagneticField.hh" + +#include <vector> +using std::vector; + +// +// Original PurgMagTabulatedField3D code developed by: +// S.Larsson and J. Generowicz. +// + +class Cartesian3DMagneticFieldMap: public G4MagneticField { +private: + + // Storage space for the table + vector<vector<vector<double> > > _xField; + vector<vector<vector<double> > > _yField; + vector<vector<vector<double> > > _zField; + + // The dimensions of the table + int _nx, _ny, _nz; + + // The physical limits of the defined region + double _minx, _maxx, _miny, _maxy, _minz, _maxz; + + // The physical extent of the defined region + double _dx, _dy, _dz; + + // Offsets if field map is not in global coordinates + double _xOffset; + double _yOffset; + double _zOffset; + + bool _invertX, _invertY, _invertZ; + +public: + + Cartesian3DMagneticFieldMap(const char* filename, double xOffset, + double yOffset, double zOffset); + + void GetFieldValue(const double Point[4], double* Bfield) const; +}; +
diff -N FieldMap3DType.hh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ FieldMap3DType.hh 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,22 @@
+// $Header: /cvs/lcd/lcdd/include/FieldMap3DType.hh,v 1.1 2012/10/03 00:48:25 jeremy Exp $ +#ifndef LCDD_FIELDMAP3DTYPE_HH +#define LCDD_FIELDMAP3DTYPE_HH 1 + +#include "FieldMapType.hh" + +/** + * @class + * @brief +*/ +class FieldMap3DType : public FieldMapType { + +public: + + FieldMap3DType() { + } + + virtual ~FieldMap3DType() { + } +}; + +#endif
diff -N field_map_3d.hh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ field_map_3d.hh 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,26 @@
+// $Header: /cvs/lcd/lcdd/include/field_map_3d.hh,v 1.1 2012/10/03 00:48:25 jeremy Exp $ +#ifndef LCDD_FIELD_MAP_3D_HH +#define LCDD_FIELD_MAP_3D_HH 1 + +#include "FieldMap3DType.hh" + +/** + * @class + * @brief + */ +class field_map_3d : public SAXObject, public FieldMap3DType { + +public: + + field_map_3d() { + } + + virtual ~field_map_3d() { + } + + virtual SAXObject::Type type() { + return SAXObject::element; + } +}; + +#endif
diff -u -r1.4 -r1.5 --- FieldMapType.hh 18 Dec 2006 22:49:01 -0000 1.4 +++ FieldMapType.hh 3 Oct 2012 00:48:25 -0000 1.5 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/FieldMapType.hh,v 1.4 2006/12/18 22:49:01 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/FieldMapType.hh,v 1.5 2012/10/03 00:48:25 jeremy Exp $
#ifndef LCDD_FIELDMAPTYPE_HH #define LCDD_FIELDMAPTYPE_HH 1
@@ -16,24 +16,23 @@
class FieldMapType : public FieldType { public:
- FieldMapType() - {}
- virtual ~FieldMapType() - {}
+ FieldMapType() { + } + + virtual ~FieldMapType() { + }
public:
- const ContentSequence* get_content() const - { - return &m_sequence; - } - - void add_content(const std::string& tag, SAXObject* so) - { - ContentGroup::ContentItem ci = {tag, so}; - m_sequence.add_content(ci); - }
+ const ContentSequence* get_content() const { + return &m_sequence; + } + + void add_content(const std::string& tag, SAXObject* so) { + ContentGroup::ContentItem ci = {tag, so}; + m_sequence.add_content(ci); + }
public:
diff -N Cartesian3DMagneticFieldMap.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Cartesian3DMagneticFieldMap.cc 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,226 @@
+// +// Original PurgMagTabulatedField3D code developed by: +// S.Larsson and J. Generowicz. +// + +#include "Cartesian3DMagneticFieldMap.hh" +#include <fstream> +#include <iostream> +#include <cmath> +using namespace std; + +Cartesian3DMagneticFieldMap::Cartesian3DMagneticFieldMap( const char* filename, double xOffset, double yOffset, double zOffset ) + :_xOffset(xOffset),_yOffset(yOffset),_zOffset(zOffset),_invertX(false),_invertY(false),_invertZ(false) +{ + cout << "\n-----------------------------------------------------------" + << "\n Magnetic field" + << "\n-----------------------------------------------------------"; + + cout << "\n ---> " "Reading the field grid from " << filename << " ... " << endl; + ifstream file( filename ); // Open the file for reading. + + // Ignore first blank line + char buffer[256]; + file.getline(buffer,256); + + // Read table dimensions + file >> _nx >> _ny >> _nz; // Note dodgy order + + cout << " [ Number of values x,y,z: " + << _nx << " " << _ny << " " << _nz << " ] " + << endl; + + // Set up storage space for table + _xField.resize( _nx ); + _yField.resize( _nx ); + _zField.resize( _nx ); + int ix, iy, iz; + for (ix=0; ix<_nx; ix++) { + _xField[ix].resize(_ny); + _yField[ix].resize(_ny); + _zField[ix].resize(_ny); + for (iy=0; iy<_ny; iy++) { + _xField[ix][iy].resize(_nz); + _yField[ix][iy].resize(_nz); + _zField[ix][iy].resize(_nz); + } + } + + // Ignore other header information + // The first line whose second character is '0' is considered to + // be the last line of the header. + do { + file.getline(buffer,256); + } while ( buffer[1]!='0'); + + // Read in the data + double xval,yval,zval,bx,by,bz; + for (ix=0; ix<_nx; ix++) { + for (iy=0; iy<_ny; iy++) { + for (iz=0; iz<_nz; iz++) { + file >> xval >> yval >> zval >> bx >> by >> bz; + if ( ix==0 && iy==0 && iz==0 ) { + _minx = xval; + _miny = yval; + _minz = zval; + } + _xField[ix][iy][iz] = bx; + _yField[ix][iy][iz] = by; + _zField[ix][iy][iz] = bz; + } + } + } + file.close(); + + _maxx = xval; + _maxy = yval; + _maxz = zval; + + cout << "\n ---> ... done reading " << endl; + + // cout << " Read values of field from file " << filename << endl; + cout << " ---> assumed the order: x, y, z, Bx, By, Bz " + << "\n ---> Min values x,y,z: " + << _minx << " " << _miny << " " << _minz << " cm " + << "\n ---> Max values x,y,z: " + << _maxx << " " << _maxy << " " << _maxz << " cm " + << "\n ---> The field will be offset by " << _xOffset << " " << _yOffset << " " << _zOffset << " cm " << endl; + + // Should really check that the limits are not the wrong way around. + if (_maxx < _minx) {swap(_maxx,_minx); _invertX = true;} + if (_maxy < _miny) {swap(_maxy,_miny); _invertY = true;} + if (_maxz < _minz) {swap(_maxz,_minz); _invertZ = true;} + cout << "\nAfter reordering if necessary" + << "\n ---> Min values x,y,z: " + << _minx << " " << _miny << " " << _minz << " cm " + << " \n ---> Max values x,y,z: " + << _maxx << " " << _maxy << " " << _maxz << " cm "; + + _dx = _maxx - _minx; + _dy = _maxy - _miny; + _dz = _maxz - _minz; + cout << "\n ---> Range of values x,y,z: " + << _dx << " " << _dy << " " << _dz << " cm in z " + << "\n-----------------------------------------------------------" << endl; +} + +void Cartesian3DMagneticFieldMap::GetFieldValue(const double point[4], + double *Bfield ) const +{ + + double x = point[0]; + double y = point[1]; + double z = point[2] + _zOffset; + + // Check that the point is within the defined region + if ( x>=_minx && x<=_maxx && + y>=_miny && y<=_maxy && + z>=_minz && z<=_maxz ) { + + // Position of given point within region, normalized to the range + // [0,1] + double xfraction = (x - _minx) / _dx; + double yfraction = (y - _miny) / _dy; + double zfraction = (z - _minz) / _dz; + + if (_invertX) { xfraction = 1 - xfraction;} + if (_invertY) { yfraction = 1 - yfraction;} + if (_invertZ) { zfraction = 1 - zfraction;} + + // Need addresses of these to pass to modf below. + // modf uses its second argument as an OUTPUT argument. + double xdindex, ydindex, zdindex; + + // Position of the point within the cuboid defined by the + // nearest surrounding tabulated points + double xlocal = ( std::modf(xfraction*(_nx-1), &xdindex)); + double ylocal = ( std::modf(yfraction*(_ny-1), &ydindex)); + double zlocal = ( std::modf(zfraction*(_nz-1), &zdindex)); + + // The indices of the nearest tabulated point whose coordinates + // are all less than those of the given point + int xindex = static_cast<int>(xdindex); + int yindex = static_cast<int>(ydindex); + int zindex = static_cast<int>(zdindex); + + +#ifdef DEBUG_INTERPOLATING_FIELD + cout << "Local x,y,z: " << xlocal << " " << ylocal << " " << zlocal << endl; + cout << "Index x,y,z: " << xindex << " " << yindex << " " << zindex << endl; + double valx0z0, mulx0z0, valx1z0, mulx1z0; + double valx0z1, mulx0z1, valx1z1, mulx1z1; + valx0z0= table[xindex ][0][zindex]; mulx0z0= (1-xlocal) * (1-zlocal); + valx1z0= table[xindex+1][0][zindex]; mulx1z0= xlocal * (1-zlocal); + valx0z1= table[xindex ][0][zindex+1]; mulx0z1= (1-xlocal) * zlocal; + valx1z1= table[xindex+1][0][zindex+1]; mulx1z1= xlocal * zlocal; +#endif + + // Full 3-dimensional version + Bfield[0] = + _xField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + _xField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + _xField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + _xField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + _xField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + _xField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + _xField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + _xField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal ; + Bfield[1] = + _yField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + _yField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + _yField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + _yField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + _yField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + _yField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + _yField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + _yField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal ; + Bfield[2] = + _zField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + _zField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + _zField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + _zField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + _zField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + _zField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + _zField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + _zField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal ; + + } else { + Bfield[0] = 0.0; + Bfield[1] = 0.0; + Bfield[2] = 0.0; + } +} + +int main() +{ + Cartesian3DMagneticFieldMap field("C:/work/magfield/magfield3DMap/ThreeDFieldMap.dat", 0.,0.,0.); + double pos[4]; + pos[0]=0.; + pos[1]=0.; + pos[2]=0.; + pos[3]=0.; + double B[3]; + + for(double x=-0.05; x<=0.05; x+=.005) + { + for(double y=-0.05; y<=0.17; y+=.005) + { + for(double z=-0.26; z<=0.1; z+=.05) + { + pos[0]=x; + pos[1] =y; + pos[2] = z; + field.GetFieldValue(pos, B); + cout << pos[0] << " " << pos[1] << " " << pos[2] << " " << B[0] << " " << B[1] << " " << B[2] << endl; + } + } + } + + pos[0]=-0.01; + pos[1]=0.038; + pos[2]=-0.02; + field.GetFieldValue(pos, B); + cout << pos[0] << " " << pos[1] << " " << pos[2] << " " << B[0] << " " << B[1] << " " << B[2] << endl; + return 0; +} +
diff -N field_map_3dProcess.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ field_map_3dProcess.cc 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,56 @@
+// $Header: /cvs/lcd/lcdd/src/field_map_3dProcess.cc,v 1.1 2012/10/03 00:48:25 jeremy Exp $ + +#include "FieldMapTypeProcess.hh" +#include <iostream> +#include "globals.hh" +#include "field_map_3d.hh" + +/** + * @class + * @brief + */ +class field_map_3dProcess : public FieldMapTypeProcess { + +public: + + field_map_3dProcess(const ProcessingContext* context = 0) + : FieldMapTypeProcess(context) { + } + + virtual ~field_map_3dProcess() { + } + + virtual void StartElement(const std::string& name, const ASCIIAttributeList& attrs) { + + std::cout << "field_map_3d::StartElement - " << name << std::endl; + + SAXObject** obj = Context()->GetTopObject(); + + field_map_3d* field = new field_map_3d; + + // Top-level caller needs to setup the SAXObject references. + m_obj = field; + *obj = field; + + // Call next process UP in inheritance chain, after the SAXObject is set. + FieldMapTypeProcess::StartElement(name, attrs); + } + + virtual void EndElement(const std::string&) { + } + + virtual void Characters(const std::string&) { + } + + virtual void StackPopNotify(const std::string& name) { + std::cout << "field_map_3d::StackPopNotify" << std::endl; + FieldMapTypeProcess::StackPopNotify(name); + } + + virtual const std::string& State() const { + static std::string tag = "field_map_3d"; + return tag; + } +}; + +DECLARE_PROCESS_FACTORY(field_map_3dProcess)
diff -N field_map_3dSubscriber.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ field_map_3dSubscriber.cc 3 Oct 2012 00:48:25 -0000 1.1 @@ -0,0 +1,62 @@
+// $Header: /cvs/lcd/lcdd/src/field_map_3dSubscriber.cc,v 1.1 2012/10/03 00:48:25 jeremy Exp $ + +// gdml +#include "Saxana/SAXSubscriber.h" +#include "Saxana/SAXComponentFactory.h" + +// geant4 +#include "G4Processor/GDMLProcessor.h" + +// lcdd +#include "LCDDProcessor.hh" +#include "field_map_3d.hh" +#include "Cartesian3DMagneticFieldMap.hh" + +/* + * @class + * @brief + */ +class field_map_3dSubscriber: virtual public SAXSubscriber { + +public: + + virtual const SAXComponentObject* Build() const { + return this; + } + +public: + + field_map_3dSubscriber() { + Subscribe("field_map_3d"); + } + + virtual ~field_map_3dSubscriber() { + } + + virtual void Activate(const SAXObject* object) { + + std::cout << "field_map_3d::Subscriber" << std::endl; + + const field_map_3d* obj = dynamic_cast<const field_map_3d*>(object); + + if (object != 0) { + + if (obj) { + + if (obj) { + + //GDMLExpressionEvaluator* calc = GDMLProcessor::GetInstance()->GetEvaluator(); + + //std::string lunit = obj->get_lunit(); + //std::string funit = obj->get_funit(); + std::string name = obj->get_name(); + + Cartesian3DMagneticFieldMap* fmap = new Cartesian3DMagneticFieldMap("ThreeDFieldMap.dat", 0, 0, 0); + LCDDProcessor::instance()->addMagneticField(name, fmap); + } + } + } + } +}; + +DECLARE_SUBSCRIBER_FACTORY(field_map_3dSubscriber)
diff -u -r1.28 -r1.29 --- LCDDLibLoad.cc 23 Jun 2011 21:04:10 -0000 1.28 +++ LCDDLibLoad.cc 3 Oct 2012 00:48:25 -0000 1.29 @@ -4,102 +4,102 @@
extern "C" {
- void LCDDLoadProcesses() - { - // header - LOAD_COMPONENT(headerProcess); - LOAD_COMPONENT(detectorProcess); - LOAD_COMPONENT(authorProcess); - LOAD_COMPONENT(generatorProcess); - LOAD_COMPONENT(commentProcess); - - // volume extended - LOAD_COMPONENT(volumeExtendedProcess); - LOAD_COMPONENT(physvolidProcess); - - // SDs - LOAD_COMPONENT(calorimeterProcess); - LOAD_COMPONENT(optical_calorimeterProcess); - LOAD_COMPONENT(unsegmented_calorimeterProcess); - LOAD_COMPONENT(trackerProcess); - LOAD_COMPONENT(scorerProcess); - LOAD_COMPONENT(sdrefProcess); - - // segmentations - LOAD_COMPONENT(grid_xyzProcess); - LOAD_COMPONENT(projective_cylinderProcess); - LOAD_COMPONENT(projective_zplaneProcess); - LOAD_COMPONENT(nonprojective_cylinderProcess); - LOAD_COMPONENT(global_grid_xyProcess); - - // Ids - LOAD_COMPONENT(idspecProcess); - LOAD_COMPONENT(idfieldProcess); - LOAD_COMPONENT(idspecrefProcess); - - // field - LOAD_COMPONENT(fieldrefProcess); - LOAD_COMPONENT(global_fieldProcess); - LOAD_COMPONENT(solenoidProcess); - LOAD_COMPONENT(rz_field_mapProcess); - LOAD_COMPONENT(rzbProcess); - LOAD_COMPONENT(dipoleProcess); - LOAD_COMPONENT(dipole_coeffProcess); - LOAD_COMPONENT(box_dipoleProcess); - - // region - LOAD_COMPONENT(regionProcess); - LOAD_COMPONENT(regionrefProcess); - - // display - LOAD_COMPONENT(visProcess); - LOAD_COMPONENT(visrefProcess); - LOAD_COMPONENT(colorProcess); - - // limit - LOAD_COMPONENT(limitsetProcess); - LOAD_COMPONENT(limitsetrefProcess); - LOAD_COMPONENT(limitProcess); - } - - void LCDDLoadSubscribers() - { - // subscribers - LOAD_COMPONENT(headerSubscriber); - - // volume extended - //LOAD_COMPONENT(volumeExtendedSubscriber); - - // SDs - LOAD_COMPONENT(calorimeterSubscriber); - LOAD_COMPONENT(optical_calorimeterSubscriber); - LOAD_COMPONENT(unsegmented_calorimeterSubscriber); - LOAD_COMPONENT(trackerSubscriber); - LOAD_COMPONENT(scorerSubscriber); - - // Ids - LOAD_COMPONENT(idspecSubscriber); - - // field - LOAD_COMPONENT(solenoidSubscriber); - LOAD_COMPONENT(rz_field_mapSubscriber); - LOAD_COMPONENT(dipoleSubscriber); - LOAD_COMPONENT(box_dipoleSubscriber); - LOAD_COMPONENT(global_fieldSubscriber); - - // region - LOAD_COMPONENT(regionSubscriber); - - // display - LOAD_COMPONENT(visSubscriber); - - // limit - LOAD_COMPONENT(limitsetSubscriber); - } - - void LCDDLibLoad() - { - LCDDLoadProcesses(); - LCDDLoadSubscribers(); - }
+void LCDDLoadProcesses() { + + // header + LOAD_COMPONENT(headerProcess); + LOAD_COMPONENT(detectorProcess); + LOAD_COMPONENT(authorProcess); + LOAD_COMPONENT(generatorProcess); + LOAD_COMPONENT(commentProcess); + + // volume extended + LOAD_COMPONENT(volumeExtendedProcess); + LOAD_COMPONENT(physvolidProcess); + + // SDs + LOAD_COMPONENT(calorimeterProcess); + LOAD_COMPONENT(optical_calorimeterProcess); + LOAD_COMPONENT(unsegmented_calorimeterProcess); + LOAD_COMPONENT(trackerProcess); + LOAD_COMPONENT(scorerProcess); + LOAD_COMPONENT(sdrefProcess); + + // segmentations + LOAD_COMPONENT(grid_xyzProcess); + LOAD_COMPONENT(projective_cylinderProcess); + LOAD_COMPONENT(projective_zplaneProcess); + LOAD_COMPONENT(nonprojective_cylinderProcess); + LOAD_COMPONENT(global_grid_xyProcess); + + // Ids + LOAD_COMPONENT(idspecProcess); + LOAD_COMPONENT(idfieldProcess); + LOAD_COMPONENT(idspecrefProcess); + + // field + LOAD_COMPONENT(fieldrefProcess); + LOAD_COMPONENT(global_fieldProcess); + LOAD_COMPONENT(solenoidProcess); + LOAD_COMPONENT(rz_field_mapProcess); + LOAD_COMPONENT(rzbProcess); + LOAD_COMPONENT(dipoleProcess); + LOAD_COMPONENT(dipole_coeffProcess); + LOAD_COMPONENT(box_dipoleProcess); + LOAD_COMPONENT(field_map_3dProcess) + + // region + LOAD_COMPONENT(regionProcess); + LOAD_COMPONENT(regionrefProcess); + + // display + LOAD_COMPONENT(visProcess); + LOAD_COMPONENT(visrefProcess); + LOAD_COMPONENT(colorProcess); + + // limit + LOAD_COMPONENT(limitsetProcess); + LOAD_COMPONENT(limitsetrefProcess); + LOAD_COMPONENT(limitProcess); +} + +void LCDDLoadSubscribers() { + // subscribers + LOAD_COMPONENT(headerSubscriber); + + // volume extended + //LOAD_COMPONENT(volumeExtendedSubscriber); + + // SDs + LOAD_COMPONENT(calorimeterSubscriber); + LOAD_COMPONENT(optical_calorimeterSubscriber); + LOAD_COMPONENT(unsegmented_calorimeterSubscriber); + LOAD_COMPONENT(trackerSubscriber); + LOAD_COMPONENT(scorerSubscriber); + + // Ids + LOAD_COMPONENT(idspecSubscriber); + + // field + LOAD_COMPONENT(solenoidSubscriber); + LOAD_COMPONENT(rz_field_mapSubscriber); + LOAD_COMPONENT(dipoleSubscriber); + LOAD_COMPONENT(box_dipoleSubscriber); + LOAD_COMPONENT(global_fieldSubscriber); + LOAD_COMPONENT(field_map_3dSubscriber); + + // region + LOAD_COMPONENT(regionSubscriber); + + // display + LOAD_COMPONENT(visSubscriber); + + // limit + LOAD_COMPONENT(limitsetSubscriber); +} + +void LCDDLibLoad() { + LCDDLoadProcesses(); + LCDDLoadSubscribers(); +}
}
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1