+++ /dev/null
-/**************************************************************************
- * 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. *
- **************************************************************************/
-
-/* $Id$ */
-
-//----------------------------------------------------------------------
-// Helper class to write geometry in ALIFE format
-// in parallel with Geant geometry definition.
-// Author: A.Morsch
-//----------------------------------------------------------------------
-
-#include <AliALIFE.h>
-
-ClassImp(AliALIFE)
-
-AliALIFE::AliALIFE(const char* file1, const char* file2):
- fNBodies(0),
- fNVolumes(0),
- fBodyFile(file1),
- fVolumeFile(file2),
- fFile1(fopen(fBodyFile,"w")),
- fFile2(fopen(fVolumeFile,"w")),
- fDefaultVolume1("DEFAU1"),
- fDefaultVolume2("DEFAU2")
-{
-// Constructor
- BodyHeader();
- VolumeHeader();
-}
-
-AliALIFE::AliALIFE():
- fNBodies(0),
- fNVolumes(0),
- fBodyFile("FlukaBody.inp"),
- fVolumeFile("FlukaVolume.inp"),
- fFile1(fopen(fBodyFile,"w")),
- fFile2(fopen(fVolumeFile,"w")),
- fDefaultVolume1("DEFAU1"),
- fDefaultVolume2("DEFAU2")
-{
-// Default constructor
- BodyHeader();
- VolumeHeader();
-}
-
-
-AliALIFE::AliALIFE(const AliALIFE &rhs):
- TObject(rhs),
- fNBodies(0),
- fNVolumes(0),
- fBodyFile(0),
- fVolumeFile(0),
- fFile1(0),
- fFile2(0),
- fDefaultVolume1(0),
- fDefaultVolume2(0)
-{
- // Copy Constructor
- rhs.Copy(*this);
-}
-
-void AliALIFE::BodyHeader()
-{
-// Write header for body definitions
- fprintf(fFile1,"*\n");
- fprintf(fFile1,"GEOBEGIN COMBINAT\n");
- fprintf(fFile1," 0 0 AliRoot Generated\n");
- fprintf(fFile1,"*\n");
- fprintf(fFile1,"*== Body Definitions ================================================\n");
- fprintf(fFile1,"*\n");
-
-}
-
-
-void AliALIFE::VolumeHeader()
-{
-// Write header for region (volume) definitions
- fprintf(fFile2,"REGIONS\n");
- fprintf(fFile2,"*\n");
- fprintf(fFile2,"*== Region Definitions =================================================\n");
- fprintf(fFile2,"*\n");
-}
-
-
-void AliALIFE:: Cylinder(Float_t rmin, Float_t rmax,
- Float_t zmin, Float_t zmax,
- Float_t pos[3],
- const char* Material,
- const char* Field,
- const char* Cuts)
-{
-// Simple cylinder
-//
-// Bodies
-// ^^^^^^
- char name1[6], name2[6], name3[6], name4[6];
-
-// outer radius
- sprintf(name1, "R%4.4d", fNBodies++);
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",name1, pos[0], pos[1], rmax); // inner radius
- sprintf(name2, "R%4.4d", fNBodies++);
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",name2, pos[0], pos[1], rmin);
-// z-max
- sprintf(name3, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",name3, zmax);
-// z-min
- sprintf(name4, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",name4, zmin);
-//
-// Volumes
-// ^^^^^^^
-
- fprintf(fFile2,">%s:%s\n", Material, Field);
- fprintf(fFile2,"EMFCUT=%s\n", Cuts);
- fprintf(fFile2,"WW-FACTOR=%s\n", Cuts);
- if (rmin >0) {
- fprintf(fFile2,"+%s-%s+%s-%s\n", name1, name2, name3, name4);
- } else {
- fprintf(fFile2,"+%s+%s-%s\n", name1, name3, name4);
- }
-
- fprintf(fFile2,"\n");
-}
-
-void AliALIFE::OnionCylinder(Float_t* r, Int_t nr, Float_t zmin, Float_t zmax,
- Float_t pos[3], const char** Materials,
- const char** Fields, const char** Cuts)
-{
-//
-// Concentric cylinders
-//
-
-// Bodies
-// ^^^^^^
- char nameRin[6], nameRou[6], nameZin[6], nameZou[6];
-// z-limits
-// z-max
- sprintf(nameZou, "Z%4.4d", fNBodies++);
- nameZou[5]='\0';
-
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZou, zmax);
-// z-min
- sprintf(nameZin, "Z%4.4d", fNBodies++);
- nameZin[5]='\0';
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZin, zmin);
-
-// inner radius
- sprintf(nameRin, "R%4.4d", fNBodies++);
- nameRin[5]='\0';
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",nameRin, pos[0], pos[1], r[0]);
-
- Int_t i;
- for (i=1; i<nr; i++) {
-// outer radius
- sprintf(nameRou, "R%4.4d", fNBodies++);
- nameRou[5]='\0';
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",
- nameRou, pos[0], pos[1], r[i]);
-//
-// Volumes
-// ^^^^^^^
- if (Fields && Cuts) {
- fprintf(fFile2,">%s:%s\n", Materials[i-1], Fields[i-1]);
- fprintf(fFile2,"EMFCUT=%s\n", Cuts[i-1]);
- fprintf(fFile2,"WW-FACTOR=%s\n", Cuts[i-1]);
- } else {
- fprintf(fFile2,">%s:%s\n", Materials[i-1], "MF");
- fprintf(fFile2,"EMFCUT=%s\n", "$UNSHIELDED");
- fprintf(fFile2,"WW-FACTOR=%s\n", "$UNSHIELDED");
- }
- if (r[i-1] != 0.) {
- fprintf(fFile2,"+%5s-%5s+%5s-%5s\n", nameZou, nameZin, nameRou, nameRin);
- } else {
- fprintf(fFile2,"+%5s-%5s+%5s\n", nameZou, nameZin, nameRou);
- }
- fprintf(fFile2,"\n");
- strcpy(nameRin,nameRou);
- }
-}
-
-
-void AliALIFE::Cone(Float_t rmin1, Float_t rmin2,
- Float_t rmax1, Float_t rmax2,
- Float_t zmin, Float_t zmax,
- Float_t pos[3],
- const char* Material,
- const char* Field,
- const char* Cuts)
-{
-// Simple cone
-
-//
-// Bodies
-// ^^^^^^
- char nameCou[6], nameCin[6];
- Float_t d, r1, r2;
- char nameZin[6], nameZou[6];
-// z-max
- sprintf(nameZou, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZou, zmax);
-// z-min
- sprintf(nameZin, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZin, zmin);
-
-// outer radius
- d=zmax-zmin;
- sprintf(nameCou, "C%4.4d", fNBodies++);
- if (rmax1 >= 0. && rmax2 >= 0.) {
- if (rmax1!=rmax2) {
- if (rmax1 > rmax2) {
- pos[2]=zmin;
- r1=rmax1;
- r2=rmax2;
- } else {
- d=-d;
- pos[2]=zmax;
- r1=rmax2;
- r2=rmax1;
- }
- fprintf(fFile1,"%5s TRC%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n",
- nameCou, pos[0], pos[1], pos[2], 0., 0., d);
- fprintf(fFile1," %10.3f%10.3f\n",r1,r2);
- } else {
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",
- nameCou, pos[0], pos[1], rmax1);
- }
- }else {
- fDefaultVolume1 = nameCou;
- }
-
-
-
-// inner radius
- sprintf(nameCin, "C%4.4d", fNBodies++);
- if (rmin1 >= 0. && rmin2 >= 0.) {
- if (rmin1!=rmin2) {
- if (rmin1 != 0 && rmin2 !=0) {
- d=zmax-zmin;
- if (rmin1 > rmin2) {
- pos[2]=zmin;
- r1=rmin1;
- r2=rmin2;
- } else {
- pos[2]=zmax;
- r1=rmin2;
- r2=rmin1;
- d=-d;
- }
- fprintf(fFile1,"%5s TRC%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n",
- nameCin, pos[0], pos[1], pos[2], 0., 0., d);
- fprintf(fFile1," %10.3f%10.3f\n",r1,r2);
- }
- } else {
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",
- nameCin, pos[0], pos[1], rmin1);
- }
- }else {
- fDefaultVolume2 = nameCin;
- }
-
-
-
-//
-// Volumes
-// ^^^^^^^
- fprintf(fFile2,">%s:%s\n", Material, Field);
- fprintf(fFile2,"EMFCUT=%s\n", Cuts);
- fprintf(fFile2,"WW-FACTOR=%s\n", Cuts);
- if (rmin1 != 0 && rmin2 !=0) {
- fprintf(fFile2,"+%s-%s+%s-%s\n", nameCou, nameCin, nameZou, nameZin);
- } else {
- fprintf(fFile2,"+%s+%s-%s\n", nameCou, nameZou, nameZin);
- }
- fprintf(fFile2,"\n");
-}
-
-void AliALIFE::OnionCone (Float_t* r1, Float_t* r2, Int_t nr,
- Float_t zmin, Float_t zmax,
- Float_t pos[3], const char** Materials,
- const char** Fields, const char** Cuts)
-{
-// Concentric cones
-//
- char nameCin[6], nameCou[6], nameZin[6], nameZou[6];
-//
-// Bodies
-// ^^^^^^
- Float_t ri1, ri2, ro1, ro2, d;
-
-// z-max
- sprintf(nameZou, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZou, zmax);
-// z-min
- sprintf(nameZin, "Z%4.4d", fNBodies++);
- fprintf(fFile1,"%5s XYP%10.3f\n",nameZin, zmin);
-
-// inner radius
- d=zmax-zmin;
- Bool_t hasInner=kFALSE;
- Bool_t isCylinder=kFALSE;
- if (r1[0]>=0 && r2[0]>=0) {
- if (r1[0] != 0. && r2[0] !=0.) {
- if (r1[0]!=r2[0]) {
- hasInner=kTRUE;
- if (r1[0] > r2[0]) {
- pos[2]=zmin;
- ri1=r1[0];
- ri2=r2[0];
- } else {
- d=-d;
- pos[2]=zmax;
- ri1=r2[0];
- ri2=r1[0];
- }
- sprintf(nameCin, "C%4.4d", fNBodies++);
- nameCin[5]='\0';
- fprintf(fFile1,"%5s TRC%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n",
- nameCin, pos[0], pos[1], pos[2], 0., 0., d);
- fprintf(fFile1," %10.3f%10.3f\n",ri1,ri2);
- } else {
- isCylinder=kTRUE;
- sprintf(nameCin, "C%4.4d", fNBodies++);
- nameCin[5]='\0';
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",
- nameCin, pos[0], pos[1], r1[0]);
- }
- }
- } else {
- fDefaultVolume1 = nameCin;
- }
-
-
-
-// outer radius
- Int_t i;
- for (i=1; i<nr; i++) {
- if (r1[i] >= 0. && r2[i] >=0) {
- if (r1[i]!=r2[i]) {
- d=zmax-zmin;
- if (r1[i] > r2[i]) {
- pos[2]=zmin;
- ro1=r1[i];
- ro2=r2[i];
- } else {
- pos[2]=zmax;
- ro1=r2[i];
- ro2=r1[i];
- d=-d;
- }
- sprintf(nameCou, "C%4.4d", fNBodies++);
- nameCou[5]='\0';
- fprintf(fFile1,"%5s TRC%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n",
- nameCou, pos[0], pos[1], pos[2], 0., 0., d);
- fprintf(fFile1," %10.3f%10.3f\n",ro1,ro2);
- } else {
- isCylinder=kTRUE;
- sprintf(nameCou, "C%4.4d", fNBodies++);
- nameCou[5]='\0';
- fprintf(fFile1,"%5s ZCC%10.3f%10.3f%10.3f\n",
- nameCou, pos[0], pos[1], r1[i]);
- }
- } else {
- fDefaultVolume1 = nameCou;
- }
-
-// Volumes
-// ^^^^^^^
- if (Fields && Cuts) {
- fprintf(fFile2,">%s:%s\n", Materials[i-1], Fields[i-1]);
- fprintf(fFile2,"EMFCUT=%s\n", Cuts[i-1]);
- fprintf(fFile2,"WW-FACTOR=%s\n", Cuts[i-1]);
- } else {
- fprintf(fFile2,">%s:%s\n", Materials[i-1], "MF");
- fprintf(fFile2,"EMFCUT=%s\n", "$UNSHIELDED");
- fprintf(fFile2,"WW-FACTOR=%s\n", "$UNSHIELDED");
- }
- if (hasInner || isCylinder) {
- if (!isCylinder) fprintf(fFile2,"+%5s-%5s+%5s-%5s\n",
- nameCou, nameCin, nameZou, nameZin);
- if (isCylinder) fprintf(fFile2,"+%5s+%5s-%5s\n",
- nameCou, nameZou, nameZin);
- } else {
- fprintf(fFile2,"+%5s\n", nameCou);
- hasInner=kTRUE;
- }
- fprintf(fFile2,"\n");
- strcpy(nameCin,nameCou);
- }
-}
-
-
-void AliALIFE::PolyCone(Float_t* rmin, Float_t* rmax, Float_t* z,
- Int_t nz,
- Float_t pos[3],
- const char* Material,
- const char* Field,
- const char* Cuts)
-{
-//
-// Equivalent to the Geant3 PCON
- Int_t i;
- for (i=0; i<nz-1; i++) {
-// skip (z_i = z_i+1)
- if (z[i] == z[i+1]) continue;
- Cone(rmin[i], rmin[i+1], rmax[i], rmax[i+1], z[i], z[i+1], pos,
- Material, Field, Cuts);
- }
-}
-
-void AliALIFE::OnionPolyCone(Float_t** r, Float_t* z,
- Int_t nr, Int_t nz,
- Float_t pos[3],
- const char** Materials,
- const char** Fields,const char** Cuts)
-{
-//
-// Concentric PCONS
- Int_t i, j;
- for (i=0; i<nz-1; i++) {
-// skip (z_i = z_i+1)
- if (z[i] == z[i+1]) continue;
- for (j=0; j<nr-1; j++) {
- if (Fields && Cuts) {
- Cone(r[i][j], r[i+1][j], r[i][j+1], r[i+1][j+1],
- z[i], z[i+1], pos,
- Materials[i], Fields[i], Cuts[i]);
- } else {
- Cone(r[i][j], r[i+1][j], r[i][j+1], r[i+1][j+1],
- z[i], z[i+1], pos,
- Materials[i]);
- }
- }
- }
-}
-
-void AliALIFE::Comment(const char* Comment)
-{
-// Insert comment line
- fprintf(fFile1,"*%s\n", Comment);
- fprintf(fFile2,"*%s\n", Comment);
-}
-
-
-void AliALIFE::Finish(Bool_t iremove)
-{
-// Finish geometry definition
- char s[BUFSIZ];
- fprintf(fFile1," END\n");
- fclose(fFile2);
- fFile2=fopen(fVolumeFile,"r");
- while (fgets(s, BUFSIZ, fFile2)) {
- fputs(s,fFile1);
- }
-
- fclose(fFile1);
- fclose(fFile2);
- if (iremove) {
- remove(fVolumeFile);
- remove(fBodyFile);
- }
-}
-
-void AliALIFE::Copy(TObject&) const
-{
- //
- // Copy
- //
- Fatal("Copy","Not implemented!\n");
-}
-
-
-
-
-
-
-
-
-
-
+++ /dev/null
-/**************************************************************************
- * 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. *
- **************************************************************************/
-
-/* $Id$ */
-
-#include <TCanvas.h>
-#include <TFile.h>
-#include <TGraph.h>
-#include <TH1F.h>
-#include <TMath.h>
-#include <TMultiGraph.h>
-#include <TNtuple.h>
-#include <TObjString.h>
-#include <TString.h>
-#include <TStyle.h>
-
-#include "AliFieldReader.h"
-#include "AliMagFMaps.h"
-
-ClassImp(AliFieldReader)
-
-
-
-//_______________________________________________________________________
-AliFieldReader::AliFieldReader():
- fField(0),
- fMap(0),
- fCatalogue(0),
- fHtmlMain(0),
- fStepSize(0.),
- fZStart(1383.),
- fDd(0.08),
- fDz(0.064),
- fPolarity(1.),
- fCatalogueName("goodfiles.list")
-{
-//
-// Constructor
-//
-}
-
-AliFieldReader::AliFieldReader(const AliFieldReader& reader):
- TObject(reader),
- fField(0),
- fMap(0),
- fCatalogue(0),
- fHtmlMain(0),
- fStepSize(0.),
- fZStart(0.),
- fDd(0.),
- fDz(0.),
- fPolarity(0.),
- fCatalogueName(0)
-{
-//
-// Constructor
-//
- reader.Copy(*this);
-}
-
-//_______________________________________________________________________
-AliFieldReader::~AliFieldReader()
-{
- //
- // Destructor
- //
-}
-
-//_______________________________________________________________________
-void AliFieldReader::Init()
-{
-//
-// Initialize the reader
-//
- // Calculated map
- fField = new AliMagFMaps("Maps","Maps", 2, 1., 10., 2);
- // Catalogue
- fCatalogue = fopen(fCatalogueName, "r");
-
- // HTML
- fHtmlMain = fopen("bmap.html", "w");
- MakeHtmlHeaderMain(fHtmlMain);
-
-}
-
-
-void AliFieldReader::ReadMap()
-{
-//
-// Read the measured dipole field map
-//
-
- Float_t zA[450], bxzA[200], byzA[200], bzzA[200], bxzcA[200], byzcA[200], bzzcA[200];
- Float_t yA[450], bxyA[200], byyA[200], bzyA[200], bxycA[200], byycA[200], bzycA[200];
- Float_t xA[450], bxxA[200], byxA[200], bzxA[200], bxxcA[200], byxcA[200], bzxcA[200];
-
- Char_t sLine[255];
- Char_t fLine[255];
-
- Float_t xpos, ypos, zpos;
- Int_t iboxpos;
-
- Float_t h[3], x[3], b[3];
- Float_t temp;
- Float_t xnt[17];
- Int_t ires;
-
- Int_t iret, ipos;
- Int_t ic115 = 0;
- Float_t dx = 0.;
- Float_t dy = 0.;
-
- Init();
- // Read register
- ReadRegisterMap();
- // n-tuple
- fMap = new TNtuple("Field Map", "Map",
- "x:y:z:ix:iy:iz:bx:by:bz:bxc:byc:bzc:ifile:ireg:irot:temp:cal", 4000);
-
- //
- // Loop over files
- //
- Int_t ifiles = 0;
- // File catalogue
- while ((fgets(fLine, 255, fCatalogue)) != NULL && ifiles <= 2000) {
-
- if (strncmp(fLine,"#HEADER", 7) == 0) {
- iret = sscanf(&fLine[7],"%f", &fZStart);
- continue;
- }
- ifiles++;
-
-// if (ifiles != 87) continue;
- char fileName[32];
- iret = sscanf(fLine, "%s", fileName);
- printf("Reading File %s\n", fileName);
-
-// Get run name
- TString* tsFile = new TString(fileName);
- TObjArray * tokens = tsFile->Tokenize(".");
- const char* runName = (((TObjString*) tokens->At(0))->GetString()).Data();
- FILE* file = fopen(fileName, "r");
-
-
- Float_t bdl = 0.;
- Float_t bdlc = 0.;
- Int_t iz = 0;
- Int_t izz = 0;
- Int_t iy = 0;
- Int_t ix = 0;
- Int_t iheader = 0;
- Float_t stepsz = 0.;
- // Graphs go here
- TMultiGraph* bxzmg = new TMultiGraph("bxzmg", "B_{x}");
- TMultiGraph* byzmg = new TMultiGraph("byzmg", "B_{y}");
- TMultiGraph* bzzmg = new TMultiGraph("bzzmg", "B_{z}");
- while ((fgets(sLine, 255, file)) != NULL) {
-// read z-position
-
- if (strncmp(sLine," Current", 8) == 0) {
- Float_t current;
- iret = sscanf(&sLine[9],"%f", ¤t);
- printf("Current %f \n", current);
-
- fPolarity = current / 6000.;
- }
- if (strncmp(sLine," z", 2) == 0) {
- Float_t zmin, zmax;
- Int_t nsteps;
- iret = sscanf(&sLine[3],"%f %f %d", &zmin, &zmax, &nsteps);
- printf("zmin zmax %13.3f %13.3f %13.3f\n",
- zmin, zmax, TMath::Abs(zmax - zmin)/Float_t(nsteps));
- zmax = TMath::Max(zmin, zmax);
- stepsz = TMath::Abs(zmax - zmin)/Float_t(nsteps);
- }
-
- if (strncmp(sLine," X position", 11) == 0)
- {
- TString string;
- TString* tsLine = new TString(sLine);
- TObjArray * tokens = tsLine->Tokenize("=");
- string = ((TObjString*) tokens->At(1))->GetString();
- iret = sscanf(string.Data(), "%f", &xpos);
- string = ((TObjString*) tokens->At(2))->GetString();
- iret = sscanf(string.Data(), "%f", &ypos);
- string = ((TObjString*) tokens->At(3))->GetString();
- iret = sscanf(string.Data(), "%d", &iboxpos);
-
-
- printf("This file is for x = %13.3f y = %13.3f Box Position %1d\n", xpos, ypos, iboxpos);
- iheader++;
-
- }
-
- if (strncmp(sLine," R Z-pos",8) == 0)
- {
- iret = sscanf(&sLine[8],"%e", &zpos);
- ipos = 0;
- ic115 = 0;
- izz++;
- }
-
-
- if (strncmp(sLine,"C",1) == 0) {
- ipos++;
- Int_t ireg;
- iret = sscanf(&sLine[2],"%d %f %f %f %f %d", &ireg, &h[0], &h[1], &h[2], &temp, &ires);
- //
- // fix for address 115
- //
- if (ireg == 115) ic115++;
- if (ic115 == 2 && ireg == 115) ireg = 119;
-
- if (iheader == 1) {
-
- Float_t bx = 0., by = 0., bz = 0.;
- Int_t jx = fRegMap[ireg][0];
- Int_t jy = fRegMap[ireg][1];
- Int_t jz = fRegMap[ireg][2];
-
- switch (iboxpos) {
- case 0:
- bx = h[1];
- by = h[2];
- dx = -0.36 + jx * fDd;
- dy = jy * fDd;
- break;
- case 1:
- bx = -h[2];
- by = h[1];
- dx = 0.36 + jy * fDd;
- dy = -(-0.36 + jx * fDd);
- break;
- case 2:
- bx = -h[1];
- by = -h[2];
- dx = 0.36 - jx * fDd;
- dy = -jy * fDd;
- break;
- case 3:
- bx = h[2];
- by = -h[1];
- dx = -0.36 - jy * fDd;
- dy = -(0.36 - jx * fDd);
- break;
- } // switch
-
- bz = h[0];
- if (jz == 0) {
- bz = -bz;
- if (iboxpos == 1 || iboxpos == 3) {
- by = -by;
- } else {
- bx = -bx;
- }
- }
-
-
- Float_t dz = (jz == 0)? fDz/2. : - fDz/2.;
- dz *= 100.;
-
-
- Float_t xc = xpos + dx;
- Float_t yc = ypos + dy;
-
-
- x[0] = - xc * 100.;
- x[1] = + yc * 100.;
- x[2] = - (-zpos * 100. + fZStart + dz);
-
- fField->Field(x, b);
- b[0] *= fPolarity;
- b[1] *= fPolarity;
- b[2] *= fPolarity;
-
- xnt[ 0] = xc;
- xnt[ 1] = yc;
- xnt[ 2] = -x[2] / 100.;
- xnt[ 3] = Float_t (jx);
- xnt[ 4] = Float_t (jy);
- xnt[ 5] = Float_t (jz);
- xnt[ 6] = bx;
- xnt[ 7] = by;
- xnt[ 8] = bz;
- xnt[ 9] = b[0]/10.;
- xnt[10] = b[1]/10.;
- xnt[11] = b[2]/10.;
- xnt[12] = Float_t (ifiles);
- xnt[13] = Float_t (ireg);
- xnt[14] = Float_t(iboxpos);
- xnt[15] = temp;
- xnt[16] = Float_t(ires);
-
- fMap->Fill(xnt);
-
-
-//
-// Calculated field
-
- if (jy != -1 && jz == 1 && jy == 0 && izz == 40){
- x[1] = x[1] + 10.;
- fField->Field(x, b);
- yA [jx] = yc;
- bxyA[jx] = bx;
- byyA[jx] = by;
- bzyA[jx] = bz;
- bxycA[jx] = b[0] / 10.;
- byycA[jx] = b[1] / 10.;
- bzycA[jx] = b[2] / 10.;
- iy++;
- } // if
-
- if (jy != -1 && jz == 1 && jy == 0 && izz == 1){
- x[1] = x[1] + 10.;
- fField->Field(x, b);
- xA [jx] = xc;
- bxxA[jx] = bx;
- byxA[jx] = by;
- bzxA[jx] = bz;
- bxxcA[jx] = b[0] / 10.;
- byxcA[jx] = b[1] / 10.;
- bzxcA[jx] = b[2] / 10.;
- ix++;
- } // if
-
-
- if (ireg == 181) {
- fField->Field(x, b);
-// printf("Field %f %f %f %f %f %f \n", x[0], x[1], x[2], b[0], b[1] , b[2]);
-
- bdl += stepsz * bx;
- bdlc += stepsz * b[0];
-
- zA [iz] = x[2];
- bxzA[iz] = bx;
- byzA[iz] = by;
- bzzA[iz] = bz;
- bxzcA[iz] = b[0] / 10.;
- byzcA[iz] = b[1] / 10.;
- bzzcA[iz] = b[2] / 10.;
- iz++;
- }
- } // if 1st header
- } // if C
- } // next line
- gStyle->SetOptStat(0);
- char title[128];
- sprintf(title, "File#: %5d, X = %13.2f m , Y = %13.2f m, Box Orientation: %2d", ifiles, xpos, ypos, iboxpos);
- TCanvas* c2 = new TCanvas("c2", title, 1200, 800);
- c2->Divide(2,2);
- c2->cd(1);
- TGraph* bxg = new TGraph(iz, zA, bxzA);
- TGraph* bxcg = new TGraph(iz, zA, bxzcA);
- bxcg->SetLineColor(2);
- bxzmg->Add(bxg);
- bxzmg->Add(bxcg);
- bxzmg->Draw("lA");
- bxzmg->GetHistogram()->SetXTitle("z[m]");
- bxzmg->GetHistogram()->SetYTitle("B_{x} [T]");
- bxzmg->Draw("lA");
-
- c2->cd(2);
- TGraph* byg = new TGraph(iz, zA, byzA);
- TGraph* bycg = new TGraph(iz, zA, byzcA);
- bycg->SetLineColor(2);
- byzmg->Add(byg);
- byzmg->Add(bycg);
- byzmg->Draw("lA");
- byzmg->GetHistogram()->SetXTitle("z[m]");
- byzmg->GetHistogram()->SetYTitle("B_{y} [T]");
- byzmg->Draw("lA");
-
- c2->cd(3);
- TGraph* bzg = new TGraph(iz, zA, bzzA);
- TGraph* bzcg = new TGraph(iz, zA, bzzcA);
- bzcg->SetLineColor(2);
- bzzmg->Add(bzg);
- bzzmg->Add(bzcg);
- bzzmg->Draw("lA");
- bzzmg->GetHistogram()->SetXTitle("z[m]");
- bzzmg->GetHistogram()->SetYTitle("B_{z} [T]");
- bzzmg->Draw("lA");
-
- c2->Update();
- char pictFile[64];
- sprintf(pictFile, "%s.gif", runName);
- c2->SaveAs(pictFile);
- //
- // Html generation
- //
- char htmlFile[64];
- sprintf(htmlFile, "%s.html", runName);
- FILE* chtml = fopen(htmlFile, "w");
- MakeHtmlHeaderPict(chtml);
- MakeHtmlPict(chtml, pictFile);
- MakeHtmlTableEntry(fHtmlMain, fileName, htmlFile, xpos, ypos, iboxpos, bdl, ifiles);
-
- //
- //
- printf("Bdl [Tm] %f %f \n", 2. * bdl, 2 * bdlc / 10.);
- } // files
- MakeHtmlTrailor(fHtmlMain);
- TFile* out = new TFile("fmap.root", "recreate");
- fMap->Write();
- out->Close();
-}
-
-void AliFieldReader::ReadMapSolenoid(){
-//
-// Read map for solenoid measurement
-//
- Float_t phiA[450], bzPhiA[200], brPhiA[200], btPhiA[200], bbPhiA[200];
- Float_t bzcPhiA[200], brcPhiA[200], btcPhiA[200], bbcPhiA[200];
- Char_t sLine[255];
- Char_t fLine[255];
-
- Float_t zpos, phipos, skewing, temp;
- Int_t ical;
- Float_t zmin, zmax;
- Float_t h[3], x[3], b[3];
- Int_t iret;
- Int_t ipos = 0;
-
- Init();
- ReadRegisterMapSolenoid();
- fMap = new TNtuple("Field Map", "Map",
- "r:phi:z:br:bt:bz:brc:btc:bzc:ifile:ireg:temp:cal:arm", 4000);
-
- //
- // Loop over files
- //
- Int_t ifiles = 0;
- // File catalogue
- while ((fgets(fLine, 255, fCatalogue)) != NULL && ifiles <= 2000) {
-
- if (strncmp(fLine,"#HEADER", 7) == 0) {
- iret = sscanf(&fLine[7],"%f", &fZStart);
- continue;
- }
- ifiles++;
-
- char fileName[32];
- iret = sscanf(fLine, "%s", fileName);
- printf("Reading File %s\n", fileName);
-
-// Get run name
- TString* tsFile = new TString(fileName);
- TObjArray * tokens = tsFile->Tokenize(".");
- Int_t n = tokens->GetEntries();
- char* runName = new char[256];
- sprintf(runName, "%s", (((TObjString*) tokens->At(0))->GetString()).Data());
- if (n > 2) {
- for (Int_t i = 1; i < n-1; i++)
- {
- sprintf(runName, "%s.%s",
- runName, (((TObjString*) tokens->At(i))->GetString()).Data());
- }
- }
- FILE* file = fopen(fileName, "r");
-
-
- Float_t bdl = 0.;
- Float_t bdlc = 0.;
- Int_t iA = 0;
- Int_t izz = 0;
- Int_t iphi = 0;
- // Graphs go here
- TMultiGraph* bxzmg = new TMultiGraph("bxzmg", "B_{z}");
- TMultiGraph* byzmg = new TMultiGraph("byzmg", "B_{r}");
- TMultiGraph* bzzmg = new TMultiGraph("bzzmg", "B_{t}");
- TMultiGraph* bbmg = new TMultiGraph("bbmg", "|B|");
-
- while ((fgets(sLine, 255, file)) != NULL) {
- if (strncmp(sLine," z", 2) == 0) {
- Int_t nsteps;
- iret = sscanf(&sLine[3],"%f %f %d", &zmin, &zmax, &nsteps);
- printf("zmin zmax %13.3f %13.3f %13.3f\n",
- zmin, zmax, TMath::Abs(zmax - zmin)/Float_t(nsteps));
- }
- if (strncmp(sLine," R\tPOSITION NUMBER", 18) == 0)
- {
- //
- // Current z-position
- TString string;
- TString* tsLine = new TString(sLine);
- TObjArray * tokens = tsLine->Tokenize("=");
- string = ((TObjString*) tokens->At(1))->GetString();
- iret = sscanf(string.Data(), "%f", &zpos);
- printf("POSITION NUMBER Z: %f\n", zpos);
- izz ++;
- delete tsLine;
- }
-
-
- if (strncmp(sLine," SKEWING ON Z:", 14) == 0)
- {
- //
- // Skew in z
- iret = sscanf(&sLine[14],"%f", &skewing);
- printf("SKEWING ON Z: %f\n", skewing);
- }
-
-
- if (strncmp(sLine,"Phi", 3) == 0)
- {
- Float_t phiStart, phiStop;
-
- iret = sscanf(&sLine[3],"%f %f", &phiStart, &phiStop);
-
- printf("phiStart phiStop %f %f\n", phiStart, phiStop);
-
- }
-
-
- if (strncmp(sLine," R\tPhi-Angle",12) == 0)
- {
- iret = sscanf(&sLine[12],"%e", &phipos);
- ipos = 0;
- iphi++;
- }
-
-
- if (strncmp(sLine,"C",1) == 0) {
-
- Int_t ireg;
- iret = sscanf(&sLine[2],"%d %f %f %f %f %d", &ireg, &h[0], &h[1], &h[2], &temp, &ical);
- ipos++;
-
- Int_t ir = fRegMap[ireg][0];
- Int_t ia = fRegMap[ireg][1];
- Float_t rpos = 0.;
-
-
- if (ia == 0) {
- rpos = 0.2295 + ir * 0.16;
- } else {
- if (ireg == 81) rpos = 0.2295;
- if (ireg == 59) rpos = 1.0295;
- if (ireg == 142) rpos = 2.1495;
- if (ireg == 180) rpos = 3.1095;
- if (ireg == 69) rpos = 4.2295;
-
- // if (ireg == 55) rpos = 0.2295;
- //if (ireg == 195) rpos = 1.0295;
- //if (ireg == 129) rpos = 2.1495;
- //if (ireg == 167) rpos = 3.1095;
- //if (ireg == 142) rpos = 4.2295;
- }
-
- Float_t phi = phipos;
- if (ia == 1) {
- phi += 180.;
- if (phi > 360.) phi -= 360.;
- }
-
- phi = - phi * TMath::Pi() / 180.;
- Float_t xpos = rpos * TMath::Cos(phi);
- Float_t ypos = rpos * TMath::Sin(phi);
- x[0] = - xpos * 100.;
- x[1] = ypos * 100.;
- x[2] = -400. + zpos * 100.;
-
- fField->Field(x, b);
- Float_t phi0 = TMath::Pi() - phi;
-
- Float_t brc = b[0] * TMath::Cos(phi0) + b[1] * TMath::Sin(phi0);
- Float_t btc = - b[0] * TMath::Sin(phi0) + b[1] * TMath::Cos(phi0);
- Float_t bzc = b[2];
-
- brc /= 10.;
- btc /= 10.;
- bzc /= 10.;
-
- fMap->Fill(rpos, -phi, -(615.5 - fZStart) / 100. + zpos, h[2], -h[1], h[0], brc, btc, bzc, ifiles, ireg, temp, Float_t(ical), Int_t(ia));
-
- if (ireg == 174) {
- printf("Field (Bx, By, Bz) at position %d: %13.3f %13.3f %13.3f %13.3f %13.3f %13.3f %5d\n",
- ipos, zpos, rpos, phipos, h[0], h[1], h[2], ia);
- if (izz == 1) {
- phiA[iA] = phi;
- bzPhiA[iA] = -h[0];
- brPhiA[iA] = h[2];
- btPhiA[iA] = -h[1];
- bbPhiA[iA] = TMath::Sqrt(h[0] * h[0] + h[1] * h[1] + h[2] * h[2]);
- bzcPhiA[iA] = bzc;
- brcPhiA[iA] = brc;
- btcPhiA[iA] = btc;
- bbcPhiA[iA] = TMath::Sqrt(brc * brc + bzc * bzc + btc * btc);
- iA++;
- }
- }
- } // if R
- } // next line
-
- gStyle->SetOptStat(0);
- char title[128];
- sprintf(title, "Z = %13.2f m , Phi = %13.2f m", zpos, phipos);
-
-
- TCanvas* c2 = new TCanvas("c2", title, 1200, 800);
-
- c2->Divide(2,2);
- c2->cd(1);
- TGraph* bzg = new TGraph(iA, phiA, bzPhiA);
- TGraph* bzcg = new TGraph(iA, phiA, bzcPhiA);
- bzcg->SetLineColor(2);
- bxzmg->Add(bzg);
- bxzmg->Add(bzcg);
- bxzmg->Draw("lA");
- bxzmg->GetHistogram()->SetXTitle("#phi[rad]");
- bxzmg->GetHistogram()->SetYTitle("B_{z} [T]");
- bxzmg->Draw("lA");
-
- c2->cd(2);
- TGraph* brg = new TGraph(iA, phiA, brPhiA);
- TGraph* brcg = new TGraph(iA, phiA, brcPhiA);
- brcg->SetLineColor(2);
- byzmg->Add(brcg);
- byzmg->Add(brg);
-
- byzmg->SetMaximum(0.03);
- byzmg->SetMinimum(-0.03);
- byzmg->Draw("lA");
- byzmg->GetHistogram()->SetXTitle("#phi[rad]");
- byzmg->GetHistogram()->SetYTitle("B_{r} [T]");
- byzmg->Draw("lA");
-
- c2->cd(3);
- TGraph* btg = new TGraph(iA, phiA, btPhiA);
- TGraph* btcg = new TGraph(iA, phiA, btcPhiA);
- btcg->SetLineColor(2);
- bzzmg->Add(btcg);
- bzzmg->Add(btg);
- bzzmg->Draw("lA");
- bzzmg->SetMaximum(0.03);
- bzzmg->SetMinimum(-0.03);
- bzzmg->GetHistogram()->SetXTitle("#phi[rad]");
- bzzmg->GetHistogram()->SetYTitle("B_{t} [T]");
- bzzmg->Draw("lA");
-
-
- c2->cd(4);
- TGraph* bg = new TGraph(iA, phiA, bbPhiA);
- TGraph* bcg = new TGraph(iA, phiA, bbcPhiA);
- bcg->SetLineColor(2);
- bbmg->Add(bg);
- bbmg->Add(bcg);
- bbmg->Draw("lA");
- bbmg->GetHistogram()->SetXTitle("#phi[rad]");
- bbmg->GetHistogram()->SetYTitle("|B| [T]");
- bbmg->Draw("lA");
-
-
-
-
- char pictFile[64];
- sprintf(pictFile, "%s.gif", runName);
- c2->SaveAs(pictFile);
-
- //
- // Html generation
- //
- char htmlFile[64];
- sprintf(htmlFile, "%s.html", runName);
- FILE* chtml = fopen(htmlFile, "w");
- MakeHtmlHeaderPict(chtml);
- MakeHtmlPict(chtml, pictFile);
- MakeHtmlTableEntry(fHtmlMain, fileName, htmlFile, zmin, zmax, ifiles, 0., 0);
-
- //
- //
- printf("Bdl [Tm] %f %f \n", 2. * bdl, 2 * bdlc / 10.);
- } // files
- MakeHtmlTrailor(fHtmlMain);
- TFile* out = new TFile("fmap.root", "recreate");
- fMap->Write();
- out->Close();
-}
-
-
-
-void AliFieldReader::MakeHtmlHeaderMain(FILE* file)
-{
-//
-// Write the header of the heml output
-//
- fprintf(file,"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
- fprintf(file, "<html>\n");
- fprintf(file, "<head>\n");
- fprintf(file, "<meta http-equiv=\"content-type\"\n");
- fprintf(file, "content=\"text/html; charset=ISO-8859-1\"\n");
- fprintf(file, "<title>main.html</title>\n");
- fprintf(file, "<\\head>\n");
- fprintf(file, "<body>\n");
- fprintf(file, "<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\"\n");
- fprintf(file, "style=\"text-align: left; width: 80;\">\n");
- fprintf(file, "<tbody>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">File# <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">File Name <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">X-Position <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">Y-Position <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">Box Orientation <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">B.dl <br></td>\n");
- fprintf(file, "<td style=\"vertical-align: top;\">Link to plots <br></td>\n");
-
-}
-
-void AliFieldReader::MakeHtmlHeaderPict(FILE* file)
-{
-//
-// Write header for picture
-//
- fprintf(file,"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
- fprintf(file, "<html>\n");
- fprintf(file, "<head>\n");
- fprintf(file, "<meta http-equiv=\"content-type\"\n");
- fprintf(file, "content=\"text/html; charset=ISO-8859-1\"\n");
- fprintf(file, "<title>main.html</title>\n");
- fprintf(file, "</head>\n");
- fprintf(file, "<body>\n");
-}
-
-void AliFieldReader:: MakeHtmlPict(FILE* chtml, char* pictFile)
-{
-//
-// Write html for including picture
-//
- fprintf(chtml, "<img src=\"./%s\" alt=\"%s\" style=\"width: 1196px; height: 772px;\">\n",
- pictFile, pictFile);
-
- fprintf(chtml, "<br> <br> <br>\n");
- fprintf(chtml, "<a href=\"./bmap.html\">Back to main page</a><br>\n");
-
- fprintf(chtml, "</body>\n");
- fprintf(chtml, "</header>\n");
- fclose(chtml);
-}
-
-void AliFieldReader::MakeHtmlTableEntry(FILE* htmlmain, char* fileName, char* htmlFile, Float_t x, Float_t y, Int_t i, Float_t bdl, Int_t ifile)
-{
- fprintf(htmlmain, "<tr>\n");
-//
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%5d</td>\n", ifile);
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%s</td>\n", fileName);
-
-//
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%13.2f</td>\n",x);
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%13.2f</td>\n",y);
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%3d </td>\n",i);
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">%13.3f</td>\n",bdl);
-//
- fprintf(htmlmain, "<td style=\"vertical-align: top;\">\n");
- fprintf(htmlmain, "<span style=\"text-decoration: underline;\"><a href=\"./%s\">gif</a></span></td>\n", htmlFile);
- fprintf(htmlmain, "</tr>\n");
-}
-
-
-void AliFieldReader::MakeHtmlTrailor(FILE* htmlmain)
-{
-//
-// Write the html trailor
-//
- fprintf(htmlmain, "</tbody>\n");
- fprintf(htmlmain, "</table>\n");
- fprintf(htmlmain, "</body>\n");
- fprintf(htmlmain, "</header>\n");
- fclose(htmlmain);
-}
-
-void AliFieldReader::ReadRegisterMap()
-{
-//
-// Read the register map
-//
- FILE* regmap = fopen("register.map", "r");
- Int_t ireg;
- for (ireg = 0; ireg < 200; ireg++) {
- fRegMap[ireg][0] = -1;
- fRegMap[ireg][1] = -1;
- fRegMap[ireg][2] = -1;
- }
- for (Int_t iz = 0; iz < 2; iz++) {
- for (Int_t iy = 2; iy >= 0; iy--) {
- for (Int_t ix = 0; ix < 10; ix++) {
- fscanf(regmap, "%d\n", &ireg);
- printf("Address %5d %5d %5d %5d \n", iz, iy, ix, ireg);
- fRegMap[ireg][1] = iy;
- fRegMap[ireg][2] = iz;
- if (iz == 1) {
- fRegMap[ireg][0] = ix;
- } else {
- fRegMap[ireg][0] = 9 - ix;
- }
- } // ix
- } // iy
- } // iz
- fclose(regmap);
- printf("-> ReadRegisterMap()\n\n");
-}
-
-
-void AliFieldReader::ReadRegisterMapSolenoid()
-{
-//
-// Read the register map
-//
- FILE* regmap = fopen("register.map", "r");
- Int_t ireg;
-
-// Initialize
- for (ireg = 0; ireg < 200; ireg++) {
- fRegMap[ireg][0] = -1;
- fRegMap[ireg][1] = -1;
- fRegMap[ireg][2] = -1;
- }
-
-// Main arm
- for (Int_t ir = 0; ir < 33; ir++) {
- fscanf(regmap, "%d\n", &ireg);
- fRegMap[ireg][0] = ir;
- fRegMap[ireg][1] = 0;
- }
-// Opposite arm
- for (Int_t ir = 0; ir < 5; ir++) {
- fscanf(regmap, "%d\n", &ireg);
- fRegMap[ireg][0] = ir;
- fRegMap[ireg][1] = 1;
- }
-
- fclose(regmap);
-
-}
-
-
-AliFieldReader& AliFieldReader::operator=(const AliFieldReader& rhs)
-{
-// Assignment operator
- rhs.Copy(*this);
- return *this;
-}
-
-
-void AliFieldReader::Copy( TObject&) const
-{
- //
- // Copy
- //
- Fatal("Copy","Not implemented!\n");
-}
+++ /dev/null
-/**************************************************************************
- * 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. *
- **************************************************************************/
-
-/* $Id$ */
-
-//-------------------------------------------------------------------------
-// MUON shielding class
-// Version producing Fluka output
-// Author: A.Morsch
-//-------------------------------------------------------------------------
-
-#include <TVirtualMC.h>
-#include <TArrayI.h>
-
-#include "AliSHILvF.h"
-#include "AliConst.h"
-#include "AliALIFE.h"
-#include "AliLog.h"
-
-ClassImp(AliSHILvF)
-
-
-//_____________________________________________________________________________
-AliSHILvF::AliSHILvF():
- fPbCone(kTRUE),
- fWriteGeometry(kTRUE)
-{
- //
- // Default constructor for muon shield
- //
-}
-
-//_____________________________________________________________________________
-AliSHILvF::AliSHILvF(const char *name, const char *title)
- : AliSHIL(name,title),
- fPbCone(kTRUE),
- fWriteGeometry(kTRUE)
-{
- //
- // Standard constructor for muon shield
- //
- // Pb cone not yet compatible with muon chamber inner radii
- // Switched off by default
-}
-
-//_____________________________________________________________________________
-void AliSHILvF::CreateGeometry()
-{
- //
- // Build muon shield geometry
- //
- //
- //Begin_Html
- /*
- <img src="picts/AliSHILvF.gif">
- */
- //End_Html
- //Begin_Html
- /*
- <img src="picts/AliSHILvFTree.gif">
- */
- //End_Html
-
- Float_t cpar[5], cpar0[5], tpar[3], par1[100], pars1[100], par2[100], par3[100],
- par4[24], par0[100];
- Float_t dz, dZ;
-
- Int_t *idtmed = fIdtmed->GetArray()-1699;
-
-#include "ABSOSHILConst.h"
-#include "SHILConst.h"
-
-const Float_t kDRSteel1=2.;
-
-enum {kC=1705, kAl=1708, kFe=1709, kCu=1710, kW=1711, kPb=1712,
- kNiCuW=1720, kVacuum=1715, kAir=1714, kConcrete=1716,
- kPolyCH2=1717, kSteel=1709, kInsulation=1713};
-//
-// Material of the rear part of the shield
- Int_t iHeavy=kNiCuW;
- if (fPbCone) iHeavy=kPb;
-//
-//
-// begin Fluka
- Int_t i=0,ifl=0;
- Float_t posfluka[3]={0., 0., 0.};
- Float_t zfluka[12], rfluka1[12], rfluka2[12], rfluka3[12] ;
- AliALIFE* flukaGeom = 0;
-
- if (fWriteGeometry) {
- flukaGeom = new AliALIFE("beamshield.alife", "beamshield_vol.inp");
- }
-
-//
-// end Fluka
-
-
-//
-// Mother volume
-//
- Float_t dRear1=kDRear;
-
- Float_t zstart=kZRear-dRear1;
-
- par0[0] = 0.;
- par0[1] = 360.;
- par0[2] = 28.;
-
- Float_t dl=(kZvac12-zstart)/2.;
- dz=zstart+dl;
-//
-// start
- par0[3] = -dl;
- par0[4] = 0.;
- par0[5] = zstart * TMath::Tan(kAccMin);
-// recess station 1
- par0[6] = -dz+kZch11;
- par0[7] = 0.;
- par0[8] = kZch11 * TMath::Tan(kAccMin);
-
- par0[9] = par0[6];
- par0[10] = 0.;
- par0[11] = 17.9;
-
- par0[12] = -dz+kZch12;
- par0[13] = 0.;
- par0[14] = 17.9;
-
- par0[15] = par0[12];
- par0[16] = 0.;
- par0[17] = kZch12 * TMath::Tan(kAccMin);
-// recess station 2
- par0[18] = -dz+kZch21;
- par0[19] = 0.;
- par0[20] = kZch21 * TMath::Tan(kAccMin);
-
- par0[21] = -dz+kZch21;
- par0[22] = 0.;
- par0[23] = 23.;
-
- par0[24] = -dz+kZch22;
- par0[25] = 0.;
- par0[26] = 23.;
-
- par0[27] = -dz+kZch22;
- par0[28] = 0.;
- par0[29] = kZch22 * TMath::Tan(kAccMin);
-//
- par0[30] = -dz+kZvac6;
- par0[31] = 0.;
- par0[32] = kZvac6 * TMath::Tan(kAccMin);
-// end of 2 deg cone
- par0[33] = -dz+kZConeE;
- par0[34] = 0.;
- par0[35] = 30.;
-
- par0[36] = -dz+kZch31;
- par0[37] = 0.;
- par0[38] = 30.;
-
- par0[39] = -dz+kZch31;
- par0[40] = 0.;
- par0[41] = 29.;
-
- par0[42] = -dz+kZch32;
- par0[43] = 0.;
- par0[44] = 29.;
-// start of 1.6 deg cone
- par0[45] = -dz+kZch32;
- par0[46] = 0.;
- par0[47] = 30.+(kZch32-kZConeE)*TMath::Tan(kThetaOpenPbO);
-// recess station 4
- par0[48] = -dz+kZch41;
- par0[49] = 0.;
- par0[50] = 30.+(kZch41-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
- par0[51] = -dz+kZch41;
- par0[52] = 0.;
- par0[53] = 37.5;
-
- par0[54] = -dz+kZch42;
- par0[55] = 0.;
- par0[56] = 37.5;
-
- par0[57] = -dz+kZch42;
- par0[58] = 0.;
- par0[59] = 30.+(kZch42-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
-// recess station 5
-
- par0[60] = -dz+kZch51;
- par0[61] = 0.;
- par0[62] = 30.+(kZch51-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
- par0[63] = -dz+kZch51;
- par0[64] = 0.;
- par0[65] = 37.5;
-
- par0[66] = -dz+kZch52;
- par0[67] = 0.;
- par0[68] = 37.5;
-
- par0[69] = -dz+kZch52;
- par0[70] = 0.;
- par0[71] = 30.+(kZch52-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
-// end of cone
-
- par0[72] = -dz+kZvac10;
- par0[73] = 0.;
- par0[74] = 30.+(kZvac10-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
- par0[75] = -dz+kZvac10;
- par0[76] = 0.;
- par0[77] = kR42;
-
- par0[78] = -dz+kZvac11;
- par0[79] = 0.;
- par0[80] = kR42;
-
- par0[81] = -dz+kZvac11;
- par0[82] = 0.;
- par0[83] = kR43;
-
- par0[84] = -dz+kZvac12;
- par0[85] = 0.;
- par0[86] = kR43;
-
- gMC->Gsvolu("YMOT", "PCON", idtmed[kVacuum], par0, 87);
- dz=zstart+dl;
- gMC->Gspos("YMOT", 1, "ALIC", 0., 0., dz, 0, "ONLY");
-//
-
- dZ=-dl;
-
-//
-// First section: bellows below and behind front absorber
-//
-//
- par1[0] = 0.;
- par1[1] = 360.;
- par1[2] = 12.;
- dl=(kZvac4-zstart)/2.;
-
- par1[3] = -dl;
- par1[4] = kRAbs+(zstart-kZOpen) * TMath::Tan(kThetaOpen1);
- par1[5] = zstart * TMath::Tan(kAccMin);
-
- par1[6] = -dl+kZvac1-zstart;
- par1[7] = kRAbs+ (kZvac1-kZOpen) * TMath::Tan(kThetaOpen1);
- par1[8] = kZvac1 * TMath::Tan(kAccMin);
-
- par1[9] = par1[6]+kDr11/2.;
- par1[10] = par1[7]+kDr11;
- par1[11] = (kZvac1+kDr11/2.) * TMath::Tan(kAccMin);
-
- par1[12] = -dl+dRear1;
- par1[13] = par1[10];
- par1[14] = kZRear * TMath::Tan(kAccMin);
-
- par1[15] = -dl+dRear1;
- par1[16] = par1[10];
- par1[17] = kR11;
-
- par1[18] = -dl+(kZvac1+kDr11+kDB1-zstart);
- par1[19] = par1[16];
- par1[20] = kR11;
-
- par1[21] = par1[18]+kDr12;
- par1[22] = par1[19]+kDr12;
- par1[23] = kR11;
-
- par1[24] = par1[21]+kDF1;
- par1[25] = par1[22];
- par1[26] = kR11;
-
- par1[27] = par1[24]+kDr12;
- par1[28] = par1[25]-kDr12;
- par1[29] = kR11;
-
- par1[30] = par1[27]+kDB1;
- par1[31] = par1[28];
- par1[32] = kR11;
-
- par1[33] = par1[30]+kDr13;
- par1[34] = par1[31]-kDr13;
- par1[35] = kR11;
-
- par1[36] = -dl+kZvac4-zstart;
- par1[37] = par1[34];
- par1[38] = kR11;
-
- Float_t r2 = par1[37];
- Float_t rBox= par1[31]-0.1;
- Float_t rc1 = par1[7];
-
- gMC->Gsvolu("YGO1", "PCON", idtmed[kNiCuW], par1, 39);
-
-//
-// begin Fluka
- Float_t rfluka0[8]={rBox,rBox,rBox,rBox,rBox,rBox,rBox,rBox};
- if (fWriteGeometry) {
- for (ifl=0; ifl<12; ifl++) {
- zfluka[ifl]=par1[3+3*ifl]+dl+kZRear-kDRear;
- rfluka1[ifl] = par1[4+3*ifl];
- rfluka2[ifl] = par1[5+3*ifl];
- if (ifl > 3) rfluka2[ifl]=rfluka2[ifl]-kDRSteel1;
- }
- flukaGeom->Comment("1st part: Shield");
-// Use default for first three cones
- flukaGeom->SetDefaultVolume("*ACR02");
- rfluka2[0]=rfluka2[1]=rfluka2[2]=-1;
-//
- flukaGeom->Comment("Shield");
- flukaGeom->PolyCone(rfluka1, rfluka2, zfluka, 12, posfluka, "NIW", "MF", "$SHS");
- flukaGeom->Comment("Vacuum");
- flukaGeom->PolyCone(rfluka0, rfluka1+2, zfluka+2, 8, posfluka, "VACUUM", "MF", "$SHS");
- }
-
-//
-// end Fluka
-
-
- for (i=0; i<39; i++) {
- pars1[i] = par1[i];
- }
-
- for (i=4; i<38; i+=3) pars1[i] = 0.;
-
- gMC->Gsvolu("YMO1", "PCON", idtmed[kVacuum+40], pars1, 39);
- gMC->Gspos("YGO1", 1, "YMO1", 0., 0., 0., 0, "ONLY");
- dZ+=dl;
- gMC->Gspos("YMO1", 1, "YMOT", 0., 0., dZ, 0, "ONLY");
- dZ+=dl;
-
-//
-// Steel envelope
- tpar[0]=kR11-kDRSteel2;
- tpar[1]=kR11;
- tpar[2]=(kZvac4-kZvac3)/2.;
- gMC->Gsvolu("YSE1", "TUBE", idtmed[kNiCuW], tpar, 3);
- dz=dl-tpar[2];
- gMC->Gspos("YSE1", 1, "YGO1", 0., 0., dz, 0, "ONLY");
-
-
-// begin Fluka
- if (fWriteGeometry) {
- flukaGeom->Comment("1st part: Steel Envelope");
- flukaGeom->Cylinder(tpar[0], tpar[1], kZRear, kZvac4, posfluka, "NIW", "MF", "$SHS");
- }
-
-//
-// end Fluka
-
-//
-// 1st section: vacuum system
-//
-//
-// Bellow 1
-//
- tpar[0]=kRB1;
- tpar[1]=kRB1+kHB1;
- tpar[2]=kEB1/2.;
- gMC->Gsvolu("YB11", "TUBE", idtmed[kSteel+40], tpar, 3);
- Float_t dl1=tpar[2];
-
- tpar[0]=kRB1+kHB1-kEB1;
- tpar[1]=kRB1+kHB1;
- tpar[2]=(kLB1/2.-2.*kEB1)/2.;
- gMC->Gsvolu("YB12", "TUBE", idtmed[kSteel+40], tpar, 3);
- Float_t dl2=tpar[2];
-
- tpar[0]=kRB1-kEB1;
- tpar[1]=kRB1;
- tpar[2]=kLB1/8.;
- gMC->Gsvolu("YB13", "TUBE", idtmed[kSteel+40], tpar, 3);
- Float_t dl3=tpar[2];
-
-
- tpar[0]=0;
- tpar[1]=kRB1+kHB1;
- tpar[2]=-kLB1/2.;
- gMC->Gsvolu("YBU1", "TUBE", idtmed[kVacuum+40], tpar, 3);
-
- dz=-kLB1/2.+dl3;
- gMC->Gspos("YB13", 1, "YBU1", 0., 0., dz, 0, "ONLY");
- dz+=dl3;
- dz+=dl1;
- gMC->Gspos("YB11", 1, "YBU1", 0., 0., dz, 0, "ONLY");
- dz+=dl1;
- dz+=dl2;
- gMC->Gspos("YB12", 1, "YBU1", 0., 0., dz, 0, "ONLY");
- dz+=dl2;
- dz+=dl1;
- gMC->Gspos("YB11", 2, "YBU1", 0., 0., dz, 0, "ONLY");
- dz+=dl1;
- dz+=dl3;
- gMC->Gspos("YB13", 2, "YBU1", 0., 0., dz, 0, "ONLY");
-
-
- tpar[0]=0;
- tpar[1]=kRB1+kHB1+0.5;
- tpar[2]=12.*kLB1/2.;
- gMC->Gsvolu("YBM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
- gMC->Gsdvn("YB1S", "YBM1", 12 , 3);
-
- Float_t bsize = tpar[2];
- tpar[0]=kRB1+kHB1;
- tpar[2]=-kLB1/2.;
- gMC->Gsvolu("YBI1", "TUBE", idtmed[kInsulation+40], tpar, 3);
-
- gMC->Gspos("YBI1", 1, "YB1S", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("YBU1", 1, "YB1S", 0., 0., 0., 0, "ONLY");
-
- dz=-dl+(kZvac1-zstart)+kDr11/2.+bsize;
- gMC->Gspos("YBM1", 1, "YMO1", 0., 0., dz, 0, "ONLY");
-
-// dz=dl-kDr13-(kZvac4-kZvac3)-bsize;
-// gMC->Gspos("YBM1", 2, "YMO1", 0., 0., dz, 0, "ONLY");
-
-
-//
-// Flange
-
- tpar[0]=0;
- tpar[1]=kRF1+0.6;
- tpar[2]=kDF1/2.;
- gMC->Gsvolu("YFM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
-// Steel
- tpar[0]=kRB1;
- tpar[1]=kRF1+0.6;
- tpar[2]=kDF1/2.;
- gMC->Gsvolu("YF11", "TUBE", idtmed[kSteel+40], tpar, 3);
-// Insulation
- tpar[0]=kRF1;
- tpar[1]=kRF1+0.5;
- tpar[2]=kDF1/2.;
- gMC->Gsvolu("YF12", "TUBE", idtmed[kInsulation+40], tpar, 3);
-
-
- gMC->Gspos("YF11", 1, "YFM1", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("YF12", 1, "YFM1", 0., 0., 0., 0, "ONLY");
-
- dz=-dl+(kZvac1-zstart)+kDr11/2.+2.*bsize+kDF1/2.+3.;
- gMC->Gspos("YFM1", 2, "YMO1", 0., 0., dz, 0, "ONLY");
-
-//
-// pipe between flange and bellows
-//
-// Steel
- tpar[0]=kRB1-dTubeS;
- tpar[1]=kRB1+0.6;
- tpar[2]=1.5;
- gMC->Gsvolu("YPF1", "TUBE", idtmed[kSteel+40], tpar, 3);
-// Insulation
- tpar[0]=kRB1;
- tpar[1]=kRB1+0.5;
- gMC->Gsvolu("YPS1", "TUBE", idtmed[kInsulation+40], tpar, 3);
- gMC->Gspos("YPS1", 1, "YPF1", 0., 0., 0., 0, "ONLY");
-
- dz=dz-1.5-kDF1/2.;
- gMC->Gspos("YPF1", 1, "YMO1", 0., 0., dz, 0, "ONLY");
- dz=dz+3.0+kDF1;
- gMC->Gspos("YPF1", 2, "YMO1", 0., 0., dz, 0, "ONLY");
-
-//
-// begin Fluka
- Float_t z1, z2, zcy1, zcy2, zfl;
-
- if (fWriteGeometry) {
- flukaGeom->Comment("First Bellow");
- z1=kZvac1+kDr11;
- for (i=0; i<10; i++) {
- z2=z1+kEB1;
- flukaGeom->Cylinder(0., kRB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kHB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
-
- z1=z2;
- z2+=kLB1/2.-kEB1;
- flukaGeom->Cylinder(0., kRB1+kHB1-kEB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kHB1-kEB1, kRB1+kHB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2=z1+kEB1;
- flukaGeom->Cylinder(0., kRB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kHB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2+=kLB1/2.-kEB1;
- flukaGeom->Cylinder(0., kRB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kEB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kEB1, kRB1+kHB1, z1, z2, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- }
- flukaGeom->Cylinder(kRB1+kHB1, kRB1+kHB1+0.5, kZvac1+kDr11, z1, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kHB1+0.5, rBox, kZvac1+kDr11, z1, posfluka, "AIR", "MF", "$SHH");
- zcy1=z1;
-
-
- flukaGeom->Comment("Second Bellow");
- z1=kZvac3-kDr13;
- for (i=0; i<10; i++) {
- z2=z1-kEB1;
- flukaGeom->Cylinder(0., kRB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kHB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2-=kLB1/2.-kEB1;
- flukaGeom->Cylinder(0., kRB1+kHB1-kEB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kHB1-kEB1, kRB1+kHB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2=z1-kEB1;
- flukaGeom->Cylinder(0., kRB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kHB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2-=kLB1/2.-kEB1;
- flukaGeom->Cylinder(0., kRB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+kEB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kEB1, kRB1+kHB1, z2, z1, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- }
- flukaGeom->Cylinder(kRB1+kHB1, kRB1+kHB1+0.5, z1, kZvac3-kDr13, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+kHB1+0.5, rBox, z1, kZvac3-kDr13, posfluka, "AIR", "MF", "$SHH");
-
- zcy2=z1;
- flukaGeom->Comment("Flange");
- zfl=(zcy1+zcy2)/2.;
-
- z1=zfl-kDF1/2.;
- z2=zfl+kDF1/2.;
- flukaGeom->Cylinder(0.,kRF1-2. , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1-2., kRF1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1, kRF1+0.05 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1+0.05, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z2=z1;
- z1=z2-kDFlange;
- flukaGeom->Cylinder(0.,kRB1 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRF1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1, kRF1+0.5 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1+0.5, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z2=z1;
- z1=zcy1;
- flukaGeom->Cylinder(0.,kRB1 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+0.1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+0.1, kRB1+0.6 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+0.6, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
-
- z1=zfl+kDF1/2.;
- z2=z1+kDFlange;
- flukaGeom->Cylinder(0.,kRB1 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRF1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1, kRF1+0.5 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF1+0.5, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- z2=zcy2;
- flukaGeom->Cylinder(0.,kRB1 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1, kRB1+0.1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+0.1, kRB1+0.6 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB1+0.6, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- }
-// end Fluka
-//
-
-// Pipe+Heating 1.5 mm
-// Heating Jacket 5.0 mm
-// Protection 1.0 mm
-// ========================
-// 7.5 mm
-// pipe and heating jackets outside bellows
-//
-// left side
- cpar0[0]=(kZvac1+kDr11/2.-zstart)/2;
- cpar0[1]=kRVacu-0.05 +(zstart-kZOpen)*TMath::Tan(kThetaOpen1);
- cpar0[2]=kRVacu+0.7 +(zstart-kZOpen)*TMath::Tan(kThetaOpen1);
- cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(kThetaOpen1);
- cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(kThetaOpen1);
- gMC->Gsvolu("YV11", "CONE", idtmed[kSteel+40], cpar0, 5);
-//
-// insulation
- dTubeS=0.15;
- cpar[0]=cpar0[0];
- cpar[1]=cpar0[1]+0.15;
- cpar[2]=cpar0[1]+0.65;
- cpar[3]=cpar0[3]+0.15;
- cpar[4]=cpar0[3]+0.65;
- gMC->Gsvolu("YI11", "CONE", idtmed[kInsulation+40], cpar, 5);
- gMC->Gspos("YI11", 1, "YV11", 0., 0., 0., 0, "ONLY");
- dz=-dl+cpar0[0];
- gMC->Gspos("YV11", 1, "YMO1", 0., 0., dz, 0, "ONLY");
-
-// begin Fluka
-//
- Float_t rf1[10], rf2[10];
- const char* materialsA[7]
- = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "AIR"};
- const char* fieldsA[7]
- = {"MF", "MF", "MF", "MF", "MF", "MF"};
- const char* cutsA[7]
- = {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH"};
-
- if (fWriteGeometry) {
- rf1[0]=0.; rf2[0]=0.;
- rf1[1] = cpar0[1];
- rf2[1] = cpar0[3];
-
-
- rf1[2]=rf1[1]+0.15; rf1[3]=rf1[2]+0.5; rf1[4]=rf1[3]+0.1;
- rf1[5]=par1[4];
- rf2[2]=rf2[1]+0.15; rf2[3]=rf2[2]+0.5; rf2[4]=rf2[3]+0.1;
- rf2[5]=par1[7];
-
-
- flukaGeom->Comment("1st part: Beam pipe lateral struture (left)");
- flukaGeom->OnionCone(rf1, rf2, 6 , zstart, kZvac1, posfluka, materialsA, fieldsA, cutsA);
- for (i=0; i<6; i++) rf1[i]=rf2[i];
- for (i=1; i<6; i++) rf2[i]=rf1[i]+kDr11*TMath::Tan(kThetaOpen1);
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac1, kZvac1+kDr11, posfluka, materialsA, fieldsA, cutsA);
- flukaGeom->Cone(rc1, rf2[5], rc1, rc1+kDr11, kZvac1 , kZvac1+kDr11, posfluka,"AIR", "MF", "$SHH");
- }
-
-//
-// end Fluka
-
-
-// right side
- dTubeS = 0.35;
- dVacuS += 0.25;
-
- cpar0[0] = (kZvac4-kZvac3)/2;
- cpar0[1] = kRB1;
- cpar0[2] = cpar0[1]+dVacuS;
- cpar0[3] = cpar0[1]+2.*cpar0[0]*TMath::Tan(kThetaOpenB);
- cpar0[4] = cpar0[2]+2.*cpar0[0]*TMath::Tan(kThetaOpenB);
- gMC->Gsvolu("YV12", "CONE", idtmed[kSteel], cpar0, 5);
- Float_t r2V=cpar0[3];
-//
-// insulation
- cpar[0] = cpar0[0];
- cpar[1] = cpar0[1]+dTubeS;
- cpar[2] = cpar0[1]+dTubeS+kDInsuS;
- cpar[3] = cpar0[3]+dTubeS;
- cpar[4] = cpar0[3]+dTubeS+kDInsuS;
- gMC->Gsvolu("YI12", "CONE", idtmed[kInsulation], cpar, 5);
- gMC->Gspos("YI12", 1, "YV12", 0., 0., 0., 0, "ONLY");
-
- dz=dl-cpar0[0];
- gMC->Gspos("YV12", 1, "YMO1", 0., 0., dz, 0, "ONLY");
-
-//
-// begin Fluka
- const char* materialsB[5]
- = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR"};
-
- const char* fieldsB[5]
- = {"MF", "MF", "MF", "MF", "MF"};
-
- const char* cutsB[5]
- = {"$SHH","$SHH","$SHH","$SHH","$SHH"};
-
- if (fWriteGeometry) {
-
- rf1[0]=rf2[0]=0.;
- rf1[1]=cpar0[1];
- rf2[1]=cpar0[3];
-
- rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5]=r2;
-
- rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+kDInsuS; rf2[4]=rf2[3]+kDEnveS;
- rf2[5]=r2;
- flukaGeom->Comment("1st part: Beam pipe lateral structure (right)");
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac3, kZvac4, posfluka, materialsB, fieldsB, cutsB);
- for (i=0; i<6; i++) rf2[i]=rf1[i];
- for (i=1; i<5; i++) rf1[i]=rf2[i];
- rf1[5]=rf2[5]+kDr13;
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac3-kDr13, kZvac3, posfluka, materialsB, fieldsB, cutsB);
- }
-
-//
-// end Fluka
-
-//
-// Second Section
-// Between first and second bellow section
-//
-
- par2[0] = 0.;
- par2[1] = 360.;
- par2[2] = 11.;
- dl=(kZvac7-kZvac4)/2.;
-// recess station 2
- par2[3] = -dl;
- par2[4] = r2;
- par2[5] = kR21;
-
- par2[6] = -dl+.1;
- par2[7] = r2;
- par2[8] = kR21;
-
- par2[9] = -dl+(kZvac6-kZvac4);
- par2[10] = r2+(kZvac6-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[11] = kR21;
-
- par2[12] = -dl+(kZvac6-kZvac4);
- par2[13] = par2[10];
- par2[14] = kZvac6*TMath::Tan(kAccMin);
-
-// Start of Pb section
- par2[15] = -dl+(kZPb-kZvac4);
- par2[16] = r2+(kZPb-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[17] = kZPb*TMath::Tan(kAccMin);
-//
-// end of cone following 2 deg line
- par2[18] = -dl+(kZConeE-kZvac4);
- par2[19] = r2+(kZConeE-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[20] = 30.;
-// recess station 3
- par2[21] = -dl+(kZch31-kZvac4);
- par2[22] = r2+(kZch31-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[23] = 30.;
-
- par2[24] = -dl+(kZch31-kZvac4);
- par2[25] = r2+(kZch31-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[26] = 29.;
-
- par2[27] = -dl+(kZch32-kZvac4);
- par2[28] = r2+(kZch32-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[29] = 29.;
-
- par2[30] = -dl+(kZch32-kZvac4);
- par2[31] = r2+(kZch32-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[32] = 30.;
-
- par2[33] = -dl+(kZvac7-kZvac4);
- par2[34] = r2+(kZvac7-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- par2[35] = 30.;
-
- gMC->Gsvolu("YGO2", "PCON", idtmed[kSteel+40], par2, 36);
-
-//
-// begin Fluka
- Float_t r3V = 0.;
-
- if (fWriteGeometry) {
- const char* materials1[8]
- = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "NIW", "NIW", "STEEL"};
- const char* fields1[8]
- = {"MF", "MF", "MF", "MF", "MF", "MF", "MF", "MF"};
- const char* cuts1[8]
- = {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH"};
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (0)");
- // until end of recess 1
- rf1[0] = 0.; rf1[1] = r2V; rf1[2] = rf1[1] + dTubeS; rf1[3] = rf1[2] + kDInsuS;
- rf1[4] = rf1[3] + kDEnveS; rf1[5] = r2; rf1[6] = rf1[5]+2.;
- rf1[7] = kR11-kDRSteel1; rf1[8] = kR21;
-
- for (i=1; i<7; i++) rf2[i]=rf1[i]+4.*TMath::Tan(kThetaOpenB);
- rf2[7] = rf1[7];
- rf2[8] = rf1[8];
- flukaGeom->OnionCone(rf1, rf2, 9 , kZvac4, kZvac4+4, posfluka, materials1, fields1, cuts1);
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (1)");
- // until end of recess 2
- for (i=0; i<9; i++) rf1[i]=rf2[i];
- rf1[7] = kR21-kDRSteel2; rf1[8] = kR21;
- for (i=1; i<9; i++) rf2[i]=rf1[i]+(kZvac6-kZvac4-4.)*TMath::Tan(kThetaOpenB);
- rf2[7] = rf1[7];
- rf2[8] = rf1[8];
- flukaGeom->OnionCone(rf1, rf2, 9 , kZvac4+4, kZvac6, posfluka, materials1, fields1, cuts1);
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (2)");
- // steel recess
- for (i=0; i<9; i++) rf1[i]=rf2[i];
- rf1[8] = kZvac6*TMath::Tan(kAccMin);
- rf1[7] = kR21-kDRSteel2;
-
- for (i=1; i<9; i++) rf2[i]=rf1[i]+4.*TMath::Tan(kThetaOpenB);
- rf2[7] = rf1[7];
-
- rf2[8] = -(rf1[8]+4.*TMath::Tan(kAccMin));
- rf1[8] = -rf1[8];
-
- flukaGeom->OnionCone(rf1, rf2, 9 , kZvac6, kZvac6+4, posfluka, materials1, fields1, cuts1);
- rf1[8] = -rf1[8];
- rf2[8] = -rf2[8];
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (3)");
- // until start of lead section
- for (i=0; i<9; i++) rf1[i]=rf2[i];
- for (i=1; i<9; i++) rf2[i]=rf1[i]+(kZPb-kZvac6-4.)*TMath::Tan(kThetaOpenB);
- rf1[7] = rf1[8] - kDRSteel2;
- rf2[8] = rf1[8] + (kZPb-kZvac6-4.)*TMath::Tan(kAccMin);
- rf2[7] = rf2[8] - kDRSteel2;
-
- rf1[8]=-rf1[8];
- rf2[8]=-rf2[8];
- flukaGeom->OnionCone(rf1, rf2, 9 , kZvac6+4, kZPb, posfluka, materials1, fields1, cuts1);
- rf1[8]=-rf1[8];
- rf2[8]=-rf2[8];
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (4)");
- // until end of 2deg
- materials1[5] = "LEAD";
- materials1[6] = "LEAD";
- for (i=0; i<9; i++) rf1[i]=rf2[i];
- for (i=1; i<9; i++) rf2[i]=rf1[i]+(kZConeE-kZPb)*TMath::Tan(kThetaOpenB);
- rf1[8] = -rf1[8];
- rf2[8] = -30.;
- rf2[7] = 26.;
- flukaGeom->OnionCone(rf1, rf2, 9 , kZPb, kZConeE, posfluka, materials1, fields1, cuts1);
- rf1[8]=-rf1[8];
- rf2[8]=-rf2[8];
-
- flukaGeom->Comment("2nd part: Beam shield lateral struture (4)");
- // until end of this section
- for (i=0; i<9; i++) rf1[i]=rf2[i];
- for (i=1; i<9; i++) rf2[i]=rf1[i]+(kZvac7-kZConeE)*TMath::Tan(kThetaOpenB);
- rf2[8] = 30;
- rf2[7] = 26;
- flukaGeom->OnionCone(rf1, rf2, 9 , kZConeE, kZvac7, posfluka, materials1, fields1, cuts1);
-
- r3V = rf2[1];
- }
-
-// end Fluka
-
-//
-// Lead cone
-//
- Float_t parPb[18];
- parPb[ 0] = 0.;
- parPb[ 1] = 360.;
- parPb[ 2] = 5.;
- Float_t dlPb=(kZvac7-kZPb)/2.;
-
- parPb[ 3] = -dlPb;
- parPb[ 4] = r2+(kZPb-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- parPb[ 5] = kZPb*TMath::Tan(kAccMin)-kDRSteel2;
-
- parPb[ 6] = -dlPb+(kZConeE-kZPb);
- parPb[ 7] = r2+(kZConeE-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- parPb[ 8] = 26.;
-
- parPb[ 9] = -dlPb+(kZch32+4.-kZPb);
- parPb[10] = r2+(kZch32+4.-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- parPb[11] = 26.;
-
- parPb[12] = -dlPb+(kZch32+4.-kZPb);
- parPb[13] = r2+(kZch32+4.-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- parPb[14] = 30.;
-
- parPb[15] = dlPb;
- parPb[16] = r2+(kZvac7-kZvac4-10.) * TMath::Tan(kThetaOpen2);
- parPb[17] = 30.;
-
- gMC->Gsvolu("YXO2", "PCON", idtmed[kPb], parPb, 18);
- gMC->Gspos("YXO2", 1, "YGO2", 0., 0., (kZPb-kZvac4)/2., 0, "ONLY");
-
-//
-// W cone
-//
- Float_t parW[15];
- parW[0] = 0.;
- parW[1] = 360.;
- parW[2] = 4.;
- Float_t dlW=(kZPb-kZvac4)/2.;
-
- parW[3] = -dlW;
- parW[4] = r2;
- parW[5] = kR21-kDRSteel2;
-
- parW[6] = -dlW+(kZvac6-kZvac4)+kDRSteel2;
- parW[7] = r2+(kZvac6-kZvac4+kDRSteel2) * TMath::Tan(kThetaOpen2);
- parW[8] = kR21-kDRSteel2;
-
- parW[9] = -dlW+(kZvac6-kZvac4)+kDRSteel2;
- parW[10] = r2+(kZvac6-kZvac4+kDRSteel2) * TMath::Tan(kThetaOpen2);
- parW[11] = (kZvac6+kDRSteel2)*TMath::Tan(kAccMin)-kDRSteel2;
-
- parW[12] = dlW;
- parW[13] = r2+(kZPb-kZvac4) * TMath::Tan(kThetaOpen2);
- parW[14] = kZPb*TMath::Tan(kAccMin)-kDRSteel2;
-
- gMC->Gsvolu("YYO2", "PCON", idtmed[kNiCuW], parW, 15);
- gMC->Gspos("YYO2", 1, "YGO2", 0., 0., -(kZvac7-kZPb)/2., 0, "ONLY");
-
- for (i=4; i<35; i+=3) par2[i] = 0;
-
- gMC->Gsvolu("YMO2", "PCON", idtmed[kVacuum+40], par2, 36);
- gMC->Gspos("YGO2", 1, "YMO2", 0., 0., 0., 0, "ONLY");
- dZ+=dl;
- gMC->Gspos("YMO2", 1, "YMOT", 0., 0., dZ, 0, "ONLY");
- dZ+=dl;
-//
-//
-// 2nd section: vacuum system
-//
- cpar0[0]=(kZvac7-kZvac4)/2;
- cpar0[1]=r2V;
- cpar0[2]=r2V+dVacuS;
- cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(kThetaOpenB);
- cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(kThetaOpenB);
- gMC->Gsvolu("YV21", "CONE", idtmed[kSteel+40], cpar0, 5);
-//
-// insulation
- cpar[0]=cpar0[0];
- cpar[1]=cpar0[1]+dTubeS;
- cpar[2]=cpar0[1]+dTubeS+kDInsuS;
- cpar[3]=cpar0[3]+dTubeS;
- cpar[4]=cpar0[3]+dTubeS+kDInsuS;
- gMC->Gsvolu("YI21", "CONE", idtmed[kInsulation+40], cpar, 5);
- gMC->Gspos("YI21", 1, "YV21", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("YV21", 1, "YMO2", 0., 0., 0., 0, "ONLY");
-
-//
-// Third Section: Bellows and Flange
-//
- par3[0] = 0.;
- par3[1] = 360.;
- par3[2] = 8.;
- dl=(kZvac9-kZvac7)/2.;
-
- par3[3] = -dl;
- par3[4] = r2+(kZvac7-kZvac3) * TMath::Tan(kThetaOpen2);
- par3[5] = 30.;
-
- par3[6] = -dl+kDr21;
- par3[7] = par3[4]+kDr21;
- par3[8] = 30.;
-
- par3[9] = par3[6]+kDB2;
- par3[10] = par3[7];
- par3[11] = 30.;
-
- par3[12] = par3[9]+kDr22;
- par3[13] = par3[10]+kDr22;
- par3[14] = 30.;
-
- par3[15] = par3[12]+kDF2;
- par3[16] = par3[13];
- par3[17] = 30.;
-
- par3[18] = par3[15]+kDr22;
- par3[19] = par3[16]-kDr22;
- par3[20] = 30.;
-
- par3[21] = par3[18]+kDB2;
- par3[22] = par3[19];
- par3[23] = 30.;
-
- par3[24] = par3[21]+kDr23;
- par3[25] = par3[22];
- par3[26] = 30.;
-//
- rBox=par3[22]-0.1;
- Float_t r3=par3[25];
-
- gMC->Gsvolu("YGO3", "PCON", idtmed[iHeavy+40], par3, 27);
-
-// begin Fluka
- if (fWriteGeometry) {
- Float_t rfvacu0[15];
- for (ifl=0; ifl<8; ifl++) {
- zfluka[ifl]=par3[3+3*ifl]+dl+kZvac7;
- rfluka1[ifl] = par3[4+3*ifl];
- rfluka2[ifl] = par3[5+3*ifl]-4.;
- rfluka3[ifl] = par3[5+3*ifl];
- rfvacu0[ifl] = 0.;
- }
- for (i=0; i<8; i++) rfluka0[i]=rBox;
- rfluka0[0]=0.; rfluka0[7]=0.;
-
- flukaGeom->Comment("3rd part: Shield");
- flukaGeom->PolyCone(rfluka1, rfluka2, zfluka, 8, posfluka, "LEAD", "MF", "$SHS");
- flukaGeom->Comment("3rd part: Steel envelope");
- flukaGeom->PolyCone(rfluka2, rfluka3, zfluka, 8, posfluka, "STEEL", "MF", "$SHS");
- flukaGeom->Comment("3rd part: Vacuum");
- flukaGeom->PolyCone(rfluka0+1, rfluka1+1, zfluka+1, 6, posfluka, "AIR", "MF", "$SHH");
-
- flukaGeom->Comment("3rd part: Beam Pipe (left)");
-
- rf1[0]=0.; rf2[0]=0.;
- rf1[1] = r3V;
- rf2[1] = rf1[1]+kDr21*TMath::Tan(kThetaOpenB);
- rf1[2] = rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5] = par3[4];
- rf2[2] = rf2[1]+dTubeS; rf2[3]=rf2[2]+kDInsuS; rf2[4]=rf2[3]+kDEnveS;
- rf2[5] = rf1[5]+kDr21;
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac7, kZvac7+kDr21, posfluka, materialsB, fieldsB, cutsB);
-
-
- flukaGeom->Comment("3rd part: Beam Pipe (right)");
-
- rf1[0] = 0.;
- rf1[1] = rf2[1];
- rf1[2] = rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5] = par3[25];
- flukaGeom->OnionCylinder(rf1, 6 , kZvac9-kDr23, kZvac9, posfluka, materialsA, fieldsA, cutsA);
-
-//
- flukaGeom->Comment("First Bellow");
- z1=kZvac7+kDr21;
-
- for (i=0; i<7; i++) {
- z2=z1+kEB2;
- flukaGeom->Cylinder(0., kRB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kHB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
-
- z1=z2;
- z2+=kLB2/2.-kEB2;
- flukaGeom->Cylinder(0., kRB2+kHB2-kEB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kHB2-kEB2, kRB2+kHB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2=z1+kEB2;
- flukaGeom->Cylinder(0., kRB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kHB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2+=kLB2/2.-kEB2;
- flukaGeom->Cylinder(0., kRB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kEB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kEB2, kRB2+kHB2, z1, z2, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- }
- flukaGeom->Cylinder(kRB2+kHB2, kRB2+kHB2+0.2, kZvac7+kDr21, z1, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kHB2+0.2, rBox, kZvac7+kDr21, z1, posfluka, "AIR", "MF", "$SHH");
- zcy1=z1;
-
-
- flukaGeom->Comment("Second Bellow");
- z1=kZvac9-kDr23;
- for (i=0; i<7; i++) {
- z2=z1-kEB2;
- flukaGeom->Cylinder(0., kRB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kHB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2-=kLB2/2.-kEB2;
- flukaGeom->Cylinder(0., kRB2+kHB2-kEB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kHB2-kEB2, kRB2+kHB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2=z1-kEB2;
- flukaGeom->Cylinder(0., kRB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kHB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- z1=z2;
- z2-=kLB2/2.-kEB2;
- flukaGeom->Cylinder(0., kRB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+kEB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kEB2, kRB2+kHB2, z2, z1, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- }
- flukaGeom->Cylinder(kRB2+kHB2, kRB2+kHB2+0.2, z1, kZvac9-kDr23, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+kHB2+0.2, rBox, z1, kZvac9-kDr23, posfluka, "AIR", "MF", "$SHH");
-
- zcy2=z1;
- flukaGeom->Comment("Flange");
- zfl=(zcy1+zcy2)/2.;
-
- z1=zfl-kDF2/2.;
- z2=zfl+kDF2/2.;
- flukaGeom->Cylinder(0.,kRF2-2., z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2-2., kRF2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2, kRF2+0.02 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2+0.02, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z2=z1;
- z1=z2-kDFlange;
- flukaGeom->Cylinder(0.,kRB2 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRF2 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2, kRF2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2+0.2, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z2=z1;
- z1=zcy1;
- flukaGeom->Cylinder(0.,kRB2 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+0.1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+0.1, kRB2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+0.2, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
-
- z1=zfl+kDF2/2.;
- z2=z1+kDFlange;
- flukaGeom->Cylinder(0.,kRB2 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRF2 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2, kRF2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRF2+0.2, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- z1=z2;
- z2=zcy2;
- flukaGeom->Cylinder(0.,kRB2 , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2, kRB2+0.1 , z1, z2, posfluka, "STEEL", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+0.1, kRB2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
- flukaGeom->Cylinder(kRB2+0.2, rBox , z1, z2, posfluka, "AIR", "MF", "$SHH");
- }
-
-//
-// end Fluka
-
- for (i=4; i<26; i+=3) par3[i] = 0;
-
- gMC->Gsvolu("YMO3", "PCON", idtmed[kVacuum+40], par3, 27);
- gMC->Gspos("YGO3", 1, "YMO3", 0., 0., 0., 0, "ONLY");
-
-//
-// Steel envelope
-// tpar[0]=26;
-// tpar[1]=30;
-// tpar[2]=dl;
-// gMC->Gsvolu("YS31", "TUBE", idtmed[kSteel], tpar, 3);
-// gMC->Gspos("YS31", 1, "YGO3", 0., 0., 0., 0, "ONLY");
- dZ+=dl;
- gMC->Gspos("YMO3", 1, "YMOT", 0., 0., dZ, 0, "ONLY");
- dZ+=dl;
-
-//
-// 3rd section: vacuum system
-//
-//
-// Bellow2
-//
- Float_t eps = 0.;
- Float_t kLB2S = kLB2-eps;
-
- tpar[0]=kRB2;
- tpar[1]=kRB2+kHB2;
- tpar[2]=kEB2/2.;
- gMC->Gsvolu("YB21", "TUBE", idtmed[kSteel+40], tpar, 3);
- dl1=tpar[2];
-
- tpar[0]=kRB2+kHB2-kEB2;
- tpar[1]=kRB2+kHB2;
- tpar[2]=(kLB2S/2.-2.*kEB2)/2.;
- gMC->Gsvolu("YB22", "TUBE", idtmed[kSteel+40], tpar, 3);
- dl2=tpar[2];
-
- tpar[0]=kRB2-kEB2;
- tpar[1]=kRB2;
- tpar[2]=kLB2S/8.;
- gMC->Gsvolu("YB23", "TUBE", idtmed[kSteel+40], tpar, 3);
- dl3=tpar[2];
-
-
- tpar[0]=0;
- tpar[1]=kRB2+kHB2;
- tpar[2]= - kLB2S/2.;
- gMC->Gsvolu("YBU2", "TUBE", idtmed[kVacuum+40], tpar, 3);
-
- tpar[0]=0;
- tpar[1]=kRB2+kHB2;
- tpar[2]=7.*kLB2/2.;
-
- gMC->Gsvolu("YBM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
- gMC->Gsdvn("YBMS", "YBM2", 7, 3);
- gMC->Gspos("YBU2", 1, "YBMS", 0., 0., 0., 0, "ONLY");
-
- dz=-kLB2S/2.+dl3;
- gMC->Gspos("YB23", 1, "YBU2", 0., 0., dz, 0, "ONLY");
- dz+=dl3;
- dz+=dl1;
- gMC->Gspos("YB21", 1, "YBU2", 0., 0., dz, 0, "ONLY");
- dz+=dl1;
- dz+=dl2;
- gMC->Gspos("YB22", 1, "YBU2", 0., 0., dz, 0, "ONLY");
- dz+=dl2;
- dz+=dl1;
- gMC->Gspos("YB21", 2, "YBU2", 0., 0., dz, 0, "ONLY");
- dz+=dl1;
- dz+=dl3;
- gMC->Gspos("YB23", 2, "YBU2", 0., 0., dz, 0, "ONLY");
-
- dz=-dl+kDr21+tpar[2];
- gMC->Gspos("YBM2", 1, "YMO3", 0., 0., dz, 0, "ONLY");
-
- dz=dl-kDr23-tpar[2];
- gMC->Gspos("YBM2", 2, "YMO3", 0., 0., dz, 0, "ONLY");
-
-//
-// Flange
-
- tpar[0]=0;
- tpar[1]=kRF2;
- tpar[2]=kDF2/2.;
- gMC->Gsvolu("YFM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
-
- tpar[0]=kRF2-2.;
- tpar[1]=kRF2;
- tpar[2]=kDF2/2.;
- gMC->Gsvolu("YF21", "TUBE", idtmed[kSteel+40], tpar, 3);
- gMC->Gspos("YF21", 1, "YFM2", 0., 0., 0., 0, "ONLY");
-
- tpar[0]=kRB2;
- tpar[1]=kRF2-2.;
- tpar[2]=kDFlange/2.;
- gMC->Gsvolu("YF22", "TUBE", idtmed[kSteel+40], tpar, 3);
- dz=-kDF2/2.+tpar[2];
- gMC->Gspos("YF22", 1, "YFM2", 0., 0., dz, 0, "ONLY");
- dz= kDF2/2.-tpar[2];
- gMC->Gspos("YF22", 2, "YFM2", 0., 0., dz, 0, "ONLY");
-
- dz=kDr21/2.-kDr23/2.;
- gMC->Gspos("YFM2", 2, "YMO3", 0., 0., dz, 0, "ONLY");
-
-
-//
-// pipe between flange and bellows
- tpar[0]=kRB2-dTubeS;
- tpar[1]=kRB2;
- tpar[2]=2.*(kDB2+kDr22-7.*kLB2)/4.;
- gMC->Gsvolu("YPF2", "TUBE", idtmed[kSteel+40], tpar, 3);
- dz=kDr21/2.-kDr23/2.-kDF2/2.-tpar[2];
- gMC->Gspos("YPF2", 1, "YMO3", 0., 0., dz, 0, "ONLY");
- dz=kDr21/2.-kDr23/2.+kDF2/2.+tpar[2];
- gMC->Gspos("YPF2", 2, "YMO3", 0., 0., dz, 0, "ONLY");
-
- Float_t dHorZ=20.;
-
-//
-// 4th section: rear shield and closing cone
-//
- par4[0] = 0.;
- par4[1] = 360.;
- par4[2] = 7.;
- dl=(kZvac12-kZvac9)/2.;
-
- par4[3] = -dl;
- par4[4] = r3;
- par4[5] = 30.;
-
- par4[6] = -dl+dHorZ;
- par4[7] = r3;
- par4[8] = 30.;
-
- par4[9] = -dl+(kZvac10-kZvac9);
- par4[10] = r3+(kZvac10-kZvac9-dHorZ) * TMath::Tan(kThetaOpen3);
- par4[11] = 30.;
-
- par4[12] = par4[9];
- par4[13] = par4[10];
- par4[14] = kR42;
-
- par4[15] = -dl+(kZvac11-kZvac9);
- par4[16] = r3+(kZvac11-kZvac9-dHorZ) * TMath::Tan(kThetaOpen3);
- par4[17] = kR42;
-
- par4[18] = par4[15];
- par4[19] = par4[16];
- par4[20] = kR43;
-
- par4[21] = -dl+(kZvac12-kZvac9);
- par4[22] = kRVacu+dVacuS;
- par4[23] = kR43;
-
- gMC->Gsvolu("YGO4", "PCON", idtmed[iHeavy+40], par4, 24);
-
-
-// parPb[0] = (kZvac12-kZvac10)/2.;
-// parPb[1] = parPb[3];
-// parPb[2] = 31.;
-// parPb[3] = parPb[1]+2.*parPb[0]*TMath::Tan(kThetaOpenPb);
-// parPb[4] = 31.;
-// gMC->Gsvolu("YXO5", "CONE", idtmed[kPb], parPb, 5);
-// gMC->Gspos("YXO5", 1, "YGO4", 0., 0., -dl+(kZvac10-kZvac9)+parPb[0], 0, "ONLY");
-
- for (i=4; i<23; i+=3) par4[i] = 0;
-
- gMC->Gsvolu("YMO4", "PCON", idtmed[kVacuum+40], par4, 24);
- gMC->Gspos("YGO4", 1, "YMO4", 0., 0., 0., 0, "ONLY");
-
-
-
- dZ+=dl;
- gMC->Gspos("YMO4", 1, "YMOT", 0., 0., dZ, 0, "ONLY");
- dZ+=dl;
-//
-// Closing concrete cone
-//
- cpar[0]=(kZvac12-kZvac11)/2.;
- cpar[1] = r3+(kZvac11-kZvac9-dHorZ) * TMath::Tan(kThetaOpen3);
- cpar[2] = cpar[1]+0.001;
- cpar[3] = kRVacu+dVacuS;
- cpar[4] = cpar[2];
- gMC->Gsvolu("YCC4", "CONE", idtmed[kConcrete+40], cpar, 5);
- dz=dl-cpar[0];
- gMC->Gspos("YCC4", 1, "YGO4", 0., 0., dz, 0, "ONLY");
-
-//
-// begin Fluka
- Float_t r10 = .0, r11 = 0.;
-
- if (fWriteGeometry) {
- r10=r3+(kZvac10-kZvac9-dHorZ) * TMath::Tan(kThetaOpen3);
- r11=cpar[1];
-
- flukaGeom->Comment("4th part: Shield");
-
- flukaGeom->Cone(r3, r3, 26.0, 26.0, kZvac9, kZvac9+dHorZ,
- posfluka, "LEAD", "NF", "$SHH");
-
- flukaGeom->Cone(r3, r10, 26.0, 26.0, kZvac9+dHorZ, kZvac10,
- posfluka, "LEAD", "NF", "$SHH");
- flukaGeom->Cone(r10, r11, 30.0, 30.0, kZvac10, kZvac11,
- posfluka, "LEAD", "NF", "$SHH");
- flukaGeom->Cylinder( cpar[1], 30.0, kZvac11, kZvac12,
- posfluka, "LEAD", "NF", "$SHH");
-
-
- flukaGeom->Comment("4th part: Steel Envelope");
- flukaGeom->Cylinder(26.0, 30., kZvac9, kZvac10, posfluka, "STEEL", "NF", "$SHH");
- flukaGeom->Comment("4th part: Closing Cone");
- flukaGeom->Cone(cpar[1]-0.1, cpar[3], cpar[1], cpar[1], kZvac11, kZvac12,
- posfluka, "PORTLAND", "NF", "$SHH");
- flukaGeom->Comment("4th part: VACUUM");
- flukaGeom->Cone(0., 0., cpar[1]-0.1, cpar[3], kZvac11, kZvac12,
- posfluka, "VACUUM", "NF", "$SHH");
- }
-
-//
-// end Fluka
-//
-// Steel envelope
-//
- dz=-dl;
- tpar[0]=26.;
- tpar[1]=30.;
- tpar[2]=(kZvac10-kZvac9)/2.;
- gMC->Gsvolu("YS41", "TUBE", idtmed[kSteel], tpar, 3);
- dz+=tpar[2];
-// gMC->Gspos("YS41", 1, "YGO4", 0., 0., dz, 0, "ONLY");
- dz+=tpar[2];
-
- tpar[0]=kR41-kDRSteel2;
- tpar[1]=kR41;
- tpar[2]=(kZvac11-kZvac10)/2.;
- gMC->Gsvolu("YS43", "TUBE", idtmed[kPb], tpar, 3);
- dz+=tpar[2];
- gMC->Gspos("YS43", 1, "YGO4", 0., 0., dz, 0, "ONLY");
-//
-// rear lead shield
-//
- tpar[0]=kR41;
- tpar[1]=kR42;
- tpar[2]=(kZvac11-kZvac10)/2.;
- gMC->Gsvolu("YPBI", "TUBE", idtmed[kPb+40], tpar, 3);
- dz-=0;
- gMC->Gspos("YPBI", 1, "YGO4", 0., 0., dz, 0, "ONLY");
-
- tpar[0]=kR42-5;
- tpar[1]=kR42;
- tpar[2]=(kZvac11-kZvac10)/2.;
- gMC->Gsvolu("YPBO", "TUBE", idtmed[kPb], tpar, 3);
- gMC->Gspos("YPBO", 1, "YPBI", 0., 0., 0., 0, "ONLY");
-
-//
-// rear Fe shield
-//
-
- tpar[0]=31.;
- tpar[1]=kR43;
- tpar[2]=(kZvac12-kZvac11)/2.;
- gMC->Gsvolu("YFEI", "TUBE", idtmed[kFe+40], tpar, 3);
- dz=dl-tpar[2];
- gMC->Gspos("YFEI", 1, "YGO4", 0., 0., dz, 0, "ONLY");
-
- tpar[0]=31.;
- tpar[1]=kR43;
- tpar[2]=2.5;
- gMC->Gsvolu("YFEO", "TUBE", idtmed[kFe], tpar, 3);
- dz=-(kZvac12-kZvac11)/2.+tpar[2];
- gMC->Gspos("YFEO", 1, "YFEI", 0., 0., dz, 0, "ONLY");
-//
-// Magnet element
-//
- tpar[0]=0.;
- tpar[1]=40.;
- tpar[2]=85.;
- gMC->Gsvolu("YAEM", "TUBE", idtmed[kAir], tpar, 3);
- tpar[0]=17.6/2.;
- tpar[1]=40.;
- tpar[2]=85.;
- gMC->Gsvolu("YFEM", "TUBE", idtmed[kFe], tpar, 3);
- gMC->Gspos("YFEM", 1, "YAEM", 0., 0., 0., 0, "ONLY");
-
-//
- dz=1921.6 + tpar[2];
- gMC->Gspos("YAEM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
-
-//
-//
-// 4th section: vacuum system
-//
-// up to closing cone
-
- r3V=r3-kDr23+dVacuS-1.6;
-
- cpar0[0]=(kZvac11-kZvac9)/2;
- cpar0[1]=r3V-dVacuS;
- cpar0[2]=r3V;
- cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(kThetaOpen3);
- cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(kThetaOpen3);
- gMC->Gsvolu("YV31", "CONE", idtmed[kSteel+40], cpar0, 5);
-//
-// insulation
- cpar[0]=cpar0[0];
- cpar[1]=cpar0[1]+dTubeS;
- cpar[2]=cpar0[1]+dTubeS+kDInsuS;
- cpar[3]=cpar0[3]+dTubeS;
- cpar[4]=cpar0[3]+dTubeS+kDInsuS;
- gMC->Gsvolu("YI31", "CONE", idtmed[kInsulation+40], cpar, 5);
- gMC->Gspos("YI31", 1, "YV31", 0., 0., 0., 0, "ONLY");
- dz=-dl+cpar[0];
- gMC->Gspos("YV31", 1, "YMO4", 0., 0., dz, 0, "ONLY");
-
-//
-// begin Fluka
- if (fWriteGeometry) {
- flukaGeom->Comment("4th part: Beam pipe lateral structure");
- for (i=0; i<7; i++) fieldsA[i] = "NF";
-
- rf1[0]=0.; rf2[0]=0.;
- rf1[1]=rf2[1]; rf2[1]=rf1[1]+dHorZ*TMath::Tan(kThetaOpen3);
-
- rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5]=r3;
-
- rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+kDInsuS; rf2[4]=rf2[3]+kDEnveS;
- rf2[5]=r3;
-
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac9 , kZvac9+dHorZ, posfluka, materialsA, fieldsA, cutsA);
-
- rf1[0]=0.; rf2[0]=0.;
-
- rf1[1]=rf2[1]; rf2[1]=rf1[1]+(kZvac10-kZvac9-dHorZ)*TMath::Tan(kThetaOpen3);
-
- rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5]=r3;
-
- rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+kDInsuS; rf2[4]=rf2[3]+kDEnveS;
- rf2[5]=r10;
-
-
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac9+dHorZ, kZvac10, posfluka, materialsA, fieldsA, cutsA);
-
- rf1[0]=0.; rf2[0]=0.;
- rf1[1]=rf2[1]; rf2[1]=rf1[1]+(kZvac11-kZvac10)*TMath::Tan(kThetaOpen3);
-
- rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+kDInsuS; rf1[4]=rf1[3]+kDEnveS;
- rf1[5]=r10;
- rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+kDInsuS; rf2[4]=rf2[3]+kDEnveS;
- rf2[5]=r11;
-
- flukaGeom->OnionCone(rf1, rf2, 6 , kZvac10, kZvac11, posfluka, materialsA, fieldsA, cutsA);
- }
-
-//
-// end Fluka
-//
-// closing cone
- cpar0[0]=(kZvac12-kZvac11)/2;
- cpar0[1]=r3V-dVacuS+(kZvac11-kZvac9)*TMath::Tan(kThetaOpen3);
- cpar0[2]=r3V +(kZvac11-kZvac9)*TMath::Tan(kThetaOpen3);
- cpar0[3]=kRVacu;
- cpar0[4]=kRVacu+dTubeS+kDInsuS+kDProtS+kDFreeS;
- gMC->Gsvolu("YV32", "CONE", idtmed[kSteel+40], cpar0, 5);
-//
-// insulation
- cpar[0]=cpar0[0];
- cpar[1]=cpar0[1]+dTubeS;
- cpar[2]=cpar0[1]+dTubeS+kDInsuS;
- cpar[3]=cpar0[3]+dTubeS;
- cpar[4]=cpar0[3]+dTubeS+kDInsuS;
- gMC->Gsvolu("YI32", "CONE", idtmed[kInsulation+40], cpar, 5);
- gMC->Gspos("YI32", 1, "YV32", 0., 0., 0., 0, "ONLY");
-//
-// clearance
-// cpar[1]=cpar0[2]-kDProtS-kDFreeS;
-// cpar[2]=cpar0[2]-kDProtS;
-// cpar[3]=cpar0[4]-kDProtS-kDFreeS;
-// cpar[4]=cpar0[4]-kDProtS;
-// gMC->Gsvolu("YP32", "CONE", idtmed[kVacuum+40], cpar, 5);
-// gMC->Gspos("YP32", 1, "YV32", 0., 0., 0., 0, "ONLY");
- dz=dl-cpar[0];
- gMC->Gspos("YV32", 1, "YMO4", 0., 0., dz, 0, "ONLY");
-//
-//
-// MUON trigger wall
-//
- tpar[0] = 50.;
- tpar[1] = 310.;
- tpar[2] = (kZFilterOut - kZFilterIn) / 2.;
- gMC->Gsvolu("YFIM", "TUBE", idtmed[kFe+40], tpar, 3);
- dz = (kZFilterIn + kZFilterOut) / 2.;
- tpar[2] -= 10.;
- gMC->Gsvolu("YFII","TUBE", idtmed[kFe], tpar, 3);
- gMC->Gspos("YFII", 1, "YFIM", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("YFIM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
-//
-// Shielding close to chamber
-//
-//
- cpar[0]=(kZch11-kZRear)/2.;
- cpar[1]=kR11;
- cpar[2]=kZRear*TMath::Tan(kAccMin);
- cpar[3]=kR11;
- cpar[4]=(kZRear+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS1", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZRear-zstart)+cpar[0];
- gMC->Gspos("YCS1", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
- cpar[0]=(kZvac4-kZch12)/2.;
- cpar[1]=kR11;
- cpar[2]=kZch12*TMath::Tan(kAccMin);
- cpar[3]=kR11;
- cpar[4]=(kZch12+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS3", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch12-zstart)+cpar[0];
- gMC->Gspos("YCS3", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
-
-// Recess station 1
-
- cpar[0]=(kZch12-kZch11)/2.;
- cpar[1]=kR11;
- cpar[2]=18.;
- cpar[3]=kR11;
- cpar[4]=17.9;
- gMC->Gsvolu("YCS2", "CONE", idtmed[kAir], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch11-zstart)+cpar[0];
- gMC->Gspos("YCS2", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
- Float_t ptubs[5];
- ptubs[0] = kR11;
- ptubs[1] = 17.9;
- ptubs[2] = 0.;
-// phi_min, phi_max
- ptubs[3] = 0.;
- ptubs[4] = 90.;
- gMC->Gsvolu("YCR0", "TUBS", idtmed[kNiCuW], ptubs, 0);
- Int_t idrotm[1799];
-
- AliMatrix(idrotm[1701],90., 0., 90., 90., 0., 0.);
- AliMatrix(idrotm[1702],90., 90., 90., 180., 0., 0.);
- AliMatrix(idrotm[1703],90., 180., 90., 270., 0., 0.);
- AliMatrix(idrotm[1704],90., 270., 90., 0., 0., 0.);
- // Int_t ipos;
-
- dz=-cpar[0];
-// 1.
- ptubs[2]=6.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 1, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 2, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 2.
- ptubs[2]=5.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 3, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 4, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 3.
- ptubs[2]=5.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 5, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 6, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 4.
- ptubs[2]=6.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 7, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 8, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-
-
-
- cpar[0]=(kZch21-kZvac4)/2.;
- cpar[1]=kR21;
- cpar[2]=kZvac4*TMath::Tan(kAccMin);
- cpar[3]=kR21;
- cpar[4]=(kZvac4+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS4", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZvac4-zstart)+cpar[0];
- gMC->Gspos("YCS4", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
- cpar[0]=(kZvac6-kZch22)/2.;
- cpar[1]=kR21;
- cpar[2]=kZch22*TMath::Tan(kAccMin);
- cpar[3]=kR21;
- cpar[4]=(kZch22+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS6", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch22-zstart)+cpar[0];
- gMC->Gspos("YCS6", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
-// Recess station 2
-
- cpar[0]=(kZch22-kZch21)/2.;
- cpar[1]=kR21;
- cpar[2]=23.;
- cpar[3]=kR21;
- cpar[4]=23.;
- gMC->Gsvolu("YCS5", "CONE", idtmed[kAir], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch21-zstart)+cpar[0];
- gMC->Gspos("YCS5", 1, "YMOT", 0., 0., dz, 0, "ONLY");
-
- ptubs[0] = kR21;
- ptubs[1] = 23;
- ptubs[2] = 0.;
- ptubs[3] = 0.;
- ptubs[4] = 90.;
- gMC->Gsvolu("YCR1", "TUBS", idtmed[kNiCuW], ptubs, 0);
-
- dz=-cpar[0];
-// 1.
- ptubs[2]=7.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR1", 1, "YCS5", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR1", 2, "YCS5", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 2.
- ptubs[2]=6.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR1", 3, "YCS5", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR1", 4, "YCS5", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 3.
- ptubs[2]=6.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR1", 5, "YCS5", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR1", 6, "YCS5", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-// 4.
- ptubs[2]=7.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR1", 7, "YCS5", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR1", 8, "YCS5", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
-
-
-//
-// begin Fluka
-/*
- flukaGeom->Cone(kR11, kR11, -1., -1.,
- kZRear, kZch11, posfluka,"NIW", "MF", "$SHS");
-
- flukaGeom->Cone(kR11, kR11, -1., -1.,
- kZch11, kZch12, posfluka,"AIR", "MF", "$SHS");
-
- flukaGeom->Cone(kR11, kR11, -1., -1.,
- kZch12, kZvac4, posfluka,"NIW", "MF", "$SHS");
-
- flukaGeom->Cone(kR21, kR21, -1., -1.,
- kZvac4, kZch21, posfluka,"NIW", "MF", "$SHS");
- flukaGeom->Cone(kR21, kR21, -1., -1.,
- kZch21, kZch22, posfluka,"AIR", "MF", "$SHS");
- flukaGeom->Cone(kR21, kR21, -1., -1.,
- kZch22, kZvac6, posfluka,"NIW", "MF", "$SHS");
-
-*/
- if (fWriteGeometry) flukaGeom->Finish();
-
-//
-// end Fluka
-//
-// Outer Pb Cone
-
- if (fPbCone) {
- dl = (kZvac10-kZch32)/2.;
- dz = dl+kZch32;
-
- par0[0] = 0.;
- par0[1] = 360.;
- par0[2] = 10.;
-
- par0[ 3] = -dl;
- par0[ 4] = 30.;
- par0[ 5] = 30.+(kZch32-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
-// 4th station
- par0[ 6] = -dz + kZch41;
- par0[ 7] = 30.;
- par0[ 8] = 30.+(kZch41-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
- par0[ 9] = -dz + kZch41;
- par0[10] = 30.;
- par0[11] = 37.5;
- // recess erice2000
- par0[12] = -dz + kZch42;
- par0[13] = 30.;
- par0[14] = par0[11];
-
- par0[15] = -dz + kZch42;
- par0[16] = 30.;
- par0[17] = 30.+(kZch42-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
-// 5th station
- par0[18] = -dz + kZch51;
- par0[19] = 30.;
- par0[20] = 30.+(kZch51-kZConeE)*TMath::Tan(kThetaOpenPbO);
-
- par0[21] = -dz + kZch51;
- par0[22] = 30.;
- par0[23] = 37.5; // recess erice2000
-
- par0[24] = -dz + kZch52;
- par0[25] = 30.;
- par0[26] = par0[23];
-
- par0[27] = -dz + kZch52;
- par0[28] = 30.;
- par0[29] = 30.+(kZch52-kZConeE)*TMath::Tan(kThetaOpenPbO);
-// end of cone
- par0[30] = +dl;
- par0[31] = 30.;
- par0[32] = par0[29];
-//
- gMC->Gsvolu("YOPB", "PCON", idtmed[kPb], par0, 33);
- Float_t dzs = -(kZvac12-zstart)/2. + (kZch32-zstart) + dl;
- gMC->Gspos("YOPB", 1, "YMOT", 0., 0., dzs, 0, "ONLY");
-
- par0[ 0] = 0.;
- par0[ 1] = 360.;
- par0[ 2] = 18.;
-
- par0[ 3] = -dl;
- par0[ 5] = 30.+(kZch32-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[ 4] = par0[ 5] - 4.;
-// 4th station
- par0[ 6] = -dz + kZch41 - 4.;
- par0[ 8] = 30.+(kZch41-4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[ 7] = par0[ 8] -4.;
-
- par0[ 9] = -dz + kZch41 - 4.;
- par0[11] = par0[8];
- par0[10] = 33.5;
-
- par0[12] = -dz + kZch41;
- par0[14] = 30.+(kZch41-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[13] = 33.5;
-
- par0[15] = -dz + kZch41;
- par0[17] = 37.5;
- par0[16] = 33.5;
-
- par0[18] = -dz + kZch42;
- par0[20] = 37.5;
- par0[19] = 33.5;
-
- par0[21] = -dz + kZch42;
- par0[23] = 30.+(kZch42-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[22] = 33.5;
-
- par0[24] = -dz + kZch42 + 4.;
- par0[26] = 30.+(kZch42+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[25] = 33.5;
-
- par0[27] = -dz + kZch42 + 4.;
- par0[29] = 30.+(kZch42+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[28] = par0[29] - 4.;
-
-// 5th station
- par0[30] = -dz + kZch51 - 4.;
- par0[32] = 30.+(kZch51-4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[31] = par0[32] - 4.;
-
- par0[33] = -dz + kZch51 - 4.;
- par0[35] = par0[32];
- par0[34] = 33.5;
-
- par0[36] = -dz + kZch51;
- par0[38] = 30.+(kZch51-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[37] = 33.5;
-
- par0[39] = -dz + kZch51;
- par0[41] = 37.5;
- par0[40] = 33.5;
-
- par0[42] = -dz + kZch52;
- par0[44] = 37.5;
- par0[43] = 33.5;
-
- par0[45] = -dz + kZch52;
- par0[47] = 30.+(kZch52-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[46] = 33.5;
-
- par0[48] = -dz + kZch52 + 4.;
- par0[50] = 30.+(kZch52+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[49] = 33.5;
-
- par0[51] = -dz + kZch52 + 4.;
- par0[53] = 30.+(kZch52+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
- par0[52] = par0[53] - 4.;
-
- par0[54] = +dl;
- par0[56] = par0[53];
- par0[55] = par0[52];
-
- gMC->Gsvolu("YOSE", "PCON", idtmed[kSteel], par0, 57);
- gMC->Gspos ("YOSE", 1, "YOPB", 0., 0., 0., 0, "ONLY");
- }
-}
-
-void AliSHILvF::Init()
-{
- //
- // Initialise the muon shield after it has been built
- //
- Int_t i;
- //
- if(AliLog::GetGlobalDebugLevel()>0) {
- printf("\n%s: ",ClassName());
- for(i=0;i<35;i++) printf("*");
- printf(" SHILvF_INIT ");
- for(i=0;i<35;i++) printf("*");
- printf("\n%s: ",ClassName());
- //
- // Here the SHIL initialisation code (if any!)
- for(i=0;i<80;i++) printf("*");
- printf("\n");
- }
-}