Geant4  10.02.p01
ExExChDetectorConstruction.cc
Go to the documentation of this file.
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 
29 #include "G4RunManager.hh"
30 
31 #include "G4Material.hh"
32 #include "G4NistManager.hh"
33 
34 #include "G4Box.hh"
35 #include "G4Tubs.hh"
36 #include "G4SubtractionSolid.hh"
37 #include "G4LogicalVolume.hh"
38 #include "G4PVPlacement.hh"
39 #include "G4UniformMagField.hh"
40 #include "G4SystemOfUnits.hh"
41 #include "G4PhysicalConstants.hh"
42 
43 #include "G4GeometryManager.hh"
44 #include "G4PhysicalVolumeStore.hh"
45 #include "G4LogicalVolumeStore.hh"
46 #include "G4SolidStore.hh"
47 
48 #include "G4VisAttributes.hh"
49 #include "G4Colour.hh"
50 
51 #include "G4SDManager.hh"
53 
54 #include "XLatticeManager3.hh"
55 
56 #include "XLogicalAtomicLattice.hh"
58 #include "XLogicalBase.hh"
59 #include "XUnitCell.hh"
60 
73 
74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
75 
77 fWorldLogic(0),fXtalLogic(0){
78 
79  //SiSD standard parameters
80  bSiSD = true;
82  3.8 * CLHEP::centimeter,
83  640. * CLHEP::micrometer);
84  fSSDXtalDistance[0] = - (9998.) * CLHEP::millimeter;
85  fSSDXtalDistance[1] = - (320.) * CLHEP::millimeter;
86  fSSDXtalDistance[2] = + (10756.) * CLHEP::millimeter;
87 
88  //SiSD Box standard parameters
90  25. * CLHEP::centimeter,
91  10. * CLHEP::centimeter);
93 
94  //Beampipe standard parameters
95  bBeamPipe = false;
98  bXtal = true;
99  fXtalAngle = G4ThreeVector(0.,0.,0.);
101  70. * CLHEP::millimeter,
102  1.94 * CLHEP::millimeter);
104  0. * CLHEP::meter,
105  0. * CLHEP::meter);
106 
108  5.431 * CLHEP::angstrom,
109  5.431 * CLHEP::angstrom);
110 
112  90.*CLHEP::deg,
113  90.*CLHEP::deg);
114 
115  fXtalTVA = 0.075 * CLHEP::angstrom;
116  fXtalMiller = G4ThreeVector(2,2,0);
117 
118  SetXtalMaterial("G4_Si");
119 
121 }
122 
123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
124 
126 }
127 
128 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
129 
131 }
132 
133 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
134 
136  //** World **//
138  1. * CLHEP::meter,
139  30. * CLHEP::meter);
141  Instance()->FindOrBuildMaterial("G4_Galactic");
142 
143  fWorldSolid = new G4Box("World",
144  fWorldSize.x()/2.,
145  fWorldSize.y()/2.,
146  fWorldSize.z()/2.);
147 
150  "World");
151 
153  G4ThreeVector(),
154  fWorldLogic,
155  "World",
156  0,
157  false,
158  0);
159 
160  //** SiSD **//
161 
162  if(bSiSD){
163  for(unsigned int i1=0;i1<3;i1++){
164  G4LogicalVolume* fSSDBoxLogic = ConstructSiSD(i1);
165 
166  G4ThreeVector vBoxPosition =
167  G4ThreeVector(+fSSDBoxSize.x()/4.,
168  -fSSDBoxSize.y()/4.,
169  fSSDXtalDistance[i1]);
170 
171  new G4PVPlacement(0,
172  vBoxPosition,
173  fSSDBoxLogic,"SiSD",
174  fWorldLogic,
175  false,
176  i1);
177  }
178  }
179  //** BeamPipe **//
180  if(bBeamPipe){
181  G4double fBeamPipeFromSiSDDistance = 20. * CLHEP::centimeter;
182 
183  G4ThreeVector fBeamPipeA0Position =
184  G4ThreeVector(0.,
185  0.,
186  fSSDXtalDistance[0] + std::fabs(fSSDXtalDistance[1] -
187  fSSDXtalDistance[0])/2.);
188 
189  G4double fBeamPipeA0Length =
190  std::fabs(fSSDXtalDistance[1] - fSSDXtalDistance[0]) -
191  2. * (fSSDSize.z()/2.) - 2. * fBeamPipeFromSiSDDistance;
192 
193  G4LogicalVolume* fBeamPipeA0Logic =
194  ConstructBeamPipe(fBeamPipeA0Length);
195 
196  new G4PVPlacement(0,
197  fBeamPipeA0Position,
198  fBeamPipeA0Logic,
199  "BeamPipeA0",
200  fWorldLogic,
201  false,
202  0);
203 
204  G4ThreeVector fBeamPipeA1Position =
205  G4ThreeVector(0.,0.,+ std::fabs(fSSDXtalDistance[2]) /2.);
206  G4double fBeamPipeA1Length =
207  std::fabs(fSSDXtalDistance[2]) - 2. * (fSSDSize.z()/2.) -
208  2. * fBeamPipeFromSiSDDistance;
209 
210  G4LogicalVolume* fBeamPipeA1Logic =
211  ConstructBeamPipe(fBeamPipeA1Length);
212 
213  new G4PVPlacement(0,
214  fBeamPipeA1Position,
215  fBeamPipeA1Logic,
216  "BeamPipeA1",
217  fWorldLogic,
218  false,
219  1);
220  }
221 #ifndef G4MULTITHREADED
222  G4String SDname;
223  G4VSensitiveDetector* telescope =
224  new ExExChSensitiveDetector(SDname="/telescope");
226  for(unsigned int i1=0;i1<3;i1++){
227  fSSDLogic[i1]->SetSensitiveDetector(telescope);
228  }
229 #endif
230  //** Crystal **//
231  if(bXtal){
233  }
234 
235  return fWorldPhysical;
236 }
237 
238 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
239 
240 #ifdef G4MULTITHREADED
242  G4String SDname;
243  G4VSensitiveDetector* telescope =
244  new ExExChSensitiveDetector(SDname="/telescope");
246  for(unsigned int i1=0;i1<3;i1++){
247  fSSDLogic[i1]->SetSensitiveDetector(telescope);
248  }
249 }
250 #else
252 }
253 #endif
254 
255 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
256 
260  G4Material* Galactic =
262  G4double fFoilThickness = 0.024 * CLHEP::millimeter;
263 
264  //** SiSD Box **//
265  G4Box* fSSDBoxEnvelopeSolid =
266  new G4Box("SiSDBoxEnvelope",
267  fSSDBoxSize.x()/2.,
268  fSSDBoxSize.y()/2.,
269  fSSDBoxSize.z()/2. + fFoilThickness);
270 
271  G4LogicalVolume* fSSDBoxEnvelopeLogic =
272  new G4LogicalVolume(fSSDBoxEnvelopeSolid,
273  Galactic,
274  "SiSDBoxEnvelope");
275 
276  //** SiSD Active Area **//
277  G4Box* fSSDSolid = new G4Box("SiSD",
278  fSSDSize.x()/2.,
279  fSSDSize.y()/2.,
280  fSSDSize.z()/2.);
281  fSSDLogic[copyNo] = new G4LogicalVolume(fSSDSolid,Si,"SiSD");
282 
283  //** SiSD Box **//
284  G4Box* fSSDBoxSolidA = new G4Box("SiSDBoxA",
285  fSSDBoxSize.x()/2.,
286  fSSDBoxSize.y()/2.,
287  fSSDBoxSize.z()/2.);
288 
289  G4Box* fSSDBoxSolidB = new G4Box("SiSDBoxB",
290  fSSDBoxSize.x()/2. - fSSDBoxThickness/2.,
291  fSSDBoxSize.y()/2. - fSSDBoxThickness/2.,
292  fSSDBoxSize.z()/2. - fSSDBoxThickness/2.);
293 
294  G4Box* fSSDBoxSolidC = new G4Box("SiSDBoxC",
295  fSSDSize.x()/2. + fSSDBoxThickness/2.,
296  fSSDSize.y()/2. + fSSDBoxThickness/2.,
297  fSSDBoxSize.z()/2.);
298 
299  G4Box* fSSDBoxSolidD = new G4Box("SiSDBoxD",
300  fSSDSize.x()/2.,
301  fSSDSize.y()/2.,
302  fSSDBoxSize.z());
303 
304  G4Box* fSSDBoxFoilSolid = new G4Box("SSDBoxFoil",
305  fSSDSize.x()/2.,
306  fSSDSize.y()/2.,
307  fFoilThickness);
308  G4SubtractionSolid* fSSDBoxSolid =
309  new G4SubtractionSolid("SiSDBox",
310  fSSDBoxSolidA,
311  fSSDBoxSolidB);
312 
313  fSSDBoxSolid = new G4SubtractionSolid("SiSDBox",
314  fSSDBoxSolid,
315  fSSDBoxSolidC,
316  0,
317  G4ThreeVector(-fSSDBoxSize.x()/4.,
318  fSSDBoxSize.y()/4.,
319  0.));
320 
321  G4SubtractionSolid* fSSDBoxInternalSolid =
322  new G4SubtractionSolid("SiSDBoxInternalSolid",
323  fSSDBoxSolidC,
324  fSSDBoxSolidD);
325 
326  G4LogicalVolume* fSSDBoxLogic = new G4LogicalVolume(fSSDBoxSolid,
327  Al,
328  "SiSDBox");
329  G4LogicalVolume* fSSDBoxInternalLogic =
330  new G4LogicalVolume(fSSDBoxInternalSolid,
331  Al,
332  "SiSDBox");
333 
334  G4LogicalVolume* fSSDBoxFoilLogic = new G4LogicalVolume(fSSDBoxFoilSolid,
335  Al,
336  "SiSDBoxFoil");
337 
338  G4VisAttributes* fSSDBoxVisAttribute =
339  new G4VisAttributes(G4Colour(0.7,0.7,0.7));
340  fSSDBoxVisAttribute->SetForceSolid(true);
341  fSSDBoxLogic->SetVisAttributes(fSSDBoxVisAttribute);
342  fSSDBoxInternalLogic->SetVisAttributes(fSSDBoxVisAttribute);
343 
344  G4VisAttributes* fSSDBoxFoilVisAttribute =
345  new G4VisAttributes(G4Colour(0.8,0.8,0.8));
346  fSSDBoxFoilVisAttribute->SetForceSolid(false);
347  fSSDBoxFoilLogic->SetVisAttributes(fSSDBoxFoilVisAttribute);
348 
349  G4VisAttributes* fSiSDVisAttribute =
350  new G4VisAttributes(G4Colour(1.0,0.65,0.0));
351  fSiSDVisAttribute->SetForceSolid(true);
352  fSSDLogic[copyNo]->SetVisAttributes(fSiSDVisAttribute);
353 
354  //** Add to Physical World **//
355  new G4PVPlacement(0,
356  G4ThreeVector(-fSSDBoxSize.x()/4.,fSSDBoxSize.y()/4.,0.),
357  fSSDLogic[copyNo],"SiSD",
358  fSSDBoxEnvelopeLogic,
359  false,
360  copyNo);
361  new G4PVPlacement(0,
362  G4ThreeVector(),
363  fSSDBoxLogic,"SiSDBox",
364  fSSDBoxEnvelopeLogic,
365  false,
366  copyNo);
367 
368  new G4PVPlacement(0,
369  G4ThreeVector(-fSSDBoxSize.x()/4.,fSSDBoxSize.y()/4.,0.),
370  fSSDBoxInternalLogic,"SiSDBox",
371  fSSDBoxEnvelopeLogic,
372  false,
373  copyNo);
374 
375  new G4PVPlacement(0,
376  G4ThreeVector(-fSSDBoxSize.x()/4.,
377  fSSDBoxSize.y()/4.,
378  (fSSDBoxSize.z()/2. - fFoilThickness/2.)),
379  fSSDBoxFoilLogic,"SiSDBoxFoil",
380  fSSDBoxEnvelopeLogic,
381  false,
382  copyNo);
383 
384  new G4PVPlacement(0,
385  G4ThreeVector(-fSSDBoxSize.x()/4.,
386  fSSDBoxSize.y()/4.,
387  -(fSSDBoxSize.z()/2. - fFoilThickness/2.)),
388  fSSDBoxFoilLogic,"SiSDBoxFoil",
389  fSSDBoxEnvelopeLogic,
390  false,
391  G4int(copyNo*2+1));
392 
393  return fSSDBoxEnvelopeLogic;
394 }
395 
396 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
397 
399  G4Material* Galactic =
401  G4Material* Mylar =
403 
404  // Definition of vacuum
405  G4double z = 7.;
406  G4double a = 14.007*CLHEP::g/CLHEP::mole;
407  G4double density = CLHEP::universe_mean_density;
408  G4double pressure = 1.E-8 * 1.E-3 * CLHEP::bar;
409  G4double temperature = 300.*CLHEP::kelvin;
410 
411  G4Material* Vacuum = new G4Material("Vacuum",
412  z,
413  a,
414  density,
415  kStateGas,
416  temperature,
417  pressure);
418 
419  // Definition of stainless steel (not in NIST) for pipes
426  G4double density_SS = 8.06*CLHEP::g/CLHEP::cm3;
427  G4int ncomponents_SS =6;
428  G4double fractionmass;
429 
430  G4Material* StainlessSteel =
431  new G4Material("StainlessSteel", density_SS, ncomponents_SS);
432  StainlessSteel->AddElement(elC, fractionmass=0.001);
433  StainlessSteel->AddElement(elSi, fractionmass=0.007);
434  StainlessSteel->AddElement(elCr, fractionmass=0.18);
435  StainlessSteel->AddElement(elMn, fractionmass=0.01);
436  StainlessSteel->AddElement(elFe, fractionmass=0.712);
437  StainlessSteel->AddElement(elNi, fractionmass=0.09);
438 
439  // Visualization attributes
440  G4VisAttributes* fBeamPipeVisAttribute =
441  new G4VisAttributes(G4Colour(0.0,1.0,0.0));
442  fBeamPipeVisAttribute->SetForceSolid(true);
443 
444  G4VisAttributes* fBeamPipeInsideVisAttribute =
445  new G4VisAttributes(G4Colour(0.0,0.0,1.0));
446  fBeamPipeInsideVisAttribute->SetForceSolid(false);
447 
448  // Variables
449  G4double fMylarThickness = 10. * CLHEP::millimeter;
450 
451  //** BeamPipe **//
452  G4Tubs* fBeamPipeEnvelopeSolid =
453  new G4Tubs("BeamPipeEnvelope",
454  0.,
456  length * 0.5 + fMylarThickness * 0.5 * 4.,
457  0*CLHEP::deg,
458  360*CLHEP::deg);
459 
460  G4LogicalVolume* fBeamPipeEnvelopeLogic =
461  new G4LogicalVolume(fBeamPipeEnvelopeSolid,
462  Galactic,
463  "BeamPipeEnvelope");
464 
465 
466  G4Tubs* fBeamPipeSolid = new G4Tubs("BeamPipe",
469  length * 0.5,
470  0*CLHEP::deg,
471  360*CLHEP::deg);
472  G4LogicalVolume* fBeamPipeLogic = new G4LogicalVolume(fBeamPipeSolid,
473  StainlessSteel,
474  "BeamPipe");
475  fBeamPipeLogic->SetVisAttributes(fBeamPipeVisAttribute);
476  new G4PVPlacement(0,
477  G4ThreeVector(),
478  fBeamPipeLogic,
479  "BeamPipe",
480  fBeamPipeEnvelopeLogic,
481  false,
482  0);
483 
484 
485  G4Tubs* fBeamPipeInsideSolid = new G4Tubs("BeamPipeInside",
486  0.,
488  length * 0.5,
489  0*CLHEP::deg,
490  360*CLHEP::deg);
491  G4LogicalVolume* fBeamPipeInsideLogic =
492  new G4LogicalVolume(fBeamPipeInsideSolid,
493  Vacuum,
494  "BeamPipeInside");
495  fBeamPipeInsideLogic->SetVisAttributes(fBeamPipeInsideVisAttribute);
496  new G4PVPlacement(0,
497  G4ThreeVector(),
498  fBeamPipeInsideLogic,
499  "BeamPipeInside",
500  fBeamPipeEnvelopeLogic,
501  false,
502  0);
503 
504 
505  G4Tubs* fBeamPipeMylarSolid =
506  new G4Tubs("BeamPipeMylar",
507  0.,
509  fMylarThickness * 0.5,
510  0*CLHEP::deg,
511  360*CLHEP::deg);
512 
513  G4LogicalVolume* fBeamPipeMylarLogic =
514  new G4LogicalVolume(fBeamPipeMylarSolid,
515  Mylar,
516  "BeamPipeMylar");
517  fBeamPipeMylarLogic->SetVisAttributes(fBeamPipeInsideVisAttribute);
518  new G4PVPlacement(0,
519  G4ThreeVector(0.,
520  0.,
521  +(length + fMylarThickness * 2.) / 2.),
522  fBeamPipeMylarLogic,
523  "BeamPipeMylar",
524  fBeamPipeEnvelopeLogic,
525  false,
526  0);
527 
528  new G4PVPlacement(0,
529  G4ThreeVector(0.,
530  0.,
531  -(length + fMylarThickness * 2.) / 2.),
532  fBeamPipeMylarLogic,
533  "BeamPipeMylar",
534  fBeamPipeEnvelopeLogic,
535  false,
536  1);
537 
538  return fBeamPipeEnvelopeLogic;
539 }
540 
541 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
542 
544  if(fXtalCurvatureRadius.x() != 0.){
545  double fXtalAngleOut =
547  fXtalSolid = new G4Tubs("Target",
548  fXtalCurvatureRadius.x() - fXtalSize.x()/2,
549  fXtalCurvatureRadius.x() + fXtalSize.x()/2,
550  fXtalSize.y()/2.,
551  fXtalAngle.y(),
552  fXtalAngleOut);
553  }
554  else{
555  fXtalSolid = new G4Box("Target",
556  fXtalSize.x()/2.,
557  fXtalSize.y()/2.,
558  fXtalSize.z()/2.);
559  }
560 
562 
563  G4RotationMatrix* vRotationMatrix =
564  new G4RotationMatrix; // Rotates X and Z axes only
565 
566  if(fXtalCurvatureRadius.x() != 0.){
567  vRotationMatrix->rotateX(fXtalAngle.x()-CLHEP::pi*0.5);
568  vRotationMatrix->rotateY(fXtalAngle.y());
569  vRotationMatrix->rotateZ(fXtalAngle.z());
570  fXtalPhysical =
571  new G4PVPlacement(vRotationMatrix,
573  fXtalLogic,"Target",
574  fWorldLogic,
575  false,
576  0);
577  }
578  else{
579  vRotationMatrix->rotateX(fXtalAngle.x());
580  vRotationMatrix->rotateY(fXtalAngle.y());
581  vRotationMatrix->rotateZ(fXtalAngle.z());
582  fXtalPhysical =
583  new G4PVPlacement(vRotationMatrix,
584  G4ThreeVector(0.,0.,0.),
585  fXtalLogic,"Target",
586  fWorldLogic,
587  false,
588  0);
589  }
590 
591  //----------------------------------------
592  // Create XLogicalLattice
593  //----------------------------------------
594  XLogicalLattice* logicalLattice = new XLogicalLattice();
595  double vScatteringConstant =
597  logicalLattice->SetScatteringConstant(vScatteringConstant);
598 
599  //----------------------------------------
600  // Create XLogicalBase
601  //----------------------------------------
602  XLogicalAtomicLatticeDiamond *diamond_lattice =
604  G4Element* element = G4NistManager::
606  XLogicalBase *base = new XLogicalBase(element,diamond_lattice);
607 
608  //----------------------------------------
609  // Create XUnitCell
610  //----------------------------------------
611  XUnitCell* myCell = new XUnitCell();
612  myCell->SetSize(fXtalCellSize);
613  myCell->AddBase(base);
614 
615  //----------------------------------------
616  // Create XPhysicalLattice
617  //----------------------------------------
618  XPhysicalLattice* physicalLattice =
619  new XPhysicalLattice(fXtalPhysical, logicalLattice);
620  physicalLattice->SetUnitCell(myCell);
621  physicalLattice->SetMillerOrientation(G4int(fXtalMiller.x()),
622  G4int(fXtalMiller.y()),
623  G4int(fXtalMiller.z()));
624  physicalLattice->SetLatticeOrientation(fXtalAngle.x(),
625  fXtalAngle.y(),
626  fXtalAngle.z());
627  physicalLattice->SetThermalVibrationAmplitude(fXtalTVA);
628  physicalLattice->SetCurvatureRadius(fXtalCurvatureRadius);
629 
630  //----------------------------------------
631  // Register XPhysicalLattice
632  //----------------------------------------
633  if(XLatticeManager3::
634  GetXLatticeManager()->GetXPhysicalLattice(fXtalPhysical)
635  != physicalLattice){
637  GetXLatticeManager()->RegisterLattice(physicalLattice);
638  }
639 
640 }
641 
642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.
643 
645  G4Material* vMaterial = G4Material::GetMaterial(name, false);
646 
647  if(!vMaterial){
648  vMaterial = G4NistManager::Instance()->FindOrBuildMaterial(name);
649  }
650 
651  if (vMaterial && vMaterial != fXtalMaterial) {
652  G4cout << "DetectorConstructor::SetXtalMaterial() - New Xtal Material: "
653  << vMaterial->GetName() << G4endl;
654  fXtalMaterial = vMaterial;
655  if(fXtalLogic){
656  fXtalLogic->SetMaterial(vMaterial);
658  }
659  }
660 }
661 
662 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
663 
665  if(fXtalMaterial) {
666  return fXtalMaterial->GetName();
667  }
668  return "";
669 }
670 
671 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
672 
674  if(fXtalCurvatureRadius != cr) {
677  }
678 }
679 
680 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
681 
683  if(fXtalSize != size) {
685  fXtalSize = size;
686  }
687 }
688 
689 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
690 
692  if(fXtalAngle != angle) {
694  fXtalAngle = angle;
695  }
696 }
697 
698 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
699 
701  if(fXtalCellSize != cellsize) {
703  fXtalCellSize = cellsize;
704  }
705 }
706 
707 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
708 
710  if(fXtalMiller != miller) {
712  fXtalMiller = miller;
713  }
714 }
715 
716 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
717 
719  G4ThreeVector cellangle) {
720  if(fXtalCellAngle != cellangle) {
722  fXtalCellAngle = cellangle;
723  }
724 }
725 
726 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
727 
729  G4double thermvibr) {
730  if(fXtalTVA != thermvibr) {
732  fXtalTVA = thermvibr;
733  }
734 }
735 
736 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..
void GeometryHasBeenModified(G4bool prop=true)
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
void SetThermalVibrationAmplitude(G4double)
static XLatticeManager3 * GetXLatticeManager()
G4double GetZ() const
Definition: G4Material.cc:625
G4LogicalVolume * ConstructSiSD(G4int)
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
void SetSize(G4ThreeVector)
Definition: XUnitCell.cc:73
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
Definition: G4Material.cc:604
G4double z
Definition: TRTMaterials.hh:39
Definition: G4Box.hh:64
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetName() const
Definition: G4Material.hh:178
Definition: G4Tubs.hh:85
G4Element * elC
Definition: TRTMaterials.hh:48
static G4double angle[DIM]
void SetScatteringConstant(G4double)
G4double a
Definition: TRTMaterials.hh:39
void SetForceSolid(G4bool)
G4LogicalVolume * ConstructBeamPipe(G4double)
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
void SetUnitCell(XUnitCell *)
G4double density
Definition: TRTMaterials.hh:39
G4GLOB_DLL std::ostream G4cout
static const double meter
Definition: G4SIunits.hh:81
void PhysicsHasBeenModified()
static const double deg
Definition: G4SIunits.hh:151
G4Material * Si
Definition: TRTMaterials.hh:78
static const double cm3
Definition: G4SIunits.hh:120
static const double second
Definition: G4SIunits.hh:156
void AddBase(XLogicalBase *)
Definition: XUnitCell.cc:97
static const double bar
Definition: G4SIunits.hh:233
static const double kelvin
Definition: G4SIunits.hh:278
void AddNewDetector(G4VSensitiveDetector *aSD)
Definition: G4SDManager.cc:67
bool RegisterLattice(XPhysicalLattice *)
static const double centimeter
Definition: G4SIunits.hh:89
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
static const double micrometer
Definition: G4SIunits.hh:99
void SetMillerOrientation(int, int, int)
static const double pi
Definition: G4SIunits.hh:74
void SetCurvatureRadius(G4ThreeVector)
void SetLatticeOrientation(G4double, G4double)
ExExChDetectorConstructionMessenger * fMessenger
static const double g
Definition: G4SIunits.hh:180
static G4SDManager * GetSDMpointer()
Definition: G4SDManager.cc:40
void SetXtalMaterial(const G4String &name)
static const double mole
Definition: G4SIunits.hh:283
static const double millimeter
Definition: G4SIunits.hh:85
#define G4endl
Definition: G4ios.hh:61
void AddElement(G4Element *element, G4int nAtoms)
Definition: G4Material.cc:364
double G4double
Definition: G4Types.hh:76
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
void SetMaterial(G4Material *pMaterial)
void SetVisAttributes(const G4VisAttributes *pVA)
void SetSensitiveDetector(G4VSensitiveDetector *pSDetector)
G4Material * Al
Definition: TRTMaterials.hh:74
static const double angstrom
Definition: G4SIunits.hh:101