X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSvPPRasymmFMD.cxx;h=040308a83556a9097695be3bfd6a9c2eb988bebc;hb=1b9fef1cf8bbce0100e127914802c39b5afdd970;hp=5d09637a17fd5fb5fef6459b784366c164700868;hpb=f3c2ddf70be625ee8cb3c83964bbb769f051de16;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSvPPRasymmFMD.cxx b/ITS/AliITSvPPRasymmFMD.cxx index 5d09637a17f..040308a8355 100644 --- a/ITS/AliITSvPPRasymmFMD.cxx +++ b/ITS/AliITSvPPRasymmFMD.cxx @@ -13,23 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.3 2002/10/05 00:12:39 nilsen -Added material to simulate services in front of the SPD, SDD, and SSD support -structures. Modified folumes I212, I200, and I099 so that they do not go -beyond the volume they are creating holes for. This was nessesary so that -the material added to these volumes would be correct. - -Revision 1.2 2002/10/02 17:56:37 barbera -Bug in copy 37 of volume I570 corrected (thanks to J. Belikov) - -Revision 1.1 2002/09/16 14:45:31 barbera -Updated detailed geometry needed by FMD people for some studies - - -*/ - +/* $Id$ */ /////////////////////////////////////////////////////////////////////////////// // // // Inner Traking System version PPR asymmetric for the FMD // @@ -44,82 +28,167 @@ Updated detailed geometry needed by FMD people for some studies /////////////////////////////////////////////////////////////////////////////// // See AliITSvPPRasymmFMD::StepManager(). -#include -#include -#include -#include -#include + +#include #include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include // only required for Tracking function? -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include -#include "AliMC.h" -#include "AliRun.h" -#include "AliMagF.h" -#include "AliConst.h" -#include "AliGeant3.h" -#include "AliITSGeant3Geometry.h" -#include "AliTrackReference.h" -#include "AliITShit.h" #include "AliITS.h" -#include "AliITSvPPRasymmFMD.h" +#include "AliITSDetTypeSim.h" #include "AliITSgeom.h" -#include "AliITSgeomSPD.h" #include "AliITSgeomSDD.h" +#include "AliITSgeomSPD.h" #include "AliITSgeomSSD.h" -#include "AliITSDetType.h" -#include "AliITSresponseSPD.h" +#include "AliITShit.h" #include "AliITSresponseSDD.h" -#include "AliITSresponseSSD.h" -#include "AliITSsegmentationSPD.h" +#include "AliITSCalibrationSDD.h" +#include "AliITSCalibrationSPD.h" +#include "AliITSCalibrationSSD.h" #include "AliITSsegmentationSDD.h" +#include "AliITSsegmentationSPD.h" #include "AliITSsegmentationSSD.h" -#include "AliITSsimulationSPD.h" -#include "AliITSsimulationSDD.h" -#include "AliITSsimulationSSD.h" -#include "AliITSClusterFinderSPD.h" -#include "AliITSClusterFinderSDD.h" -#include "AliITSClusterFinderSSD.h" +#include "AliITSvPPRasymmFMD.h" +#include "AliLog.h" +#include "AliMC.h" +#include "AliMagF.h" +#include "AliRun.h" +#include "AliTrackReference.h" + +#define GEANTGEOMETRY kTRUE ClassImp(AliITSvPPRasymmFMD) -//_____________________________________________________________________________ -AliITSvPPRasymmFMD::AliITSvPPRasymmFMD() { -//////////////////////////////////////////////////////////////////////// -// Standard default constructor for the ITS version 8. -//////////////////////////////////////////////////////////////////////// +//______________________________________________________________________ +AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(): +AliITS(), // Default AliITS Constructor +fGeomDetOut(kFALSE), // Flag to write .det file out +fGeomDetIn(kFALSE), // Flag to read .det file or directly from Geat. +fByThick(kTRUE), // Flag to use services materials by thickness + // ture, or mass false. +fMajorVersion(IsVersion()), // Major version number == IsVersion +fMinorVersion(2), // Minor version number +fEuclidGeomDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"),// file where detector transormation are define. +fRead("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm.det"),//! file name to read .det file +fWrite("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"),//! file name to write .det file +fDet1(200.0), // thickness of detector in SPD layer 1 [microns] +fDet2(200.0), // thickness of detector in SPD layer 2 [microns] +fChip1(150.0), // thickness of chip in SPD layer 1 [microns] +fChip2(150.0), // thickness of chip in SPD layer 2 [microns] +fRails(0), // flag to switch rails on (=1) and off (=0) +fFluid(1), // flag to switch between water (=1)& freon (=0) +fIDMother(0), //! ITS Mother Volume id. +fIgm((AliITSVersion_t)fMajorVersion,fMinorVersion)//! Get access to decoding + // and AliITSgeom init functions + { + // Standard default constructor for the ITS version 10. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + fIgm.SetGeometryName(""); +} +//______________________________________________________________________ +AliITSvPPRasymmFMD::AliITSvPPRasymmFMD(const Char_t *title): +AliITS(title), // Standard AliITS Constructor +fGeomDetOut(kFALSE), // Flag to write .det file out +fGeomDetIn(kFALSE), // Flag to read .det file or directly from Geat. +fByThick(kTRUE), // Flag to use services materials by thickness + // ture, or mass false. +fMajorVersion(IsVersion()), // Major version number == IsVersion +fMinorVersion(2), // Minor version number +fEuclidGeomDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"),// file where detector transormation are define. +fRead("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm.det"),//! file name to read .det file +fWrite("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"),//! file name to write .det file +fDet1(200.0), // thickness of detector in SPD layer 1 [microns] +fDet2(200.0), // thickness of detector in SPD layer 2 [microns] +fChip1(150.0), // thickness of chip in SPD layer 1 [microns] +fChip2(150.0), // thickness of chip in SPD layer 2 [microns] +fRails(0), // flag to switch rails on (=1) and off (=0) +fFluid(1), // flag to switch between water (=1)& freon (=0) +fIDMother(0), //! ITS Mother Volume id. +fIgm((AliITSVersion_t)fMajorVersion,fMinorVersion)//! Get access to decoding + // and AliITSgeom init functions +{ + // Standard constructor for the ITS version 10. + // Inputs: + // const Char_t * title Arbitrary title + // Outputs: + // none. + // Return: + // none. Int_t i; - fIdN = 0; - fIdName = 0; - fIdSens = 0; - fEuclidOut = kFALSE; // Don't write Euclide file - fGeomDetOut = kFALSE; // Don't write .det file - fGeomDetIn = kFALSE; // Don't Read .det file - fMajorVersion = IsVersion(); - fMinorVersion = -1; - for(i=0;i<60;i++) fRead[i] = '\0'; - for(i=0;i<60;i++) fWrite[i] = '\0'; - for(i=0;i<60;i++) fEuclidGeomDet[i] = '\0'; + fIgm.SetDecoding(kFALSE);// Use Alice compliant naming/numbering system + fIgm.SetTiming(kFALSE);// default no timing + fIgm.SetSegGeom(kFALSE);// use AliITSgeomS?D classes instead + // of segmentation AliITSsegmentationS?D class + fIgm.SetGeometryName("ITS PPR aymmetric services with course" + " cables on cones"); + // Set some AliITS class veriables. + fIdN = 6; + fIdName = new TString[fIdN]; + fIdName[0] = "ITS1"; + fIdName[1] = "ITS2"; + fIdName[2] = "ITS3"; + fIdName[3] = "ITS4"; + fIdName[4] = "ITS5"; + fIdName[5] = "ITS6"; + fIdSens = new Int_t[fIdN]; + for(i=0;iSetAlignableEntry("ITS","ALIC_1/ITSV_1") ) + AliFatal("Unable to set alignable entry!!"); + + Double_t al, *gtrans, rotMatrix[9]; + + TString strSPD = "ITS/SPD"; + TString strSDD = "ITS/SDD"; + TString strSSD = "ITS/SSD"; + TString strStave = "/Stave"; + TString strLadder = "/Ladder"; + TString strSector = "/Sector"; + TString strSensor = "/Sensor"; + TString strEntryName1; + TString strEntryName2; + TString strEntryName3; + + //===== SPD layer1 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_"; + TString str1 = "/I10B_"; + TString str2 = "/I107_"; + + TString sector; + TString stave; + TString module; + + for(Int_t c1 = 1; c1<=10; c1++){ + + sector = str0; + sector += c1; // this is one full sector + strEntryName1 = strSPD; + strEntryName1 += 0; + strEntryName1 += strSector; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),sector.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),sector.Data()); + + for(Int_t c2 =1; c2<=2; c2++){ + + stave = sector; + stave += str1; + stave += c2; + strEntryName2 = strEntryName1; + strEntryName2 += strStave; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),stave.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),stave.Data()); // this is a stave + + for(Int_t c3 =1; c3<=4; c3++){ + + module = stave; + module += str2; + module += c3; + strEntryName3 = strEntryName2; + strEntryName3 += strLadder; + strEntryName3 += (c3-1); + if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),module.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName3.Data(),module.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName3.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + // Not taking into account the shift w.r.t. sensitive volume + // correction with fChip1*0.0001/2. is due to the fact + // that the alignable volume is not the sensitive volume + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) - fChip1*0.0001/2.); + matLtoT->SetDy(-fChip1*0.0001/2.); + matLtoT->SetDz(-gtrans[2]); + rotMatrix[0]= 0; rotMatrix[1]= 1; rotMatrix[2]= 0; // + rotation + rotMatrix[3]=-1; rotMatrix[4]= 0; rotMatrix[5]= 0; // ! flip in y for the SPD1 only + rotMatrix[6]= 0; rotMatrix[7]= 0; rotMatrix[8]=-1; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } + } + + //===== SPD layer2 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_"; + TString str1 = "/I20B_"; + TString str2 = "/I1D7_"; + + TString sector; + TString stave; + TString module; + + for(Int_t c1 = 1; c1<=10; c1++){ + + sector = str0; + sector += c1; // this is one full sector + strEntryName1 = strSPD; + strEntryName1 += 1; + strEntryName1 += strSector; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),sector.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),sector.Data()); + + for(Int_t c2 =1; c2<=4; c2++){ + + stave = sector; + stave += str1; + stave += c2; + strEntryName2 = strEntryName1; + strEntryName2 += strStave; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),stave.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),stave.Data()); // this is a stave + + for(Int_t c3 =1; c3<=4; c3++){ + + module = stave; + module += str2; + module += c3; + strEntryName3 = strEntryName2; + strEntryName3 += strLadder; + strEntryName3 += (c3-1); + if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),module.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName3.Data(),module.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName3.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]) + TMath::Pi(); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx(-gtrans[0]*TMath::Cos(al)-gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + //matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + // not taking into account the shift w.r.t. sensitive volume + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) + fChip2*0.0001/2.); + matLtoT->SetDy(-fChip2*0.0001/2.); + matLtoT->SetDz(-gtrans[2]); + 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; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } + } + + //===== SDD layer1 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_"; + TString str1 = "/I302_"; + + TString ladder; + TString wafer; + + for(Int_t c1 = 1; c1<=14; c1++){ + + ladder = str0; + ladder += c1; // the set of wafers from one ladder + strEntryName1 = strSDD; + strEntryName1 += 2; + strEntryName1 +=strLadder; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),ladder.Data()); + + for(Int_t c2 =1; c2<=6; c2++){ + + wafer = ladder; + wafer += str1; + wafer += c2; // one wafer + strEntryName2 = strEntryName1; + strEntryName2 += strSensor; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName2.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]) + TMath::Pi(); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx(-gtrans[0]*TMath::Cos(al)-gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + matLtoT->SetDy( 0 ); + matLtoT->SetDz(-gtrans[2]); + 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; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } + + //===== SDD layer2 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_"; + TString str1 = "/I402_"; + + TString ladder; + TString wafer; + + for(Int_t c1 = 1; c1<=22; c1++){ + + ladder = str0; + ladder += c1; // the set of wafers from one ladder + strEntryName1 = strSDD; + strEntryName1 += 3; + strEntryName1 +=strLadder; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),ladder.Data()); + + for(Int_t c2 =1; c2<=8; c2++){ + + wafer = ladder; + wafer += str1; + wafer += c2; // one wafer + strEntryName2 = strEntryName1; + strEntryName2 += strSensor; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName2.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]) + TMath::Pi(); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx(-gtrans[0]*TMath::Cos(al)-gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + matLtoT->SetDy( 0 ); + matLtoT->SetDz(-gtrans[2]); + 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; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } + + //===== SSD layer1 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_"; + TString str1 = "/I562_"; + + TString ladder; + TString wafer; + + for(Int_t c1 = 1; c1<=34; c1++){ + + ladder = str0; + ladder += c1; // the set of wafers from one ladder + strEntryName1 = strSSD; + strEntryName1 += 4; + strEntryName1 +=strLadder; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),ladder.Data()); + + for(Int_t c2 = 1; c2<=22; c2++){ + + wafer = ladder; + wafer += str1; + wafer += c2; // one wafer + strEntryName2 = strEntryName1; + strEntryName2 += strSensor; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName2.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]) + TMath::Pi(); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx(-gtrans[0]*TMath::Cos(al)-gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + matLtoT->SetDy( 0 ); + matLtoT->SetDz(-gtrans[2]); + 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; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } + + //===== SSD layer2 ===== + { + TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_"; + TString str1 = "/I566_"; + + TString ladder; + TString wafer; + + for(Int_t c1 = 1; c1<=38; c1++){ + + ladder = str0; + ladder += c1; // the set of wafers from one ladder + strEntryName1 = strSSD; + strEntryName1 += 5; + strEntryName1 +=strLadder; + strEntryName1 += (c1-1); + if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName1.Data(),ladder.Data()); + + for(Int_t c2 = 1; c2<=25; c2++){ + + wafer = ladder; + wafer += str1; + wafer += c2; // one wafer + strEntryName2 = strEntryName1; + strEntryName2 += strSensor; + strEntryName2 += (c2-1); + if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data())) + AliFatal("Unable to set alignable entry!!"); + //printf("%s == %s\n",strEntryName2.Data(),wafer.Data()); + + // Creates the TGeo Local to Tracking transformation matrix ... + TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(strEntryName2.Data()); + const char *path = alignableEntry->GetTitle(); + if (!gGeoManager->cd(path)) + AliFatal(Form("Volume path %s not valid!",path)); + TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix(); + gtrans = globMatrix->GetTranslation(); + memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t)); + al = TMath::ATan2(rotMatrix[1],rotMatrix[0]) + TMath::Pi(); + TGeoHMatrix *matLtoT = new TGeoHMatrix; + matLtoT->SetDx(-gtrans[0]*TMath::Cos(al)-gtrans[1]*TMath::Sin(al) ); // translation + al += TMath::Pi()/2; + // matLtoT->SetDy( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); + matLtoT->SetDy( 0 ); + matLtoT->SetDz(-gtrans[2]); + 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; + TGeoRotation rot; + rot.SetMatrix(rotMatrix); + matLtoT->MultiplyLeft(&rot); + TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse()); + delete matLtoT; + alignableEntry->SetMatrix(matTtoL); + } + } + } } -//__________________________________________________________________________ +//______________________________________________________________________ void AliITSvPPRasymmFMD::BuildGeometry(){ -//////////////////////////////////////////////////////////////////////// -// Geometry builder for the ITS version 8. -//////////////////////////////////////////////////////////////////////// + // Geometry builder for the ITS version 10. Event Display geometry. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + TNode *node, *top; const Int_t kColorITS=kYellow; @@ -181,7 +721,8 @@ void AliITSvPPRasymmFMD::BuildGeometry(){ top = gAlice->GetGeometry()->GetNode("alice"); - new TTUBE("S_layer1","Layer1 of ITS","void",3.8095,3.8095+1.03*9.36/100.,14.35); + 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); @@ -205,1203 +746,1172 @@ void AliITSvPPRasymmFMD::BuildGeometry(){ 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); + 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 AliITSvPPRasymmFMD::CreateGeometry(){ -//////////////////////////////////////////////////////////////////////// -// This routine defines and Creates the geometry for version 6 of the ITS. -//////////////////////////////////////////////////////////////////////// - - -//Begin_Html -/* - - -
- -

This shows the full ITS geometry. - - - - -
- -

This shows the full SPD Barrel of the ITS geometry. - - - - -
- -

This shows the full SDD Barrel of the ITS geometry. - - - - -
- -

