]> jspc29.x-matter.uni-frankfurt.de Git - mvd_geometry.git/commitdiff
v0.9.9
authorPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Wed, 15 Apr 2020 12:23:00 +0000 (14:23 +0200)
committerPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Wed, 15 Apr 2020 12:23:00 +0000 (14:23 +0200)
mvd.C

diff --git a/mvd.C b/mvd.C
index aa567f53ce0804b396d87930f9983508b5234809..468eee4b0d1190c89ab0daa39d6fdf1ccd60aec3 100644 (file)
--- a/mvd.C
+++ b/mvd.C
@@ -1,33 +1,43 @@
 static const int numStations = 4;
 // all units are in cm
-Float_t quadrantBeamOffset[4] = {0.54, 0.54, 0.82, 1.04};
+//Float_t quadrantBeamOffset[4] = {0.54, 0.54, 0.82, 1.04};
 //Float_t stationPosition[4] = {8.0, 12.0, 16.0, 20.0};
 Float_t stationPosition[4] = {5.0, 10.0, 15.0, 20.0};
 Float_t carrierClampOverlap = 0.0;
-Float_t heatsinkWidth[4] = {23.1, 31.1, 34.34, 37.7};
+//Float_t heatsinkWidth[4] = {23.1, 31.1, 34.34, 37.7};
 Float_t heatsinkHeight = 37.7;
 Float_t heatsinkThickness = 1.;
 Float_t fpcWidth = 1.9;
 Float_t fpcThickness = 0.0009;
 Float_t glueThickness = 0.0008;
 /* 3xFSBB : 30 x 13 mm2 (of which the lower 3mm inactive) */
-///*
+/*
 int sensorRows[4] = {2, 5, 7, 10};
 int sensorCols[4] = {1, 2, 3,  4};
 Float_t sensorDimensionsActive[3]  = {3., 1.0, 0.005};
 Float_t sensorDimensionsPassive[3] = {3., 0.3, 0.005};
-Float_t carrierDimensions[4][3] = {{4.0, 4.15, 0.015}, {7.0, 7.0, 0.015}, {10.0, 8.9, 0.0300}, {13.0, 11.75, 0.0300}};
-//*/
+Float_t carrierDimensions[4][3] = {{4.0, 4.15, 0.015}, {7.0, 7.0, 0.015}, {10.0, 8.9, 0.030}, {13.0, 11.75, 0.030}};
+*/
 /* MISTRAL https://indico.gsi.de/contributionDisplay.py?contribId=8&sessionId=6&confId=4759
    30.97 x 16.55 mm2 (of which the lower 3mm inactive) */
-/*
-int sensorRows[4] = {2, 4, 5, 7};
-int sensorCols[4] = {1, 2, 3,  4};
+int sensorRows[4] = {2, 4, 7, 7};
+int sensorCols[4] = {1, 2, 4,  4};
 Float_t sensorDimensionsActive[3]  = {3.097, 1.355, 0.005};
 Float_t sensorDimensionsPassive[3] = {3.097, 0.300, 0.005};
-Float_t carrierDimensions[4][3] = {{4.10, 4.62, 0.015}, {7.19, 7.22, 0.015}, {10.29, 8.53, 0.0300}, {13.39, 11.14, 0.0300}};
-*/
-Float_t sensorPitch = sensorDimensionsActive[1] - 0.05;
+Float_t heatsinkWidth[4] = {23.1, 31.1, 37.7, 37.7};
+Float_t quadrantBeamOffset[4] = {0.54, 0.54, 1.04, 1.04};
+//Float_t carrierDimensions[4][3] = {{4.10, 4.62, 0.015}, {7.19, 7.22, 0.015}, {10.29, 8.53, 0.030}, {13.39, 11.14, 0.030}};
+Float_t carrierDimensions[4][3] = {{4.10, 4.62, 0.015}, {7.19, 7.22, 0.015}, {13.39, 11.14, 0.030}, {13.39, 11.14, 0.030}};
+/* MISTRAL tracking */
+//int sensorRows[4] = {4, 4, 7, 7};
+//int sensorCols[4] = {2, 2, 4,  4};
+//Float_t heatsinkWidth[4] = {31.1, 31.1, 37.7, 37.7};
+//Float_t quadrantBeamOffset[4] = {0.54, 0.54, 1.04, 1.04};
+//Float_t carrierDimensions[4][3] = {{7.19, 7.22, 0.015}, {7.19, 7.22, 0.015}, {13.39, 11.14, 0.030}, {13.39, 11.14, 0.030}};
+
+
+Float_t sensorActiveOverlap = 0.05;
+Float_t sensorPitch = sensorDimensionsActive[1] - sensorActiveOverlap;
 Float_t sensorSpacing = 0.0; // realistically: 0.01 (100um)
 Float_t fpcDimensions[3] = {-1, 1.0, 0.004};
 Float_t explosion = .0; // set to 0. for no explosion, and 5. for a heavy explosion
@@ -69,6 +79,11 @@ void mvd()
    sensorGlue->SetTransparency(0);
    sensorGlue->SetLineColor(kCyan-10);
 
+   Float_t fpcGlueDimensions[2] = {sensorDimensionsActive[0], sensorPitch - sensorActiveOverlap};
+   TGeoVolume *fpcGlue = manager->MakeBox("fpcGlue", glue, fpcGlueDimensions[0]/2, fpcGlueDimensions[1]/2, glueThickness/2);
+   fpcGlue->SetTransparency(0);
+   fpcGlue->SetLineColor(kCyan-10);
+
    TGeoTranslation T;
    TGeoRotation R;
    TGeoCombiTrans *M;
