]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSv11GeometrySDD.cxx
set reco param on an event by event basis
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySDD.cxx
index 6c4716862aabed6b063237b0f163f0ed2c1cf046..162e4b500bdb34d14ef5a1f26c04cdde505dc37d 100755 (executable)
@@ -30,6 +30,7 @@
 
 
 // General Root includes
+#include <Riostream.h>
 #include <TMath.h>
 
 // Root Geometry includes
@@ -46,8 +47,6 @@
 #include <TGeoPcon.h>
 #include <TGeoTorus.h>
 
-#include "AliITSgeom.h"
-#include "AliITSgeomSDD.h"
 #include "AliITSv11GeometrySDD.h"
 #include "AliITSv11GeomCableFlat.h"
 #include "AliITSv11GeomCableRound.h"
@@ -59,7 +58,6 @@ const Double_t AliITSv11GeometrySDD::fgkLadderWidth       = 50.0*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkLadderHeight      = 30.0*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDW    =  7.5*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDH    =  7.1*fgkmm;
-const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDHCorr=  2.1*fgkmm;
 
 const Double_t AliITSv11GeometrySDD::fgkLadderBeamRadius  =  0.6*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkLadderLa          =  3.*fgkmm;
@@ -162,9 +160,9 @@ const Double_t AliITSv11GeometrySDD::fgkHybFLUpperLength  = 59.878*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAlDZ    = 11.183*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAldx    =  2.307*fgkmm;
 
-const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorLen   = 12.000*fgkmm;
+const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorLen   = 10.000*fgkmm;
 const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorWid   =  1.490*fgkcm; //???
-const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorAng   = 40.0;
+const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorAng   = 30.0;
 
 const Double_t AliITSv11GeometrySDD::fgkmu = 1*fgkmicron; // 1*fgkmicron; // can be increase for checking thin objects
 const Double_t AliITSv11GeometrySDD::fgkHybridThBridgeThick =  0.25*fgkmm;               // ???
