/home/cern/BDSIM_new/include/BDSMultipole.hh

00001 /* BDSIM code.    Version 1.0
00002    Author: Grahame A. Blair, Royal Holloway, Univ. of London.
00003    Last modified 24.7.2002
00004    Copyright (c) 2002 by G.A.Blair.  ALL RIGHTS RESERVED. 
00005 
00006    Modified 22.03.05 by J.C.Carter, Royal Holloway, Univ. of London.
00007    Added extra parameter to BuildDefaultOuterLogicalVolume so that it is 
00008      possible to set the material as either Iron or Vacuum
00009    Removed StringFromInt function
00010 */
00011 
00012 #ifndef BDSMultipole_h
00013 #define BDSMultipole_h 
00014 
00015 #include "globals.hh"
00016 #include "BDSAcceleratorComponent.hh"
00017 #include "BDSMaterials.hh"
00018 #include "G4LogicalVolume.hh"
00019 
00020 #include "G4FieldManager.hh"
00021 #include "G4ChordFinder.hh"
00022 #include "G4Mag_EqRhs.hh"
00023 #include "G4UserLimits.hh"
00024 #include "G4VisAttributes.hh"
00025 #include "G4MagneticField.hh"
00026 #include "G4PVPlacement.hh"               
00027 
00028 
00029 class BDSMultipole :public BDSAcceleratorComponent
00030 {
00031 public:
00032   
00033   BDSMultipole( G4String aName, 
00034                 G4double aLength,
00035                 G4double aBpRadius,
00036                 G4double aInnerIronRadius,
00037                 G4VisAttributes* aVisAtt,
00038                 G4String aMaterial = "",
00039                 G4double aXAper=0.,
00040                 G4double aYAper=0.,
00041                 G4double angle=0.);
00042 
00043   virtual ~BDSMultipole();
00044 
00045   void BuildBeampipe(G4double aLength,G4String materialName = "", G4int nSegments=1);
00046 
00047   void BuildDefaultMarkerLogicalVolume();
00048 
00049   void BuildDefaultOuterLogicalVolume(G4double aLength,G4bool OuterMaterialIsVacuum=false);
00050 
00051   void BuildBPFieldMgr(G4MagIntegratorStepper* aStepper,
00052                        G4MagneticField* aField);
00053 
00054   G4FieldManager* GetBPFieldMgr();
00055 
00056   void BuildOuterFieldManager(G4int nPoles, G4double poleField, 
00057                               G4double phiOffset);
00058 
00059   void SetOuterRadius(G4double outR);
00060 
00061 protected:
00062   G4LogicalVolume* itsBeampipeLogicalVolume;
00063   G4LogicalVolume* itsInnerBPLogicalVolume;
00064   G4VisAttributes* itsVisAttributes;
00065   G4UserLimits* itsUserLimits;
00066   G4UserLimits* itsBeampipeUserLimits;
00067   G4PVPlacement* itsPhysiComp;
00068   G4FieldManager* itsBPFieldMgr;
00069   G4FieldManager* itsOuterFieldMgr;
00070 
00071 protected:   // these might need to be accessed from the child classes
00072   G4double itsInnerIronRadius;
00073   G4Tubs* itsBPTube;
00074   G4Tubs* itsInnerBPTube;
00075   G4ChordFinder* itsChordFinder;
00076   G4int itsNPoles;
00077   G4MagneticField* itsOuterMagField;
00078 
00079   G4RotationMatrix* itsSegRot;
00080   G4ThreeVector itsSegPos;
00081   G4int itsNSegments;
00082   G4double itsOuterR;
00083 };
00084 
00085 inline G4FieldManager* BDSMultipole::GetBPFieldMgr()
00086 {return itsBPFieldMgr;}
00087 
00088 inline void BDSMultipole::SetOuterRadius(G4double outR)
00089 {itsOuterR = outR;}
00090 
00091 #endif

Generated on Wed Mar 5 17:25:22 2008 for BDSIM by  doxygen 1.5.3