00001
00002
00003
00004
00005
00006
00007 #ifndef BDSPCLDrift_h
00008 #define BDSPCLDrift_h 1
00009
00010 #include "globals.hh"
00011 #include "BDSMaterials.hh"
00012 #include "BDSMagField.hh"
00013 #include "BDSDriftStepper.hh"
00014 #include "G4LogicalVolume.hh"
00015
00016 #include "G4FieldManager.hh"
00017 #include "G4ChordFinder.hh"
00018 #include "G4Mag_UsualEqRhs.hh"
00019 #include "G4UserLimits.hh"
00020 #include "G4VisAttributes.hh"
00021 #include "G4PVPlacement.hh"
00022 #include "G4CashKarpRKF45.hh"
00023 #include "G4ExactHelixStepper.hh"
00024 #include "BDSMultipole.hh"
00025
00026
00027 class BDSPCLDrift :public BDSMultipole
00028 {
00029 public:
00030 BDSPCLDrift(G4String aName, G4double aLength,
00031 std::list<G4double> blmLocZ, std::list<G4double> blmLocTheta,
00032 G4double aperX, G4double aperyUp, G4double aperYDown, G4double aperDy, G4String aTunnelMaterial="", G4double aper=0, G4double tunnelRadius=0., G4double tunnelOffsetX=BDSGlobalConstants::Instance()->GetTunnelOffsetX(), G4String Material="");
00033 ~BDSPCLDrift();
00034
00035 protected:
00036
00037 private:
00038 void BuildBLMs();
00039 void BuildBeampipe(G4String materialName = "");
00040 G4VisAttributes* SetVisAttributes();
00041 G4double itsYAperUp, itsYAperDown, itsDyAper;
00042
00043 G4VSolid* outer_solid;
00044 G4VSolid* inner_solid;
00045
00046 G4LogicalVolume* itsOuterBeamPipeLogicalVolume;
00047 G4LogicalVolume* itsInnerBeamPipeLogicalVolume;
00048
00049 G4VPhysicalVolume* itsPhysiInner;
00050 G4VPhysicalVolume* itsPhysiOuter;
00051
00052 G4VisAttributes* itsBeampipeVisAtt;
00053 G4VisAttributes* itsInnerBeampipeVisAtt;
00054
00055
00056
00057
00059 void BuildBpFieldAndStepper();
00060 BDSDriftStepper* itsStepper;
00061 BDSMagField* itsMagField;
00062 G4Mag_UsualEqRhs* itsEqRhs;
00063 };
00064
00065 #endif