ROOT logo
/**************************************************************************
 * 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$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Experimental Hall                                                        //
//  This class contains the description of the experimental hall             //
//  and the shielding blocks.                                                // 
//  Author: Andreas Morsch                                                   //
//  andreas.morsch@cern.ch                                                   //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TVirtualMC.h>

#include "AliConst.h"
#include "AliHALLv3.h"
#include "AliMagF.h"
#include "AliRun.h"
#include "AliLog.h"
#include "AliMC.h"
#include "AliTrackReference.h"
#include <TGeoVolume.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <TGeoCompositeShape.h>
#include <TGeoBBox.h>
#include <TGeoTube.h>
#include <TGeoPgon.h>
#include <TGeoPcon.h>
#include <TGeoCone.h>
#include <TGeoTrd1.h>
#include <TGeoArb8.h>

ClassImp(AliHALL)
 
//_____________________________________________________________________________
AliHALLv3::AliHALLv3() : fNewShield24(0), fRefVolumeId(-1), fScoring(0), fRackShield(0)
{
  //
  // Default constructor for the experimental Hall
  //
}
 
//_____________________________________________________________________________
AliHALLv3::AliHALLv3(const char *name, const char *title)
  : AliHALL(name,title), fNewShield24(0), fRefVolumeId(-1), fScoring(0), fRackShield(0)
{
  //
  // Standard constructor for the experimental Hall
  //

}
 
//_____________________________________________________________________________
void AliHALLv3::CreateGeometry()
{
  //
  // Create the geometry of the exprimental hall
  //
  Float_t r2, dy;
  Float_t phid, phim, h, r;
  Float_t w1, dh, am, bm, dl,cm, hm, dr, dx, xl;
  Float_t hullen;
  Float_t phi;

  // The top volume
  //
  TGeoVolume* top = gGeoManager->GetVolume("ALIC");
  TGeoVolumeAssembly* asHall = new TGeoVolumeAssembly("HALL");
  
  // Rotations
  // rotation by 90 deg in the y-z plane
  TGeoRotation* rot000 = new TGeoRotation("rot000",  90., 0.,180.,  0.,    90., 90.);  
  TGeoRotation* rot001 = new TGeoRotation("rot001", 270., 0., 90., 90.,   180.,  0.);  

  // Materials
  TGeoMedium* kMedCC     = gGeoManager->GetMedium("HALL_CC_C2");
  TGeoMedium* kMedST     = gGeoManager->GetMedium("HALL_STST_C2");
  TGeoMedium* kMedAir    = gGeoManager->GetMedium("HALL_AIR_C2");
  TGeoMedium* kMedFe     = gGeoManager->GetMedium("HALL_FE_C2");
  
  // Floor thickness 
  Float_t dyFloor  =  190.;
  // Floor width
  Float_t dxFloor  = 1400.;
  // Floor level 
  Float_t  yFloor  = -801.;
  // Pit centre
  Float_t  zPit    = 2300.;
  // Pit radius
  Float_t  rPit    = 1140.;
  // Hall end 
  Float_t  zHall24 = 1700.;
  Float_t  zHall26 = 1900.;
    // Overlap between hall and pit radius
  Float_t oPit = zHall24 - (zPit - rPit);
  // Length of the L3 floor
  Float_t dzL3 = 1700.;
  // Start of hall roof in y
  Float_t yHall = 500.;
  // Radius of the hall roof
  Float_t rHall = 1070.;
  //
  Float_t epsBig   = 100.;
  Float_t epsSmall =   1.;
  
  

  //
  // RB24/26 Tunnel Floor 
  r   = 220.;
  h   = 140.;
  phi = TMath::ACos(h / r);
  xl  = r * TMath::Sin(phi);
  dr  = 1600.;
  dh  = dr * TMath::Cos(phi);
  dl  = dr * TMath::Sin(phi);
  if (gAlice->GetModule("ZDC") == 0) {
    //     No ZDC 
    hullen = 370.;
  } else {
    
    //     ZDC is present 
    hullen = 6520.;
  }

  TGeoVolume* voHUFL = new TGeoVolume("HUFL",
				      new TGeoTrd1(xl +dl, xl, hullen, dh / 2.),
				      kMedCC);
  r2 = hullen + zHall26;
  asHall->AddNode(voHUFL, 1, new TGeoCombiTrans(70., -100. - dh / 2., -r2 - 0.755, rot000));

  //
  // RB24/26 wall 
  phid     = phi * kRaddeg;
  TGeoVolume* voHUWA = new TGeoVolume("HUWA",
				      new TGeoTubeSeg(r, r+dr, hullen, phid - 90. + 0.002, 270. - phid - 0.002),
				      kMedCC);
  asHall->AddNode(voHUWA, 1, new TGeoTranslation(70., 40., -zHall26 - hullen + 0.002 ));
  //
  // Air inside tunnel
  TGeoTube* shHUWAT1 = new TGeoTube(0., r, hullen);
  shHUWAT1->SetName("shHUWAT1");
  //
  // Space for ZDC
  TGeoBBox*    shHUWAT2 = new TGeoBBox(70., 110., hullen + 20.);
  shHUWAT2->SetName("shHUWAT2");
  TGeoTranslation*   tHUWAT2 = new TGeoTranslation("tHUWAT2", -70., -30., 0.);
  tHUWAT2->RegisterYourself();

  TGeoBBox*    shHUWAT3 = new TGeoBBox(270., 110., hullen + 20.);
  shHUWAT3->SetName("shHUWAT3");
  TGeoTranslation*   tHUWAT3 = new TGeoTranslation("tHUWAT3", 0., -110. - 140., 0.);
  tHUWAT3->RegisterYourself();
  
  TGeoCompositeShape*  shHUWAT = new TGeoCompositeShape("HUWAT", "(shHUWAT1-shHUWAT2:tHUWAT2)-shHUWAT3:tHUWAT3");
  TGeoVolume* voHUWAT = new TGeoVolume("HUWAT", shHUWAT, kMedAir);
  asHall->AddNode(voHUWAT, 1, new TGeoTranslation(70., 40., -zHall26 - hullen - 0.755));
  
  //
  //  Hall floor 
  //  RB26 side
  phid      = 16.197;
  Float_t dzFloor26 = zHall26 - dzL3/2.;
  TGeoBBox* shHHF1 = new TGeoBBox(dxFloor/2. + 470., dyFloor/2., dzFloor26/2. - 0.002);
  shHHF1->SetName("shHHF1");
  TGeoVolume* voHHF1 = new TGeoVolume("HHF1", shHHF1, kMedCC);
  asHall->AddNode(voHHF1, 2, new TGeoTranslation(0., yFloor, -(dzL3/2. + dzFloor26/2.)));
  // RB24 side
  Float_t dzFloor24 = zHall24 - dzL3/2.;
  TGeoBBox* shHHF41 = new TGeoBBox(dxFloor/2. + 470., dyFloor/2., dzFloor24/2.);
  shHHF41->SetName("shHHF41");
  TGeoTube* shHHF42 = new TGeoTube(0., rPit + epsBig, dyFloor/2.);
  shHHF42->SetName("shHHF42");
  TGeoCombiTrans* trHHF42 = new TGeoCombiTrans("trHHF42", 0., 0., dzFloor24/2. + rPit - oPit, rot000);
  trHHF42->RegisterYourself();
  
  TGeoCompositeShape*  shHHF4 = new TGeoCompositeShape("HHF4", "shHHF41+shHHF42:trHHF42");
  TGeoVolume* voHHF4 = new TGeoVolume("HHF4", shHHF4, kMedCC);
  asHall->AddNode(voHHF4, 1, new TGeoTranslation(0., yFloor,  dzL3/2. + dzFloor24/2.));


  //
  //  Hall side walls 
  Float_t trH1   = (1273.78 - dyFloor)/ 2.;
  Float_t trBL1  = 207.3;
  Float_t trTL1  =  50.;
  Float_t trALP1 = TMath::ATan((trBL1 - trTL1) / 2. / trH1) * kRaddeg;
  dx = 1.5 * trBL1 - 0.5 * trTL1 + dxFloor/2. + dyFloor * TMath::Tan(phid * kDegrad);
  TGeoVolume* voHHW11 = new TGeoVolume("HHW11",
				       new TGeoTrap(dzFloor26/2. - 0.002, 0., 0., 
						    trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
				       kMedCC);
  TGeoVolume* voHHW12 = new TGeoVolume("HHW12",
				       new TGeoTrap(dzFloor24/2., 0., 0., 
						    trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
				       kMedCC);
 
  dy = yFloor + dyFloor/2. + trH1;
  
  asHall->AddNode(voHHW12, 1, new TGeoTranslation( dx, dy,  (dzL3/2. + dzFloor24/2.)));
  asHall->AddNode(voHHW12, 2, new TGeoCombiTrans (-dx, dy,  (dzL3/2. + dzFloor24/2.), rot001));
  asHall->AddNode(voHHW11, 1, new TGeoTranslation( dx, dy, -(dzL3/2. + dzFloor26/2.)));
  asHall->AddNode(voHHW11, 2, new TGeoCombiTrans (-dx, dy, -(dzL3/2. + dzFloor26/2.), rot001));

  Float_t boDY =  (yHall - (yFloor + dyFloor/2.) - 2. * trH1)/ 2.;
  Float_t dzHall = zHall26 + zHall24;

  TGeoVolume* voHBW1 = new TGeoVolume("HBW1", new TGeoBBox(50., boDY, dzHall / 2. - 0.05), kMedCC);

  asHall->AddNode(voHBW1, 1,  new TGeoTranslation( 1120., yHall - boDY, (zHall24-zHall26)/2.));
  asHall->AddNode(voHBW1, 2,  new TGeoTranslation(-1120., yHall - boDY, (zHall24-zHall26)/2.));

  //
  // Slanted wall close to L3 magnet 
  //
  phim =  45.;
  hm   = 790.;
  am   = hm * TMath::Tan(phim / 2. * kDegrad);
  bm   = (hm + 76.) / hm * am;
  cm   = bm * 2. / TMath::Sqrt(2.);
  trH1   =  (1273.78 - cm) / 2. - 0.002;
  trBL1  =  235. - cm * TMath::Tan(phid * kDegrad) / 2.;
  trTL1  =   50.;
  trALP1 = TMath::ATan((trBL1 - trTL1) / 2. / trH1) * kRaddeg;

  w1 = trBL1;
  dx = cm * TMath::Tan(phid * kDegrad) + dxFloor/2. + trBL1 * 1.5 - trTL1 * .5;

  TGeoVolume* voHHW2 = new TGeoVolume("HHW2",
				      new TGeoTrap(dzL3/2. - 0.002, 0., 0., 
						   trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
				      kMedCC);

  r2 = cm + yFloor - dyFloor/2. + trH1;

  asHall->AddNode(voHHW2, 1, new TGeoTranslation(dx, r2, 0.));
  asHall->AddNode(voHHW2, 2, new TGeoCombiTrans(-dx, r2, 0., rot001));

  trH1   = cm / 2.;
  trBL1  = w1 + cm / 2.;
  trTL1  = w1;
  trALP1 = TMath::ATan(.5) * kRaddeg;
  dx = 1170. - trBL1 * .5 - trTL1 * .5;

  TGeoVolume* voHHW3 = new TGeoVolume("HHW3",
				      new TGeoTrap(dzL3/2., 0., 0., 
						   trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
				      kMedCC);

  r2 = trH1 - 896.;
  asHall->AddNode(voHHW3, 1, new TGeoTranslation( dx, r2, 0.));
  asHall->AddNode(voHHW3, 2, new TGeoCombiTrans (-dx, r2, 0., rot001));
  //
  // Floor L3
  Float_t dyFloorL3  = 76.;
  Float_t dx1FloorL3 = rHall + epsBig - 2. * trBL1;
  Float_t dx2FloorL3 = dx1FloorL3 + TMath::Tan(phim * kDegrad) * dyFloorL3;
  
  
  TGeoVolume* voHHF2 = new TGeoVolume("HHF2", 
				      new TGeoTrd1(dx1FloorL3 - 0.5, dx2FloorL3 - 0.5, dzL3/2., dyFloorL3/2.), 
				      kMedCC);

  asHall->AddNode(voHHF2, 1, new TGeoCombiTrans(0., yFloor - dyFloor / 2. + dyFloorL3 / 2. - 0.5,0., rot000));
  //
  // Tunnel roof and pit
  // Roof
  TGeoTubeSeg* shHHC11 = new TGeoTubeSeg(rHall, rHall + 100., dzHall / 2., 0., 180.);
  shHHC11->SetName("shHHC11");
  // Pit 
  TGeoTube*    shHHC12 = new TGeoTube(rPit, rPit + 100., 1000.);
  shHHC12->SetName("shHHC12");
  // Pit inside
  TGeoTube*    shHHC13 = new TGeoTube(   0, rPit - epsSmall, 1000.);
  shHHC13->SetName("shHHC13");
  // Roof inside
  TGeoTubeSeg* shHHC14 = new TGeoTubeSeg(0., rHall, dzHall / 2. + epsBig, 0., 180.);
  shHHC14->SetName("shHHC14");

  TGeoCombiTrans* trHHC = new TGeoCombiTrans("trHHC", 0., 1000., dzHall/2. + rPit - oPit, rot000);
  trHHC->RegisterYourself();
  TGeoCompositeShape*  shHHC1 = new TGeoCompositeShape("HHC1", "shHHC11+shHHC12:trHHC-(shHHC14+shHHC13:trHHC)");
  TGeoVolume* voHHC1 = new TGeoVolume("HHC1", shHHC1, kMedCC);

  asHall->AddNode(voHHC1, 1, new TGeoTranslation(0., yHall, -(zHall26-zHall24)/2.));


  //
  // Pit wall ground level
  dy = yFloor + 1206. / 2. + dyFloor/2.;
  TGeoTube* shHHCPW1 = new TGeoTube(rPit, rPit + 100., 1206./2.);
  shHHCPW1->SetName("shHHCPW1");
  TGeoCombiTrans* trHHCPW1 = new TGeoCombiTrans("trHHCPW1", 0., 0., 0., rot000);
  trHHCPW1->RegisterYourself();

  TGeoBBox* shHHCPW2 = new TGeoBBox(rPit + 100., 1206./ 2. + 20., rPit + 100.);
  shHHCPW2->SetName("shHHCPW2");
  
  TGeoTube* shHHCPW3 = new TGeoTube(0., 60., 60.);
  shHHCPW3->SetName("shHHCPW3");

  
  TGeoTranslation* trHHCPW2 = new TGeoTranslation("trHHCPW2", 0., 0., -(rPit + 100.) - oPit);
  trHHCPW2->RegisterYourself();

  TGeoTranslation* trHHCPW3 = new TGeoTranslation("trHHCPW3", 0., -dy, rPit + 50.);
  trHHCPW3->RegisterYourself();

  TGeoCompositeShape*  shHHCPW 
      = new TGeoCompositeShape("HHCPW", "shHHCPW1:trHHCPW1-(shHHCPW2:trHHCPW2+shHHCPW3:trHHCPW3)");
  TGeoVolume* voHHCPW = new TGeoVolume("HHCPW", shHHCPW, kMedCC);

  asHall->AddNode(voHHCPW, 1, new TGeoTranslation(0., dy, 2300.));
  // 
  // Foundations of the Muon Spectrometer
  // Drawing ALIP2A_0110
  //
  TGeoVolumeAssembly* asFMS = new TGeoVolumeAssembly("asFMS");
  Float_t zFil = -1465.86 - 60.;
  // Muon Filter Foundation
  // Pillars
  dy = 263.54/2.;
  Float_t ys = yFloor + dyFloor / 2.;
  TGeoVolume* voFmsMfPil = new TGeoVolume("FmsMfPil", new TGeoBBox( 50., dy, 165.), kMedCC);
  ys += dy;
  asFMS->AddNode(voFmsMfPil, 1, new TGeoTranslation(-330. + 50., ys, zFil + 165. - 90.));
  asFMS->AddNode(voFmsMfPil, 2, new TGeoTranslation( 330. - 50., ys, zFil + 165  - 90.));
  //
  // Transverse bars
  ys += dy;
  dy = 91.32/2.;
  ys += dy;
  TGeoVolume* voFmsMfTb1 = new TGeoVolume("FmsMfTb1", new TGeoBBox(330., dy,  60.), kMedCC);
  asFMS->AddNode(voFmsMfTb1, 1, new TGeoTranslation(0., ys, zFil));
  ys += dy;
  dy = 41.14/2.;
  ys += dy;
  TGeoVolume* voFmsMfTb2 = new TGeoVolume("FmsMfTb2", new TGeoBBox(330., dy,  60.), kMedCC);
  asFMS->AddNode(voFmsMfTb2, 1, new TGeoTranslation(0., ys, zFil));
  //
  // Dipole foundation
  ys = yFloor + dyFloor / 2.;
  dy = (263.54 - 6.2)/2.;
  ys += dy;
  TGeoVolume* voFmsDf1 = new TGeoVolume("FmsDf1", new TGeoBBox(370., dy,  448.0 / 2.), kMedCC);
  asFMS->AddNode(voFmsDf1, 1, new TGeoTranslation(0., ys, zFil + 240. + 224.));
  TGeoVolume* voFmsDf2 = new TGeoVolume("FmsDf2", new TGeoBBox(370., (263.54 + 110.)/2.,  112.0 / 2.), kMedCC);
  asFMS->AddNode(voFmsDf2, 1, new TGeoTranslation(0., ys - 110./2., zFil + 688. + 56.));

  //
  // Shielding in front of L3 magnet in PX24 and UX25
  // Drawing ALIP2I__0016
  //

  TGeoVolumeAssembly* asShRb24 = new TGeoVolumeAssembly("ShRb24");
  //
  // Side walls 
  // start 7450 from IP
  TGeoVolume* voShRb24Sw = new TGeoVolume("ShRb24Sw", new TGeoBBox(80., 420., 520.), kMedCC);
  asShRb24->AddNode(voShRb24Sw, 1, new TGeoTranslation(+315, -420. + 140., 0.));
  asShRb24->AddNode(voShRb24Sw, 2, new TGeoTranslation(-315, -420. + 140., 0.));
  //
  // Roof
  TGeoVolume* voShRb24Ro = new TGeoVolume("ShRb24Ro", new TGeoBBox(395., 80., 520.), kMedCC);
  asShRb24->AddNode(voShRb24Ro, 1, new TGeoTranslation(0., +80. + 140., 0.));
  //
  // Concrete Plug
  TGeoBBox* shShRb24Pl1 = new TGeoBBox(235., 140., 40.);
  shShRb24Pl1->SetName("ShRb24Pl1");
  // Steel Plug
  TGeoBBox* shShRb24Pl4 = new TGeoBBox(15., 20., 40.);
  shShRb24Pl4->SetName("ShRb24Pl4");

  TGeoBBox* shShRb24Pl41 = new TGeoBBox(15., 20., 45.);
  shShRb24Pl41->SetName("ShRb24Pl41");
  
  //
  // Opening for beam pipe
  Float_t dxShRb24Pl = 14.5;
  Float_t dyShRb24Pl = 20.0;
  if (fNewShield24) {
    dxShRb24Pl = 6.;
    dyShRb24Pl = 6.;
  }
  TGeoBBox* shShRb24Pl2 = new TGeoBBox(dxShRb24Pl, dyShRb24Pl, 60.);
  shShRb24Pl2->SetName("ShRb24Pl2");
  //
  // Opening for tubes
  TGeoBBox* shShRb24Pl3 = new TGeoBBox(20., 60., 60.);
  shShRb24Pl3->SetName("ShRb24Pl3");

  TGeoTranslation* trPl3 = new TGeoTranslation("trPl3", +235. -90., 80., 0.);
  trPl3->RegisterYourself();

  TGeoTranslation* trPl4 = new TGeoTranslation("trPl4", 0., -6., 0.);
  trPl4->RegisterYourself();
  TGeoTranslation* trPl5 = new TGeoTranslation("trPl5", 0., +6., 0.);
  trPl5->RegisterYourself();

  TGeoCompositeShape*  shRb24Pl   = 0;
  TGeoCompositeShape*  shRb24PlSS = 0;
  if (!fNewShield24) {
    shRb24Pl = new TGeoCompositeShape("Rb24Pl", "ShRb24Pl1-ShRb24Pl2:trPl4-ShRb24Pl3:trPl3");
  } else {
    shRb24Pl   = new TGeoCompositeShape("Rb24Pl",   "ShRb24Pl1-(ShRb24Pl41:trPl4+ShRb24Pl3:trPl3)");
    shRb24PlSS = new TGeoCompositeShape("Rb24PlSS", "ShRb24Pl4-ShRb24Pl2:trPl5");
  }

  TGeoVolume* voRb24Pl = new TGeoVolume("Rb24Pl", shRb24Pl, kMedCC);

  asShRb24->AddNode(voRb24Pl, 1, new TGeoTranslation(0., 0., 520. - 40.));
  if (fNewShield24) {
    TGeoVolume* voRb24PlSS = new TGeoVolume("Rb24PlSS", shRb24PlSS, kMedST);
    asShRb24->AddNode(voRb24PlSS, 1, new TGeoTranslation(0., -6., 520. - 40.));
   }


  //
  // Concrete platform and shielding PX24
  // Drawing LHCJUX 250014
  //
  TGeoVolumeAssembly* asShPx24 = new TGeoVolumeAssembly("ShPx24");
  // Platform
  TGeoVolume* voShPx24Pl = new TGeoVolume("ShPx24Pl", new TGeoBBox(1613.5/2., 120./2., 1205./2.), kMedCC);
  asShPx24->AddNode(voShPx24Pl, 1, new TGeoTranslation(55., -140. - 60., 0.));
  // Pillars
  TGeoVolume* voShPx24Pi = new TGeoVolume("ShPx24Pi", new TGeoBBox(160./2., 440./2., 40/2.), kMedCC);
  asShPx24->AddNode(voShPx24Pi, 1, new TGeoTranslation(-180. - 80., -220. -260.,  1205./2. - 20.));
  asShPx24->AddNode(voShPx24Pi, 2, new TGeoTranslation(+290. + 80., -220. -260.,  1205./2. - 20.));
  asShPx24->AddNode(voShPx24Pi, 3, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. + 20. + 120.));
  asShPx24->AddNode(voShPx24Pi, 4, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. + 20. + 120.));
  asShPx24->AddNode(voShPx24Pi, 5, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. - 20. + 480.));
  asShPx24->AddNode(voShPx24Pi, 6, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. - 20. + 480.));
  asShPx24->AddNode(voShPx24Pi, 7, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. - 20. + 800.));
  asShPx24->AddNode(voShPx24Pi, 8, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. - 20. + 800.));
  // Side Walls 
  TGeoVolume* voShPx24Sw = new TGeoVolume("ShPx24Sw", new TGeoBBox(160./2., 280./2., 1205./2.), kMedCC);
  asShPx24->AddNode(voShPx24Sw, 1, new TGeoTranslation(-180, 0., 0.));
  asShPx24->AddNode(voShPx24Sw, 2, new TGeoTranslation(+290, 0., 0.));
  // Roof
  TGeoVolume* voShPx24Ro = new TGeoVolume("ShPx24Ro", new TGeoBBox(630./2., 160./2., 1205./2.), kMedCC);
  asShPx24->AddNode(voShPx24Ro, 1, new TGeoTranslation(55., 80.+ 140., 0.));
  asHall->AddNode(asShRb24, 1, new TGeoTranslation(0., 0., +745. + 520.));
  asHall->AddNode(asShPx24, 1, new TGeoTranslation(0., 0., +745. + 1040. + 1205./ 2.));
  // Stainless Steel Plug 80 cm thick
  TGeoBBox* shShPx24Pl1 = new TGeoBBox(155., 140., 40.);
  shShPx24Pl1->SetName("ShPx24Pl1");
  // Opening for beam pipe
  Float_t dxPx24Pl2 =  9.5;
  Float_t dyPx24Pl2 = 14.0;
  // Option for new shielding closer to the beam pipe
  if (fNewShield24) {
    dxPx24Pl2 = 6.;
    dyPx24Pl2 = 6.;
  }
  //
  TGeoBBox* shShPx24Pl2 = new TGeoBBox(dxPx24Pl2, dyPx24Pl2, 60.);
  shShPx24Pl2->SetName("ShPx24Pl2");
  TGeoTranslation* trPl2  = new TGeoTranslation("trPl2",  -55., 0., 0.);
  trPl2->RegisterYourself();

  TGeoCompositeShape*  shPx24Pl = new TGeoCompositeShape("Px24Pl", "ShPx24Pl1-ShPx24Pl2:trPl2");
  TGeoVolume* voPx24Pl = new TGeoVolume("Px24Pl", shPx24Pl, kMedST);
  asShPx24->AddNode(voPx24Pl, 1, new TGeoTranslation(55., 0., -1205./2. + 40.));
  asHall->AddNode(asFMS, 1, new TGeoTranslation(0.,  0., 0.));

  //
  // Scoring plane for beam background simulations
  //
  TGeoVolume* voRB24Scoring = new TGeoVolume("RB24Scoring", new TGeoTube(4.3, 300., 1.), kMedAir);
  asHall->AddNode(voRB24Scoring, 1, new TGeoTranslation(0., 0., 735.));
  //
  // Extra shielding in front of racks
  //
  if (fRackShield) {
    TGeoVolume* voRackShield = new TGeoVolume("RackShield", new TGeoBBox(30., 125., 50.), kMedFe);
    asHall->AddNode(voRackShield, 1, new TGeoTranslation(85., -495., 1726.));
  }
  //
  top->AddNode(asHall, 1, gGeoIdentity);
  
}

void AliHALLv3::Init()
{
  //
  // Initialise the module after the geometry has been defined
  //
    if(AliLog::GetGlobalDebugLevel()>0) {
	printf("%s: **************************************"
	       " HALL "
	       "**************************************\n",ClassName());
	printf("\n%s:      Version 3 of HALL initialised\n\n",ClassName());
	printf("%s: **************************************"
	       " HALL "
	       "**************************************\n",ClassName());
    }
//
// The reference volume id
    fRefVolumeId = TVirtualMC::GetMC()->VolId("RB24Scoring");
}

void AliHALLv3::StepManager()
{
//
// Stepmanager of AliHALLv2
// Used for recording of reference tracks entering scoring plane
//
  if (!fScoring) return;
  Int_t   copy, id;
  
  //
  // Only charged tracks
  if( !(TVirtualMC::GetMC()->TrackCharge()) ) return; 
  //
  // Only tracks entering mother volume
  // 

  id=TVirtualMC::GetMC()->CurrentVolID(copy);

  if ((id != fRefVolumeId))   return;
  if(!TVirtualMC::GetMC()->IsTrackEntering()) return;
  //
  // Add the reference track
  //
  AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kHALL);
}

 AliHALLv3.cxx:1
 AliHALLv3.cxx:2
 AliHALLv3.cxx:3
 AliHALLv3.cxx:4
 AliHALLv3.cxx:5
 AliHALLv3.cxx:6
 AliHALLv3.cxx:7
 AliHALLv3.cxx:8
 AliHALLv3.cxx:9
 AliHALLv3.cxx:10
 AliHALLv3.cxx:11
 AliHALLv3.cxx:12
 AliHALLv3.cxx:13
 AliHALLv3.cxx:14
 AliHALLv3.cxx:15
 AliHALLv3.cxx:16
 AliHALLv3.cxx:17
 AliHALLv3.cxx:18
 AliHALLv3.cxx:19
 AliHALLv3.cxx:20
 AliHALLv3.cxx:21
 AliHALLv3.cxx:22
 AliHALLv3.cxx:23
 AliHALLv3.cxx:24
 AliHALLv3.cxx:25
 AliHALLv3.cxx:26
 AliHALLv3.cxx:27
 AliHALLv3.cxx:28
 AliHALLv3.cxx:29
 AliHALLv3.cxx:30
 AliHALLv3.cxx:31
 AliHALLv3.cxx:32
 AliHALLv3.cxx:33
 AliHALLv3.cxx:34
 AliHALLv3.cxx:35
 AliHALLv3.cxx:36
 AliHALLv3.cxx:37
 AliHALLv3.cxx:38
 AliHALLv3.cxx:39
 AliHALLv3.cxx:40
 AliHALLv3.cxx:41
 AliHALLv3.cxx:42
 AliHALLv3.cxx:43
 AliHALLv3.cxx:44
 AliHALLv3.cxx:45
 AliHALLv3.cxx:46
 AliHALLv3.cxx:47
 AliHALLv3.cxx:48
 AliHALLv3.cxx:49
 AliHALLv3.cxx:50
 AliHALLv3.cxx:51
 AliHALLv3.cxx:52
 AliHALLv3.cxx:53
 AliHALLv3.cxx:54
 AliHALLv3.cxx:55
 AliHALLv3.cxx:56
 AliHALLv3.cxx:57
 AliHALLv3.cxx:58
 AliHALLv3.cxx:59
 AliHALLv3.cxx:60
 AliHALLv3.cxx:61
 AliHALLv3.cxx:62
 AliHALLv3.cxx:63
 AliHALLv3.cxx:64
 AliHALLv3.cxx:65
 AliHALLv3.cxx:66
 AliHALLv3.cxx:67
 AliHALLv3.cxx:68
 AliHALLv3.cxx:69
 AliHALLv3.cxx:70
 AliHALLv3.cxx:71
 AliHALLv3.cxx:72
 AliHALLv3.cxx:73
 AliHALLv3.cxx:74
 AliHALLv3.cxx:75
 AliHALLv3.cxx:76
 AliHALLv3.cxx:77
 AliHALLv3.cxx:78
 AliHALLv3.cxx:79
 AliHALLv3.cxx:80
 AliHALLv3.cxx:81
 AliHALLv3.cxx:82
 AliHALLv3.cxx:83
 AliHALLv3.cxx:84
 AliHALLv3.cxx:85
 AliHALLv3.cxx:86
 AliHALLv3.cxx:87
 AliHALLv3.cxx:88
 AliHALLv3.cxx:89
 AliHALLv3.cxx:90
 AliHALLv3.cxx:91
 AliHALLv3.cxx:92
 AliHALLv3.cxx:93
 AliHALLv3.cxx:94
 AliHALLv3.cxx:95
 AliHALLv3.cxx:96
 AliHALLv3.cxx:97
 AliHALLv3.cxx:98
 AliHALLv3.cxx:99
 AliHALLv3.cxx:100
 AliHALLv3.cxx:101
 AliHALLv3.cxx:102
 AliHALLv3.cxx:103
 AliHALLv3.cxx:104
 AliHALLv3.cxx:105
 AliHALLv3.cxx:106
 AliHALLv3.cxx:107
 AliHALLv3.cxx:108
 AliHALLv3.cxx:109
 AliHALLv3.cxx:110
 AliHALLv3.cxx:111
 AliHALLv3.cxx:112
 AliHALLv3.cxx:113
 AliHALLv3.cxx:114
 AliHALLv3.cxx:115
 AliHALLv3.cxx:116
 AliHALLv3.cxx:117
 AliHALLv3.cxx:118
 AliHALLv3.cxx:119
 AliHALLv3.cxx:120
 AliHALLv3.cxx:121
 AliHALLv3.cxx:122
 AliHALLv3.cxx:123
 AliHALLv3.cxx:124
 AliHALLv3.cxx:125
 AliHALLv3.cxx:126
 AliHALLv3.cxx:127
 AliHALLv3.cxx:128
 AliHALLv3.cxx:129
 AliHALLv3.cxx:130
 AliHALLv3.cxx:131
 AliHALLv3.cxx:132
 AliHALLv3.cxx:133
 AliHALLv3.cxx:134
 AliHALLv3.cxx:135
 AliHALLv3.cxx:136
 AliHALLv3.cxx:137
 AliHALLv3.cxx:138
 AliHALLv3.cxx:139
 AliHALLv3.cxx:140
 AliHALLv3.cxx:141
 AliHALLv3.cxx:142
 AliHALLv3.cxx:143
 AliHALLv3.cxx:144
 AliHALLv3.cxx:145
 AliHALLv3.cxx:146
 AliHALLv3.cxx:147
 AliHALLv3.cxx:148
 AliHALLv3.cxx:149
 AliHALLv3.cxx:150
 AliHALLv3.cxx:151
 AliHALLv3.cxx:152
 AliHALLv3.cxx:153
 AliHALLv3.cxx:154
 AliHALLv3.cxx:155
 AliHALLv3.cxx:156
 AliHALLv3.cxx:157
 AliHALLv3.cxx:158
 AliHALLv3.cxx:159
 AliHALLv3.cxx:160
 AliHALLv3.cxx:161
 AliHALLv3.cxx:162
 AliHALLv3.cxx:163
 AliHALLv3.cxx:164
 AliHALLv3.cxx:165
 AliHALLv3.cxx:166
 AliHALLv3.cxx:167
 AliHALLv3.cxx:168
 AliHALLv3.cxx:169
 AliHALLv3.cxx:170
 AliHALLv3.cxx:171
 AliHALLv3.cxx:172
 AliHALLv3.cxx:173
 AliHALLv3.cxx:174
 AliHALLv3.cxx:175
 AliHALLv3.cxx:176
 AliHALLv3.cxx:177
 AliHALLv3.cxx:178
 AliHALLv3.cxx:179
 AliHALLv3.cxx:180
 AliHALLv3.cxx:181
 AliHALLv3.cxx:182
 AliHALLv3.cxx:183
 AliHALLv3.cxx:184
 AliHALLv3.cxx:185
 AliHALLv3.cxx:186
 AliHALLv3.cxx:187
 AliHALLv3.cxx:188
 AliHALLv3.cxx:189
 AliHALLv3.cxx:190
 AliHALLv3.cxx:191
 AliHALLv3.cxx:192
 AliHALLv3.cxx:193
 AliHALLv3.cxx:194
 AliHALLv3.cxx:195
 AliHALLv3.cxx:196
 AliHALLv3.cxx:197
 AliHALLv3.cxx:198
 AliHALLv3.cxx:199
 AliHALLv3.cxx:200
 AliHALLv3.cxx:201
 AliHALLv3.cxx:202
 AliHALLv3.cxx:203
 AliHALLv3.cxx:204
 AliHALLv3.cxx:205
 AliHALLv3.cxx:206
 AliHALLv3.cxx:207
 AliHALLv3.cxx:208
 AliHALLv3.cxx:209
 AliHALLv3.cxx:210
 AliHALLv3.cxx:211
 AliHALLv3.cxx:212
 AliHALLv3.cxx:213
 AliHALLv3.cxx:214
 AliHALLv3.cxx:215
 AliHALLv3.cxx:216
 AliHALLv3.cxx:217
 AliHALLv3.cxx:218
 AliHALLv3.cxx:219
 AliHALLv3.cxx:220
 AliHALLv3.cxx:221
 AliHALLv3.cxx:222
 AliHALLv3.cxx:223
 AliHALLv3.cxx:224
 AliHALLv3.cxx:225
 AliHALLv3.cxx:226
 AliHALLv3.cxx:227
 AliHALLv3.cxx:228
 AliHALLv3.cxx:229
 AliHALLv3.cxx:230
 AliHALLv3.cxx:231
 AliHALLv3.cxx:232
 AliHALLv3.cxx:233
 AliHALLv3.cxx:234
 AliHALLv3.cxx:235
 AliHALLv3.cxx:236
 AliHALLv3.cxx:237
 AliHALLv3.cxx:238
 AliHALLv3.cxx:239
 AliHALLv3.cxx:240
 AliHALLv3.cxx:241
 AliHALLv3.cxx:242
 AliHALLv3.cxx:243
 AliHALLv3.cxx:244
 AliHALLv3.cxx:245
 AliHALLv3.cxx:246
 AliHALLv3.cxx:247
 AliHALLv3.cxx:248
 AliHALLv3.cxx:249
 AliHALLv3.cxx:250
 AliHALLv3.cxx:251
 AliHALLv3.cxx:252
 AliHALLv3.cxx:253
 AliHALLv3.cxx:254
 AliHALLv3.cxx:255
 AliHALLv3.cxx:256
 AliHALLv3.cxx:257
 AliHALLv3.cxx:258
 AliHALLv3.cxx:259
 AliHALLv3.cxx:260
 AliHALLv3.cxx:261
 AliHALLv3.cxx:262
 AliHALLv3.cxx:263
 AliHALLv3.cxx:264
 AliHALLv3.cxx:265
 AliHALLv3.cxx:266
 AliHALLv3.cxx:267
 AliHALLv3.cxx:268
 AliHALLv3.cxx:269
 AliHALLv3.cxx:270
 AliHALLv3.cxx:271
 AliHALLv3.cxx:272
 AliHALLv3.cxx:273
 AliHALLv3.cxx:274
 AliHALLv3.cxx:275
 AliHALLv3.cxx:276
 AliHALLv3.cxx:277
 AliHALLv3.cxx:278
 AliHALLv3.cxx:279
 AliHALLv3.cxx:280
 AliHALLv3.cxx:281
 AliHALLv3.cxx:282
 AliHALLv3.cxx:283
 AliHALLv3.cxx:284
 AliHALLv3.cxx:285
 AliHALLv3.cxx:286
 AliHALLv3.cxx:287
 AliHALLv3.cxx:288
 AliHALLv3.cxx:289
 AliHALLv3.cxx:290
 AliHALLv3.cxx:291
 AliHALLv3.cxx:292
 AliHALLv3.cxx:293
 AliHALLv3.cxx:294
 AliHALLv3.cxx:295
 AliHALLv3.cxx:296
 AliHALLv3.cxx:297
 AliHALLv3.cxx:298
 AliHALLv3.cxx:299
 AliHALLv3.cxx:300
 AliHALLv3.cxx:301
 AliHALLv3.cxx:302
 AliHALLv3.cxx:303
 AliHALLv3.cxx:304
 AliHALLv3.cxx:305
 AliHALLv3.cxx:306
 AliHALLv3.cxx:307
 AliHALLv3.cxx:308
 AliHALLv3.cxx:309
 AliHALLv3.cxx:310
 AliHALLv3.cxx:311
 AliHALLv3.cxx:312
 AliHALLv3.cxx:313
 AliHALLv3.cxx:314
 AliHALLv3.cxx:315
 AliHALLv3.cxx:316
 AliHALLv3.cxx:317
 AliHALLv3.cxx:318
 AliHALLv3.cxx:319
 AliHALLv3.cxx:320
 AliHALLv3.cxx:321
 AliHALLv3.cxx:322
 AliHALLv3.cxx:323
 AliHALLv3.cxx:324
 AliHALLv3.cxx:325
 AliHALLv3.cxx:326
 AliHALLv3.cxx:327
 AliHALLv3.cxx:328
 AliHALLv3.cxx:329
 AliHALLv3.cxx:330
 AliHALLv3.cxx:331
 AliHALLv3.cxx:332
 AliHALLv3.cxx:333
 AliHALLv3.cxx:334
 AliHALLv3.cxx:335
 AliHALLv3.cxx:336
 AliHALLv3.cxx:337
 AliHALLv3.cxx:338
 AliHALLv3.cxx:339
 AliHALLv3.cxx:340
 AliHALLv3.cxx:341
 AliHALLv3.cxx:342
 AliHALLv3.cxx:343
 AliHALLv3.cxx:344
 AliHALLv3.cxx:345
 AliHALLv3.cxx:346
 AliHALLv3.cxx:347
 AliHALLv3.cxx:348
 AliHALLv3.cxx:349
 AliHALLv3.cxx:350
 AliHALLv3.cxx:351
 AliHALLv3.cxx:352
 AliHALLv3.cxx:353
 AliHALLv3.cxx:354
 AliHALLv3.cxx:355
 AliHALLv3.cxx:356
 AliHALLv3.cxx:357
 AliHALLv3.cxx:358
 AliHALLv3.cxx:359
 AliHALLv3.cxx:360
 AliHALLv3.cxx:361
 AliHALLv3.cxx:362
 AliHALLv3.cxx:363
 AliHALLv3.cxx:364
 AliHALLv3.cxx:365
 AliHALLv3.cxx:366
 AliHALLv3.cxx:367
 AliHALLv3.cxx:368
 AliHALLv3.cxx:369
 AliHALLv3.cxx:370
 AliHALLv3.cxx:371
 AliHALLv3.cxx:372
 AliHALLv3.cxx:373
 AliHALLv3.cxx:374
 AliHALLv3.cxx:375
 AliHALLv3.cxx:376
 AliHALLv3.cxx:377
 AliHALLv3.cxx:378
 AliHALLv3.cxx:379
 AliHALLv3.cxx:380
 AliHALLv3.cxx:381
 AliHALLv3.cxx:382
 AliHALLv3.cxx:383
 AliHALLv3.cxx:384
 AliHALLv3.cxx:385
 AliHALLv3.cxx:386
 AliHALLv3.cxx:387
 AliHALLv3.cxx:388
 AliHALLv3.cxx:389
 AliHALLv3.cxx:390
 AliHALLv3.cxx:391
 AliHALLv3.cxx:392
 AliHALLv3.cxx:393
 AliHALLv3.cxx:394
 AliHALLv3.cxx:395
 AliHALLv3.cxx:396
 AliHALLv3.cxx:397
 AliHALLv3.cxx:398
 AliHALLv3.cxx:399
 AliHALLv3.cxx:400
 AliHALLv3.cxx:401
 AliHALLv3.cxx:402
 AliHALLv3.cxx:403
 AliHALLv3.cxx:404
 AliHALLv3.cxx:405
 AliHALLv3.cxx:406
 AliHALLv3.cxx:407
 AliHALLv3.cxx:408
 AliHALLv3.cxx:409
 AliHALLv3.cxx:410
 AliHALLv3.cxx:411
 AliHALLv3.cxx:412
 AliHALLv3.cxx:413
 AliHALLv3.cxx:414
 AliHALLv3.cxx:415
 AliHALLv3.cxx:416
 AliHALLv3.cxx:417
 AliHALLv3.cxx:418
 AliHALLv3.cxx:419
 AliHALLv3.cxx:420
 AliHALLv3.cxx:421
 AliHALLv3.cxx:422
 AliHALLv3.cxx:423
 AliHALLv3.cxx:424
 AliHALLv3.cxx:425
 AliHALLv3.cxx:426
 AliHALLv3.cxx:427
 AliHALLv3.cxx:428
 AliHALLv3.cxx:429
 AliHALLv3.cxx:430
 AliHALLv3.cxx:431
 AliHALLv3.cxx:432
 AliHALLv3.cxx:433
 AliHALLv3.cxx:434
 AliHALLv3.cxx:435
 AliHALLv3.cxx:436
 AliHALLv3.cxx:437
 AliHALLv3.cxx:438
 AliHALLv3.cxx:439
 AliHALLv3.cxx:440
 AliHALLv3.cxx:441
 AliHALLv3.cxx:442
 AliHALLv3.cxx:443
 AliHALLv3.cxx:444
 AliHALLv3.cxx:445
 AliHALLv3.cxx:446
 AliHALLv3.cxx:447
 AliHALLv3.cxx:448
 AliHALLv3.cxx:449
 AliHALLv3.cxx:450
 AliHALLv3.cxx:451
 AliHALLv3.cxx:452
 AliHALLv3.cxx:453
 AliHALLv3.cxx:454
 AliHALLv3.cxx:455
 AliHALLv3.cxx:456
 AliHALLv3.cxx:457
 AliHALLv3.cxx:458
 AliHALLv3.cxx:459
 AliHALLv3.cxx:460
 AliHALLv3.cxx:461
 AliHALLv3.cxx:462
 AliHALLv3.cxx:463
 AliHALLv3.cxx:464
 AliHALLv3.cxx:465
 AliHALLv3.cxx:466
 AliHALLv3.cxx:467
 AliHALLv3.cxx:468
 AliHALLv3.cxx:469
 AliHALLv3.cxx:470
 AliHALLv3.cxx:471
 AliHALLv3.cxx:472
 AliHALLv3.cxx:473
 AliHALLv3.cxx:474
 AliHALLv3.cxx:475
 AliHALLv3.cxx:476
 AliHALLv3.cxx:477
 AliHALLv3.cxx:478
 AliHALLv3.cxx:479
 AliHALLv3.cxx:480
 AliHALLv3.cxx:481
 AliHALLv3.cxx:482
 AliHALLv3.cxx:483
 AliHALLv3.cxx:484
 AliHALLv3.cxx:485
 AliHALLv3.cxx:486
 AliHALLv3.cxx:487
 AliHALLv3.cxx:488
 AliHALLv3.cxx:489
 AliHALLv3.cxx:490
 AliHALLv3.cxx:491
 AliHALLv3.cxx:492
 AliHALLv3.cxx:493
 AliHALLv3.cxx:494
 AliHALLv3.cxx:495
 AliHALLv3.cxx:496
 AliHALLv3.cxx:497
 AliHALLv3.cxx:498
 AliHALLv3.cxx:499
 AliHALLv3.cxx:500
 AliHALLv3.cxx:501
 AliHALLv3.cxx:502
 AliHALLv3.cxx:503
 AliHALLv3.cxx:504
 AliHALLv3.cxx:505
 AliHALLv3.cxx:506
 AliHALLv3.cxx:507
 AliHALLv3.cxx:508
 AliHALLv3.cxx:509
 AliHALLv3.cxx:510
 AliHALLv3.cxx:511
 AliHALLv3.cxx:512
 AliHALLv3.cxx:513
 AliHALLv3.cxx:514
 AliHALLv3.cxx:515
 AliHALLv3.cxx:516
 AliHALLv3.cxx:517
 AliHALLv3.cxx:518
 AliHALLv3.cxx:519
 AliHALLv3.cxx:520
 AliHALLv3.cxx:521
 AliHALLv3.cxx:522
 AliHALLv3.cxx:523
 AliHALLv3.cxx:524
 AliHALLv3.cxx:525
 AliHALLv3.cxx:526
 AliHALLv3.cxx:527
 AliHALLv3.cxx:528
 AliHALLv3.cxx:529
 AliHALLv3.cxx:530
 AliHALLv3.cxx:531
 AliHALLv3.cxx:532
 AliHALLv3.cxx:533
 AliHALLv3.cxx:534
 AliHALLv3.cxx:535
 AliHALLv3.cxx:536
 AliHALLv3.cxx:537
 AliHALLv3.cxx:538
 AliHALLv3.cxx:539
 AliHALLv3.cxx:540
 AliHALLv3.cxx:541
 AliHALLv3.cxx:542
 AliHALLv3.cxx:543
 AliHALLv3.cxx:544