Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /////////////////////////////////////////////////////////////////////////////// 27 // File: CCalDetector.hh 28 // Description: CCalDetector will provide the basic functionallity of a 29 // detector factory. It has a construct method that describes 30 // the construction sequence of the detector. It has a Name, 31 // a file associated with it, and a collection of other 32 // CCalDetectors that are supposed to be inside this one. 33 /////////////////////////////////////////////////////////////////////////////// 34 #ifndef CCalDetector_h 35 #define CCalDetector_h 1 36 37 #include <iostream> 38 #include <vector> 39 #include "globals.hh" 40 41 //Forward declartion for the CCalDetectorTable typedef 42 class CCalDetector; 43 44 //A table to hold a list of pointers to CMS Detectors 45 typedef std::vector<CCalDetector*> CCalDetectorTable; 46 47 //////////////////// 48 //At last the class 49 class CCalDetector { 50 51 friend std::ostream& operator<<(std::ostream&, const CCalDetector&); 52 53 public: 54 //////////////////////////////////////////////////////////////// 55 //Constructor with a name and a filename. 56 CCalDetector(const G4String &name); 57 //////////////////////////////////////////////////////////////// 58 //Destructor 59 virtual ~CCalDetector(); 60 61 62 //////////////////////////////////////////////////////////////// 63 // Construction related methods 64 65 //This starts the detector construction 66 void constructHierarchy() { construct();} 67 void construct(); 68 69 70 //////////////////////////////////////////////////////////////// 71 //A method that allows to add a new detector inside this one. 72 void addDetector(CCalDetector*); 73 74 75 //////////////////////////////////////////////////////////////// 76 //Other get methods 77 G4String Name() const {return detectorName;} 78 G4String baseFileName() const {return fileName;} 79 G4String File() const {return fileName+".geom";} 80 CCalDetector* getDaughter(G4int i) const {return theDetectorsInside[i];} 81 G4int getNDaughters() const {return theDetectorsInside.size();} 82 83 84 //////////////////////////////////////////////////////////////// 85 //Local operators 86 //Equality only checks name !!! 87 G4bool operator==(const CCalDetector& left) const { 88 return (detectorName==left.detectorName); 89 } 90 G4bool operator!=(const CCalDetector& left) const { 91 return (detectorName!=left.detectorName); 92 } 93 94 95 protected: 96 97 //////////////////////////////////////////////////////////////// 98 //Pure Virtual methods 99 100 //Should read a file and store the information inside the concrete 101 //CCalDetector 102 virtual G4int readFile() = 0; 103 //Construct the daughters by calling the apropiate constructors 104 virtual void constructDaughters() = 0; 105 106 //////////////////////////////////////////////////////////////// 107 //Building related methods 108 109 //Builds the detector from a file 110 G4int buildFromFile(); 111 112 protected: 113 //////////////////////////////////////////////////////////////// 114 //Data Members 115 116 G4String detectorName; //Detector name 117 G4String fileName; //File name from it will be read 118 G4String pathName; //Path in which to look for files 119 120 CCalDetectorTable theDetectorsInside; //A collection of CCalDetectors inside 121 122 G4int constructFlag; //True if this detector is to be built 123 }; 124 125 #endif 126 127 128 129