]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDGeometryBuilder.cxx
Fixes for reading zero-suppressed data. These should be propagated to
[u/mrichter/AliRoot.git] / FMD / AliFMDGeometryBuilder.cxx
index c5c32a41494d42989b581f5e746d9eb641174255..6423586c9bc1724e8794f3ea190370995c80b63c 100644 (file)
@@ -354,43 +354,51 @@ AliFMDGeometryBuilder::RingGeometry(AliFMDRing* r)
   Double_t ddit = r->GetFMDDChipThickness();
   Double_t ddt  = ddpt + ddct + ddit;
   
-  TGeoShape* fmddPcbShape  = new TGeoTubeSeg(ddlr, ddhr, ddpt/2,0,180);
-  TGeoShape* fmddCuShape   = new TGeoTubeSeg(ddlr, ddhr, ddct/2,0,180);
-  TGeoShape* fmddChipShape = new TGeoTubeSeg(ddlr, ddhr, ddit/2,0,180);
-  fmddPcbShape->SetName(Form(fgkFMDDPCBName, id));
-  fmddCuShape->SetName(Form(fgkFMDDCuName, id));
-  fmddChipShape->SetName(Form(fgkFMDDChipName, id));
-  if (id == 'O' || id == 'o') { 
-    TString pcbName(fmddPcbShape->GetName());
-    TString cuName(fmddCuShape->GetName());
-    TString chipName(fmddChipShape->GetName());
-    
-    fmddPcbShape->SetName(Form("%s_inner",  pcbName.Data()));
-    fmddCuShape->SetName(Form("%s_inner",   cuName.Data()));
-    fmddChipShape->SetName(Form("%s_inner", chipName.Data()));
-    new TGeoBBox(Form("%s_clip",  pcbName.Data()), ddlr+3, ddhr/2, ddpt);
-    new TGeoBBox(Form("%s_clip",  cuName.Data()),  ddlr+3, ddhr/2, ddpt);
-    new TGeoBBox(Form("%s_clip",  chipName.Data()),ddlr+3, ddhr/2, ddpt);
-    TGeoTranslation* trans = new TGeoTranslation(Form("%s_trans",
-                                                     pcbName.Data()), 
-                                                0, ddhr/2, 0);
-    trans->RegisterYourself();
-    fmddPcbShape = new TGeoCompositeShape(pcbName.Data(), 
-                                         Form("%s_inner*%s_clip:%s_trans",
-                                              pcbName.Data(), 
-                                              pcbName.Data(), 
-                                              pcbName.Data())); 
-    fmddCuShape = new TGeoCompositeShape(cuName.Data(), 
-                                        Form("%s_inner*%s_clip:%s_trans",
-                                             cuName.Data(), 
-                                             cuName.Data(), 
-                                             pcbName.Data()));
-    fmddChipShape = new TGeoCompositeShape(chipName.Data(), 
-                                          Form("%s_inner*%s_clip:%s_trans",
-                                               chipName.Data(), 
-                                               chipName.Data(), 
-                                               pcbName.Data()));
+  TString    pcbName(Form(fgkFMDDPCBName, id));
+  TString    cuName(Form(fgkFMDDCuName, id));
+  TString    chipName(Form(fgkFMDDChipName, id));
+  new TGeoTubeSeg(Form("%s_inner", pcbName.Data()),  ddlr, ddhr, ddpt/2,0,180);
+  new TGeoTubeSeg(Form("%s_inner", cuName.Data()),   ddlr, ddhr, ddct/2,0,180);
+  new TGeoTubeSeg(Form("%s_inner", chipName.Data()), ddlr, ddhr, ddit/2,0,180);
+  
+  Double_t clipWX = 0;
+  Double_t clipWY = 0;
+  Double_t clipY  = 1;
+  
+  if (id == 'I' || id == 'i') { 
+    clipWX = ddhr;
+    clipWY = ddhr/2;
+  }
+  else { 
+    clipWX = ddlr+3;
+    clipWY = ddhr/2;
   }
+  
+  new TGeoBBox(Form("%s_clip",  pcbName.Data()), clipWX, clipWY, ddpt);
+  new TGeoBBox(Form("%s_clip",  cuName.Data()),  clipWX, clipWY, ddct);
+  new TGeoBBox(Form("%s_clip",  chipName.Data()),clipWX, clipWY, ddit);
+  TGeoTranslation* trans = new TGeoTranslation(Form("%s_trans",
+                                                   pcbName.Data()), 
+                                              0, clipWY+clipY, 0);
+  trans->RegisterYourself();
+  TGeoShape* fmddPcbShape = 
+    new TGeoCompositeShape(pcbName.Data(), 
+                          Form("%s_inner*%s_clip:%s_trans",
+                               pcbName.Data(), 
+                               pcbName.Data(), 
+                               pcbName.Data())); 
+  TGeoShape* fmddCuShape = 
+    new TGeoCompositeShape(cuName.Data(), 
+                          Form("%s_inner*%s_clip:%s_trans",
+                               cuName.Data(), 
+                               cuName.Data(), 
+                               pcbName.Data()));
+  TGeoShape* fmddChipShape = 
+    new TGeoCompositeShape(chipName.Data(), 
+                          Form("%s_inner*%s_clip:%s_trans",
+                               chipName.Data(), 
+                               chipName.Data(), 
+                               pcbName.Data()));
   fmddPcbShape->SetTitle(Form("FMD %s digitiser PCB", lName));
   fmddCuShape->SetTitle(Form("FMD %s digitiser copper", lName));
   fmddChipShape->SetTitle(Form("FMD %s digitiser chip", lName));
@@ -747,7 +755,7 @@ AliFMDGeometryBuilder::FMD1Geometry(AliFMD1* fmd1,
   TGeoVolume* top    = gGeoManager->GetVolume("ALIC");
   // TGeoMatrix* matrix = new TGeoTranslation("FMD1 trans", 0, 0, z);
   TGeoRotation* rot = new TGeoRotation("FMD1 rotatation");
-  rot->RotateZ(-90);
+  rot->RotateZ(90);
   TGeoMatrix* matrix = new TGeoCombiTrans("FMD1 trans", 0, 0, z, rot);
   AliFMDDebug(5, ("Placing volumes %s and %s in ALIC at z=%f", 
                   fmd1TopVolume->GetName(), fmd1BotVolume->GetName(), z));
@@ -1012,6 +1020,7 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
                                     holeLW, holeHW, holeD, holeL);
   TGeoTrd1* plateShape = new TGeoTrd1("FMD3_cooling_plate", 
                                      holeLW, holeHW, .033, holeL);
+  (void*)holeShape;
   TGeoRotation* holeRot = new TGeoRotation();
   holeRot->SetName("FMD3_cone_hole_rotation");
   holeRot->RotateZ(90);
@@ -1019,8 +1028,8 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
   TGeoCombiTrans* holeBaseTrans = new TGeoCombiTrans(holeX, 0, holeZ, holeRot);
   holeBaseTrans->SetName("FMD3_cone_hole_base_matrix");
   TGeoCombiTrans* plateBaseTrans = new TGeoCombiTrans(plateX, 0,plateZ,holeRot);
-  (void*)holeShape;
-  TGeoVolume* plateVolume = new TGeoVolume("F3CO", plateShape, fAl);
+  TGeoVolume* plateVolume = new TGeoVolume("FMD3_cooling_plate", 
+                                          plateShape, fAl);
   plateShape->SetTitle("FMD3 cooling plate");
   plateVolume->SetTitle("FMD3 cooling plate");
   for (Int_t i = 0; i < 4; i++) { 
@@ -1068,7 +1077,7 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
                  "+FMD3_bolt_hole:FMD3_bolt_matrix2"
                  "+FMD3_bolt_hole:FMD3_bolt_matrix3"
                  "+FMD3_bolt_hole:FMD3_bolt_matrix4)");
-  TGeoVolume*     boltVolume = new TGeoVolume("F3SB", boltShape, fSteel);
+  TGeoVolume*     boltVolume = new TGeoVolume("FMD3_bolt", boltShape, fSteel);
   support->AddNode(boltVolume, 1, boltTrans1);
   support->AddNode(boltVolume, 2, boltTrans2);
   boltShape->SetTitle("FMD3 steering bolt");
@@ -1079,14 +1088,14 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
   TGeoCompositeShape* coneShape = new TGeoCompositeShape(coneComb.Data());
   coneShape->SetName("FMD3_cone");
   coneShape->SetTitle("FMD3 cone");
-  TGeoVolume*  coneVolume = new TGeoVolume("F3SC", coneShape, fC);
+  TGeoVolume*  coneVolume = new TGeoVolume("FMD3_Cone", coneShape, fC);
   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);
