/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/include/BDSMagnet.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 BuildOuterLogicalVolume so that it is 
00008      possible to set the material as either Iron or Vacuum
00009    Removed StringFromInt function
00010 */
00011 
00012 #ifndef BDSMAGNET
00013 #define BDSMAGNET 
00014 
00015 #include "globals.hh"
00016 #include "BDSAcceleratorComponent.hh"
00017 #include "BDSBeamPipe.hh"
00018 #include "BDSBeamPipeInfo.hh"
00019 #include "BDSMagnetOuterInfo.hh"
00020 #include "BDSMagnetType.hh"
00021 #include "BDSTiltOffset.hh"
00022 
00023 #include "G4FieldManager.hh"
00024 #include "G4ChordFinder.hh"
00025 #include "G4LogicalVolume.hh"
00026 #include "G4MagneticField.hh"
00027 #include "G4Mag_UsualEqRhs.hh"
00028 #include "G4Material.hh"
00029 #include "G4RotationMatrix.hh"
00030 #include "G4UserLimits.hh"
00031 
00032 class BDSMagnet: public BDSAcceleratorComponent
00033 {
00034 public:
00037   BDSMagnet(BDSMagnetType      type,
00038             G4String           name, 
00039             G4double           length,
00040             BDSBeamPipeInfo*   beamPipeInfo,
00041             BDSMagnetOuterInfo magnetOuterInfo,
00042             BDSTiltOffset      tiltOffset = BDSTiltOffset());
00043   
00044   virtual ~BDSMagnet();
00045 
00047   G4double GetK1();
00048   G4double GetK2();
00049   G4double GetK3();
00051 
00052 private:
00054   void BuildBPFieldMgr(G4MagIntegratorStepper* aStepper,
00055                        G4MagneticField* aField);
00056 
00058   virtual void BuildBPFieldAndStepper()=0;
00059 
00061   void FinaliseBeampipe(G4String materialName = "",G4RotationMatrix* RotY=NULL);
00062 
00063 protected:
00064 
00065   virtual void Build();
00066   virtual void BuildContainerLogicalVolume();
00067   
00069   virtual void BuildOuterVolume();
00070   
00072   virtual void BuildBeampipe();
00076   void BeamPipeCommonTasks();
00077 
00078   void BuildOuterFieldManager(G4int nPoles, G4double poleField, 
00079                               G4double phiOffset);
00080 
00082   G4ThreeVector inputface;
00083   G4ThreeVector outputface;
00085   
00086   // type
00087   BDSMagnetType itsType;
00088   
00089   // field related objects, set by BuildBPFieldAndStepper
00090   G4MagIntegratorStepper* itsStepper;
00091   G4MagneticField* itsMagField;
00092   G4Mag_UsualEqRhs* itsEqRhs;
00093 
00094   // beam pipe volumes
00095   G4LogicalVolume* itsBeampipeLogicalVolume;
00096   G4LogicalVolume* itsInnerBPLogicalVolume;
00097   
00098   G4UserLimits* itsBeampipeUserLimits;
00099   G4VPhysicalVolume* itsPhysiComp;
00100   G4VPhysicalVolume* itsPhysiInner;
00101   G4FieldManager* itsBPFieldMgr;
00102   G4FieldManager* itsOuterFieldMgr;
00103 
00104   G4double itsInnerIronRadius;
00105 
00106 
00107   G4ChordFinder* itsChordFinder;
00108   G4MagneticField* itsOuterMagField;
00109   
00110   //for beampipe construction
00111   BDSBeamPipeInfo* beamPipeInfo;
00112   
00113   //the constructed beampipe
00114   BDSBeamPipe*    beampipe;
00115 
00116   //for outer volume construction
00117   G4double        outerDiameter;
00118 
00119   //the assembled outer logical volume
00120   BDSGeometryComponent* outer;
00121 
00122   //for the outer volume construction
00123   BDSMagnetOuterInfo itsMagnetOuterInfo;
00124 
00125   // Magnetic strength parameters
00126   G4double itsK1, itsK2, itsK3;
00127 };
00128 
00129 #endif

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7