X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSv11Hybrid.cxx;h=7865f46923ad6bbc79c39e4c6afb0ee0bf6600ec;hb=943fb20f68d979109497911102eb7444cfbeb6d6;hp=ed976bcd6bf7feaa828066a8b6f9a1c57d3fe634;hpb=7d6c23de9d505e0d06000ee5de632e19377a46f8;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSv11Hybrid.cxx b/ITS/AliITSv11Hybrid.cxx index ed976bcd6bf..7865f46923a 100644 --- a/ITS/AliITSv11Hybrid.cxx +++ b/ITS/AliITSv11Hybrid.cxx @@ -1,5 +1,5 @@ /************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * @@ -70,26 +70,20 @@ // Updates concerning the geometry: versioning system, new V11hybrid version, bug fixes (B.Nilsend and L. Gaudichet // - #include -#include -#include +#include +#include #include #include -#include -#include -#include -#include #include #include +#include +#include #include #include "AliITS.h" #include "AliITSDetTypeSim.h" #include "AliITSgeom.h" -#include "AliITSgeomSDD.h" -#include "AliITSgeomSPD.h" -#include "AliITSgeomSSD.h" #include "AliITShit.h" #include "AliITSCalibrationSDD.h" #include "AliITSsegmentationSDD.h" @@ -106,15 +100,13 @@ #include "AliITSv11GeometrySDD.h" #include "AliITSv11GeometrySSD.h" #include "AliITSv11GeometrySupport.h" +#include "AliGeomManager.h" ClassImp(AliITSv11Hybrid) //______________________________________________________________________ AliITSv11Hybrid::AliITSv11Hybrid(): - AliITS(), - fGeomDetOut(kFALSE), - fGeomDetIn(kFALSE), fByThick(kTRUE), fMajorVersion(IsVersion()), fMinorVersion(-1), @@ -143,8 +135,6 @@ AliITSv11Hybrid::AliITSv11Hybrid(): //______________________________________________________________________ AliITSv11Hybrid::AliITSv11Hybrid(const char *title) : AliITS("ITS", title), - fGeomDetOut(kFALSE), - fGeomDetIn(kFALSE), fByThick(kTRUE), fMajorVersion(IsVersion()), fMinorVersion(1), @@ -210,18 +200,11 @@ AliITSv11Hybrid::AliITSv11Hybrid(const char *title) SetThicknessChip2(); SetDensityServicesByThickness(); - fEuclidGeometry="$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.euc"; - strncpy(fEuclidGeomDet,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det",60); - strncpy(fRead,fEuclidGeomDet,60); - strncpy(fWrite,fEuclidGeomDet,60); - strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60); } //______________________________________________________________________ AliITSv11Hybrid::AliITSv11Hybrid(const char *name, const char *title) : AliITS("ITS", title), - fGeomDetOut(kFALSE), - fGeomDetIn(kFALSE), fByThick(kTRUE), fMajorVersion(IsVersion()), fMinorVersion(1), @@ -290,11 +273,6 @@ AliITSv11Hybrid::AliITSv11Hybrid(const char *name, const char *title) SetThicknessChip2(); SetDensityServicesByThickness(); - fEuclidGeometry="$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.euc"; - strncpy(fEuclidGeomDet,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det",60); - strncpy(fRead,fEuclidGeomDet,60); - strncpy(fWrite,fEuclidGeomDet,60); - strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60); } //______________________________________________________________________ @@ -313,7 +291,7 @@ AliITSv11Hybrid::~AliITSv11Hybrid() { } //______________________________________________________________________ -void AliITSv11Hybrid::SetT2Lmatrix(const char *name, Double_t yShift, +void AliITSv11Hybrid::SetT2Lmatrix(Int_t uid, Double_t yShift, Bool_t yFlip, Bool_t yRot180) const { @@ -323,12 +301,8 @@ void AliITSv11Hybrid::SetT2Lmatrix(const char *name, Double_t yShift, // // This function is used in AddAlignableVolumes() - TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(name); - const char *path = alignableEntry->GetTitle(); - - if (!gGeoManager->cd(path)) - AliFatal(Form("Volume path %s not valid!",path)); - TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(uid); + TGeoHMatrix* globMatrix = alignableEntry->GetGlobalOrig(); Double_t *gtrans = globMatrix->GetTranslation(), rotMatrix[9]; memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); @@ -336,22 +310,26 @@ void AliITSv11Hybrid::SetT2Lmatrix(const char *name, Double_t yShift, if (yRot180) { al = TMath::ATan2(rotMatrix[1],-rotMatrix[0]); } + Double_t xShift = gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al); + Double_t zShift = -gtrans[2]; TGeoHMatrix *matLtoT = new TGeoHMatrix; - matLtoT->SetDx( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); // translation + matLtoT->SetDx( xShift ); // translation matLtoT->SetDy( yShift ); - matLtoT->SetDz(-gtrans[2]); + matLtoT->SetDz( zShift ); rotMatrix[0]= 0; rotMatrix[1]= 1; rotMatrix[2]= 0; // + rotation rotMatrix[3]= 1; rotMatrix[4]= 0; rotMatrix[5]= 0; rotMatrix[6]= 0; rotMatrix[7]= 0; rotMatrix[8]=-1; if (yFlip) rotMatrix[3] = -1; // flipping in y (for SPD1) + if (yFlip) rotMatrix[1] = -1; // flipping in y (for SPD1) if (yRot180) { // rotation of pi around the axis perpendicular to the wafer + if (yFlip) matLtoT->SetDx( -xShift ); // flipping in y (for SPD1) matLtoT->SetDy( -yShift ); + matLtoT->SetDz( -zShift ); + rotMatrix[8]=1; rotMatrix[3] = -1; if (yFlip) rotMatrix[3] = 1; // flipping in y (for SPD1) - matLtoT->SetDz(gtrans[2]); - rotMatrix[8]=1; } TGeoRotation rot; @@ -386,6 +364,9 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ return; } + AliGeomManager::ELayerID layerId; + Int_t modUID, modnum; + if( !gGeoManager->SetAlignableEntry("ITS","ALIC_1/ITSV_1") ) AliFatal(Form("Unable to set alignable entry ! %s :: %s", "ITS","ALIC_1/ITSV_1")); @@ -404,6 +385,7 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ TString strEntryName4; //===== SPD layers ===== + if (AliITSInitGeometry::SPDIsTGeoNative()) { // new SPD geometry TString str0 = "ALIC_1/ITSV_1/ITSSPD_1/ITSSPDCarbonFiberSectorV_"; @@ -417,6 +399,9 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ TString halfStave; TString module; + layerId = AliGeomManager::kSPD1; + modnum = 0; + for(Int_t cSect = 0; cSect<10; cSect++) { sector = str0; @@ -455,18 +440,18 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t cLad=0; cLad<2; cLad++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); module = halfStave; module += str2; module += cLad+cHS*2+1; strEntryName4 = strEntryName3; strEntryName4 += strLadder; strEntryName4 += cLad+cHS*2; - if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(), - module.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data(),modUID)) AliFatal(Form("New lay 1: Unable to set alignable entry 4! %s::%s", strEntryName4.Data(),module.Data())); - SetT2Lmatrix(strEntryName4.Data(), 0.0081, kTRUE, kTRUE); + SetT2Lmatrix(modUID, 0.0081, kTRUE, kTRUE); // 0.0081 is the shift between the centers of alignable // and sensitive volumes. It is directly extracted from // the new SPD geometry @@ -475,6 +460,8 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ } // end for cStave } // end for cSect + layerId = AliGeomManager::kSPD2; + modnum = 0; str1 = "/ITSSPDSensitiveVirtualvolumeM0_1/ITSSPDlay2-Stave_"; str2 = "/ITSSPDlay2-Ladder_"; @@ -513,18 +500,18 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t cLad=0; cLad<2; cLad++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); module = halfStave; module += str2; module += cLad+cHS*2 +1; strEntryName4 = strEntryName3; strEntryName4 += strLadder; strEntryName4 += cLad+cHS*2; - if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(), - module.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data(),modUID)) AliFatal(Form("New lay 2: Unable to set alignable entry 4! %s::%s", strEntryName4.Data(),module.Data())); - SetT2Lmatrix(strEntryName4.Data(), -0.0081, kFALSE); + SetT2Lmatrix(modUID, -0.0081, kFALSE); } // end for cLad } // end for cHS } // end for cStave @@ -543,6 +530,9 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ TString halfStave; TString module; + layerId = AliGeomManager::kSPD1; + modnum = 0; + for(Int_t cSect = 0; cSect<10; cSect++) { sector = str0; @@ -584,6 +574,7 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t cLadder = 0; cLadder<2; cLadder++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); module = halfStave; module += str2; module += cLadder+cHS*2+1; @@ -591,17 +582,19 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ strEntryName4 += strLadder; strEntryName4 += cLadder+cHS*2; //printf("%s == %s\n",strEntryName4.Data(),module.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(), - module.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data(),modUID)) AliFatal(Form("Old lay 1: Unable to set alignable entry 4! %s::%s", - strEntryName4.Data(),module.Data())); + strEntryName4.Data(),module.Data())); - SetT2Lmatrix(strEntryName4.Data(), -fChip1*0.0001/2., kTRUE); + SetT2Lmatrix(modUID, -fChip1*0.0001/2., kTRUE); } // end for cLadder } // end for cHS } // end for cStave } // end for cSect + layerId = AliGeomManager::kSPD2; + modnum = 0; + str1Bis = "/L2H-STAVE"; str1 = "/I20B_"; str2 = "/I1D7_"; @@ -646,6 +639,7 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t cLad =0; cLad<2; cLad++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); module = halfStave; module += str2; module += cLad+cHS*2+1; @@ -653,12 +647,11 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ strEntryName4 += strLadder; strEntryName4 += cLad+cHS*2; //printf("%s == %s\n",strEntryName4.Data(),module.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(), - module.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data(),modUID)) AliFatal(Form("Old lay2: Unable to set alignable entry 4! %s::%s", strEntryName4.Data(),module.Data())); - SetT2Lmatrix(strEntryName4.Data(), -fChip2*0.0001/2., kFALSE); + SetT2Lmatrix(modUID, -fChip2*0.0001/2., kFALSE); } // end for cLad } // end for cHS } // end for cStave @@ -668,11 +661,12 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ //===== SDD layers ===== if (AliITSInitGeometry::SDDIsTGeoNative()) { // new SDD geometry + layerId = AliGeomManager::kSDD1; + modnum = 0; TString str0 = "/ALIC_1/ITSV_1/ITSsddLayer3_1/ITSsddLadd_"; // SDD layer1 TString str1 = "/ITSsddSensor3_"; - TString str2 = "/ITSsddWafer3_1"; TString ladder; - TString wafer; + TString sensor; for(Int_t c1 = 0; c1<14; c1++) { @@ -689,29 +683,26 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =0; c2<6; c2++) { - wafer = ladder; - wafer += str1; - wafer += c2; - wafer += str2; // one wafer + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); + sensor = ladder; + sensor += str1; + sensor += c2; strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += c2; //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),sensor.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", - strEntryName2.Data(),wafer.Data())); + strEntryName2.Data(),sensor.Data())); - if(c1 != 2) { - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, c2>=3); - } else {// for ladder 2, mounted with a pi rot around y - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, c2<3); - } + SetT2Lmatrix(modUID, 0, kFALSE, c2>=3); } } + layerId = AliGeomManager::kSDD2; + modnum = 0; str0 = "/ALIC_1/ITSV_1/ITSsddLayer4_1/ITSsddLadd_"; // SDD layer2 str1 = "/ITSsddSensor4_"; - str2 = "/ITSsddWafer4_1"; for(Int_t c1 = 0; c1<22; c1++) { @@ -728,24 +719,27 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =0; c2<8; c2++) { - wafer = ladder; - wafer += str1; - wafer += c2; - wafer += str2; // one wafer + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); + sensor = ladder; + sensor += str1; + sensor += c2; strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += c2; //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),sensor.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", - strEntryName2.Data(),wafer.Data())); + strEntryName2.Data(),sensor.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, c2>=4); + SetT2Lmatrix(modUID, 0, kFALSE, c2>=4); } } } else { // else old SDD geometry + layerId = AliGeomManager::kSDD1; + modnum = 0; + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_"; TString str1 = "/I302_"; @@ -766,20 +760,23 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =1; c2<=6; c2++){ + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; // one wafer strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += (c2-1); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE); } } + layerId = AliGeomManager::kSDD2; + modnum = 0; str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_"; str1 = "/I402_"; @@ -797,17 +794,18 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =1; c2<=8; c2++){ + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; // one wafer strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += (c2-1); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s,%s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE); } } } // end SDD @@ -815,6 +813,8 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ //===== SSD layers ===== if (AliITSInitGeometry::SSDIsTGeoNative()) { // new SSD geometry + layerId = AliGeomManager::kSSD1; + modnum = 0; TString str0 = "/ALIC_1/ITSV_1/ITSssdLayer5_1/ITSssdLay5Ladd_";//SSD layer1 TString str1 = "/ITSssdSensor5_"; TString str2 = ""; @@ -836,6 +836,7 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =0; c2<22; c2++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; @@ -844,14 +845,16 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ strEntryName2 += strSensor; strEntryName2 += c2; //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE, kFALSE); } } + layerId = AliGeomManager::kSSD2; + modnum = 0; str0 = "/ALIC_1/ITSV_1/ITSssdLayer6_1/ITSssdLay6Ladd_"; // SSD layer2 str1 = "/ITSssdSensor6_"; str2 = ""; @@ -871,6 +874,7 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 =0; c2<25; c2++) { + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; @@ -879,15 +883,18 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ strEntryName2 += strSensor; strEntryName2 += c2; //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE, kFALSE); } } } else { // else old SSD geometry + + layerId = AliGeomManager::kSSD1; + modnum = 0; TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_"; TString str1 = "/I562_"; TString ladder; @@ -907,20 +914,23 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 = 1; c2<=22; c2++){ + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; // one wafer strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += (c2-1); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE); } } + layerId = AliGeomManager::kSSD2; + modnum = 0; str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_"; str1 = "/I566_"; @@ -938,79 +948,23 @@ void AliITSv11Hybrid::AddAlignableVolumes() const{ for(Int_t c2 = 1; c2<=25; c2++){ + modUID = AliGeomManager::LayerToVolUID(layerId,modnum++); wafer = ladder; wafer += str1; wafer += c2; // one wafer strEntryName2 = strEntryName1; strEntryName2 += strSensor; strEntryName2 += (c2-1); - if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data(),modUID)) AliFatal(Form("Unable to set alignable entry 2! %s :: %s", strEntryName2.Data(),wafer.Data())); - SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE); + SetT2Lmatrix(modUID, 0, kFALSE); } } } // end SSD geometry } -//______________________________________________________________________ -void AliITSv11Hybrid::BuildGeometry(){ - // Geometry builder for the ITS version 10. Event Display geometry. - // Inputs: - // none. - // Outputs: - // none. - // Return: - // none. - - TNode *node, *top; - - const Int_t kColorITS=kYellow; - // - top = gAlice->GetGeometry()->GetNode("alice"); - - - new TTUBE("S_layer1","Layer1 of ITS","void", - 3.8095,3.8095+1.03*9.36/100.,14.35); - top->cd(); - node = new TNode("Layer1","Layer1","S_layer1",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); - - new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35); - top->cd(); - node = new TNode("Layer2","Layer2","S_layer2",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); - - new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1); - top->cd(); - node = new TNode("Layer3","Layer3","S_layer3",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); - - new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1); - top->cd(); - node = new TNode("Layer4","Layer4","S_layer4",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); - - new TTUBE("S_layer5","Layer5 of ITS","void", - 38.5,38.5+0.91*9.36/100.,49.405); - top->cd(); - node = new TNode("Layer5","Layer5","S_layer5",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); - - new TTUBE("S_layer6","Layer6 of ITS","void", - 43.5765,43.5765+0.87*9.36/100.,55.27); - top->cd(); - node = new TNode("Layer6","Layer6","S_layer6",0,0,0,""); - node->SetLineColor(kColorITS); - fNodes->Add(node); -} - //______________________________________________________________________ void AliITSv11Hybrid::CreateGeometry() { @@ -1023,8 +977,8 @@ void AliITSv11Hybrid::CreateGeometry() { CreateOldGeometry(); - TGeoVolume *vITS = geoManager->GetVolume("ITSV"); - TGeoVolume *vITSD = geoManager->GetVolume("ITSD"); + TGeoVolume *vITSV = geoManager->GetVolume("ITSV"); + TGeoVolume *vITSS = geoManager->GetVolume("ITSS"); const Char_t *cvsDate="$Date$"; @@ -1032,33 +986,49 @@ void AliITSv11Hybrid::CreateGeometry() { const Int_t kLength=100; Char_t vstrng[kLength]; if(fInitGeom.WriteVersionString(vstrng,kLength,(AliITSVersion_t)IsVersion(), - fMinorVersion,cvsDate,cvsRevision)) - vITS->SetTitle(vstrng); + fMinorVersion,cvsDate,cvsRevision)) { + vITSV->SetTitle(vstrng); + vITSS->SetTitle(vstrng); + } if (AliITSInitGeometry::SPDIsTGeoNative()) { - fSPDgeom->SPDSector(vITS); + fSPDgeom->SPDSector(vITSV); } if (AliITSInitGeometry::SDDIsTGeoNative()) { - fSDDgeom->Layer3(vITS); - fSDDgeom->Layer4(vITS); - fSDDgeom->ForwardLayer3(vITSD); - fSDDgeom->ForwardLayer4(vITSD); + fSDDgeom->Layer3(vITSV); + fSDDgeom->Layer4(vITSV); + fSDDgeom->ForwardLayer3(vITSV); + fSDDgeom->ForwardLayer4(vITSV); } + if (AliITSInitGeometry::SSDIsTGeoNative()) { - fSSDgeom->Layer5(vITS); - fSSDgeom->Layer6(vITS); - fSSDgeom->LadderSupportLayer5(vITS); - fSSDgeom->LadderSupportLayer6(vITS); - fSSDgeom->EndCapSupportSystemLayer6(vITS); - fSSDgeom->EndCapSupportSystemLayer5(vITS); + fSSDgeom->Layer5(vITSV); + fSSDgeom->Layer6(vITSV); + fSSDgeom->LadderSupportLayer5(vITSV); + fSSDgeom->LadderSupportLayer6(vITSV); + fSSDgeom->EndCapSupportSystemLayer6(vITSV); + fSSDgeom->EndCapSupportSystemLayer5(vITSV); } if (AliITSInitGeometry::SPDshieldIsTGeoNative()) - fSupgeom->SPDCone(vITS); + fSupgeom->SPDCone(vITSV); if (AliITSInitGeometry::SDDconeIsTGeoNative()) - fSupgeom->SDDCone(vITS); + fSupgeom->SDDCone(vITSV); + + if (AliITSInitGeometry::SSDconeIsTGeoNative()) + fSupgeom->SSDCone(vITSV); + + if (AliITSInitGeometry::ServicesAreTGeoNative()) { + fSDDgeom->SDDCables(vITSV); + fSSDgeom->SSDCables(vITSV); + fSupgeom->ServicesCableSupport(vITSS); + } + + if (AliITSInitGeometry::SupportIsTGeoNative()) { + fSupgeom->ITSTPCSupports(vITSS); + } } //______________________________________________________________________ @@ -1684,7 +1654,9 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[48] = ztpc+4.+0.1; dgh[49] = 62.0;//62.4; dgh[50] = 85.; - gMC->Gsvolu("ITSV", "PCON", idtmed[205], dgh, 51); +// gMC->Gsvolu("ITSV", "PCON", idtmed[205], dgh, 51); + new TGeoVolumeAssembly("ITSV"); + new TGeoVolumeAssembly("ITSS"); // --- Place the ghost volume in its mother volume (ALIC) and make it // invisible @@ -1694,6 +1666,7 @@ void AliITSv11Hybrid::CreateOldGeometry(){ //gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "MANY"); //=== LG gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY"); //=== LG + gMC->Gspos("ITSS", 1, "ALIC", 0., 0., 0., 0, "ONLY"); //=== MS // --- Define ghost volume containing the six layers and fill it with air @@ -1743,9 +1716,15 @@ void AliITSv11Hybrid::CreateOldGeometry(){ //====================================================================== //TGeoVolumeAssembly *dITS = new TGeoVolumeAssembly("ITSD"); + if (! AliITSInitGeometry::SPDshieldIsTGeoNative() || + ! AliITSInitGeometry::SPDIsTGeoNative() || + ! AliITSInitGeometry::SDDIsTGeoNative() || + ! AliITSInitGeometry::SSDIsTGeoNative() || + ! AliITSInitGeometry::SDDconeIsTGeoNative() || + ! AliITSInitGeometry::SSDconeIsTGeoNative() ) { new TGeoVolumeAssembly("ITSD"); gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., idrotm[199], "ONLY"); - + } // --- Define SPD (option 'b') volumes ---------------------------- @@ -4511,7 +4490,6 @@ void AliITSv11Hybrid::CreateOldGeometry(){ gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY"); gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY"); - // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES // UPPER PART @@ -4542,7 +4520,7 @@ void AliITSv11Hybrid::CreateOldGeometry(){ // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART // UPPER PART - dgh[0] = (ztpc-97.5)/2.; + dgh[0] = (ztpc-97.5-2.3)/2.; dgh[1] = 46.2; dgh[2] = 46.2+1.0; dgh[3] = 62.3; @@ -4550,12 +4528,13 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[5] = 12.; dgh[6] = 168.; gMC->Gsvolu("ICU1", "CONS", idtmed[213], dgh, 7); - gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + // gMC->Gspos("ICU1", 1, "ITSV", 0., 0.,97.5+dgh[0], 0, "ONLY"); + gMC->Gspos("ICU1", 1, "ITSV", 0., 0.,-(97.5+dgh[0]+4.6), idrotm[199], "ONLY"); // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART // LOWER PART - dgh[0] = (ztpc-97.5)/2.; + dgh[0] = (ztpc-97.5-2.3)/2.; dgh[1] = 46.2; dgh[2] = 46.2+1.0; dgh[3] = 62.3; @@ -4563,13 +4542,14 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[5] = 192.; dgh[6] = 348.; gMC->Gsvolu("ICU2", "CONS", idtmed[213], dgh, 7); - gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + // gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + gMC->Gspos("ICU2", 1, "ITSV", 0., 0., -(97.5+dgh[0]+4.6), idrotm[199], "ONLY"); // -- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART // UPPER PART - dgh[0] = (ztpc-97.5)/2.; + dgh[0] = (ztpc-97.5-2.3)/2.; dgh[1] = 46.2+1.0; dgh[2] = 46.2+1.0+1.5; dgh[3] = 62.3+1.0; @@ -4577,12 +4557,13 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[5] = 12.; dgh[6] = 168.; gMC->Gsvolu("ICC1", "CONS", idtmed[225], dgh, 7); - gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + // gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + gMC->Gspos("ICC1", 1, "ITSV", 0., 0., -(97.5+dgh[0]+4.6), idrotm[199], "ONLY"); // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART // LOWER PART - dgh[0] = (ztpc-97.5)/2.; + dgh[0] = (ztpc-97.5-2.3)/2.; dgh[1] = 46.2+1.0; dgh[2] = 46.2+1.0+1.5; dgh[3] = 62.3+1.0; @@ -4590,159 +4571,382 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[5] = 192.; dgh[6] = 348.; gMC->Gsvolu("ICC2", "CONS", idtmed[225], dgh, 7); - gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + // gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); + gMC->Gspos("ICC2", 1, "ITSV", 0., 0., -(97.5+dgh[0]+4.6), idrotm[199], "ONLY"); // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // UPPER PART - dgh[0] = 62.; + dgh[0] = 62.2; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICU3", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); + // gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); + gMC->Gspos("ICU3", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]+1.), idrotm[199], "ONLY"); // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // LOWER PART - dgh[0] = 62.; + dgh[0] = 62.2; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICU4", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); + // gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); + gMC->Gspos("ICU4", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]+1.), idrotm[199], "ONLY"); // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART // UPPER PART - dgh[0] = 62.1; + dgh[0] = 64.8; dgh[1] = 74.5; dgh[2] = 0.75; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICC3", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY"); + // gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY"); + gMC->Gspos("ICC3", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), idrotm[199], "ONLY"); // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART // LOWER PART - dgh[0] = 62.1; + dgh[0] = 64.8; dgh[1] = 74.5; dgh[2] = 0.75; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICC4", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY"); + // gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY"); + gMC->Gspos("ICC4", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), idrotm[199], "ONLY"); + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. // THE ABSORBER - COPPER PART - UPPER PART - + dgh[0] = 46.; dgh[1] = 46.+1.0; - dgh[2] = (ztpc-97.5+1.5)/2.; +// dgh[2] = (ztpc-97.5+1.5-2.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICU5", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); - + // gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0; + dgh[2] = 64.0+1.0; + dgh[3] = 46.; + dgh[4] = 46.+1.0; + dgh[5] = 12.; + dgh[6] = 168.; + gMC->Gsvolu("ICU9", "CONS", idtmed[213], dgh, 7); + gMC->Gspos("ICU9", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. // THE ABSORBER - COPPER PART - LOWER PART dgh[0] = 46.; dgh[1] = 46.+1.0; - dgh[2] = (ztpc-97.5+1.5)/2.; +// dgh[2] = (ztpc-97.5+1.5-2.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICU6", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); - + // gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0; + dgh[2] = 64.0+1.0; + dgh[3] = 46.; + dgh[4] = 46.+1.0; + dgh[5] = 192.; + dgh[6] = 348.; + gMC->Gsvolu("ICU0", "CONS", idtmed[213], dgh, 7); + gMC->Gspos("ICU0", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. // THE ABSORBER - CARBON PART - UPPER PART dgh[0] = 46.+1.0; dgh[1] = 46.+1.0+1.5; - dgh[2] = (ztpc-97.5)/2.; +// dgh[2] = (ztpc-97.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICC5", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); - + // gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0+1.0; + dgh[2] = 64.0+1.0+1.5; + dgh[3] = 46.+1.0; + dgh[4] = 46.+1.0+1.5; + dgh[5] = 12.; + dgh[6] = 168.; + gMC->Gsvolu("ICC9", "CONS", idtmed[225], dgh, 7); + gMC->Gspos("ICC9", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. // THE ABSORBER - CARBON PART - LOWER PART dgh[0] = 46.+1.0; dgh[1] = 46.+1.0+1.5; - dgh[2] = (ztpc-97.5)/2.; +// dgh[2] = (ztpc-97.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICC6", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + // gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0+1.0; + dgh[2] = 64.0+1.0+1.5; + dgh[3] = 46.+1.0; + dgh[4] = 46.+1.0+1.5; + dgh[5] = 192.; + dgh[6] = 348.; + gMC->Gsvolu("ICC0", "CONS", idtmed[225], dgh, 7); + gMC->Gspos("ICC0", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. + // THE ABSORBER - ALUMINUM PART - UPPER PART + + dgh[0] = 46.+1.0+1.5; + dgh[1] = 46.+1.0+1.5+0.4; +// dgh[2] = (ztpc-97.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("ICK5", "TUBS", idtmed[210], dgh, 5); + // gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICK5", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0+1.0+1.5; + dgh[2] = 64.0+1.0+1.5+0.4; + dgh[3] = 46.+1.0+1.5; + dgh[4] = 46.+1.0+1.5+0.4; + dgh[5] = 12.; + dgh[6] = 168.; + gMC->Gsvolu("ICK9", "CONS", idtmed[210], dgh, 7); + gMC->Gspos("ICK9", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+5.5; + dgh[2] = 4.0/2; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("IKK7", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK7", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + gMC->Gspos("IKK7", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+4+34+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+0.3; + dgh[2] = 34.0/2; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("IKK5", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK5", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4), idrotm[199], "ONLY"); + gMC->Gspos("IKK5", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+4+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+5.5; + dgh[2] = 4.0/2; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("IKK3", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK3", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4-34), idrotm[199], "ONLY"); + gMC->Gspos("IKK3", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+6.0; + dgh[2] = 5.0/2; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("IKK1", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK1", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4-34-4), idrotm[199], "ONLY"); + gMC->Gspos("IKK1", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+0.3; + dgh[2] = 31.8/2; + dgh[3] = 12.; + dgh[4] = 168.; + gMC->Gsvolu("IKK9", "TUBS", idtmed[210], dgh, 5); + gMC->Gspos("IKK9", 1, "ITSV", 0., 0., -(-186.6+dgh[2]), idrotm[199], "ONLY"); + + + dgh[0] = 66.2/2; + dgh[1] = 46.+1.0+1.5+0.4+12.5; + dgh[2] = 46.+1.0+1.5+0.4+12.5+0.3; + dgh[3] = 46.+1.0+1.5+0.4; + dgh[4] = 46.+1.0+1.5+0.4+0.3; + dgh[5] = 12.; + dgh[6] = 168.; + gMC->Gsvolu("ICK7", "CONS", idtmed[210], dgh, 7); + gMC->Gspos("ICK7", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + + // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T. + // THE ABSORBER - ALUMINUM PART - LOWER PART + + dgh[0] = 46.+1.0+1.5; + dgh[1] = 46.+1.0+1.5+0.4; +// dgh[2] = (ztpc-97.5)/2.; + dgh[2] = (186.6 - 101.1)/2.; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("ICK6", "TUBS", idtmed[210], dgh, 5); + // gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY"); + gMC->Gspos("ICK6", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + + dgh[0] = (ztpc - 1.0 - 186.6)/2.; + dgh[1] = 64.0+1.0+1.5; + dgh[2] = 64.0+1.0+1.5+0.4; + dgh[3] = 46.+1.0+1.5; + dgh[4] = 46.+1.0+1.5+0.4; + dgh[5] = 192.; + dgh[6] = 348.; + gMC->Gsvolu("ICK0", "CONS", idtmed[210], dgh, 7); + gMC->Gspos("ICK0", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+5.5; + dgh[2] = 4.0/2; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("IKK8", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK8", 1, "ITSV", 0., 0., -(-101.1-dgh[2]), idrotm[199], "ONLY"); + gMC->Gspos("IKK8", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+4+34+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+0.3; + dgh[2] = 34.0/2; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("IKK6", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK6", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4), idrotm[199], "ONLY"); + gMC->Gspos("IKK6", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+4+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+5.5; + dgh[2] = 4.0/2; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("IKK4", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK4", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4-34), idrotm[199], "ONLY"); + gMC->Gspos("IKK4", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+5+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+6.0; + dgh[2] = 5.0/2; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("IKK2", "TUBS", idtmed[210], dgh, 5); +// gMC->Gspos("IKK2", 1, "ITSV", 0., 0., -(-101.1-dgh[2]-4-34-4), idrotm[199], "ONLY"); + gMC->Gspos("IKK2", 1, "ITSV", 0., 0., -(-186.6+dgh[2]+31.8), idrotm[199], "ONLY"); + + + dgh[0] = 46.+1.0+1.5+0.4; + dgh[1] = 46.+1.0+1.5+0.4+0.3; + dgh[2] = 31.8/2; + dgh[3] = 192.; + dgh[4] = 348.; + gMC->Gsvolu("IKK0", "TUBS", idtmed[210], dgh, 5); + gMC->Gspos("IKK0", 1, "ITSV", 0., 0., -(-186.6+dgh[2]), idrotm[199], "ONLY"); + + + dgh[0] = 66.2/2; + dgh[1] = 46.+1.0+1.5+0.4+12.5; + dgh[2] = 46.+1.0+1.5+0.4+12.5+0.3; + dgh[3] = 46.+1.0+1.5+0.4; + dgh[4] = 46.+1.0+1.5+0.4+0.3; + dgh[5] = 192.; + dgh[6] = 348.; + gMC->Gsvolu("ICK8", "CONS", idtmed[210], dgh, 7); + gMC->Gspos("ICK8", 1, "ITSV", 0., 0., -(-186.6-dgh[0]), idrotm[199], "ONLY"); + // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER // COPPER PART - UPPER PART - dgh[0] = 46.; + dgh[0] = 64.0; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICU7", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY"); + gMC->Gspos("ICU7", 1, "ITSV", 0., 0., (ztpc+1.5+dgh[2]), idrotm[199], "ONLY"); // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER // COPPER PART - LOWER PART - dgh[0] = 46.; + dgh[0] = 64.0; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICU8", "TUBS", idtmed[213], dgh, 5); - gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY"); + gMC->Gspos("ICU8", 1, "ITSV", 0., 0., (ztpc+1.5+dgh[2]), idrotm[199], "ONLY"); // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER // CARBON PART - UPPER PART - dgh[0] = 46.+1.0; + dgh[0] = 64.0+1.0; dgh[1] = 74.5; dgh[2] = 0.75; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("ICC7", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY"); + gMC->Gspos("ICC7", 1, "ITSV", 0., 0., (ztpc+dgh[2]), idrotm[199], "ONLY"); // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER // CARBON PART - LOWER PART - dgh[0] = 46.+1.0; + dgh[0] = 64.0+1.0; dgh[1] = 74.5; dgh[2] = 0.75; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("ICC8", "TUBS", idtmed[225], dgh, 5); - gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY"); + gMC->Gspos("ICC8", 1, "ITSV", 0., 0., (ztpc+dgh[2]), idrotm[199], "ONLY"); + + // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART - dgh[0] = 74.5; - dgh[1] = 79.5; + dgh[0] = 74.7; + dgh[1] = 75.3; dgh[2] = 2.5; dgh[3] = 12.; dgh[4] = 168.; gMC->Gsvolu("IHK1", "TUBS", idtmed[264], dgh, 5); - gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY"); + gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -(-ztpc-dgh[2]), idrotm[199], "ONLY"); // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART - dgh[0] = 74.5; - dgh[1] = 79.5; + dgh[0] = 74.7; + dgh[1] = 75.3; dgh[2] = 2.5; dgh[3] = 192.; dgh[4] = 348.; gMC->Gsvolu("IHK2", "TUBS", idtmed[264], dgh, 5); - gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY"); + gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -(-ztpc-dgh[2]), idrotm[199], "ONLY"); } @@ -4756,9 +4960,9 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[1] = 8.; dgh[2] = 190.; gMC->Gsvolu("IRA1", "BOX ", idtmed[268], dgh, 3); - gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY"); + gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., 69.5, idrotm[199], "ONLY"); gMC->Gsvolu("IRA2", "BOX ", idtmed[268], dgh, 3); - gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY"); + gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., 69.5, idrotm[199], "ONLY"); dgh[0] = 2.-0.5;// 0.5 was determined in such a way that the aluminum area is 20.9 cm^2 dgh[1] = 8.-0.5;// 0.5 was determined in such a way that the aluminum area is 20.9 cm^2 @@ -4776,8 +4980,8 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[1] = 59.; dgh[2] = 0.6; gMC->Gsvolu("ICYL", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ICYL", 1, "ALIC", 0., 0., -74.1,idrotm[199], "ONLY"); - gMC->Gspos("ICYL", 2, "ALIC", 0., 0., 74.1, 0, "ONLY"); + gMC->Gspos("ICYL", 1, "ITSS", 0., 0., -74.1,idrotm[199], "ONLY"); + gMC->Gspos("ICYL", 2, "ITSS", 0., 0., 74.1, 0, "ONLY"); // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS @@ -4785,14 +4989,14 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[1] = 3.; dgh[2] = 5.;// 5. comes from the fact that the volume has to be 567.6/2 cm^3 gMC->Gsvolu("ISR1", "TUBE", idtmed[284], dgh, 3); - gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY"); - gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY"); + gMC->Gspos("ISR1", 1, "ITSS", 53.4292, 10.7053, -79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 2, "ITSS", 53.4292, -10.7053, -79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 3, "ITSS", -53.4292, 10.7053, -79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 4, "ITSS", -53.4292, -10.7053, -79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 5, "ITSS", 53.4292, 10.7053, 79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 6, "ITSS", 53.4292, -10.7053, 79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 7, "ITSS", -53.4292, 10.7053, 79.75,idrotm[199],"ONLY"); + gMC->Gspos("ISR1", 8, "ITSS", -53.4292, -10.7053, 79.75,idrotm[199],"ONLY"); // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER @@ -4800,9 +5004,9 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[1] = 12.; dgh[2] = 5.; gMC->Gsvolu("ISR2", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR2", 1, "ITSV", -53.5, 0., -125.5, idrotm[199], "ONLY"); + gMC->Gspos("ISR2", 1, "ITSS", -53.5, 0., 125.5, 0, "ONLY"); gMC->Gsvolu("ISR3", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR3", 1, "ITSV", 53.5, 0., -125.5, idrotm[199], "ONLY"); + gMC->Gspos("ISR3", 1, "ITSS", 53.5, 0., 125.5, 0, "ONLY"); dgh[0] = 5.-2.; dgh[1] = 12.-2.; @@ -4818,20 +5022,12 @@ void AliITSv11Hybrid::CreateOldGeometry(){ dgh[1] = 5.; dgh[2] = 2.; gMC->Gsvolu("ISR6", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ISR6", 1, "ITSV", 0., 54., -77., idrotm[199], "ONLY"); - gMC->Gspos("ISR6", 2, "ITSV", 0., 54., 77., idrotm[199], "ONLY"); - gMC->Gspos("ISR6", 3, "ITSV", 0., -54., 77., idrotm[199], "ONLY"); - - } + gMC->Gspos("ISR6", 1, "ITSS", 0., 54., 77., 0, "ONLY"); + gMC->Gspos("ISR6", 2, "ITSS", 0., 54., -77., 0, "ONLY"); + gMC->Gspos("ISR6", 3, "ITSS", 0., -54., -77., 0, "ONLY"); - - // --- Outputs the geometry tree in the EUCLID/CAD format - - if (fEuclidOut) { - gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5); } - { if (!gGeoManager) { AliError("TGeoManager doesn't exist !"); @@ -5063,8 +5259,8 @@ void AliITSv11Hybrid::CreateMaterials(){ // Return: // none. - Int_t ifield = gAlice->Field()->Integ(); - Float_t fieldm = gAlice->Field()->Max(); + Int_t ifield = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); + Float_t fieldm = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); Float_t tmaxfd = 0.1; // 1.0; // Degree Float_t stemax = 1.0; // cm @@ -5104,7 +5300,7 @@ void AliITSv11Hybrid::CreateMaterials(){ Float_t aCM55J[4]={12.0107,14.0067,15.9994,1.00794}; Float_t zCM55J[4]={6.,7.,8.,1.}; Float_t wCM55J[4]={0.908508078,0.010387573,0.055957585,0.025146765}; - Float_t dCM55J = 1.63; + Float_t dCM55J = 1.8; //ALCM55J @@ -5122,11 +5318,18 @@ void AliITSv11Hybrid::CreateMaterials(){ //Inox - Float_t aINOX[9]={12.0107,54.9380, 28.0855,30.9738,32.066,58.6928,55.9961,95.94,55.845}; + Float_t aINOX[9]={12.0107,54.9380, 28.0855,30.9738,32.066,58.6928,51.9961,95.94,55.845}; Float_t zINOX[9]={6.,25.,14.,15.,16., 28.,24.,42.,26.}; Float_t wINOX[9]={0.0003,0.02,0.01,0.00045,0.0003,0.12,0.17,0.025,0.654}; Float_t dINOX = 8.03; + //AISI 304 L (from F.Tosello's web page - M.S. 18 Oct 10) + + Float_t a304L[8]={12.0107,54.9380, 28.0855,30.9738,32.066,58.6928,51.9961,55.845}; + Float_t z304L[8]={6.,25.,14.,15.,16., 28.,24.,26.}; + Float_t w304L[8]={0.0003,0.02,0.01,0.00045,0.003,0.0925,0.19,0.6865}; + Float_t d304L = 8.03; + //SDD HV microcable Float_t aHVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538}; @@ -5155,12 +5358,19 @@ void AliITSv11Hybrid::CreateMaterials(){ Float_t wALVm[5]={0.392653705471,0.0128595919215,0.041626868025,0.118832707289, 0.431909}; Float_t dALVm = 2.0502; - //X7R capacitors + //X7R capacitors - updated from F.Tosello's web page - M.S. 18 Oct 10 - Float_t aX7R[7]={137.327,47.867,15.9994,58.6928,63.5460,118.710,207.2}; - Float_t zX7R[7]={56.,22.,8.,28.,29.,50.,82.}; - Float_t wX7R[7]={0.251639432,0.084755042,0.085975822,0.038244751,0.009471271,0.321736471,0.2081768}; - Float_t dX7R = 7.14567; + Float_t aX7R[6]={137.327,47.867,15.9994,58.6928,63.5460,118.710}; + Float_t zX7R[6]={56.,22.,8.,28.,29.,50.}; + Float_t wX7R[6]={0.524732,0.176736,0.179282,0.079750,0.019750,0.019750}; + Float_t dX7R = 6.07914; + + //X7R weld, i.e. Sn 60% Pb 40% (from F.Tosello's web page - M.S. 15 Oct 10) + + Float_t aX7Rweld[2]={118.71 , 207.20}; + Float_t zX7Rweld[2]={ 50. , 82. }; + Float_t wX7Rweld[2]={ 0.60 , 0.40}; + Float_t dX7Rweld = 8.52358; // AIR @@ -5211,12 +5421,33 @@ void AliITSv11Hybrid::CreateMaterials(){ Float_t wInAl[5] = {.816164, .131443,.0330906,.0183836,.000919182}; Float_t dInAl = 3.075; + // Aluminum alloy with 12% Copper - 21 Oct 10 + + Float_t aAlCu12[2] = {26.9815, 63.546}; + Float_t zAlCu12[2] = {13. , 29. }; + Float_t wAlCu12[2] = { 0.88 , 0.12 }; + Float_t dAlCu12 = 2.96; + // Kapton Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994}; Float_t zKapton[4]={1.,6.,7.,8.}; Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235}; Float_t dKapton = 1.42; + + // Kapton + Cu (for Pixel Bus) + + Float_t aKaptonCu[5]={1.00794, 12.0107, 14.010, 15.9994, 63.5460}; + Float_t zKaptonCu[5]={1., 6., 7., 8., 29.}; + Float_t wKaptonCuBus[5]; + + // Kapton + Cu (for Pixel MCM) + + Float_t wKaptonCuMCM[5]; + + // Kapton + Cu (mix of two above) + + Float_t wKaptonCuMix[5]; //SDD ruby sph. Float_t aAlOxide[2] = { 26.981539,15.9994}; @@ -5224,6 +5455,90 @@ void AliITSv11Hybrid::CreateMaterials(){ Float_t wAlOxide[2] = {0.4707, 0.5293}; Float_t dAlOxide = 3.97; + // Silica for optical fibers: Si O2 + Float_t aoptfib[2] = { 28.0855, 15.9994}; + Float_t zoptfib[2] = { 14., 8. }; + Float_t woptfib[2] = { 1., 2. }; + Float_t doptfib = 2.55; + + // Tetrafluorethylene-Perfluorpropylene (FEP) - 08 Mar 10 + Float_t aFEP[2] = { 12.0107, 18.9984}; + Float_t zFEP[2] = { 6. , 9. }; + Float_t wFEP[2] = { 1. , 2. }; + Float_t dFEP = 2.15; + + // PVC (C2H3Cl)n - 08 Jul 10 + Float_t aPVC[3] = { 12.0107, 1.00794, 35.4527}; + Float_t zPVC[3] = { 6. , 1. , 35. }; + Float_t wPVC[3] = { 2. , 3. , 1. }; + Float_t dPVC = 1.3; + + // PBT (Polybutylene terephthalate = C12-H12-O4) - 01 Sep 10 + Float_t aPBT[3] = { 12.0107, 1.00794, 15.9994}; + Float_t zPBT[3] = { 6. , 1. , 8. }; + Float_t wPBT[3] = { 12. ,12. , 4. }; + Float_t dPBT = 1.31; + + // POLYAX (POLYAX = C37-H24-O6-N2) - 03 Sep 10 + Float_t aPOLYAX[4] = { 12.0107, 1.00794, 15.9994, 14.00674}; + Float_t zPOLYAX[4] = { 6. , 1. , 8. , 7. }; + Float_t wPOLYAX[4] = { 37. ,24. , 6. , 2. }; + Float_t dPOLYAX = 1.27; + + // PPS (PPS = C6-H4-S) - 05 Sep 10 + Float_t aPPS[3] = { 12.0107, 1.00794, 32.066}; + Float_t zPPS[3] = { 6. , 1. , 16. }; + Float_t wPPS[3] = { 6. , 4. , 1. }; + Float_t dPPS = 1.35; + + // Megolon (Polyolefin = (C-H2)n) - 20 Oct 10 + Float_t aMegolon[2] = { 12.0107, 1.00794}; + Float_t zMegolon[2] = { 6. , 1. }; + Float_t wMegolon[2] = { 1. , 2. }; + Float_t dMegolon = 1.51; // Mean of various types + + // Standard glass (from glassproperties.com/glasses - M.S. 21 Oct 10) + Float_t aStdGlass[7] = {15.9994 ,28.0855 ,22.98977 ,40.078 , + 24.305 ,26.981539,39.0983 }; + Float_t zStdGlass[7] = { 8. ,14. ,11. ,20. , + 12. ,13. ,19. }; + Float_t wStdGlass[7] = { 0.468377, 0.348239, 0.096441, 0.071469, + 0.006030, 0.005293, 0.004151}; + Float_t dStdGlass = 2.53; + + // Glass Fiber (from F.Tosello's web page - M.S. 15 Oct 10) + Float_t aGlass[11] = {15.9994 ,28.0855 ,40.078 ,26.981539,10.811 , + 24.305 ,39.0983 ,22.98977 ,18.9984 ,47.867 ,55.845}; + Float_t zGlass[11] = { 8. ,14. ,20 ,13 , 5 , + 12. ,19 ,11 , 9 ,22 ,26 }; + Float_t wGlass[11] = { 0.473610, 0.252415, 0.135791, 0.068803, 0.023293, + 0.015076, 0.008301, 0.007419, 0.007000, 0.004795, 0.003497}; + Float_t dGlass = 2.61; + + // Ryton R-4 04 (from F.Tosello's web page - M.S. 15 Oct 10) + Float_t aRyton[14] = {15.9994 ,28.0855 ,40.078 ,26.981539,10.811 , + 24.305 ,39.0983 ,22.98977 ,18.9984 ,47.867 , + 55.845 ,12.0107 , 1.00794 ,32.066 }; + Float_t zRyton[14] = { 8. ,14. ,20. ,13. , 5. , + 12. ,19. ,11. , 9. ,22. , + 26. , 6. , 1. ,16. }; + Float_t wRyton[14] = { 0.189445, 0.100966, 0.054316, 0.027521, 0.009317, + 0.006030, 0.003320, 0.002968, 0.002800, 0.001918, + 0.001399, 0.399760, 0.022365, 0.177875}; + Float_t dRyton = 1.65; + + // Plexiglas (Poly(methyl methacrylate) (C5O2H8)n - M.S. 05 nov 10) + Float_t aPlexy[3] = { 12.0107, 15.9994, 1.00794}; + Float_t zPlexy[3] = { 6. , 8. , 1. }; + Float_t wPlexy[3] = { 5. , 2. , 8. }; + Float_t dPlexy = 1.18; + + //SSD NiSn capacitor ends + Float_t aNiSn[2] = { 56.6934,118.710}; + Float_t zNiSn[2] = { 28., 50.}; + Float_t wNiSn[2] = {0.33, 0.67}; + Float_t dNiSn = wNiSn[0]*8.908 + wNiSn[1]*7.310; + AliMaterial(1,"SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(1,"SI$",1,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); @@ -5280,6 +5595,73 @@ void AliITSv11Hybrid::CreateMaterials(){ AliMixture(27,"GEN Air$",aAir,zAir,dAir,4,wAir); AliMedium(27,"GEN Air$",27,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir); + AliMixture(35,"PLEXYGLAS$",aPlexy,zPlexy,dPlexy,-3,wPlexy); + AliMedium(35,"PLEXYGLAS$",35,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(36,"STDGLASS$",aStdGlass,zStdGlass,dStdGlass,7,wStdGlass); + AliMedium(36,"STDGLASS$",36,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(37,"ALCU12$",aAlCu12,zAlCu12,dAlCu12,2,wAlCu12); + AliMedium(37,"ALCU12$",37,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(38,"MEGOLON$",aMegolon,zMegolon,dMegolon,-2,wMegolon); + AliMedium(38,"MEGOLON$",38,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(39,"RYTON$",aRyton,zRyton,dRyton,14,wRyton); + AliMedium(39,"RYTON$",39,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(40,"GLASS FIBER$",aGlass,zGlass,dGlass,11,wGlass); + AliMedium(40,"GLASS FIBER$",40,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(41,"AISI304L$",a304L,z304L,d304L,8,w304L); + AliMedium(41,"AISI304L$",41,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMaterial(42,"NICKEL$",0.58693E+02,0.28000E+02,0.89080E+01,0.14200E+01,0.99900E+03); + AliMedium(42,"NICKEL$",42,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(43,"SDD X7R weld$",aX7Rweld,zX7Rweld,dX7Rweld,2,wX7Rweld); + AliMedium(43,"SDD X7R weld$",43,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(44,"PPS$",aPPS,zPPS,dPPS,-3,wPPS); + AliMedium(44,"PPS$",44,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(45,"POLYAX$",aPOLYAX,zPOLYAX,dPOLYAX,-4,wPOLYAX); + AliMedium(45,"POLYAX$",45,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(46,"PBT$",aPBT,zPBT,dPBT,-3,wPBT); + AliMedium(46,"PBT$",46,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(47,"PVC$",aPVC,zPVC,dPVC,-3,wPVC); + AliMedium(47,"PVC$",47,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + Double_t cuFrac = 0.56; + Double_t kFrac = 1.0 - cuFrac; + Double_t cuDens = 8.96; + Float_t dKaptonCuBus = cuFrac * cuDens + kFrac * dKapton; + for (Int_t j=0; j<4; j++) + wKaptonCuBus[j] = wKapton[j]*kFrac; + wKaptonCuBus[4] = cuFrac; + AliMixture(48, "SPD-BUS CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuBus, 5, wKaptonCuBus); + AliMedium(48,"SPD-BUS CU KAPTON$",48,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + cuFrac = 0.5; + kFrac = 1.0 - cuFrac; + Float_t dKaptonCuMCM = cuFrac * cuDens + kFrac * dKapton; + for (Int_t j=0; j<4; j++) + wKaptonCuMCM[j] = wKapton[j]*kFrac; + wKaptonCuMCM[4] = cuFrac; + AliMixture(49, "SPD-MCM CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuMCM, 5, wKaptonCuMCM); + AliMedium(49,"SPD-MCM CU KAPTON$",49,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + cuFrac = (0.56 + 0.5) / 2.0; + kFrac = 1.0 - cuFrac; + Float_t dKaptonCuMix = cuFrac * cuDens + kFrac * dKapton; + for (Int_t j=0; j<4; j++) + wKaptonCuMix[j] = wKapton[j]*kFrac; + wKaptonCuMix[4] = cuFrac; + AliMixture(50, "SPD-MIX CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuMix, 5, wKaptonCuMix); + AliMedium(50,"SPD-MIX CU KAPTON$",50,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + AliMaterial(51,"SPD SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(51,"SPD SI$",51,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); @@ -5298,6 +5680,10 @@ void AliITSv11Hybrid::CreateMaterials(){ AliMixture(56, "SPD KAPTON(POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton); AliMedium(56,"SPD KAPTON(POLYCH2)$",56,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + // Gaseous Freon has same chemical composition but air density at 1.7 atm + AliMixture(59,"GASEOUS FREON$",afre,zfre,1.7*dAir,-2,wfre); + AliMedium(59,"GASEOUS FREON$",59,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + AliMixture(61,"EPOXY$",aEpoxy,zEpoxy,dEpoxy,-3,wEpoxy); AliMedium(61,"EPOXY$",61,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); @@ -5313,6 +5699,12 @@ void AliITSv11Hybrid::CreateMaterials(){ AliMixture(65,"INOX$",aINOX,zINOX,dINOX,9,wINOX); AliMedium(65,"INOX$",65,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + AliMixture(66,"NiSn$",aNiSn,zNiSn,dNiSn,2,wNiSn); + AliMedium(66,"NiSn$",66,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMaterial(67,"Sn$", 118.710, 50., 7.310, 1.206, 999.); + AliMedium(67,"Sn$",67,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + AliMixture(68,"ROHACELL$",arohac,zrohac,drohac,-4,wrohac); AliMedium(68,"ROHACELL$",68,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); @@ -5347,7 +5739,7 @@ void AliITSv11Hybrid::CreateMaterials(){ AliMixture(76,"SPDBUS(AL+KPT+EPOX)$",aSPDbus,zSPDbus,dSPDbus,5,wSPDbus); AliMedium(76,"SPDBUS(AL+KPT+EPOX)$",76,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); - AliMixture(77,"SDD X7R capacitors$",aX7R,zX7R,dX7R,7,wX7R); + AliMixture(77,"SDD X7R capacitors$",aX7R,zX7R,dX7R,6,wX7R); AliMedium(77,"SDD X7R capacitors$",77,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); AliMixture(78,"SDD ruby sph. Al2O3$",aAlOxide,zAlOxide,dAlOxide,2,wAlOxide); @@ -5559,6 +5951,160 @@ void AliITSv11Hybrid::CreateMaterials(){ */ AliMaterial(96, "SSD cone$",63.546, 29., 1.15, 1.265, 999); AliMedium(96,"SSD cone$",96,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + + AliMixture(98,"SDD OPTICFIB$",aoptfib,zoptfib,doptfib,-2,woptfib); + AliMedium(98,"SDD OPTICFIB$",98,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + AliMixture(95,"SSD FEP$",aFEP,zFEP,dFEP,-2,wFEP); + AliMedium(95,"SSD FEP$",95,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + // Mean material for low-voltage cables on SPD trays Side A + // (Copper + PolyEthylene (C2-H4)) (D.Elia for cable number and + // cross-section area, M.Sitta for elemental computation) - 26 Feb 10 + wW[0] = 0.323024;//H + wW[2] = 0.515464;//Cu + wW[1] = 0.161512;//C + wW[3] = 0.000000;//O + wW[4] = 0.000000;//S + wW[5] = 0.000000;//F + wW[6] = 0.000000;//Sn + wW[7] = 0.000000;//Pb + wW[8] = 0.000000;//Cr + wW[9] = 0.000000;//Si + wW[10] = 0.000000;//Ni + wW[11] = 0.000000;//Ca + + den = 5.078866; + AliMixture(60,"SPD_LOWCABLES$",aA,zZ,den,+3,wW); + AliMedium(60,"SPD_LOWCABLES$",60,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + // Mean material for high-voltage cables on SPD trays Side A & C + // (Copper + HD PolyEthylene (C2-H2)) (D.Elia for cable number and + // cross-section area, M.Sitta for elemental computation) - 10 Jun 10 + wW[0] = 0.083766;//H + wW[2] = 0.417136;//Cu + wW[1] = 0.499098;//C + wW[3] = 0.000000;//O + wW[4] = 0.000000;//S + wW[5] = 0.000000;//F + wW[6] = 0.000000;//Sn + wW[7] = 0.000000;//Pb + wW[8] = 0.000000;//Cr + wW[9] = 0.000000;//Si + wW[10] = 0.000000;//Ni + wW[11] = 0.000000;//Ca + + den = 1.514930; + AliMixture(58,"SPD_HICABLES$",aA,zZ,den,+3,wW); + AliMedium(58,"SPD_HICABLES$",58,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + // PolyUrethane [C25-H42-N2-O6] - 07 Mar 10 + zZ[2] = 7.0; aA[2] = 14.0067; // Nitrogen - From Root TGeoElementTable + + wW[0] = 0.090724;//H + wW[2] = 0.060035;//N + wW[1] = 0.643513;//C + wW[3] = 0.205728;//O + wW[4] = 0.000000;//S + wW[5] = 0.000000;//F + wW[6] = 0.000000;//Sn + wW[7] = 0.000000;//Pb + wW[8] = 0.000000;//Cr + wW[9] = 0.000000;//Si + wW[10] = 0.000000;//Ni + wW[11] = 0.000000;//Ca + + den = 1.158910; + AliMixture(67,"POLYURETHANE$",aA,zZ,den,+4,wW); + AliMedium(67,"POLYURETHANE$",67,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + // POM (Polyoxymethylene = (CH2O)n ) - 02 May 10 + zZ[2] = 8.0; aA[2] = 15.9994; // Oxigen + + wW[0] = 0.067137;//H + wW[1] = 0.400016;//C + wW[2] = 0.532847;//O + wW[3] = 0.000000;//O + wW[4] = 0.000000;//S + wW[5] = 0.000000;//F + wW[6] = 0.000000;//Sn + wW[7] = 0.000000;//Pb + wW[8] = 0.000000;//Cr + wW[9] = 0.000000;//Si + wW[10] = 0.000000;//Ni + wW[11] = 0.000000;//Ca + + den = 1.4200; + AliMixture(57,"POLYOXYMETHYLENE$",aA,zZ,den,+3,wW); + AliMedium(57,"POLYOXYMETHYLENE$",57,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + + // Anticorodal (Aliminum alloy) - 08 nov 10 + // A,Z from Root TGeoElementTable, W from Web sites + zZ[0] = 13.0; aA[0] = 26.9815; // Aluminium + zZ[1] = 29.0; aA[1] = 63.546 ; // Copper + zZ[2] = 26.0; aA[2] = 55.845 ; // Iron + zZ[3] = 25.0; aA[3] = 54.938 ; // Manganese + zZ[4] = 12.0; aA[4] = 24.305 ; // Magnesium + zZ[5] = 14.0; aA[5] = 28.0855; // Silicon + zZ[6] = 30.0; aA[6] = 65.39 ; // Zinc + zZ[7] = 24.0; aA[7] = 51.9961; // Chromium + zZ[8] = 22.0; aA[8] = 47.867 ; // Titanium + + wW[1] = 0.001000;//Cu + wW[2] = 0.005000;//Fe + wW[3] = 0.007000;//Mn - mean value + wW[4] = 0.009000;//Mg - mean value + wW[5] = 0.001000;//Si - mean value + wW[6] = 0.002000;//Zn + wW[7] = 0.002500;//Cr + wW[8] = 0.001000;//Ti + + Double_t totFrac = 0; + for (Int_t j=1; j<9; j++) + totFrac += wW[j]; + wW[0] = 1. - totFrac;//Al - the remainder + + den = 2.69; + AliMixture(93,"ANTICORODAL$",aA,zZ,den,+9,wW); + AliMedium(93,"ANTICORODAL$",93,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + + // Hokotol (another Aluminium alloy) - 08 nov 10 + // A,Z from Root TGeoElementTable, W from Web sites + zZ[0] = 13.0; aA[0] = 26.9815; // Aluminium + zZ[1] = 29.0; aA[1] = 63.546 ; // Copper + zZ[2] = 26.0; aA[2] = 55.845 ; // Iron + zZ[3] = 25.0; aA[3] = 54.938 ; // Manganese + zZ[4] = 12.0; aA[4] = 24.305 ; // Magnesium + zZ[5] = 14.0; aA[5] = 28.0855; // Silicon + zZ[6] = 30.0; aA[6] = 65.39 ; // Zinc + zZ[7] = 24.0; aA[7] = 51.9961; // Chromium + zZ[8] = 22.0; aA[8] = 47.867 ; // Titanium + zZ[9] = 40.0; aA[9] = 91.224 ; // Zirconium + + wW[1] = 0.020500;//Cu - mean value + wW[2] = 0.000300;//Fe + wW[3] = 0.022000;//Mn - mean value + wW[4] = 0.001000;//Mg - mean value + wW[5] = 0.002000;//Si - mean value + wW[6] = 0.066500;//Zn + wW[7] = 0.005000;//Cr + wW[8] = 0.000600;//Ti + wW[9] = 0.001650;//Zr - mean value + + totFrac = 0; + for (Int_t j=1; j<10; j++) + totFrac += wW[j]; + wW[0] = 1. - totFrac;//Al - the remainder + + den = 2.69; + AliMixture(34,"HOKOTOL$",aA,zZ,den,+10,wW); + AliMedium(34,"HOKOTOL$",34,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + } //______________________________________________________________________ @@ -5698,7 +6244,6 @@ void AliITSv11Hybrid::Init(){ fMinorVersion)); UpdateInternalGeometry(); AliITS::Init(); - if(fGeomDetOut) GetITSgeom()->WriteNewFile(fWrite); fIDMother = gMC->VolId("ITSV"); // ITS Mother Volume ID. } @@ -5713,92 +6258,14 @@ void AliITSv11Hybrid::SetDefaults(){ // Return: // none. - const Float_t kconv = 1.0e+04; // convert cm to microns - if(!fDetTypeSim){ Warning("SetDefaults","Error fDetTypeSim not defined"); return; } - AliITSgeomSPD *s0; - AliITSgeomSDD *s1; - AliITSgeomSSD *s2; - Int_t i; - Float_t bx[256],bz[280]; - fDetTypeSim->SetDefaults(); - //SPD - s0 = (AliITSgeomSPD*) GetITSgeom()->GetShape(kSPD); - // Get shape info. Do it this way for now. - //AliITSCalibrationSPD* resp0=new AliITSCalibrationSPD(); - AliITSsegmentationSPD* seg0 = - (AliITSsegmentationSPD*)fDetTypeSim->GetSegmentationModel(0); - seg0->SetDetSize(s0->GetDx()*2.*kconv, // base this on AliITSgeomSPD - s0->GetDz()*2.*kconv, // for now. - s0->GetDy()*2.*kconv); // x,z,y full width in microns. - seg0->SetNPads(256,160);// Number of Bins in x and z - for(i=000;i<256;i++) bx[i] = 50.0; // in x all are 50 microns. - for(i=000;i<160;i++) bz[i] = 425.0; // most are 425 microns except below - for(i=160;i<280;i++) bz[i] = 0.0; // Outside of detector. - bz[ 31] = bz[ 32] = 625.0; // first chip boundry - bz[ 63] = bz[ 64] = 625.0; // first chip boundry - bz[ 95] = bz[ 96] = 625.0; // first chip boundry - bz[127] = bz[128] = 625.0; // first chip boundry - bz[160] = 425.0; // Set so that there is no zero pixel size for fNz. - seg0->SetBinSize(bx,bz); // Based on AliITSgeomSPD for now. - SetSegmentationModel(kSPD,seg0); - // set digit and raw cluster classes to be used - const char *kData0=(fDetTypeSim->GetCalibrationModel( - GetITSgeom()->GetStartSPD()))->DataType(); - if (strstr(kData0,"real")) fDetTypeSim->SetDigitClassName(kSPD, - "AliITSdigit"); - else fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigitSPD"); - // SDD - s1 = (AliITSgeomSDD*) GetITSgeom()->GetShape(kSDD); - // Get shape info. Do it this way for now. - - //AliITSCalibrationSDD* resp1=new AliITSCalibrationSDD("simulated"); - AliITSsegmentationSDD* seg1 = - (AliITSsegmentationSDD*)fDetTypeSim->GetSegmentationModel(1); - seg1->SetDetSize(s1->GetDx()*kconv, // base this on AliITSgeomSDD - s1->GetDz()*2.*kconv, // for now. - s1->GetDy()*2.*kconv); // x,z,y full width in microns. - seg1->SetNPads(256,256);// Use AliITSgeomSDD for now - SetSegmentationModel(kSDD,seg1); - const char *kData1=(fDetTypeSim->GetCalibrationModel( - GetITSgeom()->GetStartSDD()))->DataType(); - AliITSCalibrationSDD* rsp = - (AliITSCalibrationSDD*)fDetTypeSim->GetCalibrationModel( - GetITSgeom()->GetStartSDD()); - const char *kopt=rsp->GetZeroSuppOption(); - if((!strstr(kopt,"2D")) && (!strstr(kopt,"1D")) || strstr(kData1,"real") ){ - fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigit"); - } else fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigitSDD"); - // SSD Layer 5 - - s2 = (AliITSgeomSSD*) GetITSgeom()->GetShape(kSSD); - // Get shape info. Do it this way for now. - - - //SetCalibrationModel(GetITSgeom()->GetStartSSD(), - // new AliITSCalibrationSSD("simulated")); - AliITSsegmentationSSD* seg2 = - (AliITSsegmentationSSD*)fDetTypeSim->GetSegmentationModel(2); - seg2->SetDetSize(s2->GetDx()*2.*kconv, // base this on AliITSgeomSSD - s2->GetDz()*2.*kconv, // for now. - s2->GetDy()*2.*kconv); // x,z,y full width in microns. - seg2->SetPadSize(95.,0.); // strip x pitch in microns - seg2->SetNPads(768,0); // number of strips on each side. - seg2->SetAngles(0.0075,0.0275); // strip angels rad P and N side. - seg2->SetAnglesLay5(0.0075,0.0275); // strip angels rad P and N side. - seg2->SetAnglesLay6(0.0275,0.0075); // strip angels rad P and N side. - SetSegmentationModel(kSSD,seg2); - const char *kData2=(fDetTypeSim->GetCalibrationModel( - GetITSgeom()->GetStartSSD()))->DataType(); - if(strstr(kData2,"real") ) fDetTypeSim->SetDigitClassName(kSSD, - "AliITSdigit"); - else fDetTypeSim->SetDigitClassName(kSSD,"AliITSdigitSSD"); + if(fgkNTYPES>3){ Warning("SetDefaults", "Only the four basic detector types are initialised!"); @@ -5880,8 +6347,8 @@ void AliITSv11Hybrid::StepManager(){ Int_t copy, lay = 0; Int_t id = gMC->CurrentVolID(copy); - Bool_t notSens; - while ((notSens = id != fIdSens[lay]) && (layIsTrackExiting()) {