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

#include <TVirtualMC.h>
#include <TGeoManager.h>
#include <TGeoVolume.h>
#include <TGeoMedium.h>
#include <TGeoMatrix.h>
#include <TGeoArb8.h>
#include <TGeoBBox.h>
#include <TGeoTube.h>
#include <TGeoCone.h>
#include <TGeoPcon.h>
#include <TGeoCompositeShape.h>

#include "AliConst.h"
#include "AliDIPOv3.h"
#include "AliMagF.h"
#include "AliRun.h"
 
ClassImp(AliDIPOv3)
 
//_____________________________________________________________________________
AliDIPOv3::AliDIPOv3() 
{
  //
  // Last design of magnetic dipole version 3
  //
}
 
//_____________________________________________________________________________
AliDIPOv3::AliDIPOv3(const char *name, const char *title)
  : AliDIPOv2(name,title)
{
  //
  // Standard constructor for the magnetic dipole version 3    
}


//_____________________________________________________________________________
void AliDIPOv3::CreateSpectrometerDipole()
{
// Detailed dipole geometry as built
//
// Drawing: ALIP2A__0026
// Geometer measurements: EDMS 596079
//                        EDMS 584963
    
//
// The top volume
//
    TGeoVolume* top = gGeoManager->GetVolume("ALIC");
//
// Media
//
    TGeoMedium* kMedSteel    = gGeoManager->GetMedium("DIPO_ST_C3");
    TGeoMedium* kMedCoil     = gGeoManager->GetMedium("DIPO_Coil_C1");
    TGeoMedium* kMedCoilSh   = gGeoManager->GetMedium("DIPO_Coil_C3");
    TGeoMedium* kMedCable    = gGeoManager->GetMedium("DIPO_ALU_C2");
    TGeoMedium* kMedAlu      = gGeoManager->GetMedium("DIPO_ALU_C2");
    TGeoMedium* kMedAir      = gGeoManager->GetMedium("DIPO_AIR_MUON");
//
// Rotations 
// 
    Float_t alhc = 0.794;
    
    TGeoRotation* rotxz      = new TGeoRotation("rotxz",    270.,   0., 90.,  90.,  180., 0.);
    TGeoRotation* rotiz      = new TGeoRotation("rotiz",     90.,   0., 90.,  90.,  180., 0.);
    TGeoRotation* rotxzlhc   = new TGeoRotation("rotxzlhc", 180.,  180. + alhc, 0.);

    TGeoRotation* rotxz108   = new TGeoRotation("rotxz108", 90., 108., 90., 198.,  180.,   0.);
    TGeoRotation* rotxz180   = new TGeoRotation("rotxz180", 90., 180., 90., 270.,  180.,   0.);
    TGeoRotation* rotxz288   = new TGeoRotation("rotxz288", 90., 288., 90.,  18.,  180.,   0.);

    TGeoRotation* rotxy180   = new TGeoRotation("rotxy180", 90., 180., 90., 270.,    0.,   0.);
    TGeoRotation* rotxy108   = new TGeoRotation("rotxy108", 90., 108., 90., 198.,    0.,   0.);
    TGeoRotation* rotxy288   = new TGeoRotation("rotxy288", 90., 288., 90.,  18.,    0.,   0.);

    TGeoRotation* rot00      = new TGeoRotation("rot00",   180.,   0., 90., 151.,   90.,  61.);
    TGeoRotation* rot01      = new TGeoRotation("rot01",   180.,   0., 90.,  29.,-  90., -61.);
    TGeoRotation* rot02      = new TGeoRotation("rot02",     0.,   0., 90., 151.,   90.,  61.);
    TGeoRotation* rot03      = new TGeoRotation("rot03",     0.,   0., 90.,  29.,-  90., -61.);
    TGeoRotation* rot04      = new TGeoRotation("rot04",    90.,  61., 90., 151.,    0.,   0.);
    TGeoRotation* rot05      = new TGeoRotation("rot05",    90., -61., 90.,-151.,    0.,   0.);
    TGeoRotation* rot06      = new TGeoRotation("rot06",    90., 119., 90., 209.,    0.,   0.);
    TGeoRotation* rot07      = new TGeoRotation("rot07",    90.,-119., 90.,-209.,    0.,   0.);

    const Float_t dipoleL       = 498.;
    const Float_t kZDipoleR     = 1244.;
    const Float_t kZDipole      = kZDipoleR - dipoleL/2.; 
    const Float_t kZDipoleF     = kZDipoleR - dipoleL; 
    const Float_t yokeLength    = 309.4;
    const Float_t blockLength   = yokeLength / 7.;
    const Float_t gapWidthFront = 297.6;
    const Float_t gapWidthRear  = 395.4;
    const Float_t dGap          = (gapWidthRear - gapWidthFront) / 12.;
    const Float_t gapHeight     = 609.1;
    const Float_t blockHeight   = 145.45;
    const Float_t dzCoil        = 4.45;

    Float_t dx, dy, dz;
    

    //
    // Mother volume for muon spectrometer tracking station 3

    Float_t z30 =  825.;
    Float_t zst = 1052.;

    Float_t rcD0 = (kZDipoleF - 5.)  * TMath::Tan(9. * kDegrad);
    Float_t rcD1 = kZDipole * TMath::Tan(9. * kDegrad);
    Float_t rcD2 = rcD1 + dipoleL/2. * TMath::Tan(10.1 * kDegrad);
    Float_t rc30 = z30 * TMath::Tan(9. * kDegrad);
    Float_t rcst = rcD1  + (zst - kZDipole) * TMath::Tan(10.1 * kDegrad);
    
 
    Float_t riD0 = (kZDipoleF - 5.)  * TMath::Tan(2. * kDegrad) + 0.2;
    Float_t riD1 = 28.9;
    Float_t riD2 = 35.8;
    Float_t riD3 = riD2 + (kZDipoleR - zst)      * TMath::Tan(2. * kDegrad);
    Float_t riD4 = riD2 + (kZDipoleR - zst + 5.) * TMath::Tan(2. * kDegrad);
    

    TGeoPcon* shDDIP1 =  new TGeoPcon("shDDIP1", 0., 360., 7);

    shDDIP1->DefineSection(0,  (kZDipoleF - 5.), riD0, rcD0);
    shDDIP1->DefineSection(1,  z30            , riD1, rc30);
    shDDIP1->DefineSection(2,  kZDipole       , riD1, rcD1);
    shDDIP1->DefineSection(3,  zst            , riD1, rcst);
    shDDIP1->DefineSection(4,  zst            , riD2, rcst);
    shDDIP1->DefineSection(5,  kZDipoleR      , riD3, rcD2);
    shDDIP1->DefineSection(6, (kZDipoleR + 5.), riD4, rcD2);

	  // JC Ch6 is 2x5cm longer than Ch5
    //    TGeoBBox* shDDIP2 =  new TGeoBBox(164., 182., 36.); 	  
	  Double_t xD0 = 162.;
	  Double_t xD1 = 171.;
 	  Double_t yD0 = 182.;
	  Double_t zD0 = 36.;
	
  	Double_t xy[16] = {0};
	  xy[0]  = -xD0; xy[1]  = -yD0; 
 	  xy[2]  = -xD0; xy[3]  =  yD0; 
	  xy[4]  =  xD0; xy[5]  =  yD0;
	  xy[6]  =  xD0; xy[7]  = -yD0;
 	  xy[8]  = -xD1; xy[9]  = -yD0; 
	  xy[10] = -xD1; xy[11] =  yD0; 
	  xy[12] =  xD1; xy[13] =  yD0;
	  xy[14] =  xD1; xy[15] = -yD0;	
	  TGeoArb8* shDDIP2 =  new TGeoArb8(zD0, xy); 
    shDDIP2->SetName("shDDIP2");
    TGeoTranslation* trDDIP2 = new TGeoTranslation("trDDIP2", 0., 0., kZDipole - 12.);
    trDDIP2->RegisterYourself();

    TGeoTube* shDDIP3 =  new TGeoTube(0., 30., 40.);
    shDDIP3->SetName("shDDIP3");


    TGeoCompositeShape*  shDDIP = new TGeoCompositeShape("shDDIP", "shDDIP1+(shDDIP2:trDDIP2-shDDIP3:trDDIP2)");
    TGeoVolume*  voDDIP = new TGeoVolume("DDIP", shDDIP, kMedAir);
//
// Yoke
// 

    TGeoVolumeAssembly* asYoke = new TGeoVolumeAssembly("DYoke");	
// Base
    char name[16];
    Float_t lx0 = gapWidthFront + 2. * blockHeight;
    Float_t lx  = lx0;
    
    TGeoVolumeAssembly* asYokeBase = new TGeoVolumeAssembly("DYokeBase");	
    for (Int_t i = 0; i < 7; i++) {
      snprintf(name, 16, "DYokeBaseBlock%1d", i);
      TGeoVolume*  voBaseBlock = new TGeoVolume(name,
						  new TGeoBBox(lx/2., blockHeight/2., blockLength/2.),
						  kMedSteel);
	asYokeBase->AddNode(voBaseBlock, 1, new TGeoTranslation(0., 0., Float_t(i - 3) * blockLength));
	lx += 2. * dGap;
    }

    asYoke->AddNode(asYokeBase, 1, new TGeoTranslation(0., -(gapHeight + blockHeight)/2. , 0.));
    asYoke->AddNode(asYokeBase, 2, new TGeoTranslation(0., +(gapHeight + blockHeight)/2. , 0.));

 
// Side Wall
    TGeoVolumeAssembly* asYokeSide = new TGeoVolumeAssembly("DYokeSide");	
    TGeoVolume*  voSideBlock = new TGeoVolume("DSideBlock",
					      new TGeoBBox(blockHeight/2., gapHeight/2., blockLength/2.),
					      kMedSteel);
    
    for (Int_t i = 0; i < 7; i++) {
	asYokeSide->AddNode(voSideBlock, i, new TGeoTranslation(Float_t(i - 3) * dGap, 0., Float_t(i - 3) * blockLength));
    }


    asYoke->AddNode(asYokeSide, 1, new TGeoTranslation(+lx0/2. + 3. * dGap - blockHeight/2., 0., 0.));
    asYoke->AddNode(asYokeSide, 2, new TGeoCombiTrans( -lx0/2. - 3. * dGap + blockHeight/2., 0., 0., rotiz));

//    
// Coils
//
    Float_t coilRi   = 206.;
    Float_t coilD    =  70.;
    Float_t coilRo   = coilRi + coilD;
    Float_t coilH    =  77.;
    Float_t phiMin   = -61.;
    Float_t phiMax   =  61.;
    Float_t lengthSt = 240. + 33.9;    
    Float_t phiKnee  = phiMax * kDegrad;
    Float_t  rKnee   = 31.5;
    
//  Circular sections
    TGeoVolumeAssembly* asCoil = new TGeoVolumeAssembly("DCoil");	

    TGeoVolume*  voDC1 = new TGeoVolume("DC1",
					      new TGeoTubeSeg(coilRi, coilRo, coilH / 2., phiMin, phiMax),
					      kMedCoil);
    TGeoVolume*  voDC2 = new TGeoVolume("DC2",
					      new TGeoTubeSeg(coilRi + 5., coilRo - 5., coilH / 2., phiMin, phiMax),
					      kMedCoilSh);

    voDC1->AddNode(voDC2, 1, gGeoIdentity);
    voDC2->SetVisibility(0);

    dz = lengthSt / 2. + coilH / 2. + rKnee;
    dx = 0.;
    
    asCoil->AddNode(voDC1, 1, new TGeoTranslation(-dx, 0., -dz));
    asCoil->AddNode(voDC1, 2, new TGeoCombiTrans(  dx, 0., -dz, rotxy180));
    asCoil->AddNode(voDC1, 3, new TGeoTranslation(-dx, 0.,  dz));
    asCoil->AddNode(voDC1, 4, new TGeoCombiTrans(  dx, 0.,  dz, rotxz180));

    
// 90deg Knees

    
    TGeoVolume* voDC11 = new TGeoVolume("DC11", 
				       new TGeoTubeSeg(rKnee, rKnee + coilH, coilD/2., 270., 360.),
				       kMedCoil);
    
    
    dx = - TMath::Cos(phiKnee) * (coilRi + coilD/2.); 
    dy = - TMath::Sin(phiKnee) * (coilRi + coilD/2.);  
    dz = lengthSt / 2.;

    asCoil->AddNode(voDC11, 1, new TGeoCombiTrans( dx, dy,  -dz, rot00));
    asCoil->AddNode(voDC11, 2, new TGeoCombiTrans( dx, dy,   dz, rot02));
    asCoil->AddNode(voDC11, 3, new TGeoCombiTrans(-dx, dy,  -dz, rot01));
    asCoil->AddNode(voDC11, 4, new TGeoCombiTrans(-dx, dy,   dz, rot03));

    TGeoVolume* voDC12 = new TGeoVolume("DC12", 
				       new TGeoTubeSeg(rKnee, rKnee + coilH, coilD/2., 0., 90.),
				       kMedCoil);
    

    asCoil->AddNode(voDC12, 1, new TGeoCombiTrans( dx, -dy,  -dz, rot01));
    asCoil->AddNode(voDC12, 2, new TGeoCombiTrans( dx, -dy,   dz, rot03));
    asCoil->AddNode(voDC12, 3, new TGeoCombiTrans(-dx, -dy,  -dz, rot00));
    asCoil->AddNode(voDC12, 4, new TGeoCombiTrans(-dx, -dy,   dz, rot02));

// Straight sections

    
    TGeoVolume* voDL0 = new TGeoVolume("DL0", 
				       new TGeoBBox(coilD / 2. + 2., coilH / 2. + 2., lengthSt / 2.),
				       kMedCoil);

    TGeoVolume* voDL1 = new TGeoVolume("DL1", 
				       new TGeoBBox(coilD / 2., coilH / 2., lengthSt / 2.),
				       kMedCoil);
    

    TGeoVolume* voDL2 = new TGeoVolume("DL2", 
				       new TGeoBBox(coilD / 2. - 5., coilH / 2. - 5., lengthSt / 2. - 5.),
				       kMedCoilSh);
    // Sleeves
    TGeoVolume* voDL3 = new TGeoVolume("DL3", 
				       new TGeoBBox(1., coilH / 2., 120.),
				       kMedAlu);

    TGeoVolume* voDL4 = new TGeoVolume("DL4", 
				       new TGeoBBox(coilD/2., 1., 120.),
				       kMedAlu);
    
    voDL0->SetVisibility(0);
    voDL1->AddNode(voDL2, 1, gGeoIdentity);
    voDL0->AddNode(voDL1, 1, gGeoIdentity);
    voDL0->AddNode(voDL3, 1, new TGeoTranslation(-coilD/2. - 1., 0., 0.));
    voDL0->AddNode(voDL3, 2, new TGeoTranslation(+coilD/2. + 1., 0., 0.));
    voDL0->AddNode(voDL4, 1, new TGeoTranslation(0., -coilH/2. - 1., 0.));
    voDL0->AddNode(voDL4, 2, new TGeoTranslation(0., +coilH/2. + 1., 0.));
    
    
    dx += (rKnee + coilH/2.)  * TMath::Sin(phiKnee);
    dy -= (rKnee + coilH/2.)  * TMath::Cos(phiKnee);
    dz = 0.; 
    
    asCoil->AddNode(voDL0, 1, new TGeoCombiTrans( dx,  dy, dz, rot04));
    asCoil->AddNode(voDL0, 2, new TGeoCombiTrans( dx, -dy, dz, rot05));
    asCoil->AddNode(voDL0, 3, new TGeoCombiTrans(-dx,  dy, dz, rot06));
    asCoil->AddNode(voDL0, 4, new TGeoCombiTrans(-dx, -dy, dz, rot07));

// Contactor
// Outer face planes
    
    TGeoVolumeAssembly* asContactor = new TGeoVolumeAssembly("DContactor");
    dx = -5.;
    TGeoVolume* voDC10 = new TGeoVolume("DC10", 
					new TGeoTubeSeg(coilRo + 5.1, coilRo + 73.5, 1., -20., 20.),
					kMedCable);
    asContactor->AddNode(voDC10, 1, new TGeoTranslation(dx, 0, -32.325));
    asContactor->AddNode(voDC10, 2, new TGeoTranslation(dx, 0, +32.325));
 

// Coil Support
// 
    Float_t sW = 83.;
    
    TGeoVolumeAssembly* asDCoilSupport = new TGeoVolumeAssembly("DCoilSupport");

    // Steel fixed to the yoke
    TGeoVolume* voDCS01 = new TGeoVolume("DCS01", 
					 new TGeoTubeSeg(coilRo, 325.,  1., 21., 51.),
					 kMedAlu);
    
    // Steel on the coil
    TGeoVolume* voDCS02 = new TGeoVolume("DCS02", 
					 new TGeoTubeSeg(coilRo, coilRo + 3.125, sW/2., 21., 51.),
					 kMedAlu);
    TGeoVolume* voDCS021 = new TGeoVolume("DCS021", 
					 new TGeoConeSeg(sW/2., coilRo + 3.124, 320., coilRo + 3.125, coilRo + 5.125, 21., 21.4),
					 kMedAlu);
    

    // Sleeves
    TGeoVolume* voDCS03 = new TGeoVolume("DCS03", 
					 new TGeoTubeSeg(coilRi - 3.125, coilRo + 3.125,  3.125/2., 21., 51.),
					 kMedAlu);

    TGeoVolume* voDCS04 = new TGeoVolume("DCS04", 
					 new TGeoTubeSeg(coilRi - 3.125, coilRi,  coilH/2., 21., 51.),
					 kMedAlu);
    

    TGeoVolume* voDCS05 = new TGeoVolume("DCS05", 
					 new TGeoTubeSeg(coilRi - 3.125, coilRo,  3.125/2., 21., 51.),
					 kMedAlu);
    // 
    asDCoilSupport->AddNode(voDCS02, 1, new TGeoTranslation(0., 0., -(sW - coilH)/2.));
    asDCoilSupport->AddNode(voDCS04, 1, gGeoIdentity);    
    for (Int_t i = 0; i < 9; i++) 
    {
	char nameR[16];
	snprintf(nameR, 16, "rotdcs%1d", i);
	Float_t phi = Float_t(i) * 3.75;
	TGeoRotation* rot   = new TGeoRotation(nameR, 90., phi, 90., 90. + phi,    0.,   0.);	
	asDCoilSupport->AddNode(voDCS021, i, new TGeoCombiTrans(0., 0.004, -(sW - coilH)/2., rot));    
    }
    


    asDCoilSupport->AddNode(voDCS01, 1, new TGeoTranslation(0., 0., -sW/2. - (sW - coilH)/2. - 3.125/2.));    
    asDCoilSupport->AddNode(voDCS03, 1, new TGeoTranslation(0., 0., +coilH/2. + 3.125/2.));    
    asDCoilSupport->AddNode(voDCS05, 1, new TGeoTranslation(0., 0., -coilH/2. - 3.125/2.));    


    //
    // SAA1 Support: Hanger 1
    //
    TGeoTranslation* trHanger = new TGeoTranslation("trHanger", 0., 250., 0.);
    trHanger->RegisterYourself();
    
    Float_t rmin1, rmin2, rmax1, rmax2;

    Float_t zHanger1 = 811.9;
    TGeoBBox* shHanger11  = new TGeoBBox(2.5/2., 250., 25./2.);
    shHanger11->SetName("shHanger11");
    
    rmin1 = (zHanger1 - 13.) * TMath::Tan(2. * kDegrad);
    rmin2 = rmin1 + 26. * TMath::Tan( 2.0 * kDegrad);

    rmax1 = (zHanger1 - 13.) * TMath::Tan(9. * kDegrad);
    rmax2 = rmax1 + 26. * TMath::Tan(9. * kDegrad);

    TGeoCone* shHanger12  = new TGeoCone(13., rmin1, rmax1, rmin2, rmax2);
    shHanger12->SetName("shHanger12");
    TGeoCompositeShape*  shHanger1 = new TGeoCompositeShape("shHanger1", "shHanger12*shHanger11:trHanger");
    TGeoVolume* voHanger1 = new TGeoVolume("DHanger1", shHanger1, kMedSteel);
    //
    // SAA1 Support: Hanger 2
    //
    Float_t zHanger2 = 1171.9;
    TGeoBBox* shHanger21  = new TGeoBBox(3.5/2., 250., 25./2.);
    shHanger21->SetName("shHanger21");

    rmin1 = 35.8 + (zHanger2 - 13. - zst) * TMath::Tan(2. * kDegrad);
    rmin2 = rmin1 + 26. * TMath::Tan( 2.0 * kDegrad);

    rmax1 = rcD1 + (zHanger2 - 13. - kZDipole) * TMath::Tan(10.1 * kDegrad);
    rmax2 = rmax1 + 26. * TMath::Tan(10.1 * kDegrad);
    TGeoCone* shHanger22  = new TGeoCone(13., rmin1, rmax1, rmin2, rmax2);
    shHanger22->SetName("shHanger22");

    TGeoCompositeShape*  shHanger2 = new TGeoCompositeShape("shHanger2", "shHanger22*shHanger21:trHanger");
    
    TGeoVolume* voHanger2 = new TGeoVolume("DHanger2", shHanger2, kMedSteel);
    //
    // Hanger support
    Float_t hsLength = yokeLength + (zHanger2 - kZDipole - yokeLength/2.) + 25./2.;
    
    TGeoVolume* voHS1 = new TGeoVolume("DHS1", new TGeoBBox( 1.5, 12.5, hsLength/2.), kMedSteel);
    TGeoVolume* voHS2 = new TGeoVolume("DHS2", new TGeoBBox(12.5,  1.5, hsLength/2.), kMedSteel);
    Float_t hsH = gapHeight/2. + blockHeight - (rmax1+rmax2)/2. - 2.;
    
    TGeoVolume* voHS3 = new TGeoVolume("DHS3", new TGeoBBox(3.5/2., hsH/2., 25./2.),    kMedSteel);

    TGeoVolumeAssembly* asHS = new TGeoVolumeAssembly("asHS");
    asHS->AddNode(voHS1, 1, gGeoIdentity);
    asHS->AddNode(voHS2, 1, new TGeoTranslation(0., +14., 0.));
    asHS->AddNode(voHS2, 2, new TGeoTranslation(0., -14., 0.));
    asHS->AddNode(voHS3, 1, new TGeoTranslation(0., -hsH/2. - 14. -1.5, hsLength/2. - 25./2.));
    
    

    dz = zHanger1;
    voDDIP->AddNode(voHanger1, 1, new TGeoTranslation(0., 0., dz));

    dz = zHanger2;
    voDDIP->AddNode(voHanger2, 1, new TGeoTranslation(0., 0., dz));
    
    
    
    
    // Assembly everything

    TGeoVolumeAssembly* asDipole = new TGeoVolumeAssembly("Dipole");
    // Yoke
    asDipole->AddNode(asYoke, 1, new TGeoTranslation(0., 0., -dzCoil));
    asDipole->AddNode(asCoil, 1, gGeoIdentity);
    // Contactor
    dz = lengthSt / 2. + coilH / 2. + rKnee;
    asDipole->AddNode(asContactor, 1, new TGeoTranslation(0., 0., dz + dzCoil));
    asDipole->AddNode(asContactor, 2, new TGeoCombiTrans( 0., 0., dz - dzCoil, rotxy180));
    // Coil support
    asDipole->AddNode(asDCoilSupport, 1, new TGeoTranslation(0., 0., dz));
    asDipole->AddNode(asDCoilSupport, 2, new TGeoCombiTrans( 0., 0., dz, rotxy180));
    asDipole->AddNode(asDCoilSupport, 3, new TGeoCombiTrans( 0., 0., dz, rotxy108));
    asDipole->AddNode(asDCoilSupport, 4, new TGeoCombiTrans( 0., 0., dz, rotxy288));
    
    asDipole->AddNode(asDCoilSupport, 5, new TGeoCombiTrans( 0., 0., -dz, rotiz));
    asDipole->AddNode(asDCoilSupport, 6, new TGeoCombiTrans( 0., 0., -dz, rotxz108));
    asDipole->AddNode(asDCoilSupport, 7, new TGeoCombiTrans( 0., 0., -dz, rotxz180));
    asDipole->AddNode(asDCoilSupport, 8, new TGeoCombiTrans( 0., 0., -dz, rotxz288));
    
    // Hanger (Support)
    dy = gapHeight/2. + blockHeight + 14.;
    
    asDipole->AddNode(asHS, 1, new TGeoTranslation(0., dy + 1.5, ((zHanger2 - kZDipole - yokeLength/2.) + 25./2.)/2.));
    
    
    asDipole->SetVisContainers(1);
    voDDIP->SetVisibility(0);

    top->AddNode(asDipole, 1, new TGeoCombiTrans(0.,  dipoleL / 2. * TMath::Tan(alhc * kDegrad), -kZDipole, rotxzlhc));
    top->AddNode(voDDIP,   1, new TGeoCombiTrans(0., 0., 0., rotxz));
}







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