This shows the full SSD Barrel of the ITS geometry. - -*/ -//End_Html - //INNER RADII OF THE SILICON LAYERS - // Float_t rl[6] = { 3.8095,7.,15.,24.,38.1,43.5765 }; - //THICKNESSES OF LAYERS (in % radiation length) - Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 }; - //HALF LENGTHS OF LAYERS - // Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 }; - //LENGTHS OF END-LADDER BOXES (ALL INCLUDED) - // Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 }; - //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED) - // Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. }; - - - Float_t dits[100], rlim, zmax; - // Float_t zpos; - // Float_t pcits[50] - Float_t ztpc; - Int_t idrotm[1999], i; - Float_t dgh[100]; - - - // Define some variables for SPD - - Float_t dits1[3], di101[3], di107[3], di10b[3], di106[3]; // for layer 1 - Float_t di103[3], di10a[3], di102[3]; // for layer 1 - Float_t dits2[3], di1d1[3], di1d7[3], di20b[3], di1d6[3]; // for layer 2 - Float_t di1d3[3], di20a[3], di1d2[3]; // for layer 2 - Float_t di108[3], di104[3]; // for both layers - - Float_t ddet1=200.; // total detector thickness on layer 1 (micron) - Float_t dchip1=200.; // total chip thickness on layer 1 (micron) - - Float_t ddet2=200.; // total detector thickness on layer 2 (micron) - Float_t dchip2=200.; // total chip thickness on layer 2 (micron) - - Float_t dbus=300.; // total bus thickness on both layers (micron) - - ddet1 = GetThicknessDet1(); - ddet2 = GetThicknessDet2(); - dchip1 = GetThicknessChip1(); - dchip2 = GetThicknessChip2(); - - if(ddet1 < 100. || ddet1 > 300.) { - cout << "ITS - WARNING: the detector thickness for layer 1 is outside the range of [100,300] microns." - " The default value of 200 microns will be used." << endl; - ddet1=200.; - } - - if(ddet2 < 100. || ddet2 > 300.) { - cout << "ITS - WARNING: the detector thickness for layer 2 is outside the range of [100,300] microns." - " The default value of 200 microns will be used." << endl; - ddet2=200.; - } - - if(dchip1 < 100. || dchip1 > 300.) { - cout << "ITS - WARNING: the chip thickness for layer 1 is outside the range of [100,300] microns." - " The default value of 200 microns will be used." << endl; - dchip1=200.; - } - - if(dchip2 < 100. || dchip2 > 300.) { - cout << "ITS - WARNING: the chip thickness for layer 2 is outside the range of [100,300] microns." - " The default value of 200 microns will be used." << endl; - dchip2=200.; - } - - Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out) - - Int_t fluid = 1; // flag for the cooling fluid (1 --> water; 0 --> freon) - - rails = GetRails(); - - fluid = GetCoolingFluid(); - - if(rails != 0 && rails != 1) { - cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)." - " The default value of 1 (rails in) will be used." << endl; - - } - - if(fluid != 0 && fluid != 1) { - cout << "ITS - WARNING: the switch for cooling fluid is not set neither to 0 (freon) nor to 1 (water)." - " The default value of 1 (water) will be used." << endl; - } - - cout << "ITS: Detector thickness on layer 1 is set to " << ddet1 << " microns." << endl; - cout << "ITS: Chip thickness on layer 1 is set to " << dchip1 << " microns." << endl; - cout << "ITS: Detector thickness on layer 2 is set to " << ddet2 << " microns." << endl; - cout << "ITS: Chip thickness on layer 2 is set to " << dchip2 << " microns." << endl; - if(rails == 0 ) { - cout << "ITS: Rails are out." << endl; - } else { - cout << "ITS: Rails are in." << endl; - } - if(fluid == 0 ) { - cout << "ITS: The cooling fluid is freon." << endl; - } else { - cout << "ITS: The cooling fluid is water." << endl; - } - - ddet1 = ddet1*0.0001/2.; // conversion from tot length in um to half in cm - ddet2 = ddet2*0.0001/2.; // conversion from tot length in um to half in cm - dchip1 = dchip1*0.0001/2.;// conversion from tot length in um to half in cm - dchip2 = dchip2*0.0001/2.;// conversion from tot length in um to half in cm - dbus = dbus*0.0001/2.; // conversion from tot length in um to half in cm - - Float_t deltax, deltay; - - Int_t thickness = fMinorVersion/10; - Int_t option = fMinorVersion - 10*thickness; - - - // Define some variables for SDD - - - Float_t sin30, cos30; - - // SDD electronics+services main volumes - Float_t I018dits[3], I024dits[3], I047dits[3], I048dits[3]; - - // SDD detector ladder - - Float_t I302dits[3], I402dits[3], I004dits[3], I005dits[3]; - Float_t Y_SDD_sep = 0.20; - Float_t ySDD; - Int_t iSDD; - Float_t Z_SDD_lay3[6] = {18.55, 10.95, 3.70, -3.70, -11.20, -18.35}; - Float_t Z_SDD_lay4[8] = {25.75, 18.60, 11.00, 3.70, -3.70, -11.20, -18.45, -26.05}; - - // ladder foot and end-ladder (frame and cooling) - Float_t I028dits[3], I420dits[3], I421dits[3], I422dits[6], I423dits[3]; - Float_t I424dits[3], xI424, yI424; - Float_t I425dits[3]; - Int_t indI425; - Float_t I029dits[4], I030dits[4], I031dits[3], I032dits[3]; - - // SDD ladder frame and cooling - Float_t SDD_CoolPipe[3] = {1.7000, -0.5500, 0.0000}; - Float_t I035dits[3], I037dits[3], I038dits[3]; - Float_t I039dits[3], xI039, yI039; - Float_t I041dits[5]; - - // SDD hybrid, chips and capacitors - Float_t I050dits[3], xI050, yI050; - Float_t I052dits[3], xI052, yI052; - Float_t I042dits[3], xI042, yI042; - Float_t xI042space = 0.17; - Float_t I043dits[3], xI043, yI043; - Float_t xI043space = 0.17; - Float_t zchip, zChipSpace; - Float_t I051dits[3], xI051, yI051, zI051, yI051space, xcap; - Int_t ichip, icap; - - // SDD microcables - Float_t I044dits[4], xI044, yI044, volI044; - Float_t xHV, yHV, zHV, xLV, yLV, zLV; - Char_t HVname[5], LVname[5]; - - - // Define media off-set - - Int_t *idtmed = fIdtmed->GetArray()-199; - - - // Rotation matrices - - // SPD - option 'a' (this is NOT the default so leave commented) - - - if (option == 1) { - - AliMatrix(idrotm[201],90.0,90.0,90.0,180.0,0.0,0.0); - AliMatrix(idrotm[202],90.0,90.0,90.0,0.0,0.0,0.0); - AliMatrix(idrotm[203],90.0,350.0,90.0,260.0,0.0,0.0); - AliMatrix(idrotm[204],90.0,170.0,90.0,80.0,0.0,0.0); - AliMatrix(idrotm[205],90.0,10.0,90.0,100.0,0.0,0.0); - AliMatrix(idrotm[206],90.0,190.0,90.0,280.0,0.0,0.0); - AliMatrix(idrotm[207],90.0,342.0,90.0,72.0,0.0,0.0); - AliMatrix(idrotm[208],90.0,156.999893,90.0,246.999893,0.0,0.0); - AliMatrix(idrotm[209],90.0,147.999802,90.0,237.999893,0.0,0.0); - AliMatrix(idrotm[210],90.0,138.999802,90.0,228.999802,0.0,0.0); - AliMatrix(idrotm[211],90.0,129.999802,90.0,219.999802,0.0,0.0); - AliMatrix(idrotm[212],90.0,36.7896,90.0,126.789597,0.0,0.0); - AliMatrix(idrotm[213],90.0,343.579712,90.0,73.579697,0.0,0.0); - AliMatrix(idrotm[214],90.0,95.413696,90.0,185.413696,0.0,0.0); - AliMatrix(idrotm[215],90.0,5.4141,90.0,95.414101,0.0,0.0); - AliMatrix(idrotm[216],90.0,318.296906,90.0,48.296902,0.0,0.0); - AliMatrix(idrotm[217],90.0,67.000099,90.0,157.000107,0.0,0.0); - AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0); - AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0); - AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0); - AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0); - AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0 ); - AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0); - AliMatrix(idrotm[224],90.0,296.627502,90.0,26.627399,0.0,0.0); - AliMatrix(idrotm[225],90.0,48.994099,90.0,138.994095,0.0,0.0); - AliMatrix(idrotm[226],90.0,318.990997,90.0,48.991001,0.0,0.0); - AliMatrix(idrotm[227],90.0,228.988205,90.0,318.98819,0.0,0.0); - AliMatrix(idrotm[228],90.0,287.621399,90.0,17.621401,0.0,0.0); - AliMatrix(idrotm[229],90.0,39.988098,90.0,129.988098,0.0,0.0); - AliMatrix(idrotm[230],90.0,309.984985,90.0,39.985001,0.0,0.0); - AliMatrix(idrotm[231],90.0,327.2612,90.0,57.2612,0.0,0.0); - AliMatrix(idrotm[232],90.0,237.261398,90.0,327.261414,0.0,0.0); - AliMatrix(idrotm[233],90.0,252.000504,90.0,342.000488,0.0,0.0 ); - AliMatrix(idrotm[234],90.0,71.9991,90.0,161.9991,0.0,0.0); - AliMatrix(idrotm[235],90.0,270.0,90.0,0.0,0.0,0.0); - AliMatrix(idrotm[236],90.0,180.013702,90.0,270.013702,0.0,0.0); - AliMatrix(idrotm[237],90.0,0.0,90.0,90.0,0.0,0.0); - AliMatrix(idrotm[238],90.0,144.0,90.0,234.0,0.0,0.0); - AliMatrix(idrotm[239],90.0,216.0,90.0,306.0,0.0,0.0); - AliMatrix(idrotm[240],90.0,288.0,90.0,18.0,0.0,0.0); - AliMatrix(idrotm[241],90.0,324.0,90.0,54.0,0.0,0.0); - AliMatrix(idrotm[242],90.0,36.0,90.0,126.0,0.0,0.0); - AliMatrix(idrotm[243],90.0,108.0,90.0,198.0,0.0,0.0); - AliMatrix(idrotm[244],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[245],90.0,162.0,90.0,252.0,0.0,0.0); - AliMatrix(idrotm[246],90.0,310.0,90.0,40.0,0.0,0.0); - AliMatrix(idrotm[247],90.0,319.0,90.0,49.0,0.0,0.0); - AliMatrix(idrotm[248],90.0,328.0,90.0,58.0,0.0,0.0); - AliMatrix(idrotm[249],90.0,337.0,90.0,67.0,0.0,0.0); - AliMatrix(idrotm[1003],90.0,73.5,90.0,163.5,0.0,0.0); - AliMatrix(idrotm[1011],90.0,342.0,90.0,72.0,0.0,0.0); - AliMatrix(idrotm[1039],90.0,72.0,90.0,162.0,0.0,0.0); - AliMatrix(idrotm[1043],90.0,66.91,90.0,156.91,0.0,0.0); - AliMatrix(idrotm[1065],90.0,144.0,90.0,234.0,0.0,0.0); - AliMatrix(idrotm[1078],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[1088],90.0,57.41,90.0,147.41,0.0,0.0); - AliMatrix(idrotm[1089],90.0,333.0,90.0,63.0,0.0,0.0); - AliMatrix(idrotm[1090],90.0,351.0,90.0,81.0,0.0,0.0); - AliMatrix(idrotm[1091],90.0,216.0,90.0,306.0,0.0,0.0); - AliMatrix(idrotm[1092],90.0,27.0,90.0,117.0,0.0,0.0); - AliMatrix(idrotm[1093],90.0,18.0,90.0,108.0,0.0,0.0); - AliMatrix(idrotm[1094],90.0,9.0,90.0,99.0,0.0,0.0); - AliMatrix(idrotm[1104],90.0,252.0,90.0,342.0,0.0,0.0); - AliMatrix(idrotm[1106],90.0,36.0,90.0,126.0,0.0,0.0); - AliMatrix(idrotm[1107],90.0,108.0,90.0,198.0,0.0,0.0); - AliMatrix(idrotm[1108],90.0,324.0,90.0,54.0,180.0,0.0); - AliMatrix(idrotm[1109],90.0,0.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[1110],90.0,36.0,90.0,126.0,180.0,0.0); - AliMatrix(idrotm[1111],90.0,72.0,90.0,162.0,180.0,0.0); - AliMatrix(idrotm[1112],90.0,108.0,90.0,198.0,180.0,0.0); - AliMatrix(idrotm[1113],90.0,144.0,90.0,234.0,180.0,0.0); - AliMatrix(idrotm[1114],90.0,180.0,90.0,270.0,180.0,0.0); - AliMatrix(idrotm[1115],90.0,216.0,90.0,306.0,180.0,0.0); - AliMatrix(idrotm[1116],90.0,252.0,90.0,342.0,180.0,0.0); - AliMatrix(idrotm[1117],90.0,288.0,90.0,18.0,0.0,0.0); - AliMatrix(idrotm[1118],90.0,288.0,90.0,18.0,180.0,0.0); - AliMatrix(idrotm[1130],90.0,324.0,90.0,54.0,0.0,0.0); - - } - - // SPD - option 'b' (this is the default) - - if (option == 2) { - - AliMatrix(idrotm[201],90.0,0.0,90.0,90.0,0.0,0.0); - AliMatrix(idrotm[202],90.0,90.0,90.0,0.0,0.0,0.0); - AliMatrix(idrotm[203],90.0,350.0,90.0,260.0,0.0,0.0); - AliMatrix(idrotm[204],90.0,170.0,90.0,80.0,0.0,0.0); - AliMatrix(idrotm[205],90.0,10.0,90.0,100.0,0.0,0.0); - AliMatrix(idrotm[206],90.0,190.0,90.0,280.0,0.0,0.0); - AliMatrix(idrotm[207],90.0,342.0,90.0,72.0,0.0,0.0); - AliMatrix(idrotm[208],90.0,156.999893,90.0,246.999893,0.0,0.0); - AliMatrix(idrotm[209],90.0,147.999802,90.0,237.999893,0.0,0.0); - AliMatrix(idrotm[210],90.0,138.999802,90.0,228.999802,0.0,0.0); - AliMatrix(idrotm[211],90.0,129.999802,90.0,219.999802,0.0,0.0); - AliMatrix(idrotm[212],90.0,36.7896,90.0,126.789597,0.0,0.0); - AliMatrix(idrotm[213],90.0,343.579712,90.0,73.579697,0.0,0.0); - AliMatrix(idrotm[214],90.0,95.413696,90.0,185.413696,0.0,0.0); - AliMatrix(idrotm[215],90.0,5.4141,90.0,95.414101,0.0,0.0); - AliMatrix(idrotm[216],90.0,318.296906,90.0,48.296902,0.0,0.0); - AliMatrix(idrotm[217],90.0,67.000099,90.0,157.000107,0.0,0.0); - AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0); - AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0); - AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0); - AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0); - AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0); - AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0); - AliMatrix(idrotm[224],90.0,296.627502,90.0,26.627399,0.0,0.0); - AliMatrix(idrotm[225],90.0,48.994099,90.0,138.994095,0.0,0.0); - AliMatrix(idrotm[226],90.0,318.990997,90.0,48.991001,0.0,0.0); - AliMatrix(idrotm[227],90.0,228.988205,90.0,318.98819,0.0,0.0); - AliMatrix(idrotm[228],90.0,287.621399,90.0,17.621401,0.0,0.0); - AliMatrix(idrotm[229],90.0,39.988098,90.0,129.988098,0.0,0.0); - AliMatrix(idrotm[230],90.0,309.984985,90.0,39.985001,0.0,0.0); - AliMatrix(idrotm[231],90.0,327.2612,90.0,57.2612,0.0,0.0); - AliMatrix(idrotm[232],90.0,237.261398,90.0,327.261414,0.0,0.0); - AliMatrix(idrotm[233],90.0,252.000504,90.0,342.000488,0.0,0.0); - AliMatrix(idrotm[234],90.0,71.9991,90.0,161.9991,0.0,0.0); - AliMatrix(idrotm[235],90.0,270.0,90.0,0.0,0.0,0.0); - AliMatrix(idrotm[236],90.0,180.013702,90.0,270.013702,0.0,0.0); - AliMatrix(idrotm[237],90.0,90.0,90.0,180.0,0.0,0.0); - AliMatrix(idrotm[238],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[239],90.0,162.0,90.0,252.0,0.0,0.0); - AliMatrix(idrotm[240],90.0,310.0,90.0,40.0,0.0,0.0); - AliMatrix(idrotm[241],90.0,319.0,90.0,49.0,0.0,0.0); - AliMatrix(idrotm[242],90.0,328.0,90.0,58.0,0.0,0.0); - AliMatrix(idrotm[243],90.0,337.0,90.0,67.0,0.0,0.0); - AliMatrix(idrotm[244],90.0,216.0,90.0,306.0,0.0,0.0); - AliMatrix(idrotm[245],90.0,36.0,90.0,126.0,0.0,0.0); - AliMatrix(idrotm[246],90.0,108.0,90.0,198.0,0.0,0.0); - AliMatrix(idrotm[247],90.0,144.0,90.0,234.0,0.0,0.0); - AliMatrix(idrotm[248],90.0,288.0,90.0,18.0,0.0,0.0); - AliMatrix(idrotm[249],90.0,324.0,90.0,54.0,0.0,0.0); - AliMatrix(idrotm[1003],90.0,73.5,90.0,163.5,0.0,0.0); - AliMatrix(idrotm[1011],90.0,342.0,90.0,72.0,0.0,0.0); - AliMatrix(idrotm[1039],90.0,72.0,90.0,162.0,0.0,0.0); - AliMatrix(idrotm[1043],90.0,66.91,90.0,156.91,0.0,0.0); - AliMatrix(idrotm[1065],90.0,144.0,90.0,234.0,0.0,0.0); - AliMatrix(idrotm[1078],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[1088],90.0,57.41,90.0,147.41,0.0,0.0); - AliMatrix(idrotm[1089],90.0,333.0,90.0,63.0,0.0,0.0); - AliMatrix(idrotm[1090],90.0,351.0,90.0,81.0,0.0,0.0); - AliMatrix(idrotm[1091],90.0,216.0,90.0,306.0,0.0,0.0); - AliMatrix(idrotm[1092],90.0,27.0,90.0,117.0,0.0,0.0); - AliMatrix(idrotm[1093],90.0,18.0,90.0,108.0,0.0,0.0); - AliMatrix(idrotm[1094],90.0,9.0,90.0,99.0,0.0,0.0); - AliMatrix(idrotm[1104],90.0,252.0,90.0,342.0,0.0,0.0); - AliMatrix(idrotm[1106],90.0,36.0,90.0,126.0,0.0,0.0); - AliMatrix(idrotm[1107],90.0,108.0,90.0,198.0,0.0,0.0); - AliMatrix(idrotm[1108],90.0,324.0,90.0,54.0,180.0,0.0); - AliMatrix(idrotm[1109],90.0,0.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[1110],90.0,36.0,90.0,126.0,180.0,0.0); - AliMatrix(idrotm[1111],90.0,72.0,90.0,162.0,180.0,0.0); - AliMatrix(idrotm[1112],90.0,108.0,90.0,198.0,180.0,0.0); - AliMatrix(idrotm[1113],90.0,144.0,90.0,234.0,180.0,0.0); - AliMatrix(idrotm[1114],90.0,180.0,90.0,270.0,180.0,0.0); - AliMatrix(idrotm[1115],90.0,216.0,90.0,306.0,180.0,0.0); - AliMatrix(idrotm[1116],90.0,252.0,90.0,342.0,180.0,0.0); - AliMatrix(idrotm[1117],90.0,288.0,90.0,18.0,0.0,0.0); - AliMatrix(idrotm[1118],90.0,288.0,90.0,18.0,180.0,0.0); - AliMatrix(idrotm[1130],90.0,324.0,90.0,54.0,0.0,0.0); - - } - - // SDD - - AliMatrix(idrotm[301],0.0,0.0,90.0,90.0,90.0,180.0); - AliMatrix(idrotm[302],0.0,0.0,90.0,90.0,90.0,0.0); - AliMatrix(idrotm[303],180.0,0.0,90.0,90.0,90.0,0.0); - AliMatrix(idrotm[304],180.0,0.0,90.0,90.0,90.0,180.0); - AliMatrix(idrotm[305],90.0,347.14,90.0,77.14,0.0,0.0); - AliMatrix(idrotm[306],90.0,321.43,90.0,51.43,0.0,0.0); - AliMatrix(idrotm[307],90.0,295.71,90.0,25.71,0.0,0.0); - AliMatrix(idrotm[308],90.0,244.29,90.0,334.29,0.0,0.0); - AliMatrix(idrotm[309],90.0,218.57,90.0,308.57,0.0,0.0); - AliMatrix(idrotm[310],90.0,167.14,90.0,257.14,0.0,0.0); - AliMatrix(idrotm[311],90.0,141.43,90.0,231.43,0.0,0.0); - AliMatrix(idrotm[312],90.0,0.0,0.0,0.0,90.0,270.0); - AliMatrix(idrotm[313],90.0,115.71,90.0,205.71,0.0,0.0); - AliMatrix(idrotm[314],90.0,335.45,90.0,65.45,0.0,0.0); - AliMatrix(idrotm[315],90.0,319.09,90.0,49.09,0.0,0.0); - AliMatrix(idrotm[316],90.0,302.73,90.0,32.73,0.0,0.0); - AliMatrix(idrotm[317],90.0,286.36,90.0,16.36,0.0,0.0); - AliMatrix(idrotm[318],90.0,270.0,90.0,360.0,0.0,0.0); - AliMatrix(idrotm[319],90.0,253.64,90.0,343.64,0.0,0.0); - AliMatrix(idrotm[320],90.0,237.27,90.0,327.27,0.0,0.0); - AliMatrix(idrotm[321],90.0,12.86,90.0,102.86,0.0,0.0); - AliMatrix(idrotm[322],90.0,220.91,90.0,310.91,0.0,0.0); - AliMatrix(idrotm[323],90.0,204.55,90.0,294.55,0.0,0.0); - AliMatrix(idrotm[324],90.0,188.18,90.0,278.18,0.0,0.0); - AliMatrix(idrotm[325],90.0,171.82,90.0,261.82,0.0,0.0); - AliMatrix(idrotm[326],90.0,155.45,90.0,245.45,0.0,0.0); - AliMatrix(idrotm[327],90.0,139.09,90.0,229.09,0.0,0.0); - AliMatrix(idrotm[328],90.0,122.73,90.0,212.73,0.0,0.0); - AliMatrix(idrotm[329],90.0,106.36,90.0,196.36,0.0,0.0); - AliMatrix(idrotm[330],90.0,73.64,90.0,163.64,0.0,0.0); - AliMatrix(idrotm[331],90.0,40.91,90.0,130.91,0.0,0.0); - AliMatrix(idrotm[332],90.0,24.55,90.0,114.55,0.0,0.0); - AliMatrix(idrotm[333],90.0,38.57,90.0,128.57,0.0,0.0); - AliMatrix(idrotm[334],90.0,351.82,90.0,81.82,0.0,0.0); - AliMatrix(idrotm[335],90.0,8.18,90.0,98.18,0.0,0.0); - AliMatrix(idrotm[336],90.0,64.29,90.0,154.29,0.0,0.0); - AliMatrix(idrotm[337],111.0,300.0,21.0,300.0,90.0,30.0); - AliMatrix(idrotm[338],69.0,240.0,159.0,240.0,90.0,150.0); - AliMatrix(idrotm[339],111.0,240.0,21.0,240.0,90.0,150.0); - AliMatrix(idrotm[340],69.0,300.0,159.0,300.0,90.0,30.0); - AliMatrix(idrotm[341],128.0,0.0,38.0,0.0,90.0,270.0); - AliMatrix(idrotm[342],90.0,240.0,180.0,0.0,90.0,330.); - AliMatrix(idrotm[343],90.0,120.0,180.0,0.0,90.0,210.0); - AliMatrix(idrotm[344],90.0,0.0,180.0,0.0,90.0,90.0); - AliMatrix(idrotm[345],90.0,180.0,90.0,90.0,0.0,0.0); - AliMatrix(idrotm[346],90.0,300.0,90.0,30.0,0.0,0.0); - AliMatrix(idrotm[347],90.0,240.0,90.0,150.0,0.0,0.0); - AliMatrix(idrotm[348],90.0,180.0,0.0,0.0,90.0,270.0); - AliMatrix(idrotm[349],90.0,235.0,90.0,145.0,0.0,0.0); - AliMatrix(idrotm[350],90.0,90.0,90.0,180.0,0.0,0.0); - AliMatrix(idrotm[351],90.0,305.0,90.0,35.0,0.0,0.0); - AliMatrix(idrotm[352],0.0,0.0,90.0,0.0,90.0,90.0); - AliMatrix(idrotm[353],90.0,60.0,90.0,150.0,0.0,0.0); - AliMatrix(idrotm[354],90.0,120.0,90.0,30.0,0.0,0.0); - AliMatrix(idrotm[355],90.0,180.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[356],90.0,270.0,90.0,0.0,0.0,0.0); - AliMatrix(idrotm[366],90.0,57.27,90.0,147.27,0.0,0.0); - AliMatrix(idrotm[386],90.0,192.86,90.0,282.86,0.0,0.0); - - // SSD - - AliMatrix(idrotm[501],90.0,148.24,90.0,238.24,0.0,0.0); - AliMatrix(idrotm[503],90.0,137.65,90.0,227.65,0.0,0.0); - AliMatrix(idrotm[504],90.0,127.06,90.0,217.06,0.0,0.0); - AliMatrix(idrotm[505],90.0,116.47,90.0,206.47,0.0,0.0); - AliMatrix(idrotm[506],90.0,105.88,90.0,195.88,0.0,0.0); - AliMatrix(idrotm[507],90.0,95.29,90.0,185.29,0.0,0.0); - AliMatrix(idrotm[508],90.0,84.71,90.0,174.71,0.0,0.0); - AliMatrix(idrotm[509],90.0,74.12,90.0,164.12,0.0,0.0); - AliMatrix(idrotm[510],90.0,63.53,90.0,153.53,0.0,0.0); - AliMatrix(idrotm[511],90.0,52.94,90.0,142.94,0.0,0.0); - AliMatrix(idrotm[512],90.0,42.35,90.0,132.35,0.0,0.0); - AliMatrix(idrotm[513],90.0,31.76,90.0,121.76,0.0,0.0); - AliMatrix(idrotm[514],90.0,10.59,90.0,100.59,0.0,0.0); - AliMatrix(idrotm[515],90.0,349.41,90.0,79.41,0.0,0.0); - AliMatrix(idrotm[516],90.0,338.82,90.0,68.82,0.0,0.0); - AliMatrix(idrotm[517],90.0,328.24,90.0,58.24,0.0,0.0); - AliMatrix(idrotm[518],90.0,317.65,90.0,47.65,0.0,0.0); - AliMatrix(idrotm[519],90.0,307.06,90.0,37.06,0.0,0.0); - AliMatrix(idrotm[520],90.0,296.47,90.0,26.47,0.0,0.0); - AliMatrix(idrotm[521],90.0,285.88,90.0,15.88,0.0,0.0); - AliMatrix(idrotm[522],90.0,275.29,90.0,5.29,0.0,0.0); - AliMatrix(idrotm[523],90.0,264.71,90.0,354.71,0.0,0.0); - AliMatrix(idrotm[524],90.0,254.12,90.0,344.12,0.0,0.0); - AliMatrix(idrotm[525],90.0,243.53,90.0,333.53,0.0,0.0); - AliMatrix(idrotm[526],90.0,232.94,90.0,322.94,0.0,0.0); - AliMatrix(idrotm[527],90.0,222.35,90.0,312.35,0.0,0.0); - AliMatrix(idrotm[528],90.0,211.76,90.0,301.76,0.0,0.0); - AliMatrix(idrotm[529],90.0,190.59,90.0,280.59,0.0,0.0); - AliMatrix(idrotm[530],90.0,169.41,90.0,259.41,0.0,0.0); - AliMatrix(idrotm[531],90.0,158.82,90.0,248.82,0.0,0.0); - AliMatrix(idrotm[532],90.0,360.0,90.0,90.0,0.0,0.0); - AliMatrix(idrotm[533],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[534],90.0,189.47,90.0,279.47,0.0,0.0); - AliMatrix(idrotm[535],90.0,198.95,90.0,288.95,0.0,0.0); - AliMatrix(idrotm[537],90.0,217.89,90.0,307.89,0.0,0.0); - AliMatrix(idrotm[538],90.0,227.37,90.0,317.37,0.0,0.0); - AliMatrix(idrotm[539],90.0,236.84,90.0,326.84,0.0,0.0); - AliMatrix(idrotm[540],90.0,246.32,90.0,336.32,0.0,0.0); - AliMatrix(idrotm[541],90.0,255.79,90.0,345.79,0.0,0.0); - AliMatrix(idrotm[542],90.0,265.26,90.0,355.26,0.0,0.0); - AliMatrix(idrotm[543],90.0,274.74,90.0,4.74,0.0,0.0); - AliMatrix(idrotm[544],90.0,284.21,90.0,14.21,0.0,0.0); - AliMatrix(idrotm[545],90.0,293.68,90.0,23.68,0.0,0.0); - AliMatrix(idrotm[546],90.0,303.16,90.0,33.16,0.0,0.0); - AliMatrix(idrotm[547],90.0,312.63,90.0,42.63,0.0,0.0); - AliMatrix(idrotm[548],90.0,322.11,90.0,52.11,0.0,0.0); - AliMatrix(idrotm[549],90.0,331.58,90.0,61.58,0.0,0.0); - AliMatrix(idrotm[550],90.0,341.05,90.0,71.05,0.0,0.0); - AliMatrix(idrotm[551],90.0,350.53,90.0,80.53,0.0,0.0); - AliMatrix(idrotm[552],90.0,9.47,90.0,99.47,0.0,0.0); - AliMatrix(idrotm[553],90.0,18.95,90.0,108.95,0.0,0.0); - AliMatrix(idrotm[555],90.0,37.89,90.0,127.89,0.0,0.0); - AliMatrix(idrotm[556],90.0,47.37,90.0,137.37,0.0,0.0); - AliMatrix(idrotm[557],90.0,56.84,90.0,146.84,0.0,0.0); - AliMatrix(idrotm[558],90.0,66.32,90.0,156.32,0.0,0.0); - AliMatrix(idrotm[559],90.0,75.79,90.0,165.79,0.0,0.0); - AliMatrix(idrotm[560],90.0,85.26,90.0,175.26,0.0,0.0); - AliMatrix(idrotm[561],90.0,94.74,90.0,184.74,0.0,0.0); - AliMatrix(idrotm[562],90.0,104.21,90.0,194.21,0.0,0.0); - AliMatrix(idrotm[563],90.0,113.68,90.0,203.68,0.0,0.0); - AliMatrix(idrotm[564],90.0,123.16,90.0,213.16,0.0,0.0); - AliMatrix(idrotm[565],90.0,132.63,90.0,222.63,0.0,0.0); - AliMatrix(idrotm[566],90.0,142.11,90.0,232.11,0.0,0.0); - AliMatrix(idrotm[567],90.0,151.58,90.0,241.58,0.0,0.0); - AliMatrix(idrotm[568],90.0,161.05,90.0,251.05,0.0,0.0); - AliMatrix(idrotm[569],90.0,170.53,90.0,260.53,0.0,0.0); - AliMatrix(idrotm[570],90.0,180.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[571],90.0,0.0,0.0,0.0,90.0,270.0); - AliMatrix(idrotm[572],90.0,180.0,0.0,0.0,90.0,270.0); - AliMatrix(idrotm[573],90.0,180.0,90.0,90.0,0.0,0.0); - AliMatrix(idrotm[575],90.0,120.0,180.0,0.0,90.0,210.0); - AliMatrix(idrotm[576],65.71,300.0,90.0,30.0,24.29,120.0); - AliMatrix(idrotm[577],114.29,300.0,90.0,30.0,155.71,120.0); - AliMatrix(idrotm[579],65.71,240.0,90.0,150.0,24.29,60.0); - AliMatrix(idrotm[580],114.29,240.0,90.0,150.0,155.71,60.0); - AliMatrix(idrotm[581],90.0,240.0,180.0,0.0,90.0,330.0); - AliMatrix(idrotm[583],90.0,0.0,180.0,0.0,90.0,90.0); - AliMatrix(idrotm[584],90.0,180.0,180.0,0.0,90.0,90.0); - AliMatrix(idrotm[586],180.0,0.0,90.0,90.0,90.0,0.0); - AliMatrix(idrotm[618],90.0,201.18,90.0,291.18,0.0,0.0); - AliMatrix(idrotm[620],90.0,28.42,90.0,118.42,0.0,0.0); - AliMatrix(idrotm[623],90.0,208.42,90.0,298.42,0.0,0.0); - AliMatrix(idrotm[633],132.46,0.0,90.0,90.0,42.46,360.0); - AliMatrix(idrotm[653],90.0,21.18,90.0,111.18,0.0,0.0); - - - // SDD cone - - AliMatrix(idrotm[846],90.0,300.0,90.0,30.0,0.0,0.0); - AliMatrix(idrotm[851],90.0,305.0,90.0,35.0,0.0,0.0); - AliMatrix(idrotm[853],90.0,60.0,90.0,150.0,0.0,0.0); - AliMatrix(idrotm[856],90.0,0.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[857],90.0,5.0,90.0,95.0,180.0,0.0); - AliMatrix(idrotm[858],90.0,65.0,90.0,155.0,180.0,0.0); - AliMatrix(idrotm[859],90.0,305.0,90.0,35.0,180.0,0.0); - AliMatrix(idrotm[860],90.0,245.0,90.0,335.0,180.0,0.0); - AliMatrix(idrotm[861],90.0,185.0,90.0,275.0,180.0,0.0); - AliMatrix(idrotm[862],90.0,125.0,90.0,215.0,180.0,0.0); - AliMatrix(idrotm[863],90.0,257.5,90.0,347.5,180.0,0.0); - AliMatrix(idrotm[864],90.0,227.5,90.0,317.5,180.0,0.0); - AliMatrix(idrotm[865],90.0,197.5,90.0,287.5,180.0,0.0); - AliMatrix(idrotm[867],90.0,167.5,90.0,257.5,180.0,0.0); - AliMatrix(idrotm[868],90.0,287.5,90.0,17.5,0.0,0.0); - AliMatrix(idrotm[869],90.0,137.5,90.0,227.5,180.0,0.0); - AliMatrix(idrotm[870],90.0,107.5,90.0,197.5,180.0,0.0); - AliMatrix(idrotm[871],90.0,77.5,90.0,167.5,180.0,0.0); - AliMatrix(idrotm[872],90.0,47.5,90.0,137.5,180.0,0.0); - AliMatrix(idrotm[873],90.0,17.5,90.0,107.5,180.0,0.0); - AliMatrix(idrotm[874],90.0,347.5,90.0,77.5,180.0,0.0); - AliMatrix(idrotm[875],90.0,317.5,90.0,47.5,180.0,0.0); - AliMatrix(idrotm[876],90.0,287.5,90.0,17.5,180.0,0.0); - AliMatrix(idrotm[877],90.0,185.0,90.0,275.0,0.0,0.0); - AliMatrix(idrotm[878],90.0,180.0,90.0,270.0,0.0,0.0); - AliMatrix(idrotm[879],90.0,125.0,90.0,215.0,0.0,0.0); - AliMatrix(idrotm[880],90.0,65.0,90.0,155.0,0.0,0.0); - AliMatrix(idrotm[881],90.0,5.0,90.0,95.0,0.0,0.0); - AliMatrix(idrotm[882],90.0,245.0,90.0,335.0,0.0,0.0); - AliMatrix(idrotm[883],90.0,47.5,90.0,137.5,0.0,0.0); - AliMatrix(idrotm[884],90.0,77.5,90.0,167.5,0.0,0.0); - AliMatrix(idrotm[885],90.0,107.5,90.0,197.5,0.0,0.0); - AliMatrix(idrotm[887],90.0,137.5,90.0,227.5,0.0,0.0); - AliMatrix(idrotm[888],90.0,167.5,90.0,257.5,0.0,0.0); - AliMatrix(idrotm[889],90.0,197.5,90.0,287.5,0.0,0.0); - AliMatrix(idrotm[890],90.0,227.5,90.0,317.5,0.0,0.0); - AliMatrix(idrotm[891],90.0,347.5,90.0,77.5,0.0,0.0); - AliMatrix(idrotm[892],90.0,317.5,90.0,47.5,0.0,0.0); - AliMatrix(idrotm[893],90.0,257.5,90.0,347.5,0.0,0.0); - AliMatrix(idrotm[894],90.0,270.0,0.0,0.0,90.0,180.0); - AliMatrix(idrotm[895],90.0,286.36,0.0,0.0,90.0,196.36); - AliMatrix(idrotm[896],90.0,302.73,0.0,0.0,90.0,212.73); - AliMatrix(idrotm[897],90.0,319.09,0.0,0.0,90.0,229.09); - AliMatrix(idrotm[898],90.0,17.5,90.0,107.5,0.0,0.0); - AliMatrix(idrotm[899],90.0,335.45,0.0,0.0,90.0,245.45); - AliMatrix(idrotm[900],90.0,351.82,0.0,0.0,90.0,261.82); - AliMatrix(idrotm[901],90.0,8.18,0.0,0.0,90.0,278.18); - AliMatrix(idrotm[902],90.0,24.55,0.0,0.0,90.0,294.55); - AliMatrix(idrotm[903],90.0,40.91,0.0,0.0,90.0,310.91); - AliMatrix(idrotm[904],90.0,57.27,0.0,0.0,90.0,327.27); - AliMatrix(idrotm[905],90.0,73.64,0.0,0.0,90.0,343.64); - AliMatrix(idrotm[906],90.0,90.0,0.0,0.0,90.0,360.0); - AliMatrix(idrotm[907],90.0,106.36,0.0,0.0,90.0,16.36); - AliMatrix(idrotm[908],90.0,122.73,0.0,0.0,90.0,32.73); - AliMatrix(idrotm[909],90.0,139.09,0.0,0.0,90.0,49.09); - AliMatrix(idrotm[910],90.0,155.45,0.0,0.0,90.0,65.45); - AliMatrix(idrotm[911],90.0,171.82,0.0,0.0,90.0,81.82); - AliMatrix(idrotm[912],90.0,188.18,0.0,0.0,90.0,98.18); - AliMatrix(idrotm[913],90.0,204.55,0.0,0.0,90.0,114.55); - AliMatrix(idrotm[914],90.0,220.91,0.0,0.0,90.0,130.91); - AliMatrix(idrotm[915],90.0,237.27,0.0,0.0,90.0,147.27); - AliMatrix(idrotm[916],90.0,253.64,0.0,0.0,90.0,163.64); - AliMatrix(idrotm[917],90.0,295.71,0.0,0.0,90.0,205.71); - AliMatrix(idrotm[918],90.0,321.43,0.0,0.0,90.0,231.43); - AliMatrix(idrotm[919],90.0,347.14,0.0,0.0,90.0,257.14); - AliMatrix(idrotm[920],90.0,12.86,0.0,0.0,90.0,282.86); - AliMatrix(idrotm[921],90.0,38.57,0.0,0.0,90.0,308.57); - AliMatrix(idrotm[922],90.0,64.29,0.0,0.0,90.0,334.29); - AliMatrix(idrotm[923],90.0,115.71,0.0,0.0,90.0,25.71); - AliMatrix(idrotm[924],90.0,141.43,0.0,0.0,90.0,51.43); - AliMatrix(idrotm[925],90.0,167.14,0.0,0.0,90.0,77.14); - AliMatrix(idrotm[926],90.0,192.86,0.0,0.0,90.0,102.86); - AliMatrix(idrotm[927],90.0,218.57,0.0,0.0,90.0,128.57); - AliMatrix(idrotm[928],90.0,244.29,0.0,0.0,90.0,154.29); - AliMatrix(idrotm[929],90.0,120.0,90.0,210.0,0.0,0.0); - AliMatrix(idrotm[930],90.0,240.0,90.0,330.0,0.0,0.0); - AliMatrix(idrotm[931],90.0,60.0,90.0,150.0,180.0,0.0); - AliMatrix(idrotm[932],90.0,120.0,90.0,210.0,180.0,0.0); - AliMatrix(idrotm[933],90.0,180.0,90.0,270.0,180.0,0.0); - AliMatrix(idrotm[934],90.0,240.0,90.0,330.0,180.0,0.0); - AliMatrix(idrotm[935],90.0,300.0,90.0,30.0,180.0,0.0); - - // SSD cone - - AliMatrix(idrotm[701],90.0,0.0,90.0,90.0,180.0,0.0); - AliMatrix(idrotm[702],90.0,347.5,90.0,77.5,180.0,0.0); - AliMatrix(idrotm[703],90.0,17.5,90.0,107.5,180.0,0.0); - AliMatrix(idrotm[704],90.0,47.5,90.0,137.5,180.0,0.0); - AliMatrix(idrotm[705],90.0,77.5,90.0,167.5,180.0,0.0); - AliMatrix(idrotm[706],90.0,107.5,90.0,197.5,180.0,0.0); - AliMatrix(idrotm[707],90.0,137.5,90.0,227.5,180.0,0.0); - AliMatrix(idrotm[708],90.0,167.5,90.0,257.5,180.0,0.0); - AliMatrix(idrotm[709],90.0,197.5,90.0,287.5,180.0,0.0); - AliMatrix(idrotm[710],90.0,227.5,90.0,317.5,180.0,0.0); - AliMatrix(idrotm[711],90.0,257.5,90.0,347.5,180.0,0.0); - AliMatrix(idrotm[712],90.0,287.5,90.0,17.5,180.0,0.0); - AliMatrix(idrotm[713],90.0,317.5,90.0,47.5,180.0,0.0); - AliMatrix(idrotm[714],90.0,328.4,90.0,58.4,180.0,0.0); - AliMatrix(idrotm[715],90.0,28.4,90.0,118.4,180.0,0.0); - AliMatrix(idrotm[716],90.0,88.4,90.0,178.4,180.0,0.0); - AliMatrix(idrotm[717],90.0,148.4,90.0,238.4,180.0,0.0); - AliMatrix(idrotm[718],90.0,208.4,90.0,298.4,180.0,0.0); - AliMatrix(idrotm[719],90.0,268.4,90.0,358.4,180.0,0.0); - AliMatrix(idrotm[720],90.0,28.4,90.0,118.4,0.0,0.0); - AliMatrix(idrotm[721],90.0,88.4,90.0,178.4,0.0,0.0); - AliMatrix(idrotm[722],90.0,148.4,90.0,238.4,0.0,0.0); - AliMatrix(idrotm[723],90.0,208.4,90.0,298.4,0.0,0.0); - AliMatrix(idrotm[724],90.0,268.4,90.0,358.4,0.0,0.0); - AliMatrix(idrotm[725],90.0,328.4,90.0,58.4,0.0,0.0); - AliMatrix(idrotm[726],90.0,77.5,90.0,167.5,0.0,0.0); - AliMatrix(idrotm[727],90.0,107.5,90.0,197.5,0.0,0.0); - AliMatrix(idrotm[728],90.0,137.5,90.0,227.5,0.0,0.0); - AliMatrix(idrotm[729],90.0,167.5,90.0,257.5,0.0,0.0); - AliMatrix(idrotm[730],90.0,227.5,90.0,317.5,0.0,0.0); - AliMatrix(idrotm[731],90.0,257.5,90.0,347.5,0.0,0.0); - AliMatrix(idrotm[732],90.0,317.5,90.0,47.5,0.0,0.0); - AliMatrix(idrotm[733],90.0,197.5,90.0,287.5,0.0,0.0); - AliMatrix(idrotm[734],90.0,347.5,90.0,77.5,0.0,0.0); - AliMatrix(idrotm[735],90.0,47.5,90.0,137.5,0.0,0.0); - AliMatrix(idrotm[768],90.0,287.5,90.0,17.5,0.0,0.0); - AliMatrix(idrotm[798],90.0,17.5,90.0,107.5,0.0,0.0); - - // Services - - AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.); - - - // CONVERT INTO CM (RL(SI)=9.36 CM) - - for (i = 0; i < 6; ++i) { - drl[i] = drl[i] / 100. * 9.36; - } - - // FIELD CAGE HALF LENGTH - - rlim = 50.; - zmax = 74.; - ztpc = 284.; - - // --- Define ghost volume containing the whole ITS (including services) - // and fill it with air - - dgh[0] = 0.; - dgh[1] = 360.; - dgh[2] = 16.; - dgh[3] = -ztpc-5.-0.1; - dgh[4] = 46; - dgh[5] = 85.; - dgh[6] = -ztpc; - dgh[7] = 46; - dgh[8] = 85.; - dgh[9] = -ztpc; - dgh[10] = 46; - dgh[11] = rlim+6; - dgh[12] = -97.5; - dgh[13] = 46; - dgh[14] = rlim+6; - dgh[15] = -zmax; - dgh[16] = 46; - dgh[17] = rlim+6; - dgh[18] = -48; - dgh[19] = 6; - dgh[20] = rlim+6; - dgh[21] = -28.6; - dgh[22] = 6; - dgh[23] = rlim+6; - dgh[24] = -27.6; - dgh[25] = 3.295; - dgh[26] = rlim+6; - dgh[27] = 27.6; - dgh[28] = 3.295; - dgh[29] = rlim+6; - dgh[30] = 28.6; - dgh[31] = 6; - dgh[32] = rlim+6; - dgh[33] = 48; - dgh[34] = 6; - dgh[35] = rlim+6; - dgh[36] = zmax; - dgh[37] = 46; - dgh[38] = rlim+6; - dgh[39] = 97.5; - dgh[40] = 46; - dgh[41] = rlim+6; - dgh[42] = ztpc; - dgh[43] = 62; - dgh[44] = 62+4.; - dgh[45] = ztpc; - dgh[46] = 62; - dgh[47] = 85.; - dgh[48] = ztpc+4.+0.1; - dgh[49] = 62.4; - dgh[50] = 85.; - gMC->Gsvolu("ITSV", "PCON", idtmed[205], dgh, 51); - - - // --- Place the ghost volume in its mother volume (ALIC) and make it - // invisible - - gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY"); - //gMC->Gsatt("ITSV", "SEEN", 0); - - - // --- Define ghost volume containing the six layers and fill it with air - - dgh[0] = 0.; - dgh[1] = 360.; - dgh[2] = 8.; - dgh[3] = -zmax; - dgh[4] = 46.; - dgh[5] = rlim; - dgh[6] = -47.5; - dgh[7] = 6.005; - dgh[8] = rlim; - dgh[9] = -28.5; - dgh[10] = 6.005; - dgh[11] = rlim; - dgh[12] = -27.5; - dgh[13] = 3.3; - dgh[14] = rlim; - dgh[15] = 27.5; - dgh[16] = 3.3; - dgh[17] = rlim; - dgh[18] = 28.5; - dgh[19] = 6.005; - dgh[20] = rlim; - dgh[21] = 47.5; - dgh[22] = 6.005; - dgh[23] = rlim; - dgh[24] = zmax; - dgh[25] = 46.; - dgh[26] = rlim; - gMC->Gsvolu("ITSD", "PCON", idtmed[205], dgh, 27); - - // --- Place the ghost volume in its mother volume (ITSV) and make it - // invisible - - gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY"); - //gMC->Gsatt("ITSD", "SEEN", 0); - - - // --- Define SPD (option 'a') volumes ---------------------------- - - // SPD - option 'a' - // (this is NOT the default) - - if (option == 1) { - - dits[0] = 3.7; - dits[1] = 7.75; - dits[2] = 26.1; - gMC->Gsvolu("IT12", "TUBE", idtmed[254], dits, 3); - - dits[0] = 3.7; - dits[1] = 7.7; - dits[2] = 24; - dits[3] = 57; - dits[4] = 100; - gMC->Gsvolu("I12A", "TUBS", idtmed[254], dits, 5); // sector - - di10a[0] = 0.843; - di10a[1] = ddet1+dchip1+dbus+0.0025; - di10a[2] = 19.344; - gMC->Gsvolu("I10A", "BOX ", idtmed[254], di10a, 3); // mother volume - // on layer 1 - di20a[0] = 0.843; - di20a[1] = ddet2+dchip2+dbus+0.0025; - di20a[2] = 19.344; - gMC->Gsvolu("I20A", "BOX ", idtmed[254], di20a, 3); // mother volume - // on layer 2 - dits[0] = 1.3673; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I123", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.06; - dits[1] = 0.08; - dits[2] = 24; - dits[3] = -36.79; - dits[4] = 21.834; - gMC->Gsvolu("I121", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.1253; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I122", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.04; - dits[1] = 0.06 ; - dits[2] = 24; - dits[3] = 126.79; - dits[4] = 270; - gMC->Gsvolu("I120", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.1134; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I144", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.25; - dits[1] = 0.06; - dits[2] = 24; - gMC->Gsvolu("I113", "BOX ", idtmed[254], dits, 3); - - dits[0] = 0.077; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I143", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.04; - dits[1] = 0.06; - dits[2] = 24; - dits[3] = 0; - dits[4] = 90; - gMC->Gsvolu("I142", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.0695; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I141", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.06; - dits[1] = 0.08; - dits[2] = 24; - dits[3] = 0; - dits[4] = 108; - gMC->Gsvolu("I140", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.1835; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I139", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.1894 ; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I138", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.04; - dits[1] = 0.06; - dits[2] = 24; - dits[3] = 0; - dits[4] = 75.261; - gMC->Gsvolu("I137", "TUBS", idtmed[253], dits, 5); - - dits[0] = 1.3401; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I136", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.05; - dits[1] = 0.07; - dits[2] = 24; - dits[3] = 0; - dits[4] = 72.739; - gMC->Gsvolu("I135", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.1193; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I134", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.163; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I133", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.04; - dits[1] = 0.06; - dits[2] = 24; - dits[3] = 0; - dits[4] = 157.633; - gMC->Gsvolu("I132", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.2497; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I131", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.06; - dits[1] = 0.08; - dits[2] = 24; - dits[3] = 0; - dits[4] = 148.633; - gMC->Gsvolu("I130", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.292; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I129", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.163; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I128", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.04; - dits[1] = 0.06; - dits[2] = 24; - dits[3] = 0; - dits[4] = 161.297; - gMC->Gsvolu("I126", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.2433; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I125", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.06; - dits[1] = 0.08; - dits[2] = 24; - dits[3] = 0; - dits[4] = 42.883; - gMC->Gsvolu("I124", "TUBS", idtmed[253], dits, 5); - - di103[0] = 0.793; - di103[1] = ddet1+dchip1; - di103[2] = 3.536; - gMC->Gsvolu("I103", "BOX ", idtmed[254], di103, 3); // contains det and chip - // layer 1 - dits[0] = 0.793; - dits[1] = 0.475; //0.685; 0.015 - dits[2] = 2.5; - gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3); // end-ladder electr. - - di104[0] = 0.843; - di104[1] = dbus; - di104[2] = 14.344; - gMC->Gsvolu("I104", "BOX ", idtmed[275], di104, 3); // bus for both layers - - di1d3[0] = 0.793; - di1d3[1] = ddet2+dchip2; - di1d3[2] = 3.536; - gMC->Gsvolu("I1D3", "BOX ", idtmed[254], di1d3, 3); // contains det and chip - // layer 2 - dits[0] = 0.793; - dits[0] = 0.06; - dits[1] = 0.08; - dits[2] = 24; - dits[3] = 0; - dits[4] = 80; - gMC->Gsvolu("I112", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.04; - dits[1] = 0.06; - dits[2] = 24; - dits[3] = 0; - dits[4] = 80; - gMC->Gsvolu("I111", "TUBS", idtmed[253], dits, 5); - - dits[0] = 0.15; - dits[1] = 0.0146; - dits[2] = 24; - gMC->Gsvolu("I118", "BOX ", idtmed[273], dits, 3); - - dits[0] = 0.1315; - dits[1] = 0.01; - dits[2] = 24; - gMC->Gsvolu("I110", "BOX ", idtmed[253], dits, 3); - - dits[0] = 0.025; - dits[1] = 0.035; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5); - - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set water as cooling fluid - } else { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[212], dits, 5); // set freon as cooling fluid - } - - dits[0] = 0.063; - dits[1] = 0.035; - dits[2] = 24; - gMC->Gsvolu("I116", "BOX ", idtmed[264], dits, 3); - - di102[0] = 0.793; - di102[1] = dchip1; - di102[2] = 0.68; - gMC->Gsvolu("I102", "BOX ", idtmed[201], di102, 3); // chip layer 1 - - di1d2[0] = 0.793; - di1d2[1] = dchip2; - di1d2[2] = 0.68; - gMC->Gsvolu("I1D2", "BOX ", idtmed[201], di1d2, 3); // chip layer 2 - - di101[0] = 0.705; - di101[1] = ddet1; - di101[2] = 3.536; - gMC->Gsvolu("I101", "BOX ", idtmed[250], di101, 3); // contains detector - // layer 1 - di1d1[0] = 0.705; - di1d1[1] = ddet2; - di1d1[2] = 3.536; - gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3); // contains detector - // layer 2 - if (fluid == 1) { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set water as cooling fuid - } else { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[212], dits, 3); // set freon as cooling fluid - } + fNodes->Add(node); - dits1[0] = 0.64; - dits1[1] = ddet1; - dits1[2] = 3.48; - gMC->Gsvolu("ITS1", "BOX ", idtmed[200], dits1, 3); // detector layer 1 + 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 AliITSvPPRasymmFMD::CreateGeometry(){ + // This routine defines and Creates the geometry for version 10 of + // the ITS. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + + //Begin_Html + /* + + +
+ +

