X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STRUCT%2FAliHALLv3.cxx;h=cf348da3cd1dbb3b0ac90f5315d02ef95ffae1fb;hb=23c4053245aa6d49dd24b26663e708e29fd5b75c;hp=becb3e911a6a00f6bffe27cbe4660774548d85f5;hpb=4cb05f4155687115d87d54651acb94a143d93605;p=u%2Fmrichter%2FAliRoot.git diff --git a/STRUCT/AliHALLv3.cxx b/STRUCT/AliHALLv3.cxx index becb3e911a6..cf348da3cd1 100644 --- a/STRUCT/AliHALLv3.cxx +++ b/STRUCT/AliHALLv3.cxx @@ -32,6 +32,8 @@ #include "AliMagF.h" #include "AliRun.h" #include "AliLog.h" +#include "AliMC.h" +#include "AliTrackReference.h" #include #include #include @@ -47,7 +49,7 @@ ClassImp(AliHALL) //_____________________________________________________________________________ -AliHALLv3::AliHALLv3() +AliHALLv3::AliHALLv3() : fNewShield24(0), fRefVolumeId(-1), fScoring(0), fRackShield(0) { // // Default constructor for the experimental Hall @@ -56,7 +58,7 @@ AliHALLv3::AliHALLv3() //_____________________________________________________________________________ AliHALLv3::AliHALLv3(const char *name, const char *title) - : AliHALL(name,title) + : AliHALL(name,title), fNewShield24(0), fRefVolumeId(-1), fScoring(0), fRackShield(0) { // // Standard constructor for the experimental Hall @@ -90,6 +92,7 @@ void AliHALLv3::CreateGeometry() 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.; @@ -377,12 +380,25 @@ void AliHALLv3::CreateGeometry() TGeoVolume* voShRb24Ro = new TGeoVolume("ShRb24Ro", new TGeoBBox(395., 80., 520.), kMedCC); asShRb24->AddNode(voShRb24Ro, 1, new TGeoTranslation(0., +80. + 140., 0.)); // - // Plug + // 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 - TGeoBBox* shShRb24Pl2 = new TGeoBBox(15., 20., 60.); + 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 @@ -391,9 +407,29 @@ void AliHALLv3::CreateGeometry() TGeoTranslation* trPl3 = new TGeoTranslation("trPl3", +235. -90., 80., 0.); trPl3->RegisterYourself(); - TGeoCompositeShape* shRb24Pl = new TGeoCompositeShape("Rb24Pl", "ShRb24Pl1-(ShRb24Pl2+ShRb24Pl3:trPl3)"); + + 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 @@ -426,17 +462,83 @@ void AliHALLv3::CreateGeometry() TGeoBBox* shShPx24Pl1 = new TGeoBBox(155., 140., 40.); shShPx24Pl1->SetName("ShPx24Pl1"); // Opening for beam pipe - TGeoBBox* shShPx24Pl2 = new TGeoBBox(15., 20., 60.); + 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.); + 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); +} +