#include <Riostream.h>
-#include <TSystem.h>
-#include <TVirtualMC.h>
+#include <TGeoBBox.h>
+#include <TGeoCompositeShape.h>
+#include <TGeoCone.h>
+#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
-#include <TGeoVolume.h>
+#include <TGeoPcon.h>
#include <TGeoTorus.h>
#include <TGeoTube.h>
-#include <TGeoCone.h>
-#include <TGeoPcon.h>
-#include <TGeoBBox.h>
+#include <TGeoVolume.h>
#include <TGeoXtru.h>
-#include <TGeoCompositeShape.h>
+#include <TSystem.h>
+#include <TVirtualMC.h>
#include "AliConst.h"
#include "AliMagF.h"
//___________________________________________
void AliPIPEv3::CreateGeometry()
{
- AliDebug(1,"Create PIPEv3 geometry");
//
-// Class describing the beam pipe geometry
+// Method describing the beam pipe geometry
//
-
+ AliDebug(1,"Create PIPEv3 geometry");
Float_t dz, z, zsh, z0;
//
// Rotation Matrices
const TGeoMedium* kMedAir = gGeoManager->GetMedium("PIPE_AIR");
const TGeoMedium* kMedAirHigh = gGeoManager->GetMedium("PIPE_AIR_HIGH");
const TGeoMedium* kMedVac = gGeoManager->GetMedium("PIPE_VACUUM");
+ const TGeoMedium* kMedVacM = gGeoManager->GetMedium("PIPE_VACUUMM");
const TGeoMedium* kMedInsu = gGeoManager->GetMedium("PIPE_INS_C0");
const TGeoMedium* kMedSteel = gGeoManager->GetMedium("PIPE_INOX");
const TGeoMedium* kMedBe = gGeoManager->GetMedium("PIPE_BE");
//
// Central beam pipe support collars
// LHCVC2C_0019
+// cp1l = 405.
// Position at z = -46., 40., 150.
- TGeoVolume* voCpSupC = new TGeoVolume("CpSupC", new TGeoTube(3.0, 4.0, 0.35), kMedAco);
- voCp1->AddNode(voCpSupC, 1, new TGeoTranslation(0., 0., kCP1Length / 2. - 81.5));
- voCp1->AddNode(voCpSupC, 2, new TGeoTranslation(0., 0., kCP1Length / 2.- 191.5));
+ TGeoVolume* voCpSupC = new TGeoVolume("CpSupC", new TGeoTube(3.051, 4.00, 0.35), kMedAco);
+ voCp1->AddNode(voCpSupC, 1, new TGeoTranslation(0., 0., kCP1Length / 2. - 98.2 - 34.77 + 0.49));
+// voCp1->AddNode(voCpSupC, 2, new TGeoTranslation(0., 0., kCP1Length / 2.- 191.5));
// Beam Pipe Protection Tube
//
// ALIFWDA_0025
voCp3Mo->SetVisibility(0);
TGeoVolumeAssembly* voCp3 = new TGeoVolumeAssembly("Cp3");
voCp3->AddNode(voCp3Mo, 1, gGeoIdentity);
- voCp3->AddNode(voCpSupC, 3, new TGeoTranslation(0., 0., - kCP3Length / 2. + 4.5));
+ voCp3->AddNode(voCpSupC, 3, new TGeoTranslation(0., 0., - kCP3Length / 2. + 4.6 - 0.49));
dz = kCP3pos;
//////////////////////////////////////////////
new TGeoTube(25., 100., kRB24CuTubeL/2.), kMedAirHigh);
voRB24CuTubeA->SetVisibility(0);
// Simplified DN 100 Flange
- TGeoVolume* voRB24CuTubeF = new TGeoVolume("voRB24CuTubeF",
- new TGeoTube(kRB24CuTubeRo, kRB24CuTubeFRo, kRB24CuTubeFL/2.), kMedSteel);
+ TGeoVolume* voRB24CuTubeF = new TGeoVolume("voRB24CuTubeF",
+ new TGeoTube(kRB24CuTubeRo, kRB24CuTubeFRo, kRB24CuTubeFL/2.), kMedSteel);
// Warm Module Type VMACA
// LHCVMACA_0002
// Pos 2.1 RF Contact Flange LHCVSR__0003
//
TGeoPcon* shRB24B1RCTFlange = new TGeoPcon(0., 360., 6);
- const Float_t kRB24B1RCTFlangeRin = 8.06/2.; // Inner radius
- const Float_t kRB24B1RCTFlangeL = 1.45; // Length
+ const Float_t kRB24B1RCTFlangeRin = 8.06/2. + 0.05; // Inner radius
+ const Float_t kRB24B1RCTFlangeL = 1.45; // Length
z = 0.;
shRB24B1RCTFlange->DefineSection(0, z, kRB24B1RCTFlangeRin, 8.20/2.);
z = kRB24B1RCTL - kRB24B1RCTSL;
// In the (VSR0004) this section is straight in (LHCVC2U_0001) it is conical ????
shRB24B1RCT->DefineSection(1, z, kRB24B1RCTRin + 0.35, kRB24B1RCTRin + 0.35 + kRB24B1RCTd);
- z = kRB24B1RCTL;
+ z = kRB24B1RCTL - 0.03;
shRB24B1RCT->DefineSection(2, z, kRB24B1RCTRin, kRB24B1RCTRin + kRB24B1RCTd);
TGeoVolume* voRB24B1RCT = new TGeoVolume("RB24B1RCT", shRB24B1RCT, kMedCu);
shRB24B1TTF->DefineSection(5, z, 6.30/2., 6.7/2.);
// Transition Tube
z += 3.75;
- shRB24B1TTF->DefineSection(6, z, 8.2/2., 8.6/2.);
+ shRB24B1TTF->DefineSection(6, z, 8.05/2., 8.45/2.);
TGeoVolume* voRB24B1TTF = new TGeoVolume("RB24B1TTF", shRB24B1TTF, kMedSteel);
z = 0.;
voRB24B1BellowM->AddNode(voRB24B1TTF, 1, new TGeoTranslation(0., 0., z));
z += (20.35 - 0.63);
shRB24VMABCTT->DefineSection(5, z, 6.3/2., 6.7/2.);
z += 0.63;
- shRB24VMABCTT->DefineSection(6, z, 6.5/2., 6.9/2.);
+ shRB24VMABCTT->DefineSection(6, z, 6.3/2., 6.7/2.);
TGeoVolume* voRB24VMABCTT = new TGeoVolume("RB24VMABCTT", shRB24VMABCTT, kMedSteel);
voRB24VMABCRB->AddNode(voRB24VMABCTT, 1, new TGeoTranslation(0., 0., - kRB24VMABCRBT1L/2.-1.));
// RB24/2
//
// Copper Tube RB24/2
+//
+// This is the part inside the compensator magnet
const Float_t kRB242CuTubeL = 330.0;
TGeoVolume* voRB242CuTubeM = new TGeoVolume("voRB242CuTubeM",
- new TGeoTube(0., kRB24CuTubeRo, kRB242CuTubeL/2.), kMedVac);
- voRB24CuTubeM->SetVisibility(0);
+ new TGeoTube(0., kRB24CuTubeRo, kRB242CuTubeL/2.), kMedVacM);
+ voRB242CuTubeM->SetVisibility(0);
TGeoVolume* voRB242CuTube = new TGeoVolume("voRB242CuTube",
new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB242CuTubeL/2.), kMedCu);
voRB242CuTubeM->AddNode(voRB242CuTube, 1, gGeoIdentity);
TGeoVolumeAssembly* voRB242 = new TGeoVolumeAssembly("RB242");
- voRB242->AddNode(voRB242CuTube, 1, gGeoIdentity);
+ voRB242->AddNode(voRB242CuTubeM, 1, gGeoIdentity);
z = - kRB242CuTubeL/2 + kRB24CuTubeFL/2.;
voRB242->AddNode(voRB24CuTubeF, 3, new TGeoTranslation(0., 0., z));
z = + kRB242CuTubeL/2 - kRB24CuTubeFL/2.;
TGeoVolumeAssembly* voRB243 = new TGeoVolumeAssembly("RB243");
TGeoVolumeAssembly* voRB243A = new TGeoVolumeAssembly("RB243A");
- voRB243A->AddNode(voRB243CuTube, 1, gGeoIdentity);
+ voRB243A->AddNode(voRB243CuTubeM, 1, gGeoIdentity);
z = - kRB243CuTubeL/2 + kRB24CuTubeFL/2.;
voRB243A->AddNode(voRB24CuTubeF, 5, new TGeoTranslation(0., 0., z));
z = + kRB243CuTubeL/2 - kRB24CuTubeFL/2.;
- voRB243A->AddNode(voRB24CuTubeF, 6, new TGeoTranslation(0., 0., z));
+ voRB243A->AddNode(voRB24CuTubeF, 6, new TGeoTranslation(0., 0., z));
z = + kRB243CuTubeL/2;
voRB243A->AddNode(voRB24B1BellowM, 2, new TGeoTranslation(0., 0., z));
shRB26s3SFlange->DefineSection(5, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
TGeoVolume* voRB26s3SFlange = new TGeoVolume("RB26s3SFlange", shRB26s3SFlange, kMedSteel);
- TGeoVolume* voRB26s3SFlangeM = new TGeoVolume("RB26s3SFlange", MakeMotherFromTemplate(shRB26s3SFlange, 0, 3), kMedVac);
+ TGeoVolume* voRB26s3SFlangeM = new TGeoVolume("RB26s3SFlangeM", MakeMotherFromTemplate(shRB26s3SFlange, 0, 3), kMedVac);
voRB26s3SFlangeM->AddNode(voRB26s3SFlange, 1, gGeoIdentity);
///////////////////////////////////
shRB26s3FFlange->DefineSection(5, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
TGeoVolume* voRB26s3FFlange = new TGeoVolume("RB26s3FFlange", shRB26s3FFlange, kMedSteel);
- TGeoVolume* voRB26s3FFlangeM = new TGeoVolume("RB26s3FFlange", MakeMotherFromTemplate(shRB26s3FFlange, 2, 5), kMedVac);
+ TGeoVolume* voRB26s3FFlangeM = new TGeoVolume("RB26s3FFlangeM", MakeMotherFromTemplate(shRB26s3FFlange, 2, 5), kMedVac);
voRB26s3FFlangeM->AddNode(voRB26s3FFlange, 1, gGeoIdentity);
const Float_t kRB26s5CompTubeInnerR = 10.00/2.; // Connection tubes inner radius [Pos 2 + 3]
const Float_t kRB26s5CompTubeOuterR = 10.30/2.; // Connection tubes outer radius [Pos 2 + 3]
const Float_t kRB26s5WeldingTubeLeftL = 3.70/2.; // Left connection tube half length [Pos 2]
- const Float_t kRB26s5WeldingTubeRightL = 13.42/2.; // Right connection tube half length [Pos 3] (0.3 cm added for welding)
+ const Float_t kRB26s5WeldingTubeRightL = 13.40/2.; // Right connection tube half length [Pos 3] (0.3 cm added for welding)
const Float_t kRB26s5RingInnerR = 11.2/2.; // Ring inner radius [Pos 4]
const Float_t kRB26s5RingOuterR = 16.0/2.; // Ring inner radius [Pos 4]
const Float_t kRB26s5RingL = 0.4/2.; // Ring half length [Pos 4]
//
AliDebugClass(1,"Create PIPEv3 materials");
- Int_t isxfld = gAlice->Field()->Integ();
- Float_t sxmgmx = gAlice->Field()->Max();
+ Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
+ Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
// Steel (Inox)
Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
Float_t zsteel[4] = { 26.,24.,28.,14. };
Float_t zAir[4]={6.,7.,8.,18.};
Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
Float_t dAir = 1.20479E-3;
- Float_t dAir1 = 1.20479E-10;
+ Float_t dAir1 = 1.20479E-11;
//
// Insulation powder
// Si O Ti Al
AliMixture(35, "AIR_HIGH$ ", aAir, zAir, dAir, 4, wAir);
//
// Vacuum
- AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
+ AliMixture(16, "VACUUM$ " , aAir, zAir, dAir1, 4, wAir);
+ AliMixture(17, "VACUUMM$ ", aAir, zAir, dAir1, 4, wAir);
//
// stainless Steel
AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
AliMedium(35, "AIR_HIGH",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
//
// Vacuum
- AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(17, "VACUUMM", 17, 0, isxfld, sxmgmx, 0.1, stemax, deemax, epsil, stmin);
//
// Steel
AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
}
-TGeoPcon* AliPIPEv3::MakeMotherFromTemplate(TGeoPcon* shape, Int_t imin, Int_t imax, Float_t r0, Int_t nz)
+TGeoPcon* AliPIPEv3::MakeMotherFromTemplate(const TGeoPcon* shape, Int_t imin, Int_t imax, Float_t r0, Int_t nz)
{
//
// Create a mother shape from a template setting some min radii to 0
}
-TGeoVolume* AliPIPEv3::MakeBellow(char* ext, Int_t nc, Float_t rMin, Float_t rMax, Float_t dU, Float_t rPlie, Float_t dPlie)
+TGeoVolume* AliPIPEv3::MakeBellow(const char* ext, Int_t nc, Float_t rMin, Float_t rMax, Float_t dU, Float_t rPlie, Float_t dPlie)
{
// nc Number of convolution
// rMin Inner radius of the bellow
const TGeoMedium* kMedSteel = gGeoManager->GetMedium("PIPE_INOX");
char name[64], nameA[64], nameB[64], bools[64];
- sprintf(name, "%sBellowUS", ext);
+ snprintf(name, 64, "%sBellowUS", ext);
TGeoVolume* voBellow = new TGeoVolume(name, new TGeoTube(rMin, rMax, dU/2.), kMedVac);
//
// Upper part of the undulation
//
TGeoTorus* shPlieTorusU = new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
- sprintf(nameA, "%sTorusU", ext);
+ snprintf(nameA, 64, "%sTorusU", ext);
shPlieTorusU->SetName(nameA);
TGeoTube* shPlieTubeU = new TGeoTube (rMax - rPlie, rMax, rPlie);
- sprintf(nameB, "%sTubeU", ext);
+ snprintf(nameB, 64, "%sTubeU", ext);
shPlieTubeU->SetName(nameB);
- sprintf(name, "%sUpperPlie", ext);
- sprintf(bools, "%s*%s", nameA, nameB);
+ snprintf(name, 64, "%sUpperPlie", ext);
+ snprintf(bools, 64, "%s*%s", nameA, nameB);
TGeoCompositeShape* shUpperPlie = new TGeoCompositeShape(name, bools);
TGeoVolume* voWiggleU = new TGeoVolume(name, shUpperPlie, kMedSteel);
//
// Lower part of the undulation
TGeoTorus* shPlieTorusL = new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
- sprintf(nameA, "%sTorusL", ext);
+ snprintf(nameA, 64, "%sTorusL", ext);
shPlieTorusL->SetName(nameA);
TGeoTube* shPlieTubeL = new TGeoTube (rMin, rMin + rPlie, rPlie);
- sprintf(nameB, "%sTubeL", ext);
+ snprintf(nameB, 64, "%sTubeL", ext);
shPlieTubeL->SetName(nameB);
- sprintf(name, "%sLowerPlie", ext);
- sprintf(bools, "%s*%s", nameA, nameB);
+ snprintf(name, 64, "%sLowerPlie", ext);
+ snprintf(bools, 64, "%s*%s", nameA, nameB);
TGeoCompositeShape* shLowerPlie = new TGeoCompositeShape(name, bools);
TGeoVolume* voWiggleL = new TGeoVolume(name, shLowerPlie, kMedSteel);
//
// Connection between upper and lower part of undulation
- sprintf(name, "%sPlieConn1", ext);
+ snprintf(name, 64, "%sPlieConn1", ext);
TGeoVolume* voWiggleC1 = new TGeoVolume(name, new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie/2.), kMedSteel);
//
// One wiggle
Float_t dz = rPlie - dPlie / 2.;
Float_t z0 = - dPlie / 2.;
- sprintf(name, "%sWiggle", ext);
+ snprintf(name, 64, "%sWiggle", ext);
TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(name);
asWiggle->AddNode(voWiggleC1, 1 , new TGeoTranslation(0., 0., z0));
z0 += dz;