This shows the full ITS geometry. + + + + < br clear=left> + +

This shows the full SPD Barrel of the ITS geometry. + + + +
+ +

This shows the full SDD Barrel of the ITS geometry. + + + +
+ +

This shows the full SSD Barrel of the ITS geometry. + + */ + //End_Html + //INNER RADII OF THE SILICON LAYERS + // Float_t rl[6] = { 3.8095,7.,15.,24.,38.1,43.5765 }; + //THICKNESSES OF LAYERS (in % radiation length) + Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 }; + //HALF LENGTHS OF LAYERS + // Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 }; + //LENGTHS OF END-LADDER BOXES (ALL INCLUDED) + // Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 }; + //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED) + // Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. }; + + + Float_t dits[100], rlim, zmax; + // Float_t zpos; + // Float_t pcits[50] + Float_t ztpc; + Int_t idrotm[1999], i; + Float_t dgh[100]; + + + // Define some variables for SPD + + Float_t dits1[3], di101[3], di107[3], di10b[3], di106[3];// for layer 1 + Float_t di103[3], di10a[3], di102[3]; // for layer 1 + Float_t dits2[3], di1d1[3], di1d7[3], di20b[3], di1d6[3];// for layer 2 + Float_t di1d3[3], di20a[3], di1d2[3]; // for layer 2 + Float_t di108[3], di104[3]; // for both layers + + Float_t ddet1=200.; // total detector thickness on layer 1 (micron) + Float_t dchip1=200.; // total chip thickness on layer 1 (micron) + + Float_t ddet2=200.; // total detector thickness on layer 2 (micron) + Float_t dchip2=200.; // total chip thickness on layer 2 (micron) + + Float_t dbus=300.; // total bus thickness on both layers (micron) + + // These constant character strings are set by cvs during commit + // do not change them unless you know what you are doing! + const Char_t *cvsDate="$Date$"; + const Char_t *cvsRevision="$Revision$"; + + ddet1 = GetThicknessDet1(); + ddet2 = GetThicknessDet2(); + dchip1 = GetThicknessChip1(); + dchip2 = GetThicknessChip2(); + + if(ddet1 < 100. || ddet1 > 300.) { + AliWarning("The detector thickness for layer 1 is outside "); + AliWarning("the range of [100,300] microns. The default value of 200 microns "); + AliWarning("will be used."); + ddet1=200.; + } // end if + + if(ddet2 < 100. || ddet2 > 300.) { + AliWarning("The detector thickness for layer 2 is outside "); + AliWarning("the range of [100,300] microns. The default value of 200 microns "); + AliWarning("will be used."); + ddet2=200.; + }// end if + + if(dchip1 < 100. || dchip1 > 300.) { + AliWarning("The chip thickness for layer 1 is outside"); + AliWarning("the range of [100,300] microns. The default value of 200 microns"); + AliWarning("will be used."); + dchip1=200.; + }// end if + + if(dchip2 < 100. || dchip2 > 300.) { + AliWarning("The chip thickness for layer 2 is outside"); + AliWarning("the range of [100,300] microns. The default value of 200 microns"); + AliWarning("will be used"); + dchip2=200.; + }// end if - dits2[0] = 0.64; - dits2[1] = ddet2; - dits2[2] = 3.48; - gMC->Gsvolu("ITS2", "BOX ", idtmed[200], dits2, 3); // detector layer 2 + Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out) - dits[0] = 3.701; - dits[1] = 7.699; - dits[2] = 4; - dits[3] = 57.1; - dits[4] = 99.9; - gMC->Gsvolu("I650", "TUBS", idtmed[254], dits, 5); // was I150 in old geom. + Int_t fluid = 1; // flag for the cooling fluid (1 --> water; 0 --> freon) + // This option is maintained for SDD and SSD only + // For SPD the cooling liquid is C4F10 + rails = GetRails(); - dits[0] = 3.7; - dits[1] = 7.75; - dits[2] = 0.05; - gMC->Gsvolu("I651", "TUBE", idtmed[296], dits, 3); // services disk - - dits[0] = 0; - dits[1] = 0.5; - dits[2] = 1.5; - gMC->Gsvolu("I676", "TUBE", idtmed[274], dits, 3); // was I176 in old geom. + fluid = GetCoolingFluid(); - dits[0] = 0; - dits[1] = 0.18; - dits[2] = 0.8; - gMC->Gsvolu("I673", "TUBE", idtmed[274], dits, 3); // was I173 in old geom. + if(rails != 0 && rails != 1) { + AliWarning("The switch for rails is not set neither"); + AliWarning("to 0 (rails out) nor to 1 (rails in). The default value of"); + AliWarning("1 (rails in) will be used"); + rails=1; + }// end if - dits[0] = 0; - dits[1] = 0.18; - dits[2] = 3; - gMC->Gsvolu("I671", "TUBE", idtmed[274], dits, 3); // was I171 in old geom. - dits[0] = 0; - dits[1] = 0.075; - dits[2] = 0.8; - gMC->Gsvolu("I669", "TUBE", idtmed[264], dits, 3); // was I169 in old geom. + AliDebug(1,Form("Detector thickness on layer 1 is set to %f microns",ddet1)); + AliDebug(1,Form("Chip thickness on layer 1 is set to %f microns",dchip1)); + AliDebug(1,Form("Detector thickness on layer 2 is set to %f microns",ddet2)); + AliDebug(1,Form("Chip thickness on layer 2 is set to %f microns",dchip2)); + if(rails == 0 ) { + AliDebug(1,"Rails are out."); + } else { + AliDebug(1,"Rails are in."); + }// end if - dits[0] = 3.5; - dits[1] = 5.6; - dits[2] = 0.55; - dits[3] = 0; - dits[4] = 38; - gMC->Gsvolu("I667", "TUBS", idtmed[263], dits, 5); // was I167 in old geom. + ddet1 = ddet1*0.0001/2.; // conversion from tot length in um to half in cm + ddet2 = ddet2*0.0001/2.; // conversion from tot length in um to half in cm + dchip1 = dchip1*0.0001/2.;// conversion from tot length in um to half in cm + dchip2 = dchip2*0.0001/2.;// conversion from tot length in um to half in cm + dbus = dbus*0.0001/2.; // conversion from tot length in um to half in cm + + Float_t deltax, deltay; + + Int_t thickness = fMinorVersion/10; + Int_t option = fMinorVersion - 10*thickness; + + + // Define some variables for SDD + + + Float_t sin30, cos30; + + // SDD electronics+services main volumes + Float_t iI018dits[3], iI024dits[3], iI047dits[3], iI048dits[3]; + + // SDD detector ladder + + Float_t iI302dits[3], iI402dits[3], iI004dits[3], iI005dits[3]; + Float_t ySDDsep = 0.20; + Float_t ySDD; + Int_t iSDD; + Float_t zSDDlay3[6] = { 18.55, 10.95, 3.70, -3.70,-11.20,-18.35}; + Float_t zSDDlay4[8] = { 25.75, 18.60, 11.00, 3.70, -3.70,-11.20, + -18.45,-26.05}; + + // ladder foot and end-ladder (frame and cooling) + Float_t iI028dits[3], iI420dits[3], iI421dits[3], iI422dits[6], iI423dits[3]; + Float_t iI424dits[3], xI424, yI424; + Float_t iI425dits[3]; + Int_t indI425; + Float_t iI029dits[4], iI030dits[4], iI031dits[3], iI032dits[3]; + + // SDD ladder frame and cooling + Float_t iSDDCoolPipe[3] = {1.7000, -0.5500, 0.0000}; + Float_t iI035dits[3], iI037dits[3], iI038dits[3]; + Float_t iI039dits[3], xI039, yI039; + Float_t iI041dits[5]; + + // SDD hybrid, chips and capacitors + Float_t iI050dits[3], xI050, yI050; + Float_t iI052dits[3], xI052, yI052; + Float_t iI042dits[3], xI042, yI042; + Float_t xI042space = 0.17; + Float_t iI043dits[3], xI043, yI043; + Float_t xI043space = 0.17; + Float_t zchip, zChipSpace; + Float_t iI051dits[3], xI051, yI051, zI051, yI051space, xcap; + Int_t ichip, icap; + + // SDD microcables + Float_t iI044dits[4], xI044, yI044, volI044; + Float_t xHV, yHV, zHV, xLV, yLV, zLV; + Char_t nameHV[5], nameLV[5]; + + + // Define media off-set + + Int_t *idtmed = fIdtmed->GetArray()-199; + + + // Rotation matrices + + // SPD - option 'a' (this is NOT the default so leave commented) + + + if (option == 1) { + AliMatrix(idrotm[201],90.0,90.0,90.0,180.0,0.0,0.0); + AliMatrix(idrotm[202],90.0,90.0,90.0,0.0,0.0,0.0); + AliMatrix(idrotm[203],90.0,350.0,90.0,260.0,0.0,0.0); + AliMatrix(idrotm[204],90.0,170.0,90.0,80.0,0.0,0.0); + AliMatrix(idrotm[205],90.0,10.0,90.0,100.0,0.0,0.0); + AliMatrix(idrotm[206],90.0,190.0,90.0,280.0,0.0,0.0); + AliMatrix(idrotm[207],90.0,342.0,90.0,72.0,0.0,0.0); + AliMatrix(idrotm[208],90.0,156.999893,90.0,246.999893,0.0,0.0); + AliMatrix(idrotm[209],90.0,147.999802,90.0,237.999893,0.0,0.0); + AliMatrix(idrotm[210],90.0,138.999802,90.0,228.999802,0.0,0.0); + AliMatrix(idrotm[211],90.0,129.999802,90.0,219.999802,0.0,0.0); + AliMatrix(idrotm[212],90.0,36.7896,90.0,126.789597,0.0,0.0); + AliMatrix(idrotm[213],90.0,343.579712,90.0,73.579697,0.0,0.0); + AliMatrix(idrotm[214],90.0,95.413696,90.0,185.413696,0.0,0.0); + AliMatrix(idrotm[215],90.0,5.4141,90.0,95.414101,0.0,0.0); + AliMatrix(idrotm[216],90.0,318.296906,90.0,48.296902,0.0,0.0); + AliMatrix(idrotm[217],90.0,67.000099,90.0,157.000107,0.0,0.0); + AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0); + AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0); + AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0); + AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0); + AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0 ); + AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0); + AliMatrix(idrotm[224],90.0,296.627502,90.0,26.627399,0.0,0.0); + AliMatrix(idrotm[225],90.0,48.994099,90.0,138.994095,0.0,0.0); + AliMatrix(idrotm[226],90.0,318.990997,90.0,48.991001,0.0,0.0); + AliMatrix(idrotm[227],90.0,228.988205,90.0,318.98819,0.0,0.0); + AliMatrix(idrotm[228],90.0,287.621399,90.0,17.621401,0.0,0.0); + AliMatrix(idrotm[229],90.0,39.988098,90.0,129.988098,0.0,0.0); + AliMatrix(idrotm[230],90.0,309.984985,90.0,39.985001,0.0,0.0); + AliMatrix(idrotm[231],90.0,327.2612,90.0,57.2612,0.0,0.0); + AliMatrix(idrotm[232],90.0,237.261398,90.0,327.261414,0.0,0.0); + AliMatrix(idrotm[233],90.0,252.000504,90.0,342.000488,0.0,0.0 ); + AliMatrix(idrotm[234],90.0,71.9991,90.0,161.9991,0.0,0.0); + AliMatrix(idrotm[235],90.0,270.0,90.0,0.0,0.0,0.0); + AliMatrix(idrotm[236],90.0,180.013702,90.0,270.013702,0.0,0.0); + AliMatrix(idrotm[237],90.0,0.0,90.0,90.0,0.0,0.0); + AliMatrix(idrotm[238],90.0,144.0,90.0,234.0,0.0,0.0); + AliMatrix(idrotm[239],90.0,216.0,90.0,306.0,0.0,0.0); + AliMatrix(idrotm[240],90.0,288.0,90.0,18.0,0.0,0.0); + AliMatrix(idrotm[241],90.0,324.0,90.0,54.0,0.0,0.0); + AliMatrix(idrotm[242],90.0,36.0,90.0,126.0,0.0,0.0); + AliMatrix(idrotm[243],90.0,108.0,90.0,198.0,0.0,0.0); + AliMatrix(idrotm[244],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[245],90.0,162.0,90.0,252.0,0.0,0.0); + AliMatrix(idrotm[246],90.0,310.0,90.0,40.0,0.0,0.0); + AliMatrix(idrotm[247],90.0,319.0,90.0,49.0,0.0,0.0); + AliMatrix(idrotm[248],90.0,328.0,90.0,58.0,0.0,0.0); + AliMatrix(idrotm[249],90.0,337.0,90.0,67.0,0.0,0.0); + AliMatrix(idrotm[1003],90.0,73.5,90.0,163.5,0.0,0.0); + AliMatrix(idrotm[1011],90.0,342.0,90.0,72.0,0.0,0.0); + AliMatrix(idrotm[1039],90.0,72.0,90.0,162.0,0.0,0.0); + AliMatrix(idrotm[1043],90.0,66.91,90.0,156.91,0.0,0.0); + AliMatrix(idrotm[1065],90.0,144.0,90.0,234.0,0.0,0.0); + AliMatrix(idrotm[1078],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[1088],90.0,57.41,90.0,147.41,0.0,0.0); + AliMatrix(idrotm[1089],90.0,333.0,90.0,63.0,0.0,0.0); + AliMatrix(idrotm[1090],90.0,351.0,90.0,81.0,0.0,0.0); + AliMatrix(idrotm[1091],90.0,216.0,90.0,306.0,0.0,0.0); + AliMatrix(idrotm[1092],90.0,27.0,90.0,117.0,0.0,0.0); + AliMatrix(idrotm[1093],90.0,18.0,90.0,108.0,0.0,0.0); + AliMatrix(idrotm[1094],90.0,9.0,90.0,99.0,0.0,0.0); + AliMatrix(idrotm[1104],90.0,252.0,90.0,342.0,0.0,0.0); + AliMatrix(idrotm[1106],90.0,36.0,90.0,126.0,0.0,0.0); + AliMatrix(idrotm[1107],90.0,108.0,90.0,198.0,0.0,0.0); + AliMatrix(idrotm[1108],90.0,324.0,90.0,54.0,180.0,0.0); + AliMatrix(idrotm[1109],90.0,0.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[1110],90.0,36.0,90.0,126.0,180.0,0.0); + AliMatrix(idrotm[1111],90.0,72.0,90.0,162.0,180.0,0.0); + AliMatrix(idrotm[1112],90.0,108.0,90.0,198.0,180.0,0.0); + AliMatrix(idrotm[1113],90.0,144.0,90.0,234.0,180.0,0.0); + AliMatrix(idrotm[1114],90.0,180.0,90.0,270.0,180.0,0.0); + AliMatrix(idrotm[1115],90.0,216.0,90.0,306.0,180.0,0.0); + AliMatrix(idrotm[1116],90.0,252.0,90.0,342.0,180.0,0.0); + AliMatrix(idrotm[1117],90.0,288.0,90.0,18.0,0.0,0.0); + AliMatrix(idrotm[1118],90.0,288.0,90.0,18.0,180.0,0.0); + AliMatrix(idrotm[1130],90.0,324.0,90.0,54.0,0.0,0.0); + }// end if option == 1 + + // SPD - option 'b' (this is the default) + + if (option == 2) { + AliMatrix(idrotm[201],90.0,0.0,90.0,90.0,0.0,0.0); + AliMatrix(idrotm[202],90.0,90.0,90.0,0.0,0.0,0.0); + AliMatrix(idrotm[203],90.0,350.0,90.0,260.0,0.0,0.0); + AliMatrix(idrotm[204],90.0,170.0,90.0,80.0,0.0,0.0); + AliMatrix(idrotm[205],90.0,10.0,90.0,100.0,0.0,0.0); + AliMatrix(idrotm[206],90.0,190.0,90.0,280.0,0.0,0.0); + AliMatrix(idrotm[207],90.0,342.0,90.0,72.0,0.0,0.0); + AliMatrix(idrotm[208],90.0,156.999893,90.0,246.999893,0.0,0.0); + AliMatrix(idrotm[209],90.0,147.999802,90.0,237.999893,0.0,0.0); + AliMatrix(idrotm[210],90.0,138.999802,90.0,228.999802,0.0,0.0); + AliMatrix(idrotm[211],90.0,129.999802,90.0,219.999802,0.0,0.0); + AliMatrix(idrotm[212],90.0,36.7896,90.0,126.789597,0.0,0.0); + AliMatrix(idrotm[213],90.0,343.579712,90.0,73.579697,0.0,0.0); + AliMatrix(idrotm[214],90.0,95.413696,90.0,185.413696,0.0,0.0); + AliMatrix(idrotm[215],90.0,5.4141,90.0,95.414101,0.0,0.0); + AliMatrix(idrotm[216],90.0,318.296906,90.0,48.296902,0.0,0.0); + AliMatrix(idrotm[217],90.0,67.000099,90.0,157.000107,0.0,0.0); + AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0); + AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0); + AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0); + + AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0); + AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0); + AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0); + AliMatrix(idrotm[224],90.0,296.627502,90.0,26.627399,0.0,0.0); + AliMatrix(idrotm[225],90.0,48.994099,90.0,138.994095,0.0,0.0); + AliMatrix(idrotm[226],90.0,318.990997,90.0,48.991001,0.0,0.0); + AliMatrix(idrotm[227],90.0,228.988205,90.0,318.98819,0.0,0.0); + AliMatrix(idrotm[228],90.0,287.621399,90.0,17.621401,0.0,0.0); + AliMatrix(idrotm[229],90.0,39.988098,90.0,129.988098,0.0,0.0); + AliMatrix(idrotm[230],90.0,309.984985,90.0,39.985001,0.0,0.0); + AliMatrix(idrotm[231],90.0,327.2612,90.0,57.2612,0.0,0.0); + AliMatrix(idrotm[232],90.0,237.261398,90.0,327.261414,0.0,0.0); + AliMatrix(idrotm[233],90.0,252.000504,90.0,342.000488,0.0,0.0); + AliMatrix(idrotm[234],90.0,71.9991,90.0,161.9991,0.0,0.0); + AliMatrix(idrotm[235],90.0,270.0,90.0,0.0,0.0,0.0); + AliMatrix(idrotm[236],90.0,180.013702,90.0,270.013702,0.0,0.0); + AliMatrix(idrotm[237],90.0,90.0,90.0,180.0,0.0,0.0); + AliMatrix(idrotm[238],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[239],90.0,162.0,90.0,252.0,0.0,0.0); + AliMatrix(idrotm[240],90.0,310.0,90.0,40.0,0.0,0.0); + AliMatrix(idrotm[241],90.0,319.0,90.0,49.0,0.0,0.0); + AliMatrix(idrotm[242],90.0,328.0,90.0,58.0,0.0,0.0); + AliMatrix(idrotm[243],90.0,337.0,90.0,67.0,0.0,0.0); + AliMatrix(idrotm[244],90.0,216.0,90.0,306.0,0.0,0.0); + AliMatrix(idrotm[245],90.0,36.0,90.0,126.0,0.0,0.0); + AliMatrix(idrotm[246],90.0,108.0,90.0,198.0,0.0,0.0); + AliMatrix(idrotm[247],90.0,144.0,90.0,234.0,0.0,0.0); + AliMatrix(idrotm[248],90.0,288.0,90.0,18.0,0.0,0.0); + AliMatrix(idrotm[249],90.0,324.0,90.0,54.0,0.0,0.0); + AliMatrix(idrotm[1003],90.0,73.5,90.0,163.5,0.0,0.0); + AliMatrix(idrotm[1011],90.0,342.0,90.0,72.0,0.0,0.0); + AliMatrix(idrotm[1039],90.0,72.0,90.0,162.0,0.0,0.0); + AliMatrix(idrotm[1043],90.0,66.91,90.0,156.91,0.0,0.0); + AliMatrix(idrotm[1065],90.0,144.0,90.0,234.0,0.0,0.0); + AliMatrix(idrotm[1078],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[1088],90.0,57.41,90.0,147.41,0.0,0.0); + AliMatrix(idrotm[1089],90.0,333.0,90.0,63.0,0.0,0.0); + AliMatrix(idrotm[1090],90.0,351.0,90.0,81.0,0.0,0.0); + AliMatrix(idrotm[1091],90.0,216.0,90.0,306.0,0.0,0.0); + AliMatrix(idrotm[1092],90.0,27.0,90.0,117.0,0.0,0.0); + AliMatrix(idrotm[1093],90.0,18.0,90.0,108.0,0.0,0.0); + AliMatrix(idrotm[1094],90.0,9.0,90.0,99.0,0.0,0.0); + AliMatrix(idrotm[1104],90.0,252.0,90.0,342.0,0.0,0.0); + AliMatrix(idrotm[1106],90.0,36.0,90.0,126.0,0.0,0.0); + AliMatrix(idrotm[1107],90.0,108.0,90.0,198.0,0.0,0.0); + AliMatrix(idrotm[1108],90.0,324.0,90.0,54.0,180.0,0.0); + AliMatrix(idrotm[1109],90.0,0.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[1110],90.0,36.0,90.0,126.0,180.0,0.0); + AliMatrix(idrotm[1111],90.0,72.0,90.0,162.0,180.0,0.0); + AliMatrix(idrotm[1112],90.0,108.0,90.0,198.0,180.0,0.0); + AliMatrix(idrotm[1113],90.0,144.0,90.0,234.0,180.0,0.0); + AliMatrix(idrotm[1114],90.0,180.0,90.0,270.0,180.0,0.0); + AliMatrix(idrotm[1115],90.0,216.0,90.0,306.0,180.0,0.0); + AliMatrix(idrotm[1116],90.0,252.0,90.0,342.0,180.0,0.0); + AliMatrix(idrotm[1117],90.0,288.0,90.0,18.0,0.0,0.0); + AliMatrix(idrotm[1118],90.0,288.0,90.0,18.0,180.0,0.0); + AliMatrix(idrotm[1130],90.0,324.0,90.0,54.0,0.0,0.0); + }// end if option==2 + + // SDD + AliMatrix(idrotm[301],0.0,0.0,90.0,90.0,90.0,180.0); + AliMatrix(idrotm[302],0.0,0.0,90.0,90.0,90.0,0.0); + AliMatrix(idrotm[303],180.0,0.0,90.0,90.0,90.0,0.0); + AliMatrix(idrotm[304],180.0,0.0,90.0,90.0,90.0,180.0); + AliMatrix(idrotm[305],90.0,347.14,90.0,77.14,0.0,0.0); + AliMatrix(idrotm[306],90.0,321.43,90.0,51.43,0.0,0.0); + AliMatrix(idrotm[307],90.0,295.71,90.0,25.71,0.0,0.0); + AliMatrix(idrotm[308],90.0,244.29,90.0,334.29,0.0,0.0); + AliMatrix(idrotm[309],90.0,218.57,90.0,308.57,0.0,0.0); + AliMatrix(idrotm[310],90.0,167.14,90.0,257.14,0.0,0.0); + AliMatrix(idrotm[311],90.0,141.43,90.0,231.43,0.0,0.0); + AliMatrix(idrotm[312],90.0,0.0,0.0,0.0,90.0,270.0); + AliMatrix(idrotm[313],90.0,115.71,90.0,205.71,0.0,0.0); + AliMatrix(idrotm[314],90.0,335.45,90.0,65.45,0.0,0.0); + AliMatrix(idrotm[315],90.0,319.09,90.0,49.09,0.0,0.0); + AliMatrix(idrotm[316],90.0,302.73,90.0,32.73,0.0,0.0); + AliMatrix(idrotm[317],90.0,286.36,90.0,16.36,0.0,0.0); + AliMatrix(idrotm[318],90.0,270.0,90.0,360.0,0.0,0.0); + AliMatrix(idrotm[319],90.0,253.64,90.0,343.64,0.0,0.0); + AliMatrix(idrotm[320],90.0,237.27,90.0,327.27,0.0,0.0); + AliMatrix(idrotm[321],90.0,12.86,90.0,102.86,0.0,0.0); + AliMatrix(idrotm[322],90.0,220.91,90.0,310.91,0.0,0.0); + AliMatrix(idrotm[323],90.0,204.55,90.0,294.55,0.0,0.0); + AliMatrix(idrotm[324],90.0,188.18,90.0,278.18,0.0,0.0); + AliMatrix(idrotm[325],90.0,171.82,90.0,261.82,0.0,0.0); + AliMatrix(idrotm[326],90.0,155.45,90.0,245.45,0.0,0.0); + AliMatrix(idrotm[327],90.0,139.09,90.0,229.09,0.0,0.0); + AliMatrix(idrotm[328],90.0,122.73,90.0,212.73,0.0,0.0); + AliMatrix(idrotm[329],90.0,106.36,90.0,196.36,0.0,0.0); + AliMatrix(idrotm[330],90.0,73.64,90.0,163.64,0.0,0.0); + AliMatrix(idrotm[331],90.0,40.91,90.0,130.91,0.0,0.0); + AliMatrix(idrotm[332],90.0,24.55,90.0,114.55,0.0,0.0); + AliMatrix(idrotm[333],90.0,38.57,90.0,128.57,0.0,0.0); + AliMatrix(idrotm[334],90.0,351.82,90.0,81.82,0.0,0.0); + AliMatrix(idrotm[335],90.0,8.18,90.0,98.18,0.0,0.0); + AliMatrix(idrotm[336],90.0,64.29,90.0,154.29,0.0,0.0); + AliMatrix(idrotm[337],111.0,300.0,21.0,300.0,90.0,30.0); + AliMatrix(idrotm[338],69.0,240.0,159.0,240.0,90.0,150.0); + AliMatrix(idrotm[339],111.0,240.0,21.0,240.0,90.0,150.0); + AliMatrix(idrotm[340],69.0,300.0,159.0,300.0,90.0,30.0); + AliMatrix(idrotm[341],128.0,0.0,38.0,0.0,90.0,270.0); + AliMatrix(idrotm[342],90.0,240.0,180.0,0.0,90.0,330.); + AliMatrix(idrotm[343],90.0,120.0,180.0,0.0,90.0,210.0); + AliMatrix(idrotm[344],90.0,0.0,180.0,0.0,90.0,90.0); + AliMatrix(idrotm[345],90.0,180.0,90.0,90.0,0.0,0.0); + AliMatrix(idrotm[346],90.0,300.0,90.0,30.0,0.0,0.0); + AliMatrix(idrotm[347],90.0,240.0,90.0,150.0,0.0,0.0); + AliMatrix(idrotm[348],90.0,180.0,0.0,0.0,90.0,270.0); + AliMatrix(idrotm[349],90.0,235.0,90.0,145.0,0.0,0.0); + AliMatrix(idrotm[350],90.0,90.0,90.0,180.0,0.0,0.0); + AliMatrix(idrotm[351],90.0,305.0,90.0,35.0,0.0,0.0); + AliMatrix(idrotm[352],0.0,0.0,90.0,0.0,90.0,90.0); + AliMatrix(idrotm[353],90.0,60.0,90.0,150.0,0.0,0.0); + AliMatrix(idrotm[354],90.0,120.0,90.0,30.0,0.0,0.0); + AliMatrix(idrotm[355],90.0,180.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[356],90.0,270.0,90.0,0.0,0.0,0.0); + AliMatrix(idrotm[366],90.0,57.27,90.0,147.27,0.0,0.0); + AliMatrix(idrotm[386],90.0,192.86,90.0,282.86,0.0,0.0); + + // SSD + AliMatrix(idrotm[501],90.0,148.24,90.0,238.24,0.0,0.0); + AliMatrix(idrotm[503],90.0,137.65,90.0,227.65,0.0,0.0); + AliMatrix(idrotm[504],90.0,127.06,90.0,217.06,0.0,0.0); + AliMatrix(idrotm[505],90.0,116.47,90.0,206.47,0.0,0.0); + AliMatrix(idrotm[506],90.0,105.88,90.0,195.88,0.0,0.0); + AliMatrix(idrotm[507],90.0,95.29,90.0,185.29,0.0,0.0); + AliMatrix(idrotm[508],90.0,84.71,90.0,174.71,0.0,0.0); + AliMatrix(idrotm[509],90.0,74.12,90.0,164.12,0.0,0.0); + AliMatrix(idrotm[510],90.0,63.53,90.0,153.53,0.0,0.0); + AliMatrix(idrotm[511],90.0,52.94,90.0,142.94,0.0,0.0); + AliMatrix(idrotm[512],90.0,42.35,90.0,132.35,0.0,0.0); + AliMatrix(idrotm[513],90.0,31.76,90.0,121.76,0.0,0.0); + AliMatrix(idrotm[514],90.0,10.59,90.0,100.59,0.0,0.0); + AliMatrix(idrotm[515],90.0,349.41,90.0,79.41,0.0,0.0); + AliMatrix(idrotm[516],90.0,338.82,90.0,68.82,0.0,0.0); + AliMatrix(idrotm[517],90.0,328.24,90.0,58.24,0.0,0.0); + AliMatrix(idrotm[518],90.0,317.65,90.0,47.65,0.0,0.0); + AliMatrix(idrotm[519],90.0,307.06,90.0,37.06,0.0,0.0); + AliMatrix(idrotm[520],90.0,296.47,90.0,26.47,0.0,0.0); + AliMatrix(idrotm[521],90.0,285.88,90.0,15.88,0.0,0.0); + AliMatrix(idrotm[522],90.0,275.29,90.0,5.29,0.0,0.0); + AliMatrix(idrotm[523],90.0,264.71,90.0,354.71,0.0,0.0); + AliMatrix(idrotm[524],90.0,254.12,90.0,344.12,0.0,0.0); + AliMatrix(idrotm[525],90.0,243.53,90.0,333.53,0.0,0.0); + AliMatrix(idrotm[526],90.0,232.94,90.0,322.94,0.0,0.0); + AliMatrix(idrotm[527],90.0,222.35,90.0,312.35,0.0,0.0); + AliMatrix(idrotm[528],90.0,211.76,90.0,301.76,0.0,0.0); + AliMatrix(idrotm[529],90.0,190.59,90.0,280.59,0.0,0.0); + AliMatrix(idrotm[530],90.0,169.41,90.0,259.41,0.0,0.0); + AliMatrix(idrotm[531],90.0,158.82,90.0,248.82,0.0,0.0); + AliMatrix(idrotm[532],90.0,360.0,90.0,90.0,0.0,0.0); + AliMatrix(idrotm[533],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[534],90.0,189.47,90.0,279.47,0.0,0.0); + AliMatrix(idrotm[535],90.0,198.95,90.0,288.95,0.0,0.0); + AliMatrix(idrotm[537],90.0,217.89,90.0,307.89,0.0,0.0); + AliMatrix(idrotm[538],90.0,227.37,90.0,317.37,0.0,0.0); + AliMatrix(idrotm[539],90.0,236.84,90.0,326.84,0.0,0.0); + AliMatrix(idrotm[540],90.0,246.32,90.0,336.32,0.0,0.0); + AliMatrix(idrotm[541],90.0,255.79,90.0,345.79,0.0,0.0); + AliMatrix(idrotm[542],90.0,265.26,90.0,355.26,0.0,0.0); + AliMatrix(idrotm[543],90.0,274.74,90.0,4.74,0.0,0.0); + AliMatrix(idrotm[544],90.0,284.21,90.0,14.21,0.0,0.0); + AliMatrix(idrotm[545],90.0,293.68,90.0,23.68,0.0,0.0); + AliMatrix(idrotm[546],90.0,303.16,90.0,33.16,0.0,0.0); + AliMatrix(idrotm[547],90.0,312.63,90.0,42.63,0.0,0.0); + AliMatrix(idrotm[548],90.0,322.11,90.0,52.11,0.0,0.0); + AliMatrix(idrotm[549],90.0,331.58,90.0,61.58,0.0,0.0); + AliMatrix(idrotm[550],90.0,341.05,90.0,71.05,0.0,0.0); + AliMatrix(idrotm[551],90.0,350.53,90.0,80.53,0.0,0.0); + AliMatrix(idrotm[552],90.0,9.47,90.0,99.47,0.0,0.0); + AliMatrix(idrotm[553],90.0,18.95,90.0,108.95,0.0,0.0); + AliMatrix(idrotm[555],90.0,37.89,90.0,127.89,0.0,0.0); + AliMatrix(idrotm[556],90.0,47.37,90.0,137.37,0.0,0.0); + AliMatrix(idrotm[557],90.0,56.84,90.0,146.84,0.0,0.0); + AliMatrix(idrotm[558],90.0,66.32,90.0,156.32,0.0,0.0); + AliMatrix(idrotm[559],90.0,75.79,90.0,165.79,0.0,0.0); + AliMatrix(idrotm[560],90.0,85.26,90.0,175.26,0.0,0.0); + AliMatrix(idrotm[561],90.0,94.74,90.0,184.74,0.0,0.0); + AliMatrix(idrotm[562],90.0,104.21,90.0,194.21,0.0,0.0); + AliMatrix(idrotm[563],90.0,113.68,90.0,203.68,0.0,0.0); + AliMatrix(idrotm[564],90.0,123.16,90.0,213.16,0.0,0.0); + AliMatrix(idrotm[565],90.0,132.63,90.0,222.63,0.0,0.0); + AliMatrix(idrotm[566],90.0,142.11,90.0,232.11,0.0,0.0); + AliMatrix(idrotm[567],90.0,151.58,90.0,241.58,0.0,0.0); + AliMatrix(idrotm[568],90.0,161.05,90.0,251.05,0.0,0.0); + AliMatrix(idrotm[569],90.0,170.53,90.0,260.53,0.0,0.0); + AliMatrix(idrotm[570],90.0,180.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[571],90.0,0.0,0.0,0.0,90.0,270.0); + AliMatrix(idrotm[572],90.0,180.0,0.0,0.0,90.0,270.0); + AliMatrix(idrotm[573],90.0,180.0,90.0,90.0,0.0,0.0); + AliMatrix(idrotm[575],90.0,120.0,180.0,0.0,90.0,210.0); + AliMatrix(idrotm[576],65.71,300.0,90.0,30.0,24.29,120.0); + AliMatrix(idrotm[577],114.29,300.0,90.0,30.0,155.71,120.0); + AliMatrix(idrotm[579],65.71,240.0,90.0,150.0,24.29,60.0); + AliMatrix(idrotm[580],114.29,240.0,90.0,150.0,155.71,60.0); + AliMatrix(idrotm[581],90.0,240.0,180.0,0.0,90.0,330.0); + AliMatrix(idrotm[583],90.0,0.0,180.0,0.0,90.0,90.0); + AliMatrix(idrotm[584],90.0,180.0,180.0,0.0,90.0,90.0); + AliMatrix(idrotm[586],180.0,0.0,90.0,90.0,90.0,0.0); + AliMatrix(idrotm[618],90.0,201.18,90.0,291.18,0.0,0.0); + AliMatrix(idrotm[620],90.0,28.42,90.0,118.42,0.0,0.0); + AliMatrix(idrotm[623],90.0,208.42,90.0,298.42,0.0,0.0); + AliMatrix(idrotm[633],132.46,0.0,90.0,90.0,42.46,360.0); + AliMatrix(idrotm[653],90.0,21.18,90.0,111.18,0.0,0.0); + + // SDD cone + AliMatrix(idrotm[846],90.0,300.0,90.0,30.0,0.0,0.0); + AliMatrix(idrotm[851],90.0,305.0,90.0,35.0,0.0,0.0); + AliMatrix(idrotm[853],90.0,60.0,90.0,150.0,0.0,0.0); + AliMatrix(idrotm[856],90.0,0.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[857],90.0,5.0,90.0,95.0,180.0,0.0); + AliMatrix(idrotm[858],90.0,65.0,90.0,155.0,180.0,0.0); + AliMatrix(idrotm[859],90.0,305.0,90.0,35.0,180.0,0.0); + AliMatrix(idrotm[860],90.0,245.0,90.0,335.0,180.0,0.0); + AliMatrix(idrotm[861],90.0,185.0,90.0,275.0,180.0,0.0); + AliMatrix(idrotm[862],90.0,125.0,90.0,215.0,180.0,0.0); + AliMatrix(idrotm[863],90.0,257.5,90.0,347.5,180.0,0.0); + AliMatrix(idrotm[864],90.0,227.5,90.0,317.5,180.0,0.0); + AliMatrix(idrotm[865],90.0,197.5,90.0,287.5,180.0,0.0); + AliMatrix(idrotm[867],90.0,167.5,90.0,257.5,180.0,0.0); + AliMatrix(idrotm[868],90.0,287.5,90.0,17.5,0.0,0.0); + AliMatrix(idrotm[869],90.0,137.5,90.0,227.5,180.0,0.0); + AliMatrix(idrotm[870],90.0,107.5,90.0,197.5,180.0,0.0); + AliMatrix(idrotm[871],90.0,77.5,90.0,167.5,180.0,0.0); + AliMatrix(idrotm[872],90.0,47.5,90.0,137.5,180.0,0.0); + AliMatrix(idrotm[873],90.0,17.5,90.0,107.5,180.0,0.0); + AliMatrix(idrotm[874],90.0,347.5,90.0,77.5,180.0,0.0); + AliMatrix(idrotm[875],90.0,317.5,90.0,47.5,180.0,0.0); + AliMatrix(idrotm[876],90.0,287.5,90.0,17.5,180.0,0.0); + AliMatrix(idrotm[877],90.0,185.0,90.0,275.0,0.0,0.0); + AliMatrix(idrotm[878],90.0,180.0,90.0,270.0,0.0,0.0); + AliMatrix(idrotm[879],90.0,125.0,90.0,215.0,0.0,0.0); + AliMatrix(idrotm[880],90.0,65.0,90.0,155.0,0.0,0.0); + AliMatrix(idrotm[881],90.0,5.0,90.0,95.0,0.0,0.0); + AliMatrix(idrotm[882],90.0,245.0,90.0,335.0,0.0,0.0); + AliMatrix(idrotm[883],90.0,47.5,90.0,137.5,0.0,0.0); + AliMatrix(idrotm[884],90.0,77.5,90.0,167.5,0.0,0.0); + AliMatrix(idrotm[885],90.0,107.5,90.0,197.5,0.0,0.0); + AliMatrix(idrotm[887],90.0,137.5,90.0,227.5,0.0,0.0); + AliMatrix(idrotm[888],90.0,167.5,90.0,257.5,0.0,0.0); + AliMatrix(idrotm[889],90.0,197.5,90.0,287.5,0.0,0.0); + AliMatrix(idrotm[890],90.0,227.5,90.0,317.5,0.0,0.0); + AliMatrix(idrotm[891],90.0,347.5,90.0,77.5,0.0,0.0); + AliMatrix(idrotm[892],90.0,317.5,90.0,47.5,0.0,0.0); + AliMatrix(idrotm[893],90.0,257.5,90.0,347.5,0.0,0.0); + AliMatrix(idrotm[894],90.0,270.0,0.0,0.0,90.0,180.0); + AliMatrix(idrotm[895],90.0,286.36,0.0,0.0,90.0,196.36); + AliMatrix(idrotm[896],90.0,302.73,0.0,0.0,90.0,212.73); + AliMatrix(idrotm[897],90.0,319.09,0.0,0.0,90.0,229.09); + AliMatrix(idrotm[898],90.0,17.5,90.0,107.5,0.0,0.0); + AliMatrix(idrotm[899],90.0,335.45,0.0,0.0,90.0,245.45); + AliMatrix(idrotm[900],90.0,351.82,0.0,0.0,90.0,261.82); + AliMatrix(idrotm[901],90.0,8.18,0.0,0.0,90.0,278.18); + AliMatrix(idrotm[902],90.0,24.55,0.0,0.0,90.0,294.55); + AliMatrix(idrotm[903],90.0,40.91,0.0,0.0,90.0,310.91); + AliMatrix(idrotm[904],90.0,57.27,0.0,0.0,90.0,327.27); + AliMatrix(idrotm[905],90.0,73.64,0.0,0.0,90.0,343.64); + AliMatrix(idrotm[906],90.0,90.0,0.0,0.0,90.0,360.0); + AliMatrix(idrotm[907],90.0,106.36,0.0,0.0,90.0,16.36); + AliMatrix(idrotm[908],90.0,122.73,0.0,0.0,90.0,32.73); + AliMatrix(idrotm[909],90.0,139.09,0.0,0.0,90.0,49.09); + AliMatrix(idrotm[910],90.0,155.45,0.0,0.0,90.0,65.45); + AliMatrix(idrotm[911],90.0,171.82,0.0,0.0,90.0,81.82); + AliMatrix(idrotm[912],90.0,188.18,0.0,0.0,90.0,98.18); + AliMatrix(idrotm[913],90.0,204.55,0.0,0.0,90.0,114.55); + AliMatrix(idrotm[914],90.0,220.91,0.0,0.0,90.0,130.91); + AliMatrix(idrotm[915],90.0,237.27,0.0,0.0,90.0,147.27); + AliMatrix(idrotm[916],90.0,253.64,0.0,0.0,90.0,163.64); + AliMatrix(idrotm[917],90.0,295.71,0.0,0.0,90.0,205.71); + AliMatrix(idrotm[918],90.0,321.43,0.0,0.0,90.0,231.43); + AliMatrix(idrotm[919],90.0,347.14,0.0,0.0,90.0,257.14); + AliMatrix(idrotm[920],90.0,12.86,0.0,0.0,90.0,282.86); + AliMatrix(idrotm[921],90.0,38.57,0.0,0.0,90.0,308.57); + AliMatrix(idrotm[922],90.0,64.29,0.0,0.0,90.0,334.29); + AliMatrix(idrotm[923],90.0,115.71,0.0,0.0,90.0,25.71); + AliMatrix(idrotm[924],90.0,141.43,0.0,0.0,90.0,51.43); + AliMatrix(idrotm[925],90.0,167.14,0.0,0.0,90.0,77.14); + AliMatrix(idrotm[926],90.0,192.86,0.0,0.0,90.0,102.86); + AliMatrix(idrotm[927],90.0,218.57,0.0,0.0,90.0,128.57); + AliMatrix(idrotm[928],90.0,244.29,0.0,0.0,90.0,154.29); + AliMatrix(idrotm[929],90.0,120.0,90.0,210.0,0.0,0.0); + AliMatrix(idrotm[930],90.0,240.0,90.0,330.0,0.0,0.0); + AliMatrix(idrotm[931],90.0,60.0,90.0,150.0,180.0,0.0); + AliMatrix(idrotm[932],90.0,120.0,90.0,210.0,180.0,0.0); + AliMatrix(idrotm[933],90.0,180.0,90.0,270.0,180.0,0.0); + AliMatrix(idrotm[934],90.0,240.0,90.0,330.0,180.0,0.0); + AliMatrix(idrotm[935],90.0,300.0,90.0,30.0,180.0,0.0); + + // SSD cone + AliMatrix(idrotm[701],90.0,0.0,90.0,90.0,180.0,0.0); + AliMatrix(idrotm[702],90.0,347.5,90.0,77.5,180.0,0.0); + AliMatrix(idrotm[703],90.0,17.5,90.0,107.5,180.0,0.0); + AliMatrix(idrotm[704],90.0,47.5,90.0,137.5,180.0,0.0); + AliMatrix(idrotm[705],90.0,77.5,90.0,167.5,180.0,0.0); + AliMatrix(idrotm[706],90.0,107.5,90.0,197.5,180.0,0.0); + AliMatrix(idrotm[707],90.0,137.5,90.0,227.5,180.0,0.0); + AliMatrix(idrotm[708],90.0,167.5,90.0,257.5,180.0,0.0); + AliMatrix(idrotm[709],90.0,197.5,90.0,287.5,180.0,0.0); + AliMatrix(idrotm[710],90.0,227.5,90.0,317.5,180.0,0.0); + AliMatrix(idrotm[711],90.0,257.5,90.0,347.5,180.0,0.0); + AliMatrix(idrotm[712],90.0,287.5,90.0,17.5,180.0,0.0); + AliMatrix(idrotm[713],90.0,317.5,90.0,47.5,180.0,0.0); + AliMatrix(idrotm[714],90.0,328.4,90.0,58.4,180.0,0.0); + AliMatrix(idrotm[715],90.0,28.4,90.0,118.4,180.0,0.0); + AliMatrix(idrotm[716],90.0,88.4,90.0,178.4,180.0,0.0); + AliMatrix(idrotm[717],90.0,148.4,90.0,238.4,180.0,0.0); + AliMatrix(idrotm[718],90.0,208.4,90.0,298.4,180.0,0.0); + AliMatrix(idrotm[719],90.0,268.4,90.0,358.4,180.0,0.0); + AliMatrix(idrotm[720],90.0,28.4,90.0,118.4,0.0,0.0); + AliMatrix(idrotm[721],90.0,88.4,90.0,178.4,0.0,0.0); + AliMatrix(idrotm[722],90.0,148.4,90.0,238.4,0.0,0.0); + AliMatrix(idrotm[723],90.0,208.4,90.0,298.4,0.0,0.0); + AliMatrix(idrotm[724],90.0,268.4,90.0,358.4,0.0,0.0); + AliMatrix(idrotm[725],90.0,328.4,90.0,58.4,0.0,0.0); + AliMatrix(idrotm[726],90.0,77.5,90.0,167.5,0.0,0.0); + AliMatrix(idrotm[727],90.0,107.5,90.0,197.5,0.0,0.0); + AliMatrix(idrotm[728],90.0,137.5,90.0,227.5,0.0,0.0); + AliMatrix(idrotm[729],90.0,167.5,90.0,257.5,0.0,0.0); + AliMatrix(idrotm[730],90.0,227.5,90.0,317.5,0.0,0.0); + AliMatrix(idrotm[731],90.0,257.5,90.0,347.5,0.0,0.0); + AliMatrix(idrotm[732],90.0,317.5,90.0,47.5,0.0,0.0); + AliMatrix(idrotm[733],90.0,197.5,90.0,287.5,0.0,0.0); + AliMatrix(idrotm[734],90.0,347.5,90.0,77.5,0.0,0.0); + AliMatrix(idrotm[735],90.0,47.5,90.0,137.5,0.0,0.0); + AliMatrix(idrotm[768],90.0,287.5,90.0,17.5,0.0,0.0); + AliMatrix(idrotm[798],90.0,17.5,90.0,107.5,0.0,0.0); + + // Services + AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.); + + // New reference frame: z---> -z; x ---> -x; y ---> y + AliMatrix(idrotm[199], 90.,180., 90.,90., 180.,0.); + + // CONVERT INTO CM (RL(SI)=9.36 CM) + for (i = 0; i < 6; ++i) { + drl[i] = drl[i] / 100. * 9.36; + } // end for i + + // FIELD CAGE HALF LENGTH + rlim = 50.; + zmax = 74.; + ztpc = 284.; + // --- Define ghost volume containing the whole ITS (including services) + // and fill it with air + +// dgh[0] = 0.; +// dgh[1] = 360.; +// dgh[2] = 16.; +// dgh[3] = -ztpc-5.-0.1; +// dgh[4] = 46; +// dgh[5] = 85.; +// dgh[6] = -ztpc; +// dgh[7] = 46; +// dgh[8] = 85.; +// dgh[9] = -ztpc; +// dgh[10] = 46; +// dgh[11] = rlim+7.5; +// dgh[12] = -97.5; +// dgh[13] = 46; +// dgh[14] = rlim+7.5; +// dgh[15] = -zmax; +// dgh[16] = 46; +// dgh[17] = rlim+7.5; +// dgh[18] = -48; +// dgh[19] = 6; +// dgh[20] = rlim+7.5; +// dgh[21] = -28.6; +// dgh[22] = 6; +// dgh[23] = rlim+7.5; +// dgh[24] = -27.6; +// dgh[25] = 3.295; +// dgh[26] = rlim+7.5; +// dgh[27] = 27.6; +// dgh[28] = 3.295; +// dgh[29] = rlim+7.5; +// dgh[30] = 28.6; +// dgh[31] = 6; +// dgh[32] = rlim+7.5; +// dgh[33] = 48; +// dgh[34] = 6; +// dgh[35] = rlim+7.5; +// dgh[36] = zmax; +// dgh[37] = 46; +// dgh[38] = rlim+7.5; +// dgh[39] = 97.5; +// dgh[40] = 46; +// dgh[41] = rlim+7.5; +// dgh[42] = ztpc; +// dgh[43] = 62; +// dgh[44] = 62+4.; +// dgh[45] = ztpc; +// dgh[46] = 62; +// dgh[47] = 85.; +// dgh[48] = ztpc+4.+0.1; +// dgh[49] = 62.0;//62.4; +// dgh[50] = 85.; +// gMC->Gsvolu("ITSV", "PCON", idtmed[205], dgh, 51); + TGeoVolumeAssembly *itsV = gGeoManager->MakeVolumeAssembly("ITSV"); + const Int_t length=100; + Char_t vstrng[length]; + if(fIgm.WriteVersionString(vstrng,length,(AliITSVersion_t)IsVersion(), + fMinorVersion,cvsDate,cvsRevision)) + itsV->SetTitle(vstrng); + + // --- Place the ghost volume in its mother volume (ALIC) and make it + // invisible + // gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., idrotm[199], "MANY"); + TGeoVolume *alic = gGeoManager->GetVolume("ALIC"); + if(alic==0) { + Error("CreateGeometry","alic=0"); + return; + } // end if + // See idrotm[199] for angle definitions. + alic->AddNode(itsV,1,new TGeoRotation("", 90.,180., 90.,90., 180.,0.)); + + // --- Define ghost volume containing the six layers and fill it with air + + dgh[0] = 0.; + dgh[1] = 360.; + dgh[2] = 8.; + dgh[3] = -zmax; + dgh[4] = 46.; + dgh[5] = rlim; + dgh[6] = -47.5; + dgh[7] = 6.005; + dgh[8] = rlim; + dgh[9] = -28.5; + dgh[10] = 6.005; + dgh[11] = rlim; + dgh[12] = -27.5; + dgh[13] = 3.3; + dgh[14] = rlim; + dgh[15] = 27.5; + dgh[16] = 3.3; + dgh[17] = rlim; + dgh[18] = 28.5; + dgh[19] = 6.005; + dgh[20] = rlim; + dgh[21] = 47.5; + dgh[22] = 6.005; + dgh[23] = rlim; + dgh[24] = zmax; + dgh[25] = 46.; + dgh[26] = rlim; + gMC->Gsvolu("ITSD", "PCON", idtmed[205], dgh, 27); + + // --- Place the ghost volume in its mother volume (ITSV) and make it + // invisible + gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY"); + //gMC->Gsatt("ITSD", "SEEN", 0); + + // --- Define SPD (option 'a') volumes ---------------------------- + // SPD - option 'a' + // (this is NOT the default) + if (option == 1) { + dits[0] = 3.7; + dits[1] = 7.75; + dits[2] = 26.1; + gMC->Gsvolu("IT12", "TUBE", idtmed[254], dits, 3); + + dits[0] = 3.7; + dits[1] = 7.7; + dits[2] = 24; + dits[3] = 57; + dits[4] = 100; + gMC->Gsvolu("I12A", "TUBS", idtmed[254], dits, 5); // sector + + di10a[0] = 0.843; + di10a[1] = ddet1+dchip1+dbus+0.0025; + di10a[2] = 19.344; + gMC->Gsvolu("I10A", "BOX ", idtmed[254], di10a, 3); // mother volume + // on layer 1 + di20a[0] = 0.843; + di20a[1] = ddet2+dchip2+dbus+0.0025; + di20a[2] = 19.344; + gMC->Gsvolu("I20A", "BOX ", idtmed[254], di20a, 3); // mother volume + // on layer 2 + dits[0] = 1.3673; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I123", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.06; + dits[1] = 0.08; + dits[2] = 24; + dits[3] = -36.79; + dits[4] = 21.834; + gMC->Gsvolu("I121", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.1253; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I122", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.04; + dits[1] = 0.06 ; + dits[2] = 24; + dits[3] = 126.79; + dits[4] = 270; + gMC->Gsvolu("I120", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.1134; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I144", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.25; + dits[1] = 0.06; + dits[2] = 24; + gMC->Gsvolu("I113", "BOX ", idtmed[254], dits, 3); + + dits[0] = 0.077; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I143", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.04; + dits[1] = 0.06; + dits[2] = 24; + dits[3] = 0; + dits[4] = 90; + gMC->Gsvolu("I142", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.0695; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I141", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.06; + dits[1] = 0.08; + dits[2] = 24; + dits[3] = 0; + dits[4] = 108; + gMC->Gsvolu("I140", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.1835; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I139", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.1894 ; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I138", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.04; + dits[1] = 0.06; + dits[2] = 24; + dits[3] = 0; + dits[4] = 75.261; + gMC->Gsvolu("I137", "TUBS", idtmed[253], dits, 5); + + + dits[0] = 1.3401; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I136", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.05; + dits[1] = 0.07; + dits[2] = 24; + dits[3] = 0; + dits[4] = 72.739; + gMC->Gsvolu("I135", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.1193; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I134", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.163; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I133", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.04; + dits[1] = 0.06; + dits[2] = 24; + dits[3] = 0; + dits[4] = 157.633; + gMC->Gsvolu("I132", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.2497; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I131", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.06; + dits[1] = 0.08; + dits[2] = 24; + dits[3] = 0; + dits[4] = 148.633; + gMC->Gsvolu("I130", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.292; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I129", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.163; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I128", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.04; + dits[1] = 0.06; + dits[2] = 24; + dits[3] = 0; + dits[4] = 161.297; + gMC->Gsvolu("I126", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.2433; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I125", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.06; + dits[1] = 0.08; + dits[2] = 24; + dits[3] = 0; + dits[4] = 42.883; + gMC->Gsvolu("I124", "TUBS", idtmed[253], dits, 5); + + di103[0] = 0.793; + di103[1] = ddet1+dchip1; + di103[2] = 3.536; + gMC->Gsvolu("I103", "BOX ", idtmed[254], di103, 3); // contains det + // and chip layer 1 + dits[0] = 0.793; + dits[1] = ddet1+dchip1+dbus+0.0025; + dits[2] = 2.5; + gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3);// end-ladder electr. + + di104[0] = 0.843; + di104[1] = dbus; + di104[2] = 14.344; + gMC->Gsvolu("I104", "BOX ", idtmed[275], di104, 3);// bus for both + // layers + + di1d3[0] = 0.793; + di1d3[1] = ddet2+dchip2; + di1d3[2] = 3.536; + gMC->Gsvolu("I1D3", "BOX ", idtmed[254], di1d3, 3); // contains det + // and chip layer 2 + dits[0] = 0.793; + dits[0] = 0.06; + dits[1] = 0.08; + dits[2] = 24; + dits[3] = 0; + dits[4] = 80; + gMC->Gsvolu("I112", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.04; + dits[1] = 0.06; + dits[2] = 24; + dits[3] = 0; + dits[4] = 80; + gMC->Gsvolu("I111", "TUBS", idtmed[253], dits, 5); + + dits[0] = 0.15; + dits[1] = 0.0146; + dits[2] = 24; + gMC->Gsvolu("I118", "BOX ", idtmed[273], dits, 3); + + dits[0] = 0.1315; + dits[1] = 0.01; + dits[2] = 24; + gMC->Gsvolu("I110", "BOX ", idtmed[253], dits, 3); + + dits[0] = 0.025; + dits[1] = 0.035; + dits[2] = 24; + dits[3] = 0; + dits[4] = 180; + gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5); + + dits[0] = 0; + dits[1] = 0.025; + dits[2] = 24; + dits[3] = 0; + dits[4] = 180; + gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set freon + // as cooling + // fluid + dits[0] = 0.063; + dits[1] = 0.035; + dits[2] = 24; + gMC->Gsvolu("I116", "BOX ", idtmed[264], dits, 3); + + di102[0] = 0.793; + di102[1] = dchip1; + di102[2] = 0.68; + gMC->Gsvolu("I102", "BOX ", idtmed[201], di102, 3); // chip layer 1 + + di1d2[0] = 0.793; + di1d2[1] = dchip2; + di1d2[2] = 0.68; + gMC->Gsvolu("I1D2", "BOX ", idtmed[201], di1d2, 3); // chip layer 2 + + di101[0] = 0.705; + di101[1] = ddet1; + di101[2] = 3.536; + gMC->Gsvolu("I101", "BOX ", idtmed[250], di101, 3);// contains detector + // layer 1 + di1d1[0] = 0.705; + di1d1[1] = ddet2; + di1d1[2] = 3.536; + gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3);// contains detector + // layer 2 + dits[0] = 0.063; + dits[1] = 0.025; + dits[2] = 24; + gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set freon + // as cooling + // fluid + + dits1[0] = 0.64; + dits1[1] = ddet1; + dits1[2] = 3.48; + gMC->Gsvolu("ITS1", "BOX ", idtmed[200], dits1, 3);// detector layer 1 + + dits2[0] = 0.64; + dits2[1] = ddet2; + dits2[2] = 3.48; + gMC->Gsvolu("ITS2", "BOX ", idtmed[200], dits2, 3);// detector layer 2 + + dits[0] = 3.701; + dits[1] = 7.699; + dits[2] = 4; + dits[3] = 57.1; + dits[4] = 99.9; + gMC->Gsvolu("I650", "TUBS", idtmed[254], dits, 5);// was I150 in old + // geom. + + dits[0] = 3.7; + dits[1] = 7.75; + dits[2] = 0.05; + gMC->Gsvolu("I651", "TUBE", idtmed[296], dits, 3); // services disk + //Begin_Html + /* + + +
+ +

