Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/g3tog4/src/G3NegVolPars.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /g3tog4/src/G3NegVolPars.cc (Version 11.3.0) and /g3tog4/src/G3NegVolPars.cc (Version 6.2.p2)


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