]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDGeometryBuilder.cxx
Added beam-tube tension boxes and wires.
[u/mrichter/AliRoot.git] / FMD / AliFMDGeometryBuilder.cxx
index d35a37e0e3d03a4edeeb8bc78b41130f4c79b9a4..c5c32a41494d42989b581f5e746d9eb641174255 100644 (file)
@@ -1075,6 +1075,7 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
   boltVolume->SetTitle("FMD3 steering bolt");
   
   //__________________________________________________________________
+  // Final cone
   TGeoCompositeShape* coneShape = new TGeoCompositeShape(coneComb.Data());
   coneShape->SetName("FMD3_cone");
   coneShape->SetTitle("FMD3 cone");
@@ -1082,6 +1083,62 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
   coneVolume->SetLineColor(kRed);
   support->AddNode(coneVolume, 0, new TGeoTranslation(0, 0, 0));
 
+  //__________________________________________________________________
+  // Tension boxes. 
+  new TGeoBBox("FMD3_tension_outer", .5, 3, 5);
+  new TGeoBBox("FMD3_tension_inner", .51, 2.7, 4.3);
+  TString tensionExpr("FMD3_tension_outer-FMD3_tension_inner");
+  TGeoCompositeShape* tensionShape = new TGeoCompositeShape(tensionExpr.Data());
+  tensionShape->SetName("FMD3_tension_box");
+  tensionShape->SetTitle("FMD3 tension box");
+  TGeoVolume*      tensionFrame = new TGeoVolume("FMD3_tension_frame",
+                                                 tensionShape, fAl);
+  TGeoTube*        springShape  = new TGeoTube("FMD3_tension_spring", 
+                                              0, .3, 4.3/2);
+  TGeoVolume*      springVolume = new TGeoVolume("FMD3_tension_spring", 
+                                                springShape, fSteel);
+  TGeoVolume*      tensionBox   = new TGeoVolume("FMD3_tension_box", 
+                                                tensionShape, fAir);
+  tensionBox->AddNode(tensionFrame, 0);
+  tensionBox->AddNode(springVolume, 0, new TGeoTranslation(0,0,4.3/2));
+  
+  Double_t         tensionD     = 5*TMath::Cos(fmd3->GetConeOuterAngle());
+  Double_t         tensionZ     = r4->Z()-2*tensionD;
+  Double_t         tensionX     = (fmd3->ConeR(fmd3->GetInnerZ()
+                                              +fmd3->GetNoseZ() 
+                                              -tensionZ) + 
+                                  .5 * TMath::Sin(fmd3->GetConeOuterAngle())); 
+  TGeoRotation*    tensionRot   = new TGeoRotation();
+  tensionRot->RotateY(180/TMath::Pi()*fmd3->GetConeOuterAngle());
+  TGeoCombiTrans*  tensionBase  = new TGeoCombiTrans(tensionX, 0, tensionZ, 
+                                                    tensionRot);
+  
+  Double_t         wireR1       = fmd3->ConeR(fmd3->GetInnerZ()
+                                             +fmd3->GetNoseZ());
+  Double_t         wireR2       = fmd3->ConeR(fmd3->GetInnerZ()
+                                             +fmd3->GetNoseZ()-
+                                             tensionZ+tensionD);
+  Double_t         wireL        = TMath::Sqrt(TMath::Power(wireR1-wireR2,2)+ 
+                                             TMath::Power(tensionZ-
+                                                          tensionD,2));
+  Double_t         wireAngle    = TMath::ATan2(wireR2-wireR1,tensionZ-tensionD);
+  TGeoTube*        wireShape    = new TGeoTube("FMD3_wire", 0, .1, wireL/2);
+  TGeoVolume*      wireVolume   = new TGeoVolume("FMD3_wire", wireShape,fSteel);
+  TGeoRotation*    wireRot      = new TGeoRotation();
+  wireRot->RotateY(180/TMath::Pi()*wireAngle);
+  TGeoCombiTrans*  wireBase     = new TGeoCombiTrans((wireR2-wireR1)/2+wireR1,
+                                                    0, (tensionZ-tensionD)/2,
+                                                    wireRot);
+  for (Int_t i = 0; i < 2; i++) { 
+    Double_t        thisAngle = (i+.5) * 90;
+    TGeoCombiTrans* thisTrans = new TGeoCombiTrans(*tensionBase);
+    thisTrans->RotateZ(thisAngle);
+    support->AddNode(tensionBox, i, thisTrans);
+    thisTrans = new TGeoCombiTrans(*wireBase);
+    thisTrans->RotateZ(thisAngle);
+    support->AddNode(wireVolume, i, thisTrans);
+  }
+
   //__________________________________________________________________
   // Place support volumes in half-detector volumes 
   Double_t         z  = fmd3->GetInnerZ();