Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 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 // 7 // >> 8 // $Id: G3NegVolPars.cc,v 1.6 2000/03/07 10:51:40 stesting Exp $ >> 9 // GEANT4 tag $Name: geant4-02-00 $ 27 // 10 // 28 // modified by I. Hrivnacova, 13.10.99 11 // modified by I. Hrivnacova, 13.10.99 29 12 30 #include "globals.hh" 13 #include "globals.hh" 31 #include "G3VolTable.hh" 14 #include "G3VolTable.hh" 32 #include "G4VSolid.hh" 15 #include "G4VSolid.hh" 33 #include "G3toG4.hh" 16 #include "G3toG4.hh" 34 #include <cmath> << 17 #include <math.h> 35 << 36 G4bool G3CalcParamsFn(G4double *rpar, G4int np << 37 G4String shape, G4String << 38 // Returns true only in case the parameters << 39 // this method remain negative. << 40 { << 41 G4bool NegPresent = FALSE; << 42 // for normal single volume positioning, jus << 43 // negative parameters << 44 // treat only the legal cases << 45 if (shapem == shape) { << 46 if (shape == "BOX" || shape == "TRD1" || s << 47 shape == "ELTU") { << 48 for (G4int i=0;i<npar;i++) { << 49 if (rpar[i] < 0) { << 50 if (rparm != 0) rpar[i] = rparm[i]; << 51 if (rpar[i] < 0) NegPresent = TRUE; << 52 } << 53 } << 54 } << 55 if (shape == "TRAP") { << 56 for (G4int i=0;i<11;i++) { << 57 if (i != 1 && i != 2 && i != 6 && i != << 58 if (rpar[i]<0) { << 59 if (rparm != 0) rpar[i] = rparm[i] << 60 if (rpar[i] < 0) NegPresent = TRUE; << 61 } << 62 } << 63 } << 64 } << 65 if (shape == "TUBE" || shape == "TUBS" || << 66 for (G4int i=0;i<3;i++) { << 67 if (rpar[i] < 0) { << 68 if (rparm != 0) rpar[i] = rparm[i]; << 69 if (rpar[i] < 0) NegPresent = TRUE; << 70 } << 71 } << 72 } << 73 if (shape == "CONE" || shape == "CONS") { << 74 for (G4int i=0;i<5;i++) { << 75 if (rpar[i] < 0) { << 76 if (rparm != 0) rpar[i] = rparm[i]; << 77 if (rpar[i] < 0) NegPresent = TRUE; << 78 } << 79 } << 80 } << 81 if (shape == "SPHE") { << 82 for (G4int i=0;i<2;i++) { << 83 if (rpar[i] < 0) { << 84 if (rparm != 0) rpar[i] = rparm[i]; << 85 if (rpar[i] < 0) NegPresent = TRUE; << 86 } << 87 } << 88 } << 89 if (shape == "PGON") { << 90 G4int nz = G4int(rpar[3]); << 91 G4int ipl; << 92 for (G4int i=0;i<nz;i++) { << 93 ipl = 5 + i*3; << 94 if (rpar[ipl] < 0) { << 95 if (rparm != 0) rpar[ipl] = rparm[ip << 96 if (rpar[ipl] < 0) NegPresent = TRUE; << 97 } << 98 if (rpar[ipl+1] < 0) { << 99 if (rparm != 0) rpar[ipl] = rparm[i << 100 if (rpar[ipl] < 0) NegPresent = TRUE; << 101 } << 102 } << 103 } << 104 if (shape == "PCON") { << 105 G4int nz = G4int(rpar[2]); << 106 G4int ipl; << 107 for (G4int i=0;i<nz;i++) { << 108 ipl = 4 + i*3; << 109 if (rpar[ipl] < 0) { << 110 if (rparm != 0) rpar[ipl] = rparm[ip << 111 if (rpar[ipl] < 0) NegPresent = TRUE; << 112 } << 113 if (rpar[ipl+1] < 0) { << 114 // TO DO << 115 // check - folowing argument might be ipl+ << 116 if (rparm != 0) rpar[ipl] = rparm[ip << 117 if (rpar[ipl] < 0) NegPresent = TRUE; << 118 } << 119 } << 120 } << 121 } << 122 18 123 if (shape == "BOX") { << 19 G4bool G3CalcParamsFn(G4double* Rpar, G4int npar, G4double* Rparm, 124 if (shapem == "TRD1") { << 20 G4String shape, G4String shapem); 125 if (rpar[1] < 0) { << 126 if (rparm != 0) rpar[1] = rparm[2]; << 127 if (rpar[1] < 0) NegPresent = TRUE; << 128 } << 129 if (rpar[2] < 0) { << 130 if (rparm != 0) rpar[2] = rparm[3]; << 131 if (rpar[2] < 0) NegPresent = TRUE; << 132 } << 133 if (rpar[0] < 0) { << 134 if (rparm != 0) rpar[0] = std::min(rpa << 135 std::abs(rpa << 136 if (rpar[0] < 0) NegPresent = TRUE; << 137 } << 138 } << 139 if (shapem == "TRD2") { << 140 if (rpar[2] < 0) { << 141 if (rparm != 0) rpar[2] = rparm[4]; << 142 if (rpar[2]<0) NegPresent = TRUE; << 143 } << 144 if (rpar[0] < 0) { << 145 if (rparm != 0) rpar[0] = std::min(rpa << 146 std::abs(rpa << 147 if (rpar[0]<0) NegPresent = TRUE; << 148 } << 149 if (rpar[1] < 0) { << 150 if (rparm != 0) rpar[1] = std::min(rpa << 151 std::abs(rpa << 152 if (rpar[1]<0) NegPresent = TRUE; << 153 } << 154 } << 155 if (shapem == "TRAP") { << 156 if (rpar[2] < 0) { << 157 if (rparm != 0) rpar[2] = rparm[0]; << 158 if (rpar[2] < 0) NegPresent = TRUE; << 159 } << 160 if (rpar[0] < 0) { << 161 if (rparm != 0) { << 162 G4double xlo = std::min(rparm[4],rpa << 163 std::abs(rparm[4]-rparm[8])*.5*rpa << 164 G4double xhi = std::min(rparm[5],rpa << 165 std::abs(rparm[5]-rparm[9])*.5*rpa << 166 rpar[0] = std::min(xlo,xhi); << 167 } << 168 if (rpar[0] < 0) NegPresent = TRUE; << 169 } << 170 if (rpar[1] < 0) { << 171 if (rparm != 0) rpar[1] = std::min(rpa << 172 std::abs(rparm[3]-rpar << 173 if (rpar[1] < 0) NegPresent = TRUE; << 174 } << 175 } << 176 } << 177 return NegPresent; << 178 } << 179 21 180 G4bool G3NegVolPars(G4double pars[], G4int *np << 22 G4bool G3NegVolPars(G4double pars[], G4int *nparpt, 181 G3VolTableEntry* vte, << 23 G3VolTableEntry* vte, G3VolTableEntry* mvte, const char routine[]) 182 G3VolTableEntry* mvte, con << 183 { 24 { 184 G4bool NegPresent = FALSE; 25 G4bool NegPresent = FALSE; 185 26 186 // retrieve parameters 27 // retrieve parameters 187 28 188 // the volume 29 // the volume 189 G4String shape = vte->GetShape(); 30 G4String shape = vte->GetShape(); 190 G4double* rpar = vte->GetRpar(); << 31 G4double* Rpar = vte->GetRpar(); 191 G4int npar = vte->GetNpar(); 32 G4int npar = vte->GetNpar(); 192 if (npar ==0) { 33 if (npar ==0) { 193 // no solid parameters are defined in vte 34 // no solid parameters are defined in vte 194 npar = *nparpt; 35 npar = *nparpt; 195 rpar = pars; << 36 Rpar = pars; 196 } 37 } 197 else { 38 else { 198 // solid parameters are already defined in 39 // solid parameters are already defined in vte 199 // pars[], nparpt are ignored 40 // pars[], nparpt are ignored 200 // TO DO: check if g3 ignores them too or 41 // TO DO: check if g3 ignores them too or resets 201 // vte parameters according to this new on 42 // vte parameters according to this new ones !! 202 } 43 } 203 44 204 // mother 45 // mother 205 G4String shapem = mvte->GetShape(); 46 G4String shapem = mvte->GetShape(); 206 G4double* rparm = mvte->GetRpar(); << 47 G4double* Rparm = mvte->GetRpar(); >> 48 G4int nparm = mvte->GetNpar(); 207 49 208 if (strcmp(routine,"GSPOS") == 0 || strcmp(r 50 if (strcmp(routine,"GSPOS") == 0 || strcmp(routine,"GSVOLU") == 0) { 209 NegPresent = G3CalcParamsFn(rpar,npar,rpar << 51 NegPresent = G3CalcParamsFn(Rpar,npar,Rparm,shape,shapem); 210 } 52 } 211 if (strcmp(routine,"GSDVN") == 0) { 53 if (strcmp(routine,"GSDVN") == 0) { 212 // just set the flag. The parametrization 54 // just set the flag. The parametrization function figures out 213 // what to do. 55 // what to do. 214 for (G4int i=0;i<npar;i++) { 56 for (G4int i=0;i<npar;i++) { 215 if (rpar[i] < 0) { << 57 if (Rpar[i] < 0) { 216 NegPresent = TRUE; 58 NegPresent = TRUE; 217 } 59 } 218 } 60 } 219 } 61 } 220 return NegPresent; 62 return NegPresent; 221 } 63 } 222 64