SPD services volume cone with other forward detectors. Shown in + brown are a posible cabling layout. + + */ + //End_Html + dits[0] = 0; + dits[1] = 0.5; + dits[2] = 1.5; + gMC->Gsvolu("I676", "TUBE", idtmed[274], dits, 3); // was I176 in + // old geom. + + dits[0] = 0; + dits[1] = 0.18; + dits[2] = 0.8; + gMC->Gsvolu("I673", "TUBE", idtmed[274], dits, 3); // was I173 in + // old geom. + + dits[0] = 0; + dits[1] = 0.18; + dits[2] = 3; + gMC->Gsvolu("I671", "TUBE", idtmed[274], dits, 3); // was I171 in + // old geom. + + dits[0] = 0; + dits[1] = 0.075; + dits[2] = 0.8; + gMC->Gsvolu("I669", "TUBE", idtmed[264], dits, 3); // was I169 in + // old geom. + + dits[0] = 3.5; + dits[1] = 5.6; + dits[2] = 0.55; + dits[3] = 0; + dits[4] = 38; + gMC->Gsvolu("I667", "TUBS", idtmed[263], dits, 5); // was I167 in old geom. dits[0] = 6.6; dits[1] = 7.6; dits[2] = 0.5; dits[3] = 0; dits[4] = 9; - gMC->Gsvolu("I666", "TUBS", idtmed[263], dits, 5); // was I166 in old geom. + gMC->Gsvolu("I666", "TUBS", idtmed[263], dits, 5); // was I166 in old geom dits[0] = 0.26; dits[1] = 0.32; dits[2] = 0.55; - gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom. + gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom + - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I177 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I177 in old geom. - } + dits[0] = 0; + dits[1] = 0.3; + dits[2] = 1.5; + gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I177 in old geom. + dits[0] = 0.07; dits[1] = 0.125; dits[2] = 0.3; - gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom. + gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I174 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I174 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 0.8; + gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I174 in old geom. + + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 3; + gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I172 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I172 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I172 in old geom. - } + + dits[0] = 0; + dits[1] = 0.0746; + dits[2] = 0.8; + gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); // set freon as cooling fluid + // was I170 in old geom. + - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid - // was I170 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid - // was I170 in old geom. - } + dits[0] = 3.7; + dits[1] = 5.4; + dits[2] = 0.35; + dits[3] = 2; + dits[4] = 36; + gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); // set freon as cooling fluid + // was I168 in old geom. - if (fluid == 1) { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); // set water as cooling fluid - // was I168 in old geom. - } else { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[212], dits, 5); // set freon as cooling fluid - // was I168 in old geom. - } - } + } // --- Define SPD (option 'b') volumes ---------------------------- @@ -1580,7 +2090,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I124", "TUBS", idtmed[253], dits, 5); dits[0] = 0.793; - dits[1] = 0.475 ; //0.685; 0.015 + dits[1] = ddet1+dchip1+dbus+0.0025; dits[2] = 2.5; gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3); @@ -1635,21 +2145,13 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[4] = 180; gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5); - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set water as cooling fluid - } else { - dits[0] = 0; - dits[1] = 0.025; - dits[2] = 24; - dits[3] = 0; - dits[4] = 180; - gMC->Gsvolu("I115", "TUBS", idtmed[212], dits, 5); // set freon as cooling fluid - } + dits[0] = 0; + dits[1] = 0.025; + dits[2] = 24; + dits[3] = 0; + dits[4] = 180; + gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set freon as cooling fluid + dits[0] = 0.063; dits[1] = 0.035; @@ -1669,25 +2171,20 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ di101[0] = 0.705; di101[1] = ddet1; di101[2] = 3.536; - gMC->Gsvolu("I101", "BOX ", idtmed[250], di101, 3); // contains detector + gMC->Gsvolu("I101", "BOX ", idtmed[250], di101, 3); // contains detector // layer 1 di1d1[0] = 0.705; di1d1[1] = ddet2; di1d1[2] = 3.536; - gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3); // contains detector + gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3); // contains detector // layer 2 - if (fluid == 1) { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set water as cooling fluid - } else { - dits[0] = 0.063; - dits[1] = 0.025; - dits[2] = 24; - gMC->Gsvolu("I117", "BOX ", idtmed[212], dits, 3); // set freon as cooling fluid - } + + dits[0] = 0.063; + dits[1] = 0.025; + dits[2] = 24; + gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set freon as cooling fluid + dits1[0] = 0.64; dits1[1] = ddet1; @@ -1750,84 +2247,47 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[2] = 0.55; gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I177 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.3; - dits[2] = 1.5; - gMC->Gsvolu("I677", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I177 in old geom. - } - + dits[0] = 0; + dits[1] = 0.3; + dits[2] = 1.5; + gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I177 in old geom. + dits[0] = 0.07; dits[1] = 0.125; dits[2] = 0.3; gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I174 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 0.8; - gMC->Gsvolu("I674", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I174 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 0.8; + gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I174 in old geom. - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I172 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.1; - dits[2] = 3; - gMC->Gsvolu("I672", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I172 in old geom. - } - if (fluid == 1) { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); //set water as cooling fluid - // was I170 in old geom. - } else { - dits[0] = 0; - dits[1] = 0.0746; - dits[2] = 0.8; - gMC->Gsvolu("I670", "TUBE", idtmed[212], dits, 3); //set freon as cooling fluid - // was I170 in old geom. - } + + dits[0] = 0; + dits[1] = 0.1; + dits[2] = 3; + gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I172 in old geom. + + + dits[0] = 0; + dits[1] = 0.0746; + dits[2] = 0.8; + gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid + // was I170 in old geom. + + dits[0] = 3.7; + dits[1] = 5.4; + dits[2] = 0.35; + dits[3] = 2; + dits[4] = 36; + gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); //set freon as cooling fluid + // was I168 in old geom. - if (fluid == 1) { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); //set water as cooling fluid - // was I168 in old geom. - } else { - dits[0] = 3.7; - dits[1] = 5.4; - dits[2] = 0.35; - dits[3] = 2; - dits[4] = 36; - gMC->Gsvolu("I668", "TUBS", idtmed[212], dits, 5); //set freon as cooling fluid - // was I168 in old geom. - } } @@ -1838,183 +2298,183 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ cos30 = cos(30.*3.14159/180.); sin30 = sin(30.*3.14159/180.); - + Double_t maxRadius = 28.5; dits[0] = 0; dits[1] = 360; dits[2] = 6; dits[3] = -34.6; dits[4] = 23.49; - dits[5] = 28; - dits[6] = -23.65; + dits[5] = maxRadius; + dits[6] = -27.35; dits[7] = 23.49; - dits[8] = 28; - dits[9] = -23.65; + dits[8] = maxRadius; + dits[9] = -27.35; dits[10] = 14.59; - dits[11] = 28; - dits[12] = 23.65; + dits[11] = maxRadius; + dits[12] = 27.35; dits[13] = 14.59; - dits[14] = 28; - dits[15] = 23.65; + dits[14] = maxRadius; + dits[15] = 27.35; dits[16] = 23.49; - dits[17] = 28; + dits[17] = maxRadius; dits[18] = 34.6; dits[19] = 23.49; - dits[20] = 28; + dits[20] = maxRadius; gMC->Gsvolu("IT34", "PCON", idtmed[209], dits, 21); // block of the SDD electronics and related ladder frame - I018dits[0] = 3.2; - I018dits[1] = 2; - I018dits[2] = 3.65; - gMC->Gsvolu("I018", "BOX ", idtmed[209], I018dits, 3); + iI018dits[0] = 3.2; + iI018dits[1] = 2; + iI018dits[2] = 3.65; + gMC->Gsvolu("I018", "BOX ", idtmed[209], iI018dits, 3); // block of the SDD end ladder - I024dits[0] = 3.2; - I024dits[1] = 2; - I024dits[2] = 2.725; - gMC->Gsvolu("I024", "BOX ", idtmed[209], I024dits, 3); + iI024dits[0] = 3.2; + iI024dits[1] = 2; + iI024dits[2] = 2.725; + gMC->Gsvolu("I024", "BOX ", idtmed[209], iI024dits, 3); // ladder frame of layer 3 - F.T. March,7-2001 - I047dits[0] = I018dits[0]; - I047dits[1] = I018dits[1]; - I047dits[2] = 6*I018dits[2] + 2*I024dits[2]; - gMC->Gsvolu("I047", "BOX ", idtmed[209], I047dits, 3); + iI047dits[0] = iI018dits[0]; + iI047dits[1] = iI018dits[1]; + iI047dits[2] = 6*iI018dits[2] + 2*iI024dits[2]; + gMC->Gsvolu("I047", "BOX ", idtmed[209], iI047dits, 3); // ladder frame of layer 4 - F.T. March,7-2001 - I048dits[0] = I018dits[0]; - I048dits[1] = I018dits[1]; - I048dits[2] = 8*I018dits[2] + 2*I024dits[2]; - gMC->Gsvolu("I048", "BOX ", idtmed[209], I048dits, 3); + iI048dits[0] = iI018dits[0]; + iI048dits[1] = iI018dits[1]; + iI048dits[2] = 8*iI018dits[2] + 2*iI024dits[2]; + gMC->Gsvolu("I048", "BOX ", idtmed[209], iI048dits, 3); // global SDD volume (sensitive + insensitive) - I302dits[0] = 3.6250; - I302dits[1] = 0.0150; - I302dits[2] = 4.3794; - gMC->Gsvolu("I302", "BOX ", idtmed[278], I302dits, 3); + iI302dits[0] = 3.6250; + iI302dits[1] = 0.0150; + iI302dits[2] = 4.3794; + gMC->Gsvolu("I302", "BOX ", idtmed[278], iI302dits, 3); // Like for I302 - F.T. March,7-2001 - I402dits[0] = 3.6250; - I402dits[1] = 0.0150; - I402dits[2] = 4.3794; - gMC->Gsvolu("I402", "BOX ", idtmed[278], I402dits, 3); + iI402dits[0] = 3.6250; + iI402dits[1] = 0.0150; + iI402dits[2] = 4.3794; + gMC->Gsvolu("I402", "BOX ", idtmed[278], iI402dits, 3); // SDD ladder of layer 3 - F.T. March,7-2001 - I004dits[0] = I302dits[0]+0.005; - I004dits[1] = 2*I302dits[1]+Y_SDD_sep/2.; - I004dits[2] = TMath::Abs(Z_SDD_lay3[0]); - if (I004dits[2] < TMath::Abs(Z_SDD_lay3[5])) { - I004dits[2] = TMath::Abs(Z_SDD_lay3[5]); + iI004dits[0] = iI302dits[0]+0.005; + iI004dits[1] = 2*iI302dits[1]+ySDDsep/2.; + iI004dits[2] = TMath::Abs(zSDDlay3[0]); + if (iI004dits[2] < TMath::Abs(zSDDlay3[5])) { + iI004dits[2] = TMath::Abs(zSDDlay3[5]); } - I004dits[2] = I004dits[2] + I302dits[2]; - gMC->Gsvolu("I004", "BOX ", idtmed[209], I004dits, 3); + iI004dits[2] = iI004dits[2] + iI302dits[2]; + gMC->Gsvolu("I004", "BOX ", idtmed[209], iI004dits, 3); // SDD ladder of layer 4 - F.T. March,7-2001 - I005dits[0] = I402dits[0]+0.005; - I005dits[1] = 2*I402dits[1]+Y_SDD_sep/2.; - I005dits[2] = TMath::Abs(Z_SDD_lay4[0]); - if (I005dits[2] < TMath::Abs(Z_SDD_lay4[7])) { - I005dits[2] = TMath::Abs(Z_SDD_lay4[7]); + iI005dits[0] = iI402dits[0]+0.005; + iI005dits[1] = 2*iI402dits[1]+ySDDsep/2.; + iI005dits[2] = TMath::Abs(zSDDlay4[0]); + if (iI005dits[2] < TMath::Abs(zSDDlay4[7])) { + iI005dits[2] = TMath::Abs(zSDDlay4[7]); } - I005dits[2] = I005dits[2] + I402dits[2]; - gMC->Gsvolu("I005", "BOX ", idtmed[209], I005dits, 3); + iI005dits[2] = iI005dits[2] + iI402dits[2]; + gMC->Gsvolu("I005", "BOX ", idtmed[209], iI005dits, 3); // -- block of the SDD ladder foot and end ladder // ladder foot mother volume - I028dits[0] = 3.0000; - I028dits[1] = 0.4000; - I028dits[2] = 0.9000; - gMC->Gsvolu("I028", "BOX ", idtmed[224], I028dits, 3); + iI028dits[0] = 3.0000; + iI028dits[1] = 0.4000; + iI028dits[2] = 0.9000; + gMC->Gsvolu("I028", "BOX ", idtmed[224], iI028dits, 3); // positioning-box #1 at SDD end-ladder - F.T. March,7-2001 - I420dits[0] = 0.4500; - I420dits[1] = 0.4000; - I420dits[2] = 0.4500; - gMC->Gsvolu("I420", "BOX ", idtmed[264], I420dits, 3); + iI420dits[0] = 0.4500; + iI420dits[1] = 0.4000; + iI420dits[2] = 0.4500; + gMC->Gsvolu("I420", "BOX ", idtmed[264], iI420dits, 3); // positioning-box #2 at SDD end-ladder - F.T. March,7-2001 - I421dits[0] = 0.; - I421dits[1] = 0.25; - I421dits[2] = I420dits[1]; - gMC->Gsvolu("I421", "TUBE", idtmed[209], I421dits, 3); + iI421dits[0] = 0.; + iI421dits[1] = 0.25; + iI421dits[2] = iI420dits[1]; + gMC->Gsvolu("I421", "TUBE", idtmed[209], iI421dits, 3); // reference ruby-sphere at SDD end-ladder - F.T. March,7-2001 - I422dits[0] = 0.0000; - I422dits[1] = 0.2000; - I422dits[2] = 0.0000; - I422dits[3] = 180.00; - I422dits[4] = 0.0000; - I422dits[5] = 360.00; - gMC->Gsvolu("I422", "SPHE", idtmed[277], I422dits, 6); + iI422dits[0] = 0.0000; + iI422dits[1] = 0.2000; + iI422dits[2] = 0.0000; + iI422dits[3] = 180.00; + iI422dits[4] = 0.0000; + iI422dits[5] = 360.00; + gMC->Gsvolu("I422", "SPHE", idtmed[277], iI422dits, 6); // support for ruby-sphere (I422) - F.T. March,7-2001 - I423dits[0] = 0.0000; - I423dits[1] = 0.1000; - I423dits[2] = (I420dits[1]-I422dits[1])/2.; - gMC->Gsvolu("I423", "TUBE", idtmed[264], I423dits, 3); + iI423dits[0] = 0.0000; + iI423dits[1] = 0.1000; + iI423dits[2] = (iI420dits[1]-iI422dits[1])/2.; + gMC->Gsvolu("I423", "TUBE", idtmed[264], iI423dits, 3); // passage for HV microcables - F.T. March,7-2001 - I424dits[0] = 1.5000; - I424dits[1] = 0.1500; - I424dits[2] = I421dits[2]; - gMC->Gsvolu("I424", "BOX ", idtmed[209], I424dits, 3); + iI424dits[0] = 1.5000; + iI424dits[1] = 0.1500; + iI424dits[2] = iI421dits[2]; + gMC->Gsvolu("I424", "BOX ", idtmed[209], iI424dits, 3); // HV microcables segment at the end ladder - F.T. March,7-2001 - I425dits[0] = 1.350000; - I425dits[1] = 0.015250; - I425dits[2] = I024dits[2]; - gMC->Gsvolu("I425", "BOX ", idtmed[279], I425dits, 3); + iI425dits[0] = 1.350000; + iI425dits[1] = 0.015250; + iI425dits[2] = iI024dits[2]; + gMC->Gsvolu("I425", "BOX ", idtmed[279], iI425dits, 3); // lower edge of SDD ladder frame at end-ladder - part 1 dits[0] = 0.2; dits[1] = 0.1815; - dits[2] = I024dits[2]; + dits[2] = iI024dits[2]; dits[3] = 0.015; gMC->Gsvolu("I025", "TRD1", idtmed[208], dits, 4); // lower edge of SDD ladder frame at end-ladder - part 2 dits[0] = 0.183; dits[1] = 0.165; - dits[2] = I024dits[2]; + dits[2] = iI024dits[2]; dits[3] = 0.015; gMC->Gsvolu("I026", "TRD1", idtmed[208], dits, 4); // new: for the 1st top rod of the structure // at the end-ladder - F.T. March,7-2001 - I029dits[0] = 0.2; - I029dits[1] = 0.1815; - I029dits[2] = 1.0100; - I029dits[3] = 0.015; - gMC->Gsvolu("I029", "TRD1", idtmed[208], I029dits, 4); + iI029dits[0] = 0.2; + iI029dits[1] = 0.1815; + iI029dits[2] = 1.0100; + iI029dits[3] = 0.015; + gMC->Gsvolu("I029", "TRD1", idtmed[208], iI029dits, 4); // new: for the 2nd top rod of the structure // at the end-ladder - F.T. March,7-2001 - I030dits[0] = 0.1830; - I030dits[1] = 0.1650; - I030dits[2] = 1.0100; - I030dits[3] = 0.0150; - gMC->Gsvolu("I030", "TRD1", idtmed[208], I030dits, 4); + iI030dits[0] = 0.1830; + iI030dits[1] = 0.1650; + iI030dits[2] = 1.0100; + iI030dits[3] = 0.0150; + gMC->Gsvolu("I030", "TRD1", idtmed[208], iI030dits, 4); // inox cooling tubes for the end ladder - F.T. March,7-2001 - I031dits[0] = 0.093; - I031dits[1] = 0.1; - I031dits[2] = I024dits[2]; - gMC->Gsvolu("I031", "TUBE", idtmed[264], I031dits, 3); + iI031dits[0] = 0.093; + iI031dits[1] = 0.1; + iI031dits[2] = iI024dits[2]; + gMC->Gsvolu("I031", "TUBE", idtmed[264], iI031dits, 3); if (fluid == 1) { // cooling water for the end ladder - F.T. March,7-2001 - I032dits[0] = 0; - I032dits[1] = I031dits[0]; - I032dits[2] = I024dits[2]; - gMC->Gsvolu("I032", "TUBE", idtmed[211], I032dits, 3); + iI032dits[0] = 0; + iI032dits[1] = iI031dits[0]; + iI032dits[2] = iI024dits[2]; + gMC->Gsvolu("I032", "TUBE", idtmed[211], iI032dits, 3); } else { // cooling freon for the end ladder - R.B. March,21-2001 - I032dits[0] = 0; - I032dits[1] = I031dits[0]; - I032dits[2] = I024dits[2]; - gMC->Gsvolu("I032", "TUBE", idtmed[212], I032dits, 3); + iI032dits[0] = 0; + iI032dits[1] = iI031dits[0]; + iI032dits[2] = iI024dits[2]; + gMC->Gsvolu("I032", "TUBE", idtmed[212], iI032dits, 3); } // -- block of the SDD ladder frame holding the electronics @@ -2067,10 +2527,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I034", "TUBE", idtmed[277], dits, 3); // holders of cooling tubes - I035dits[0] = 0.1; - I035dits[1] = 0.15; - I035dits[2] = 0.2; - gMC->Gsvolu("I035", "TUBE", idtmed[208], I035dits, 3); + iI035dits[0] = 0.1; + iI035dits[1] = 0.15; + iI035dits[2] = 0.2; + gMC->Gsvolu("I035", "TUBE", idtmed[208], iI035dits, 3); // top holders of microcables dits[0] = 0.2; @@ -2079,84 +2539,84 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("I036", "BOX ", idtmed[208], dits, 3); // inox cooling tubes - F.T. March,7-2001 - I037dits[0] = 0.093; - I037dits[1] = 0.1; - I037dits[2] = I018dits[2]; - gMC->Gsvolu("I037", "TUBE", idtmed[264], I037dits, 3); + iI037dits[0] = 0.093; + iI037dits[1] = 0.1; + iI037dits[2] = iI018dits[2]; + gMC->Gsvolu("I037", "TUBE", idtmed[264], iI037dits, 3); if (fluid == 1) { // cooling water - F.T. March,7-2001 - I038dits[0] = 0; - I038dits[1] = I037dits[0]; - I038dits[2] = I018dits[2]; - gMC->Gsvolu("I038", "TUBE", idtmed[211], I038dits, 3); + iI038dits[0] = 0; + iI038dits[1] = iI037dits[0]; + iI038dits[2] = iI018dits[2]; + gMC->Gsvolu("I038", "TUBE", idtmed[211], iI038dits, 3); } else { // cooling freon - R.B. March,21-2001 - I038dits[0] = 0; - I038dits[1] = I037dits[0]; - I038dits[2] = I018dits[2]; - gMC->Gsvolu("I038", "TUBE", idtmed[212], I038dits, 3); + iI038dits[0] = 0; + iI038dits[1] = iI037dits[0]; + iI038dits[2] = iI018dits[2]; + gMC->Gsvolu("I038", "TUBE", idtmed[212], iI038dits, 3); } // -- block of the SDD electronics (heat bridge, chips, hybrid, anode microcable) // SDD heat bridge - F.T. March,7-2001 - I039dits[0] = 1.1000; - I039dits[1] = 0.0087; - I039dits[2] = 3.2500; - gMC->Gsvolu("I039", "BOX ", idtmed[268], I039dits, 3); + iI039dits[0] = 1.1000; + iI039dits[1] = 0.0087; + iI039dits[2] = 3.2500; + gMC->Gsvolu("I039", "BOX ", idtmed[268], iI039dits, 3); // SDD clip part 1 dits[0] = 0.25; dits[1] = 0.01; - dits[2] = I039dits[2]; + dits[2] = iI039dits[2]; gMC->Gsvolu("I040", "BOX ", idtmed[268], dits, 3); // SDD clip part 2 - I041dits[0] = 0.1; - I041dits[1] = 0.12; - I041dits[2] = I039dits[2]; - I041dits[3] = 90; - I041dits[4] = 320; - gMC->Gsvolu("I041", "TUBS", idtmed[268], I041dits, 5); + iI041dits[0] = 0.1; + iI041dits[1] = 0.12; + iI041dits[2] = iI039dits[2]; + iI041dits[3] = 90; + iI041dits[4] = 320; + gMC->Gsvolu("I041", "TUBS", idtmed[268], iI041dits, 5); // SDD PASCAL - F.T. March,7-2001 - I042dits[0] = 0.5000; - I042dits[1] = 0.0175; - I042dits[2] = 0.5000; - gMC->Gsvolu("I042", "BOX ", idtmed[206], I042dits, 3); + iI042dits[0] = 0.5000; + iI042dits[1] = 0.0175; + iI042dits[2] = 0.5000; + gMC->Gsvolu("I042", "BOX ", idtmed[206], iI042dits, 3); // SDD AMBRA - F.T. March,7-2001 - I043dits[0] = 0.3500; - I043dits[1] = 0.0175; - I043dits[2] = 0.5000; - gMC->Gsvolu("I043", "BOX ", idtmed[206], I043dits, 3); + iI043dits[0] = 0.3500; + iI043dits[1] = 0.0175; + iI043dits[2] = 0.5000; + gMC->Gsvolu("I043", "BOX ", idtmed[206], iI043dits, 3); // SDD capacitors - F.T. March,7-2001 - I051dits[0] = 0.1400; - I051dits[1] = 0.0350; - I051dits[2] = 0.0625; - gMC->Gsvolu("I051", "BOX ", idtmed[276], I051dits, 3); + iI051dits[0] = 0.1400; + iI051dits[1] = 0.0350; + iI051dits[2] = 0.0625; + gMC->Gsvolu("I051", "BOX ", idtmed[276], iI051dits, 3); // SDD hybrid circuit - F.T. March,7-2001 - I052dits[0] = 1.725000; - I052dits[1] = 0.003743; - I052dits[2] = I039dits[2]; - gMC->Gsvolu("I052", "BOX ", idtmed[281], I052dits, 3); + iI052dits[0] = 1.725000; + iI052dits[1] = 0.003743; + iI052dits[2] = iI039dits[2]; + gMC->Gsvolu("I052", "BOX ", idtmed[281], iI052dits, 3); // SDD anode microcable : changed - F.T. March,7-2001 - I044dits[0] = I018dits[2]; - I044dits[1] = I039dits[2]; - I044dits[2] = 0.00084; - I044dits[3] = (15.189149/(I044dits[0]+I044dits[1]))/2; - gMC->Gsvolu("I044", "TRD1", idtmed[282], I044dits, 4); - volI044 = ((2*I044dits[0] + 2*I044dits[1]) * 2*I044dits[2])/2 * 2*I044dits[3]; + iI044dits[0] = iI018dits[2]; + iI044dits[1] = iI039dits[2]; + iI044dits[2] = 0.00084; + iI044dits[3] = (15.189149/(iI044dits[0]+iI044dits[1]))/2; + gMC->Gsvolu("I044", "TRD1", idtmed[282], iI044dits, 4); + volI044 = ((2*iI044dits[0] + 2*iI044dits[1]) * 2*iI044dits[2])/2 * 2*iI044dits[3]; // SDD electronics box - F.T. March,7-2001 - I050dits[1] = I039dits[1]+I052dits[1]+I051dits[1]+I044dits[2]; - I050dits[0] = I018dits[1]/cos(30.*3.14159/180.)-I050dits[1]*sin(30.*3.14159/180.); - I050dits[2] = I018dits[2]; - gMC->Gsvolu("I050", "BOX ", idtmed[209], I050dits, 3); + iI050dits[1] = iI039dits[1]+iI052dits[1]+iI051dits[1]+iI044dits[2]; + iI050dits[0] = iI018dits[1]/cos(30.*3.14159/180.)-iI050dits[1]*sin(30.*3.14159/180.); + iI050dits[2] = iI018dits[2]; + gMC->Gsvolu("I050", "BOX ", idtmed[209], iI050dits, 3); // SDD sensitive volume dits[0] = 3.50850; @@ -2195,7 +2655,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[18] = 57.45; dits[19] = 43.6; dits[20] = 48; - gMC->Gsvolu("IT56", "PCON", idtmed[220], dits, 21); + //gMC->Gsvolu("IT56", "PCON", idtmed[220], dits, 21); // SSD air + gMC->Gsvolu("IT56", "PCON", idtmed[204], dits, 21); // air dits[0] = 3.4; dits[1] = 1.955; @@ -2624,10 +3085,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // Redefined to make adding material for cables easier (FMD geometry) Double_t s1,s2,b1,b2; - s1 = (dits[16]-dits[10])/(dits[15]-dits[9]); // Slope of conical section - s2 = (dits[16]-dits[10])/(dits[15]-dits[9]); // Slope of conical section - b1 = dits[13] - s1*dits[15]; // inside cone axis intersept - b2 = dits[14] - s2*dits[15]; // outside cone axis intersept + s1 = (dits[13]-dits[10])/(dits[12]-dits[9]); // Slope of conical section + s2 = (dits[14]-dits[11])/(dits[12]-dits[9]); // Slope of conical section + b1 = dits[13] - s1*dits[12]; // inside cone axis intersept + b2 = dits[14] - s2*dits[12]; // outside cone axis intersept dits[0] = 0; //dits[0] = 0; dits[1] = 50; //dits[1] = 50; dits[2] = 4; //dits[2] = 3; @@ -2671,7 +3132,17 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dits[12] = (dits[13]-b1)/s1; // Z // gMC->Gsvolu("I200", "PCON", idtmed[204], dits, 12); // SDD 4 cone hole gMC->Gsvolu("I200", "PCON", idtmed[285], dits, 15); // SDD 4 cone hole - + //Begin_Html + /* + + +
+ +

