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
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;
// --- 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
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);
}
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);
}
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");