FairRoot/PandaRoot
PndGeoHypGeCrystal.cxx
Go to the documentation of this file.
1 // ******** Implementation of class to build HypGe encapsulated HPGe Crystal needed to build cluster detectors *************
2 // by steinen@kph.uni-mainz.de
3 
4 #include "PndGeoHypGeCrystal.h"
5 
6 
7 
8 
11 // ----- Default constructor -------------------------------------------
13 
14 
15 // ---- constructor to use ----------------------------------
16 PndGeoHypGeCrystal::PndGeoHypGeCrystal(TGeoMedium *ExtGe, TGeoMedium *ExtAl,Int_t ExtCrystalNumber)
17 {
18  Ge = ExtGe;
19  Al = ExtAl;
20  CrystalNumber = ExtCrystalNumber;
21 
22 
23 //building a capsule
24  OuterPgonInnerRadius = 3.0571;
25  CapsuleThickness = 0.08;
27  CapsuleLength = 10;
28 
29  // building parts of capsule shape
30  CapsuleOuterTube = new TGeoTube("CapsuleOuterTube",0.,3.75,CapsuleLength/2);
31  CapsuleOuterPgon = new TGeoPgon("CapsuleOuterPgon",0.,360.,6,2);;
32  CapsuleOuterPgon->DefineSection(0,-CapsuleLength/2,OuterPgonInnerRadius,3.8);
33  CapsuleOuterPgon->DefineSection(1,4.9094,3.75,3.8);
34  CapsuleInnerTube = new TGeoTube("CapsuleInnerTube",0,3.75*InnerScale,5);;
35  CapsuleInnerPgon = new TGeoPgon("CapsuleInnerPgon",0.,360.,6,2);
37  CapsuleInnerPgon->DefineSection(1,4.9094,3.75-CapsuleThickness,3.8);
38  CapsuleTopCover = new TGeoTube("CapsuleTopCover",0,3.75,CapsuleThickness/2);
39  CapsuleTopZTranslation = new TGeoTranslation("CapsuleTopZTranslation",0,0,5-CapsuleThickness/2);
40  CapsuleTopZTranslation->RegisterYourself();
41 
42  //combining simple shapes
43  CapsuleOuterShape = new TGeoCompositeShape("CapsuleOuterShape","(CapsuleOuterTube-CapsuleOuterPgon)");
44  CapsuleInnerShape = new TGeoCompositeShape("CapsuleInnerShape","(CapsuleInnerTube-CapsuleInnerPgon)");
45  CapsuleInnerZTranslation = new TGeoTranslation("CapsuleInnerZTranslation",0,0,CapsuleThickness);
46  CapsuleInnerZTranslation->RegisterYourself();
47  CapsuleCompleteShape = new TGeoCompositeShape("CapsuleCompleteShape", "CapsuleOuterShape-CapsuleInnerShape:CapsuleInnerZTranslation+CapsuleTopCover:CapsuleTopZTranslation");
48 
49  //building capsule volume
50  CapsuleName= new char[11];
51  sprintf(CapsuleName,"Capsule",(int)CrystalNumber);
52  Capsule = new TGeoVolume(CapsuleName,CapsuleCompleteShape,Al);
53  Capsule->SetTransparency(50);
54  Capsule->SetLineColor(19);
55 
56 
57 //building a crystal
58 
59  CapsuleThickness = 0.08;
60  VacuumThickness = 0.08;
61  CrystalLength = 7.85;
63 
64  //building the main shape of the crystal
65  CrystalTube = new TGeoTube("CrystalTube",0,3.5,CrystalLength/2);
66  CrystalPgon = new TGeoPgon("CrystalPgon",0.,360.,6,2);
67  CrystalPgon->DefineSection(0,-CrystalLength/2,CrystalFrontPgonInnerRadius,3.8);
68  CrystalPgon->DefineSection(1,8-CrystalLength/2,CrystalFrontPgonInnerRadius+8*TMath::Tan(Pi/180*4.12),3.8);
69 
70  //building the inner hole of the crystal
71  CrystalInnerTube = new TGeoTube("CrystalInnerTube",0,0.6,3.05);
72  CrystalInnerTubeZTranslation = new TGeoTranslation("CrystalInnerTubeZTranslation",0,0,CrystalLength/2-3.05);
73  CrystalInnerTubeZTranslation->RegisterYourself();
74  CrystalInnerTubeTorus = new TGeoTorus("CrystalInnerTubeTorus",0.2,0,0.4,0,360);
75  CrystalInnerTubeTorusZTranslation = new TGeoTranslation("CrystalInnerTubeTorusZTranslation",0,0,CrystalLength/2-3.05*2);
76  CrystalInnerTubeTorusZTranslation->RegisterYourself();
77  CrystalInnerTubeMiniExtraTube = new TGeoTube("CrystalInnerTubeMiniExtraTube",0,0.2,0.2);
78  CrystalInnerTubeMiniExtraTubeZTranslation = new TGeoTranslation("CrystalInnerTubeMiniExtraTubeZTranslation",0,0,CrystalLength/2-3.05*2-0.2);
79  CrystalInnerTubeMiniExtraTubeZTranslation ->RegisterYourself();
80 
81  //building the top rounding of the crystal
82  CrystalTopRoundingTube = new TGeoTube("CrystalTopRoundingTube",2.9,3.5,0.3);
83  CrystalTopRoundingTubeZTranslation = new TGeoTranslation("CrystalTopRoundingTubeZTranslation",0,0,0.3);
84  CrystalTopRoundingTubeZTranslation->RegisterYourself();
85  CrystalTopRoundingTorus = new TGeoTorus("CrystalTopRoundingTorus",2.9,0,0.6,0,360);
86  CrystalTopRoundingTooling = new TGeoCompositeShape ("CrystalTopRoundingTooling" ,"CrystalTopRoundingTube:CrystalTopRoundingTubeZTranslation-CrystalTopRoundingTorus");
87  CrystalTopRoundingToolingZTranslation = new TGeoTranslation("CrystalTopRoundingToolingZTranslation",0,0,CrystalLength/2-0.6);
88  CrystalTopRoundingToolingZTranslation->RegisterYourself();
89 
90  //building the guard ring of the crystal
91  CrystalGuardRingTube = new TGeoTube("CrystalGuardRingTube",0.9,1.4,0.15);
92  CrystalGuardRingTubeZTranslation = new TGeoTranslation("CrystalGuardRingTubeZTranslation",0,0,CrystalLength/2-0.15);
93  CrystalGuardRingTubeZTranslation->RegisterYourself();
94  CrystalGuardRingTorus = new TGeoTorus("CrystalGuardRingTorus",1.2,0,0.2,0,360);
95  CrystalGuardRingTorusInner = new TGeoTorus("CrystalGuardRingTorusInner",1.1,0,0.2,0,360);
96  CrystalGuardRingTorusZTranslation = new TGeoTranslation("CrystalGuardRingTorusZTranslation",0,0,CrystalLength/2-0.15*2);
97  CrystalGuardRingTorusZTranslation->RegisterYourself();
98  CrystalGuardRingMiniExtraTube = new TGeoTube("CrystalGuardRingMiniExtraTube",1.1,1.2,0.2);
99  CrystalGuardRingMiniExtraTubeZTranslation = new TGeoTranslation("CrystalGuardRingMiniExtraTubeZTranslation",0,0,CrystalLength/2-0.15*2);
100  CrystalGuardRingMiniExtraTubeZTranslation ->RegisterYourself();
101 
102  //combining the final shape of the crystal
103  CrystalShape= new TGeoCompositeShape("CrystalShape","(CrystalTube-CrystalPgon)-CrystalTopRoundingTooling:CrystalTopRoundingToolingZTranslation-(CrystalInnerTube:CrystalInnerTubeZTranslation+CrystalInnerTubeTorus:CrystalInnerTubeTorusZTranslation+CrystalInnerTubeMiniExtraTube:CrystalInnerTubeMiniExtraTubeZTranslation)-(CrystalGuardRingTube:CrystalGuardRingTubeZTranslation+CrystalGuardRingTorus:CrystalGuardRingTorusZTranslation+CrystalGuardRingTorusInner:CrystalGuardRingTorusZTranslation+CrystalGuardRingMiniExtraTube:CrystalGuardRingMiniExtraTubeZTranslation)"); // (main shape) - (inner tube) - (top rounding) - (guard ring)
104 
105  CrystalName= new char[11];
106  sprintf(CrystalName,"Crystal",CrystalNumber);
107  Crystal = new TGeoVolume(CrystalName,CrystalShape,Ge);
108  Crystal->SetLineColor(kBlue);
109  Crystal->SetFillColor(kBlue);
110 
111 
112 //combining capsule and crystal
113 
114  CrystalPlusCapsule = new TGeoVolumeAssembly("CrystalPlusCapsule");
115  CapsuleCombiTrans = new TGeoCombiTrans(0,0,-CapsuleLength/2, new TGeoRotation("CapsuleRotation",0,180,0));
116  CapsuleCombiTrans->RegisterYourself();
117  CrystalInsideCapsuleCombiTrans = new TGeoCombiTrans(0,0,-(CrystalLength/2+CapsuleThickness+VacuumThickness), new TGeoRotation("CrystalRotation",0,180,0));
118  CrystalInsideCapsuleCombiTrans->RegisterYourself();
119 
120  CrystalPlusCapsule->AddNode(Capsule, CrystalNumber, CapsuleCombiTrans);
122 
123 
124 };
125 
127 {
128  return CrystalNumber;
129 }
131 {
132  CrystalPlusCapsule->GetNdaughters();
133 };
134 
135 
137 {
138  CrystalPlusCapsule->PrintNodes();
139 }
140 
141 void PndGeoHypGeCrystal::PlaceCrystal(TGeoVolume *top, TGeoMatrix* CrystalPlaceAndDirectionTranslation)
142 {
143  top->AddNode(CrystalPlusCapsule,CrystalNumber,CrystalPlaceAndDirectionTranslation);
144 };
TGeoCombiTrans * CapsuleCombiTrans
TGeoCompositeShape * CrystalShape
TGeoTranslation * CrystalTopRoundingTubeZTranslation
TGeoTranslation * CrystalTopRoundingToolingZTranslation
TGeoVolumeAssembly * CrystalPlusCapsule
TGeoTorus * CrystalTopRoundingTorus
Double_t CrystalFrontPgonInnerRadius
TGeoTranslation * CrystalGuardRingTorusZTranslation
TGeoCompositeShape * CrystalTopRoundingTooling
float Tan(float x)
Definition: PndCAMath.h:165
TGeoVolume * top
void PlaceCrystal(TGeoVolume *top, TGeoMatrix *CrystalPlaceAndDirectionTranslation)
TGeoCompositeShape * CapsuleCompleteShape
TGeoTranslation * CrystalGuardRingMiniExtraTubeZTranslation
TGeoTranslation * CrystalInnerTubeTorusZTranslation
TGeoTranslation * CrystalInnerTubeZTranslation
TGeoTube * CrystalGuardRingTube
Double_t
TGeoTorus * CrystalInnerTubeTorus
TGeoTranslation * CrystalGuardRingTubeZTranslation
TGeoCompositeShape * CapsuleOuterShape
TGeoTube * CrystalInnerTubeMiniExtraTube
ClassImp(PndGeoHypGeCrystal)
TGeoCompositeShape * CapsuleInnerShape
TGeoTube * CrystalGuardRingMiniExtraTube
TGeoTranslation * CrystalInnerTubeMiniExtraTubeZTranslation
TGeoTranslation * CapsuleTopZTranslation
TGeoTranslation * CapsuleInnerZTranslation
TGeoCombiTrans * CrystalInsideCapsuleCombiTrans
Double_t Pi
TGeoTorus * CrystalGuardRingTorusInner
TGeoTorus * CrystalGuardRingTorus
TGeoTube * CrystalTopRoundingTube