Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // $Id: DicomPhantomZSliceHeader.cc 84839 2014-10-21 13:44:55Z gcosmo $ 26 // 27 // 27 /// \file DicomPhantomZSliceHeader.cc 28 /// \file DicomPhantomZSliceHeader.cc 28 /// \brief Implementation of the DicomPhantomZ 29 /// \brief Implementation of the DicomPhantomZSliceHeader class 29 // 30 // 30 31 31 #include "DicomPhantomZSliceHeader.hh" << 32 #include "globals.hh" 32 << 33 #include "G4GeometryTolerance.hh" << 34 #include "G4LogicalVolume.hh" 33 #include "G4LogicalVolume.hh" 35 #include "G4Material.hh" << 36 #include "G4MaterialTable.hh" 34 #include "G4MaterialTable.hh" 37 #include "G4NistManager.hh" << 35 #include "G4Material.hh" 38 #include "globals.hh" << 36 #include "G4GeometryTolerance.hh" 39 37 40 //....oooOO0OOooo........oooOO0OOooo........oo << 38 #include "DicomPhantomZSliceHeader.hh" >> 39 >> 40 >> 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 41 DicomPhantomZSliceHeader::DicomPhantomZSliceHe 42 DicomPhantomZSliceHeader::DicomPhantomZSliceHeader(const G4String& fname) 42 : fNoVoxelsX(0), << 43 : fNoVoxelX(0),fNoVoxelY(0),fNoVoxelZ(0), 43 fNoVoxelsY(0), << 44 fMinX(0),fMinY(0),fMinZ(0), 44 fNoVoxelsZ(0), << 45 fMaxX(0),fMaxY(0),fMaxZ(0), 45 fMinX(0), << 46 fFilename(fname),fSliceLocation(0) 46 fMinY(0), << 47 { 47 fMinZ(0), << 48 fMaxX(0), << 49 fMaxY(0), << 50 fMaxZ(0), << 51 fFilename(fname), << 52 fSliceLocation(0) << 53 {} << 54 48 55 //....oooOO0OOooo........oooOO0OOooo........oo << 49 } 56 DicomPhantomZSliceHeader::~DicomPhantomZSliceH << 57 50 58 //....oooOO0OOooo........oooOO0OOooo........oo << 51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 59 DicomPhantomZSliceHeader::DicomPhantomZSliceHe << 52 DicomPhantomZSliceHeader::~DicomPhantomZSliceHeader() 60 { 53 { 61 //----- Read material indices and names << 54 62 G4int nmate; << 55 } 63 G4String mateindex; << 56 64 G4String matename; << 57 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 65 fin >> nmate; << 58 DicomPhantomZSliceHeader::DicomPhantomZSliceHeader( >> 59 const DicomPhantomZSliceHeader& rhs ) >> 60 { >> 61 fNoVoxelX = rhs.GetNoVoxelX(); >> 62 fNoVoxelY = rhs.GetNoVoxelY(); >> 63 fNoVoxelZ = rhs.GetNoVoxelZ(); >> 64 fMinX = rhs.GetMinX(); >> 65 fMaxX = rhs.GetMaxX(); >> 66 fMinY = rhs.GetMinY(); >> 67 fMaxY = rhs.GetMaxY(); >> 68 fMinZ = rhs.GetMinZ(); >> 69 fMaxZ = rhs.GetMaxZ(); >> 70 fMaterialNames = rhs.GetMaterialNames(); >> 71 fFilename = rhs.fFilename; >> 72 fValues = rhs.fValues; >> 73 fMateIDs = rhs.fMateIDs; >> 74 fSliceLocation = rhs.fSliceLocation; >> 75 } >> 76 >> 77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 78 DicomPhantomZSliceHeader::DicomPhantomZSliceHeader( std::ifstream& fin ) >> 79 { >> 80 //----- Read material indices and names >> 81 G4int nmate; >> 82 G4String mateindex; >> 83 G4String matename; >> 84 fin >> nmate; 66 #ifdef G4VERBOSE 85 #ifdef G4VERBOSE 67 G4cout << " DicomPhantomZSliceHeader reading << 86 G4cout << " DicomPhantomZSliceHeader reading number of materials " >> 87 << nmate << G4endl; 68 #endif 88 #endif 69 89 70 for (G4int im = 0; im < nmate; im++) { << 90 for( G4int im = 0; im < nmate; im++ ){ 71 fin >> mateindex >> matename; << 91 fin >> mateindex >> matename; 72 #ifdef G4VERBOSE 92 #ifdef G4VERBOSE 73 // G4cout << " DicomPhantomZSliceHeader re << 93 G4cout << " DicomPhantomZSliceHeader reading material " << im << " : " 74 // << im << " : "<< mateindex << " " << << 94 << mateindex << " " << matename << G4endl; 75 #endif 95 #endif 76 96 77 if (!CheckMaterialExists(matename)) { << 97 if( ! CheckMaterialExists( matename ) ) { 78 G4Exception("DicomPhantomZSliceHeader::D << 98 G4Exception("DicomPhantomZSliceHeader::DicomPhantomZSliceHeader", 79 "A material is found in file << 99 "A material is found in file that is not built in the C++ code", 80 FatalErrorInArgument, matena << 100 FatalErrorInArgument, matename.c_str()); 81 } << 101 } 82 102 83 fMaterialNames.push_back(matename); << 103 fMaterialNames.push_back(matename); 84 } << 104 } 85 105 86 //----- Read number of voxels << 106 //----- Read number of voxels 87 fin >> fNoVoxelsX >> fNoVoxelsY >> fNoVoxels << 107 fin >> fNoVoxelX >> fNoVoxelY >> fNoVoxelZ; 88 #ifdef G4VERBOSE 108 #ifdef G4VERBOSE 89 G4cout << " Number of voxels " << fNoVoxelsX << 109 G4cout << " Number of voxels " << fNoVoxelX << " " << fNoVoxelY >> 110 << " " << fNoVoxelZ << G4endl; 90 #endif 111 #endif 91 112 92 //----- Read minimal and maximal extensions << 113 //----- Read minimal and maximal extensions (= walls of phantom) 93 fin >> fMinX >> fMaxX; << 114 fin >> fMinX >> fMaxX; 94 fin >> fMinY >> fMaxY; << 115 fin >> fMinY >> fMaxY; 95 fin >> fMinZ >> fMaxZ; << 116 fin >> fMinZ >> fMaxZ; 96 #ifdef G4VERBOSE 117 #ifdef G4VERBOSE 97 G4cout << " Extension in X " << fMinX << " " << 118 G4cout << " Extension in X " << fMinX << " " << fMaxX << G4endl 98 << " " << fMaxY << G4endl << " Extens << 119 << " Extension in Y " << fMinY << " " << fMaxY << G4endl >> 120 << " Extension in Z " << fMinZ << " " << fMaxZ << G4endl; 99 #endif 121 #endif 100 122 101 fSliceLocation = 0.5 * (fMinZ + fMaxZ); << 123 fSliceLocation = 0.5*(fMinZ + fMaxZ); 102 } 124 } 103 125 104 //....oooOO0OOooo........oooOO0OOooo........oo << 126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 105 G4bool DicomPhantomZSliceHeader::CheckMaterial << 127 G4bool DicomPhantomZSliceHeader::CheckMaterialExists( const G4String& mateName ) 106 { 128 { 107 const G4MaterialTable* matTab = G4Material:: << 129 const G4MaterialTable* matTab = G4Material::GetMaterialTable(); 108 std::vector<G4Material*>::const_iterator mat << 130 std::vector<G4Material*>::const_iterator matite; 109 for (matite = matTab->begin(); matite != mat << 131 for( matite = matTab->begin(); matite != matTab->end(); ++matite ) { 110 if ((*matite)->GetName() == mateName) { << 132 if( (*matite)->GetName() == mateName ) { return true; } 111 return true; << 112 } 133 } 113 } << 114 134 115 G4Material* g4mate = G4NistManager::Instance << 116 if (g4mate) { << 117 return false; 135 return false; 118 } << 136 119 else { << 120 return true; << 121 } << 122 } 137 } 123 138 124 //....oooOO0OOooo........oooOO0OOooo........oo << 139 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 125 void DicomPhantomZSliceHeader::operator+=(cons << 140 void DicomPhantomZSliceHeader::operator+=( const DicomPhantomZSliceHeader& rhs ) 126 { 141 { 127 *this = *this + rhs; << 142 *this = *this + rhs; 128 } 143 } 129 144 130 //....oooOO0OOooo........oooOO0OOooo........oo << 145 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 131 DicomPhantomZSliceHeader DicomPhantomZSliceHea << 146 DicomPhantomZSliceHeader DicomPhantomZSliceHeader::operator+( >> 147 const DicomPhantomZSliceHeader& rhs ) 132 { 148 { 133 //----- Check that both slices has the same << 149 //----- Check that both slices has the same dimensions 134 if (fNoVoxelsX != rhs.GetNoVoxelsX() || fNoV << 150 if( fNoVoxelX != rhs.GetNoVoxelX() 135 G4cerr << "DicomPhantomZSliceHeader error << 151 || fNoVoxelY != rhs.GetNoVoxelY() ) { >> 152 G4cerr << "DicomPhantomZSliceHeader error adding two slice headers:\ 136 !!! Different number of voxels: " 153 !!! Different number of voxels: " 137 << " X= " << fNoVoxelsX << " =? " << 154 << " X= " << fNoVoxelX << " =? " << rhs.GetNoVoxelX() 138 << " =? " << rhs.GetNoVoxelsY() << << 155 << " Y= " << fNoVoxelY << " =? " << rhs.GetNoVoxelY() 139 << G4endl; << 156 << " Z= " << fNoVoxelZ << " =? " << rhs.GetNoVoxelZ() 140 G4Exception("DicomPhantomZSliceHeader::Dic << 157 << G4endl; 141 } << 158 G4Exception("DicomPhantomZSliceHeader::DicomPhantomZSliceHeader", 142 //----- Check that both slices has the same << 159 "",FatalErrorInArgument,""); 143 if (fMinX != rhs.GetMinX() || fMaxX != rhs.G << 160 } 144 || fMaxY != rhs.GetMaxY()) << 161 //----- Check that both slices has the same extensions 145 { << 162 if( fMinX != rhs.GetMinX() || fMaxX != rhs.GetMaxX() 146 G4cerr << "DicomPhantomZSliceHeader error << 163 || fMinY != rhs.GetMinY() || fMaxY != rhs.GetMaxY() ) { >> 164 G4cerr << "DicomPhantomZSliceHeader error adding two slice headers:\ 147 !!! Different extensions: " 165 !!! Different extensions: " 148 << " Xmin= " << fMinX << " =? " << << 166 << " Xmin= " << fMinX << " =? " << rhs.GetMinX() 149 << rhs.GetMaxX() << " Ymin= " << f << 167 << " Xmax= " << fMaxX << " =? " << rhs.GetMaxX() 150 << " =? " << rhs.GetMaxY() << G4end << 168 << " Ymin= " << fMinY << " =? " << rhs.GetMinY() 151 G4Exception("DicomPhantomZSliceHeader::ope << 169 << " Ymax= " << fMaxY << " =? " << rhs.GetMaxY() 152 } << 170 << G4endl; >> 171 G4Exception("DicomPhantomZSliceHeader::operator+","", >> 172 FatalErrorInArgument,""); >> 173 } 153 174 154 //----- Check that both slices have the same << 175 //----- Check that both slices has the same materials 155 std::vector<G4String> fMaterialNames2 = rhs. << 176 std::vector<G4String> fMaterialNames2 = rhs.GetMaterialNames(); 156 if (fMaterialNames.size() != fMaterialNames2 << 177 if( fMaterialNames.size() != fMaterialNames2.size() ) { 157 G4cerr << "DicomPhantomZSliceHeader error << 178 G4cerr << "DicomPhantomZSliceHeader error adding two slice headers:\ 158 !!! Different number of materials: " << 179 !!! Different number of materials: " << fMaterialNames.size() << " =? " 159 << fMaterialNames.size() << " =? " << 180 << fMaterialNames2.size() << G4endl; 160 G4Exception("DicomPhantomZSliceHeader::ope << 181 G4Exception("DicomPhantomZSliceHeader::operator+","", 161 } << 182 FatalErrorInArgument,""); 162 for (unsigned int ii = 0; ii < fMaterialName << 183 } 163 if (fMaterialNames[ii] != fMaterialNames2[ << 184 for( unsigned int ii = 0; ii < fMaterialNames.size(); ii++ ) { 164 G4cerr << "DicomPhantomZSliceHeader erro << 185 if( fMaterialNames[ii] != fMaterialNames2[ii] ) { 165 !!! Different material number " << 186 G4cerr << "DicomPhantomZSliceHeader error adding two slice headers:\ 166 << ii << " : " << fMaterialNames[ << 187 !!! Different material number " << ii << " : " 167 G4Exception("DicomPhantomZSliceHeader::o << 188 << fMaterialNames[ii] << " =? " >> 189 << fMaterialNames2[ii] << G4endl; >> 190 G4Exception("DicomPhantomZSliceHeader::operator+","", >> 191 FatalErrorInArgument,""); >> 192 } 168 } 193 } 169 } << 170 194 171 //----- Check that the slices are contiguous << 195 //----- Check that the slices are contiguous in Z 172 if (std::fabs(fMinZ - rhs.GetMaxZ()) > G4Geo << 196 if( std::fabs( fMinZ - rhs.GetMaxZ() ) > 173 && std::fabs(fMaxZ - rhs.GetMinZ()) << 197 G4GeometryTolerance::GetInstance()->GetRadialTolerance() && 174 > G4GeometryTolerance::GetInstance( << 198 std::fabs( fMaxZ - rhs.GetMinZ() ) > 175 { << 199 G4GeometryTolerance::GetInstance()->GetRadialTolerance() ){ 176 G4cerr << "DicomPhantomZSliceHeader error << 200 G4cerr << "DicomPhantomZSliceHeader error adding two slice headers: !!!\ 177 Slices are not contiguous in Z " 201 Slices are not contiguous in Z " 178 << " Zmin= " << fMinZ << " & " << << 202 << " Zmin= " << fMinZ << " & " << rhs.GetMinZ() 179 << rhs.GetMaxZ() << G4endl; << 203 << " Zmax= " << fMaxZ << " & " << rhs.GetMaxZ() 180 G4Exception("DicomPhantomZSliceHeader::ope << 204 << G4endl; 181 } << 205 G4Exception("DicomPhantomZSliceHeader::operator+","", >> 206 FatalErrorInArgument,""); >> 207 } 182 208 183 //----- Build slice header copying first one << 209 //----- Build slice header copying first one 184 DicomPhantomZSliceHeader temp(*this); << 210 DicomPhantomZSliceHeader temp( *this ); 185 211 186 //----- Add data from second slice header << 212 //----- Add data from second slice header 187 temp.SetMinZ(std::min(fMinZ, rhs.GetMinZ())) << 213 temp.SetMinZ( std::min( fMinZ, rhs.GetMinZ() ) ); 188 temp.SetMaxZ(std::max(fMaxZ, rhs.GetMaxZ())) << 214 temp.SetMaxZ( std::max( fMaxZ, rhs.GetMaxZ() ) ); 189 temp.SetNoVoxelsZ(fNoVoxelsZ + rhs.GetNoVoxe << 215 temp.SetNoVoxelZ( fNoVoxelZ + rhs.GetNoVoxelZ() ); 190 216 191 return temp; << 217 return temp; 192 } 218 } 193 219 194 //....oooOO0OOooo........oooOO0OOooo........oo << 220 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 195 void DicomPhantomZSliceHeader::DumpToFile() 221 void DicomPhantomZSliceHeader::DumpToFile() 196 { 222 { 197 G4cout << "DicomPhantomZSliceHeader::Dumping << 223 198 // sleep(5); << 224 G4cout << "DicomPhantomZSliceHeader::Dumping Z Slice data to " 199 << 225 << fFilename << "..." << G4endl; >> 226 //sleep(5); >> 227 200 // May seen counter-intuitive (dumping to f 228 // May seen counter-intuitive (dumping to file you are reading from), but 201 // the reason for this is modification slic 229 // the reason for this is modification slice spacing 202 if (fMateIDs.size() == 0 || fValues.size() = << 230 if(fMateIDs.size() == 0 || fValues.size() == 0) { ReadDataFromFile(); } 203 ReadDataFromFile(); << 231 204 } << 232 205 << 206 std::ofstream out; 233 std::ofstream out; 207 out.open(fFilename.c_str()); 234 out.open(fFilename.c_str()); 208 << 235 209 if (!out) { << 236 if(!out) { 210 G4String descript = "DicomPhantomZSliceHea << 237 G4String descript = "DicomPhantomZSliceHeader::DumpToFile: could not open " 211 G4Exception(descript.c_str(), "", FatalExc << 238 +fFilename; >> 239 G4Exception(descript.c_str(),"", FatalException, ""); 212 } 240 } 213 << 241 >> 242 214 out << fMaterialNames.size() << std::endl; 243 out << fMaterialNames.size() << std::endl; 215 for (unsigned int i = 0; i < fMaterialNames. << 244 for(unsigned int i = 0; i < fMaterialNames.size(); ++i) { 216 out << i << " " << fMaterialNames.at(i) << 245 out << i << " " << fMaterialNames.at(i) << std::endl; 217 } 246 } 218 << 247 219 out << fNoVoxelsX << " " << fNoVoxelsY << " << 248 out << fNoVoxelX << " " << fNoVoxelY << " " << fNoVoxelZ << std::endl; 220 out << fMinX << " " << fMaxX << std::endl; 249 out << fMinX << " " << fMaxX << std::endl; 221 out << fMinY << " " << fMaxY << std::endl; 250 out << fMinY << " " << fMaxY << std::endl; 222 out << fMinZ << " " << fMaxZ << std::endl; 251 out << fMinZ << " " << fMaxZ << std::endl; 223 << 252 224 for (unsigned int i = 0; i < fMateIDs.size() << 253 for(unsigned int i = 0; i < fMateIDs.size(); ++i) { print(out,fMateIDs.at(i)," "); } 225 Print(out, fMateIDs.at(i), " "); << 254 for(unsigned int i = 0; i < fValues.size(); ++i) { print(out,fValues.at(i)," ",6); } 226 } << 255 227 << 228 for (unsigned int i = 0; i < fValues.size(); << 229 Print(out, fValues.at(i), " ", 6); << 230 } << 231 << 232 out.close(); 256 out.close(); >> 257 233 } 258 } 234 259 235 //....oooOO0OOooo........oooOO0OOooo........oo << 260 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 236 void DicomPhantomZSliceHeader::ReadDataFromFil 261 void DicomPhantomZSliceHeader::ReadDataFromFile() 237 { 262 { 238 std::ifstream in; 263 std::ifstream in; 239 in.open(fFilename.c_str()); 264 in.open(fFilename.c_str()); 240 << 265 241 if (!in) { << 266 if(!in) { 242 G4String descript = "DicomPhantomZSliceHea << 267 G4String descript = "DicomPhantomZSliceHeader::DumpToFile: could not open " 243 G4Exception(descript.c_str(), "", FatalExc << 268 +fFilename; >> 269 G4Exception(descript.c_str(),"", FatalException, ""); 244 } 270 } 245 << 271 246 G4int nMaterials; 272 G4int nMaterials; 247 in >> nMaterials; 273 in >> nMaterials; 248 << 274 249 fMaterialNames.resize(nMaterials, ""); << 275 fMaterialNames.resize(nMaterials,""); 250 for (G4int i = 0; i < nMaterials; ++i) { << 276 for(G4int i = 0; i < nMaterials; ++i) { 251 G4String str1, str2; 277 G4String str1, str2; 252 in >> str1 >> str2; 278 in >> str1 >> str2; 253 if (!IsInteger(str1)) { << 279 if(!IsInteger(str1)) { 254 G4String descript = "String : " + str1 + 280 G4String descript = "String : " + str1 + " supposed to be integer"; 255 G4Exception( << 281 G4Exception("DicomPhantomZSliceHeader::ReadDataFromFile - error in \ 256 "DicomPhantomZSliceHeader::ReadDataFro << 282 formatting: missing material index","", FatalException,descript.c_str()); 257 formatting: missing material index", << 258 "", FatalException, descript.c_str()); << 259 } 283 } 260 G4int index = G4s2n<G4int>(str1); << 284 G4int index = g4s2n<G4int>(str1); 261 if (index > nMaterials || index < 0) { << 285 if(index > nMaterials || index < 0) { 262 G4String descript = "Index : " + str1; 286 G4String descript = "Index : " + str1; 263 G4Exception( << 287 G4Exception("DicomPhantomZSliceHeader::ReadDataFromFile - error:\ 264 "DicomPhantomZSliceHeader::ReadDataFro << 288 bad material index","", FatalException,descript.c_str()); 265 bad material index", << 266 "", FatalException, descript.c_str()); << 267 } 289 } 268 fMaterialNames[index] = str2; 290 fMaterialNames[index] = str2; 269 } 291 } 270 << 292 271 in >> fNoVoxelsX >> fNoVoxelsY >> fNoVoxelsZ << 293 in >> fNoVoxelX >> fNoVoxelY >> fNoVoxelZ; 272 << 294 273 G4double tmpMinX, tmpMinY, tmpMinZ; 295 G4double tmpMinX, tmpMinY, tmpMinZ; 274 G4double tmpMaxX, tmpMaxY, tmpMaxZ; 296 G4double tmpMaxX, tmpMaxY, tmpMaxZ; 275 << 297 276 in >> tmpMinX >> tmpMaxX; 298 in >> tmpMinX >> tmpMaxX; 277 in >> tmpMinY >> tmpMaxY; 299 in >> tmpMinY >> tmpMaxY; 278 in >> tmpMinZ >> tmpMaxZ; 300 in >> tmpMinZ >> tmpMaxZ; 279 << 301 280 fMinX = << 302 fMinX = (CheckConsistency(tmpMinX,fMinX,"Min X value")) ? 281 (CheckConsistency(tmpMinX, fMinX, "Min X v << 303 fMinX : ((fMinX == 0) ? tmpMinX : fMinX); 282 fMaxX = << 304 fMaxX = (CheckConsistency(tmpMaxX,fMaxX,"Max X value")) ? 283 (CheckConsistency(tmpMaxX, fMaxX, "Max X v << 305 fMaxX : ((fMaxX == 0) ? tmpMaxX : fMaxX); 284 << 306 285 fMinY = << 307 fMinY = (CheckConsistency(tmpMinY,fMinY,"Min Y value")) ? 286 (CheckConsistency(tmpMinY, fMinY, "Min Y v << 308 fMinY : ((fMinY == 0) ? tmpMinY : fMinY); 287 fMaxY = << 309 fMaxY = (CheckConsistency(tmpMaxY,fMaxY,"Max Y value")) ? 288 (CheckConsistency(tmpMaxY, fMaxY, "Max Y v << 310 fMaxY : ((fMaxY == 0) ? tmpMaxY : fMaxY); 289 << 311 290 fMinZ = << 312 fMinZ = (CheckConsistency(tmpMinZ,fMinZ,"Min Z value")) ? 291 (CheckConsistency(tmpMinZ, fMinZ, "Min Z v << 313 fMinZ : ((fMinZ == 0) ? tmpMinZ : fMinZ); 292 fMaxZ = << 314 fMaxZ = (CheckConsistency(tmpMaxZ,fMaxZ,"Max Z value")) ? 293 (CheckConsistency(tmpMaxZ, fMaxZ, "Max Z v << 315 fMaxZ : ((fMaxZ == 0) ? tmpMaxZ : fMaxZ); 294 << 316 295 fMateIDs.clear(); 317 fMateIDs.clear(); 296 fValues.clear(); 318 fValues.clear(); 297 fMateIDs.resize(fNoVoxelsY * fNoVoxelsZ, std << 319 fMateIDs.resize(fNoVoxelY*fNoVoxelZ,std::vector<G4int>(fNoVoxelX,0)); 298 fValues.resize(fNoVoxelsY * fNoVoxelsZ, std: << 320 fValues.resize(fNoVoxelY*fNoVoxelZ,std::vector<G4double>(fNoVoxelX,0.)); 299 for (G4int k = 0; k < fNoVoxelsZ; ++k) { << 321 for(G4int k = 0; k < fNoVoxelZ; ++k) { 300 for (G4int j = 0; j < fNoVoxelsY; ++j) { << 322 for(G4int j = 0; j < fNoVoxelY; ++j) { 301 for (G4int i = 0; i < fNoVoxelsX; ++i) { << 323 for(G4int i = 0; i < fNoVoxelX; ++i) { 302 G4int tmpMateID; 324 G4int tmpMateID; 303 in >> tmpMateID; 325 in >> tmpMateID; 304 G4int row = j * (k + 1); << 326 G4int row = j*(k+1); 305 fMateIDs[row][i] = tmpMateID; 327 fMateIDs[row][i] = tmpMateID; 306 } 328 } 307 } 329 } 308 } 330 } 309 << 331 310 for (G4int k = 0; k < fNoVoxelsZ; ++k) { << 332 for(G4int k = 0; k < fNoVoxelZ; ++k) { 311 for (G4int j = 0; j < fNoVoxelsY; ++j) { << 333 for(G4int j = 0; j < fNoVoxelY; ++j) { 312 for (G4int i = 0; i < fNoVoxelsX; ++i) { << 334 for(G4int i = 0; i < fNoVoxelX; ++i) { 313 G4double tmpValue; 335 G4double tmpValue; 314 in >> tmpValue; 336 in >> tmpValue; 315 G4int row = j * (k + 1); << 337 G4int row = j*(k+1); 316 fValues[row][i] = tmpValue; 338 fValues[row][i] = tmpValue; 317 } 339 } 318 } 340 } 319 } 341 } 320 << 342 >> 343 321 in.close(); 344 in.close(); 322 } 345 } 323 //....oooOO0OOooo........oooOO0OOooo........oo << 346 >> 347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 348 >> 349 >> 350 324 351