@@ -78,11 +93,11 @@ void mvd()
    // --- Sensor Assembly
    TGeoVolume *sensor = new TGeoVolumeAssembly("sensor");
    // Glue
-   R.SetAngles(0.,0.,0.);
    Float_t x_offset = -sensorDimensionsActive[0]/2;
    Float_t y_offset = -(sensorDimensionsActive[1]+sensorDimensionsPassive[1])/2;
    Float_t z_offset = glueThickness/2;
    T.SetTranslation(x_offset, y_offset, -z_offset);
+   R.SetAngles(0.,0.,0.);
    M = new TGeoCombiTrans(T,R);
    sensor->AddNode(sensorGlue, 1, M);
    // Active
@@ -166,12 +181,16 @@ void mvd()
       cout << "  # of sensors per quadrant: " << sensorCols[i]*sensorRows[i] << endl;
       R.SetAngles(0.,0.,0.);
       TGeoVolume *cable;
+      Float_t cableDimensions[2] = {0.0, 0.0};
       for (int k=0; k<sensorCols[i]; k++)
          {
          if (k%2 == 0)
             {
+               // Make new cable with correct dimensions
                sprintf(cable_name, "cable_%i", cablepartno++);
-               cable = manager->MakeBox(cable_name, FPC, (cd[0] - sensorDimensionsActive[0]*k)/2, fpcWidth/2, fpcThickness/2);
+               cableDimensions[0] = cd[0] - sensorDimensionsActive[0]*k;
+               cableDimensions[1] = fpcWidth;
+               cable = manager->MakeBox(cable_name, FPC, cableDimensions[0]/2, cableDimensions[1]/2, fpcThickness/2);
                cable->SetTransparency(0);
                cable->SetLineColor(kSpring-1);
             }
@@ -193,26 +212,43 @@ void mvd()
             quadrant->AddNode(sensor, k*sensorRows[i] + l, M);
             if (k%2 == 0)
                {
-               // add cable
+               // add FPC and glue for the cable
+               Float_t directional_z_offset = 0.0;
+               directional_z_offset += glueThickness; // sensor glue
+               directional_z_offset += sensorDimensionsActive[2]; // sensor
+               directional_z_offset += (fpcThickness+glueThickness)*(k/2); // fpcAssembly pitch
+               // fpcGlue
+               Float_t fpcGlue_x_offset = -fpcGlueDimensions[0]/2 - sensorDimensionsActive[0]*k;
+               Float_t fpcGlue_y_offset = -fpcGlueDimensions[1]/2 - sensorPitch*(l+1) - sensorDimensionsPassive[1];
+               Float_t fpcGlue_z_offset = z_offset;
+               directional_z_offset += glueThickness/2;
+               if (l%2 == 0) // front side
+                  fpcGlue_z_offset -= directional_z_offset;
+               if (l%2 == 1) // back side
+                  fpcGlue_z_offset += directional_z_offset;
+               T.SetTranslation(fpcGlue_x_offset, fpcGlue_y_offset, fpcGlue_z_offset);
                R.SetAngles(0.,0.,0.);
-               Float_t fpc_x_offset = -(cd[0] - sensorDimensionsActive[0]*k)/2 - sensorDimensionsActive[0]*k;
-               Float_t fpc_y_offset = -fpcWidth/2 - sensorPitch*(l+1) - sensorDimensionsPassive[1];
+               M = new TGeoCombiTrans(T,R);
+               quadrant->AddNode(fpcGlue, 1, M);
+               if (k != sensorCols[i]-1)
+                  {
+                  T.SetTranslation(fpcGlue_x_offset-fpcGlueDimensions[0], fpcGlue_y_offset, fpcGlue_z_offset);
+                  R.SetAngles(0.,0.,0.);
+                  M = new TGeoCombiTrans(T,R);
+                  quadrant->AddNode(fpcGlue, 1, M);
+               }
+               // cable
+               Float_t fpc_x_offset = -cableDimensions[0]/2 - sensorDimensionsActive[0]*k;
+               Float_t fpc_y_offset = -cableDimensions[1]/2 - sensorPitch*(l+1) - sensorDimensionsPassive[1];
                Float_t fpc_z_offset = z_offset;
+               directional_z_offset += glueThickness/2;
+               directional_z_offset += fpcThickness/2;
                if (l%2 == 0) // front side
-                  {
-                  fpc_z_offset -= fpcThickness/2;
-                  fpc_z_offset -= fpcThickness*(k/2);
-                  fpc_z_offset -= sensorDimensionsActive[2];
-                  fpc_z_offset -= glueThickness;
-                  }
+                  fpc_z_offset -= directional_z_offset;
                if (l%2 == 1) // back side
-                  {
-                  fpc_z_offset += fpcThickness/2;
-                  fpc_z_offset += fpcThickness*(k/2);
-                  fpc_z_offset += sensorDimensionsActive[2];
-                  fpc_z_offset += glueThickness;
-                  }
+                  fpc_z_offset += directional_z_offset;
                T.SetTranslation(fpc_x_offset, fpc_y_offset, fpc_z_offset);
+               R.SetAngles(0.,0.,0.);
                M = new TGeoCombiTrans(T,R);
                quadrant->AddNode(cable, l+1, M);
                }
@@ -242,8 +278,10 @@ void mvd()
    top->AddNode(mvd, 1);
    manager->CloseGeometry();
    manager->CheckOverlaps(0.001, "s");
-   //top->CheckOverlaps(ovlp=0.01);
-   //manager->CheckGeometryFull();
+   top->CheckOverlaps(0.001, "s");
+   top->FindOverlaps();
+   quadrant->CheckOverlaps(0.001, "s");
+   manager->CheckGeometryFull();
    top->Export("mvd.root");
    mvd->Draw("ogl");
    //station->Draw("ogl");