@@ -728,7 +726,7 @@ void AliITSv11GeometrySDD::SetParameters() {
   // Define display colors and the non constant geometry parameters
   //
 
-  Double_t detLadderDist = 8*fgkmm; 
+  Double_t detLadderDist = 8.4*fgkmm; 
 
   fLay3LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
   fLay4LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
@@ -2356,22 +2354,26 @@ TGeoVolume* AliITSv11GeometrySDD::CreateHybrid(Int_t iLRSide) {
 
   //**************************************************** CC to sensors:
   // (alas, we cannot use GeomCableFlat here because section is not constant)
-    Double_t xcc[6],ycc[6];
+    Double_t xcc[8],ycc[8];
     xcc[0] = -0.5*ccLayer1.GetWidth();
     ycc[0] =  0;
     xcc[1] =  0.5*ccLayer1.GetWidth();
     ycc[1] =  0;
     xcc[2] = xcc[1];
-    ycc[2] = -fgkHybCC2SensorLen;
-    xcc[3] = xcc[2] fgkHybCC2SensorWid;
+    ycc[2] = -fgkHybCC2SensorLen*0.8;
+    xcc[3] = xcc[2] + 0.1*fgkHybCC2SensorWid;
     ycc[3] = ycc[2];
     xcc[4] = xcc[3];
-    ycc[4] = 0.8*ycc[3];
-    xcc[5] = xcc[0];
-    ycc[5] = 0.2*ycc[3];
+    ycc[4] = -fgkHybCC2SensorLen;
+    xcc[5] = xcc[4] - fgkHybCC2SensorWid;
+    ycc[5] = ycc[4];
+    xcc[6] = xcc[5];
+    ycc[6] = 0.8*ycc[5];
+    xcc[7] = xcc[0];
+    ycc[7] = 0.2*ycc[5];
 
     TGeoXtru* ccToSensPoliSh = new TGeoXtru(2);
-    ccToSensPoliSh->DefinePolygon(6, xcc, ycc);
+    ccToSensPoliSh->DefinePolygon(8, xcc, ycc);
     ccToSensPoliSh->DefineSection(0, 0.);
     ccToSensPoliSh->DefineSection(1, ccLayer1.GetThickness());
 
@@ -2380,7 +2382,7 @@ TGeoVolume* AliITSv11GeometrySDD::CreateHybrid(Int_t iLRSide) {
     ccToSensPoliVol->SetLineColor(fColorPolyhamide);
 
     TGeoXtru* ccToSensAlSh = new TGeoXtru(2);
-    ccToSensAlSh->DefinePolygon(6, xcc, ycc);
+    ccToSensAlSh->DefinePolygon(8, xcc, ycc);
     ccToSensAlSh->DefineSection(0, 0.);
     ccToSensAlSh->DefineSection(1, fgkHybAlCCThick);
 
@@ -2567,25 +2569,26 @@ TGeoVolume* AliITSv11GeometrySDD::CreateLadderSegment(Int_t iLay, Int_t iSeg) {
   TGeoXtru *segBox = new TGeoXtru(2);
   segBox->SetName("ITSsddSegBox");
 
-  Double_t xseg[8],yseg[8];
-  xseg[0] = -(fgkLadderWidth/2+fgkPinSuppWidth+fgkLadderSegBoxDW);
-  yseg[0] =  fgkLadderHeight/2+fgkLadderSegBoxDH/2;
-  xseg[1] =  xseg[0];
-  yseg[1] = -yseg[0];
-  xseg[2] = -xseg[1];
-  yseg[2] =  yseg[1];
-  xseg[3] =  xseg[2];
-  yseg[3] =  yseg[0];
-  xseg[4] =  0.35*xseg[3];
-  yseg[4] =  yseg[3];
-  xseg[5] =  xseg[4];
-  yseg[5] =  yseg[4] + fgkLadderSegBoxDHCorr;
-  xseg[6] = -xseg[4];
-  yseg[6] =  yseg[5];
-  xseg[7] =  xseg[6];
-  yseg[7] =  yseg[0];
-
-  segBox->DefinePolygon(8, xseg, yseg);
+  Double_t xseg[12],yseg[12];
+  xseg[ 0] = -(fgkLadderWidth/2+fgkPinSuppWidth+fgkLadderSegBoxDW);
+  yseg[ 0] =  fgkLadderHeight/2+fgkLadderSegBoxDH/2;
+  xseg[ 1] =  xseg[0];
+  yseg[ 1] = -yseg[0];
+  xseg[ 2] =  0.87*xseg[1];
+  yseg[ 2] =  yseg[1];
+  xseg[ 3] =  0.82*xseg[1];
+  yseg[ 3] = -yseg[0] - 0.82*fgkHybCC2SensorLen;
+  xseg[ 4] =  0.78*xseg[1];
+  yseg[ 4] =  yseg[3];
+  xseg[ 5] =  0.83*xseg[1];
+  yseg[ 5] =  yseg[1];
+
+  for (Int_t j=0; j<6; j++) {
+    xseg[6+j] = -xseg[5-j];
+    yseg[6+j] =  yseg[5-j];
+  }
+
+  segBox->DefinePolygon(12, xseg, yseg);
   segBox->DefineSection(0,-segmentLength/2);
   segBox->DefineSection(1, segmentLength/2);
 
@@ -2799,7 +2802,7 @@ TGeoVolume* AliITSv11GeometrySDD::CreateLadderSegment(Int_t iLay, Int_t iSeg) {
   //*************************
   // the 2 hybrids :
   //*************************
-  Double_t hybDy = ((TGeoBBox*)fHybrid->GetShape())->GetDY();
+  Double_t hybDy = ((TGeoXtru*)fHybrid->GetShape())->GetY(2);
   Double_t distAxeToHybridCenter = fgkBTBaxisAtoBase+hybDy;
   
   Double_t hybrVolX = ( distAxeToHybridCenter*CosD(fgkHybridAngle) 
@@ -5520,125 +5523,6 @@ TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateDetectorsAssemblyLadd2() {
 }
 
 
-//________________________________________________________________________
-Int_t AliITSv11GeometrySDD::ExportSensorGeometry(AliITSgeom *geom, Int_t iLaySDD,
-                                                Int_t startMod) {
-//
-// export the geometry in a AliITSgeom object
-// Obsolete
-//
-
-  if (! geom) {
-    printf("error:Try to fill null (AliITSgeom *) object");
-    return kFALSE;
-  };
-  if (! fMotherVol) {
-    printf("error:Try to set sensor geometry while geometry is not defined\n");
-    return kFALSE;
-  };
-
-  const Float_t kDxyz[3] = {fgkWaferWidthSens/2., fgkWaferThickSens/2.,
-                           fgkWaferLengthSens/2.};
-  if(!(geom->IsShapeDefined(kSDD)))
-    geom->ReSetShape(kSDD, new AliITSgeomSDD256(3, kDxyz));
-
-  char layerName[30];
-  char ladderName[30];
-  char sensorName[30];
-  char senstivName[30];
-  const Int_t kNLay = 2;
-  const Int_t kNLadd[kNLay] = {fgkLay3Nladd, fgkLay4Nladd};
-  const Int_t kNDet[kNLay]  = {fgkLay3Ndet,  fgkLay4Ndet};
-
-  if (GetDebug(1))
-    printf("AliITSv11GeometrySDD::SetSensorGeometry(), nodes found :\n");
-
-  Int_t firstSDDmod = startMod;
-  for (Int_t iLay=0; iLay<kNLay; iLay++) {
-    /////////////////////////////////////////
-    snprintf(layerName, 30, "ITSsddLayer%i_1",iLay+3);
-    TGeoNode *layNode = fMotherVol->GetNode(layerName);
-    if (layNode) {
-      if (GetDebug(1)) printf("%s\n",layNode->GetName());
-      TGeoVolume *layVolume = layNode->GetVolume();
-      TGeoHMatrix layMatrix(*layNode->GetMatrix());
-
-      for (Int_t iLadd=0; iLadd<kNLadd[iLay]; iLadd++) {
-       /////////////////////////////////////////
-       snprintf(ladderName, 30, "ITSsddLadd_%i", iLadd);
-       TGeoNode *laddNode = layVolume->GetNode(ladderName);
-       if (laddNode) {
-         if (GetDebug(1)) printf("|   %s\n",laddNode->GetName());
-         TGeoVolume *laddVolume = laddNode->GetVolume();
-         TGeoHMatrix laddMatrix(layMatrix);
-         laddMatrix.Multiply(laddNode->GetMatrix());
-
-         for (Int_t iDet=0; iDet<kNDet[iLay]; iDet++) {
-           /////////////////////////////////////////
-           snprintf(sensorName, 30, "ITSsddSensor_%i",iDet);
-           TGeoNode *detNode = laddVolume->GetNode(sensorName);
-           if (detNode) {
-             if (GetDebug(1)) printf("|   |   %s\n",detNode->GetName());
-             TGeoVolume *detVolume = detNode->GetVolume();
-             TGeoHMatrix detMatrix(laddMatrix);
-             detMatrix.Multiply(detNode->GetMatrix());
-
-             TGeoNode *wafNode = detVolume->GetNode("ITSsddWafer_1");
-             if (wafNode) {
-               TGeoVolume *wafVolume = wafNode->GetVolume();
-               TGeoHMatrix wafMatrix(detMatrix);
-               detMatrix.Multiply(wafNode->GetMatrix());
-               //--------------------------------------------------------
-               snprintf(senstivName, 30, "%s%s", fgSDDsensitiveVolName3,"_1");
-               TGeoNode *sensitivNode = wafVolume->GetNode(senstivName);
-             if (sensitivNode) {
-               TGeoHMatrix sensMatrix(wafMatrix);
-               sensMatrix.Multiply(sensitivNode->GetMatrix());
-
-               // Sticking to the convention for local wafer coordinate
-               // in AliITSgeom :
-               if (iDet >= kNDet[iLay]/2) {
-                 //              TGeoRotation rotY("",0,180,0);
-                 TGeoRotation rotY("",-180,-180,0);
-                 sensMatrix.Multiply(&rotY);
-               };
-               // Creating the matrix in AliITSgeom for
-               // this sensitive volume :
-               Double_t *trans = sensMatrix.GetTranslation();
-               Double_t *r     = sensMatrix.GetRotationMatrix();
-               Double_t rot[10] = {r[0],r[1],r[2],
-                                   r[3],r[4],r[5],
-                                   r[6],r[7],r[8], 1.0};
-               //rot[9]!=0.0 => not a unity matrix
-               geom->CreateMatrix(startMod,iLay+iLaySDD,iLadd+1,iDet+1,
-                                 kSDD,trans,rot);
-               // iLadd+1, iDet+1 because ladd. and det. start at +1
-               // elsewhere
-               startMod++;
-
-             } else
-               printf("Error (ExportSensorGeometry) %s not found !\n",
-                      senstivName);
-             } else
-               printf("Error (ExportSensorGeometry) %s not found !\n",
-                      "ITSsddWafer_1");
-           } else
-             printf("Error (ExportSensorGeometry) %s not found !\n",
-                    sensorName);
-         };
-       } else 
-         printf("Error (ExportSensorGeometry) %s not found !\n",
-                ladderName);
-      };  
-    } else
-      printf("Error (ExportSensorGeometry) %s not found !\n",
-            layerName);
-  };
-
-  return (startMod-firstSDDmod);
-}
-
-
 //________________________________________________________________________
 Int_t AliITSv11GeometrySDD::
 GetCurrentLayLaddDet(Int_t &lay, Int_t &ladd, Int_t&det) const {
@@ -5661,7 +5545,7 @@ GetCurrentLayLaddDet(Int_t &lay, Int_t &ladd, Int_t&det) const {
 
  // Get the layer index :
   if (node->GetNdaughters()==fgkLay3Ndet)
-    lay = 3;            // this has to be equal to the iLaySDD argument given to ExportSensorGeometry() !!!
+    lay = 3;
   else lay = 4;
 
   return kTRUE;