/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/include/BDSMultilayerScreen.hh

00001 #ifndef BDSMultilayerScreen_h
00002 #define BDSMultilayerScreen_h 
00003 
00004 #include "globals.hh"
00005 #include "G4LogicalVolume.hh"
00006 #include "G4UserLimits.hh"
00007 #include "G4VSolid.hh"
00008 #include "G4TwoVector.hh"
00009 #include "BDSScreenLayer.hh"
00010 
00011 class BDSMultilayerScreen 
00012 {
00013 public:
00014   BDSMultilayerScreen(G4TwoVector xysize, G4String name); //X-Y size
00015   ~BDSMultilayerScreen();
00016   G4LogicalVolume* log();
00017   inline G4String name(){return _name;}
00018   inline G4ThreeVector size(){return _size;}
00019   void screenLayer(G4double thickness, G4String material, G4String name, G4double grooveWidth, G4double grooveSpatialFrequency);
00020   void screenLayer(BDSScreenLayer* layer);
00021   inline BDSScreenLayer* screenLayer(G4int layer){return _screenLayers[layer];}
00022   BDSScreenLayer* screenLayer(G4String layer);
00023   inline G4double nLayers(){return _screenLayers.size();}
00024   void build();
00025   inline void phys(G4PVPlacement* phys){_phys = phys;}
00026   inline G4PVPlacement* phys(){return _phys;}
00027   virtual void place(G4RotationMatrix* rot, G4ThreeVector pos, G4LogicalVolume* motherVol);
00028   void reflectiveSurface(G4int layer1, G4int layer2);
00029   void roughSurface(G4int layer1, G4int layer2);
00030 
00031 private:
00032   G4TwoVector _xysize;
00033   G4String _name;
00034   G4ThreeVector _size;
00035   // Geometrical objects:
00036   G4LogicalVolume* _log;
00037   G4PVPlacement* _phys;
00038   G4VSolid* _solid;
00039   std::vector<BDSScreenLayer*> _screenLayers;
00040   std::vector<G4double> _screenLayerZPos;
00041   void computeDimensions();
00042   void buildMotherVolume();
00043   void placeLayers();
00044 
00045 };
00046 
00047 #endif

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7