SDD Support cone with other forward detectors. Shown in + brown are a posible cabling layout. + + */ + //End_Html dits[0] = 10.0; dits[1] = 10.5; dits[2] = 0.25; @@ -2782,31 +3253,42 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // gMC->Gsvolu("I212", "PCON", idtmed[272], dits, 21); // SSD cone gMC->Gsvolu("I212", "PCON", idtmed[288], dits, 21); // SSD cone - s1 = (dits[5]-dits[14])/(dits[9]-dits[12]); // Slope of conical section - s2 = (dits[10]-dits[13])/(dits[9]-dits[12]); // Slope of conical section - b1 = dits[14] - s1*dits[12]; // inside cone axis intersept - b2 = dits[13] - s2*dits[12]; // outside cone axis intersept + s1 = (dits[10]-dits[13])/(dits[9]-dits[12]); // Slope of conical section + s2 = (dits[11]-dits[14])/(dits[9]-dits[12]); // Slope of conical section + b1 = dits[13] - s1*dits[12]; // inside cone axis intersept + b2 = dits[14] - s2*dits[12]; // outside cone axis intersept dits[0] = 0; dits[1] = 25; dits[2] = 4; //dits[2] = 5; dits[4] = 45.50; //dits[4] = 45.5; // r inner dits[5] = dits[4]; //dits[5] = 45.5; // r outer - dits[3] = (dits[4] - b2)/s2; //dits[3] = -zmax+3; // z + dits[3] = (dits[4] - b1)/s1; //dits[3] = -zmax+3; // z dits[8] = dits[4]; //dits[8] = 45.5; // r outer - dits[6] = (dits[8] - b1)/s1; //dits[6] = -69.7+3;; // z - dits[7] = s2*dits[6] + b2; //dits[7] = 37; // r inner + dits[6] = (dits[8] - b2)/s2; //dits[6] = -69.7+3;; // z + dits[7] = s1*dits[6] + b1; //dits[7] = 37; // r inner dits[10] = 37.00; //dits[10] = 37; // r inner - dits[9] = (dits[10]-b2)/s2; //dits[9] = -68.5+3;; // z - dits[11] = s1*dits[9]+b1; //dits[11] = 45.5; // r outer + dits[9] = (dits[10]-b1)/s1; //dits[9] = -68.5+3;; // z + dits[11] = s2*dits[9]+b2; //dits[11] = 45.5; // r outer dits[13] = dits[10]; //dits[13] = 37; // r inner dits[14] = dits[13]; //dits[14] = 45.5; // r outer - dits[12] = s2*dits[14] + b2; //dits[12] = -68.5+4.8;; // z + dits[12] = (dits[14] - b2)/s2; //dits[12] = -68.5+4.8;; // z // gMC->Gsvolu("I215", "PCON", idtmed[204], dits, 18); // SSD cone hole gMC->Gsvolu("I215", "PCON", idtmed[286], dits, 15); // SSD cone hole + //Begin_Html + /* + + +
+ +

