From 67d157d5609fc1fc552ef58bc2bc37b442d9cd01 Mon Sep 17 00:00:00 2001 From: Eoin Clerkin <e.clerkin@gsi.de> Date: Thu, 31 Mar 2022 11:15:57 +0200 Subject: [PATCH] Shifted platform Plaform shifted by 40cm to be under the MUCH/RICH. Based upon create_platform_v16.C --- macro/passive/create_platform_v22b.C | 150 +++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 macro/passive/create_platform_v22b.C diff --git a/macro/passive/create_platform_v22b.C b/macro/passive/create_platform_v22b.C new file mode 100644 index 0000000000..6432ba4ebb --- /dev/null +++ b/macro/passive/create_platform_v22b.C @@ -0,0 +1,150 @@ +/* Copyright (C) 2022 Facility of Antiproton and Ion Research in Europe, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Eoin Clerkin [committer] */ + +/****************************************************************************** + ** based on create_platform_v16.C + ** + **/ + + +#include "TGeoManager.h" + +#include <iomanip> +#include <iostream> + + +using namespace std; + +// ------------- Other global variables ----------------------------------- +// ---> TGeoManager (too lazy to write out 'Manager' all the time +TGeoManager* gGeoMan = NULL; // will be set later +// ---------------------------------------------------------------------------- + +// ============================================================================ +// ====== Main function ===== +// ============================================================================ + +void create_platform_v22b() +{ + + // ----- Define platform parts ---------------------------------------------- + + /** For v22b (SIS 100) **/ + TString geoTag = "v22b"; + Double_t sizeX = 725.0; // symmetric in x + Double_t sizeY = 234.0; // without rails + Double_t sizeZ = 297.0; // short version + Double_t endZ = 410.0; // ends at z = 450.0 + + // /** For v16b (SIS 300) **/ + // TString geoTag = "v16b"; + // Double_t sizeX = 725.0; // symmetric in x + // Double_t sizeY = 234.0; // without rails + // Double_t sizeZ = 455.0; // long version + // Double_t endZ = 540.0; // ends at z = 450.0 + + Double_t beamY = 570.0; // nominal beam height + Double_t posX = 0.0; + Double_t posY = -beamY + sizeY / 2.; // rest on the floor at -beamY + Double_t posZ = endZ - sizeZ / 2.; // end at MUCH z-end + + // -------------------------------------------------------------------------- + + + // ------- Geometry file name (output) ---------------------------------- + TString geoFileName = "platform_"; + geoFileName = geoFileName + geoTag + ".geo.root"; + // -------------------------------------------------------------------------- + + + // ------- Open info file ----------------------------------------------- + TString infoFileName = geoFileName; + infoFileName.ReplaceAll("root", "info"); + fstream infoFile; + infoFile.open(infoFileName.Data(), fstream::out); + infoFile << "Platform geometry created with create_platform_v16.C" << std::endl << std::endl; + // -------------------------------------------------------------------------- + + + // ------- Load media from media file ----------------------------------- + FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader"); + FairGeoInterface* geoFace = geoLoad->getGeoInterface(); + TString geoPath = gSystem->Getenv("VMCWORKDIR"); + TString medFile = geoPath + "/geometry/media.geo"; + geoFace->setMediaFile(medFile); + geoFace->readMedia(); + gGeoMan = gGeoManager; + // -------------------------------------------------------------------------- + + + // ----------------- Get and create the required media ----------------- + FairGeoMedia* geoMedia = geoFace->getMedia(); + FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder(); + + // ---> aluminium + FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium"); + if (!mAluminium) Fatal("Main", "FairMedium aluminium not found"); + geoBuild->createMedium(mAluminium); + TGeoMedium* aluminium = gGeoMan->GetMedium("aluminium"); + if (!aluminium) Fatal("Main", "Medium aluminium not found"); + + // // ---> air + // FairGeoMedium* mAir = geoMedia->getMedium("air"); + // if ( ! mAir ) Fatal("Main", "FairMedium air not found"); + // geoBuild->createMedium(mAir); + // TGeoMedium* air = gGeoMan->GetMedium("air"); + // if ( ! air ) Fatal("Main", "Medium air not found"); + // -------------------------------------------------------------------------- + + + // -------------- Create geometry and top volume ------------------------- + gGeoMan = (TGeoManager*) gROOT->FindObject("FAIRGeom"); + gGeoMan->SetName("PLATFORMgeom"); + TGeoVolume* top = new TGeoVolumeAssembly("top"); + gGeoMan->SetTopVolume(top); + TString platformName = "platform_"; + platformName += geoTag; + TGeoVolume* platform = new TGeoVolumeAssembly(platformName.Data()); + // -------------------------------------------------------------------------- + + + // ----- Create --------------------------------------------------------- + TGeoBBox* platform_base = new TGeoBBox("", sizeX / 2., sizeY / 2., sizeZ / 2.); + TGeoVolume* platform_vol = new TGeoVolume("platform", platform_base, aluminium); + platform_vol->SetLineColor(kBlue); + platform_vol->SetTransparency(70); + + TGeoTranslation* platform_trans = new TGeoTranslation("", posX, posY, posZ); + platform->AddNode(platform_vol, 1, platform_trans); + + infoFile << "sizeX: " << setprecision(2) << sizeX << "sizeY: " << setprecision(2) << sizeY + << "sizeZ: " << setprecision(2) << sizeZ << endl; + infoFile << "posX : " << setprecision(2) << posX << "posY : " << setprecision(2) << posY + << "posZ : " << setprecision(2) << posZ << endl; + + // --------------- Finish ----------------------------------------------- + top->AddNode(platform, 1); + cout << endl << endl; + gGeoMan->CloseGeometry(); + gGeoMan->CheckOverlaps(0.001); + gGeoMan->PrintOverlaps(); + gGeoMan->Test(); + + platform->Export(geoFileName); // an alternative way of writing the platform volume + + TFile* geoFile = new TFile(geoFileName, "UPDATE"); + TGeoTranslation* platform_placement = new TGeoTranslation("platform_trans", 0., 0., 0.); + platform_placement->Write(); + geoFile->Close(); + + cout << endl; + cout << "Geometry " << top->GetName() << " written to " << geoFileName << endl; + + top->Draw("ogl"); + + infoFile.close(); +} +// ============================================================================ +// ====== End of main function ===== +// ============================================================================ -- GitLab