From 74049a3e42d3597e138e37e6c5b91c517665464a Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Wed, 15 Apr 2020 14:23:00 +0200 Subject: [PATCH] v0.9.9 --- mvd.C | 98 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 30 deletions(-) diff --git a/mvd.C b/mvd.C index aa567f5..468eee4 100644 --- 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; kMakeBox(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"); -- 2.43.0