SSD Support cone with other forward detectors. Shown in + brown are a posible cabling layout. + + */ + //End_Html dits[0] = 28.75; dits[1] = 29.75; @@ -3141,18 +3623,18 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I116",1,"I113",0.0,0.0042,0.0,0,"ONLY"); gMC->Gspos("I111",1,"I113",-0.1318,-0.0008,0.0,idrotm[204],"ONLY"); gMC->Gspos("I112",1,"I113",-0.25,0.02,0.0,idrotm[203],"ONLY"); - gMC->Gspos("I106",1,"I107",0.0,-dchip1,-1.4,0,"ONLY"); - gMC->Gspos("I106",2,"I107",0.0,-dchip1,0.0,0,"ONLY"); - gMC->Gspos("I106",3,"I107",0.0,-dchip1,1.4,0,"ONLY"); - gMC->Gspos("I106",4,"I107",0.0,-dchip1,2.8,0,"ONLY"); - gMC->Gspos("I106",5,"I107",0.0,-dchip1,-2.8,0,"ONLY"); - gMC->Gspos("I101",1,"I107",0.0,ddet1,0.0,0,"ONLY"); - gMC->Gspos("I1D6",1,"I1D7",0.0,-dchip2,-1.4,0,"ONLY"); - gMC->Gspos("I1D6",2,"I1D7",0.0,-dchip2,0.0,0,"ONLY"); - gMC->Gspos("I1D6",3,"I1D7",0.0,-dchip2,1.4,0,"ONLY"); - gMC->Gspos("I1D6",4,"I1D7",0.0,-dchip2,2.8,0,"ONLY"); - gMC->Gspos("I1D6",5,"I1D7",0.0,-dchip2,-2.8,0,"ONLY"); - gMC->Gspos("I1D1",1,"I1D7",0.0,ddet2,0.0,0,"ONLY"); + gMC->Gspos("I106",1,"I107",0.0,-ddet1,-1.4,0,"ONLY"); + gMC->Gspos("I106",2,"I107",0.0,-ddet1,0.0,0,"ONLY"); + gMC->Gspos("I106",3,"I107",0.0,-ddet1,1.4,0,"ONLY"); + gMC->Gspos("I106",4,"I107",0.0,-ddet1,2.8,0,"ONLY"); + gMC->Gspos("I106",5,"I107",0.0,-ddet1,-2.8,0,"ONLY"); + gMC->Gspos("I101",1,"I107",0.0,dchip1,0.0,0,"ONLY"); + gMC->Gspos("I1D6",1,"I1D7",0.0,-ddet2,-1.4,0,"ONLY"); + gMC->Gspos("I1D6",2,"I1D7",0.0,-ddet2,0.0,0,"ONLY"); + gMC->Gspos("I1D6",3,"I1D7",0.0,-ddet2,1.4,0,"ONLY"); + gMC->Gspos("I1D6",4,"I1D7",0.0,-ddet2,2.8,0,"ONLY"); + gMC->Gspos("I1D6",5,"I1D7",0.0,-ddet2,-2.8,0,"ONLY"); + gMC->Gspos("I1D1",1,"I1D7",0.0,dchip2,0.0,0,"ONLY"); gMC->Gspos("I117",1,"I116",0.0,0.0,0.0,0,"ONLY"); gMC->Gspos("ITS1",1,"I101",0.0,0.0,0.0,0,"ONLY"); gMC->Gspos("ITS2",1,"I1D1",0.0,0.0,0.0,0,"ONLY"); @@ -3216,9 +3698,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- position SDD detectors of ladder 3 / layer 3 gMC->Gspos("ITS3", 1,"I302", 0.0, 0.0, 0.0, 0, "ONLY"); - ySDD = Y_SDD_sep/2.+I302dits[1]; + ySDD = ySDDsep/2.+iI302dits[1]; for (iSDD=0; iSDD<6; iSDD++) { - gMC->Gspos("I302", iSDD+1, "I004", 0.0, ySDD, Z_SDD_lay3[iSDD], 0, "ONLY"); + gMC->Gspos("I302", iSDD+1, "I004", 0.0, ySDD, zSDDlay3[iSDD], 0, "ONLY"); ySDD = -ySDD; } @@ -3241,9 +3723,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // -- position SDD detectors of ladder 4 / layer 4 gMC->Gspos("ITS4", 1,"I402", 0.0, 0.000, 0.0, 0,"ONLY"); - ySDD = -(Y_SDD_sep/2.+I402dits[1]); + ySDD = -(ySDDsep/2.+iI402dits[1]); for (iSDD=0; iSDD<8; iSDD++) { - gMC->Gspos("I402", iSDD+1, "I005", 0.0, ySDD, Z_SDD_lay4[iSDD], 0, "ONLY"); + gMC->Gspos("I402", iSDD+1, "I005", 0.0, ySDD, zSDDlay4[iSDD], 0, "ONLY"); ySDD = -ySDD; } @@ -3306,55 +3788,55 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I034", 3,"I018", -1.6, -1.775, 1.35, idrotm[348], "ONLY"); gMC->Gspos("I034", 4,"I018", 1.6, -1.775, -2.65, idrotm[312], "ONLY"); - gMC->Gspos("I035", 1,"I018", 1.7, -0.55, I018dits[2]-I035dits[2], 0, "MANY"); - gMC->Gspos("I035", 2,"I018", -1.7, -0.55, I018dits[2]-I035dits[2], 0, "MANY"); + gMC->Gspos("I035", 1,"I018", 1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "MANY"); + gMC->Gspos("I035", 2,"I018", -1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "MANY"); gMC->Gspos("I036", 1,"I018", 0.3087, 1.7191, 3.56, idrotm[346], "ONLY"); gMC->Gspos("I036", 2,"I018", 0.3087, 1.7191,-0.11, idrotm[346], "ONLY"); gMC->Gspos("I036", 3,"I018", -0.3087, 1.7191,-0.11, idrotm[347], "ONLY"); gMC->Gspos("I036", 4,"I018", -0.3087, 1.7191, 3.56, idrotm[347], "ONLY"); - gMC->Gspos("I037", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I037", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I037", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I037", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I038", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); - gMC->Gspos("I038", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I038", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); + gMC->Gspos("I038", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY"); gMC->Gspos("I040", 1,"I018", 1.9204, -0.7118, 0.0, idrotm[346],"ONLY"); gMC->Gspos("I040", 2,"I018", -1.9204, -0.7118, 0.0, idrotm[347],"ONLY"); - gMC->Gspos("I041", 1,"I018", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], idrotm[346], "ONLY"); - gMC->Gspos("I041", 2,"I018", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], idrotm[347], "ONLY"); + gMC->Gspos("I041", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[346], "ONLY"); + gMC->Gspos("I041", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[347], "ONLY"); // -- build block of the SDD electronics (heat bridge, chips, hybrid, anode microcable) - xI050 = SDD_CoolPipe[0]+SDD_CoolPipe[1]*sin30+I050dits[1]/cos30+I041dits[1]; + xI050 = iSDDCoolPipe[0]+iSDDCoolPipe[1]*sin30+iI050dits[1]/cos30+iI041dits[1]; yI050 = 0; - xI039 = -SDD_CoolPipe[1]/cos30; - yI039 = -I050dits[1]+I039dits[1]; + xI039 = -iSDDCoolPipe[1]/cos30; + yI039 = -iI050dits[1]+iI039dits[1]; gMC->Gspos("I039", 1,"I050", xI039, yI039, 0.0, 0, "ONLY"); - xI042 = xI039+I039dits[0]-xI042space-I042dits[0]; - yI042 = yI039+I039dits[1]+I042dits[1]; - xI043 = xI039-I039dits[0]+xI043space+I043dits[0]; - yI043 = yI039+I039dits[1]+I043dits[1]; - zChipSpace = I042dits[2]; - if (zChipSpace < I043dits[2]) { - zChipSpace = I043dits[2]; + xI042 = xI039+iI039dits[0]-xI042space-iI042dits[0]; + yI042 = yI039+iI039dits[1]+iI042dits[1]; + xI043 = xI039-iI039dits[0]+xI043space+iI043dits[0]; + yI043 = yI039+iI039dits[1]+iI043dits[1]; + zChipSpace = iI042dits[2]; + if (zChipSpace < iI043dits[2]) { + zChipSpace = iI043dits[2]; } zChipSpace = zChipSpace * 2; - yI051space = (2*I039dits[2] - 4*zChipSpace)/5; - zchip = -I039dits[2] + yI051space + zChipSpace/2.; + yI051space = (2*iI039dits[2] - 4*zChipSpace)/5; + zchip = -iI039dits[2] + yI051space + zChipSpace/2.; for (ichip=0; ichip<4; ichip++) { gMC->Gspos("I042", ichip+1, "I050", xI042, yI042, zchip, 0, "ONLY"); gMC->Gspos("I043", ichip+1, "I050", xI043, yI043, zchip, 0, "ONLY"); zchip += zChipSpace + yI051space; } - xcap = 2*I039dits[0]/5.; - yI051 = yI039+I039dits[1]+I051dits[1]; - zI051 = -I039dits[2] + yI051space/3.; + xcap = 2*iI039dits[0]/5.; + yI051 = yI039+iI039dits[1]+iI051dits[1]; + zI051 = -iI039dits[2] + yI051space/3.; icap = 1; for (ichip=0; ichip<5; ichip++) { - xI051 = xI039-I039dits[0]+xcap; + xI051 = xI039-iI039dits[0]+xcap; gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY"); zI051 += yI051space/3.; gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY"); @@ -3370,11 +3852,11 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ } zI051 += zChipSpace + yI051space; } - xI052 = -I050dits[0]+I052dits[0]; - yI052 = yI051+I051dits[1]+I052dits[1]; + xI052 = -iI050dits[0]+iI052dits[0]; + yI052 = yI051+iI051dits[1]+iI052dits[1]; gMC->Gspos("I052", 1,"I050", xI052, yI052, 0.0, 0, "ONLY"); - xI044 = I050dits[0]-I044dits[3]; - yI044 = yI052+I052dits[1]+I044dits[2]; + xI044 = iI050dits[0]-iI044dits[3]; + yI044 = yI052+iI052dits[1]+iI044dits[2]; gMC->Gspos("I044", 1,"I050", xI044, yI044, 0.0, idrotm[301], "ONLY"); gMC->Gspos("I050", 1,"I018", xI050, yI050, 0.0, idrotm[346],"ONLY"); gMC->Gspos("I050", 2,"I018", -xI050, yI050, 0.0, idrotm[347],"ONLY"); @@ -3397,25 +3879,25 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I026", 1,"I024", -1.9782, -1.5689, 0.0, idrotm[342], "ONLY"); gMC->Gspos("I026", 2,"I024", 1.8824, -1.7349, 0.0, idrotm[344], "ONLY"); - gMC->Gspos("I029", 1,"I024", -0.087, 1.7067, I029dits[2]-I024dits[2], idrotm[342], "ONLY"); + gMC->Gspos("I029", 1,"I024", -0.087, 1.7067, iI029dits[2]-iI024dits[2], idrotm[342], "ONLY"); - gMC->Gspos("I030", 1,"I024", 0.0958, 1.6914, I030dits[2]-I024dits[2], idrotm[343], "ONLY"); + gMC->Gspos("I030", 1,"I024", 0.0958, 1.6914, iI030dits[2]-iI024dits[2], idrotm[343], "ONLY"); - gMC->Gspos("I031", 1,"I024", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I031", 2,"I024", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I031", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I031", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I032", 1,"I024", SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); - gMC->Gspos("I032", 2,"I024", -SDD_CoolPipe[0], SDD_CoolPipe[1], SDD_CoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I032", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); + gMC->Gspos("I032", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY"); - xI424 = I028dits[0]/3.; - yI424 = -I028dits[1]+I424dits[1]; + xI424 = iI028dits[0]/3.; + yI424 = -iI028dits[1]+iI424dits[1]; gMC->Gspos("I422", 1,"I421", 0.0, 0.0, 0.0, 0, "ONLY"); - gMC->Gspos("I423", 1,"I421", 0.0, 0.0, I421dits[2]-I423dits[2], 0, "ONLY"); + gMC->Gspos("I423", 1,"I421", 0.0, 0.0, iI421dits[2]-iI423dits[2], 0, "ONLY"); gMC->Gspos("I421", 1,"I420", 0.0, 0.0, 0.0, idrotm[312], "ONLY"); - gMC->Gspos("I420", 1,"I028", -I028dits[0]/3., I028dits[1]-I420dits[1], 0.0, 0, "ONLY"); + gMC->Gspos("I420", 1,"I028", -iI028dits[0]/3., iI028dits[1]-iI420dits[1], 0.0, 0, "ONLY"); gMC->Gspos("I424", 1,"I028", xI424, yI424, 0.0, 0, "ONLY"); - gMC->Gspos("I028", 1,"I024", 0.0, I028dits[1]-I024dits[1], I024dits[2]-I028dits[2], 0, "MANY"); + gMC->Gspos("I028", 1,"I024", 0.0, iI028dits[1]-iI024dits[1], iI024dits[2]-iI028dits[2], 0, "MANY"); // -- build the SDD ladder 3 @@ -3429,43 +3911,43 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I018", 5,"I047", 0.0, 0.0, -10.95, 0, "ONLY"); gMC->Gspos("I018", 6,"I047", 0.0, 0.0, -18.25, 0, "ONLY"); gMC->Gspos("I024", 2,"I047", 0.0, 0.0, -24.625, idrotm[355], "ONLY"); - HVname[0] = 'I'; - HVname[1] = '3'; - HVname[2] = '1'; - HVname[4] = '\0'; + nameHV[0] = 'I'; + nameHV[1] = '3'; + nameHV[2] = '1'; + nameHV[4] = '\0'; for (iSDD=0; iSDD<3; iSDD++) { - HVname[3] = (Char_t)(48+iSDD+5); + nameHV[3] = (Char_t)(48+iSDD+5); dits[0] = 1.350000; - dits[1] = I425dits[1]; - dits[2] = (I047dits[2] - 2*I024dits[2] - Z_SDD_lay3[iSDD])/2.; - gMC->Gsvolu(HVname, "BOX ", idtmed[279], dits, 3); + dits[1] = iI425dits[1]; + dits[2] = (iI047dits[2] - 2*iI024dits[2] - zSDDlay3[iSDD])/2.; + gMC->Gsvolu(nameHV, "BOX ", idtmed[279], dits, 3); xHV = 0.0; - yHV = -I047dits[1] + (2*iSDD+1)*dits[1]; - zHV = I047dits[2] - 2*I024dits[2] - dits[2]; - gMC->Gspos(HVname, 1,"I047", xHV, yHV, zHV, 0, "ONLY"); - gMC->Gspos(HVname, 2,"I047", xHV, yHV, -zHV, 0, "ONLY"); + yHV = -iI047dits[1] + (2*iSDD+1)*dits[1]; + zHV = iI047dits[2] - 2*iI024dits[2] - dits[2]; + gMC->Gspos(nameHV, 1,"I047", xHV, yHV, zHV, 0, "ONLY"); + gMC->Gspos(nameHV, 2,"I047", xHV, yHV, -zHV, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I047", xI424, yHV, 24.625, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I047", -xI424, yHV, -24.625, 0, "ONLY"); } - LVname[0] = 'I'; - LVname[1] = '3'; - LVname[2] = '1'; - LVname[4] = '\0'; + nameLV[0] = 'I'; + nameLV[1] = '3'; + nameLV[2] = '1'; + nameLV[4] = '\0'; for (iSDD=0; iSDD<3; iSDD++) { - LVname[3] = (Char_t)(48+iSDD+1); + nameLV[3] = (Char_t)(48+iSDD+1); dits[0] = 1.350000; dits[1] = 0.004423; - dits[2] = (I047dits[2] - (2*iSDD+1)*I018dits[2] - I039dits[2])/2.; - gMC->Gsvolu(LVname, "BOX ", idtmed[280], dits, 3); - yLV = I018dits[1] - dits[0]*cos30 - dits[1]*sin30; + dits[2] = (iI047dits[2] - (2*iSDD+1)*iI018dits[2] - iI039dits[2])/2.; + gMC->Gsvolu(nameLV, "BOX ", idtmed[280], dits, 3); + yLV = iI018dits[1] - dits[0]*cos30 - dits[1]*sin30; xLV = xI050 - - fabs(yI050-yLV)*sin30/cos30 + - (I050dits[1]+(2*iSDD+1)*dits[1])/cos30; - zLV = I047dits[2] - dits[2]; - gMC->Gspos(LVname, 1,"I047", xLV, yLV, zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 2,"I047", xLV, yLV, -zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 3,"I047", -xLV, yLV, zLV, idrotm[347], "ONLY"); - gMC->Gspos(LVname, 4,"I047", -xLV, yLV, -zLV, idrotm[347], "ONLY"); + TMath::Abs(yI050-yLV)*sin30/cos30 + + (iI050dits[1]+(2*iSDD+1)*dits[1])/cos30; + zLV = iI047dits[2] - dits[2]; + gMC->Gspos(nameLV, 1,"I047", xLV, yLV, zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 2,"I047", xLV, yLV, -zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 3,"I047", -xLV, yLV, zLV, idrotm[347], "ONLY"); + gMC->Gspos(nameLV, 4,"I047", -xLV, yLV, -zLV, idrotm[347], "ONLY"); } @@ -3482,43 +3964,43 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I018",13,"I048", -0.0001, 0.0, -18.25, 0, "ONLY"); gMC->Gspos("I018",14,"I048", -0.0001, 0.0, -25.55, 0, "ONLY"); gMC->Gspos("I024", 4,"I048", -0.0001, 0.0, -31.925, idrotm[355], "ONLY"); - HVname[0] = 'I'; - HVname[1] = '4'; - HVname[2] = '1'; - HVname[4] = '\0'; + nameHV[0] = 'I'; + nameHV[1] = '4'; + nameHV[2] = '1'; + nameHV[4] = '\0'; for (iSDD=0; iSDD<4; iSDD++) { - HVname[3] = (Char_t)(48+iSDD+5); + nameHV[3] = (Char_t)(48+iSDD+5); dits[0] = 1.350000; - dits[1] = I425dits[1]; - dits[2] = (I048dits[2] - 2*I024dits[2] - Z_SDD_lay4[iSDD])/2.; - gMC->Gsvolu(HVname, "BOX ", idtmed[279], dits, 3); + dits[1] = iI425dits[1]; + dits[2] = (iI048dits[2] - 2*iI024dits[2] - zSDDlay4[iSDD])/2.; + gMC->Gsvolu(nameHV, "BOX ", idtmed[279], dits, 3); xHV = -0.0001; - yHV = -I048dits[1] + (2*iSDD+1)*dits[1]; - zHV = I048dits[2] - 2*I024dits[2] - dits[2]; - gMC->Gspos(HVname, 1,"I048", xHV, yHV, zHV, 0, "ONLY"); - gMC->Gspos(HVname, 2,"I048", xHV, yHV, -zHV, 0, "ONLY"); + yHV = -iI048dits[1] + (2*iSDD+1)*dits[1]; + zHV = iI048dits[2] - 2*iI024dits[2] - dits[2]; + gMC->Gspos(nameHV, 1,"I048", xHV, yHV, zHV, 0, "ONLY"); + gMC->Gspos(nameHV, 2,"I048", xHV, yHV, -zHV, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I048", xI424, yHV, 31.925, 0, "ONLY"); gMC->Gspos("I425", indI425++,"I048", -xI424, yHV, -31.925, 0, "ONLY"); } - LVname[0] = 'I'; - LVname[1] = '4'; - LVname[2] = '1'; - LVname[4] = '\0'; + nameLV[0] = 'I'; + nameLV[1] = '4'; + nameLV[2] = '1'; + nameLV[4] = '\0'; for (iSDD=0; iSDD<4; iSDD++) { - LVname[3] = (Char_t)(48+iSDD+1); + nameLV[3] = (Char_t)(48+iSDD+1); dits[0] = 1.350000; dits[1] = 0.004423; - dits[2] = (I048dits[2] - (2*iSDD+1)*I018dits[2] - I039dits[2])/2.; - gMC->Gsvolu(LVname, "BOX ", idtmed[280], dits, 3); - yLV = I018dits[1] - dits[0]*cos30 - dits[1]*sin30; + dits[2] = (iI048dits[2] - (2*iSDD+1)*iI018dits[2] - iI039dits[2])/2.; + gMC->Gsvolu(nameLV, "BOX ", idtmed[280], dits, 3); + yLV = iI018dits[1] - dits[0]*cos30 - dits[1]*sin30; xLV = xI050 - - fabs(yI050-yLV)*sin30/cos30 + - (I050dits[1]+(2*iSDD+1)*dits[1])/cos30; - zLV = I048dits[2] - dits[2]; - gMC->Gspos(LVname, 1,"I048", xLV, yLV, zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 2,"I048", xLV, yLV, -zLV, idrotm[346], "ONLY"); - gMC->Gspos(LVname, 3,"I048", -xLV, yLV, zLV, idrotm[347], "ONLY"); - gMC->Gspos(LVname, 4,"I048", -xLV, yLV, -zLV, idrotm[347], "ONLY"); + TMath::Abs(yI050-yLV)*sin30/cos30 + + (iI050dits[1]+(2*iSDD+1)*dits[1])/cos30; + zLV = iI048dits[2] - dits[2]; + gMC->Gspos(nameLV, 1,"I048", xLV, yLV, zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 2,"I048", xLV, yLV, -zLV, idrotm[346], "ONLY"); + gMC->Gspos(nameLV, 3,"I048", -xLV, yLV, zLV, idrotm[347], "ONLY"); + gMC->Gspos(nameLV, 4,"I048", -xLV, yLV, -zLV, idrotm[347], "ONLY"); } @@ -4057,10 +4539,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("I200",21,"IS02",0.0,0.0,0.0,idrotm[892],"ONLY"); gMC->Gspos("I200",20,"IS02",0.0,0.0,0.0,idrotm[868],"ONLY"); gMC->Gspos("I200",19,"IS02",0.0,0.0,0.0,idrotm[893],"ONLY"); - gMC->Gspos("I098",1,"IS02",0.0,0.0,33.6,0,"ONLY"); - gMC->Gspos("I097",1,"IS02",0.0,0.0,26.6,0,"ONLY"); - gMC->Gspos("I097",2,"IS02",0.0,0.0,-26.6,idrotm[856],"ONLY"); - gMC->Gspos("I098",2,"IS02",0.0,0.0,-33.6,idrotm[856],"ONLY"); + gMC->Gspos("I098",1,"IS02",0.0,0.0,33.6,0,"MANY"); + gMC->Gspos("I097",1,"IS02",0.0,0.0,26.6,0,"MANY"); + gMC->Gspos("I097",2,"IS02",0.0,0.0,-26.6,idrotm[856],"MANY"); + gMC->Gspos("I098",2,"IS02",0.0,0.0,-33.6,idrotm[856],"MANY"); gMC->Gspos("I202",1,"IS02",12.1,0.0,33.84,0,"ONLY"); gMC->Gspos("I202",6,"IS02",-6.05,-10.4789,33.84,idrotm[930],"ONLY"); gMC->Gspos("I202",5,"IS02",-6.05,10.4789,33.84,idrotm[929],"ONLY"); @@ -4175,11 +4657,11 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ // --- Place subdetectors' mother volumes and supports' mother volumes // into ITS mother volume ITSD - gMC->Gspos("IT12",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SPD mother volume - gMC->Gspos("IT34",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SDD mother volume - gMC->Gspos("IT56",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SSD mother volume - gMC->Gspos("IS02",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SDD cones/supports - gMC->Gspos("IS01",1,"ITSD",0.0,0.0,0.0,0,"ONLY"); // SSD cones/supports + gMC->Gspos("IT12",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SPD mother volume + gMC->Gspos("IT34",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SDD mother volume + gMC->Gspos("IT56",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SSD mother volume + gMC->Gspos("IS02",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SDD cones/supports + gMC->Gspos("IS01",1,"ITSD",0.0,0.0,0.0,0,"MANY"); // SSD cones/supports // **************************** SERVICES ********************************* @@ -4293,7 +4775,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); - // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART + // -- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART // UPPER PART dgh[0] = (ztpc-97.5)/2.; @@ -4319,10 +4801,10 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("ICC2", "CONS", idtmed[225], dgh, 7); gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY"); - // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART + // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // UPPER PART - dgh[0] = 62.1; + dgh[0] = 62.; dgh[1] = 74.5; dgh[2] = 0.5; dgh[3] = 12.; @@ -4330,19 +4812,19 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("ICU3", "TUBS", idtmed[213], dgh, 5); gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); - // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART + // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART // LOWER PART - dgh[0] = 62.1; + dgh[0] = 62.; 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"); - - // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART - // UPPER PART + gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY"); + + // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART + // UPPER PART dgh[0] = 62.1; dgh[1] = 74.5; @@ -4352,8 +4834,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("ICC3", "TUBS", idtmed[225], dgh, 5); gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY"); - // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART - // LOWER PART + // -- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART + // LOWER PART dgh[0] = 62.1; dgh[1] = 74.5; @@ -4483,8 +4965,8 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->Gsvolu("IRA2", "BOX ", idtmed[268], dgh, 3); gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "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 + 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 dgh[2] = 190.; gMC->Gsvolu("IRA3", "BOX ", idtmed[205], dgh, 3); gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY"); @@ -4499,14 +4981,14 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 59.; dgh[2] = 0.6; gMC->Gsvolu("ICYL", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY"); - gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY"); + gMC->Gspos("ICYL", 1, "ALIC", 0., 0., -74.1,idrotm[199], "ONLY"); + gMC->Gspos("ICYL", 2, "ALIC", 0., 0., 74.1, 0, "ONLY"); // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS dgh[0] = 0.; - dgh[1] = 3.; - dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3 + 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"); @@ -4515,7 +4997,7 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ 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", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY"); // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER @@ -4523,9 +5005,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 12.; dgh[2] = 5.; gMC->Gsvolu("ISR2", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY"); + gMC->Gspos("ISR2", 1, "ITSV", -53.5, 0., -125.5, idrotm[199], "MANY"); gMC->Gsvolu("ISR3", "BOX ", idtmed[210], dgh, 3); - gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY"); + gMC->Gspos("ISR3", 1, "ITSV", 53.5, 0., -125.5, idrotm[199], "MANY"); dgh[0] = 5.-2.; dgh[1] = 12.-2.; @@ -4541,9 +5023,9 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ dgh[1] = 5.; dgh[2] = 2.; gMC->Gsvolu("ISR6", "TUBE", idtmed[210], dgh, 3); - gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY"); - gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY"); - gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY"); + gMC->Gspos("ISR6", 1, "ITSV", 0., 54., -77., idrotm[199], "MANY"); + gMC->Gspos("ISR6", 2, "ITSV", 0., 54., 77., idrotm[199], "MANY"); + gMC->Gspos("ISR6", 3, "ITSV", 0., -54., 77., idrotm[199], "MANY"); // --- Outputs the geometry tree in the EUCLID/CAD format @@ -4551,529 +5033,914 @@ void AliITSvPPRasymmFMD::CreateGeometry(){ gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5); } + + { + if (!gGeoManager) { + AliError("TGeoManager doesn't exist !"); + return; + } + + //====== Converting mother volumes of alignable objects + //====== into TGeoAssemblies : + + TObjArray *list = gGeoManager->GetListOfVolumes(); + + { + char spdLaddName[20] = "I10B"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName,toTransform->GetName()) == 0); + } + + // SPD 2 + { + char spdLaddName[20] = "I20B"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName, toTransform->GetName()) == 0); + } + + //--- + + // SPD 1 + { + char spdLaddName[20] = "I107"; // "I107" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName,toTransform->GetName()) == 0); + } + + // SPD 2 + { + char spdLaddName[20] = "I1D7"; // "I1D7" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(spdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(spdLaddName, toTransform->GetName()) == 0); + } + + // SDD 1 + { + char sddLaddName[20] = "I004";// "I302" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddLaddName, toTransform->GetName()) == 0); + } + + // SDD 2 + { + char sddLaddName[20] = "I005";// "I402" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddLaddName, toTransform->GetName()) == 0); + } + + + // SSD 1 + { + char ssdLaddName[20] = "I565";// "I562" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(ssdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(ssdLaddName,toTransform->GetName()) == 0); + } + + // SSD 2 + { + char ssdLaddName[20] = "I569";// "I566" + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(ssdLaddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(ssdLaddName, toTransform->GetName()) == 0); + } + + + //====== Converting some virtual volumes to assemblies in order + //====== to avoid overlaps : + + { + char sddName[20] = "I047"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + { + char sddName[20] = "I048"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + { + char sddName[20] = "I018"; + + TGeoVolume *toTransform = gGeoManager->FindVolumeFast(sddName); + Int_t index = list->IndexOf(toTransform); + do { + TGeoVolume *transformed = 0; // this will be in fact TGeoVolumeAssembly + if (toTransform) + transformed = TGeoVolumeAssembly::MakeAssemblyFromVolume(toTransform); + if (transformed) + gGeoManager->ReplaceVolume(toTransform, transformed); + index++; + toTransform = (TGeoVolume*)list->At(index); + } + while (strcmp(sddName, toTransform->GetName()) == 0); + } + + + } + } -//_____________________________________________________________________________ +//______________________________________________________________________ void AliITSvPPRasymmFMD::CreateMaterials(){ -//////////////////////////////////////////////////////////////////////// - // - // Create ITS materials - // This function defines the default materials used in the Geant - // Monte Carlo simulations for the geometries AliITSv1, AliITSv3, - // AliITSvPPRasymmFMD. - // In general it is automatically replaced by - // the CreatMaterials routine defined in AliITSv?. Should the function - // CreateMaterials not exist for the geometry version you are using this - // one is used. See the definition found in AliITSv5 or the other routine - // for a complete definition. - // + // Create ITS materials + // This function defines the default materials used in the Geant + // Monte Carlo simulations for the geometries AliITSv1, AliITSv3, + // AliITSvPPRasymmFMD. + // In general it is automatically replaced by + // the CreateMaterials routine defined in AliITSv?. Should the function + // CreateMaterials not exist for the geometry version you are using this + // one is used. See the definition found in AliITSv5 or the other routine + // for a complete definition. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + + Int_t ifield = gAlice->Field()->Integ(); + Float_t fieldm = gAlice->Field()->Max(); + + Float_t tmaxfd = 0.1; // 1.0; // Degree + Float_t stemax = 1.0; // cm + Float_t deemax = 0.1; // 30.0; // Fraction of particle's energy 0Field()->Integ(); - Float_t fieldm = gAlice->Field()->Max(); + //SDD LV+signal cable - Float_t tmaxfd = 0.1; // 1.0; // Degree - Float_t stemax = 1.0; // cm - Float_t deemax = 0.1; // 30.0; // Fraction of particle's energy 0 + +
+ +

