Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4tgbRotationMatrix implementation 27 // 28 // Author: P.Arce, CIEMAT (November 2007) 29 // ------------------------------------------- 30 31 #include "G4tgbRotationMatrix.hh" 32 #include "G4RotationMatrix.hh" 33 #include "G4tgrMessenger.hh" 34 #include "G4tgrUtils.hh" 35 #include "G4UIcommand.hh" 36 37 // ------------------------------------------- 38 G4tgbRotationMatrix::G4tgbRotationMatrix() 39 { 40 } 41 42 // ------------------------------------------- 43 G4tgbRotationMatrix::~G4tgbRotationMatrix() 44 { 45 } 46 47 // ------------------------------------------- 48 G4tgbRotationMatrix::G4tgbRotationMatrix(G4tgr 49 : theTgrRM(tgr) 50 { 51 } 52 53 // ------------------------------------------- 54 G4RotationMatrix* G4tgbRotationMatrix::BuildG4 55 { 56 std::vector<G4double> values = theTgrRM->Get 57 58 if(values.size() == 3) 59 { 60 return BuildG4RotMatrixFrom3(values); 61 } 62 else if(values.size() == 6) 63 { 64 return BuildG4RotMatrixFrom6(values); 65 } 66 else if(values.size() == 9) 67 { 68 return BuildG4RotMatrixFrom9(values); 69 } 70 else 71 { 72 G4String ErrMessage = "Number of values is 73 G4UIcommand::Convert 74 G4String(". It shoul 75 G4Exception("G4tgbRotationMatrix::BuildG4R 76 FatalException, ErrMessage); 77 } 78 return nullptr; 79 } 80 81 // ------------------------------------------- 82 G4RotationMatrix* 83 G4tgbRotationMatrix::BuildG4RotMatrixFrom3(std 84 { 85 G4RotationMatrix* rotMat = new G4RotationMat 86 87 rotMat->rotateX(values[0]); 88 rotMat->rotateY(values[1]); 89 rotMat->rotateZ(values[2]); 90 91 #ifdef G4VERBOSE 92 if(G4tgrMessenger::GetVerboseLevel() >= 1) 93 { 94 G4cout << " Constructing new G4RotationMat 95 << " : " << *rotMat << G4endl; 96 } 97 #endif 98 99 return rotMat; 100 } 101 102 // ------------------------------------------- 103 G4RotationMatrix* 104 G4tgbRotationMatrix::BuildG4RotMatrixFrom6(std 105 { 106 G4double thetaX = values[0]; 107 G4double phiX = values[1]; 108 G4double thetaY = values[2]; 109 G4double phiY = values[3]; 110 G4double thetaZ = values[4]; 111 G4double phiZ = values[5]; 112 113 // build the 3 axis from the values 114 G4ThreeVector colx(std::sin(thetaX) * std::c 115 std::sin(thetaX) * std::s 116 G4ThreeVector coly(std::sin(thetaY) * std::c 117 std::sin(thetaY) * std::s 118 G4ThreeVector colz(std::sin(thetaZ) * std::c 119 std::sin(thetaZ) * std::s 120 121 // Now create a G4RotationMatrix (HepRotatio 122 // This is not foreseen in CLHEP, but can be 123 // constructor which does not check its inpu 124 125 G4Rep3x3 rottemp(colx.x(), coly.x(), colz.x( 126 colx.y(), coly.y(), colz.y( 127 colx.z(), coly.z(), colz.z( 128 129 G4RotationMatrix* rotMat = new G4RotationMat 130 131 #ifdef G4VERBOSE 132 if(G4tgrMessenger::GetVerboseLevel() >= 1) 133 { 134 G4cout << " Constructing new G4RotationMat 135 << " : " << *rotMat << G4endl; 136 } 137 #endif 138 139 return rotMat; 140 } 141 142 // ------------------------------------------- 143 G4RotationMatrix* 144 G4tgbRotationMatrix::BuildG4RotMatrixFrom9(std 145 { 146 // build the 3 axis from the values 147 G4ThreeVector colx(values[0], values[1], val 148 G4ThreeVector coly(values[3], values[4], val 149 G4ThreeVector colz(values[6], values[7], val 150 151 // Now create a G4RotationMatrix (HepRotatio 152 // This is not foreseen in CLHEP, but can be 153 // constructor which does not check its inpu 154 155 G4Rep3x3 rottemp(colx.x(), coly.x(), colz.x( 156 colx.y(), coly.y(), colz.y( 157 colx.z(), coly.z(), colz.z( 158 159 G4RotationMatrix* rotMat = new G4RotationMat 160 161 #ifdef G4VERBOSE 162 if(G4tgrMessenger::GetVerboseLevel() >= 1) 163 { 164 G4cout << " Constructing new G4RotationMat 165 << " : " << *rotMat << G4endl; 166 } 167 #endif 168 169 return rotMat; 170 } 171