/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Log$ */ /////////////////////////////////////////////////////////////////////////////// // // // Space frame class // // // //Begin_Html /* */ //End_Html // // /////////////////////////////////////////////////////////////////////////////// #include "AliFRAMEv1.h" #include "AliRun.h" ClassImp(AliFRAMEv1) //_____________________________________________________________________________ AliFRAMEv1::AliFRAMEv1() { // // Default constructor for space frame // } //_____________________________________________________________________________ AliFRAMEv1::AliFRAMEv1(const char *name, const char *title) : AliFRAME(name,title) { // // Standard constructor for space frame // } //_____________________________________________________________________________ void AliFRAMEv1::CreateGeometry() { // // Create space frame geometry // //Begin_Html /* */ //End_Html //Begin_Html /* */ //End_Html Int_t *idtmed = fIdtmed->GetArray()-1199; Float_t dphi, dz_small, zpos, ddphi; Float_t tspar[5]; Float_t tsparl[5]; Float_t par[50], dz_long; // R_IN : INNER RADIUS // R_OU : OUTER RADIUS // DR : WALL THICKNESS // 2*Z_IN : FREE SPACE IN Z FOR PHOS // 2*Z_RI : FREE SPACE IN Z FOR RICH // 2*Z_OU : LENGTH // 2*DZ : WIDTH OF FRAME ELEMENTS Float_t r_in = 395; Float_t r_ou = 420; Float_t dr = 0.3; Float_t z_in = 130; Float_t z_ou = 350; Float_t z_ri = 236.25; Float_t dz = 8.75; // Space Frame par[0] = r_in; par[1] = r_ou; par[2] = z_ou; gMC->Gsvolu("BFMO", "TUBE", idtmed[1214], par, 3); // Rings perpendicular to the beam // full rings at the ends par[0] = r_in; par[1] = r_ou; par[2] = dz; gMC->Gsvolu("BRO1", "TUBE", idtmed[1218], par, 3); par[0] = r_in +dr; par[1] = r_ou -dr; par[2] = dz - dr; gMC->Gsvolu("BRI1", "TUBE", idtmed[1214], par, 3); gMC->Gspos("BRI1", 1, "BRO1", 0., 0., 0., 0, "ONLY"); zpos = z_ou - dz; gMC->Gspos("BRO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY"); gMC->Gspos("BRO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY"); // space for the HMPID tspar[0] = r_in; tspar[1] = r_ou; tspar[2] = dz; tspar[3] = -240.; tspar[4] = 60.; gMC->Gsvolu("BRO2", "TUBS", idtmed[1218], tspar, 5); tspar[0] = r_in + dr; tspar[1] = r_ou - dr; tspar[2] = dz - dr; gMC->Gsvolu("BRI2", "TUBS", idtmed[1214], tspar, 5); gMC->Gspos("BRI2", 1, "BRO2", 0., 0., 0., 0, "ONLY"); zpos = z_in + dz; gMC->Gspos("BRO2", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY"); gMC->Gspos("BRO2", 2, "BFMO", 0., 0., zpos, 0, "ONLY"); tspar[0] = r_in; tspar[1] = r_ou; tspar[2] = dz; tspar[3] = 60.; tspar[4] = 120.; gMC->Gsvolu("BRO3", "TUBS", idtmed[1218], tspar, 5); tspar[0] = r_in + dr; tspar[1] = r_ou - dr; tspar[2] = dz - dr; gMC->Gsvolu("BRI3", "TUBS", idtmed[1214], tspar, 5); gMC->Gspos("BRI3", 1, "BRO3", 0., 0., 0., 0, "ONLY"); zpos = 245.; gMC->Gspos("BRO3", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY"); gMC->Gspos("BRO3", 2, "BFMO", 0., 0., zpos, 0, "ONLY"); // longitudinal beams // outside phi=60-120 // virtual elements dz_small = (z_ou - z_in -4*dz)/2; dz_long = z_in; tsparl[0] = r_in; tsparl[1] = r_ou; tsparl[2] = dz_small; // left and right tsparl[3] = -240.; tsparl[4] = 60.; gMC->Gsvolu("BLO1", "TUBS", idtmed[1214], tsparl, 5); gMC->Gsdvt("BLD1", "BLO1", 20., 2, idtmed[1214], 15); // central, leaving space for rich and phos tsparl[2] = dz_long; tsparl[3] = -20.; tsparl[4] = 60.; gMC->Gsvolu("BLO2", "TUBS", idtmed[1214], tsparl, 5); gMC->Gsdvt("BLD2", "BLO2", 20., 2, idtmed[1214], 5); tsparl[3] = 120.; tsparl[4] = 200.; gMC->Gsvolu("BLO3", "TUBS", idtmed[1214], tsparl, 5); gMC->Gsdvt("BLD3", "BLO3", 20., 2, idtmed[1214], 5); // real elements dphi = dz/(TMath::Pi()*(r_in + r_ou))*360; ddphi = dphi * dr/dz; tspar[0] = tsparl[0]; tspar[1] = tsparl[1]; tspar[2] = dz_small; tspar[3] = 10. - dphi; tspar[4] = 10.; gMC->Gsvolu("BL01", "TUBS", idtmed[1218], tspar, 5); tspar[0] = tsparl[0] + dr; tspar[1] = tsparl[1] - dr; tspar[3] = 10. - dphi + ddphi; tspar[4] = 10. - ddphi; gMC->Gsvolu("BL02", "TUBS", idtmed[1214], tspar, 5); gMC->Gspos("BL02", 1, "BL01", 0., 0., 0., 0, "ONLY"); tspar[0] = tsparl[0]; tspar[1] = tsparl[1]; tspar[2] = dz_long; tspar[3] = 10. - dphi; tspar[4] = 10.; gMC->Gsvolu("BL11", "TUBS", idtmed[1218], tspar, 5); tspar[0] = tsparl[0] + dr; tspar[1] = tsparl[1] - dr; tspar[3] = 10. - dphi + ddphi; tspar[4] = 10. - ddphi; gMC->Gsvolu("BL12", "TUBS", idtmed[1214], tspar, 5); gMC->Gspos("BL12", 1, "BL11", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BL01", 1, "BLD1", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BL11", 1, "BLD2", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BL11", 2, "BLD3", 0., 0., 0., 0, "ONLY"); zpos = z_in +2*dz + dz_small; gMC->Gspos("BLO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY"); gMC->Gspos("BLO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY"); gMC->Gspos("BLO2", 1, "BFMO", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BLO3", 1, "BFMO", 0., 0., 0., 0, "ONLY"); // PHI=60-120 (RICH) tsparl[0] = r_in; tsparl[1] = r_ou; tsparl[2] = (z_ou - z_ri -4*dz)/2; tsparl[3] = 60.; tsparl[4] = 120.; gMC->Gsvolu("BLO4", "TUBS", idtmed[1214], tsparl, 5); gMC->Gsdvt("BLD4", "BLO4", 20., 2, idtmed[1214], 3); tspar[0] = tsparl[0]; tspar[1] = tsparl[1]; tspar[2] = tsparl[2]; tspar[3] = 10. - dphi; tspar[4] = 10.; gMC->Gsvolu("BL03", "TUBS", idtmed[1218], tspar, 5); tspar[0] = tsparl[0] + dr; tspar[1] = tsparl[1] - dr; tspar[2] = tsparl[2]; tspar[3] = 10. - dphi + ddphi; tspar[4] = 10. - ddphi; gMC->Gsvolu("BL04", "TUBS", idtmed[1214], tspar, 5); gMC->Gspos("BL04", 1, "BL03", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BL03", 1, "BLD4", 0., 0., 0., 0, "ONLY"); gMC->Gspos("BLO4", 1, "BFMO", 0., 0., 293.125, 0, "ONLY"); gMC->Gspos("BLO4", 2, "BFMO", 0., 0.,-293.125, 0, "ONLY"); gMC->Gspos("BFMO", 1, "ALIC", 0., 0., 0., 0, "ONLY"); gMC->Gsatt("BFMO", "SEEN", 0); } //_____________________________________________________________________________ void AliFRAMEv1::DrawModule() { // // Draw a shaded view of the space frame // // Set everything unseen gMC->Gsatt("*", "seen", -1); // // Set ALIC mother transparent gMC->Gsatt("ALIC","SEEN",0); // // Set the volumes visible gMC->Gsatt("BFMO","seen",0); gMC->Gsatt("BRO1","seen",1); gMC->Gsatt("BRI1","seen",0); gMC->Gsatt("BRO2","seen",1); gMC->Gsatt("BRI2","seen",0); gMC->Gsatt("BRO3","seen",1); gMC->Gsatt("BRI3","seen",0); gMC->Gsatt("BLO1","seen",0); gMC->Gsatt("BLD1","seen",0); gMC->Gsatt("BLO2","seen",0); gMC->Gsatt("BLD2","seen",0); gMC->Gsatt("BLO3","seen",0); gMC->Gsatt("BLD3","seen",0); gMC->Gsatt("BL01","seen",1); gMC->Gsatt("BL02","seen",1); gMC->Gsatt("BL11","seen",1); gMC->Gsatt("BL12","seen",1); gMC->Gsatt("BLO4","seen",0); gMC->Gsatt("BLD4","seen",0); gMC->Gsatt("BL03","seen",1); gMC->Gsatt("BL04","seen",1); // gMC->Gdopt("hide", "on"); gMC->Gdopt("shad", "on"); gMC->Gsatt("*", "fill", 7); gMC->SetClipBox("."); gMC->DefaultRange(); gMC->Gdraw("alic", 40, 30, 0, 10, 10, .015, .015); gMC->Gdhead(1111, "Space Frame"); gMC->Gdman(18, 4, "MAN"); } //_____________________________________________________________________________ void AliFRAMEv1::CreateMaterials() { // // Create materials for the space frame // Int_t ISXFLD = gAlice->Field()->Integ(); Float_t SXMGMX = gAlice->Field()->Max(); Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 }; Float_t zsteel[4] = { 26.,24.,28.,14. }; Float_t wsteel[4] = { .715,.18,.1,.005 }; Float_t epsil, stmin, deemax, tmaxfd, stemax; // STEEL // --- Define the various materials for GEANT --- AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500); AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel); // **************** // Defines tracking media parameters. // Les valeurs sont commentees pour laisser le defaut // a GEANT (version 3-21, page CONS200), f.m. epsil = .001; // Tracking precision, stemax = -1.; // Maximum displacement for multiple scat tmaxfd = -20.; // Maximum angle due to field deflection deemax = -.3; // Maximum fractional energy loss, DLS stmin = -.8; // *************** //ifield0 = 0; // Field off //ifield1 = 2; // 1.0 T. FIELD (DIPOLE) //ifield3 = 3; // Air // 0.2 T. FIELD (L3) AliMedium(15, "AIR_L3_US ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); // Steel AliMedium(19, "ST_L3_US ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); }