The Exel spread sheet from which these density number come from. + + */ + //End_Html + + // AliMaterial(86,"AIRFMDSDD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + Float_t aA[13],zZ[13],wW[13],den; + // From Pierluigi Barberis calculations of 2SPD+1SDD October 2 2002. + zZ[0] = 1.0; aA[0] = 1.00794; // Hydrogen + zZ[1] = 6.0; aA[1] = 12.011; // Carbon + zZ[2] = 7.0; aA[2] = 14.00674; // Nitrogen + zZ[3] = 8.0; aA[3] = 15.9994; // Oxigen + zZ[4] = 14.0; aA[4] = 28.0855; // Silicon + zZ[5] = 24.0; aA[5] = 51.9961; //Cromium + zZ[6] = 25.0; aA[6] = 54.938049; // Manganese + zZ[7] = 26.0; aA[7] = 55.845; // Iron + zZ[8] = 28.0; aA[8] = 58.6934; // Nickle + zZ[9] = 29.0; aA[9] = 63.546; // Copper + zZ[10] = 13.0; aA[10] = 26.981539; // Alulminum + zZ[11] = 47.0; aA[11] = 107.8682; // Silver + zZ[12] = 27.0; aA[12] = 58.9332; // Cobolt + wW[0] = 0.019965; + wW[1] = 0.340961; + wW[2] = 0.041225; + wW[3] = 0.200352; + wW[4] = 0.000386; + wW[5] = 0.001467; + wW[6] = 0.000155; + wW[7] = 0.005113; + wW[8] = 0.000993; + wW[9] = 0.381262; + wW[10] = 0.008121; + wW[11] = 0.000000; + wW[12] = 0.000000; + if(fByThick){// New values seeITS_MatBudget_4B.xls + den = 1.5253276; // g/cm^3 Cell O370 + }else{ + den = 2.58423412; // g/cm^3 Cell L370 + } // end if fByThick + //den = 6161.7/(3671.58978);//g/cm^3 Volume does not exclude holes + AliMixture(86,"AIRFMDSDD$",aA,zZ,den,+11,wW); + AliMedium(86,"AIRFMDSDD$",86,0,ifield,fieldm,tmaxfdAir,stemaxAir, + deemaxAir,epsilAir,stminAir); + + //AliMaterial(87,"AIRFMDSSD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03); + // From Pierluigi Barberis calculations of SSD October 2 2002. + wW[0] = 0.019777; + wW[1] = 0.325901; + wW[2] = 0.031848; + wW[3] = 0.147668; + wW[4] = 0.030609; + wW[5] = 0.013993; + wW[6] = 0.001479; + wW[7] = 0.048792; + wW[8] = 0.009477; + wW[9] = 0.350697; + wW[10] = 0.014546; + wW[11] = 0.005213; + wW[12] = 0.000000; + if(fByThick){// New values seeITS_MatBudget_4B.xls + den = 1.2464275; // g/cm^3 Cell O403 + }else{ + den = 1.28134409; // g/cm^3 Cell L403 + } // end if fByThick + //den = 7666.3/(9753.553259); // volume does not exclude holes + AliMixture(87,"AIRFMDSSD$",aA,zZ,den,+12,wW); + AliMedium(87,"AIRFMDSSD$",87,0,ifield,fieldm,tmaxfdAir,stemaxAir, + deemaxAir,epsilAir,stminAir); + + //AliMaterial(88,"ITS SANDW CFMDSDD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); + // From Pierluigi Barberis calculations of 1SDD+Carbon fiber October 2 2002 + wW[0] = 0.016302; + wW[1] = 0.461870; + wW[2] = 0.033662; + wW[3] = 0.163595; + wW[4] = 0.000315; + wW[5] = 0.001197; + wW[6] = 0.000127; + wW[7] = 0.004175; + wW[8] = 0.000811; + wW[9] = 0.311315; + wW[10] = 0.006631; + wW[11] = 0.000000; + wW[12] = 0.000000; + if(fByThick){// New values seeITS_MatBudget_4B.xls + den = 1.9353276; // g/cm^3 Cell N370 + }else{ + den = 3.2788626; // g/cm^3 Cell F370 + } // end if fByThick + //den = 7667.1/(3671.58978); // Volume does not excludeholes + AliMixture(88,"ITS SANDW CFMDSDD$",aA,zZ,den,+11,wW); + AliMedium(88,"ITS SANDW CFMDSDD$",88,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + //AliMaterial(89,"ITS SANDW CFMDSSD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); + // From Pierluigi Barberis calculations of SSD+Carbon fiber October 2 2002. + wW[0] = 0.014065; + wW[1] = 0.520598; + wW[2] = 0.022650; + wW[3] = 0.105018; + wW[4] = 0.021768; + wW[5] = 0.009952; + wW[6] = 0.001051; + wW[7] = 0.034700; + wW[8] = 0.006740; + wW[9] = 0.249406; + wW[10] = 0.010345; + wW[11] = 0.0003707; + wW[12] = 0.000000; + if(fByThick){// New values seeITS_MatBudget_4B.xls + den = 1.6564275; // g/cm^3 Cell N304 + }else{ + den = 1.7028296; // g/cm^3 Cell F304 + } // end if fByThick + //den = 1166.5/(3671.58978); // Volume does not exclude holes + AliMixture(89,"ITS SANDW CFMDSSD$",aA,zZ,den,+12,wW); + AliMedium(89,"ITS SANDW CFMDSSD$",89,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + //AliMaterial(97,"SPD SERVICES$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03); + // From Pierluigi Barberis calculations of 1SPD October 2 2002. + wW[0] = 0.005970; + wW[1] = 0.304704; + wW[2] = 0.042510; + wW[3] = 0.121715; + wW[4] = 0.001118; + wW[5] = 0.030948; + wW[6] = 0.003270; + wW[7] = 0.107910; + wW[8] = 0.020960; + wW[9] = 0.360895; + wW[10] = 0.000000; + wW[11] = 0.000000; + wW[12] = 0.000000; + if(fByThick){// New values seeITS_MatBudget_4B.xls + den = 80.31136576; // g/cm^3 Cell H329 + }else{ + den = 87.13062; // g/cm^3 Cell G329 + } // end if fByThick + //den = 1251.3/(0.05*2.0*TMath::Pi()*(7.75*7.75 - 3.7*3.7)); // g/cm^3 + AliMixture(97,"SPD SERVICES$",aA,zZ,den,+10,wW); + AliMedium(97,"SPD SERVICES$",97,0,ifield,fieldm,tmaxfd,stemax, + deemax,epsil,stmin); + + + // Special media + + AliMaterial(90,"SPD shield$", 12.011, 6., 1.93/10. , 22.1*10., 999); + AliMedium(90,"SPD shield$",90,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + + // SPD End Ladder (data from Petra Riedler) + Float_t aSPDel[5] = {1.00794,12.0107,14.01,15.9994,63.54 }; + Float_t zSPDel[5] = {1.,6.,7.,8.,29.}; + Float_t wSPDel[5] = {0.004092,0.107274,0.011438,0.032476,0.844719}; + Float_t dSPDel = 3.903403; + + // AliMaterial(91, "SPD End ladder$", 47.0447, 21.7963, 3.6374, 4.4711, 999); + AliMixture(91,"SPD End ladder$",aSPDel,zSPDel,dSPDel,5,wSPDel); + AliMedium(91,"SPD End ladder$",91,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + + AliMaterial(92, "SPD cone$",28.0855, 14., 2.33, 9.36, 999); + AliMedium(92,"SPD cone$",92,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + /* Material with fractional Z not actually used + AliMaterial(93, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999); + AliMedium(93,"SDD End ladder$",93,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + */ + AliMaterial(94, "SDD cone$",63.546, 29., 1.15, 1.265, 999); + AliMedium(94,"SDD cone$",94,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + /* Material with fractional Z not actually used + AliMaterial(95, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999); + AliMedium(95,"SSD End ladder$",95,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ); + */ + 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); } //______________________________________________________________________ void AliITSvPPRasymmFMD::InitAliITSgeom(){ -// Based on the geometry tree defined in Geant 3.21, this -// routine initilizes the Class AliITSgeom from the Geant 3.21 ITS geometry -// sturture. - if(gMC->IsA()!=AliGeant3::Class()) { - Error("InitAliITSgeom", - "Wrong Monte Carlo. InitAliITSgeom uses TGeant3 calls"); - return; - } // end if - cout << "Reading Geometry transformation directly from Geant 3." << endl; - const Int_t nlayers = 6; - const Int_t ndeep = 9; - Int_t itsGeomTreeNames[nlayers][ndeep],lnam[20],lnum[20]; - Int_t nlad[nlayers],ndet[nlayers]; - Double_t t[3],r[10]; - Float_t par[20],att[20]; - Int_t npar,natt,idshape,imat,imed; - AliITSGeant3Geometry *ig = new AliITSGeant3Geometry(); - Int_t mod,lay,lad,det,i,j,k; - Char_t names[nlayers][ndeep][4]; - Int_t itsGeomTreeCopys[nlayers][ndeep]; - if(fMinorVersion == 1){ // Option A - Char_t *namesA[nlayers][ndeep] = { - {"ALIC","ITSV","ITSD","IT12","I12A","I10A","I103","I101","ITS1"}, // lay=1 - {"ALIC","ITSV","ITSD","IT12","I12A","I20A","I1D3","I1D1","ITS2"}, // lay=2 - {"ALIC","ITSV","ITSD","IT34","I004","I302","ITS3"," "," "}, // lay=3 - {"ALIC","ITSV","ITSD","IT34","I005","I402","ITS4"," "," "}, // lay=4 - {"ALIC","ITSV","ITSD","IT56","I565","I562","ITS5"," "," "}, // lay=5 - {"ALIC","ITSV","ITSD","IT56","I569","I566","ITS6"," "," "}};// lay=6 - Int_t itsGeomTreeCopysA[nlayers][ndeep]= {{1,1,1,1,10, 2, 4,1,1},// lay=1 - {1,1,1,1,10, 4, 4,1,1},// lay=2 - {1,1,1,1,14, 6, 1,0,0},// lay=3 - {1,1,1,1,22, 8, 1,0,0},// lay=4 - {1,1,1,1,34,22, 1,0,0},// lay=5 - {1,1,1,1,38,25, 1,0,0}};//lay=6 - for(i=0;iStringToInt(names[i][j]); + // Based on the geometry tree defined in Geant 3.21, this + // routine initilizes the Class AliITSgeom from the Geant 3.21 ITS geometry + // sturture. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + const Int_t knlayers = 6; + const Int_t kndeep = 3; + const AliITSDetector kidet[knlayers]={kSPD,kSPD,kSDD,kSDD,kSSD,kSSD}; + const TString knames[2][knlayers] = { + {"/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12A_%d/I10A_%d/I103_%d/I101_1/ITS1_1", // lay=1 + "/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12A_%d/I20A_%d/I1D3_%d/I1D1_1/ITS2_1", // lay=2 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_%d/I302_%d/ITS3_%d", // lay=3 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_%d/I402_%d/ITS4_%d", // lay=4 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_%d/I562_%d/ITS5_%d", // lay=5 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_%d/I566_%d/ITS6_%d"},// lay=6 + {"/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_%d/I10B_%d/I107_%d/I101_1/ITS1_1", // lay=1 + "/ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_%d/I20B_%d/I1D7_%d/I1D1_1/ITS2_1", // lay=2 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_%d/I302_%d/ITS3_%d", // lay=3 + "/ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_%d/I402_%d/ITS4_%d", // lay=4 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_%d/I562_%d/ITS5_%d", // lay=5 + "/ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_%d/I566_%d/ITS6_%d"} + }; + const Int_t kitsGeomTreeCopys[knlayers][kndeep]= {{10, 2, 4},// lay=1 + {10, 4, 4},// lay=2 + {14, 6, 1},// lay=3 + {22, 8, 1},// lay=4 + {34,22, 1},// lay=5 + {38,25, 1}};//lay=6 + Int_t nlad[knlayers],ndet[knlayers]; + Int_t mod,lay,lad=0,det=0,i,j,k,cp0,cp1,cp2; + TString path,shapeName; + TGeoHMatrix materix; + Double_t trans[3]={3*0.0},rot[10]={9*0.0,1.0}; + TArrayD shapePar; + TArrayF shapeParF; + Bool_t shapeDefined[3]={kFALSE,kFALSE,kFALSE}; + + AliDebug(1,"Reading Geometry transformation directly from Modler."); mod = 0; - for(i=0;iGetGeometry(ndeep,lnam,lnum,t,r,idshape,npar,natt, - par,att,imat,imed); - fITSgeom->CreatMatrix(mod,lay,lad,det,kSPD,t,r); - if(!(fITSgeom->IsShapeDefined((Int_t)kSPD))) - fITSgeom->ReSetShape(kSPD, - new AliITSgeomSPD425Short(npar,par)); - } // end for det - } // end for k - } // end for j - break; - case 3: case 4: case 5: case 6: // layers 3-6 - lnum[6] = 1; - for(lad=1;lad<=itsGeomTreeCopys[lay-1][4];lad++){ - lnum[4] = lad; - for(det=1;det<=itsGeomTreeCopys[lay-1][5];det++){ - lnum[5] = det; - mod++; - ig->GetGeometry(7,lnam,lnum,t,r,idshape,npar,natt, - par,att,imat,imed); - switch (lay){ - case 3: case 4: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSDD,t,r); - if(!(fITSgeom->IsShapeDefined(kSDD))) - fITSgeom->ReSetShape(kSDD, - new AliITSgeomSDD256(npar,par)); - break; - case 5: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSSD,t,r); - if(!(fITSgeom->IsShapeDefined(kSSD))) - fITSgeom->ReSetShape(kSSD, - new AliITSgeomSSD275and75(npar,par)); - break; - case 6: - fITSgeom->CreatMatrix(mod,lay,lad,det,kSSD,t,r); - if(!(fITSgeom->IsShapeDefined(kSSD))) - fITSgeom->ReSetShape(kSSD, - new AliITSgeomSSD75and275(npar,par)); - break; - } // end switch - } // end for det - } // end for lad - break; - } // end switch + ndet[0]= 4;ndet[1]= 4;ndet[2]= 6;ndet[3]= 8;ndet[4]=22;ndet[5]=25; + AliITSgeom* geom = new AliITSgeom(0,6,nlad,ndet,mod); + SetITSgeom(geom); + mod = 0; + for(lay=1;lay<=knlayers;lay++){ + for(cp0=1;cp0<=kitsGeomTreeCopys[lay-1][0];cp0++){ + for(cp1=1;cp1<=kitsGeomTreeCopys[lay-1][1];cp1++){ + for(cp2=1;cp2<=kitsGeomTreeCopys[lay-1][2];cp2++){ + path.Form(knames[fMinorVersion-1][lay-1].Data(), + cp0,cp1,cp2); + switch (lay){ + case 1:{ + det = cp2; + lad = cp1+2*(cp0-1); + }break; + case 2:{ + det = cp2; + lad = cp1+4*(cp0-1); + } break; + case 3: case 4: case 5: case 6:{ + det = cp1; + lad = cp0; + } break; + } // end switch + //AliInfo(Form("path=%s lay=%d lad=%d det=%d", + // path.Data(),lay,lad,det)); + gMC->GetTransformation(path.Data(),materix); + gMC->GetShape(path.Data(),shapeName,shapePar); + shapeParF.Set(shapePar.GetSize()); + for(i=0;iCreateMatrix(mod,lay,lad,det,kidet[lay-1],trans,rot); + geom->SetTrans(mod,materix.GetTranslation()); + geom->SetRotMatrix(mod,materix.GetRotationMatrix()); + geom->GetGeomMatrix(mod)->SetPath(path.Data()); + switch (lay){ + case 1: case 2: + if(!shapeDefined[kSPD]){ + geom->ReSetShape(kSPD,new AliITSgeomSPD425Short( + shapeParF.GetSize(),shapeParF.GetArray())); + shapeDefined[kSPD] = kTRUE; + }break; + case 3: case 4: + if(!shapeDefined[kSDD]){ + geom->ReSetShape(kSDD,new AliITSgeomSDD256( + shapeParF.GetSize(),shapeParF.GetArray())); + shapeDefined[kSDD] = kTRUE; + }break; + case 5: case 6: + if(!shapeDefined[kSSD]){ + geom->ReSetShape(kSSD,new AliITSgeomSSD75and275( + shapeParF.GetSize(),shapeParF.GetArray())); + shapeDefined[kSSD] = kTRUE; + }break; + default:{ + }break; + } // end switch + mod++; + } /// end for cp2 + } // end for cp1 + } // end for cp0 } // end for lay return; } -//_____________________________________________________________________________ +//______________________________________________________________________ void AliITSvPPRasymmFMD::Init(){ -//////////////////////////////////////////////////////////////////////// -// Initialise the ITS after it has been created. -//////////////////////////////////////////////////////////////////////// - Int_t i; - - cout << endl; - for(i=0;i<26;i++) cout << "*"; - cout << " ITSvPPRasymm" << fMinorVersion << "_Init "; - for(i=0;i<25;i++) cout << "*";cout << endl; -// + // Initialise the ITS after it has been created. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + + AliDebug(1,Form("Init: Major version %d Minor version %d",fMajorVersion, + fMinorVersion)); + // + /* obsolete initialization of AliITSgeom from external "det" file if(fRead[0]=='\0') strncpy(fRead,fEuclidGeomDet,60); if(fWrite[0]=='\0') strncpy(fWrite,fEuclidGeomDet,60); - if(fITSgeom!=0) delete fITSgeom; - fITSgeom = new AliITSgeom(); - if(fGeomDetIn) fITSgeom->ReadNewFile(fRead); - if(!fGeomDetIn) this->InitAliITSgeom(); - if(fGeomDetOut) fITSgeom->WriteNewFile(fWrite); + AliITSgeom* geom = new AliITSgeom(); + SetITSgeom(geom); + if(fGeomDetIn) GetITSgeom()->ReadNewFile(fRead); + else this->InitAliITSgeom(); + */ + UpdateInternalGeometry(); AliITS::Init(); -// - for(i=0;i<72;i++) cout << "*"; - cout << endl; + if(fGeomDetOut) GetITSgeom()->WriteNewFile(fWrite); + + // fIDMother = gMC->VolId("ITSV"); // ITS Mother Volume ID. } -//_____________________________________________________________________________ +//______________________________________________________________________ void AliITSvPPRasymmFMD::SetDefaults(){ // sets the default segmentation, response, digit and raw cluster classes + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + const Float_t kconv = 1.0e+04; // convert cm to microns - cout << "AliITSvPPRasymmFMD::SetDefaults" << endl; + if(!fDetTypeSim){ + Warning("SetDefaults","Error fDetTypeSim not defined"); + return; + } - AliITSDetType *iDetType; AliITSgeomSPD *s0; AliITSgeomSDD *s1; AliITSgeomSSD *s2; Int_t i; Float_t bx[256],bz[280]; + fDetTypeSim->SetDefaults(); + //SPD - iDetType=DetType(kSPD); - s0 = (AliITSgeomSPD*) fITSgeom->GetShape(kSPD);// Get shape info. Do it this way for now. - AliITSresponse *resp0=new AliITSresponseSPD(); - SetResponseModel(kSPD,resp0); - AliITSsegmentationSPD *seg0=new AliITSsegmentationSPD(fITSgeom); + 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. @@ -5089,38 +5956,42 @@ void AliITSvPPRasymmFMD::SetDefaults(){ seg0->SetBinSize(bx,bz); // Based on AliITSgeomSPD for now. SetSegmentationModel(kSPD,seg0); // set digit and raw cluster classes to be used - const char *kData0=(iDetType->GetResponseModel())->DataType(); - if (strstr(kData0,"real")) iDetType->ClassNames("AliITSdigit", - "AliITSRawClusterSPD"); - else iDetType->ClassNames("AliITSdigitSPD","AliITSRawClusterSPD"); -// SetSimulationModel(kSPD,new AliITSsimulationSPD(seg0,resp0)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSPD()); - + const char *kData0=(fDetTypeSim->GetCalibrationModel( + GetITSgeom()->GetStartSPD()))->DataType(); + if (strstr(kData0,"real")) fDetTypeSim->SetDigitClassName(kSPD, + "AliITSdigit"); + else fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigitSPD"); // SDD - iDetType=DetType(kSDD); - s1 = (AliITSgeomSDD*) fITSgeom->GetShape(kSDD);// Get shape info. Do it this way for now. - AliITSresponseSDD *resp1=new AliITSresponseSDD("simulated"); - SetResponseModel(kSDD,resp1); - AliITSsegmentationSDD *seg1=new AliITSsegmentationSDD(fITSgeom,resp1); + 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=(iDetType->GetResponseModel())->DataType(); - const char *kopt=iDetType->GetResponseModel()->ZeroSuppOption(); + 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") ){ - iDetType->ClassNames("AliITSdigit","AliITSRawClusterSDD"); - } else iDetType->ClassNames("AliITSdigitSDD","AliITSRawClusterSDD"); -// SetSimulationModel(kSDD,new AliITSsimulationSDD(seg1,resp1)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSDD()); - + fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigit"); + } else fDetTypeSim->SetDigitClassName(kSDD,"AliITSdigitSDD"); // SSD Layer 5 - iDetType=DetType(kSSD); - s2 = (AliITSgeomSSD*) fITSgeom->GetShape(kSSD);// Get shape info. Do it this way for now. - AliITSresponse *resp2=new AliITSresponseSSD("simulated"); - SetResponseModel(kSSD,resp2); - AliITSsegmentationSSD *seg2=new AliITSsegmentationSSD(fITSgeom); + + 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. @@ -5130,101 +6001,110 @@ void AliITSvPPRasymmFMD::SetDefaults(){ 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=(iDetType->GetResponseModel())->DataType(); - if(strstr(kData2,"real") ) iDetType->ClassNames("AliITSdigit", - "AliITSRawClusterSSD"); - else iDetType->ClassNames("AliITSdigitSSD","AliITSRawClusterSSD"); -// SetSimulationModel(kSSD,new AliITSsimulationSSD(seg2,resp2)); -// iDetType->ReconstructionModel(new AliITSClusterFinderSSD()); - - if(kNTYPES>3){ + 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!"); }// end if return; } //______________________________________________________________________ -void AliITSvPPRasymmFMD::DrawModule(){ -//////////////////////////////////////////////////////////////////////// -// Draw a shaded view of the FMD version 8. -//////////////////////////////////////////////////////////////////////// - - // Set everything unseen - gMC->Gsatt("*", "seen", -1); - // - // Set ALIC mother visible - gMC->Gsatt("ALIC","SEEN",0); - // - // Set the volumes visible - gMC->Gsatt("ITSD","SEEN",0); - gMC->Gsatt("ITS1","SEEN",1); - gMC->Gsatt("ITS2","SEEN",1); - gMC->Gsatt("ITS3","SEEN",1); - gMC->Gsatt("ITS4","SEEN",1); - gMC->Gsatt("ITS5","SEEN",1); - gMC->Gsatt("ITS6","SEEN",1); - - gMC->Gsatt("IPCB","SEEN",1); - gMC->Gsatt("ICO2","SEEN",1); - gMC->Gsatt("ICER","SEEN",0); - gMC->Gsatt("ISI2","SEEN",0); - gMC->Gsatt("IPLA","SEEN",0); - gMC->Gsatt("ICO3","SEEN",0); - gMC->Gsatt("IEPX","SEEN",0); - gMC->Gsatt("ISI3","SEEN",1); - gMC->Gsatt("ISUP","SEEN",0); - gMC->Gsatt("ICHO","SEEN",0); - gMC->Gsatt("ICMO","SEEN",0); - gMC->Gsatt("ICMD","SEEN",0); - gMC->Gsatt("ICCO","SEEN",1); - gMC->Gsatt("ICCM","SEEN",0); - gMC->Gsatt("ITMD","SEEN",0); - gMC->Gsatt("ITTT","SEEN",1); - - // - gMC->Gdopt("hide", "on"); - gMC->Gdopt("shad", "on"); - gMC->Gsatt("*", "fill", 7); - gMC->SetClipBox("."); - gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300); - gMC->DefaultRange(); - gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07); - gMC->Gdhead(1111, "Inner Tracking System Version 1"); - gMC->Gdman(17, 6, "MAN"); +void AliITSvPPRasymmFMD::DrawModule() const{ + // Draw a shaded view of the FMD version 10. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + + // Set everything unseen + gMC->Gsatt("*", "seen", -1); + // + // Set ALIC mother visible + gMC->Gsatt("ALIC","SEEN",0); + // + // Set the volumes visible + gMC->Gsatt("ITSD","SEEN",0); + gMC->Gsatt("ITS1","SEEN",1); + gMC->Gsatt("ITS2","SEEN",1); + gMC->Gsatt("ITS3","SEEN",1); + gMC->Gsatt("ITS4","SEEN",1); + gMC->Gsatt("ITS5","SEEN",1); + gMC->Gsatt("ITS6","SEEN",1); + // + gMC->Gsatt("IPCB","SEEN",1); + gMC->Gsatt("ICO2","SEEN",1); + gMC->Gsatt("ICER","SEEN",0); + gMC->Gsatt("ISI2","SEEN",0); + gMC->Gsatt("IPLA","SEEN",0); + gMC->Gsatt("ICO3","SEEN",0); + gMC->Gsatt("IEPX","SEEN",0); + gMC->Gsatt("ISI3","SEEN",1); + gMC->Gsatt("ISUP","SEEN",0); + gMC->Gsatt("ICHO","SEEN",0); + gMC->Gsatt("ICMO","SEEN",0); + gMC->Gsatt("ICMD","SEEN",0); + gMC->Gsatt("ICCO","SEEN",1); + gMC->Gsatt("ICCM","SEEN",0); + gMC->Gsatt("ITMD","SEEN",0); + gMC->Gsatt("ITTT","SEEN",1); + // + gMC->Gdopt("hide", "on"); + gMC->Gdopt("shad", "on"); + gMC->Gsatt("*", "fill", 7); + gMC->SetClipBox("."); + gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300); + gMC->DefaultRange(); + gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07); + gMC->Gdhead(1111, "Inner Tracking System Version 1"); + gMC->Gdman(17, 6, "MAN"); } -//_____________________________________________________________________________ +/* +//______________________________________________________________________ void AliITSvPPRasymmFMD::StepManager(){ -//////////////////////////////////////////////////////////////////////// -// Called for every step in the ITS, then calles the AliITShit class -// creator with the information to be recoreded about that hit. -// The value of the macro ALIITSPRINTGEOM if set to 1 will allow the -// printing of information to a file which can be used to create a .det -// file read in by the routine CreateGeometry(). If set to 0 or any other -// value except 1, the default behavior, then no such file is created nor -// it the extra variables and the like used in the printing allocated. -//////////////////////////////////////////////////////////////////////// + // Called for every step in the ITS, then calles the AliITShit class + // creator with the information to be recoreded about that hit. + // The value of the macro ALIITSPRINTGEOM if set to 1 will allow the + // printing of information to a file which can be used to create a .det + // file read in by the routine CreateGeometry(). If set to 0 or any other + // value except 1, the default behavior, then no such file is created nor + // it the extra variables and the like used in the printing allocated. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + Int_t copy, id; TLorentzVector position, momentum; static TLorentzVector position0; static Int_t stat0=0; - if((id=gMC->CurrentVolID(copy) == fIDMother)&& - (gMC->IsTrackEntering()||gMC->IsTrackExiting())){ - gMC->TrackPosition(position); // Get Position - gMC->TrackMomentum(momentum); // Get Momentum + + if(!(this->IsActive())){ + return; + } // end if !Active volume. + + if(!(gMC->TrackCharge())) return; + + id=gMC->CurrentVolID(copy); + + Bool_t sensvol = kFALSE; + for(Int_t kk=0;kk<6;kk++)if(id == fIdSens[kk])sensvol=kTRUE; + if(sensvol && (gMC->IsTrackExiting())){ copy = fTrackReferences->GetEntriesFast(); TClonesArray &lTR = *fTrackReferences; // Fill TrackReference structure with this new TrackReference. - AliTrackReference *tr = new(lTR[copy]) AliTrackReference(); - tr->SetTrack(gAlice->CurrentTrack()); - tr->SetPosition(position.X(),position.Y(),position.Z()); - tr->SetMomentum(momentum.Px(),momentum.Py(),momentum.Pz()); - tr->SetLength(gMC->TrackLength()); + new(lTR[copy]) AliTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber()); } // if Outer ITS mother Volume - if(!(this->IsActive())){ - return; - } // end if !Active volume. + + Int_t copy1,copy2; -// Float_t hits[8]; Int_t vol[5]; TClonesArray &lhits = *fHits; // @@ -5301,29 +6181,275 @@ void AliITSvPPRasymmFMD::StepManager(){ // gMC->TrackPosition(position); gMC->TrackMomentum(momentum); -/* - hits[0]=position[0]; - hits[1]=position[1]; - hits[2]=position[2]; - hits[3]=momentum[0]; - hits[4]=momentum[1]; - hits[5]=momentum[2]; - hits[6]=gMC->Edep(); - hits[7]=gMC->TrackTime(); -*/ vol[4] = stat0; if(gMC->IsTrackEntering()){ position0 = position; stat0 = vol[3]; + return; } // end if IsEntering // Fill hit structure with this new hit. -// new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits); - new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol, + + new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, gMC->Edep(),gMC->TrackTime(),position, position0,momentum); - // + position0 = position; stat0 = vol[3]; return; } + +*/ +//______________________________________________________________________ +void AliITSvPPRasymmFMD::StepManager(){ + // Called for every step in the ITS, then calles the AliITShit class + // creator with the information to be recoreded about that hit. + // The value of the macro ALIITSPRINTGEOM if set to 1 will allow the + // printing of information to a file which can be used to create a .det + // file read in by the routine CreateGeometry(). If set to 0 or any other + // value except 1, the default behavior, then no such file is created nor + // it the extra variables and the like used in the printing allocated. + // Inputs: + // none. + // Outputs: + // none. + // Return: + // none. + + if(!(this->IsActive())) return; + if(!(gMC->TrackCharge())) return; + + Int_t copy, id,kk; + Bool_t sensvol = kFALSE; + + id = gMC->CurrentVolID(copy); + for(kk=0;kkIsTrackExiting())){ + copy = fTrackReferences->GetEntriesFast(); + TClonesArray &lTR = *fTrackReferences; + // Fill TrackReference structure with this new TrackReference. + new(lTR[copy]) AliTrackReference( + gAlice->GetMCApp()->GetCurrentTrackNumber()); + } // if Outer ITS mother Volume + //if(!sensvol) return; // not an ITS tracking volume; + + static TLorentzVector position, momentum; // Saves on calls to construtors + static AliITShit hit;// Saves on calls to construtors + Int_t cpn0,cpn1,cpn2,status,mod; + //TClonesArray &lhits = *(GetDetTypeSim()->GetHits()); + TClonesArray &lhits = *(Hits()); + // + // Track status + status = 0; + if(gMC->IsTrackInside()) status += 1; + if(gMC->IsTrackEntering()) status += 2; + if(gMC->IsTrackExiting()) status += 4; + if(gMC->IsTrackOut()) status += 8; + if(gMC->IsTrackDisappeared()) status += 16; + if(gMC->IsTrackStop()) status += 32; + if(gMC->IsTrackAlive()) status += 64; + // + switch (kk){ + case 0:case 1: // SPD + gMC->CurrentVolOffID(2,cpn2); + gMC->CurrentVolOffID(3,cpn1); + gMC->CurrentVolOffID(4,cpn0); + break; + case 2:case 3: // SDD + cpn2 = 1; + gMC->CurrentVolOffID(1,cpn1); + gMC->CurrentVolOffID(2,cpn0); + break; + case 4:case 5: // SSD + cpn2 = 1; + gMC->CurrentVolOffID(1,cpn1); + gMC->CurrentVolOffID(2,cpn0); + break; + default: + Error("StepManager","Unknown volume kk=%d",kk); + return; // not an ITS sensitive volume. + } // + fIgm.DecodeDetector(mod,kk+1,cpn0,cpn1,cpn2); + //Info("StepManager","lay=%d mod=%d cpn0=%d cpn1=%d cpn2=%d",kk+1,mod,cpn0,cpn1,cpn2); + Int_t lay,lad,det,cpy0,cpy1,cpy2; + fIgm.DecodeDetectorLayers(mod,lay,lad,det); + fIgm.RecodeDetector(mod,cpy0,cpy1,cpy2); +// printf("gMC: kk=%d cpn0=%d cpn1=%d cpn2=%d -> mod=%d -> " +// "lay=%d lad=%d det=%d -> cpn0=%d cpn1=%d cpn2=%d\n", +// kk,cpn0,cpn1,cpn2,mod,lay,lad,det,cpy0,cpy1,cpy2); + // + // Fill hit structure. + // + hit.SetModule(mod); + hit.SetTrack(gAlice->GetMCApp()->GetCurrentTrackNumber()); + gMC->TrackPosition(position); + gMC->TrackMomentum(momentum); + hit.SetPosition(position); + hit.SetTime(gMC->TrackTime()); + hit.SetMomentum(momentum); + hit.SetStatus(status); + hit.SetEdep(gMC->Edep()); + hit.SetShunt(GetIshunt()); + if(gMC->IsTrackEntering()){ + hit.SetStartPosition(position); + hit.SetStartTime(gMC->TrackTime()); + hit.SetStartStatus(status); + return; // don't save entering hit. + } // end if IsEntering + // Fill hit structure with this new hit. + //Info("StepManager","Calling Copy Constructor"); + new(lhits[fNhits++]) AliITShit(hit); // Use Copy Construtor. + // Save old position... for next hit. + hit.SetStartPosition(position); + hit.SetStartTime(gMC->TrackTime()); + hit.SetStartStatus(status); + // + /* + Int_t idettype,ix,iz; + Float_t lx,lz; + Double_t g0[4],l0[4],g1[4]; + position.GetXYZT(g0); + gMC->Gmtod(g0,l0,1); // flag=1 convert coordiantes + gMC->Gdtom(l0,g1,1); // flag=1 convert coordinates + switch(idettype=(Int_t)GetITSgeom()->GetModuleType(mod)){ + case kSPD: + AliITSsegmentationSPD *segspd = (AliITSsegmentationSPD *)GetSegmentationModelByModule(mod); + segspd->LocalToDet((Float_t)l0[0],(Float_t)l0[2],ix,iz); + segspd->DetToLocal(ix,iz,lx,lz); + break; + case kSDD: + AliITSsegmentationSDD *segsdd = (AliITSsegmentationSDD *)GetSegmentationModelByModule(mod); + segsdd->LocalToDet((Float_t)l0[0],(Float_t)l0[2],ix,iz); + segsdd->DetToLocal(ix,iz,lx,lz); + break; + case kSSD: + AliITSsegmentationSSD *segssd = (AliITSsegmentationSSD *)GetSegmentationModelByModule(mod); + segssd->LocalToDet((Float_t)l0[0],(Float_t)l0[2],ix,iz); + segssd->DetToLocal(ix,iz,lx,lz); + break; + default: + ix = iz = -1; + lx = lz = 0.0; + Warning("StepManager","Unknown module type id=%d mod=%d", + (Int_t)(GetITSgeom()->GetModuleType(mod)),mod); + } // end if + printf(" gMC: mod=%d g=%g %g %g %g -> " + "l=%g %g %g %g -> " + "g=%g %g %g %g -> " + "ix=%d iz=%d -> lx=%g lz=%g\n", + mod,g0[0],g0[1],g0[2],g0[3], + l0[0],l0[1],l0[2],l0[3], + g1[0],g1[1],g1[2],g1[3],ix,iz,lx,lz); + GetITSgeom()->GtoL(mod,g0,l0); + GetITSgeom()->LtoG(mod,l0,g1); + printf("ITSgeom: mod=%d g=%g %g %g %g -> " + "l=%g %g %g %g -> " + "g=%g %g %g %g -> " + "ix=%d iz=%d -> lx=%g lz=%g\n", + mod,g0[0],g0[1],g0[2],g0[3], + l0[0],l0[1],l0[2],l0[3], + g1[0],g1[1],g1[2],g1[3],ix,iz,lx,lz); + TGeoNode *cur = gGeoManager->GetCurrentNode(); + cur->MasterToLocal(g0,l0); + cur->LocalToMaster(l0,g1); + printf(" TGeo: mod=%d g=%g %g %g %g -> " + "l=%g %g %g %g -> " + "g=%g %g %g %g\n", + mod,g0[0],g0[1],g0[2],g0[3], + l0[0],l0[1],l0[2],l0[3], + g1[0],g1[1],g1[2],g1[3]); + printf("=====================\n"); + // + */ + return; +} +//______________________________________________________________________ +void AliITSvPPRasymmFMD::PrintAscii(ostream *os)const{ + // Print out class data values in Ascii Form to output stream + // Inputs: + // ostream *os Output stream where Ascii data is to be writen + // Outputs: + // none. + // Return: + // none. +#if defined __GNUC__ +#if __GNUC__ > 2 + ios::fmtflags fmt; +#else + Int_t fmt; +#endif +#else +#if defined __ICC || defined __ECC || defined __xlC__ + ios::fmtflags fmt; +#else + Int_t fmt; +#endif +#endif + + *os << fGeomDetOut << " " << fGeomDetIn << " " << fByThick << " "; + *os << fMajorVersion << " " << fMinorVersion << " "; + *os << "\"" << fEuclidGeomDet.Data() << "\"" << " "; + *os << "\"" << fRead.Data() << "\"" << " "; + *os << "\"" << fWrite.Data() << "\"" << " "; + fmt = os->setf(ios::scientific); // set scientific floating point output + *os << fDet1 << " " << fDet2 << " " << fChip1 << " " << fChip2 << " "; + *os << fRails << " " << fFluid << " " << fIDMother; + os->flags(fmt); // reset back to old Formating. + return; +} +//______________________________________________________________________ +void AliITSvPPRasymmFMD::ReadAscii(istream *is){ + // Read in class data values in Ascii Form to output stream + // Inputs: + // istream *is Input stream where Ascii data is to be read in from + // Outputs: + // none. + // Return: + // none. + Char_t name[120]; + + *is >> fGeomDetOut >> fGeomDetIn >> fByThick; + *is >> fMajorVersion >> fMinorVersion; + *is >> name; + fEuclidGeomDet = name; + *is >> name; + fRead = name; + *is >> name; + fWrite = name; + *is >> fDet1 >> fDet2 >> fChip1 >> fChip2; + *is >> fRails >> fFluid >> fIDMother; + fIgm.SetVersion((AliITSVersion_t)fMajorVersion,fMinorVersion); + fIgm.SetGeometryName("ITS PPR aymmetric services with course" + " cables on cones"); +} +//______________________________________________________________________ +ostream &operator<<(ostream &os,const AliITSvPPRasymmFMD &s){ + // Standard output streaming function + // Inputs: + // ostream &os output steam + // AliITSvPPRasymmFMD &s class to be streamed. + // Output: + // none. + // Return: + // ostream &os The stream pointer + + s.PrintAscii(&os); + return os; +} +//______________________________________________________________________ +istream &operator>>(istream &is,AliITSvPPRasymmFMD &s){ + // Standard inputput streaming function + // Inputs: + // istream &is input steam + // AliITSvPPRasymmFMD &s class to be streamed. + // Output: + // none. + // Return: + // ostream &os The stream pointer + + s.ReadAscii(&is); + return is; +}