+  TGeoBBox* tensionOuter = new TGeoBBox("FMD3_tension_outer", .5, 3, 5);
+  new TGeoBBox("FMD3_tension_inner", .51, 2.5, 4.6);
   TString tensionExpr("FMD3_tension_outer-FMD3_tension_inner");
   TGeoCompositeShape* tensionShape = new TGeoCompositeShape(tensionExpr.Data());
   tensionShape->SetName("FMD3_tension_box");
@@ -1098,36 +1107,39 @@ AliFMDGeometryBuilder::FMD3Geometry(AliFMD3* fmd3,
   TGeoVolume*      springVolume = new TGeoVolume("FMD3_tension_spring", 
                                                 springShape, fSteel);
   TGeoVolume*      tensionBox   = new TGeoVolume("FMD3_tension_box", 
-                                                tensionShape, fAir);
+                                                tensionOuter, fAir);
   tensionBox->AddNode(tensionFrame, 0);
-  tensionBox->AddNode(springVolume, 0, new TGeoTranslation(0,0,4.3/2));
+  tensionBox->AddNode(springVolume, 0, new TGeoTranslation(0,0,4.2/2));
   
   Double_t         tensionD     = 5*TMath::Cos(fmd3->GetConeOuterAngle());
-  Double_t         tensionZ     = r4->Z()-2*tensionD;
+  Double_t         tensionZ     = (r4->Z() - 2 * tensionD - 5 -
+                                  2*.5*TMath::Cos(fmd3->GetConeOuterAngle()));
   Double_t         tensionX     = (fmd3->ConeR(fmd3->GetInnerZ()
                                               +fmd3->GetNoseZ() 
                                               -tensionZ) + 
-                                  .5 * TMath::Sin(fmd3->GetConeOuterAngle())); 
+                                  2*.5*TMath::Cos(fmd3->GetConeOuterAngle())); 
   TGeoRotation*    tensionRot   = new TGeoRotation();
   tensionRot->RotateY(180/TMath::Pi()*fmd3->GetConeOuterAngle());
   TGeoCombiTrans*  tensionBase  = new TGeoCombiTrans(tensionX, 0, tensionZ, 
                                                     tensionRot);
   
+  Double_t         wireT        = .1;
   Double_t         wireR1       = fmd3->ConeR(fmd3->GetInnerZ()
-                                             +fmd3->GetNoseZ());
+                                             +fmd3->GetNoseZ()) + wireT;
   Double_t         wireR2       = fmd3->ConeR(fmd3->GetInnerZ()
                                              +fmd3->GetNoseZ()-
-                                             tensionZ+tensionD);
+                                             tensionZ+tensionD) + wireT;
   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);
+  TGeoTube*        wireShape    = new TGeoTube("FMD3_wire", 0, wireT, 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,
+  TGeoCombiTrans*  wireBase     = new TGeoCombiTrans((wireR2-wireR1)/2+wireR1
+                                                    +.1*TMath::Cos(wireAngle),
+                                                    0,(tensionZ-tensionD)/2,
                                                     wireRot);
   for (Int_t i = 0; i < 2; i++) { 
     Double_t        thisAngle = (i+.5) * 90;