// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // // // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... #ifndef IFieldManager_h #define IFieldManager_h 1 #include #include "IElementField.hxx" #include #include #include namespace COMET { // IFieldManager - handles the global ElectroMagnetic field // // There is a single IFieldManager object. // // The field from each individual beamline element is given by a // IElementField object. Any number of overlapping IElementField // objects can be added to the global field. Any element that // represents an element with an EM field will be added to the // IElementField list. typedef std::vector FieldList; class IFieldManager { private: IFieldManager(); IFieldManager(const IFieldManager&); ~IFieldManager(); IFieldManager& operator=(const IFieldManager&); void setupArray(); public: /// getObject() returns the single IFieldManager object. /// It is constructed, if necessary. static IFieldManager* getObject(); /// GetFieldValue() returns the field value at a given point[]. /// field is really field[6]: Bx,By,Bz,Ex,Ey,Ez. /// point[] is in global coordinates: x,y,z,t. void GetFieldValue(const Double_t* point, Double_t* field) const; /// addElementField() adds the IElementField object for a single /// element to the global field. void addElementField(IElementField* f) { if (fFields) fFields->push_back(f); } /// clear() removes all IElementField-s from the global object, /// and destroys them. Used before the geometry is completely /// re-created. void clear(); /// updates all field tracking objects and clear() void updateField(); /// Return the list of Element Fields FieldList* getFields() { return fFields; } COMET::IHandle MakeDescription()const; static IFieldManager* Import(const char* filename); static IFieldManager* Import(TDirectory* directory); static IFieldManager* Import(){ return Import(TDirectory::CurrentDirectory()); } private: static IFieldManager* fObject; Int_t fNumFieldPointers; Bool_t fFirst; FieldList* fFields; const IElementField **fFieldPointers; }; } #endif