#include "TGeoPcon.h"
#include "TRotation.h"
#include "AliITSv11GeometrySSD.h"
+
/////////////////////////////////////////////////////////////////////////////////
// Names of the Sensitive Volumes of Layer 5 and Layer 6
/////////////////////////////////////////////////////////////////////////////////
-const char* AliITSv11GeometrySSD::fgSSDsensitiveVolName5 = "ITSssdSensitivL5";
-const char* AliITSv11GeometrySSD::fgSSDsensitiveVolName6 = "ITSssdSensitivL6";
+const char* AliITSv11GeometrySSD::fgkSSDsensitiveVolName5 = "ITSssdSensitivL5";
+const char* AliITSv11GeometrySSD::fgkSSDsensitiveVolName6 = "ITSssdSensitivL6";
/////////////////////////////////////////////////////////////////////////////////
//Parameters for SSD Geometry
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkSSDTolerance = 0.0001*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDModuleVerticalDisalignment = 0.2*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDModuleSideDisalignment = 0.2*fgkmm;
+// For ladders:
+const Double_t AliITSv11GeometrySSD::fgkSSDLadderVerticalDisalignment = 0.520*fgkmm;
/////////////////////////////////////////////////////////////////////////////////
// Layer5 (lengths are in mm and angles in degrees)
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerLength = 73.000*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerWidth = 6.500*fgkmm;
-//const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerHeight = 3.315;
-const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerHeight = 0.315*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerHeight = 0.295*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerToChipDist = 2.500*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603CapLength = 0.900*fgkmm; // Includes solder
const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Length = 1.600*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Width = 0.870*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Height = 0.800*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812CapLength = 0.215*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Length = 4.600*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Width = 3.400*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Height = 0.700*fgkmm; // multiplied by 0.5
+const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Height = 1.400*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDWireLength = 30.000*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDWireRadius = 0.185*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDConnectorPosition[2] =
- {44.32*fgkmm, 0.33*fgkmm};
+const Double_t AliITSv11GeometrySSD::fgkSSDConnectorPosition[2] = {44.32*fgkmm, 0.33*fgkmm};
const Double_t AliITSv11GeometrySSD::fgkSSDConnectorSeparation = 0.44*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDConnectorLength = 2.16*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDConnectorWidth = 3.60*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDConnectorHeight =
- 0.25*fgkSSDStiffenerHeight;
+const Double_t AliITSv11GeometrySSD::fgkSSDConnectorHeight = 0.25*fgkSSDStiffenerHeight;
const Double_t AliITSv11GeometrySSD::fgkSSDConnectorAlHeight = 0.030*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDConnectorNiHeight = 0.002*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkSSDConnectorSnHeight = 0.15*fgkmm;
/////////////////////////////////////////////////////////////////////////////////
// Cooling Block (lengths are in mm and angles in degrees)
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHeight[3] =
{1.950*fgkmm, 0.240*fgkmm, 0.300*fgkmm};
const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleRadius[2] =
- {1.000*fgkmm, 0.120*fgkmm};
+ {1.025*fgkmm, 0.120*fgkmm}; // Added 50 micron tolerance for thicker wall cooling pipe (March 2010)
const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleLength[2] =
{1.900*fgkmm, 0.400*fgkmm};
const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleCenter =
// SSD Ladder Cable (lengths are in mm and angles in degrees)
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkSSDLadderCableWidth = 23.5*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkSSDLadderCableHeight[2] = { 0.030*fgkmm*17.5/23.5, 1.25 * 0.030*fgkmm}; // Al covers ~ 17.5/23.5 of surface, Kapton includes glue+foam
/////////////////////////////////////////////////////////////////////////////////
// SSD Module (lengths are in mm and angles in degrees)
/////////////////////////////////////////////////////////////////////////////////
// Cooling Tube (lengths are in mm and angles in degrees)
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmax = fgkCoolingTubeSupportRmin;
-const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmin = 0.96*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmin = 1.915*fgkmm/2; // Nominal + 50 micron tolerance; real pipes are closer to 450 micron wall thickness
const Double_t AliITSv11GeometrySSD::fgkCoolingTubeLength =
fgkCarbonFiberJunctionWidth;
const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSeparation =
1.0*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleEdge =
6.0*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleHeigth =
+const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleHeight =
4.0*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleRadius[2] =
{ 1.5*fgkmm,fgkSSDMountingBlockScrewHoleEdge/6.};
+ 0.5*fgkCoolingTubeSupportHeight
+ fgkSSDModuleCoolingBlockToSensor
- fgkMountingBlockSupportRadius[1]};
-const Double_t AliITSv11GeometrySSD::fgkLadderSupportHeigth = 10.0*fgkmm; // To be verified
+const Double_t AliITSv11GeometrySSD::fgkLadderSupportHeight = 10.0*fgkmm; // To be verified
const Double_t AliITSv11GeometrySSD::fgkLadderSupportRingLay5Position = 451.35*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkLadderSupportRingLay6Position = 510.00*fgkmm;
/////////////////////////////////////////////////////////////////////////////////
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportLowRadius[2] = {375.0*fgkmm,435.0*fgkmm};
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportHighWidth = 20.0*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportLowWidth[2] = {3.0*fgkmm,3.0*fgkmm};
-const Double_t AliITSv11GeometrySSD::fgkEndCapSupportCenterLay5ITSPosition = 625.0*fgkmm;
+const Double_t AliITSv11GeometrySSD::fgkEndCapSupportCenterLay5ITSPosition = 624.9*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportCenterLay5Position = 2.5*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportCenterLay6ITSPosition = 635.0*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkEndCapSupportCenterLay6Position = 2.5*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCentralSupportWidth = 6.28*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCentralAL3SupportLength = 60.0*fgkmm;
const Double_t AliITSv11GeometrySSD::fgkSSDCentralAL3SupportWidth = 2.5*fgkSSDCentralSupportWidth;
-/////////////////////////////////////////////////////////////////////////////////
-// SSD Cables Parameters (lengths are in mm and angles in degrees)
-/////////////////////////////////////////////////////////////////////////////////
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesLay5TubeRadiusMin = 11.9*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesLay6TubeRadiusMin = 11.9*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesLay5RightSideHeight = 7.*fgkmm; // to be fixed in order to reproduce material budget
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesLay6RightSideHeight = 7.*fgkmm; // to be fixed in order to reproduce material budget
-const Double_t AliITSv11GeometrySSD::fgkSSDCableAngle = 22.5;
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesLay5RightSideWaterHeight = 2.5*fgkmm; // to be fixed in order to reproduce material budget
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesPatchPanel2RB26Angle[2] = {25.0,53.2};
-const Double_t AliITSv11GeometrySSD::fgkSSDCablesPatchPanel2RB24Angle[2] = {23.0,53.6};
-const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB26ITSDistance = 975.0*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB24ITSDistance = 1020.0*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB26Radius = 451.3*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB24Radius = 451.3*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanelHeigth = 87.5*fgkmm;
-const Double_t AliITSv11GeometrySSD::fgkSSDCableMaterialBudgetHeight = 20.0*fgkmm;
-//const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB26Radius = fgkSSDPConeExternalRadius;
-//const Double_t AliITSv11GeometrySSD::fgkSSDPatchPanel2RB24Radius = fgkSSDPConeExternalRadius;
+
/////////////////////////////////////////////////////////////////////////////////
ClassImp(AliITSv11GeometrySSD)
/////////////////////////////////////////////////////////////////////////////////
fSSDStiffenerConnectorMedium(),
fSSDStiffener0603CapacitorMedium(),
fSSDStiffener1812CapacitorMedium(),
+ fSSDStiffenerCapacitorCapMedium(),
fSSDStiffenerHybridWireMedium(),
fSSDKaptonFlexMedium(),
fSSDAlTraceFlexMedium(),
fSSDRohaCellCone(),
fSSDAir(),
fSSDCopper(),
+ fSSDSn(),
fCreateMaterials(kFALSE),
fTransformationMatrices(kFALSE),
fBasicObjects(kFALSE),
fcoolingblocksystematrix(),
fssdstiffenerflex(),
fssdendflex(),
+ fcoolingtube(0),
fendladdercoolingtubesupportmatrix(),
fendladdermountingblock(),
fendladdermountingblockclip(),
fColorPhynox(14),
fColorSilicon(3),
fColorAl(38),
+ fColorNiSn(40),
fColorKapton(6),
fColorPolyhamide(5),
fColorStiffener(9),
////////////////////////
// Standard constructor
////////////////////////
+ for(Int_t i=0; i<fgkendladdermountingblocknumber; i++){
+ fendladdermountingblockcombitrans[i] = NULL;
+ }
+ for (Int_t i=0; i < fgkcarbonfibersupportnumber; i++) {
+ fcarbonfibersupport[i] = 0;
+ fcarbonfibersupportmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkcarbonfiberjunctionumber; i++) {
+ fcarbonfiberjunctionmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkcarbonfiberlowersupportnumber; i++) {
+ fcarbonfiberlowersupport[i] = 0;
+ fcarbonfiberlowersupportrans[0] = 0;
+ }
+ for (Int_t i=0; i < fgkvolumekind; i++) {
+ fssdsensorsupport[i] = 0;
+ }
+ for (Int_t i=0; i < fgkssdsensorsupportnumber; i++) {
+ fssdsensorsupportmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkcoolingtubesupportnumber; i++) {
+ fcoolingtubesupportmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkhybridcompnumber; i++) {
+ fssdhybridcomponent[i] = 0;
+ }
+ for (Int_t i=0; i < fgkcoolingblocknumber; i++) {
+ fcoolingblockmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkflexnumber; i++) {
+ fstiffenerflexmatrix[i] = 0;
+ fendflexmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkendladdercoolingtubenumber; i++) {
+ fendladdercoolingtube[i] = 0;
+ for (Int_t j = 0; j < 2; j++)
+ fendladdercoolingtubematrix[i][j] = 0;
+ }
+ for (Int_t i=0; i < fgkendlabbercarbonfiberjunctionumber; i++) {
+ fendladdercarbonfiberjunction[i] = 0;
+ }
+ for (Int_t i=0; i < fgkendladdercarbonfiberjunctionmatrixnumber; i++) {
+ fendladdercarbonfiberjunctionmatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkendladdercarbonfibermatrixnumber; i++) {
+ fendladdercarbonfibermatrix[i] = 0;
+ }
+ for (Int_t i=0; i < fgkendladdermountingblocknumber; i++) {
+ fendladdermountingblockclipmatrix[i] = 0;
+ }
+ for (Int_t i = 0; i < fgkendladderlowersuppnumber+1; i++) {
+ fendladderlowersupptrans[i] = 0;
+ }
+ for (Int_t i = 0; i < fgkladdercablesnumber; i++) {
+ fladdercablematrix[i] = 0;
+ }
+ for (Int_t i = 0; i < fgkladdersegmentnumber; i++) {
+ fladdersegment[i] = 0;
+ }
+ for (Int_t i = 0; i < fgkladdernumber; i++) {
+ fladder[i] = 0;
+ fladdermatrix[i] = 0;
+ fssdsensormatrix[i] = 0;
+ flayermatrix[i] = 0;
+ }
+ for (Int_t i = 0; i < 2; i++) {
+ fLay5LadderSupport[i] = 0;
+ fLay6LadderSupport[i] = 0;
+ fcoolingtubematrix[i] = NULL;
+ fendladdersegment[i] = NULL;
+ fendladdersegmentmatrix[i] = NULL;
+ }
}
-/////////////////////////////////////////////////////////////////////////////////
-AliITSv11GeometrySSD::AliITSv11GeometrySSD(const AliITSv11GeometrySSD &s):
- AliITSv11Geometry(s.GetDebug()),
- fSSDChipMedium(s.fSSDChipMedium),
- fSSDChipGlueMedium(s.fSSDChipGlueMedium),
- fSSDStiffenerMedium(s.fSSDStiffenerMedium),
- fSSDStiffenerConnectorMedium(s.fSSDStiffenerConnectorMedium),
- fSSDStiffener0603CapacitorMedium(s.fSSDStiffener0603CapacitorMedium),
- fSSDStiffener1812CapacitorMedium(s.fSSDStiffener1812CapacitorMedium),
- fSSDStiffenerHybridWireMedium(s.fSSDStiffenerHybridWireMedium),
- fSSDKaptonFlexMedium(s.fSSDKaptonFlexMedium),
- fSSDAlTraceFlexMedium(s.fSSDAlTraceFlexMedium),
- fSSDAlTraceLadderCableMedium(s.fSSDAlTraceLadderCableMedium),
- fSSDKaptonLadderCableMedium(s.fSSDKaptonLadderCableMedium),
- fSSDKaptonChipCableMedium(s.fSSDKaptonChipCableMedium),
- fSSDAlTraceChipCableMedium(s.fSSDAlTraceChipCableMedium),
- fSSDAlCoolBlockMedium(s.fSSDAlCoolBlockMedium),
- fSSDSensorMedium(s.fSSDSensorMedium),
- fSSDSensorSupportMedium(s.fSSDSensorSupportMedium),
- fSSDCarbonFiberMedium(s.fSSDCarbonFiberMedium),
- fSSDTubeHolderMedium(s.fSSDTubeHolderMedium),
- fSSDCoolingTubeWater(s.fSSDCoolingTubeWater),
- fSSDCoolingTubePhynox(s.fSSDCoolingTubePhynox),
- fSSDSupportRingAl(s.fSSDSupportRingAl),
- fSSDMountingBlockMedium(s.fSSDMountingBlockMedium),
- fSSDRohaCellCone(s.fSSDRohaCellCone),
- fSSDAir(s.fSSDAir),
- fSSDCopper(s.fSSDCopper),
- fCreateMaterials(s.fCreateMaterials),
- fTransformationMatrices(s.fTransformationMatrices),
- fBasicObjects(s.fBasicObjects),
- fcarbonfiberjunction(s.fcarbonfiberjunction),
- fcoolingtubesupport(s.fcoolingtubesupport),
- fhybridmatrix(s.fhybridmatrix),
- fssdcoolingblocksystem(s.fssdcoolingblocksystem),
- fcoolingblocksystematrix(s.fcoolingblocksystematrix),
- fssdstiffenerflex(s.fssdstiffenerflex),
- fssdendflex(s.fssdendflex),
- fendladdercoolingtubesupportmatrix(s.fendladdercoolingtubesupportmatrix),
- fendladdermountingblock(s.fendladdermountingblock),
- fendladdermountingblockclip(s.fendladdermountingblockclip),
- fSSDSensor5(s.fSSDSensor5),
- fSSDSensor6(s.fSSDSensor6),
- fSSDLayer5(s.fSSDLayer5),
- fSSDLayer6(s.fSSDLayer6),
- fMotherVol(s.fMotherVol),
- fLay5LadderSupportRing(s.fLay5LadderSupportRing),
- fLay6LadderSupportRing(s.fLay6LadderSupportRing),
- fgkEndCapSupportSystem(s.fgkEndCapSupportSystem),
- fSSDCone(s.fSSDCone),
- fColorCarbonFiber(s.fColorCarbonFiber),
- fColorRyton(s.fColorRyton),
- fColorPhynox(s.fColorPhynox),
- fColorSilicon(s.fColorSilicon),
- fColorAl(s.fColorAl),
- fColorKapton(s.fColorKapton),
- fColorPolyhamide(s.fColorPolyhamide),
- fColorStiffener(s.fColorStiffener),
- fColorEpoxy(s.fColorEpoxy),
- fColorWater(s.fColorWater),
- fColorG10(s.fColorG10)
-{
- ////////////////////////
- // Copy Constructor
- ////////////////////////
-}
-/////////////////////////////////////////////////////////////////////////////////
-AliITSv11GeometrySSD& AliITSv11GeometrySSD::
-operator=(const AliITSv11GeometrySSD &s){
- ////////////////////////
- // Assignment operator
- ////////////////////////
- this->~AliITSv11GeometrySSD();
- new(this) AliITSv11GeometrySSD(s);
- return *this;
-/*
- if(&s == this) return *this;
- fMotherVol = s.fMotherVol;
- return *this;
- */
-}
+
///////////////////////////////////////////////////////////////////////////////
void AliITSv11GeometrySSD::CreateTransformationMatrices(){
///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
TGeoRotation* localcoolingtuberot = new TGeoRotation();
localcoolingtuberot->SetAngles(0.,90.,0.);
- TGeoTranslation** localcoolingtubetrans[4];
- TVector3** localcoolingtubevect[4];
- for(Int_t i=0; i<4; i++){
- localcoolingtubevect[i] = new TVector3*[2];
- localcoolingtubetrans[i] = new TGeoTranslation*[2];
- fcoolingtubematrix[i] = new TGeoHMatrix*[2];
- }
- localcoolingtubevect[0][0] = new TVector3(-0.5*(fgkCoolingTubeSeparation
+ TGeoTranslation* localcoolingtubetrans[2];
+ TVector3* localcoolingtubevect[2];
+
+ localcoolingtubevect[0] = new TVector3(-0.5*(fgkCoolingTubeSeparation
-fgkCarbonFiberTriangleLength),
- - (2.0*fgkSSDSensorLength-fgkSSDSensorOverlap)+
- fgkSSDModuleStiffenerPosition[1]+fgkSSDStiffenerWidth
- + 0.5*fgkSSDFlexHoleLength+2.*fgkCarbonFiberJunctionWidth
- - 0.5*(fgkCarbonFiberLowerSupportWidth
- + fgkSSDSensorCenterSupportLength
- - fgkSSDSensorCenterSupportThickness[0])+
- 0.5*fgkSSDSensorLength-0.25*(fgkSSDSensorLength
- - 2.0*fgkSSDModuleStiffenerPosition[1]
- - 2.0*fgkSSDCoolingBlockWidth-fgkCoolingTubeSupportWidth)
- - 0.5*fgkCoolingTubeSupportWidth,
- - 0.5*fgkCoolingTubeSupportHeight);
- localcoolingtubevect[0][1] = new TVector3(localcoolingtubevect[0][0]->X(),
- localcoolingtubevect[0][0]->Y()+0.5*(fgkSSDSensorLength
- - 2.0*fgkSSDModuleStiffenerPosition[1]
- - 2.0*fgkSSDCoolingBlockWidth-fgkCoolingTubeSupportWidth)
- + fgkCoolingTubeSupportWidth,
- localcoolingtubevect[0][0]->Z());
- localcoolingtubevect[1][0] = new TVector3(-localcoolingtubevect[0][0]->X()
- + fgkCarbonFiberTriangleLength,
- localcoolingtubevect[0][0]->Y(),
- localcoolingtubevect[0][0]->Z());
- localcoolingtubevect[1][1] = new TVector3(-localcoolingtubevect[0][1]->X()
- + fgkCarbonFiberTriangleLength,
- localcoolingtubevect[0][1]->Y(),
- localcoolingtubevect[0][1]->Z());
- localcoolingtubevect[2][0] = new TVector3(-0.5*(fgkCoolingTubeSeparation
- - fgkCarbonFiberTriangleLength),
- - (2.0*fgkSSDSensorLength-fgkSSDSensorOverlap)+
- fgkSSDModuleStiffenerPosition[1]+fgkSSDStiffenerWidth
- + 0.5*fgkSSDFlexHoleLength+2.*fgkCarbonFiberJunctionWidth
- - 0.5*(fgkCarbonFiberLowerSupportWidth
- + fgkSSDSensorCenterSupportLength
- - fgkSSDSensorCenterSupportThickness[0])
- + fgkSSDModuleStiffenerPosition[1]
- - 0.5*(fgkSSDModuleStiffenerPosition[1]-fgkSSDSensorOverlap),
+ fgkCarbonFiberJunctionWidth // Y-coord is local Z, from sensor translation
+ - fgkCarbonFiberLowerSupportWidth
+ - fgkLowerSupportToSensorZ ,
- 0.5*fgkCoolingTubeSupportHeight);
- localcoolingtubevect[2][1] = new TVector3(-localcoolingtubevect[2][0]->X()
- + fgkCarbonFiberTriangleLength,
- localcoolingtubevect[2][0]->Y(),
- localcoolingtubevect[2][0]->Z());
- localcoolingtubevect[3][0] = new TVector3(-0.5*(fgkCoolingTubeSeparation
- - fgkCarbonFiberTriangleLength),
- - (2.0*fgkSSDSensorLength-fgkSSDSensorOverlap)+
- fgkSSDModuleStiffenerPosition[1]+fgkSSDStiffenerWidth
- + 0.5*fgkSSDFlexHoleLength+2.*fgkCarbonFiberJunctionWidth
- - 0.5*(fgkCarbonFiberLowerSupportWidth
- + fgkSSDSensorCenterSupportLength
- - fgkSSDSensorCenterSupportThickness[0])
- + fgkSSDSensorLength
- - 0.5*fgkSSDModuleStiffenerPosition[1],
- - 0.5*fgkCoolingTubeSupportHeight);
- localcoolingtubevect[3][1] = new TVector3(-localcoolingtubevect[3][0]->X()
- + fgkCarbonFiberTriangleLength,
- localcoolingtubevect[3][0]->Y(),
- - 0.5*fgkCoolingTubeSupportHeight);
- for(Int_t i=0; i<4; i++)
- for(Int_t j=0; j<2; j++){
- localcoolingtubetrans[i][j] =
- new TGeoTranslation(localcoolingtubevect[i][j]->X(),
- localcoolingtubevect[i][j]->Y(),
- localcoolingtubevect[i][j]->Z());
- fcoolingtubematrix[i][j] = new TGeoHMatrix((*localcoolingtubetrans[i][j])
- * (*localcoolingtuberot));
- }
+ localcoolingtubevect[1] = new TVector3( -localcoolingtubevect[0]->X()+fgkCarbonFiberTriangleLength,
+ localcoolingtubevect[0]->Y(),
+ localcoolingtubevect[0]->Z());
+ for(Int_t j=0; j<2; j++){
+ localcoolingtubetrans[j] =
+ new TGeoTranslation(localcoolingtubevect[j]->X(),
+ localcoolingtubevect[j]->Y(),
+ localcoolingtubevect[j]->Z());
+ fcoolingtubematrix[j] = new TGeoHMatrix((*localcoolingtubetrans[j])
+ *(*localcoolingtuberot));
+ }
/////////////////////////////////////////////////////////////
// SSD End Ladder Cooling Tube Transformations
/////////////////////////////////////////////////////////////
TGeoRotation* localendlladdercoolingtuberot = new TGeoRotation();
localendlladdercoolingtuberot->SetAngles(0.,90.,0.);
TGeoTranslation** localendlladdercoolingtubetrans[2];
- localendlladdercoolingtubetrans[0] = new TGeoTranslation*[6];
- localendlladdercoolingtubetrans[1] = new TGeoTranslation*[4];
+ localendlladdercoolingtubetrans[0] = new TGeoTranslation*[2];
+ localendlladdercoolingtubetrans[1] = new TGeoTranslation*[2];
for(Int_t i=0; i<2; i++)
- for(Int_t j=0; j<(i==0?6:4); j++)
+ for(Int_t j=0; j<2; j++)
localendlladdercoolingtubetrans[i][j] = new TGeoTranslation();
+
+ Double_t sensZshift = 0.5*fgkCarbonFiberJunctionWidth - fgkCarbonFiberLowerSupportWidth - fgkLowerSupportToSensorZ;
localendlladdercoolingtubetrans[0][0]->SetTranslation(-(fgkCoolingTubeSupportLength
- fgkCoolingTubeSupportRmax)
+ fgkCarbonFiberJunctionLength,
- 0.5*(fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[0]),
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[0]+sensZshift),
- 0.5*fgkCoolingTubeSupportHeight);
localendlladdercoolingtubetrans[0][1]->SetTranslation((fgkCoolingTubeSupportLength
- fgkCoolingTubeSupportRmax)
- fgkCarbonFiberJunctionLength
+ fgkCarbonFiberTriangleLength,
- 0.5*(fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[0]),
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[0]+sensZshift),
- 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[0][2]->SetTranslation(-(fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- + fgkCarbonFiberJunctionLength,
- fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[0]
- + 0.5*(fgkendladdercoolingsupportdistance[0]
- + fgkendladdercoolingsupportdistance[1]
- + fgkCoolingTubeSupportWidth),
- - 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[0][3]->SetTranslation((fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- - fgkCarbonFiberJunctionLength
- + fgkCarbonFiberTriangleLength,
- fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[0]
- + 0.5*(fgkendladdercoolingsupportdistance[0]
- + fgkendladdercoolingsupportdistance[1]
- + fgkCoolingTubeSupportWidth),
- - 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[0][4]->SetTranslation(-(fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- + fgkCarbonFiberJunctionLength,
- fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - 0.50 * (fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[1]
- - fgkCoolingTubeSupportWidth),
- - 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[0][5]->SetTranslation((fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- - fgkCarbonFiberJunctionLength
- + fgkCarbonFiberTriangleLength,
- fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - 0.50 * (fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[1]
- - fgkCoolingTubeSupportWidth),
- - 0.5*fgkCoolingTubeSupportHeight);
+
localendlladdercoolingtubetrans[1][0]->SetTranslation(-(fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- + fgkCarbonFiberJunctionLength,
- - 0.50 * (fgkMountingBlockToSensorSupport
- - 0.50 * (fgkSSDFlexHoleWidth-fgkSSDSensorSideSupportWidth)
- - fgkSSDStiffenerWidth-fgkSSDModuleStiffenerPosition[1]
- + fgkSSDSensorOverlap
- + fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - fgkendladdercoolingsupportdistance[2]
- - fgkEndLadderMountingBlockPosition[1]
- - fgkCoolingTubeSupportWidth)
- + fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - fgkendladdercoolingsupportdistance[2]
- - fgkCoolingTubeSupportWidth,
+ - fgkCoolingTubeSupportRmax)
+ + fgkCarbonFiberJunctionLength,
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[1]-sensZshift),
- 0.5*fgkCoolingTubeSupportHeight);
localendlladdercoolingtubetrans[1][1]->SetTranslation((fgkCoolingTubeSupportLength
- fgkCoolingTubeSupportRmax)
- fgkCarbonFiberJunctionLength
+ fgkCarbonFiberTriangleLength,
- - 0.50 * (fgkMountingBlockToSensorSupport
- - 0.50 * (fgkSSDFlexHoleWidth-fgkSSDSensorSideSupportWidth)
- - fgkSSDStiffenerWidth-fgkSSDModuleStiffenerPosition[1]
- + fgkSSDSensorOverlap
- + fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - fgkendladdercoolingsupportdistance[2]
- - fgkEndLadderMountingBlockPosition[1]
- - fgkCoolingTubeSupportWidth)
- + fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - fgkendladdercoolingsupportdistance[2]
- - fgkCoolingTubeSupportWidth,
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[1]-sensZshift),
- 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[1][2]->SetTranslation(-(fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- + fgkCarbonFiberJunctionLength,
- fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - 0.5*fgkendladdercoolingsupportdistance[2],
- - 0.5*fgkCoolingTubeSupportHeight);
- localendlladdercoolingtubetrans[1][3]->SetTranslation((fgkCoolingTubeSupportLength
- - fgkCoolingTubeSupportRmax)
- - fgkCarbonFiberJunctionLength
- + fgkCarbonFiberTriangleLength,
- fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - 0.5*fgkendladdercoolingsupportdistance[2],
- - 0.5*fgkCoolingTubeSupportHeight);
- fendladdercoolingtubematrix[0] = new TGeoHMatrix*[6];
- fendladdercoolingtubematrix[1] = new TGeoHMatrix*[4];
for(Int_t i=0; i<2; i++)
- for(Int_t j=0; j<(i==0?6:4); j++){
+ for(Int_t j=0; j<2; j++){
fendladdercoolingtubematrix[i][j] = new TGeoHMatrix(*localendlladdercoolingtuberot);
fendladdercoolingtubematrix[i][j]->MultiplyLeft(localendlladdercoolingtubetrans[i][j]);
}
/////////////////////////////////////////////////////////////
// SSD Cooling Block Transformations
/////////////////////////////////////////////////////////////
- const Int_t kcoolingblockmatrixnumber = 4;
- TGeoTranslation* localcoolingblocktrans[kcoolingblockmatrixnumber];
- localcoolingblocktrans[0] = new TGeoTranslation(-2.*(fgkCoolingTubeSupportRmax
- - fgkCoolingTubeSupportRmin),0.0,
- 0.5*(fgkSSDCoolingBlockHoleCenter+fgkCoolingTubeRmax));
- localcoolingblocktrans[1] = new TGeoTranslation(0.5*fgkSSDStiffenerLength
- - 0.5*fgkSSDModuleSensorSupportDistance-fgkSSDCoolingBlockLength,
- 0.0,fgkSSDStiffenerHeight);
- localcoolingblocktrans[2] = new TGeoTranslation(*localhybridtrans[1]);
- localcoolingblocktrans[3] = new TGeoTranslation(*localhybridtrans[2]);
- fcoolingblocksystematrix = new TGeoHMatrix();
- for(Int_t i=0; i<kcoolingblockmatrixnumber; i++)
- fcoolingblocksystematrix->MultiplyLeft(localcoolingblocktrans[i]);
+ TGeoTranslation localcoolingblocktrans (fcoolingtubematrix[0]->GetTranslation()[0]
+ - 0.5*fgkSSDCoolingBlockLength,
+ fhybridmatrix->GetTranslation()[1]-0.5*fgkSSDStiffenerWidth,
+ fhybridmatrix->GetTranslation()[2]+0.5*fgkSSDStiffenerHeight+
+ 0.5*(fgkSSDCoolingBlockHoleCenter+fgkCoolingTubeRmax));
+ fcoolingblocksystematrix = new TGeoHMatrix(localcoolingblocktrans);
/////////////////////////////////////////////////////////////
// SSD Stiffener Flex Transformations
/////////////////////////////////////////////////////////////
TGeoTranslation** localendladdercarbonfiberjunctiontrans[fgkendlabbercarbonfiberjunctionumber];
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++){
localendladdercarbonfiberjunctionmatrix[i]
- = new TGeoCombiTrans*[fgkendladdercabonfiberjunctionmatrixnumber];
+ = new TGeoCombiTrans*[fgkendladdercarbonfiberjunctionmatrixnumber];
localendladdercarbonfiberjunctionrot[i]
- = new TGeoRotation*[fgkendladdercabonfiberjunctionmatrixnumber];
+ = new TGeoRotation*[fgkendladdercarbonfiberjunctionmatrixnumber];
localendladdercarbonfiberjunctiontrans[i]
- = new TGeoTranslation*[fgkendladdercabonfiberjunctionmatrixnumber];
+ = new TGeoTranslation*[fgkendladdercarbonfiberjunctionmatrixnumber];
fendladdercarbonfiberjunctionmatrix[i]
- = new TGeoHMatrix*[fgkendladdercabonfiberjunctionmatrixnumber];
+ = new TGeoHMatrix*[fgkendladdercarbonfiberjunctionmatrixnumber];
}
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++)
- for(Int_t j=0; j<fgkendladdercabonfiberjunctionmatrixnumber; j++){
+ for(Int_t j=0; j<fgkendladdercarbonfiberjunctionmatrixnumber; j++){
localendladdercarbonfiberjunctionrot[i][j] = new TGeoRotation();
localendladdercarbonfiberjunctiontrans[i][j] = new TGeoTranslation();
}
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++)
- for(Int_t j=0; j<fgkendladdercabonfiberjunctionmatrixnumber; j++)
+ for(Int_t j=0; j<fgkendladdercarbonfiberjunctionmatrixnumber; j++)
localendladdercarbonfiberjunctionrot[i][j]->SetAngles(120.*j,0.,0.);
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++){
localendladdercarbonfiberjunctiontrans[i][1]->SetTranslation(fgkCarbonFiberTriangleLength,
*localendladdercarbonfiberjunctionglobalrot[i]);
}
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++)
- for(Int_t j=0; j<fgkendladdercabonfiberjunctionmatrixnumber; j++){
+ for(Int_t j=0; j<fgkendladdercarbonfiberjunctionmatrixnumber; j++){
localendladdercarbonfiberjunctionmatrix[i][j] =
new TGeoCombiTrans(*localendladdercarbonfiberjunctiontrans[i][j],
*localendladdercarbonfiberjunctionrot[i][j]);
new TGeoTranslation(0.0,(1-i)*(fgkEndLadderMountingBlockPosition[i]
+ 0.5*fgkSSDMountingBlockWidth),
- 0.5*fgkCarbonFiberLowerSupportHeight);
+ fendladderlowersupptrans[0]->SetDz(-0.5*fgkCarbonFiberLowerSupportHeight-fgkSSDTolerance);
fendladderlowersupptrans[2] = new TGeoTranslation(0.0,
fgkCarbonFiberLowerSupportVolumePosition[1]
+ fgkCarbonFiberLowerSupportVolumePosition[0],
localladdercablerot[1]->SetAngles(90.,60.,-90.);
localladdercablerot[2]->SetRotation((*localladdercablerot[1])
* (*localladdercablerot[0]));
+ //TGeoRotation* localladdercablerot = new TGeoRotation();
+ //localladdercablerot->SetAngles(90.,0.,0.);
////////////////////////////////////////////
// LocalLadderCableCombiTransMatrix
////////////////////////////////////////////
beamaxistrans[i][2]*fgkCarbonFiberJunctionWidth,0.);
}
for(Int_t i=0; i<fgkladdercablesnumber; i++)
- for(Int_t j=0; j<klocalladdercombitransnumber-1; j++)
- fladdercablematrix[i][j]->MultiplyLeft(ladderglobalmatrix[1][i]);
+ for(Int_t j=0; j<klocalladdercombitransnumber-1; j++)
+ fladdercablematrix[i][j]->MultiplyLeft(ladderglobalmatrix[1][i]);
+
///////////////////////////////////////////
// Setting Ladder HMatrix
///////////////////////////////////////////
- fgkLowerSupportToSensorZ,
0.5*fgkSSDSensorHeight-0.5*fgkCoolingTubeSupportHeight
-fgkSSDModuleCoolingBlockToSensor);
+
for(Int_t i=0; i<2; i++)
localssdsensorcombitrans[i] = new TGeoCombiTrans(*localssdsensortrans[i],
*localssdsensorrot);
delete localcoolingtubesupportrot[i];
delete localcoolingtubesupportrans[i];
}
- for(Int_t i=0; i<4; i++){
- for(Int_t j=0; j<2; j++){
- delete localcoolingtubevect[i][j];
- delete localcoolingtubetrans[i][j];
- }
- delete [] localcoolingtubevect[i];
- delete [] localcoolingtubetrans[i];
+ for(Int_t j=0; j<2; j++){
+ delete localcoolingtubevect[j];
+ delete localcoolingtubetrans[j];
}
delete endladdermountingblockrot;
for(Int_t i=0; i<khybridmatrixnumber; i++) delete localhybridtrans[i];
- for(Int_t i=0; i<kcoolingblockmatrixnumber; i++) delete localcoolingblocktrans[i];
for(Int_t i=0; i<fgkflexnumber; i++){
for(Int_t j=1; j<klocalflexmatrixnumber; j++)
delete localflexmatrix[i][j];
}
delete localendlladdercoolingtuberot;
for(Int_t i=0; i<2; i++){
- for(Int_t j=0; j<(i==0?6:4); j++)
- delete localendlladdercoolingtubetrans[i][j];
+ for(Int_t j=0; j<2; j++)
+ delete localendlladdercoolingtubetrans[i][j];
delete [] localendlladdercoolingtubetrans[i];
}
}
delete localladdermotherrot;
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++){
- for(Int_t j=0; j<fgkendladdercabonfiberjunctionmatrixnumber; j++){
+ for(Int_t j=0; j<fgkendladdercarbonfiberjunctionmatrixnumber; j++){
delete localendladdercarbonfiberjunctionmatrix[i][j];
delete localendladdercarbonfiberjunctionrot[i][j];
delete localendladdercarbonfiberjunctiontrans[i][j];
/////////////////////////////////////////////////////////////
// SSD Cooling Tube Support
/////////////////////////////////////////////////////////////
- Int_t edgesnumber = 16;
+ Int_t edgesnumber = 3;
fcoolingtubesupport = GetCoolingTubeSupport(edgesnumber);
/////////////////////////////////////////////////////////////
// SSD Hybrid
/////////////////////////////////////////////////////////////
// SSD Cooling Tube
/////////////////////////////////////////////////////////////
- TList* coolingtubelist = GetCoolingTubeList();
- for(Int_t i=0; i<fgkcoolingtubenumber; i++)
- fcoolingtube[i] = (TGeoVolume*)coolingtubelist->At(i);
- for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
- fendladdercoolingtube[i] =
- (TGeoVolume*)coolingtubelist->At(fgkcoolingtubenumber+i);
+ CreateCoolingTubes();
/////////////////////////////////////////////////////////////
// SSD Flex
/////////////////////////////////////////////////////////////
0.5*fgkSSDSensorHeight,
0.5*ssdsensitivelength);
TGeoVolume* ssdsensorsensitiveLay5 =
- new TGeoVolume(fgSSDsensitiveVolName5,ssdsensorsensitiveshape,fSSDSensorMedium);
+ new TGeoVolume(fgkSSDsensitiveVolName5,ssdsensorsensitiveshape,fSSDSensorMedium);
TGeoVolume* ssdsensorsensitiveLay6 =
- new TGeoVolume(fgSSDsensitiveVolName6,ssdsensorsensitiveshape,fSSDSensorMedium);
+ new TGeoVolume(fgkSSDsensitiveVolName6,ssdsensorsensitiveshape,fSSDSensorMedium);
ssdsensorsensitiveLay5->SetLineColor(fColorSilicon);
ssdsensorsensitiveLay6->SetLineColor(fColorSilicon);
TGeoBBox* ssdsensorinsensitiveshape[2];
////////////////////
vertexposition[0][0] = new TVector3();
vertexposition[0][1] = new TVector3(fgkCarbonFiberSupportXAxisLength,
- fgkCarbonFiberSupportYAxisLength);
+ fgkCarbonFiberSupportYAxisLength, 0);
vertexposition[0][2] = new TVector3(carbonfibersupportxaxisEdgeproj,
carbonfibersupportxaxisEdgeproj
- * TMath::Tan(theta));
+ * TMath::Tan(theta), 0);
vertexposition[0][3] = new TVector3(fgkCarbonFiberSupportXAxisLength
- carbonfibersupportxaxisEdgeproj,
fgkCarbonFiberSupportYAxisLength
- - vertexposition[0][2]->Y());
+ - vertexposition[0][2]->Y(), 0);
////////////////////////////////////////////////////
//Setting the parameters for Isometry Transformation
////////////////////////////////////////////////////
Double_t* param = new Double_t[4];
param[0] = 0., param[1] = 1., param[2] = 0., param[3] = -symmetryplaneposition;
for(Int_t j=0; j<kvertexnumber; j++) vertexposition[1][j] =
- new TVector3((GetReflection(vertexposition[0][j],param))->X(),
- (GetReflection(vertexposition[0][j],param))->Y());
- char* carbonfibersupportshapename[kshapesnumber] =
+ new TVector3((GetReflection(vertexposition[0][j],param))->X(),
+ (GetReflection(vertexposition[0][j],param))->Y(), 0);
+ const char* carbonfibersupportshapename[kshapesnumber] =
{"CarbonFiberSupportShape1","CarbonFiberSupportShape2"};
- char* carbonfibersupportname[kshapesnumber] =
+ const char* carbonfibersupportname[kshapesnumber] =
{"CarbonFiberSupport1","CarbonFiberSupport2"};
TGeoArb8* carbonfibersupportshape[kshapesnumber];
TGeoVolume* carbonfibersupport[kshapesnumber];
/////////////////////////////////////////////////////////////
const Int_t kvertexnumber = 6;
TGeoXtru* carbonfiberjunctionshape = new TGeoXtru(2);
- Double_t reflectionparam[3] = {TMath::Tan(fgkCarbonFiberJunctionAngle[0]
- * TMath::DegToRad()),-1.,0.};
+ Double_t reflectionparam[4] = {TMath::Tan(fgkCarbonFiberJunctionAngle[0]
+ * TMath::DegToRad()),-1.,0.,0.};
TVector3* vertex[kvertexnumber];
vertex[0] = new TVector3();
vertex[3] = new TVector3(fgkCarbonFiberJunctionEdge[0]
* TMath::DegToRad()),
fgkCarbonFiberJunctionEdge[0]
* TMath::Sin(fgkCarbonFiberJunctionAngle[0]
- * TMath::DegToRad()));
- vertex[4] = new TVector3(fgkCarbonFiberJunctionLength,
- fgkCarbonFiberJunctionEdge[1]);
- vertex[5] = new TVector3(fgkCarbonFiberJunctionLength);
+ * TMath::DegToRad()), 0);
+ vertex[4] = new TVector3(fgkCarbonFiberJunctionLength-fgkSSDTolerance,
+ fgkCarbonFiberJunctionEdge[1], 0);
+ vertex[5] = new TVector3(fgkCarbonFiberJunctionLength-fgkSSDTolerance, 0, 0);
vertex[1] = GetReflection(vertex[5],reflectionparam);
vertex[2] = GetReflection(vertex[4],reflectionparam);
Double_t xvertexpoints[6], yvertexpoints[6];
for(Int_t i = 0; i<kshapesnumber; i++) vertexposition[i] =
new TVector3*[kvertexnumber];
//First Shape Vertex Positioning
- vertexposition[0][0] = new TVector3(fgkCarbonFiberLowerSupportLowerLenght);
+ vertexposition[0][0] = new TVector3(fgkCarbonFiberLowerSupportLowerLenght, 0, 0);
vertexposition[0][1] = new TVector3(fgkCarbonFiberTriangleLength
- - fgkCarbonFiberLowerSupportLowerLenght);
+ - fgkCarbonFiberLowerSupportLowerLenght, 0, 0);
vertexposition[0][2] = new TVector3();
- vertexposition[0][3] = new TVector3(fgkCarbonFiberTriangleLength);
+ vertexposition[0][3] = new TVector3(fgkCarbonFiberTriangleLength, 0, 0);
//Second Shape Vertex Positioning
Double_t theta = TMath::ATan((fgkCarbonFiberLowerSupportVolumePosition[1]
- fgkCarbonFiberLowerSupportVolumePosition[0])
/ fgkCarbonFiberTriangleLength);
vertexposition[1][0] = new TVector3(vertexposition[0][0]->X(),
vertexposition[0][0]->X()*TMath::Tan(theta)
- + fgkCarbonFiberLowerSupportVolumePosition[0]);
+ + fgkCarbonFiberLowerSupportVolumePosition[0], 0);
vertexposition[1][1] = new TVector3(vertexposition[0][1]->X(),
vertexposition[0][1]->X()*TMath::Tan(theta)
- + fgkCarbonFiberLowerSupportVolumePosition[0]);
- vertexposition[1][2] = new TVector3(0.,fgkCarbonFiberLowerSupportVolumePosition[0]);
+ + fgkCarbonFiberLowerSupportVolumePosition[0], 0);
+ vertexposition[1][2] = new TVector3(0.,fgkCarbonFiberLowerSupportVolumePosition[0], 0);
vertexposition[1][3] = new TVector3(fgkCarbonFiberTriangleLength,
- fgkCarbonFiberLowerSupportVolumePosition[1]);
- char* carbonfiberlowersupportshapename[kshapesnumber] =
+ fgkCarbonFiberLowerSupportVolumePosition[1], 0);
+ const char* carbonfiberlowersupportshapename[kshapesnumber] =
{"CarbonFiberLowerSupportShape1","CarbonFiberLowerSupportShape2"};
- char* carbonfiberlowersupportname[kshapesnumber] =
+ const char* carbonfiberlowersupportname[kshapesnumber] =
{"CarbonFiberLowerSupport1","CarbonFiberLowerSupport2"};
TGeoArb8* carbonfiberlowersupportshape[kshapesnumber];
TGeoVolume* carbonfiberlowersupport[kshapesnumber];
}
///////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupport(Double_t length, Double_t height,
- Double_t width, Double_t* thickness)const{
+ Double_t width, const Double_t* thickness)const{
/////////////////////////////////////////////////////////////
// Method generating the Sensor Support
/////////////////////////////////////////////////////////////
TGeoXtru* ssdsensorsupportshape = new TGeoXtru(2);
TVector3* vertexposition[kvertexnumber];
vertexposition[0] = new TVector3();
- vertexposition[1] = new TVector3(0.0,length);
- vertexposition[2] = new TVector3(thickness[1],vertexposition[1]->Y());
- vertexposition[3] = new TVector3(vertexposition[2]->X(),thickness[0]);
- vertexposition[4] = new TVector3(height,vertexposition[3]->Y());
- vertexposition[5] = new TVector3(vertexposition[4]->X());
+ vertexposition[1] = new TVector3(0.0,length,0);
+ vertexposition[2] = new TVector3(thickness[1],vertexposition[1]->Y(),0);
+ vertexposition[3] = new TVector3(vertexposition[2]->X(),thickness[0],0);
+ vertexposition[4] = new TVector3(height,vertexposition[3]->Y(),0);
+ vertexposition[5] = new TVector3(vertexposition[4]->X(),0,0);
Double_t xvertexpoints[6], yvertexpoints[6];
for(Int_t i=0; i<kvertexnumber; i++)
xvertexpoints[i] = vertexposition[i]->X(),
// Vertex Positioning for TGeoXTru
///////////////////////////////////////
TVector3** vertexposition = new TVector3*[kvertexnumber];
- vertexposition[0] = new TVector3(fgkCoolingTubeSupportRmin*CosD(angle),
- fgkCoolingTubeSupportRmin*SinD(angle));
+
+ Double_t router = fgkCoolingTubeSupportRmin/CosD(phi/nedges); // Recalc inner radius so that tube fits inside
+ vertexposition[0] = new TVector3(router*CosD(angle),
+ router*SinD(angle), 0);
vertexposition[1] = new TVector3(fgkCoolingTubeSupportRmax*CosD(angle),
- fgkCoolingTubeSupportRmax*SinD(angle));
+ fgkCoolingTubeSupportRmax*SinD(angle),0);
vertexposition[2] = new TVector3(vertexposition[1]->X(),
- fgkCoolingTubeSupportRmax);
+ fgkCoolingTubeSupportRmax, 0);
vertexposition[3] = new TVector3(-vertexposition[1]->X(),
- fgkCoolingTubeSupportRmax);
+ fgkCoolingTubeSupportRmax, 0);
vertexposition[4] = new TVector3(-vertexposition[1]->X(),
- vertexposition[1]->Y());
+ vertexposition[1]->Y(), 0);
+
for(Int_t i=0; i<nedges; i++)
vertexposition[i+5] =
- new TVector3(fgkCoolingTubeSupportRmin*CosD(psi+i*(2.*phi/nedges)),
- fgkCoolingTubeSupportRmin*SinD(psi+i*(2.*phi/nedges)));
+ new TVector3(router*CosD(psi+i*(2.*phi/nedges)),
+ router*SinD(psi+i*(2.*phi/nedges)), 0);
///////////////////////////////////////////////////////////////////////
// TGeoXTru Volume definition for Cooling Tube Support Arc Part
///////////////////////////////////////////////////////////////////////
////////////////////////////////////////
// Positioning the vertices for TGeoXTru
////////////////////////////////////////
- virtualvertex[0] = new TVector3(-fgkCoolingTubeSupportRmax,-fgkCoolingTubeSupportRmax);
- virtualvertex[1] = new TVector3(virtualvertex[0]->X(),-virtualvertex[0]->Y());
- virtualvertex[2] = new TVector3(-virtualvertex[0]->X(),virtualvertex[1]->Y());
- virtualvertex[3] = new TVector3(virtualvertex[2]->X(),0.5*fgkCoolingTubeSupportHeight);
- virtualvertex[4] = new TVector3(virtualvertex[3]->X()+boxlength,virtualvertex[3]->Y());
- virtualvertex[5] = new TVector3(virtualvertex[4]->X(),-virtualvertex[4]->Y());
- virtualvertex[6] = new TVector3(virtualvertex[3]->X(),-virtualvertex[3]->Y());
- virtualvertex[7] = new TVector3(virtualvertex[2]->X(),-virtualvertex[2]->Y());
+ virtualvertex[0] = new TVector3(-fgkCoolingTubeSupportRmax,-fgkCoolingTubeSupportRmax, 0);
+ virtualvertex[1] = new TVector3(virtualvertex[0]->X(),-virtualvertex[0]->Y(),0);
+ virtualvertex[2] = new TVector3(-virtualvertex[0]->X(),virtualvertex[1]->Y(),0);
+ virtualvertex[3] = new TVector3(virtualvertex[2]->X(),0.5*fgkCoolingTubeSupportHeight,0);
+ virtualvertex[4] = new TVector3(virtualvertex[3]->X()+boxlength,virtualvertex[3]->Y(),0);
+ virtualvertex[5] = new TVector3(virtualvertex[4]->X(),-virtualvertex[4]->Y(),0);
+ virtualvertex[6] = new TVector3(virtualvertex[3]->X(),-virtualvertex[3]->Y(),0);
+ virtualvertex[7] = new TVector3(virtualvertex[2]->X(),-virtualvertex[2]->Y(),0);
Double_t xmothervertex[kvirtualvertexnumber], ymothervertex[kvirtualvertexnumber];
for(Int_t i=0; i< kvirtualvertexnumber; i++)
xmothervertex[i] = virtualvertex[i]->X(),
ymothervertex);
virtualCoolingTubeSupportShape->DefineSection(0,-0.5*fgkCoolingTubeSupportWidth);
virtualCoolingTubeSupportShape->DefineSection(1,0.5*fgkCoolingTubeSupportWidth);
- TGeoVolume* virtualcoolingtubesupport = new TGeoVolume("CoolingTubeSupport",
- virtualCoolingTubeSupportShape,fSSDAir);
+ /*TGeoVolume* virtualcoolingtubesupport = new TGeoVolume("CoolingTubeSupport",
+ virtualCoolingTubeSupportShape,fSSDAir); */
+ TGeoVolume* virtualcoolingtubesupport = new TGeoVolumeAssembly("CoolingTubeSupport");
+
////////////////////////////////////////
// Positioning Volumes in Virtual Volume
////////////////////////////////////////
virtualcoolingtubesupport->AddNode(coolingtubesupportarc,1,coolingtubesupportrot);
virtualcoolingtubesupport->AddNode(coolingtubesupportbox,1);
virtualcoolingtubesupport->AddNode(coolingtubesupportseg,1);
- virtualcoolingtubesupport->AddNode(coolingtubearc[0],1,coolingtubesupportrot);
- virtualcoolingtubesupport->AddNode(coolingtubearc[1],1,coolingtubesupportrot);
- virtualcoolingtubesupport->AddNode(coolingtubeseg[0],1);
- virtualcoolingtubesupport->AddNode(coolingtubeseg[1],1);
+ //virtualcoolingtubesupport->AddNode(coolingtubearc[0],1,coolingtubesupportrot);
+ //virtualcoolingtubesupport->AddNode(coolingtubearc[1],1,coolingtubesupportrot);
+ //virtualcoolingtubesupport->AddNode(coolingtubeseg[0],1);
+ //virtualcoolingtubesupport->AddNode(coolingtubeseg[1],1);
/////////////////////////////////////////////////////////////
// Deallocating memory
/////////////////////////////////////////////////////////////
delete [] vertexposition;
- delete xvertexpoints;
- delete yvertexpoints;
- delete xvert;
- delete yvert;
+ delete [] xvertexpoints;
+ delete [] yvertexpoints;
+ delete [] xvert;
+ delete [] yvert;
for(Int_t i=0; i< kvirtualvertexnumber; i++)
delete virtualvertex[i];
/////////////////////////////////////////////////////////////
// Mother Volumes Containers
/////////////////////////////////////////////////////////////
const Int_t kmothernumber = 2;
- const Int_t kmothervertexnumber = 12;
+ const Int_t kmothervertexnumber = 8;
Double_t xmothervertex[kmothernumber][kmothervertexnumber];
Double_t ymothervertex[kmothernumber][kmothervertexnumber];
- ///////////////////////
- // Setting the vertices
- ///////////////////////
- xmothervertex[0][0] = -0.5*fgkSSDStiffenerLength;
- xmothervertex[0][1] = xmothervertex[0][0];
- xmothervertex[0][2] = fgkSSDFlexLength[0]-0.5*fgkSSDStiffenerLength;
- xmothervertex[0][3] = xmothervertex[0][2];
- xmothervertex[0][4] = xmothervertex[0][0];
- xmothervertex[0][5] = xmothervertex[0][4];
- xmothervertex[0][6] = -xmothervertex[0][0];
- xmothervertex[0][7] = xmothervertex[0][6];
- xmothervertex[0][8] = -xmothervertex[0][2];
- xmothervertex[0][9] = xmothervertex[0][8];
- xmothervertex[0][10] = xmothervertex[0][7];
- xmothervertex[0][11] = xmothervertex[0][10];
- for(Int_t i=0; i<kmothervertexnumber; i++) xmothervertex[1][i] = xmothervertex[0][i];
- for(Int_t i = 0; i<kmothernumber; i++){
- ymothervertex[i][0] = -(fgkSSDChipWidth-(0.5*fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist)
- + ssdchipcablesradius[i]+fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]);
- ymothervertex[i][1] = ssdstiffenerseparation-0.5*fgkSSDStiffenerWidth-fgkSSDFlexWidth[0];
- ymothervertex[i][2] = ymothervertex[i][1];
- ymothervertex[i][3] = ssdstiffenerseparation-0.5*fgkSSDStiffenerWidth;
- ymothervertex[i][4] = ymothervertex[i][3];
- ymothervertex[i][5] = ymothervertex[i][4]+0.5*fgkSSDStiffenerWidth-ymothervertex[i][0];
- ymothervertex[i][6] = ymothervertex[i][5];
- ymothervertex[i][7] = 0.5*fgkSSDStiffenerWidth+fgkSSDFlexWidth[0];
- ymothervertex[i][8] = ymothervertex[i][7];
- ymothervertex[i][9] = 0.5*fgkSSDStiffenerWidth;
- ymothervertex[i][10] = ymothervertex[i][9];
- ymothervertex[i][11] = ymothervertex[i][0];
- }
- TGeoXtru* ssdhybridmothershape[kmothernumber];
-// TGeoVolume* ssdhybridmother[kmothernumber];
- TGeoVolumeAssembly* ssdhybridmother[kmothernumber];
+
+ TGeoVolumeAssembly* ssdhybridassembly[kmothernumber];
+ TGeoVolume* ssdhybridmother[kmothernumber][2];
+
+ TGeoRotation hybridmotherrotR(TGeoRotation("",-90.0,0.0,0.0)*TGeoRotation("",0.0,90.0,0.0)*TGeoRotation("",90.,180.,-90));
+ TGeoRotation hybridmotherrotL(TGeoRotation("",180.,0.0,0.0)*hybridmotherrotR);
+ TGeoRotation *hybridmotherrotInv = new TGeoRotation(hybridmotherrotR.Inverse());
+
const char* ssdhybridmothername[kmothernumber] = {"SSDHybridMother1","SSDHybridMother2"};
for(Int_t i=0; i<kmothernumber; i++){
- ssdhybridmothershape[i] = new TGeoXtru(2);
- ssdhybridmothershape[i]->DefinePolygon(kmothervertexnumber,xmothervertex[i],
- ymothervertex[i]);
- ssdhybridmothershape[i]->DefineSection(0,-0.5*fgkSSDStiffenerHeight-fgkSSDChipHeight
- -fgkSSDChipCablesHeight[i+2]);
- ssdhybridmothershape[i]->DefineSection(1, 0.5*fgkSSDStiffenerHeight);
-// ssdhybridmother[i] = new TGeoVolume(ssdhybridmothername[i],ssdhybridmothershape[i],
-// fSSDAir);
- ssdhybridmother[i] = new TGeoVolumeAssembly(ssdhybridmothername[i]);
+ xmothervertex[i][0] = -0.5*fgkSSDStiffenerWidth;
+ ymothervertex[i][0] = 0.5*fgkSSDStiffenerHeight;
+ xmothervertex[i][1] = -0.5*fgkSSDStiffenerWidth;
+ ymothervertex[i][1] = -0.5*fgkSSDStiffenerHeight-fgkSSDChipHeight
+ -fgkSSDChipCablesHeight[i+2];
+
+ xmothervertex[i][2] = 0.5*(fgkSSDSensorLength-ssdstiffenerseparation); //0.5*fgkSSDStiffenerWidth;
+ ymothervertex[i][2] = -0.5*fgkSSDStiffenerHeight-fgkSSDChipHeight -fgkSSDChipCablesHeight[i+2];
+ xmothervertex[i][3] = xmothervertex[i][2];
+ ymothervertex[i][3] = ymothervertex[i][2]+fgkSSDChipCablesHeight[0]+fgkSSDChipCablesHeight[1]+fgkSSDTolerance;
+
+ xmothervertex[i][4] = xmothervertex[i][2]-0.4;
+ ymothervertex[i][4] = ymothervertex[i][3];
+ xmothervertex[i][5] = xmothervertex[i][4];
+ ymothervertex[i][5] = ymothervertex[i][4]+2*ssdchipcablesradius[i]-fgkSSDTolerance;
+
+ xmothervertex[i][6] = 0.5*fgkSSDStiffenerWidth+ssdchipcablesradius[i]+0.3*fgkmm;
+ ymothervertex[i][6] = ymothervertex[i][5];
+
+ xmothervertex[i][7] = xmothervertex[i][6];
+ ymothervertex[i][7] = 0.5*fgkSSDStiffenerHeight;
+ TGeoXtru *shape = new TGeoXtru(2);
+ shape->DefinePolygon(8,xmothervertex[i],ymothervertex[i]);
+ shape->DefineSection(0,-0.5*fgkSSDStiffenerLength);
+ shape->DefineSection(1,0.5*fgkSSDStiffenerLength);
+ ssdhybridmother[i][0] = new TGeoVolume(TString(ssdhybridmothername[i])+"L",shape,fSSDAir);
+ ssdhybridmother[i][1] = new TGeoVolume(TString(ssdhybridmothername[i])+"R",shape,fSSDAir);
+ ssdhybridassembly[i] = new TGeoVolumeAssembly(ssdhybridmothername[i]);
}
/////////////////////////////////////////////////////////////
// SSD Stiffener
TGeoVolume* ssdstiffener = new TGeoVolume("SSDStiffener",ssdstiffenershape,
fSSDStiffenerMedium);
ssdstiffener->SetLineColor(fColorStiffener);
- TGeoTranslation* ssdstiffenertrans[kssdstiffenernumber];
- for(Int_t i=0; i<kssdstiffenernumber; i++)
- ssdstiffenertrans[i] = new TGeoTranslation(0.,i*ssdstiffenerseparation,0.);
- /////////////////////////////////////////////////////////////
- // SSD Chip System
- /////////////////////////////////////////////////////////////
- TList* ssdchipsystemlist = GetSSDChipSystem();
- Double_t ssdchipseparation = fgkSSDSensorLength
- - 2.*fgkSSDModuleStiffenerPosition[1]
- - 2.*(fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist
- - 0.5*fgkSSDChipWidth);
- Double_t ssdchipsystemlength = (fgkSSDChipNumber-1)*(fgkSSDChipLength
- + fgkSSDChipSeparationLength)+fgkSSDChipCablesLength[1];
- TGeoTranslation* ssdchipsystemtrans = new TGeoTranslation(0.5*fgkSSDChipCablesLength[1]
- - 0.5*ssdchipsystemlength,
- 0.5*(ssdstiffenerseparation-ssdchipseparation),
- - 0.5*(fgkSSDChipHeight+fgkSSDStiffenerHeight));
+
////////////////////////////
// Capacitor 0603-2200 nF
///////////////////////////
const Int_t knapacitor0603number = 5;
+ TGeoBBox* capacitor0603mothershape = new TGeoBBox("Capacitor0603MotherShape",
+ 0.5*fgkSSDCapacitor0603Length + fgkSSDCapacitor0603CapLength,
+ 0.5*fgkSSDCapacitor0603Width,
+ 0.5*fgkSSDCapacitor0603Height);
+ TGeoVolume* capacitor0603mother = new TGeoVolume("Capacitor0603Mother",capacitor0603mothershape,
+ fSSDAir);
+
TGeoBBox* capacitor0603shape = new TGeoBBox("Capacitor0603Shape",
- 0.5*fgkSSDCapacitor0603Length,
- 0.5*(fgkSSDCapacitor0603Width),
- 0.5*fgkSSDCapacitor0603Height);
+ 0.5*fgkSSDCapacitor0603Length,
+ 0.5*fgkSSDCapacitor0603Width,
+ 0.5*fgkSSDCapacitor0603Height);
TGeoVolume* capacitor0603 = new TGeoVolume("Capacitor0603",capacitor0603shape,
fSSDStiffener0603CapacitorMedium);
capacitor0603->SetLineColor(fColorAl);
+ TGeoTranslation *cap0603trans = new TGeoTranslation(0.,0.,0.);
+ capacitor0603mother->AddNode(capacitor0603,1,cap0603trans);
+
+ TGeoBBox* capacitor0603capshape = new TGeoBBox("Capacitor0603CapShape",
+ 0.5*fgkSSDCapacitor0603CapLength,
+ 0.5*fgkSSDCapacitor0603Width,
+ 0.5*fgkSSDCapacitor0603Height);
+ TGeoVolume* capacitor0603cap = new TGeoVolume("Capacitor0603Cap",capacitor0603capshape,
+ fSSDStiffenerCapacitorCapMedium);
+ capacitor0603cap->SetLineColor(fColorNiSn);
+ TGeoTranslation *cap0603captrans1 = new TGeoTranslation(- capacitor0603shape->GetDX() - capacitor0603capshape->GetDX(),0.,0.);
+ capacitor0603mother->AddNode(capacitor0603cap,1,cap0603captrans1);
+ TGeoTranslation *cap0603captrans2 = new TGeoTranslation(capacitor0603shape->GetDX() + capacitor0603capshape->GetDX(),0.,0.);
+ capacitor0603mother->AddNode(capacitor0603cap,2,cap0603captrans2);
+
+
+ TGeoVolume* ssdchip = GetSSDChip();
+
+ const Int_t knedges = 5;
+ TGeoVolume *ssdchipcables[2];
+
for(Int_t i=0; i<kmothernumber; i++){
+ for(Int_t j=0; j<kssdstiffenernumber; j++){
+ ssdhybridmother[i][j]->AddNode(ssdstiffener,1,hybridmotherrotInv);
+ for(Int_t k=1; k<knapacitor0603number+1; k++){
+ ssdhybridmother[i][j]->AddNode(capacitor0603mother,k,
+ new TGeoCombiTrans("",
+ -0.5*(fgkSSDStiffenerWidth - fgkSSDCapacitor0603Width),
+ -0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor0603Height),
+ (k-3.)/6*fgkSSDStiffenerLength,
+ hybridmotherrotInv));
+ }
+ }
+
+ GetSSDChipCables(ssdchipcables[0],ssdchipcables[1],fgkSSDChipCablesHeight[i+2],knedges);
+ for(Int_t k=0; k<fgkSSDChipNumber; k++){
+ TGeoTranslation *chipcabletrans = new TGeoTranslation("",0.5*fgkSSDStiffenerWidth-fgkSSDChipWidth,
+ - 0.5*fgkSSDStiffenerHeight - fgkSSDChipHeight
+ - fgkSSDChipCablesHeight[i+2],
+ (k+0.5-fgkSSDChipNumber/2)*
+ (fgkSSDChipLength + fgkSSDChipSeparationLength));
+ TGeoCombiTrans *chiptrans = new TGeoCombiTrans("",0.5*(fgkSSDStiffenerWidth-fgkSSDChipWidth),
+ - 0.5*(fgkSSDChipHeight+fgkSSDStiffenerHeight),
+ (k+0.5-fgkSSDChipNumber/2)*(fgkSSDChipLength + fgkSSDChipSeparationLength),
+ hybridmotherrotInv);
for(Int_t j=0; j<kssdstiffenernumber; j++){
- ssdhybridmother[i]->AddNode(ssdstiffener,j+1,ssdstiffenertrans[j]);
- for(Int_t k=1; k<knapacitor0603number+1; k++){
- ssdhybridmother[i]->AddNode(capacitor0603,knapacitor0603number*j+k,
- new TGeoTranslation((k-3.)/6*fgkSSDStiffenerLength,
- j*ssdstiffenerseparation
- + 0.5*((j==0? 1:-1)*fgkSSDStiffenerWidth
- + (j==0? -1:+1)*fgkSSDCapacitor0603Width),
- - 0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor0603Height)));
- }
- }
- ssdhybridmother[i]->AddNode((TGeoVolume*)ssdchipsystemlist->At(i),i+1,ssdchipsystemtrans);
- ssdhybridlist->Add(ssdhybridmother[i]);
+ ssdhybridmother[i][j]->AddNode(ssdchipcables[j],k+1,chipcabletrans);
+ ssdhybridmother[i][j]->AddNode(ssdchip,k+1,chiptrans);
+ }
+ }
+ // Final placement by assembly
+ ssdhybridassembly[i]->AddNode(ssdhybridmother[i][0],1,new TGeoCombiTrans(TGeoTranslation("",0,0,0),hybridmotherrotL));
+ ssdhybridassembly[i]->AddNode(ssdhybridmother[i][1],1,new TGeoCombiTrans(TGeoTranslation("",0,ssdstiffenerseparation,0),hybridmotherrotR));
+ ssdhybridlist->Add(ssdhybridassembly[i]);
}
-/////////////////////////////////////////////////////////////
-// Mother Volume Containing Capacitor Part
-/////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////
+ // Mother Volume Containing Capacitor Part
+ /////////////////////////////////////////////////////////////
const Int_t kcapacitormothernumber = 8;
Double_t xcapacitorvertex[kcapacitormothernumber];
Double_t ycapacitorvertex[kcapacitormothernumber];
////////////////////////////
// Connector
///////////////////////////
- const Int_t kssdconnectornumber = 2;
- TGeoBBox* ssdconnectorshape[kssdconnectornumber];
+ const Int_t kssdconnectorlayernumber = 3;
+ TGeoBBox* ssdconnectorshape[kssdconnectorlayernumber];
+ Double_t ssdConnectorThickness[kssdconnectorlayernumber]={fgkSSDConnectorAlHeight,fgkSSDConnectorNiHeight,fgkSSDConnectorSnHeight};
+ /*
Double_t ssdAlconnectororigin[3] = {0.0,0.0,0.5*(fgkSSDStiffenerHeight+fgkSSDConnectorAlHeight)};
Double_t ssdNiconnectororigin[3] = {0.0,0.0,0.5*(fgkSSDStiffenerHeight+fgkSSDConnectorNiHeight)
+ fgkSSDConnectorAlHeight};
- const char* ssdconnectorname[kssdconnectornumber] = {"SSDConnectorAl","SSDConnectorNi"};
- TGeoVolume* ssdconnector[kssdconnectornumber];
- for(Int_t i=0; i<kssdconnectornumber; i++){
+ */
+ Double_t ssdconnectororigin[3] = {0,0,0.5*fgkSSDStiffenerHeight};
+ const char* ssdconnectorname[kssdconnectorlayernumber] = {"SSDConnectorAl","SSDConnectorNi","SSDConnectorSn"};
+ TGeoMedium *ssdConnectorMedium[kssdconnectorlayernumber]={fSSDAlTraceFlexMedium,fSSDStiffenerConnectorMedium,fSSDSn};
+ TGeoVolume* ssdconnector[kssdconnectorlayernumber];
+ for(Int_t i=0; i<kssdconnectorlayernumber; i++){
+ ssdconnectororigin[2]+= 0.5*ssdConnectorThickness[i];
ssdconnectorshape[i] = new TGeoBBox(0.5*fgkSSDConnectorLength,
0.5*fgkSSDConnectorWidth,
- 0.5*((1-i)*fgkSSDConnectorAlHeight
- + i*fgkSSDConnectorNiHeight),
- i==0? ssdAlconnectororigin : ssdNiconnectororigin);
+ 0.5*ssdConnectorThickness[i],
+ ssdconnectororigin);
+ ssdconnectororigin[2]+= 0.5*ssdConnectorThickness[i];
ssdconnector[i] = new TGeoVolume(ssdconnectorname[i],ssdconnectorshape[i],
- i==0 ? fSSDAlTraceFlexMedium
- : fSSDStiffenerConnectorMedium);
- ssdconnector[i]->SetLineColor(i==0 ? fColorAl : fColorPhynox);
+ ssdConnectorMedium[i]);
+ ssdconnector[i]->SetLineColor(i==0 ? fColorAl : fColorNiSn);
}
- TGeoTranslation* ssdconnectortrans[2*kssdconnectornumber];
+ const Int_t kssdconnectornumber = 4;
+ TGeoTranslation* ssdconnectortrans[kssdconnectornumber];
ssdconnectortrans[0] = new TGeoTranslation(-ssdstiffenershape->GetDX()
+ fgkSSDConnectorPosition[0]
- fgkSSDConnectorSeparation
-(ssdstiffenershape->GetDY()
- fgkSSDConnectorPosition[1]
- ssdconnectorshape[0]->GetDY()),0.0);
- for(Int_t i=0; i<2*kssdconnectornumber; i++)
- for(Int_t j=0; j<kssdconnectornumber; j++)
- ssdhybridcapacitormother->AddNode(ssdconnector[j],i+1,ssdconnectortrans[i]);
+ for(Int_t i=0; i<kssdconnectornumber; i++) {
+ Int_t nlay = kssdconnectorlayernumber - 1;
+ if (i == 1 || i == 2)
+ nlay++;
+ for(Int_t j=0; j<nlay; j++)
+ ssdhybridcapacitormother->AddNode(ssdconnector[j],i+1,ssdconnectortrans[i]);
+ }
////////////////////////////
// Capacitor 1812-330 nF
///////////////////////////
- Double_t ssdcapacitor1812origin[3] = {0.0,0.0,0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor1812Height)};
+// Double_t ssdcapacitor1812origin[3] = {0.0,0.0,0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor1812Height)};
TGeoBBox* capacitor1812shape = new TGeoBBox("Capacitor1812Shape",
0.5*fgkSSDCapacitor1812Length,
0.5*fgkSSDCapacitor1812Width,
- 0.5*fgkSSDCapacitor1812Height,
- ssdcapacitor1812origin);
+ 0.5*fgkSSDCapacitor1812Height);
+ // ssdcapacitor1812origin);
TGeoVolume* capacitor1812 = new TGeoVolume("Capacitor1812",capacitor1812shape,
fSSDStiffener1812CapacitorMedium);
capacitor1812->SetLineColor(fColorAl);
TGeoTranslation* capacitor1812trans = new TGeoTranslation(0.0,
0.5*fgkSSDStiffenerWidth+ssdstiffenerseparation
- - capacitor1812shape->GetDY()-fgkSSDConnectorPosition[1],0.0);
+ - capacitor1812shape->GetDY()-fgkSSDConnectorPosition[1],0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor1812Height));
ssdhybridcapacitormother->AddNode(capacitor1812,1,capacitor1812trans);
+
+ TGeoBBox* capacitor1812capshape = new TGeoBBox("Capacitor1812CapShape",
+ 0.5*fgkSSDCapacitor1812CapLength, 0.5*fgkSSDCapacitor1812Width,
+ 0.5*fgkSSDCapacitor1812Height);
+ TGeoVolume* capacitor1812cap = new TGeoVolume("Capacitor1812Cap",capacitor1812capshape,
+ fSSDStiffenerCapacitorCapMedium);
+ capacitor1812cap->SetLineColor(fColorNiSn);
+ TGeoTranslation* capacitor1812captrans1 = new TGeoTranslation(
+ - capacitor1812shape->GetDX() - capacitor1812capshape->GetDX(),
+ 0.5*fgkSSDStiffenerWidth+ssdstiffenerseparation
+ - capacitor1812shape->GetDY() - fgkSSDConnectorPosition[1],
+ 0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor1812Height));
+ ssdhybridcapacitormother->AddNode(capacitor1812cap,1,capacitor1812captrans1);
+ TGeoTranslation* capacitor1812captrans2 = new TGeoTranslation(
+ capacitor1812shape->GetDX() + capacitor1812capshape->GetDX(),
+ 0.5*fgkSSDStiffenerWidth+ssdstiffenerseparation
+ - capacitor1812shape->GetDY() - fgkSSDConnectorPosition[1],
+ 0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor1812Height));
+ ssdhybridcapacitormother->AddNode(capacitor1812cap,2,capacitor1812captrans2);
+
////////////////////////////
//Hybrid Wire
////////////////////////////
- fgkSSDConnectorSeparation;
Double_t wirey = ssdstiffenerseparation+fgkSSDStiffenerWidth
- 2.*fgkSSDConnectorPosition[1]-fgkSSDConnectorWidth;
- Double_t ssdwireradius = TMath::Sqrt(TMath::Power(wirex,2.)
- + TMath::Power(wirey,2));
+ Double_t ssdwireradius = TMath::Sqrt(wirex*wirex+wirey*wirey);
+
Double_t wireangle = TMath::ATan(wirex/wirey);
TGeoTube *hybridwireshape = new TGeoTube("HybridWireShape", 0.,
fgkSSDWireRadius, 0.5*ssdwireradius);
0.5*ssdwireradius-0.5*fgkSSDStiffenerWidth
+ fgkSSDConnectorPosition[1]+0.5*fgkSSDConnectorWidth,
ssdstiffenershape->GetDZ()
- + fgkSSDWireRadius+fgkSSDConnectorAlHeight+fgkSSDConnectorNiHeight,
+ + fgkSSDWireRadius+fgkSSDConnectorAlHeight+fgkSSDConnectorNiHeight+fgkSSDConnectorSnHeight,
new TGeoRotation("HybridWireRot1",0.,90.,0.));
hybridwirecombitrans[1] = new TGeoCombiTrans("HybridWireCombiTrans2",
0.0,
/////////////////////////////////////////////////////////////
delete hybridwirecombitrans[0];
delete hybridwirecombitrans[1];
- delete ssdchipsystemlist;
return ssdhybridlist;
/////////////////////////////////////////////////////////////
}
localcoolingblockrot->SetAngles(0.,90.,0.);
TGeoCombiTrans localcoolingblockmatrix(0.,0.5*fgkSSDCoolingBlockWidth,0.,localcoolingblockrot);
TVector3* coolingblocktransvector;
- coolingblocktransvector = new TVector3(fgkSSDModuleSensorSupportDistance
- + fgkSSDCoolingBlockLength,
+ coolingblocktransvector = new TVector3(fgkCoolingTubeSeparation,
fgkSSDSensorLength
- 2.*fgkSSDModuleStiffenerPosition[1]
- - fgkSSDCoolingBlockWidth);
+ - fgkSSDCoolingBlockWidth, 0);
const Int_t kcoolingblocktransnumber = 2;
const Int_t kcoolingblocknumber = 4;
TGeoHMatrix* coolingblockmatrix[kcoolingblocknumber];
- TGeoHMatrix* coolingtubematrix[kcoolingblocknumber];
TGeoRotation* localcoolingtuberot = new TGeoRotation();
localcoolingtuberot->SetAngles(0.0,90.0,0.0);
- TGeoTranslation* localcoolingtubetrans = new TGeoTranslation();
- localcoolingtubetrans->SetTranslation(0.5*fgkSSDCoolingBlockLength,
- 0.5*fgkSSDCoolingBlockWidth,
- fgkSSDCoolingBlockHoleCenter);
- TGeoCombiTrans localcoolingtubematrix (*localcoolingtubetrans,*localcoolingtuberot);
- Double_t coolingtubedistance = fgkCoolingTubeSupportRmax-fgkCoolingTubeSupportRmin;
for(Int_t i=0; i<kcoolingblocktransnumber; i++){
for(Int_t j=0; j<kcoolingblocktransnumber; j++){
- TGeoTranslation localcoolingblocktrans(i*coolingblocktransvector->X()+2*coolingtubedistance,
+ TGeoTranslation localcoolingblocktrans(i*coolingblocktransvector->X(),//+2*coolingtubedistance,
j*coolingblocktransvector->Y(),
- 0.5*(fgkSSDCoolingBlockHoleCenter
+ fgkCoolingTubeRmax));
coolingblockmatrix[2*i+j] = new TGeoHMatrix(localcoolingblocktrans*localcoolingblockmatrix);
- coolingtubematrix[2*i+j] = new TGeoHMatrix(localcoolingblocktrans*localcoolingtubematrix);
}
}
- /////////////////////////////////////////////////////////////
- // Virtual Volume containing CoolingBlock System
- /////////////////////////////////////////////////////////////
- TGeoXtru* coolingsystemothershape = new TGeoXtru(2);
- const Int_t kmothervertexnumber = 16;
- Double_t xmothervertex[kmothervertexnumber];
- Double_t ymothervertex[kmothervertexnumber];
- ///////////////////////
- // Setting the vertices
- ///////////////////////fgkCoolingTubeSupportRmax
- xmothervertex[0] = 0.0,ymothervertex[0] = 0.0;
- xmothervertex[1] = xmothervertex[0], ymothervertex[1] = coolingblocktransvector->Y()
- + fgkSSDCoolingBlockWidth;
- xmothervertex[2] = coolingblocktransvector->X()
- + fgkSSDCoolingBlockLength
- + 4*coolingtubedistance;
- ymothervertex[2] = ymothervertex[1];
- xmothervertex[3] = xmothervertex[2], ymothervertex[3] = ymothervertex[0];
- xmothervertex[4] = xmothervertex[3]-2.*coolingtubedistance-fgkSSDCoolingBlockLength;
- ymothervertex[4] = ymothervertex[0];
- xmothervertex[5] = xmothervertex[4], ymothervertex[5] = fgkSSDCoolingBlockWidth;
- xmothervertex[6] = xmothervertex[3]-coolingtubedistance;
- ymothervertex[6] = ymothervertex[5];
- xmothervertex[7] = xmothervertex[6], ymothervertex[7] = ymothervertex[2]
- - fgkSSDCoolingBlockWidth;
- xmothervertex[8] = xmothervertex[5], ymothervertex[8] = ymothervertex[7];
- xmothervertex[9] = xmothervertex[8], ymothervertex[9] = ymothervertex[2]
- - coolingtubedistance;
- xmothervertex[10] = fgkSSDCoolingBlockLength+2.*coolingtubedistance;
- ymothervertex[10] = ymothervertex[9];
- xmothervertex[11] = xmothervertex[10], ymothervertex[11] = ymothervertex[8];
- xmothervertex[12] = coolingtubedistance, ymothervertex[12] = ymothervertex[11];
- xmothervertex[13] = xmothervertex[12], ymothervertex[13] = fgkSSDCoolingBlockWidth;
- xmothervertex[14] = 2.*coolingtubedistance+fgkSSDCoolingBlockLength;
- ymothervertex[14] = ymothervertex[13];
- xmothervertex[15] = xmothervertex[14], ymothervertex[15] = ymothervertex[0];
- //////////////////////////////////////////////////////////
- coolingsystemothershape->DefinePolygon(kmothervertexnumber,
- xmothervertex,ymothervertex);
- coolingsystemothershape->DefineSection(0,-0.5*(fgkSSDCoolingBlockHoleCenter
- + fgkCoolingTubeRmax));
- coolingsystemothershape->DefineSection(1, 0.5*(fgkSSDCoolingBlockHoleCenter
- + fgkCoolingTubeRmax));
TGeoVolume* coolingsystemother = new TGeoVolumeAssembly("CoolingBlockSystem");
-// TGeoVolume* coolingsystemother = new TGeoVolume("CoolingBlockSystem",
-// coolingsystemothershape,fSSDAir);
- /////////////////////////////////////////////////////////////
- // SSD Cooling Tube Part
- /////////////////////////////////////////////////////////////
- TGeoTube* coolingtubeshape[fgkcoolingtubenumber];
- coolingtubeshape[0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.5*(fgkSSDCoolingBlockWidth-fgkSSDTolerance));
- coolingtubeshape[1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- 0.5*(fgkSSDCoolingBlockWidth-fgkSSDTolerance));
- TGeoVolume* coolingtube[fgkcoolingtubenumber];
- coolingtube[0] = new TGeoVolume("OuterCoolingTube",coolingtubeshape[0],
- fSSDCoolingTubePhynox);
- coolingtube[1] = new TGeoVolume("InnerCoolingTube",coolingtubeshape[1],
- fSSDCoolingTubeWater);
- coolingtube[0]->SetLineColor(fColorPhynox);
- coolingtube[1]->SetLineColor(fColorWater);
TGeoVolume* ssdcoolingblock = GetSSDCoolingBlock(30);
/////////////////////////////////////////////////////////////
// Adding Cooling block to mother volume
/////////////////////////////////////////////////////////////
- for(Int_t i=0; i<kcoolingblocknumber; i++){
- coolingsystemother->AddNode(ssdcoolingblock,i+1,coolingblockmatrix[i]);
- coolingsystemother->AddNode(coolingtube[0],i+1,coolingtubematrix[i]);
- coolingsystemother->AddNode(coolingtube[1],i+1,coolingtubematrix[i]);
+ for(Int_t i=0; i<kcoolingblocknumber; i++){
+ coolingsystemother->AddNode(ssdcoolingblock,i+1,coolingblockmatrix[i]);
}
/////////////////////////////////////////////////////////////
// Deallocating memory
/////////////////////////////////////////////////////////////
- delete coolingblocktransvector;
- delete localcoolingblockrot;
- delete localcoolingtubetrans;
- delete localcoolingtuberot;
- /////////////////////////////////////////////////////////////
- // Checking overlaps
- /////////////////////////////////////////////////////////////
- //coolingsystemother->CheckOverlaps(0.01);
- /////////////////////////////////////////////////////////////
- return coolingsystemother;
+ delete coolingblocktransvector;
+ delete localcoolingblockrot;
+
+ return coolingsystemother;
}
/////////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::GetSSDStiffenerFlex()const{
TVector3* referencetrans[karcnumber];
referencetrans[0] = new TVector3(ssdflexboxlength*CosD(2.*fgkSSDFlexAngle)
+ radius[0]*SinD(2.*fgkSSDFlexAngle),
- radius[0]);
+ radius[0], 0);
referencetrans[1] = new TVector3(referencetrans[0]->X()
+ fgkSSDFlexLength[2],
- - fgkSSDStiffenerHeight);
+ - fgkSSDStiffenerHeight, 0);
for(Int_t i=0; i<karcnumber; i++){
for(Int_t j=0; j<knedges+1; j++){
vertexposition[j+i*(knedges+1)] = new TVector3(radius[i]*CosD(angle[i]),
- radius[i]*SinD(angle[i]));
+ radius[i]*SinD(angle[i]), 0);
angle[i] += deltangle[i]*(1.0-2.0*i);
}
}
}
}
for(Int_t i=0; i<kendflexlayernumber; i++){
- vertex[i][0] = new TVector3(transvector[i]->X(),transvector[i]->Y());
- vertex[i][1] = new TVector3(transvector[i+1]->X(),transvector[i+1]->Y());
+ vertex[i][0] = new TVector3(transvector[i]->X(),transvector[i]->Y(),0);
+ vertex[i][1] = new TVector3(transvector[i+1]->X(),transvector[i+1]->Y(),0);
for(Int_t j=0; j<karcnumber*(knedges+1); j++){
if(j<(knedges+1)){
vertex[i][j+2] = new TVector3(vertexposition[j]->X()*ratioradius[0][i+1],
- vertexposition[j]->Y()*ratioradius[0][i+1]);
+ vertexposition[j]->Y()*ratioradius[0][i+1], 0);
vertex[i][j+2]->RotateZ(referenceangle[0]);
*vertex[i][j+2] += *referencetrans[0];
vertex[i][4*(knedges+1)-j+1] =
new TVector3(vertexposition[j]->X()*ratioradius[0][i],
- vertexposition[j]->Y()*ratioradius[0][i]);
+ vertexposition[j]->Y()*ratioradius[0][i], 0);
vertex[i][4*(knedges+1)-j+1]->RotateZ(referenceangle[0]);
*vertex[i][4*(knedges+1)-j+1] += *referencetrans[0];
}
else{
vertex[i][j+2] = new TVector3(vertexposition[j]->X()*ratioradius[1][i+1],
- vertexposition[j]->Y()*ratioradius[1][i+1]);
+ vertexposition[j]->Y()*ratioradius[1][i+1],0);
vertex[i][j+2]->RotateZ(referenceangle[1]);
*vertex[i][j+2] += *referencetrans[1];
vertex[i][4*(knedges+1)-j+1] =
new TVector3(vertexposition[j]->X()*ratioradius[1][i],
- vertexposition[j]->Y()*ratioradius[1][i]);
+ vertexposition[j]->Y()*ratioradius[1][i],
+ 0);
vertex[i][4*(knedges+1)-j+1]->RotateZ(referenceangle[1]);
*vertex[i][4*(knedges+1)-j+1] += *referencetrans[1];
}
- fgkSSDMountingBlockHeight[0];
yvertex[6] = yvertex[5];
yvertex[7] = yvertex[0];
+
///////////////////////////////////////////////////////////////////////
// TGeoXTru Volume definition for Mounting Block Part
///////////////////////////////////////////////////////////////////////
screwvertex[i] = new TVector3(fgkSSDMountingBlockScrewHoleRadius[0]
*CosD(phi0+i*deltaphi),
fgkSSDMountingBlockScrewHoleRadius[0]
- *SinD(phi0+i*deltaphi));
+ *SinD(phi0+i*deltaphi), 0);
Double_t xscrewvertex[kscrewvertexnumber+6];
Double_t yscrewvertex[kscrewvertexnumber+6];
xscrewvertex[0] = - fgkSSDMountingBlockScrewHoleRadius[0];
xmothervertex[6] = xvertex[5]+fgkSSDMountingBlockLength[2];
ymothervertex[6] = ymothervertex[5];
xmothervertex[7] = xmothervertex[6];
- ymothervertex[7] = ymothervertex[4];
+ ymothervertex[7] = ymothervertex[4] - fgkSSDTolerance;
xmothervertex[8] = xmothervertex[7]
+ 0.5*(fgkSSDMountingBlockLength[1]
- fgkSSDMountingBlockLength[2]);
- ymothervertex[8] = ymothervertex[4];
+ ymothervertex[8] = ymothervertex[7];
xmothervertex[9] = xmothervertex[8];
ymothervertex[9] = ymothervertex[2];
xmothervertex[10] = xvertex[0]+fgkSSDMountingBlockLength[0];
ymothervertex[7] = ymothervertex[6]-fgkMountingBlockClipThickness;
ymothervertex[8] = ymothervertex[7];
ymothervertex[9] = ymothervertex[0];
+
///////////////////////////////////////////////////////////////////////
// TGeoXTru Volume definition for Mounting Block Clip Part
///////////////////////////////////////////////////////////////////////
return ssdmountingblockclip;
}
///////////////////////////////////////////////////////////////////////////////
-TList* AliITSv11GeometrySSD::GetCoolingTubeList()const{
+void AliITSv11GeometrySSD::CreateCoolingTubes() {
/////////////////////////////////////////////////////////////
// Method generating the Cooling Tube
+ // sets fcoolingtube and returns list for endladdercoolingtube
/////////////////////////////////////////////////////////////
- TGeoTube** coolingtubeshape[fgkcoolingtubenumber];
- for(Int_t i=0; i<fgkcoolingtubenumber; i++) coolingtubeshape[i] =
- new TGeoTube*[2];
- // Ladder Cooling Tubes
- coolingtubeshape[0][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.25 * (fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1]
- - 2.*fgkSSDCoolingBlockWidth-fgkCoolingTubeSupportWidth)
- -0.5*fgkSSDTolerance);
- coolingtubeshape[0][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- coolingtubeshape[0][0]->GetDz());
- coolingtubeshape[1][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.5*(fgkSSDModuleStiffenerPosition[1]
- - fgkSSDSensorOverlap-fgkSSDTolerance));
- coolingtubeshape[1][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- coolingtubeshape[1][0]->GetDz());
- coolingtubeshape[2][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.5*(fgkSSDModuleStiffenerPosition[1]-fgkSSDTolerance));
- coolingtubeshape[2][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- coolingtubeshape[2][0]->GetDz()-0.5*fgkSSDTolerance);
- // End Ladder Cooling Tubes
- TGeoTube** endladdercoolingtubeshape[fgkendladdercoolingtubenumber];
- for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
- endladdercoolingtubeshape[i] = new TGeoTube*[2];
- endladdercoolingtubeshape[0][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.50 * (fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[0]-fgkSSDTolerance));
- endladdercoolingtubeshape[0][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- endladdercoolingtubeshape[0][0]->GetDz());
- endladdercoolingtubeshape[1][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.50 * (fgkendladdercoolingsupportdistance[0]
- + fgkendladdercoolingsupportdistance[1]
- - fgkCoolingTubeSupportWidth-fgkSSDTolerance));
- endladdercoolingtubeshape[1][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- endladdercoolingtubeshape[1][0]->GetDz()-0.5*fgkSSDTolerance);
- endladdercoolingtubeshape[2][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.50 * (fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - fgkEndLadderMountingBlockPosition[0]
- - fgkendladdercoolingsupportdistance[1]
- - fgkCoolingTubeSupportWidth-fgkSSDTolerance));
- endladdercoolingtubeshape[2][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- endladdercoolingtubeshape[2][0]->GetDz()-0.5*fgkSSDTolerance);
- endladdercoolingtubeshape[3][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.50 * (fgkMountingBlockToSensorSupport
- - 0.50 * (fgkSSDFlexHoleWidth-fgkSSDSensorSideSupportWidth)
- - fgkSSDStiffenerWidth-fgkSSDModuleStiffenerPosition[1]
- + fgkSSDSensorOverlap
- + fgkEndLadderCarbonFiberLowerJunctionLength[1]
- - fgkendladdercoolingsupportdistance[2]
- - fgkEndLadderMountingBlockPosition[1]
- - fgkCoolingTubeSupportWidth-fgkSSDTolerance));
- endladdercoolingtubeshape[3][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- endladdercoolingtubeshape[3][0]->GetDz()-0.5*fgkSSDTolerance);
- endladdercoolingtubeshape[4][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
- 0.50 * (fgkendladdercoolingsupportdistance[2]-fgkSSDTolerance));
- endladdercoolingtubeshape[4][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
- endladdercoolingtubeshape[4][0]->GetDz()-0.5*fgkSSDTolerance);
- // Ladder Cooling Tubes
- TGeoVolume** coolingtube[fgkcoolingtubenumber];
- for(Int_t i=0; i<fgkcoolingtubenumber; i++) coolingtube[i] =
- new TGeoVolume*[2];
- coolingtube[0][0] = new TGeoVolume("OuterCoolingTube1",coolingtubeshape[0][0],
- fSSDCoolingTubePhynox);
- coolingtube[0][1] = new TGeoVolume("InnerCoolingTube1",coolingtubeshape[0][1],
- fSSDCoolingTubeWater);
- coolingtube[1][0] = new TGeoVolume("OuterCoolingTube2",coolingtubeshape[1][0],
- fSSDCoolingTubePhynox);
- coolingtube[1][1] = new TGeoVolume("InnerCoolingTube2",coolingtubeshape[1][1],
- fSSDCoolingTubeWater);
- coolingtube[2][0] = new TGeoVolume("OuterCoolingTube3",coolingtubeshape[2][0],
- fSSDCoolingTubePhynox);
- coolingtube[2][1] = new TGeoVolume("InnerCoolingTube3",coolingtubeshape[2][1],
- fSSDCoolingTubeWater);
- for(Int_t i=0; i<fgkcoolingtubenumber; i++){
- coolingtube[i][0]->SetLineColor(fColorPhynox);
- coolingtube[i][1]->SetLineColor(fColorWater);
- }
- // End Ladder Cooling Tubes
- TGeoVolume** endladdercoolingtube[fgkendladdercoolingtubenumber];
- for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
- endladdercoolingtube[i] = new TGeoVolume*[2];
- endladdercoolingtube[0][0] = new TGeoVolume("OuterEndLadderCoolingTube1",
- endladdercoolingtubeshape[0][0],
- fSSDCoolingTubePhynox);
- endladdercoolingtube[0][1] = new TGeoVolume("InnerEndlLadderCoolingTube1",
- endladdercoolingtubeshape[0][1],
- fSSDCoolingTubeWater);
- endladdercoolingtube[1][0] = new TGeoVolume("OuterEndLadderCoolingTube2",
- endladdercoolingtubeshape[1][0],
- fSSDCoolingTubePhynox);
- endladdercoolingtube[1][1] = new TGeoVolume("InnerEndlLadderCoolingTube2",
- endladdercoolingtubeshape[1][1],
- fSSDCoolingTubeWater);
- endladdercoolingtube[2][0] = new TGeoVolume("OuterEndLadderCoolingTube3",
- endladdercoolingtubeshape[2][0],
- fSSDCoolingTubePhynox);
- endladdercoolingtube[2][1] = new TGeoVolume("InnerEndlLadderCoolingTube3",
- endladdercoolingtubeshape[2][1],
- fSSDCoolingTubeWater);
- endladdercoolingtube[3][0] = new TGeoVolume("OuterEndLadderCoolingTube4",
- endladdercoolingtubeshape[3][0],
- fSSDCoolingTubePhynox);
- endladdercoolingtube[3][1] = new TGeoVolume("InnerEndlLadderCoolingTube4",
- endladdercoolingtubeshape[3][1],
- fSSDCoolingTubeWater);
- endladdercoolingtube[4][0] = new TGeoVolume("OuterEndLadderCoolingTube5",
- endladdercoolingtubeshape[4][0],
- fSSDCoolingTubePhynox);
- endladdercoolingtube[4][1] = new TGeoVolume("InnerEndlLadderCoolingTube5",
- endladdercoolingtubeshape[4][1],
- fSSDCoolingTubeWater);
- for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++){
- endladdercoolingtube[i][0]->SetLineColor(fColorPhynox);
- endladdercoolingtube[i][1]->SetLineColor(fColorWater);
- }
+ TGeoTube *coolingtubeshape[2];
+ // Ladder Cooling Tubes
+
+ // MvL: Simplified cooling tubes
+ coolingtubeshape[0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,0.5*fgkCoolingTubeLength);
+ coolingtubeshape[1] = new TGeoTube(0.0,fgkCoolingTubeRmin,coolingtubeshape[0]->GetDz());
+
+ // End Ladder Cooling Tubes
+ TGeoTube** endladdercoolingtubeshape[fgkendladdercoolingtubenumber];
+ for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
+ endladdercoolingtubeshape[i] = new TGeoTube*[2];
+
+ Double_t sensZshift = 0.5*fgkCarbonFiberJunctionWidth - fgkCarbonFiberLowerSupportWidth - fgkLowerSupportToSensorZ;
+ endladdercoolingtubeshape[0][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[0] - sensZshift));
+ endladdercoolingtubeshape[0][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
+ endladdercoolingtubeshape[0][0]->GetDz());
+ endladdercoolingtubeshape[1][0] = new TGeoTube(fgkCoolingTubeRmin,fgkCoolingTubeRmax,
+ 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[1] + sensZshift));
+ endladdercoolingtubeshape[1][1] = new TGeoTube(0.0,fgkCoolingTubeRmin,
+ endladdercoolingtubeshape[1][0]->GetDz()-0.5*fgkSSDTolerance);
+ // Ladder Cooling Tubes
+ TGeoVolume* coolingtube[2];
+ coolingtube[0] = new TGeoVolume("OuterCoolingTube1",coolingtubeshape[0], fSSDCoolingTubePhynox);
+ coolingtube[1] = new TGeoVolume("InnerCoolingTube1",coolingtubeshape[1], fSSDCoolingTubeWater);
+ coolingtube[0]->SetLineColor(fColorPhynox);
+ coolingtube[1]->SetLineColor(fColorWater);
+
+ // End Ladder Cooling Tubes
+ TGeoVolume** endladdercoolingtube[fgkendladdercoolingtubenumber];
+ for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
+ endladdercoolingtube[i] = new TGeoVolume*[2];
+ endladdercoolingtube[0][0] = new TGeoVolume("OuterEndLadderCoolingTube1",
+ endladdercoolingtubeshape[0][0],
+ fSSDCoolingTubePhynox);
+ endladdercoolingtube[0][1] = new TGeoVolume("InnerEndlLadderCoolingTube1",
+ endladdercoolingtubeshape[0][1],
+ fSSDCoolingTubeWater);
+ endladdercoolingtube[1][0] = new TGeoVolume("OuterEndLadderCoolingTube2",
+ endladdercoolingtubeshape[1][0],
+ fSSDCoolingTubePhynox);
+ endladdercoolingtube[1][1] = new TGeoVolume("InnerEndlLadderCoolingTube2",
+ endladdercoolingtubeshape[1][1],
+ fSSDCoolingTubeWater);
+ for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++){
+ endladdercoolingtube[i][0]->SetLineColor(fColorPhynox);
+ endladdercoolingtube[i][1]->SetLineColor(fColorWater);
+ }
/////////////////////////////////////////////////////////////
// Virtual Volume containing Cooling Tubes
/////////////////////////////////////////////////////////////
// Ladder Cooling Tubes
- TGeoTube* virtualcoolingtubeshape[fgkcoolingtubenumber];
- for(Int_t i=0; i<fgkcoolingtubenumber; i++)
- virtualcoolingtubeshape[i] = new TGeoTube(coolingtubeshape[i][1]->GetRmin(),
- coolingtubeshape[i][0]->GetRmax(),
- coolingtubeshape[i][0]->GetDz());
- TGeoVolume* virtualcoolingtube[fgkcoolingtubenumber];
- virtualcoolingtube[0] = new TGeoVolume("CoolingTube1",virtualcoolingtubeshape[0],
- fSSDAir);
- virtualcoolingtube[1] = new TGeoVolume("CoolingTube2",virtualcoolingtubeshape[1],
- fSSDAir);
- virtualcoolingtube[2] = new TGeoVolume("CoolingTube3",virtualcoolingtubeshape[2],
- fSSDAir);
+ TGeoTube* virtualcoolingtubeshape = new TGeoTube(coolingtubeshape[1]->GetRmin(),
+ coolingtubeshape[0]->GetRmax(),
+ coolingtubeshape[0]->GetDz());
+ fcoolingtube = new TGeoVolume("CoolingTube1",virtualcoolingtubeshape, fSSDAir);
+ fcoolingtube->AddNode(coolingtube[0],1);
+ fcoolingtube->AddNode(coolingtube[1],1);
+
// End Ladder Cooling Tubes
TGeoTube* endladdervirtualcoolingtubeshape[fgkendladdercoolingtubenumber];
for(Int_t i=0; i<fgkendladdercoolingtubenumber; i++)
- endladdervirtualcoolingtubeshape[i] = new TGeoTube(endladdercoolingtubeshape[i][1]->GetRmin(),
- endladdercoolingtubeshape[i][0]->GetRmax(),
- endladdercoolingtubeshape[i][0]->GetDz());
- TGeoVolume* endladdervirtualcoolingtube[fgkendladdercoolingtubenumber];
- endladdervirtualcoolingtube[0] = new TGeoVolume("EndLadderCoolingTube1",
- endladdervirtualcoolingtubeshape[0],
- fSSDAir);
- endladdervirtualcoolingtube[1] = new TGeoVolume("EndLadderCoolingTube2",
- endladdervirtualcoolingtubeshape[1],
- fSSDAir);
- endladdervirtualcoolingtube[2] = new TGeoVolume("EndLadderCoolingTube3",
- endladdervirtualcoolingtubeshape[2],
- fSSDAir);
- endladdervirtualcoolingtube[3] = new TGeoVolume("EndLadderCoolingTube4",
- endladdervirtualcoolingtubeshape[3],
- fSSDAir);
- endladdervirtualcoolingtube[4] = new TGeoVolume("EndLadderCoolingTube5",
- endladdervirtualcoolingtubeshape[4],
- fSSDAir);
- TList* coolingtubelist = new TList();
- for(Int_t i=0; i<fgkcoolingtubenumber; i++){
- virtualcoolingtube[i]->AddNode(coolingtube[i][0],1);
- virtualcoolingtube[i]->AddNode(coolingtube[i][1],1);
- coolingtubelist->Add(virtualcoolingtube[i]);
- }
- endladdervirtualcoolingtube[0]->AddNode(endladdercoolingtube[0][0],1);
- endladdervirtualcoolingtube[0]->AddNode(endladdercoolingtube[0][1],1);
- coolingtubelist->Add(endladdervirtualcoolingtube[0]);
- endladdervirtualcoolingtube[1]->AddNode(endladdercoolingtube[1][0],1);
- endladdervirtualcoolingtube[1]->AddNode(endladdercoolingtube[1][1],1);
- coolingtubelist->Add(endladdervirtualcoolingtube[1]);
- endladdervirtualcoolingtube[2]->AddNode(endladdercoolingtube[2][0],1);
- endladdervirtualcoolingtube[2]->AddNode(endladdercoolingtube[2][1],1);
- coolingtubelist->Add(endladdervirtualcoolingtube[2]);
- endladdervirtualcoolingtube[3]->AddNode(endladdercoolingtube[3][0],1);
- endladdervirtualcoolingtube[3]->AddNode(endladdercoolingtube[3][1],1);
- coolingtubelist->Add(endladdervirtualcoolingtube[3]);
- endladdervirtualcoolingtube[4]->AddNode(endladdercoolingtube[4][0],1);
- endladdervirtualcoolingtube[4]->AddNode(endladdercoolingtube[4][1],1);
- coolingtubelist->Add(endladdervirtualcoolingtube[4]);
- return coolingtubelist;
+ endladdervirtualcoolingtubeshape[i] = new TGeoTube(endladdercoolingtubeshape[i][1]->GetRmin(),
+ endladdercoolingtubeshape[i][0]->GetRmax(),
+ endladdercoolingtubeshape[i][0]->GetDz());
+ fendladdercoolingtube[0] = new TGeoVolume("EndLadderCoolingTube1",
+ endladdervirtualcoolingtubeshape[0],
+ fSSDAir);
+ fendladdercoolingtube[1] = new TGeoVolume("EndLadderCoolingTube2",
+ endladdervirtualcoolingtubeshape[1],
+ fSSDAir);
+ fendladdercoolingtube[0]->AddNode(endladdercoolingtube[0][0],1);
+ fendladdercoolingtube[0]->AddNode(endladdercoolingtube[0][1],1);
+ fendladdercoolingtube[1]->AddNode(endladdercoolingtube[1][0],1);
+ fendladdercoolingtube[1]->AddNode(endladdercoolingtube[1][1],1);
}
///////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::GetSSDCoolingBlock(Int_t nedges){
// Vertex Positioning for TGeoXTru
///////////////////////////////////////
TVector3** vertexposition = new TVector3*[2*kvertexnumber+nedges+1];
- vertexposition[0] = new TVector3(0.0,0.0);
- vertexposition[1] = new TVector3(0.0,fgkSSDCoolingBlockHeight[1]);
+ vertexposition[0] = new TVector3(0.0,0.0, 0.);
+ vertexposition[1] = new TVector3(0.0,fgkSSDCoolingBlockHeight[1],0);
vertexposition[2] = new TVector3(fgkSSDCoolingBlockHoleLength[1],
- vertexposition[1]->Y());
+ vertexposition[1]->Y(),0);
vertexposition[3] = new TVector3(vertexposition[2]->X(),
- vertexposition[2]->Y()+fgkSSDCoolingBlockHeight[2]);
- vertexposition[4] = new TVector3(vertexposition[1]->X(),vertexposition[3]->Y());
+ vertexposition[2]->Y()+fgkSSDCoolingBlockHeight[2],0);
+ vertexposition[4] = new TVector3(vertexposition[1]->X(),vertexposition[3]->Y(),0);
vertexposition[5] = new TVector3(vertexposition[4]->X(),
- + vertexposition[3]->Y()+fgkSSDCoolingBlockHoleRadius[1]);
+ + vertexposition[3]->Y()+fgkSSDCoolingBlockHoleRadius[1],0);
vertexposition[6] = new TVector3(Xfrom2Points(vertexposition[5]->X(),
vertexposition[5]->Y(),0.5*(fgkSSDCoolingBlockLength
- fgkSSDCoolingBlockHoleLength[0]
- 4.*fgkSSDCoolingBlockHoleRadius[1]),
fgkSSDCoolingBlockHeight[0]
- fgkSSDCoolingBlockHoleRadius[1],
- fgkSSDCoolingBlockHeight[0]),fgkSSDCoolingBlockHeight[0]);
+ fgkSSDCoolingBlockHeight[0]),fgkSSDCoolingBlockHeight[0], 0);
vertexposition[7] = new TVector3(0.5*(fgkSSDCoolingBlockLength
- fgkSSDCoolingBlockHoleLength[0]),
- vertexposition[6]->Y());
+ vertexposition[6]->Y(), 0);
Double_t alpha = TMath::ACos(0.5*fgkSSDCoolingBlockHoleLength[0]
/ fgkSSDCoolingBlockHoleRadius[0])*TMath::RadToDeg();
Double_t phi = 180.-alpha;
Double_t deltapsi = psi/nedges;
Double_t radius = fgkSSDCoolingBlockHoleRadius[0]/CosD(0.5*deltapsi);
TVector3* transvector = new TVector3(0.5*fgkSSDCoolingBlockLength,
- fgkSSDCoolingBlockHoleCenter);
+ fgkSSDCoolingBlockHoleCenter, 0);
for(Int_t i=0; i<nedges+1; i++){
vertexposition[kvertexnumber+i] = new TVector3(radius*CosD(phi+i*deltapsi),
- radius*SinD(phi+i*deltapsi));
+ radius*SinD(phi+i*deltapsi),
+ 0);
*vertexposition[kvertexnumber+i] += (*transvector);
}
Double_t param[4] = {1.0,0.0,0.0,-0.5*fgkSSDCoolingBlockLength};
// Deallocating memory
/////////////////////////////////////////////////////////////
delete [] vertexposition;
- delete xvertexpoints;
- delete yvertexpoints;
+ delete [] xvertexpoints;
+ delete [] yvertexpoints;
/////////////////////////////////////////////////////////////
return ssdcoolingblock;
}
/////////////////////////////////////////////////////////////////////////////////
-TGeoVolume* AliITSv11GeometrySSD::GetSSDChipCables(Double_t SSDChipCablesHeigth, Int_t nedges){
+void AliITSv11GeometrySSD::GetSSDChipCables(TGeoVolume *&cableL, TGeoVolume *&cableR, Double_t SSDChipCablesHeight, Int_t nedges){
///////////////////////////////////////////////////////
- const Int_t kssdchipcablesnumber = 2;
- const Int_t kssdchipcableslaynumber = 2;
- const Int_t kvertexnumber = 4*(nedges+1)+4;
+ static const Int_t kssdchipcablesnumber = 2; // Number of cables: left and right
+ static const Int_t kssdchipcableslaynumber = 2; // Number of layers: Al and Kapton
+ static const Int_t kvertexnumber = 4*(nedges+1)+4;
Int_t ssdchipcablescolor[kssdchipcableslaynumber] = {fColorAl,fColorPolyhamide};
Double_t ssdchipcablesradius[kssdchipcableslaynumber];
- ssdchipcablesradius[0] = 0.25*(SSDChipCablesHeigth
+ ssdchipcablesradius[0] = 0.25*(SSDChipCablesHeight
- fgkSSDChipCablesHeight[0]
- fgkSSDChipCablesHeight[1]);
ssdchipcablesradius[1] = ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0];
Double_t phi = 180.;
Double_t deltaphi = 180./nedges;
Double_t angle = 0.0;
- Double_t **xvertexpoints = new Double_t*[kssdchipcableslaynumber];
- Double_t **yvertexpoints = new Double_t*[kssdchipcableslaynumber];
- for(Int_t i=0; i<kssdchipcableslaynumber;i++){
- xvertexpoints[i] = new Double_t[kvertexnumber];
- yvertexpoints[i] = new Double_t[kvertexnumber];
- }
+
+ Double_t xvertexpoints[kssdchipcableslaynumber][kvertexnumber];
+ Double_t yvertexpoints[kssdchipcableslaynumber][kvertexnumber];
+
TVector3* vertex = new TVector3();
TVector3* transvector[kssdchipcableslaynumber];
transvector[0] = new TVector3(fgkSSDChipWidth,
- SSDChipCablesHeigth-ssdchipcablesradius[0]);
+ SSDChipCablesHeight-ssdchipcablesradius[0], 0);
transvector[1] = new TVector3();
- TGeoXtru* ssdchipcableshape[kssdchipcableslaynumber*kssdchipcableslaynumber];
- TGeoVolume* ssdchipcable[kssdchipcableslaynumber*kssdchipcableslaynumber];
- const char* ssdchipcablename[kssdchipcableslaynumber*kssdchipcableslaynumber] =
+ TGeoXtru* ssdchipcableshape[kssdchipcableslaynumber*kssdchipcablesnumber];
+ TGeoVolume* ssdchipcable[kssdchipcableslaynumber*kssdchipcablesnumber];
+ const char* ssdchipcablename[kssdchipcableslaynumber*kssdchipcablesnumber] =
{"SSDChipcableAllay1Left","SSDChipcableKaptonlay2Left",
"SSDChipcableAllay1Right","SSDChipcableKaptonlay2Right"};
for(Int_t k=0; k<kssdchipcablesnumber; k++){
+ fgkSSDChipCablesHeight[0]
+ fgkSSDChipCablesHeight[1]);
for(Int_t i=0; i<kssdchipcableslaynumber; i++){
- vertexposition[i][0] = new TVector3(0.,SSDChipCablesHeigth
- - fgkSSDChipCablesHeight[0]-i*fgkSSDChipCablesHeight[1]);
- vertexposition[i][1] = new TVector3(0.,SSDChipCablesHeigth
- - i*fgkSSDChipCablesHeight[0]);
+ vertexposition[i][0] = new TVector3(0.,SSDChipCablesHeight
+ - fgkSSDChipCablesHeight[0]-i*fgkSSDChipCablesHeight[1], 0);
+ vertexposition[i][1] = new TVector3(0.,SSDChipCablesHeight
+ - i*fgkSSDChipCablesHeight[0], 0);
vertexposition[i][2*(nedges+1)+2] =
new TVector3(fgkSSDChipWidth+ssdchipcablesradius[0]
+ fgkSSDChipCablesWidth[1]
+ fgkSSDChipCablesWidth[2],
((1.-i)*fgkSSDChipCablesHeight[i]
- + fgkSSDChipCablesHeight[1]));
+ + fgkSSDChipCablesHeight[1]), 0);
vertexposition[i][2*(nedges+1)+3] =
new TVector3(vertexposition[i][2*(nedges+1)+2]->X(),
vertexposition[i][2*(nedges+1)+2]->Y()
- - fgkSSDChipCablesHeight[i]);
+ - fgkSSDChipCablesHeight[i], 0);
for(Int_t j=0; j<nedges+1; j++){
angle = 0.5*phi+TMath::Power(-1,i+1)*j*deltaphi;
vertex->SetX(ssdchipcablesradius[0]*CosD(angle));
new TVector3(*vertex+*transvector[i]);
vertexposition[1][(nedges+1)*i+j+2] =
new TVector3(vertex->X()*ratio[2*i]+transvector[i]->X(),
- vertex->Y()*ratio[2*i]+transvector[i]->Y());
+ vertex->Y()*ratio[2*i]+transvector[i]->Y(), 0);
vertexposition[0][(4-i)*(nedges+1)+4-j-1] =
new TVector3(*vertexposition[1][(nedges+1)*i+j+2]);
vertexposition[1][(4-i)*(nedges+1)+4-j-1] =
new TVector3(vertex->X()*ratio[2*i+1]
+ transvector[i]->X(),
vertex->Y()*ratio[2*i+1]
- + transvector[i]->Y());
+ + transvector[i]->Y(), 0);
}
}
for(Int_t i=0; i<kssdchipcableslaynumber; i++){
/////////////////////////////////////////////////////////////
// Mother Volume definition
/////////////////////////////////////////////////////////////
- Double_t ssdchipseparation = fgkSSDSensorLength
- - 2.*fgkSSDModuleStiffenerPosition[1]
- - 2.*(fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist
- - 0.5*fgkSSDChipWidth)-fgkSSDChipWidth;
- Double_t boxorigin[3] = {-0.5*ssdchipseparation,0.,0.5*SSDChipCablesHeigth};
- Double_t dx = ssdchipseparation+2.*(fgkSSDChipWidth+ssdchipcablesradius[0]
- +fgkSSDChipCablesWidth[1]
- +fgkSSDChipCablesWidth[2]);
- Double_t dy = fgkSSDChipCablesLength[1];
- Double_t dz = SSDChipCablesHeigth;
- new TGeoBBox(0.5*dx,0.5*dy,0.5*dz,boxorigin);
- TGeoVolumeAssembly* ssdchipcablesmother = new TGeoVolumeAssembly("SSDChipCablesMother");
-// TGeoVolume* ssdchipcablesmother = new TGeoVolume("SSDChipCablesMother",
-// ssdchipcablesmotherbox,fSSDAir);
- /////////////////////////////////////////////////////////////
- // Rotation and Translation Definition for positioning
- /////////////////////////////////////////////////////////////
- TGeoRotation* ssdchipcablesrot[5];
- ssdchipcablesrot[0] = new TGeoRotation("",90.,180.,-90);
- ssdchipcablesrot[1] = new TGeoRotation("",0.0,90.0,0.0);
- ssdchipcablesrot[2] = new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]));
- ssdchipcablesrot[3] = new TGeoRotation("",180.,0.0,0.0);
- ssdchipcablesrot[4] = new TGeoRotation((*ssdchipcablesrot[3])*(*ssdchipcablesrot[2]));
- TGeoCombiTrans* ssdchipcablescombitrans = new TGeoCombiTrans(-ssdchipseparation,
- 0.,0.,ssdchipcablesrot[2]);
- ssdchipcablesmother->AddNode(ssdchipcable[0],1,ssdchipcablesrot[4]);
- ssdchipcablesmother->AddNode(ssdchipcable[1],1,ssdchipcablesrot[4]);
- ssdchipcablesmother->AddNode(ssdchipcable[2],1,ssdchipcablescombitrans);
- ssdchipcablesmother->AddNode(ssdchipcable[3],1,ssdchipcablescombitrans);
+ static const Int_t kmothervertexnumber = 8;
+ Double_t xmothervertex[kmothervertexnumber];
+ Double_t ymothervertex[kmothervertexnumber];
+ xmothervertex[0] = xvertexpoints[0][1];
+ ymothervertex[0] = yvertexpoints[0][1];
+ xmothervertex[1] = xvertexpoints[0][2+nedges/2];
+ ymothervertex[1] = yvertexpoints[0][1];
+ xmothervertex[2] = xvertexpoints[0][2+nedges/2];
+ ymothervertex[2] = yvertexpoints[0][2+nedges];
+ xmothervertex[3] = xvertexpoints[0][3+nedges];
+ ymothervertex[3] = yvertexpoints[0][3+nedges];
+ xmothervertex[4] = xvertexpoints[0][3+2*nedges];
+ ymothervertex[4] = yvertexpoints[0][3+2*nedges]+fgkSSDTolerance;
+ xmothervertex[5] = xvertexpoints[0][4+2*nedges];
+ ymothervertex[5] = yvertexpoints[0][4+2*nedges]+fgkSSDTolerance;
+ xmothervertex[6] = xvertexpoints[1][5+2*nedges];
+ ymothervertex[6] = yvertexpoints[1][5+2*nedges];
+ xmothervertex[7] = xvertexpoints[0][1];
+ ymothervertex[7] = yvertexpoints[1][5+2*nedges];
+ TGeoXtru *ssdchipcablemothershape = new TGeoXtru(2);
+ ssdchipcablemothershape->DefinePolygon(kmothervertexnumber,xmothervertex,ymothervertex);
+ ssdchipcablemothershape->DefineSection(0,-0.5*fgkSSDChipCablesLength[1]);
+ ssdchipcablemothershape->DefineSection(1,+0.5*fgkSSDChipCablesLength[1]);
+
+ cableL = new TGeoVolume("SSDChipCableMotherLeft",ssdchipcablemothershape,fSSDAir);
+ cableR = new TGeoVolume("SSDChipCableMotherRight",ssdchipcablemothershape,fSSDAir);
+
+ cableL->AddNode(ssdchipcable[0],1);
+ cableL->AddNode(ssdchipcable[1],1);
+ cableR->AddNode(ssdchipcable[2],1);
+ cableR->AddNode(ssdchipcable[3],1);
+
/////////////////////////////////////////////////////////////
// Deallocating memory
/////////////////////////////////////////////////////////////
- for(Int_t i=0; i<kssdchipcableslaynumber;i++){
- delete [] xvertexpoints[i];
- delete [] yvertexpoints[i];
- }
for(Int_t i=0; i<kssdchipcableslaynumber; i++) delete [] vertexposition[i];
for(Int_t i=0; i<kssdchipcableslaynumber; i++) delete transvector[i];
delete vertex;
- delete ssdchipcablesrot[0];
- delete ssdchipcablesrot[1];
- delete ssdchipcablesrot[3];
- /////////////////////////////////////////////////////////////
- return ssdchipcablesmother;
-}
-///////////////////////////////////////////////////////////////////////////////
-TList* AliITSv11GeometrySSD::GetSSDChipSystem(){
- /////////////////////////////////////////////////////////////
- // SSD Chip Assembly
- /////////////////////////////////////////////////////////////
- TGeoVolume* ssdchipassembly = GetSSDChips();
- TList* ssdchipsystemlist = new TList();
-// const Int_t knedges = 20;
- const Int_t knedges = 5;
- const Int_t kchipsystemnumber = 2;
- /////////////////////////////////////////////////////////////
- // Mother Volume containing SSDChipSystem
- /////////////////////////////////////////////////////////////
- TGeoXtru* chipsystemothershape[kchipsystemnumber];
- for(Int_t i=0; i<kchipsystemnumber; i++) chipsystemothershape[i] = new TGeoXtru(2);
- const Int_t kmothervertexnumber = 12;
- Double_t xmothervertex[kchipsystemnumber][kmothervertexnumber];
- Double_t ymothervertex[kchipsystemnumber][kmothervertexnumber];
- Double_t ssdchipcablesradius[kchipsystemnumber];
- Double_t ssdchipseparation = fgkSSDSensorLength
- - 2.*fgkSSDModuleStiffenerPosition[1]
- - 2.*(fgkSSDStiffenerWidth
- - fgkSSDStiffenerToChipDist-0.5*fgkSSDChipWidth);
- for(Int_t i=0; i<kchipsystemnumber; i++)
- ssdchipcablesradius[i] = 0.25*(fgkSSDChipCablesHeight[i+2]
- - fgkSSDChipCablesHeight[0]
- - fgkSSDChipCablesHeight[1]);
- ///////////////////////
- // Setting the vertices
- ///////////////////////
- xmothervertex[0][0] = -0.5*fgkSSDChipCablesLength[1];
- xmothervertex[0][1] = xmothervertex[0][0];
- xmothervertex[0][2] = (fgkSSDChipNumber-1)*(fgkSSDChipLength
- + fgkSSDChipSeparationLength)+0.5*fgkSSDChipCablesLength[1];
- xmothervertex[0][3] = xmothervertex[0][2];
- xmothervertex[0][4] = 0.5*fgkSSDChipCablesLength[1];
- xmothervertex[0][5] = xmothervertex[0][4];
- xmothervertex[0][6] = xmothervertex[0][2]-0.5*fgkSSDChipCablesLength[1];
- xmothervertex[0][7] = xmothervertex[0][6];
- xmothervertex[0][8] = 0.0;
- xmothervertex[0][9] = xmothervertex[0][8];
- xmothervertex[0][10] = xmothervertex[0][4];
- xmothervertex[0][11] = xmothervertex[0][10];
- for(Int_t i=0; i<kmothervertexnumber; i++)
- xmothervertex[1][i] = xmothervertex[0][i];
- for(Int_t i=0; i<kchipsystemnumber; i++){
- ymothervertex[i][0] = -0.5*fgkSSDChipWidth-ssdchipcablesradius[i]
- - fgkSSDChipCablesWidth[1]-fgkSSDChipCablesWidth[2];
- ymothervertex[i][1] = ssdchipseparation-ymothervertex[i][0];
- ymothervertex[i][2] = ymothervertex[i][1];
- ymothervertex[i][3] = ymothervertex[i][0];
- ymothervertex[i][4] = ymothervertex[i][0];
- ymothervertex[i][5] = 0.5*fgkSSDChipWidth;
- ymothervertex[i][6] = ymothervertex[i][5];
- ymothervertex[i][7] = ssdchipseparation-0.5*fgkSSDChipWidth;
- ymothervertex[i][8] = ymothervertex[i][7];
- ymothervertex[i][9] = ymothervertex[i][5];
- ymothervertex[i][10] = ymothervertex[i][5];
- ymothervertex[i][11] = ymothervertex[i][4];
- }
- //////////////////////////////////////////////////////////
-// TGeoVolume* chipsystemother[kchipsystemnumber];
- TGeoVolumeAssembly* chipsystemother[kchipsystemnumber];
- const char* chipsytemothername[kchipsystemnumber] =
- {"SSDChipSytemother1","SSDChipSytemother2"};
- for(Int_t i=0; i<kchipsystemnumber; i++){
- chipsystemothershape[i]->DefinePolygon(kmothervertexnumber,
- xmothervertex[i],ymothervertex[i]);
- chipsystemothershape[i]->DefineSection(0,-fgkSSDChipCablesHeight[i+2]
- -0.5*fgkSSDChipHeight);
- chipsystemothershape[i]->DefineSection(1,0.5*fgkSSDChipHeight);
-// chipsystemother[i] = new TGeoVolume(chipsytemothername[i],
-// chipsystemothershape[i],fSSDAir);
- chipsystemother[i] = new TGeoVolumeAssembly(chipsytemothername[i]);
- }
- /////////////////////////////////////////////////////////////
- // SSD Chip Cables
- /////////////////////////////////////////////////////////////
- TGeoVolume* ssdchipcables[kchipsystemnumber];
- TGeoRotation** ssdchipcablesrot[kchipsystemnumber];
- TGeoTranslation** ssdchipcablestrans[kchipsystemnumber];
- TGeoCombiTrans** ssdchipcablescombitrans[kchipsystemnumber];
- //////////////////
- for(Int_t i=0; i<kchipsystemnumber; i++){
- ssdchipcables[i] =
- GetSSDChipCables(fgkSSDChipCablesHeight[i+2],knedges);
- ssdchipcablestrans[i] = new TGeoTranslation*[fgkSSDChipNumber];
- ssdchipcablesrot[i] = new TGeoRotation*[fgkSSDChipNumber];
- ssdchipcablescombitrans[i] = new TGeoCombiTrans*[fgkSSDChipNumber];
- }
- for(Int_t i=0; i<kchipsystemnumber; i++){
- for(Int_t j=0; j<fgkSSDChipNumber; j++){
- ssdchipcablestrans[i][j] = new TGeoTranslation();
- ssdchipcablesrot[i][j] = new TGeoRotation();
- ssdchipcablescombitrans[i][j] = new TGeoCombiTrans();
- ssdchipcablesrot[i][j]->SetAngles(-90.0,0.0,0.0);
- ssdchipcablestrans[i][j]->SetTranslation(j*(fgkSSDChipLength
- + fgkSSDChipSeparationLength),
- 0.5*fgkSSDChipWidth,
- - 0.5*fgkSSDChipHeight
- - fgkSSDChipCablesHeight[i+2]);
- ssdchipcablescombitrans[i][j]->SetRotation(*ssdchipcablesrot[i][j]);
- ssdchipcablescombitrans[i][j]->SetTranslation(*ssdchipcablestrans[i][j]);
- chipsystemother[i]->AddNode(ssdchipcables[i],j+1,ssdchipcablescombitrans[i][j]);
- }
- chipsystemother[i]->AddNode(ssdchipassembly,i+1);
- ssdchipsystemlist->Add(chipsystemother[i]);
- }
- /////////////////////////////////////////////////////////////
- // Deallocating memory
- /////////////////////////////////////////////////////////////
- for(Int_t i=0; i<kchipsystemnumber; i++){
- for(Int_t j=0; j<fgkSSDChipNumber; j++){
- delete ssdchipcablesrot[i][j];
- delete ssdchipcablestrans[i][j];
- }
- delete ssdchipcablesrot[i];
- delete ssdchipcablestrans[i];
- }
/////////////////////////////////////////////////////////////
- return ssdchipsystemlist;
}
-///////////////////////////////////////////////////////////////////////////////
-TGeoVolume* AliITSv11GeometrySSD::GetSSDChips() const{
+//_____________________________________________________________________________
+TGeoVolume* AliITSv11GeometrySSD::GetSSDChip() const{
/////////////////////////////////////////////////////////////
// SSD Chip Assembly Generation
/////////////////////////////////////////////////////////////
- const Int_t kssdchiprownumber = 2;
TGeoBBox* ssdchipcompshape[2];
ssdchipcompshape[0] = new TGeoBBox("SSDChipCompShape",
0.5*fgkSSDChipLength,
TGeoVolume* ssdchip = new TGeoVolume("SSDChip",ssdvirtualchipshape,fSSDAir);
/////////////////////////////////////////////////////////////
for(Int_t i=0; i<2; i++) ssdchip->AddNode(ssdchipcomp[i],1,ssdchipcomptrans[i]);
- Double_t ssdchipseparation[2] = {fgkSSDChipLength+fgkSSDChipSeparationLength,
- fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1]
- - 2.*(fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist
- - 0.5*fgkSSDChipWidth)};
- /////////////////////////////////////////////////////////////
- // Virtual Volume containing SSDChipAssembly
- /////////////////////////////////////////////////////////////
- TGeoXtru* ssdchipmothershape = new TGeoXtru(2);
- const Int_t kssdmothervertexnumber = 2*fgkSSDChipNumber;
- Double_t xmothervertex[kssdmothervertexnumber];
- Double_t ymothervertex[kssdmothervertexnumber];
- ///////////////////////
- // Setting the vertices
- ///////////////////////
- xmothervertex[0] = -0.5*fgkSSDChipLength,ymothervertex[0] = -0.5*fgkSSDChipWidth;
- xmothervertex[1] = xmothervertex[0], ymothervertex[1] = ssdchipseparation[1]
- - ymothervertex[0];
- xmothervertex[2] = (fgkSSDChipNumber-1)*ssdchipseparation[0]-xmothervertex[0];
- ymothervertex[2] = ymothervertex[1];
- xmothervertex[3] = xmothervertex[2], ymothervertex[3] = ymothervertex[0];
- xmothervertex[4] = ssdchipseparation[0]+xmothervertex[0];
- ymothervertex[4] = ymothervertex[0];
- xmothervertex[5] = xmothervertex[4], ymothervertex[5] = -ymothervertex[4];
- xmothervertex[6] = (fgkSSDChipNumber-1)*ssdchipseparation[0]
- + (0.5*fgkSSDChipLength-fgkSSDChipWidth);
- ymothervertex[6] = ymothervertex[5];
- xmothervertex[7] = xmothervertex[6], ymothervertex[7] = ymothervertex[2]
- - fgkSSDChipWidth;
- xmothervertex[8] = -0.5*fgkSSDChipLength+fgkSSDChipWidth;
- ymothervertex[8] = ymothervertex[7];
- xmothervertex[9] = -0.5*fgkSSDChipLength+fgkSSDChipWidth;
- ymothervertex[9] = ymothervertex[6];
- xmothervertex[10] = -xmothervertex[0], ymothervertex[10] = ymothervertex[9];
- xmothervertex[11] = xmothervertex[10], ymothervertex[11] = ymothervertex[0];
- //////////////////////////////////////////////////////////
- ssdchipmothershape->DefinePolygon(kssdmothervertexnumber,
- xmothervertex,ymothervertex);
- ssdchipmothershape->DefineSection(0,-0.5*fgkSSDChipHeight);
- ssdchipmothershape->DefineSection(1, 0.5*fgkSSDChipHeight);
-// TGeoVolume* ssdchipmother = new TGeoVolume("SSDChipContainer",
-// ssdchipmothershape,fSSDAir);
- TGeoVolumeAssembly* ssdchipmother = new TGeoVolumeAssembly("SSDChipContainer");
- /////////////////////////////////////////////////////////////
- for(Int_t i=0; i<kssdchiprownumber; i++)
- for(Int_t j=0; j<fgkSSDChipNumber; j++)
- ssdchipmother->AddNode(ssdchip,fgkSSDChipNumber*i+j+1,
- new TGeoTranslation(j*ssdchipseparation[0],i*ssdchipseparation[1],0.));
- return ssdchipmother;
+ return ssdchip;
}
/////////////////////////////////////////////////////////////////////////////////
TList* AliITSv11GeometrySSD::GetLadderCableSegment(Double_t ssdendladdercablelength){
/////////////////////////////////////////////////////////////
// Method returning a List containing pointers to Ladder Cable Volumes
+ //
+ // Return list contains 3 assemblies: cable box, cable arb shape and the end part of the cable
+ // each contains 2 volumes, one for polyamide and one for aluminium
/////////////////////////////////////////////////////////////
const Int_t kladdercablesegmentnumber = 2;
/////////////////////////////////////////
// LadderSegmentBBox Volume
/////////////////////////////////////////
- TGeoBBox* laddercablesegmentbboxshape[kladdercablesegmentnumber];
+ static TGeoBBox* laddercablesegmentbboxshape[kladdercablesegmentnumber] = {0,0};
const char* laddercablesegmentbboxshapename[kladdercablesegmentnumber] =
{"LadderCableSegmentBBoxShape1","LadderCableSegmentBBoxShape2"};
+
+
+ const char* laddercablesegmentbboxname[kladdercablesegmentnumber] =
+ {"LadderCableSegmentBBox1","LadderCableSegmentBBox2"};
+ static TGeoVolume* laddercablesegmentbbox[kladdercablesegmentnumber];
+
+ static TGeoTranslation* laddercablesegmentbboxtrans[kladdercablesegmentnumber] = {
+ new TGeoTranslation("LadderCableSegmentBBoxTrans1",
+ 0.5*fgkSSDFlexWidth[0],
+ 0.5*fgkSSDLadderCableWidth,
+ 0.5*fgkSSDLadderCableHeight[0]),
+ new TGeoTranslation("LadderCableSegmentBBoxTrans2",
+ 0.5*fgkSSDFlexWidth[0],
+ 0.5*fgkSSDLadderCableWidth,
+ fgkSSDLadderCableHeight[0]
+ +0.5*fgkSSDLadderCableHeight[1])
+ };
+ static TGeoVolume* laddercablesegmentbboxassembly = new TGeoVolumeAssembly("LadderCableSegmentBBoxAssembly") ;
+ static TGeoVolume* laddercablesegmentarbassembly =
+ new TGeoVolumeAssembly("LadderCableSegmentArbAssembly");
+
+ static TGeoArb8* laddercablesegmentarbshape[kladdercablesegmentnumber];
+ static TGeoVolume* laddercablesegmentarb[kladdercablesegmentnumber];
+
+ if (laddercablesegmentbboxshape[0] == 0) {
+ // Initialise static shapes and volumes
for(Int_t i=0; i<kladdercablesegmentnumber; i++) laddercablesegmentbboxshape[i] =
new TGeoBBox(laddercablesegmentbboxshapename[i],
0.5*fgkSSDFlexWidth[0],
0.5*fgkSSDLadderCableWidth,
- 0.5*fgkSSDFlexHeight[i]);
- const char* laddercablesegmentbboxname[kladdercablesegmentnumber] =
- {"LadderCableSegmentBBox1","LadderCableSegmentBBox2"};
- TGeoVolume* laddercablesegmentbbox[kladdercablesegmentnumber];
+ 0.5*fgkSSDLadderCableHeight[i]);
+
for(Int_t i=0; i<kladdercablesegmentnumber; i++){
laddercablesegmentbbox[i] =
new TGeoVolume(laddercablesegmentbboxname[i],
laddercablesegmentbbox[i]->SetLineColor(i==0 ? fColorAl :
fColorPolyhamide);
}
- TGeoTranslation* laddercablesegmentbboxtrans[kladdercablesegmentnumber];
- laddercablesegmentbboxtrans[0] =
- new TGeoTranslation("LadderCableSegmentBBoxTrans1",
- 0.5*fgkSSDFlexWidth[0],
- 0.5*fgkSSDLadderCableWidth,
- 0.5*fgkSSDFlexHeight[0]);
- laddercablesegmentbboxtrans[1] =
- new TGeoTranslation("LadderCableSegmentBBoxTrans2",
- 0.5*fgkSSDFlexWidth[0],
- 0.5*fgkSSDLadderCableWidth,
- fgkSSDFlexHeight[0]
- +0.5*fgkSSDFlexHeight[1]);
- TGeoVolume* laddercablesegmentbboxassembly =
- new TGeoVolumeAssembly("LadderCableSegmentBBoxAssembly");
+
for(Int_t i=0; i<kladdercablesegmentnumber; i++)
laddercablesegmentbboxassembly->AddNode(laddercablesegmentbbox[i],1,
laddercablesegmentbboxtrans[i]);
new TVector3*[kvertexnumber];
//Shape Vertex Positioning
for(Int_t i=0; i<kladdercablesegmentnumber; i++){
- laddercablesegmentvertexposition[i][0] = new TVector3(0.,i*fgkSSDFlexHeight[0]);
+ laddercablesegmentvertexposition[i][0] = new TVector3(0.,i*fgkSSDFlexHeight[0], 0);
laddercablesegmentvertexposition[i][1] = new TVector3(fgkSSDLadderCableWidth,
- i*fgkSSDFlexHeight[0]);
+ i*fgkSSDFlexHeight[0], 0);
laddercablesegmentvertexposition[i][2] = new TVector3(0.,fgkSSDFlexHeight[0]
+ fgkSSDFlexHeight[1]
- + i*fgkSSDFlexHeight[0]);
+ + i*fgkSSDFlexHeight[0], 0);
laddercablesegmentvertexposition[i][3] =
new TVector3(laddercablesegmentvertexposition[i][1]->X(),
- laddercablesegmentvertexposition[i][2]->Y());
+ laddercablesegmentvertexposition[i][2]->Y(), 0);
}
Double_t laddercablesegmentwidth[2][2] = {{fgkSSDFlexHeight[0],fgkSSDFlexHeight[0]},
{fgkSSDFlexHeight[1],fgkSSDFlexHeight[1]}};
- char* laddercablesegmentarbshapename[kladdercablesegmentnumber] =
+ const char* laddercablesegmentarbshapename[kladdercablesegmentnumber] =
{"LadderCableSegmentArbShape1","LadderCableSegmentArbShape2"};
- TGeoArb8* laddercablesegmentarbshape[kladdercablesegmentnumber];
+
for(Int_t i = 0; i< kladdercablesegmentnumber; i++) laddercablesegmentarbshape[i] =
GetArbShape(laddercablesegmentvertexposition[i],
laddercablesegmentwidth[i],
laddercablesegmentarbshapename[i]);
const char* laddercablesegmentarbname[kladdercablesegmentnumber] =
{"LadderCableSegmentArb1","LadderCableSegmentArb2"};
- TGeoVolume* laddercablesegmentarb[kladdercablesegmentnumber];
+
for(Int_t i=0; i<kladdercablesegmentnumber; i++){
laddercablesegmentarb[i] =
new TGeoVolume(laddercablesegmentarbname[i],
+ fgkSSDFlexWidth[0],0.,0.,
new TGeoRotation((*laddercablesegmentarbrot[1])
*(*laddercablesegmentarbrot[0])));
- TGeoVolume* laddercablesegmentarbassembly =
- new TGeoVolumeAssembly("LadderCableSegmentArbAssembly");
for(Int_t i=0; i<kladdercablesegmentnumber; i++)
laddercablesegmentarbassembly->AddNode(laddercablesegmentarb[i],1,
laddercablesegmentarbcombitrans);
+ } // End of static initialisations
/////////////////////////////////////////
// End Ladder Cable Volume
+// Note: this part depends explicitly on the length passed as an argument to the function
/////////////////////////////////////////
TGeoBBox* ladderendcablesegmentbboxshape[kladdercablesegmentnumber];
const char* ladderendcablesegmentbboxshapename[kladdercablesegmentnumber] =
new TGeoBBox(ladderendcablesegmentbboxshapename[i],
0.5*ssdendladdercablelength,
0.5*fgkSSDLadderCableWidth,
- 0.5*fgkSSDFlexHeight[i]);
+ 0.5*fgkSSDLadderCableHeight[i]);
const char* ladderendcablesegmentbboxname[kladdercablesegmentnumber] =
{"LadderEndCableSegmentBBox1","LadderEndCableSegmentBBox2"};
TGeoVolume* ladderendcablesegmentbbox[kladdercablesegmentnumber];
new TGeoTranslation("LadderEndCableSegmentBBoxTrans0",
0.5*ssdendladdercablelength,
0.5*fgkSSDLadderCableWidth,
- 0.5*fgkSSDFlexHeight[0]);
+ 0.5*fgkSSDLadderCableHeight[0]);
ladderendcablesegmentbboxtrans[1] =
new TGeoTranslation("LadderEndCableSegmentBBoxTrans1",
0.5*ssdendladdercablelength,
0.5*fgkSSDLadderCableWidth,
- fgkSSDFlexHeight[0]
- +0.5*fgkSSDFlexHeight[1]);
+ fgkSSDLadderCableHeight[0]
+ +0.5*fgkSSDLadderCableHeight[1]);
TGeoVolume* ladderendcablesegmentbboxassembly =
new TGeoVolumeAssembly("LadderEndCableSegmentBBoxAssembly");
for(Int_t i=0; i<kladdercablesegmentnumber; i++)
laddercablesegmentlist->Add(laddercablesegmentarbassembly);
laddercablesegmentlist->Add(ladderendcablesegmentbboxassembly);
return laddercablesegmentlist;
- }
+}
+
/////////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::GetLadderCable(Int_t n, Double_t ssdendladdercablelength){
/////////////////////////////////////////////////////////////
- // Method generating Ladder Cable Volumes Assemblies
+ // Method generating Ladder Cable of given length (n modules + end)
+ // Called by GetLadderCableAssembly
/////////////////////////////////////////////////////////////
TList* laddercablesegmentlist = GetLadderCableSegment(ssdendladdercablelength);
TGeoVolume* laddercable = new TGeoVolumeAssembly("LadderCable");
TGeoTranslation* laddercabletrans = new TGeoTranslation(
i*(fgkCarbonFiberJunctionWidth),
fgkSSDLadderCableWidth-fgkSSDFlexWidth[0],
- i*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1]));
+ i*(fgkSSDLadderCableHeight[0]+fgkSSDLadderCableHeight[1]));
laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(0),i+1,laddercabletrans);
- if(i!=n-1) laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(1),i+1,laddercabletrans);
+ if(i!=n-1) laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(1),i+1,laddercabletrans);
+
}
TGeoTranslation* endladdercabletrans = new TGeoTranslation("EndLadderCableTrans",
(n-1)*fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0],
- fgkSSDLadderCableWidth-fgkSSDFlexWidth[0],
- (n-1)*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1]));
+ fgkSSDLadderCableWidth-fgkSSDFlexWidth[0],
+ (n-1)*(fgkSSDLadderCableHeight[0]+fgkSSDLadderCableHeight[1]));
laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(2),1,endladdercabletrans);
return laddercable;
}
/////////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::GetLadderCableAssembly(Int_t n, Double_t ssdendladdercablelength){
- /////////////////////////////////////////////////////////////
- // Method generating Ladder Cable Volumes Assembly
- /////////////////////////////////////////////////////////////
- TGeoVolume* laddercableassembly = new TGeoVolumeAssembly("LadderCableAssembly");
- char laddercabletransname[30];
+ ///////////////////////////////////////////////////////////////////
+ // Main method generating Ladder Cable bundles containing n cables
+ ///////////////////////////////////////////////////////////////////
+ Double_t totalLength = ssdendladdercablelength+(n-1)*fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0];
+ Double_t cableOrig[3] = {0.5*totalLength,1.5*fgkSSDLadderCableWidth-fgkSSDFlexWidth[0],0.5*n*(fgkSSDLadderCableHeight[0]+fgkSSDLadderCableHeight[1])};
+ TGeoBBox *laddercableshape = new TGeoBBox(0.5*totalLength,0.5*fgkSSDLadderCableWidth,0.5*n*(fgkSSDLadderCableHeight[0]+fgkSSDLadderCableHeight[1]),cableOrig);
+ TGeoVolume* laddercable = new TGeoVolume("LadderCableMother", laddercableshape, fSSDAir);
+ char laddercabletransname[100];
for(Int_t i=0; i<n; i++){
- sprintf(laddercabletransname,"LadderCableTrans%i",i+1);
- laddercableassembly->AddNode(GetLadderCable(n-i,ssdendladdercablelength),i+1,
- new TGeoTranslation(laddercabletransname,i*fgkCarbonFiberJunctionWidth,0.,0.));
+ snprintf(laddercabletransname,100,"LadderCableTrans%i",i+1);
+ laddercable->AddNode(GetLadderCable(n-i,ssdendladdercablelength),i+1,
+ new TGeoTranslation(laddercabletransname,i*fgkCarbonFiberJunctionWidth,0,0));
}
- return laddercableassembly;
+ return laddercable;
}
/////////////////////////////////////////////////////////////////////////////////
TList* AliITSv11GeometrySSD::GetLadderCableAssemblyList(Int_t n, Double_t ssdendladdercablelength){
/////////////////////////////////////////////////////////////
// Method generating Ladder Cable List Assemblies
+ // containing two cables bundles, i.e. P+N readout for one endcap
/////////////////////////////////////////////////////////////
- const Int_t kladdercableassemblynumber = 2;
+ const Int_t kladdercableassemblynumber = 2;
TGeoVolume* laddercableassembly = GetLadderCableAssembly(n,ssdendladdercablelength);
TGeoVolume* ladderCable[kladdercableassemblynumber];
- char laddercableassemblyname[30];
+ char laddercableassemblyname[100];
TList* laddercableassemblylist = new TList();
for(Int_t i=0; i<kladdercableassemblynumber; i++){
- sprintf(laddercableassemblyname,"LadderCableAssembly%i",i+1);
+ snprintf(laddercableassemblyname,100,"LadderCableAssembly%i",i+1);
ladderCable[i] = new TGeoVolumeAssembly(laddercableassemblyname);
ladderCable[i]->AddNode(laddercableassembly,i+1,i==0 ? NULL :
new TGeoCombiTrans((n-1)
/////////////////////////////////////////////////////////////
fladdersegment[0] = new TGeoVolumeAssembly("LadderSegment1");
fladdersegment[1] = new TGeoVolumeAssembly("LadderSegment2");
+
+ /* MvL: tried to create mother volume. Requires changes in all rotations, bc xtru is always along z-axis
+ TGeoXtru *laddersegmentshape = new TGeoXtru(2);
+ static const Int_t ntrianglevtx = 3;
+ Double_t xtrianglevtx[ntrianglevtx]={-0.5*fgkCarbonFiberTriangleLength,fgkCarbonFiberTriangleLength, 0};
+ Double_t ytrianglevtx[ntrianglevtx]={0, 0, fgkCarbonFiberTriangleLength * TMath::Sin(fgkCarbonFiberTriangleAngle*TMath::DegToRad())};
+ laddersegmentshape->DefinePolygon(ntrianglevtx,xtrianglevtx,ytrianglevtx);
+ laddersegmentshape->DefineSection(0,0);
+ laddersegmentshape->DefineSection(1,fgkCarbonFiberJunctionWidth); // MVL
+ fladdersegment[0] = new TGeoVolume("LadderSegment1",laddersegmentshape,fSSDAir);
+ fladdersegment[1] = new TGeoVolume("LadderSegment2",laddersegmentshape,fSSDAir);
+ */
+
if(!fCreateMaterials) CreateMaterials();
if(!fTransformationMatrices) CreateTransformationMatrices();
if(!fBasicObjects) CreateBasicObjects();
fcarbonfibersupportmatrix[j]);
}
// Placing Carbon Fiber Junction
- for(Int_t j=0; j<fgkcarbonfiberjunctionumber; j++)
+ for(Int_t j=0; j<fgkcarbonfiberjunctionumber; j++) {
fladdersegment[i]->AddNode(fcarbonfiberjunction,j+1,
fcarbonfiberjunctionmatrix[j]);
+ }
// Placing Carbon Fiber Lower Support
- for(Int_t j=0; j<fgkcarbonfiberlowersupportnumber; j++)
+ for(Int_t j=0; j<fgkcarbonfiberlowersupportnumber; j++) {
fladdersegment[i]->AddNode(fcarbonfiberlowersupport[j],j+1,
fcarbonfiberlowersupportrans[j]);
+ }
// Placing SSD Sensor Support
for(Int_t j=0; j<fgkssdsensorsupportnumber; j++)
- fladdersegment[i]->AddNode(j<2 ? fssdsensorsupport[0][i] :
+ fladdersegment[i]->AddNode(j<2 ? fssdsensorsupport[0][i] :
fssdsensorsupport[1][i],
j+1,fssdsensorsupportmatrix[j]);
// Placing SSD Cooling Tube Support
fladdersegment[i]->AddNode(fcoolingtubesupport,j+1,
fcoolingtubesupportmatrix[j]);
// Placing SSD Cooling Tube
- for(Int_t j=0; j<2; j++)
- for(Int_t k=0; k<2; k++){
- fladdersegment[i]->AddNode(fcoolingtube[0],2*j+k+1,fcoolingtubematrix[j][k]);
- fladdersegment[i]->AddNode(fcoolingtube[j+1],k+1,fcoolingtubematrix[2+j][k]);
- }
+ fladdersegment[i]->AddNode(fcoolingtube,1,fcoolingtubematrix[0]);
+ fladdersegment[i]->AddNode(fcoolingtube,2,fcoolingtubematrix[1]);
// Placing SSD Hybrid
switch(i){
case 0:
break;
}
// Placing Cooling Block System
- fladdersegment[i]->AddNode(fssdcoolingblocksystem,1,fcoolingblocksystematrix);
+ fladdersegment[i]->AddNode(fssdcoolingblocksystem,1,fcoolingblocksystematrix);
// Placing SSD Flex
- for(Int_t j=0; j<fgkflexnumber; j++){
- fladdersegment[i]->AddNode(fssdstiffenerflex,j+1,fstiffenerflexmatrix[j]);
- fladdersegment[i]->AddNode(fssdendflex,j+1,fendflexmatrix[j]);
- }
+ for(Int_t j=0; j<fgkflexnumber; j++){
+ fladdersegment[i]->AddNode(fssdstiffenerflex,j+1,fstiffenerflexmatrix[j]);
+ fladdersegment[i]->AddNode(fssdendflex,j+1,fendflexmatrix[j]);
+ }
}
}
///////////////////////////////////////////////////////////////////////////////
if(!fTransformationMatrices) CreateTransformationMatrices();
if(!fBasicObjects) CreateBasicObjects();
for(Int_t i=0; i<fgkendlabbercarbonfiberjunctionumber; i++){
- for(Int_t j=0; j<fgkendladdercabonfiberjunctionmatrixnumber; j++)
+ for(Int_t j=0; j<fgkendladdercarbonfiberjunctionmatrixnumber; j++)
fendladdersegment[i]->AddNode(j==2 ?
fendladdercarbonfiberjunction[i][1] :
fendladdercarbonfiberjunction[i][0],
/////////////////////////////////////////////////////////////
// End Ladder Cooling Tube Support
/////////////////////////////////////////////////////////////
-// fendladdersegment[0]->AddNode(fendladdercoolingtube[0],1,fendladdercoolingtubematrix[0][0]);
-// fendladdersegment[0]->AddNode(fendladdercoolingtube[0],2,fendladdercoolingtubematrix[0][1]);
- fendladdersegment[0]->AddNode(fendladdercoolingtube[1],1,fendladdercoolingtubematrix[0][2]);
- fendladdersegment[0]->AddNode(fendladdercoolingtube[1],2,fendladdercoolingtubematrix[0][3]);
- fendladdersegment[0]->AddNode(fendladdercoolingtube[2],1,fendladdercoolingtubematrix[0][4]);
- fendladdersegment[0]->AddNode(fendladdercoolingtube[2],2,fendladdercoolingtubematrix[0][5]);
- fendladdersegment[1]->AddNode(fendladdercoolingtube[3],1,fendladdercoolingtubematrix[1][0]);
- fendladdersegment[1]->AddNode(fendladdercoolingtube[3],2,fendladdercoolingtubematrix[1][1]);
- fendladdersegment[1]->AddNode(fendladdercoolingtube[4],1,fendladdercoolingtubematrix[1][2]);
- fendladdersegment[1]->AddNode(fendladdercoolingtube[4],2,fendladdercoolingtubematrix[1][3]);
+ fendladdersegment[0]->AddNode(fendladdercoolingtube[0],1,fendladdercoolingtubematrix[0][0]);
+ fendladdersegment[0]->AddNode(fendladdercoolingtube[0],2,fendladdercoolingtubematrix[0][1]);
+ fendladdersegment[1]->AddNode(fendladdercoolingtube[1],1,fendladdercoolingtubematrix[1][0]);
+ fendladdersegment[1]->AddNode(fendladdercoolingtube[1],2,fendladdercoolingtubematrix[1][1]);
}
///////////////////////////////////////////////////////////////////////////////
void AliITSv11GeometrySSD::SetLadder(){
/////////////////////////////////////////////////////////////////////////////
/// Generating Ladder Mother Volume Containing Ladder
/////////////////////////////////////////////////////////////////////////////
- TGeoXtru* laddershape[fgkladdernumber];
+ /* TGeoXtru* laddershape[fgkladdernumber];
for(Int_t i=0; i<fgkladdernumber; i++) laddershape[i] = new TGeoXtru(2);
+ */
const Int_t kmothervertexnumber = 8;
Double_t xmothervertex[fgkladdernumber][kmothervertexnumber];
Double_t ymothervertex[fgkladdernumber][kmothervertexnumber];
// Setting the vertices
///////////////////////
Double_t laddercablethickness = (fgkSSDLay6SensorsNumber+2)
- * (fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1]);
+ * (fgkSSDLadderCableHeight[0]+fgkSSDLadderCableHeight[1]);
xmothervertex[0][0] = -0.5*fgkSSDSensorWidth;
ymothervertex[0][0] = -0.5*fgkCoolingTubeSupportHeight-fgkSSDModuleCoolingBlockToSensor;
xmothervertex[0][1] = xmothervertex[0][0];
- ymothervertex[0][1] = 0.0;
+ ymothervertex[0][1] = -0.5*fgkCoolingTubeSupportHeight; // 0.0; MvL 20-apr-2010
xmothervertex[0][2] = - 0.5*fgkSSDModuleSensorSupportDistance-2.*fgkCoolingTubeSupportRmax
- laddercablethickness/SinD(2.*fgkSSDFlexAngle);
ymothervertex[0][2] = ymothervertex[0][1];
///////////////////////////////////////////////////////////////////////////
// Disalignement Mother Volume corrections 25/08/08
///////////////////////////////////////////////////////////////////////////
- TGeoXtru* leftladdershape[fgkladdernumber];
+ TGeoXtru* leftladdershape1[fgkladdernumber];
+ TGeoXtru* leftladdershape2[fgkladdernumber];
TGeoXtru* centersensorladdershape[fgkladdernumber];
- TGeoXtru* rightladdershape[fgkladdernumber];
+ TGeoXtru* rightladdershape1[fgkladdernumber];
+ TGeoXtru* rightladdershape2[fgkladdernumber];
for(Int_t i=0; i<fgkladdernumber; i++){
- leftladdershape[i] = new TGeoXtru(2);
- centersensorladdershape[i] = new TGeoXtru(2);
- rightladdershape[i] = new TGeoXtru(2);
- }
+ leftladdershape1[i] = new TGeoXtru(2);
+ leftladdershape2[i] = new TGeoXtru(2);
+ centersensorladdershape[i] = new TGeoXtru(2);
+ rightladdershape1[i] = new TGeoXtru(2);
+ rightladdershape2[i] = new TGeoXtru(2);
+ }
//////////////////////////////////////
- // Setting the names for shapes
+ // Setting the names for shapes
//////////////////////////////////////
- leftladdershape[0]->SetName("Lay5LeftLadderSegmentContainer");
- leftladdershape[1]->SetName("Lay6LeftLadderSegmentContainer");
+ leftladdershape1[0]->SetName("Lay5Left1LadderSegmentContainer");
+ leftladdershape2[0]->SetName("Lay5Left2LadderSegmentContainer");
+ leftladdershape1[1]->SetName("Lay6Left1LadderSegmentContainer");
+ leftladdershape2[1]->SetName("Lay6Left2LadderSegmentContainer");
centersensorladdershape[0]->SetName("Lay5CenterSensorContainer");
centersensorladdershape[1]->SetName("Lay6CenterSensorContainer");
- rightladdershape[0]->SetName("Lay5RightLadderSegmentContainer");
- rightladdershape[1]->SetName("Lay6RightLadderSegmentContainer");
+ rightladdershape1[0]->SetName("Lay5Right1LadderSegmentContainer");
+ rightladdershape2[0]->SetName("Lay5Right2LadderSegmentContainer");
+ rightladdershape1[1]->SetName("Lay6Right1LadderSegmentContainer");
+ rightladdershape2[1]->SetName("Lay6Right2LadderSegmentContainer");
//////////////////////////////////////
- Double_t xleftladdervertex[fgkladdernumber][kmothervertexnumber];
- Double_t yleftladdervertex[fgkladdernumber][kmothervertexnumber];
+ Double_t xend1laddervertex[fgkladdernumber][kmothervertexnumber];
+ Double_t yend1laddervertex[fgkladdernumber][kmothervertexnumber];
Double_t xcentersensorvertex[fgkladdernumber][kmothervertexnumber];
Double_t ycentersensorvertex[fgkladdernumber][kmothervertexnumber];
- Double_t xrightladdervertex[fgkladdernumber][kmothervertexnumber];
- Double_t yrightladdervertex[fgkladdernumber][kmothervertexnumber];
- for(Int_t i=0; i<fgkladdernumber; i++)
- for(Int_t j=0; j<kmothervertexnumber; j++){
- xleftladdervertex[i][j] = xmothervertex[i][j];
- yleftladdervertex[i][j] = ymothervertex[i][j];
- xcentersensorvertex[i][j] = xmothervertex[i][j];
- ycentersensorvertex[i][j] = ymothervertex[i][j];
- xrightladdervertex[i][j] = xmothervertex[i][j];
- yrightladdervertex[i][j] = ymothervertex[i][j];
- }
- xcentersensorvertex[0][0] -= fgkSSDModuleSideDisalignment;
- xcentersensorvertex[0][1] = xcentersensorvertex[0][0];
- xcentersensorvertex[0][6] = -xcentersensorvertex[0][1];
- xcentersensorvertex[0][7] = -xcentersensorvertex[0][0];
-
- xcentersensorvertex[1][0] = xcentersensorvertex[0][0];
- xcentersensorvertex[1][1] = xcentersensorvertex[0][1];
- xcentersensorvertex[1][6] = xcentersensorvertex[0][6];
- xcentersensorvertex[1][7] = xcentersensorvertex[0][7];
-
- ycentersensorvertex[0][0] -= fgkSSDModuleVerticalDisalignment;
- ycentersensorvertex[0][7] = ycentersensorvertex[0][0];
-
- ycentersensorvertex[1][0] = ycentersensorvertex[0][0];
- ycentersensorvertex[1][7] = ycentersensorvertex[0][7];
- for(Int_t i=0; i<fgkladdernumber; i++){
- // Left Ladder Piece
- leftladdershape[i]->DefinePolygon(kmothervertexnumber,xleftladdervertex[i],
- yleftladdervertex[i]);
- leftladdershape[i]->DefineSection(0,-fgkEndLadderCarbonFiberLowerJunctionLength[1]);
- leftladdershape[i]->DefineSection(1,-fgkEndLadderCarbonFiberLowerJunctionLength[1]
- +1.45*fgkSSDMountingBlockWidth);
- // Center Ladder Piece
- centersensorladdershape[i]->DefinePolygon(kmothervertexnumber,xcentersensorvertex[i],
- ycentersensorvertex[i]);
- centersensorladdershape[i]->DefineSection(0,-fgkEndLadderCarbonFiberLowerJunctionLength[1]
- + 1.45*fgkSSDMountingBlockWidth);
- centersensorladdershape[i]->DefineSection(1,ssdlaysensorsnumber[i]*fgkCarbonFiberJunctionWidth
- + fgkEndLadderCarbonFiberLowerJunctionLength[0]
- - 2.4*fgkSSDMountingBlockWidth);
- // Right Ladder Piece
- rightladdershape[i]->DefinePolygon(kmothervertexnumber,xrightladdervertex[i],
- yrightladdervertex[i]);
- rightladdershape[i]->DefineSection(0,ssdlaysensorsnumber[i]*fgkCarbonFiberJunctionWidth
- +fgkEndLadderCarbonFiberLowerJunctionLength[0]
- -2.4*fgkSSDMountingBlockWidth);
- rightladdershape[i]->DefineSection(1,ssdlaysensorsnumber[i]*fgkCarbonFiberJunctionWidth
- +fgkEndLadderCarbonFiberLowerJunctionLength[0]);
- }
- TGeoCompositeShape* laddershapecontainer[2];
- laddershapecontainer[0] = new TGeoCompositeShape("Lay5LadderCompositeShape",
- "Lay5LeftLadderSegmentContainer+Lay5CenterSensorContainer+Lay5RightLadderSegmentContainer");
- laddershapecontainer[1] = new TGeoCompositeShape("Lay6LadderCompositeShape",
- "Lay6LeftLadderSegmentContainer+Lay6CenterSensorContainer+Lay6RightLadderSegmentContainer");
- const char* laddername[fgkladdernumber] = {"ITSssdLay5Ladd","ITSssdLay6Ladd"};
- for(Int_t i=0; i<fgkladdernumber; i++){
- fladder[i] = new TGeoVolume(laddername[i],laddershapecontainer[i],fSSDAir);
- fladder[i]->SetLineColor(4);
- }
+ Double_t xend2laddervertex[fgkladdernumber][kmothervertexnumber];
+ Double_t yend2laddervertex[fgkladdernumber][kmothervertexnumber];
+ for(Int_t i=0; i<fgkladdernumber; i++) {
+ for(Int_t j=0; j<kmothervertexnumber; j++){
+ xcentersensorvertex[i][j] = xmothervertex[i][j];
+ ycentersensorvertex[i][j] = ymothervertex[i][j];
+ xend1laddervertex[i][j] = xmothervertex[i][j];
+ yend1laddervertex[i][j] = ymothervertex[i][j];
+ xend2laddervertex[i][j] = xmothervertex[i][j];
+ yend2laddervertex[i][j] = ymothervertex[i][j];
+ }
+ // Add some space around sensors to accommodate misalignments
+ xcentersensorvertex[i][0] -= fgkSSDModuleSideDisalignment;
+ xcentersensorvertex[i][1] = xcentersensorvertex[0][0];
+ xcentersensorvertex[i][6] = -xcentersensorvertex[0][1];
+ xcentersensorvertex[i][7] = -xcentersensorvertex[0][0];
+
+ ycentersensorvertex[i][0] -= fgkSSDModuleVerticalDisalignment;
+ ycentersensorvertex[i][7] = ycentersensorvertex[0][0];
+
+ // Center Ladder Piece
+ centersensorladdershape[i]->DefinePolygon(kmothervertexnumber,xcentersensorvertex[i],
+ ycentersensorvertex[i]);
+ centersensorladdershape[i]->DefineSection(0, - fgkEndLadderCarbonFiberLowerJunctionLength[1]
+ + 1.45*fgkSSDMountingBlockWidth);
+ centersensorladdershape[i]->DefineSection(1, ssdlaysensorsnumber[i] * fgkCarbonFiberJunctionWidth
+ + fgkEndLadderCarbonFiberLowerJunctionLength[0]
+ - 2.4*fgkSSDMountingBlockWidth);
+
+ // Left and Right Ladder Pieces: Mother volumes around ladder mounting areas
+
+ // Cuts off first corner (neg x)
+ xend1laddervertex[i][0] = -0.5*fgkSSDMountingBlockLength[0];
+ xend1laddervertex[i][1] = -0.5*fgkSSDMountingBlockLength[0];
+ // Cuts off last part (pos x)
+ xend2laddervertex[i][6] = 0.5*fgkSSDMountingBlockLength[0];
+ xend2laddervertex[i][7] = 0.5*fgkSSDMountingBlockLength[0];
+
+ leftladdershape1[i]->DefinePolygon(kmothervertexnumber,xend1laddervertex[i],
+ yend1laddervertex[i]);
+ leftladdershape1[i]->DefineSection(0,-fgkEndLadderCarbonFiberLowerJunctionLength[1]);
+ leftladdershape1[i]->DefineSection(1, fendladdersegmentmatrix[0][i]->GetTranslation()[2]
+ - fgkEndLadderMountingBlockPosition[0]);
+
+ leftladdershape2[i]->DefinePolygon(kmothervertexnumber,xend2laddervertex[i],
+ yend2laddervertex[i]);
+ leftladdershape2[i]->DefineSection(0, fendladdersegmentmatrix[0][i]->GetTranslation()[2]
+ - fgkEndLadderMountingBlockPosition[0]);
+ leftladdershape2[i]->DefineSection(1,- fgkEndLadderCarbonFiberLowerJunctionLength[1]
+ + 1.45*fgkSSDMountingBlockWidth); // connect to main volume at -1.6725 cm
+
+ rightladdershape1[i]->DefinePolygon(kmothervertexnumber,xend1laddervertex[i],
+ yend1laddervertex[i]);
+ rightladdershape1[i]->DefineSection(0,ssdlaysensorsnumber[i]*fgkCarbonFiberJunctionWidth
+ +fgkEndLadderCarbonFiberLowerJunctionLength[0]
+ -2.4*fgkSSDMountingBlockWidth);
+ rightladdershape1[i]->DefineSection(1,fendladdersegmentmatrix[1][i]->GetTranslation()[2]
+ + fgkEndLadderMountingBlockPosition[1]);
+
+ rightladdershape2[i]->DefinePolygon(kmothervertexnumber,xend2laddervertex[i],
+ yend2laddervertex[i]);
+ rightladdershape2[i]->DefineSection(0, fendladdersegmentmatrix[1][i]->GetTranslation()[2]
+ + fgkEndLadderMountingBlockPosition[1]);
+ rightladdershape2[i]->DefineSection(1, ssdlaysensorsnumber[i]*fgkCarbonFiberJunctionWidth
+ + fgkEndLadderCarbonFiberLowerJunctionLength[0]);
+ }
+ TGeoCompositeShape* laddershapecontainer[2];
+ laddershapecontainer[0] = new TGeoCompositeShape("Lay5LadderCompositeShape",
+ "Lay5Left1LadderSegmentContainer+Lay5Left2LadderSegmentContainer"
+ "+Lay5CenterSensorContainer"
+ "+Lay5Right1LadderSegmentContainer+Lay5Right2LadderSegmentContainer");
+ laddershapecontainer[1] = new TGeoCompositeShape("Lay6LadderCompositeShape",
+ "Lay6Left1LadderSegmentContainer+Lay6Left2LadderSegmentContainer"
+ "+Lay6CenterSensorContainer"
+ "+Lay6Right1LadderSegmentContainer+Lay6Right2LadderSegmentContainer");
+ const char* laddername[fgkladdernumber] = {"ITSssdLay5Ladd","ITSssdLay6Ladd"};
+ for(Int_t i=0; i<fgkladdernumber; i++){
+ fladder[i] = new TGeoVolume(laddername[i],laddershapecontainer[i],fSSDAir);
+ fladder[i]->SetLineColor(4);
+ }
///////////////////////////////////////////////////////////////////////////
if(!fCreateMaterials) CreateMaterials();
if(!fTransformationMatrices) CreateTransformationMatrices();
///////////////////////////////
/// Placing End Ladder Segment
///////////////////////////////
- fladder[i]->AddNode(fendladdersegment[0],1,fendladdersegmentmatrix[0][i]);
+ fladder[i]->AddNode(fendladdersegment[0],1,fendladdersegmentmatrix[0][i]);
fladder[i]->AddNode(fendladdersegment[1],1,fendladdersegmentmatrix[1][i]);
}
/////////////////////////////////////////////////////////////////////////////
- fgkSSDModuleStiffenerPosition[1]
- fgkSSDStiffenerWidth)
+ fgkEndLadderCarbonFiberLowerJunctionLength[0]-0.000001*kendladdercablecorrection;
+
TList* laddercableassemblylist[4];
const Int_t kendladdercablesnumber = 4;
+ TGeoRotation *laddercablerot = new TGeoRotation();
+ laddercablerot->SetAngles(90.,60.,-90.);
for(Int_t i=0; i<fgkladdercablesnumber; i++)
for(Int_t j=0; j<kendladdercablesnumber; j++){
laddercableassemblylist[j] =
j<2?1:2,fladdercablematrix[i][j]);
}
}
+
////////////////////////////////////////////////////////////////////////////////
void AliITSv11GeometrySSD::SetLayer(){
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// Deallocating memory
/////////////////////////////////////////////////////////////
- for(Int_t i=0; i<fgklayernumber; i++) delete ladderindex[i];
+ for(Int_t i=0; i<fgklayernumber; i++) delete [] ladderindex[i];
}
////////////////////////////////////////////////////////////////////////////////
void AliITSv11GeometrySSD::Layer5(TGeoVolume* moth){
// Insert the layer 5 in the mother volume.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert layer5, mother is null!\n");
+ AliError("Can't insert layer5, mother is null!\n");
return;
};
if(!fSSDLayer5) SetLayer();
// Insert the layer 6 in the mother volume.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert layer6, mother is null!\n");
+ AliError("AliITSv11GeometrySSD: Can't insert layer6, mother is null!\n");
return;
};
if(!fSSDLayer6) SetLayer();
for(Int_t i=0; i<fgklayernumber; i++){
mountingblockratio[i] = fgkSSDMountingBlockLength[0]/fgkMountingBlockSupportRadius[i];
mountingsupportedge[i] = 0.5*fgkMountingBlockSupportRadius[i]
- *(TMath::Sqrt(4.0-TMath::Power(mountingblockratio[i],2))
+ * (TMath::Sqrt((2.-mountingblockratio[i])*(2.+mountingblockratio[i]))
* TMath::Sin(2.0*TMath::Pi()/kssdlayladdernumber[i])
- mountingblockratio[i]*(1.0+TMath::Cos(2.0*TMath::Pi()
/ kssdlayladdernumber[i])));
theta[i] = TMath::ASin(0.5*mountingblockratio[i]+mountingsupportedge[i]/fgkMountingBlockSupportRadius[i]);
phi[i] = TMath::ASin(0.5*mountingblockratio[i]);
mountingsupportedgevector[i] = new TVector3();
- mountingsupportedgevector[i]->SetX(-0.5*fgkSSDMountingBlockLength[0]);
- mountingsupportedgevector[i]->SetY(fgkMountingBlockSupportRadius[i]*TMath::Sqrt(1.
- -TMath::Power(mountingsupportedgevector[i]->X()
- / fgkMountingBlockSupportRadius[i],2)));
+ mountingsupportedgevector[i]->SetX(-0.5*fgkSSDMountingBlockLength[0]);
+ mountingsupportedgevector[i]->SetY(fgkMountingBlockSupportRadius[i]*TMath::Sqrt(
+ (1.-mountingsupportedgevector[i]->X()/fgkMountingBlockSupportRadius[i])*
+ (1.+mountingsupportedgevector[i]->X()/fgkMountingBlockSupportRadius[i])));
psi0[i] = 0.5*TMath::Pi()-phi[i];
deltapsi[i] = (theta[i]+phi[i])/nedges;
}
for(Int_t i=0; i<fgklayernumber; i++){
for(Int_t j=0; j<nedges+1; j++){
vertex[i][j] = new TVector3(fgkMountingBlockSupportRadius[i]*TMath::Cos(psi0[i]+j*deltapsi[i]),
- fgkMountingBlockSupportRadius[i]*TMath::Sin(psi0[i]+j*deltapsi[i]));
+ fgkMountingBlockSupportRadius[i]*TMath::Sin(psi0[i]+j*deltapsi[i]), 0);
if(vertex[i][j]->X()>mountingsupportedgevector[i]->X()) indexedge[i]++;
vertexlist[i]->Add(vertex[i][j]);
}
TGeoVolume* centermountingblocksupport[fgklayernumber];
TGeoVolume* sideladdersupportpiece[fgklayernumber];
TGeoVolume* centerladdersupportpiece[fgklayernumber];
- char sidemountingblockname[40];
- char centermountingblockname[40];
- char sideladdersupportpiecename[40];
- char centerladdersupportpiecename[40];
+ char sidemountingblockname[100];
+ char centermountingblockname[100];
+ char sideladdersupportpiecename[100];
+ char centerladdersupportpiecename[100];
for(Int_t i=0; i<fgklayernumber; i++){
- sprintf(sidemountingblockname,"MountingBlockSupportSideLay%dArc",i+5);
- sprintf(centermountingblockname,"MountingBlockSupportCenterLay%dArc",i+5);
- sprintf(sideladdersupportpiecename,"SideLadderSupportPieceLay%d",i+5);
- sprintf(centerladdersupportpiecename,"CenterLadderSupportPieceLay%d",i+5);
- sidemountingblocksupportshape[i] = new TGeoXtru(2);
+ snprintf(sidemountingblockname,100,"MountingBlockSupportSideLay%dArc",i+5);
+ snprintf(centermountingblockname,100,"MountingBlockSupportCenterLay%dArc",i+5);
+ snprintf(sideladdersupportpiecename,100,"SideLadderSupportPieceLay%d",i+5);
+ snprintf(centerladdersupportpiecename,100,"CenterLadderSupportPieceLay%d",i+5);
+ sidemountingblocksupportshape[i] = new TGeoXtru(2);
sidemountingblocksupportshape[i]->DefinePolygon(vertexlist[i]->GetSize()+2,
xsidevertex[i],ysidevertex[i]);
sidemountingblocksupportshape[i]->DefineSection(0,fgkMountingBlockSupportWidth[1]
centermountingsupportshape[i]->DefineSection(0,0.);
centermountingsupportshape[i]->DefineSection(1,fgkMountingBlockSupportWidth[1]
-fgkMountingBlockSupportWidth[0]);
+
centermountingblocksupport[i] = new TGeoVolume(centermountingblockname,
centermountingsupportshape[i],
fSSDAlCoolBlockMedium);
Double_t mountingblockpieceupyvertex[fgklayernumber][8];
Double_t mountingblockpiecedownxvertex[fgklayernumber][8];
Double_t mountingblockpiecedownyvertex[fgklayernumber][8];
- char mountingblockpiecedownname[34];
- char mountingblockpieceupname[34];
+ char mountingblockpiecedownname[100];
+ char mountingblockpieceupname[100];
for(Int_t i=0; i<fgklayernumber; i++){
///////////////////////////
// Mounting Block Down Vertex
///////////////////////////
mountingblockpiecedownshape[i] = new TGeoXtru(2);
- sprintf(mountingblockpiecedownname,"MountingBlockPieceDownLay%d",i+5);
+ snprintf(mountingblockpiecedownname,100,"MountingBlockPieceDownLay%d",i+5);
mountingblockpiecedownxvertex[i][0] = -0.5*fgkSSDMountingBlockLength[0];
mountingblockpiecedownyvertex[i][0] = fgkMountingBlockSupportRadius[i]
- + fgkMountingBlockSupportDownHeight;
+ + fgkMountingBlockSupportDownHeight
+ - fgkSSDLadderVerticalDisalignment;
mountingblockpiecedownxvertex[i][1] = mountingblockpiecedownxvertex[i][0];
mountingblockpiecedownyvertex[i][1] = mountingblockpiecedownyvertex[i][0]
+ fgkSSDMountingBlockHeight[1]
mountingblockpiecedown[i] = new TGeoVolume(mountingblockpiecedownname,
mountingblockpiecedownshape[i],fSSDMountingBlockMedium);
mountingblockpiecedown[i]->SetLineColor(fColorG10);
+
///////////////////////////
// Mounting Block Up Vertex
///////////////////////////
mountingblockpieceupshape[i] = new TGeoXtru(2);
- sprintf(mountingblockpieceupname,"MountingBlockPieceUpLay%d",i+5);
+ snprintf(mountingblockpieceupname,100,"MountingBlockPieceUpLay%d",i+5);
mountingblockpieceupxvertex[i][0] = -0.5*fgkSSDMountingBlockLength[0];
mountingblockpieceupyvertex[i][0] = fgkMountingBlockSupportRadius[i]
- + fgkMountingBlockSupportUpHeight[i];
+ + fgkMountingBlockSupportUpHeight[i]
+ - fgkSSDLadderVerticalDisalignment;
mountingblockpieceupxvertex[i][1] = mountingblockpieceupxvertex[i][0];
mountingblockpieceupyvertex[i][1] = mountingblockpieceupyvertex[i][0]
+ fgkSSDMountingBlockHeight[1]
mountingblockpieceupyvertex[i][6] = mountingblockpieceupyvertex[i][5];
mountingblockpieceupxvertex[i][7] = mountingblockpieceupxvertex[i][6];
mountingblockpieceupyvertex[i][7] = mountingblockpieceupyvertex[i][0];
+
mountingblockpieceupshape[i]->DefinePolygon(8,mountingblockpieceupxvertex[i],
mountingblockpieceupyvertex[i]);
mountingblockpieceupshape[i]->DefineSection(0,0.0);
Double_t mountingblocksupportrapezoidownyvertex[fgklayernumber][5];
Double_t mountingblocksupportrapezoidupxvertex[fgklayernumber][5];
Double_t mountingblocksupportrapezoidupyvertex[fgklayernumber][5];
- char mountingblocksupportrapezoidowname[40];
- char mountingblocksupportrapezoidupname[40];
+ char mountingblocksupportrapezoidowname[100];
+ char mountingblocksupportrapezoidupname[100];
Double_t scalefactor = 3./4.;
for(Int_t i=0; i<fgklayernumber; i++){
////////////////////////////////////////////
mountingblocksupportrapezoidownyvertex[i][3] = mountingblocksupportrapezoidownyvertex[i][2];
mountingblocksupportrapezoidownxvertex[i][4] = mountingblocksupportrapezoidownxvertex[i][3];
mountingblocksupportrapezoidownyvertex[i][4] = mountingblocksupportrapezoidownyvertex[i][0];
+
mountingblocksupportrapezoidownshape[i]->DefinePolygon(5,mountingblocksupportrapezoidownxvertex[i],
mountingblocksupportrapezoidownyvertex[i]);
mountingblocksupportrapezoidownshape[i]->DefineSection(0,fgkMountingBlockSupportWidth[1]
-fgkMountingBlockSupportWidth[0]);
mountingblocksupportrapezoidownshape[i]->DefineSection(1,fgkMountingBlockSupportWidth[1]);
- sprintf(mountingblocksupportrapezoidowname,"MountingBlockSuppTrapezoidDownLay%d",i+5);
+ snprintf(mountingblocksupportrapezoidowname,100,"MountingBlockSuppTrapezoidDownLay%d",i+5);
mountingblocksupportrapezoidown[i] = new TGeoVolume(mountingblocksupportrapezoidowname,
mountingblocksupportrapezoidownshape[i],fSSDCarbonFiberMedium);
mountingblocksupportrapezoidown[i]->SetLineColor(9);
mountingblocksupportrapezoidupyvertex[i][3] = mountingblocksupportrapezoidupyvertex[i][2];
mountingblocksupportrapezoidupxvertex[i][4] = mountingblocksupportrapezoidupxvertex[i][3];
mountingblocksupportrapezoidupyvertex[i][4] = mountingblocksupportrapezoidupyvertex[i][0];
+
mountingblocksupportrapezoidupshape[i]->DefinePolygon(5,mountingblocksupportrapezoidupxvertex[i],
mountingblocksupportrapezoidupyvertex[i]);
mountingblocksupportrapezoidupshape[i]->DefineSection(0,fgkMountingBlockSupportWidth[1]
-fgkMountingBlockSupportWidth[0]);
mountingblocksupportrapezoidupshape[i]->DefineSection(1,fgkMountingBlockSupportWidth[1]);
- sprintf(mountingblocksupportrapezoidupname,"MountingBlockSuppTrapezoidUpLay%d",i+5);
+ snprintf(mountingblocksupportrapezoidupname,100,"MountingBlockSuppTrapezoidUpLay%d",i+5);
mountingblocksupportrapezoidup[i] = new TGeoVolume(mountingblocksupportrapezoidupname,
mountingblocksupportrapezoidupshape[i],fSSDCarbonFiberMedium);
mountingblocksupportrapezoidup[i]->SetLineColor(9);
for(Int_t i=0; i<fgklayernumber; i++) mountingblocksupportboxup[i] = new TGeoVolume*[3];
Double_t boxoriginup[fgklayernumber][2][3];
Double_t boxorigindown[fgklayernumber][2][3];
- char mountingblocksupportboxdownname[34];
- char mountingblocksupportboxupname[34];
+ char mountingblocksupportboxdownname[100];
+ char mountingblocksupportboxupname[100];
TGeoRotation* mountingblocksupportrot = new TGeoRotation();
mountingblocksupportrot->SetAngles(90.,180.,-90);
TGeoRotation* globalrefladdersupportrot = new TGeoRotation();
TGeoXtru* downmotherladdersupportshape[fgklayernumber];
TGeoVolume* downmotherladdersupport[fgklayernumber];
TGeoXtru* upmotherladdersupportshape[fgklayernumber];
-// TGeoVolume* upmotherladdersupport[fgklayernumber];
- TGeoVolumeAssembly* upmotherladdersupport[fgklayernumber];
- char upmotheladdersupportname[30];
- char downmotheladdersupportname[30];
+ TGeoVolume* upmotherladdersupport[fgklayernumber];
+ char upmotheladdersupportname[100];
+ char downmotheladdersupportname[100];
for(Int_t i=0; i<fgklayernumber; i++){
xmothervertex[i][0] = -0.5*fgkSSDMountingBlockLength[0]
- mountingsupportedge[i];
ymothervertex[i][6] = ymothervertex[i][5];
xmothervertex[i][7] = xmothervertex[i][6];
ymothervertex[i][7] = ymothervertex[i][0];
- sprintf(downmotheladdersupportname,"LadderSupportDownLay%d",i+5);
- sprintf(upmotheladdersupportname,"LadderSupportUpLay%d",i+5);
- downmotherladdersupportshape[i] = new TGeoXtru(2);
+
+ snprintf(downmotheladdersupportname,100,"LadderSupportDownLay%d",i+5);
+ snprintf(upmotheladdersupportname,100,"LadderSupportUpLay%d",i+5);
+
+ downmotherladdersupportshape[i] = new TGeoXtru(2);
downmotherladdersupportshape[i]->DefinePolygon(8,xmothervertex[i],ymothervertex[i]);
downmotherladdersupportshape[i]->DefineSection(0,ysidevertex[i][0]);
- downmotherladdersupportshape[i]->DefineSection(1,ysidevertex[i][1]
+ downmotherladdersupportshape[i]->DefineSection(1,ysidevertex[i][1]
+ fgkMountingBlockSupportDownHeight
+ fgkSSDMountingBlockHeight[1]
- 0.5*fgkCoolingTubeSupportHeight
- - fgkSSDModuleCoolingBlockToSensor);
- downmotherladdersupport[i] = new TGeoVolume(downmotheladdersupportname,
- downmotherladdersupportshape[i],fSSDAir);
+ - fgkSSDModuleCoolingBlockToSensor
+ - fgkSSDLadderVerticalDisalignment);
+
+// - fgkSSDModuleVerticalDisalignment);
+ //downmotherladdersupport[i] = new TGeoVolumeAssembly(downmotheladdersupportname);
+
+ downmotherladdersupport[i] = new TGeoVolume(downmotheladdersupportname,
+ downmotherladdersupportshape[i],fSSDAir);
upmotherladdersupportshape[i] = new TGeoXtru(2);
upmotherladdersupportshape[i]->DefinePolygon(8,xmothervertex[i],ymothervertex[i]);
upmotherladdersupportshape[i]->DefineSection(0,ysidevertex[i][0]);
+ fgkMountingBlockSupportUpHeight[i]
+ fgkSSDMountingBlockHeight[1]
- 0.5*fgkCoolingTubeSupportHeight
- - fgkSSDModuleCoolingBlockToSensor);
- upmotherladdersupport[i] = new TGeoVolumeAssembly(upmotheladdersupportname);
-// upmotherladdersupport[i] = new TGeoVolume(upmotheladdersupportname,
-// upmotherladdersupportshape[i],fSSDAir);
+ - fgkSSDModuleCoolingBlockToSensor
+ - fgkSSDLadderVerticalDisalignment);
+
+ upmotherladdersupport[i] = new TGeoVolume(upmotheladdersupportname,
+ upmotherladdersupportshape[i],fSSDAir);
}
for(Int_t i=0; i<fgklayernumber; i++){
/////////////////////////
/////////////////////////
boxorigindown[i][0][0] = -0.5*mountingsupportedge[i];
boxorigindown[i][0][1] = fgkMountingBlockSupportRadius[i]
- + 0.5*fgkMountingBlockSupportDownHeight;
+ + 0.5*fgkMountingBlockSupportDownHeight
+ - 0.5*fgkSSDLadderVerticalDisalignment;
boxorigindown[i][0][2] = fgkMountingBlockSupportWidth[1]
- 0.5*fgkMountingBlockSupportWidth[0];
boxoriginup[i][0][0] = -0.5*mountingsupportedge[i];
boxoriginup[i][0][1] = fgkMountingBlockSupportRadius[i]
- + 0.5*fgkMountingBlockSupportUpHeight[i];
+ + 0.5*fgkMountingBlockSupportUpHeight[i]
+ - 0.5*fgkSSDLadderVerticalDisalignment;
boxoriginup[i][0][2] = fgkMountingBlockSupportWidth[1]
- 0.5*fgkMountingBlockSupportWidth[0];
boxoriginup[i][1][0] = 0.0;
- boxoriginup[i][1][1] = fgkMountingBlockSupportRadius[i]
- + 0.5*fgkMountingBlockSupportUpHeight[i];
+ boxoriginup[i][1][1] = boxoriginup[i][0][1];
boxoriginup[i][1][2] = 0.5*(fgkMountingBlockSupportWidth[1]
- fgkMountingBlockSupportWidth[0]);
/////////////////////////
mountingblocksupportboxdownshape[i][0] = new TGeoBBox(0.5*(mountingsupportedge[i]
+ fgkSSDMountingBlockLength[0]),
- 0.5*fgkMountingBlockSupportDownHeight,
+ 0.5*fgkMountingBlockSupportDownHeight - 0.5*fgkSSDLadderVerticalDisalignment,
0.5*fgkMountingBlockSupportWidth[0],
boxorigindown[i][0]);
- mountingblocksupportboxdownshape[i][1] = new TGeoBBox(0.5*fgkSSDMountingBlockLength[0],
- 0.5*fgkMountingBlockSupportDownHeight,
+ mountingblocksupportboxdownshape[i][1] = new TGeoBBox(0.5*fgkSSDMountingBlockLength[0],
+ 0.5*fgkMountingBlockSupportDownHeight - 0.5*fgkSSDLadderVerticalDisalignment,
0.5*(fgkMountingBlockSupportWidth[1]
- fgkMountingBlockSupportWidth[0]),
boxorigindown[i][1]);
mountingblocksupportboxupshape[i][0] = new TGeoBBox(0.5*(mountingsupportedge[i]
+ fgkSSDMountingBlockLength[0]),
- 0.5*fgkMountingBlockSupportUpHeight[i],
+ 0.5*fgkMountingBlockSupportUpHeight[i] - 0.5*fgkSSDLadderVerticalDisalignment,
0.5*fgkMountingBlockSupportWidth[0],
boxoriginup[i][0]);
-
+
mountingblocksupportboxupshape[i][1] = new TGeoBBox(0.5*fgkSSDMountingBlockLength[0],
- 0.5*fgkMountingBlockSupportUpHeight[i],
+ 0.5*fgkMountingBlockSupportUpHeight[i] - 0.5*fgkSSDLadderVerticalDisalignment,
0.5*(fgkMountingBlockSupportWidth[1]
- fgkMountingBlockSupportWidth[0]),
boxoriginup[i][1]);
///////////////////////////////////////
- // Adding the Volumes to Mother Volume
+ // Adding the Volumes to Mother Volume
///////////////////////////////////////
for(Int_t j=0; j<2; j++){
- sprintf(mountingblocksupportboxdownname,"MountingBlockSuppDownLay%dBox%d",i+5,j+1);
- sprintf(mountingblocksupportboxupname,"MountingBlockSuppUpLay%dBox%d",i+5,j+1);
- mountingblocksupportboxdown[i][j] = new TGeoVolume(mountingblocksupportboxdownname,
- mountingblocksupportboxdownshape[i][j],
- fSSDCarbonFiberMedium);
- mountingblocksupportboxup[i][j] = new TGeoVolume(mountingblocksupportboxupname,
- mountingblocksupportboxupshape[i][j],
- fSSDCarbonFiberMedium);
+ snprintf(mountingblocksupportboxdownname,100,"MountingBlockSuppDownLay%dBox%d",i+5,j+1);
+ snprintf(mountingblocksupportboxupname,100,"MountingBlockSuppUpLay%dBox%d",i+5,j+1);
+ mountingblocksupportboxdown[i][j] = new TGeoVolume(mountingblocksupportboxdownname,
+ mountingblocksupportboxdownshape[i][j],
+ fSSDCarbonFiberMedium);
+ mountingblocksupportboxup[i][j] = new TGeoVolume(mountingblocksupportboxupname,
+ mountingblocksupportboxupshape[i][j],
+ fSSDCarbonFiberMedium);
mountingblocksupportboxdown[i][j]->SetLineColor(9);
mountingblocksupportboxup[i][j]->SetLineColor(9);
for(Int_t k=0; k<2; k++){
downmotherladdersupport[i]->AddNode(mountingblocksupportboxdown[i][j],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(mountingblocksupportboxup[i][j],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(mountingblocksupportboxup[i][j],k+1,laddersupportmatrix[k]);
}
}
for(Int_t k=0; k<2; k++){
downmotherladdersupport[i]->AddNode(sidemountingblocksupport[i],k+1,laddersupportmatrix[k]);
downmotherladdersupport[i]->AddNode(sideladdersupportpiece[i],k+1,laddersupportmatrix[k]);
downmotherladdersupport[i]->AddNode(centerladdersupportpiece[i],k+1,laddersupportmatrix[k]);
- downmotherladdersupport[i]->AddNode(mountingblockpiecedown[i],k+1,laddersupportmatrix[k]);
+ downmotherladdersupport[i]->AddNode(mountingblockpiecedown[i],k+1,laddersupportmatrix[k]);
downmotherladdersupport[i]->AddNode(mountingblocksupportrapezoidown[i],k+1,laddersupportmatrix[k]);
upmotherladdersupport[i]->AddNode(centermountingblocksupport[i],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(sidemountingblocksupport[i],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(sideladdersupportpiece[i],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(centerladdersupportpiece[i],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(mountingblockpieceup[i],k+1,laddersupportmatrix[k]);
-// upmotherladdersupport[i]->AddNode(mountingblocksupportrapezoidup[i],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(sidemountingblocksupport[i],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(sideladdersupportpiece[i],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(centerladdersupportpiece[i],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(mountingblockpieceup[i],k+1,laddersupportmatrix[k]);
+ upmotherladdersupport[i]->AddNode(mountingblocksupportrapezoidup[i],k+1,laddersupportmatrix[k]);
}
}
TList* laddersupportlist = new TList();
delete [] ysidelowervertex[i];
delete [] xcenterlowervertex[i];
delete [] ycenterlowervertex[i];
+ delete [] xmothervertex[i];
+ delete [] ymothervertex[i];
}
- delete xsidevertex;
- delete ysidevertex;
- delete xcentervertex;
- delete ycentervertex;
- delete xsidelowervertex;
- delete ysidelowervertex;
- delete xcenterlowervertex;
- delete ycenterlowervertex;
+ delete [] xsidevertex;
+ delete [] ysidevertex;
+ delete [] xcentervertex;
+ delete [] ycentervertex;
+ delete [] xsidelowervertex;
+ delete [] ysidelowervertex;
+ delete [] xcenterlowervertex;
+ delete [] ycenterlowervertex;
delete globalrefladdersupportrot;
delete mountingblocksupportrot;
/////////////////////
for(Int_t i=0; i<fgklayernumber; i++){
mountingblockratio[i] = fgkSSDMountingBlockLength[0]/fgkMountingBlockSupportRadius[i];
mountingsupportedge[i] = 0.5*fgkMountingBlockSupportRadius[i]
- *(TMath::Sqrt(4.0-TMath::Power(mountingblockratio[i],2))
+ *(TMath::Sqrt((2.-mountingblockratio[i])*(2.+mountingblockratio[i]))
* TMath::Sin(2.0*TMath::Pi()/kssdlayladdernumber[i])
- mountingblockratio[i]*(1.0+TMath::Cos(2.0*TMath::Pi()
/ kssdlayladdernumber[i])));
for(Int_t i=0; i<fgklayernumber; i++){
ringsupportvertex[i] = new TVector3*[2*kssdlayladdernumber[i]+3+nedges];
ringsupportvertex[i][0] = new TVector3(0.,fgkMountingBlockSupportRadius[i]
- * TMath::Cos(theta[i]));
+ * TMath::Cos(theta[i]), 0);
ringsupportvertex[i][1] = new TVector3(-0.5*fgkSSDMountingBlockLength[0]
- mountingsupportedge[i],
- ringsupportvertex[i][0]->Y());
+ ringsupportvertex[i][0]->Y(), 0);
ringsupportvertex[i][2] = new TVector3(0.5*fgkSSDMountingBlockLength[0],
- ringsupportvertex[i][1]->Y());
+ ringsupportvertex[i][1]->Y(),0);
ringsupportvertex[i][2]->RotateZ(theta[i]+phi[i]);
for(Int_t j=1; j<kssdlayladdernumber[i]; j++){
ringsupportvertex[i][2*j+1] = new TVector3(*ringsupportvertex[i][1]);
ringsupportvertex[i][2*kssdlayladdernumber[i]+1] = new TVector3(*ringsupportvertex[i][0]);
for(Int_t j=0; j<nedges+1; j++){
ringsupportvertex[i][2*kssdlayladdernumber[i]+2+j] =
- new TVector3((ringsupportvertex[i][0]->Y()-fgkLadderSupportHeigth)*CosD(90.0-j*angle),
- (ringsupportvertex[i][0]->Y()-fgkLadderSupportHeigth)*SinD(90.0-j*angle));
+ new TVector3((ringsupportvertex[i][0]->Y()-fgkLadderSupportHeight)*CosD(90.0-j*angle),
+ (ringsupportvertex[i][0]->Y()-fgkLadderSupportHeight)*SinD(90.0-j*angle), 0);
}
}
Double_t **xmothervertex = new Double_t*[fgklayernumber];
////////////////////////////////////////////////////////////////////////////////
// Start Corrections 13/06/08
////////////////////////////////////////////////////////////////////////////////
- char lowerladderpconsupportname[30];
+ char lowerladderpconsupportname[100];
TGeoPcon* lowerladderpconsupportshape[fgklayernumber];
TGeoVolume* lowerladderpconsupport[fgklayernumber];
Double_t lowerladderpconezsection[2] = {0.,fgkMountingBlockSupportWidth[1]};
for(Int_t i=0; i<fgklayernumber; i++){
lowerladderpconradiusmax[i] = fgkMountingBlockSupportRadius[i]
* TMath::Cos(theta[i]);
- lowerladderpconradiusmin[i] = lowerladderpconradiusmax[i]-fgkLadderSupportHeigth;
+ lowerladderpconradiusmin[i] = lowerladderpconradiusmax[i]-fgkLadderSupportHeight;
}
for(Int_t i=0; i<fgklayernumber; i++){
/////////////////////////// Modified Version ?///////////////////
for(Int_t j=0; j<2; j++) lowerladderpconsupportshape[i]->DefineSection(j,
lowerladderpconezsection[j],lowerladderpconradiusmin[i],
lowerladderpconradiusmax[i]);
- sprintf(lowerladderpconsupportname,"LowerLadderPConSupportNameLay%d",i+5);
+ snprintf(lowerladderpconsupportname,100,"LowerLadderPConSupportNameLay%d",i+5);
lowerladderpconsupport[i] = new TGeoVolume(lowerladderpconsupportname,lowerladderpconsupportshape[i],fSSDSupportRingAl);
lowerladderpconsupport[i]->SetLineColor(fColorAl);
(i==0 ? fLay5LadderSupportRing: fLay6LadderSupportRing)->AddNode(lowerladderpconsupport[i],1);
delete [] xmothervertex[i];
delete [] ymothervertex[i];
}
- delete xmothervertex;
- delete ymothervertex;
+ delete [] xmothervertex;
+ delete [] ymothervertex;
delete globalrot;
for(Int_t i=0; i<fgklayernumber; i++){
for(Int_t j=0; j<kssdlayladdernumber[i]; j++)
mothercoverplate->AddNode(holecontour[0],2,holecontourtrans);
mothercoverplate->AddNode(holecontour[1],1);
mothercoverplate->AddNode(contour,1);
+
+ for (Int_t i = 0; i < kendcapcoverplatesmallholenumber[0]; i++)
+ delete [] endcapcoverplatesmallholetrans[i];
+ delete [] endcapcoverplatesmallholetrans;
/////////////////////////////////
return mothercoverplate;
}
TGeoVolume* endcapcoolingtubetorus[5];
TGeoTube* endcapcoolingtubeshape[4];
TGeoVolume* endcapcoolingtube[4];
- char endcapcoolingtubetorusname[30];
- char endcapcoolingtubename[30];
+ char endcapcoolingtubetorusname[100];
+ char endcapcoolingtubename[100];
TGeoTorus* endcapcoolingwatertubetorushape[5];
TGeoVolume* endcapcoolingwatertubetorus[5];
TGeoTube* endcapcoolingwatertubeshape[4];
TGeoVolume* endcapcoolingwatertube[4];
- char endcapcoolingwatertubetorusname[30];
- char endcapcoolingwatertubename[30];
+ char endcapcoolingwatertubetorusname[100];
+ char endcapcoolingwatertubename[100];
for(Int_t i=0; i<5; i++){
- sprintf(endcapcoolingtubetorusname,"EndCapCoolingTubeTorus%d",i+1);
- sprintf(endcapcoolingtubename,"EndCapCoolingTube%d",i+1);
- sprintf(endcapcoolingwatertubetorusname,"EndCapCoolingWaterTubeTorus%d",i+1);
- sprintf(endcapcoolingwatertubename,"EndCapCoolingWaterTube%d",i+1);
- if(i==3){
- endcapcoolingtubetorushape[i] = new TGeoTorus(fgkEndCapCoolingTubeAxialRadius[0],
- fgkEndCapCoolingTubeRadiusMin,
- fgkEndCapCoolingTubeRadiusMax,
- 90.0,fgkEndCapCoolingTubeAngle[3]);
- endcapcoolingwatertubetorushape[i] = new TGeoTorus(fgkEndCapCoolingTubeAxialRadius[0],
- 0.,fgkEndCapCoolingTubeRadiusMin,
- 90.0,fgkEndCapCoolingTubeAngle[3]);
+ snprintf(endcapcoolingtubetorusname,100,"EndCapCoolingTubeTorus%d",i+1);
+ snprintf(endcapcoolingtubename,100,"EndCapCoolingTube%d",i+1);
+ snprintf(endcapcoolingwatertubetorusname,100,"EndCapCoolingWaterTubeTorus%d",i+1);
+ snprintf(endcapcoolingwatertubename,100,"EndCapCoolingWaterTube%d",i+1);
+ if(i==3){
+ endcapcoolingtubetorushape[i] = new TGeoTorus(fgkEndCapCoolingTubeAxialRadius[0],
+ fgkEndCapCoolingTubeRadiusMin,
+ fgkEndCapCoolingTubeRadiusMax,
+ 90.0,fgkEndCapCoolingTubeAngle[3]);
+ endcapcoolingwatertubetorushape[i] = new TGeoTorus(fgkEndCapCoolingTubeAxialRadius[0],
+ 0.,fgkEndCapCoolingTubeRadiusMin,
+ 90.0,fgkEndCapCoolingTubeAngle[3]);
+ }
+ else{
+ endcapcoolingtubetorushape[i] = new TGeoTorus(i!=4?fgkEndCapCoolingTubeAxialRadius[0]
+ :fgkEndCapCoolingTubeAxialRadius[1],
+ fgkEndCapCoolingTubeRadiusMin,
+ fgkEndCapCoolingTubeRadiusMax,
+ 0.,fgkEndCapCoolingTubeAngle[i]);
+ endcapcoolingwatertubetorushape[i] = new TGeoTorus(i!=4?fgkEndCapCoolingTubeAxialRadius[0]
+ :fgkEndCapCoolingTubeAxialRadius[1],
+ 0.,fgkEndCapCoolingTubeRadiusMin,
+ 0.,fgkEndCapCoolingTubeAngle[i]);
}
- else{
- endcapcoolingtubetorushape[i] = new TGeoTorus(i!=4?fgkEndCapCoolingTubeAxialRadius[0]
- :fgkEndCapCoolingTubeAxialRadius[1],
- fgkEndCapCoolingTubeRadiusMin,
- fgkEndCapCoolingTubeRadiusMax,
- 0.,fgkEndCapCoolingTubeAngle[i]);
- endcapcoolingwatertubetorushape[i] = new TGeoTorus(i!=4?fgkEndCapCoolingTubeAxialRadius[0]
- :fgkEndCapCoolingTubeAxialRadius[1],
- 0.,fgkEndCapCoolingTubeRadiusMin,
- 0.,fgkEndCapCoolingTubeAngle[i]);
- }
endcapcoolingtubetorus[i] = new TGeoVolume(endcapcoolingtubetorusname,
endcapcoolingtubetorushape[i],
fSSDCoolingTubePhynox);
endcapsidecoverboxtrans[2*(kendcapcoverholenumber[0]-1)+3
+i*(kendcapcoverholenumber[1]-1)+j]);
}
- return endcapsidecovermother;
+ delete [] endcapsidecoverboxtrans;
+ return endcapsidecovermother;
}
////////////////////////////////////////////////////////////////////////////////
TGeoVolume** AliITSv11GeometrySSD::GetEndCapCards() const {
Double_t radiusmax,
Double_t width,
Int_t ncables,
- char* volname){
+ const char* volname){
/////////////////////////////////////////////////////////////
// Generating EndCap High Voltage Tubes
/////////////////////////////////////////////////////////////
Double_t effectiveinneradius = TMath::Sqrt(ncables)*radiusmin;
- Double_t effectiveouteradius = TMath::Sqrt(TMath::Power(effectiveinneradius,2.)
- + TMath::Power(radiusmax,2.)
- - TMath::Power(radiusmin,2.));
+ Double_t effectiveouteradius = TMath::Sqrt(effectiveinneradius*effectiveinneradius+(radiusmax-radiusmin)*(radiusmax-radiusmin));
+
TGeoTube* effectiveinnertubeshape = new TGeoTube(0.,effectiveinneradius,0.5*width);
TGeoTube* effectiveoutertubeshape = new TGeoTube(effectiveinneradius,
effectiveouteradius,0.5*width);
////////////////////////////////////
TGeoXtru* upendcapsupportshape[klayernumber];
TGeoVolume* upendcapsupport[klayernumber];
- char upendcapsupportname[30];
+ char upendcapsupportname[100];
for(Int_t i=0; i<klayernumber; i++){
upendcapsupportshape[i] = new TGeoXtru(2);
- sprintf(upendcapsupportname,"UpEndCapSupportPieceLayer%i",i+5);
+ snprintf(upendcapsupportname,100,"UpEndCapSupportPieceLayer%i",i+5);
upendcapsupportshape[i]->DefinePolygon(knedges+3,xupvertex[i],yupvertex[i]);
upendcapsupportshape[i]->DefineSection(0,0.);
upendcapsupportshape[i]->DefineSection(1,fgkEndCapSupportHighWidth);
////////////////////////////////////
TGeoXtru* downendcapsupportshape[klayernumber];
TGeoVolume* downendcapsupport[klayernumber];
- char downendcapsupportname[30];
+ char downendcapsupportname[100];
for(Int_t i=0; i<klayernumber; i++){
downendcapsupportshape[i] = new TGeoXtru(2);
- sprintf(downendcapsupportname,"DownEndCapSupportPieceLayer%i",i+5);
+ snprintf(downendcapsupportname,100,"DownEndCapSupportPieceLayer%i",i+5);
downendcapsupportshape[i] = new TGeoXtru(2);
downendcapsupportshape[i]->DefinePolygon(2*(knedges+1),xdownvertex[i],ydownvertex[i]);
if(i==0){
TGeoPgon* endcapsupportmothershape[klayernumber];
TGeoVolume** endcapsupportmother;
endcapsupportmother = new TGeoVolume*[klayernumber];
- char endcapsupportmothername[30];
+ char endcapsupportmothername[100];
for(Int_t i=0; i<klayernumber; i++){
endcapsupportmothershape[i] = new TGeoPgon(0.0,360.0,kssdlayladdernumber[i],2);
- sprintf(endcapsupportmothername,"EndCapSupportMotherLayer%i",i+5);
+ snprintf(endcapsupportmothername,100,"EndCapSupportMotherLayer%i",i+5);
endcapsupportmothershape[i]->DefineSection(0,0.,ydownvertex[i][0],yupvertex[i][1]);
endcapsupportmothershape[i]->DefineSection(1,fgkEndCapSupportHighWidth,
ydownvertex[i][0],yupvertex[i][1]);
// Setting TGeoPgon Volume for Mother Container
///////////////////////////////////////////////
TGeoPgon* endcapsupportsystemshape[klayernumber];
- char endcapsupportsystemothername[30];
+ char endcapsupportsystemothername[100];
for(Int_t i=0; i<klayernumber; i++){
endcapsupportsystemshape[i] = new TGeoPgon(0.0,360.0,kssdlayladdernumber[i],2);
- sprintf(endcapsupportsystemothername,"EndCapSupportSystemLayer%i",i+5);
+ snprintf(endcapsupportsystemothername,100,"EndCapSupportSystemLayer%i",i+5);
endcapsupportsystemshape[i]->DefineSection(0,-(fgkEndCapCoverPlateWidth[1]
- fgkEndCapCoverPlateWidth[0]),*radiusmin[i],
(*radiusmax[i]*CosD(0.5*upedgeangle[i])
for(Int_t j=0; j<kssdlayladdernumber[i]+2; j++){
delete endcapassemblyrot[i][j];
}
- delete endcapassemblyrot[i];
+ delete [] endcapassemblyrot[i];
delete endcapassemblymatrix[i][0];
delete endcapassemblymatrix[i][1];
}
// Setting End Cap Support + End Cap Assembly of Layer 5.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert end cap support of layer5, mother is null!\n");
+ AliError("Can't insert end cap support of layer5, mother is null!\n");
return;
};
if(!fgkEndCapSupportSystem) SetEndCapSupportAssembly();
// Setting End Cap Support + End Cap Assembly of Layer 6.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert end cap support of layer6, mother is null!\n");
+ AliError("Can't insert end cap support of layer6, mother is null!\n");
return;
};
if(!fgkEndCapSupportSystem) SetEndCapSupportAssembly();
// Setting Ladder Support of Layer 5.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert ladder lupport of layer5, mother is null!\n");
+ AliError("Can't insert ladder lupport of layer5, mother is null!\n");
return;
};
if(!fLay5LadderSupportRing) SetLadderSupport(100);
// Setting Ladder Support of Layer 6.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert ladder lupport of layer6, mother is null!\n");
+ AliError("Can't insert ladder lupport of layer6, mother is null!\n");
return;
};
if(!fLay6LadderSupportRing) SetLadderSupport(100);
// Setting Ladder Support of Layer 6.
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert SSD Cone, mother is null!\n");
+ AliError("Can't insert SSD Cone, mother is null!\n");
return;
};
if(!fSSDCone) SetSSDCone();
// Setting SSD Cables
/////////////////////////////////////////////////////////////
if (! moth) {
- printf("Error::AliITSv11GeometrySSD: Can't insert SSD Cables, mother is null!\n");
+ AliError("Can't insert SSD Cables, mother is null!\n");
return;
};
TGeoVolume* ssdcables = SetSSDCables();
}
////////////////////////////////////////////////////////////////////////////////
TGeoVolume* AliITSv11GeometrySSD::SetSSDCables(){
- /////////////////////////////////////////////////////////////
- // Method generating SSDCables
- /////////////////////////////////////////////////////////////
- // SSD Layer 5 Cables
- //////////////////////////////////////////////////////////////////////////////////////////////////
- TGeoVolumeAssembly* ssdcablesmother = new TGeoVolumeAssembly("SSDCables");
- Double_t ssdcablelayvertical = 0.05; // Internal variables to control overlapping with SDD cables
- Double_t ssdcablelaylateral = 0.55; // Internal variables to control overlapping with SDD cables
- Double_t ssdcablesfactor = 0.5; // Internal variables to control overlapping with SDD cables
- //////////////////////////////////////////////////////////////////////////////////////////////////
- Double_t ssdcableslay5rigthsideradiusmin = fgkEndCapSupportMiddleRadius[0]+fgkSSDCablesLay5TubeRadiusMin;
- Double_t ssdcableslay5endconedistance = (ssdcableslay5rigthsideradiusmin
- - fgkSSDLowerPConeRadius)
- * TanD(fgkSSDPConeAngle);
- Double_t ssdcableslay5startconedistance = fgkEndCapSupportCenterLay5ITSPosition
- + fgkEndCapSupportCenterLay5Position
- - 0.5*fgkSSDCentralSupportLength-fgkSSDCentralAL3SupportLength;
- Double_t ssdcablelay5rightsidelength = ssdcableslay5endconedistance
- - ssdcableslay5startconedistance;
- ssdcablelay5rightsidelength *= ssdcablesfactor;
- Double_t ssdcableslay5rightsideradiusmax = ssdcableslay5rigthsideradiusmin+fgkSSDCablesLay5RightSideHeight;
- TGeoTube* ssdcablelay5rightubeshape = new TGeoTube(ssdcableslay5rigthsideradiusmin,
- ssdcableslay5rightsideradiusmax,
- 0.5*ssdcablelay5rightsidelength);
- TGeoVolume* ssdcablelay5righttube = new TGeoVolume("SSDCableLay5RightSideTube",
- ssdcablelay5rightubeshape,
- fSSDCopper);
- ssdcablelay5righttube->SetLineColor(9);
- TGeoTranslation* ssdcablelay5rightrans =
- new TGeoTranslation(0.,0.,fgkEndCapSupportCenterLay5ITSPosition
- + fgkEndCapSupportCenterLay5Position
- + 0.5*ssdcablelay5rightsidelength);
+ /////////////////////////////////////////////////////////////
+ // Method generating SSDCables
+ /////////////////////////////////////////////////////////////
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // SSD Cables Parameters (lengths are in mm and angles in degrees)
+ /////////////////////////////////////////////////////////////////////////////////
+
+ const Double_t kSSDCablesLay5TubeRadiusMin = 11.9*fgkmm;
+ const Double_t kSSDCablesLay6TubeRadiusMin = 11.9*fgkmm;
+
+ // Cable thickness for rings at outer Z
+ // Average: 9/2 = 4.5 cables per quadrant
+ // Ideally 1/16 * 38(34) cables, but take factor to (1/8) to accomodate kinks and loops (there are only 2 different cable lengths); 21 mm^2 Cu each
+
+ const Double_t kSSDCablesLay5RingArea = 21.*34./8.*fgkmm*fgkmm; // to be fixed in order to reproduce material budget
+ const Double_t kSSDCablesLay6RingArea = 21.*38./8.*fgkmm*fgkmm; // to be fixed in order to reproduce material budget
+
+
+ const Double_t kSSDCablesHeight = 3.2*fgkmm; // 3.2 mm*13 cm width = 18 cables, 185g/m each Add fudge factor of 2 to get to ~25 kg measured
+
+ const Double_t kSSDCableAngle = 22.5;
+ // MvL: remove water?
+ const Double_t kSSDCablesLay5RightSideWaterHeight = 2.5*fgkmm; // to be fixed in order to reproduce material budget
+ const Double_t kSSDCablesPatchPanel2RB26Angle[2] = {25.0,53.2};
+ const Double_t kSSDCablesPatchPanel2RB24Angle[2] = {23.0,53.6};
+ const Double_t kSSDPatchPanel2RB26ITSDistance = 975.0*fgkmm;
+ const Double_t kSSDPatchPanel2RB24ITSDistance = 1020.0*fgkmm;
+ const Double_t kSSDPatchPanel2RB26Radius = 451.3*fgkmm;
+ const Double_t kSSDPatchPanel2RB24Radius = 451.3*fgkmm;
+ const Double_t kSSDPatchPanelHeight = 87.5*fgkmm;
+
+ // SSD Layer 5 Cables
+ //////////////////////////////////////////////////////////////////////////////////////////////////
+ TGeoVolumeAssembly* ssdcablesmother = new TGeoVolumeAssembly("SSDCables");
+ Double_t ssdcablelayvertical = 0.05; // Internal variables to control overlapping with SDD cables
+ Double_t ssdcablelaylateral = 0.55; // Internal variables to control overlapping with SDD cables
+ //////////////////////////////////////////////////////////////////////////////////////////////////
+ // Printf(Form("Cable ring: rad min: %g length %g thick %g", ssdcableslay5rigthsideradiusmin, ssdcablelay5rightsidelength, kSSDCablesLay5RingArea/ssdcablelay5rightsidelength));
+
+
+
////////////////////////////////////
// Double_t cablescapacity[20];
// cablescapacity[0] = ssdcablelay5rightubeshape->Capacity();
////////////////////////////////////
- ssdcablesmother->AddNode(ssdcablelay5righttube,1,ssdcablelay5rightrans);
+ //ssdcablesmother->AddNode(ssdcablelay5righttube,1,ssdcablelay5rightrans);
////////////////////////////////////
// TGeoPCone Volumes
///////////////////////////////////
Double_t ssdcableslay5pconzsection[6];
Double_t ssdcableslay5pconrmin[6];
Double_t ssdcableslay5pconrmax[6];
- ssdcableslay5pconrmin[0] = ssdcablelay5rightubeshape->GetRmin();
- ssdcableslay5pconrmax[0] = ssdcablelay5rightubeshape->GetRmax();
+ ssdcableslay5pconrmin[0] = fgkEndCapSupportMiddleRadius[0]+kSSDCablesLay5TubeRadiusMin;
ssdcableslay5pconrmin[1] = fgkSSDPConeUpRadius*(1.0+ssdcablelayvertical);
- ssdcableslay5pconrmax[1] = ssdcableslay5pconrmin[1]+fgkSSDCablesLay5RightSideHeight;
+
ssdcableslay5pconzsection[0] = fgkEndCapSupportCenterLay5ITSPosition
- + fgkEndCapSupportCenterLay5Position
- + 2.*ssdcablelay5rightubeshape->GetDz();
+ + fgkEndCapSupportCenterLay5Position;
+ //+ 2.*ssdcablelay5rightsidelength; // removing this generates overlap with the water ring
+ // Keeping it generates overlap with the cones...
+ // SSDCables/SSDCableLay5RightSideWaterTube_2 ovlp=0.0939792
ssdcableslay5pconzsection[1] = 0.5*fgkSSDCentralSupportLength
+ fgkSSDCentralAL3SupportLength
+ (fgkSSDPConeUpRadius-fgkSSDLowerPConeRadius)
* TanD(fgkSSDPConeAngle);
+ Double_t dz = ssdcableslay5pconzsection[1]-ssdcableslay5pconzsection[0];
+ Double_t pconethickness = kSSDCablesLay5RingArea/TMath::Abs(dz);
+ ssdcableslay5pconrmax[0] = ssdcableslay5pconrmin[0]+pconethickness;
+ ssdcableslay5pconrmax[1] = ssdcableslay5pconrmin[1]+pconethickness;
+ //Printf(Form("pcone: r1 %g r2 %g z1 %g z2 %g thickness %g", ssdcableslay5pconrmax[0], ssdcableslay5pconrmax[1],
+ // ssdcableslay5pconzsection[0],ssdcableslay5pconzsection[1],pconethickness));
+
for(Int_t i=0; i<2;i++) ssdcableslay5pconshape[0]->DefineSection(i,ssdcableslay5pconzsection[i],
ssdcableslay5pconrmin[i],ssdcableslay5pconrmax[i]);
ssdcableslay5pcon[0] = new TGeoVolume("SSDCableLay5RightSidePCon1",
ssdcableslay5pconshape[0],fSSDCopper);
ssdcableslay5pcon[0]->SetLineColor(9);
ssdcablesmother->AddNode(ssdcableslay5pcon[0],1);
+
+ Double_t totvol = ssdcableslay5pcon[0]->Capacity();
+ // Printf(Form("Cables, lay5, pCone,volume: %g", ssdcableslay5pcon[0]->Capacity()));
////////////////////////////////////
// cablescapacity[1] = ssdcableslay5pconshape[0]->Capacity();
////////////////////////////////////
+
+ //
+ // PCon 2 and 3 are cables going through/towards holes in supports
+ //
ssdcableslay5pconzsection[2] = ssdcableslay5pconzsection[1];
ssdcableslay5pconzsection[3] = 0.5*fgkSSDCentralSupportLength
+ fgkSSDCentralAL3SupportLength
Double_t ssdcableangle = (fgkSSDPConeTrapezoidBasis-2.*(fgkSSDPConeUpMaxRadius
- fgkSSDPConeUpRadius)/TanD(fgkSSDPConeTrapezoidAngle))
/ fgkSSDPConeUpRadius*TMath::RadToDeg()*2;
- ssdcableslay5pconshape[1] = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
- ssdcableangle,2);
+ ssdcableslay5pconshape[1] = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
+ ssdcableangle,2);
+ // Printf(Form("PCon2, phi %g dphi %g ",90.0-kSSDCableAngle-0.5*ssdcableangle, ssdcableangle));
ssdcableslay5pconrmin[2] = ssdcableslay5pconrmin[1];
- ssdcableslay5pconrmax[2] = ssdcableslay5pconrmax[1];
+ ssdcableslay5pconrmax[2] = ssdcableslay5pconrmax[1];
ssdcableslay5pconrmin[3] = 0.25*(fgkSSDPConeUpMaxRadius+3.*fgkSSDPConeUpRadius
- 4.*fgkSSDLowerPConeRadius)+fgkSSDLowerPConeRadius;
ssdcableslay5pconrmin[3]*=(1.0+ssdcablelayvertical);
- ssdcableslay5pconrmax[3] = ssdcableslay5pconrmin[3]+fgkSSDCablesLay5RightSideHeight;
+ ssdcableslay5pconrmax[3] = ssdcableslay5pconrmin[3] + kSSDCablesHeight;
for(Int_t i=0; i<2;i++) ssdcableslay5pconshape[1]->DefineSection(i,ssdcableslay5pconzsection[i+2],
ssdcableslay5pconrmin[i+2],ssdcableslay5pconrmax[i+2]);
ssdcableslay5pcon[1] = new TGeoVolume("SSDCableLay5RightSidePCon2",ssdcableslay5pconshape[1],fSSDCopper);
ssdcableslay5pcon[1]->SetLineColor(9);
////////////////////////////////////
- ssdcableslay5pconshape[2] = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
+ ssdcableslay5pconshape[2] = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
ssdcableangle,2);
ssdcableslay5pconrmin[4] = ssdcableslay5pconrmin[3];
ssdcableslay5pconrmax[4] = ssdcableslay5pconrmax[3];
ssdcableslay5pconrot[i]->SetAngles(90.0*i,0.,0.);
ssdcablesmother->AddNode(ssdcableslay5pcon[1],i+1,ssdcableslay5pconrot[i]);
ssdcablesmother->AddNode(ssdcableslay5pcon[2],i+1,ssdcableslay5pconrot[i]);
+ // Printf(Form("Pcon2, Pcon3, vol %g %g",ssdcableslay5pcon[1]->Capacity(),ssdcableslay5pcon[2]->Capacity()));
+ totvol += ssdcableslay5pcon[1]->Capacity()+ssdcableslay5pcon[2]->Capacity();
}
////////////////////////////////////
//cablescapacity[2] = 4.0*ssdcableslay5pconshape[1]->Capacity();
////////////////////////////////////
// Positioning Left SSD Cables Part
////////////////////////////////////
- TGeoTranslation* ssdcablesLay5RightTubeToLeftrans = new TGeoTranslation(0.,0.,
- - 0.5*ssdcablelay5rightsidelength
- - fgkEndCapSupportCenterLay5Position
- - fgkEndCapSupportCenterLay5ITSPosition);
- ssdcablesmother->AddNode(ssdcablelay5righttube,2,ssdcablesLay5RightTubeToLeftrans);
TGeoRotation* ssdcablesLay5RightPConToLeftRot = new TGeoRotation();
ssdcablesLay5RightPConToLeftRot->SetAngles(90.,180.,-90);
ssdcablesmother->AddNode(ssdcableslay5pcon[0],2,ssdcablesLay5RightPConToLeftRot);
/////////////////////////////////////////////////////////////
// Water Tubes Layer 5
/////////////////////////
+ /* Remove ring; could be replaced with a PCone next to/on top of the cables
+
+ //
+ // MvL: Remove ring; put everything in PCone
+ //
+ // Need to keep dimensions for water ring...
+
+ Double_t ssdcablesfactor = 0.5; // Internal variables to control overlapping with SDD cables
+
+ Double_t ssdcableslay5rigthsideradiusmin = fgkEndCapSupportMiddleRadius[0]+kSSDCablesLay5TubeRadiusMin;
+ Double_t ssdcableslay5endconedistance = (ssdcableslay5rigthsideradiusmin
+ - fgkSSDLowerPConeRadius)
+ * TanD(fgkSSDPConeAngle);
+ Double_t ssdcableslay5startconedistance = fgkEndCapSupportCenterLay5ITSPosition
+ + fgkEndCapSupportCenterLay5Position
+ - 0.5*fgkSSDCentralSupportLength-fgkSSDCentralAL3SupportLength;
+ Double_t ssdcablelay5rightsidelength = ssdcableslay5endconedistance
+ - ssdcableslay5startconedistance;
+ ssdcablelay5rightsidelength *= ssdcablesfactor;
+ Double_t ssdcableslay5rightsideradiusmax = ssdcableslay5rigthsideradiusmin+kSSDCablesLay5RingArea/ssdcablelay5rightsidelength;
+
+
+ TGeoTranslation* ssdcablelay5rightrans =
+ new TGeoTranslation(0.,0.,fgkEndCapSupportCenterLay5ITSPosition
+ + fgkEndCapSupportCenterLay5Position
+ + 0.5*ssdcablelay5rightsidelength);
+
+ TGeoTranslation* ssdcablesLay5RightTubeToLeftrans = new TGeoTranslation(0.,0.,
+ - 0.5*ssdcablelay5rightsidelength
+ - fgkEndCapSupportCenterLay5Position
+ - fgkEndCapSupportCenterLay5ITSPosition);
+
TGeoTube* ssdcablelay5rightubewatershape = new TGeoTube(ssdcableslay5rightsideradiusmax,
ssdcableslay5rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight,
+ + kSSDCablesLay5RightSideWaterHeight,
0.5*ssdcablelay5rightsidelength);
TGeoVolume* ssdcablelay5rightwatertube = new TGeoVolume("SSDCableLay5RightSideWaterTube",
ssdcablelay5rightubewatershape,
ssdcablelay5rightwatertube->SetLineColor(7);
ssdcablesmother->AddNode(ssdcablelay5rightwatertube,1,ssdcablelay5rightrans);
ssdcablesmother->AddNode(ssdcablelay5rightwatertube,2,ssdcablesLay5RightTubeToLeftrans);
+ */
////////////////////////////////////
// TGeoPCone Water Volumes Layer
///////////////////////////////////
Double_t ssdcableslay5pconwaterrmax[6];
ssdcableslay5pcwateronrmin[0] = ssdcableslay5pconrmax[0];
ssdcableslay5pconwaterrmax[0] = ssdcableslay5pcwateronrmin[0]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay5pcwateronrmin[1] = ssdcableslay5pconrmax[1];
ssdcableslay5pconwaterrmax[1] = ssdcableslay5pcwateronrmin[1]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay5pconwaterzsection[0] = ssdcableslay5pconzsection[0];
ssdcableslay5pconwaterzsection[1] = ssdcableslay5pconzsection[1];
for(Int_t i=0; i<2;i++) ssdcableslay5pconwatershape[0]->DefineSection(i,ssdcableslay5pconwaterzsection[i],
////////////////////////////////////
ssdcableslay5pconwaterzsection[2] = ssdcableslay5pconzsection[2];
ssdcableslay5pconwaterzsection[3] = ssdcableslay5pconzsection[3];
- ssdcableslay5pconwatershape[1] = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
+ ssdcableslay5pconwatershape[1] = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
ssdcableangle,2);
ssdcableslay5pcwateronrmin[2] = ssdcableslay5pconrmax[1];
ssdcableslay5pconwaterrmax[2] = ssdcableslay5pcwateronrmin[2]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay5pcwateronrmin[3] = ssdcableslay5pconrmax[3];
ssdcableslay5pconwaterrmax[3] = ssdcableslay5pcwateronrmin[3]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
for(Int_t i=0; i<2;i++) ssdcableslay5pconwatershape[1]->DefineSection(i,ssdcableslay5pconwaterzsection[i+2],
ssdcableslay5pcwateronrmin[i+2],ssdcableslay5pconwaterrmax[i+2]);
ssdcableslay5pconwater[1] = new TGeoVolume("SSDCableLay5RightSidePConWater2",
ssdcableslay5pconwatershape[1],fSSDCoolingTubeWater);
ssdcableslay5pconwater[1]->SetLineColor(7);
////////////////////////////////////
- ssdcableslay5pconwatershape[2] = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
+ ssdcableslay5pconwatershape[2] = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
ssdcableangle,2);
ssdcableslay5pcwateronrmin[4] = ssdcableslay5pconrmax[3];
ssdcableslay5pconwaterrmax[4] = ssdcableslay5pcwateronrmin[4]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay5pcwateronrmin[5] = ssdcableslay5pconrmax[4];
ssdcableslay5pconwaterrmax[5] = ssdcableslay5pcwateronrmin[4]
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay5pconwaterzsection[4] = ssdcableslay5pconzsection[4];
ssdcableslay5pconwaterzsection[5] = ssdcableslay5pconzsection[5];
for(Int_t i=0; i<2;i++) ssdcableslay5pconwatershape[2]->DefineSection(i,ssdcableslay5pconwaterzsection[i+4],
/////////////////////////
// SSD Layer 6 Cables
/////////////////////////
- Double_t ssdcableslay6rigthsideradiusmin = fgkEndCapSupportMiddleRadius[1]+fgkSSDCablesLay6TubeRadiusMin;
- Double_t ssdcablelay6rightsidelength = 2.*ssdcablelay5rightsidelength;
- Double_t ssdcableslay6rightsideradiusmax = ssdcableslay6rigthsideradiusmin+fgkSSDCablesLay6RightSideHeight;
+ Double_t ssdcableslay6rigthsideradiusmin = fgkEndCapSupportMiddleRadius[1]+kSSDCablesLay6TubeRadiusMin;
+ Double_t ssdcablelay6rightsidelength = 2.; // cm was 2.*ssdcablelay5rightsidelength;
+ Double_t ssdcableslay6rightsideradiusmax = ssdcableslay6rigthsideradiusmin+kSSDCablesLay6RingArea/ssdcablelay6rightsidelength;
+ // Printf(Form("Lay 6 cables, length %g, radius %g, thickness %g", ssdcablelay6rightsidelength, ssdcableslay6rigthsideradiusmin, kSSDCablesLay6RingArea/ssdcablelay6rightsidelength));
TGeoTube* ssdcablelay6rightubeshape = new TGeoTube(ssdcableslay6rigthsideradiusmin,
ssdcableslay6rightsideradiusmax,
0.5*ssdcablelay6rightsidelength);
- fgkEndCapSupportCenterLay6ITSPosition);
ssdcablesmother->AddNode(ssdcablelay6righttube,1,ssdcablelay6rightrans);
ssdcablesmother->AddNode(ssdcablelay6righttube,2,ssdcablesLay6RightTubeToLeftrans);
+ // Printf(Form("Cables; ring layer 6, volume: %g",ssdcablelay6rightubeshape->Capacity()));
+ totvol += ssdcablelay6rightubeshape->Capacity();
////////////////////////////////////
//cablescapacity[8] = 2.*ssdcablelay6rightubeshape->Capacity();
////////////////////////////////////
- TGeoPcon* ssdcableslay6pconshape = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
+ // MvL: PCon is part of connection to patch panels;
+ // removed since current volume is too thick; now absorbed in rings+connections
+ /*
+ TGeoPcon* ssdcableslay6pconshape = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
ssdcableangle,2);
TGeoVolume* ssdcableslay6pcon;
Double_t ssdcableslay6pconrmin[2];
ssdcableslay6pconzsection[1] = ssdcableslay5pconwaterzsection[5];
for(Int_t i=0; i<2;i++) ssdcableslay6pconshape->DefineSection(i,ssdcableslay6pconzsection[i],
ssdcableslay6pconrmin[i],ssdcableslay6pconrmax[i]);
+
ssdcableslay6pcon = new TGeoVolume("SSDCableLay6RightSidePCon",
ssdcableslay6pconshape,fSSDCopper);
ssdcableslay6pcon->SetLineColor(9);
ssdcablesmother->AddNode(ssdcableslay6pcon,i+1,ssdcableslay5pconrot[i]);
ssdcablesmother->AddNode(ssdcableslay6pcon,i+5,ssdcablesLay5RightPConToLeftMatrix[i]);
}
+ */
////////////////////////////////////
//cablescapacity[9] = 8.*ssdcableslay6pconshape->Capacity();
/////////////////////////
/////////////////////////
TGeoTube* ssdcablelay6righwatertubeshape = new TGeoTube(ssdcableslay6rightsideradiusmax,
ssdcableslay6rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight,
+ + kSSDCablesLay5RightSideWaterHeight,
0.5*ssdcablelay6rightsidelength);
TGeoVolume* ssdcablelay6rightwatertube = new TGeoVolume("SSDCableLay6RightSideWaterTube",
ssdcablelay6righwatertubeshape,
ssdcablelay6rightwatertube->SetLineColor(7);
ssdcablesmother->AddNode(ssdcablelay6rightwatertube,1,ssdcablelay6rightrans);
ssdcablesmother->AddNode(ssdcablelay6rightwatertube,2,ssdcablesLay6RightTubeToLeftrans);
- TGeoPcon* ssdcableslay6waterpconshape = new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,
+ TGeoPcon* ssdcableslay6waterpconshape = new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,
ssdcableangle,2);
TGeoVolume* ssdcableslay6waterpcon;
Double_t ssdcableslay6waterpconrmin[2];
Double_t ssdcableslay6waterpconzsection[2];
ssdcableslay6waterpconrmin[0] = ssdcableslay6rightsideradiusmax;
ssdcableslay6waterpconrmax[0] = ssdcableslay6rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcableslay6waterpconrmin[1] = ssdcableslay6waterpconrmin[0];
ssdcableslay6waterpconrmax[1] = ssdcableslay6waterpconrmax[0];
ssdcableslay6waterpconzsection[0] = fgkEndCapSupportCenterLay6ITSPosition
Double_t ssdcablepatchpanel3BB26radiusmin[2];
Double_t ssdcablepatchpanel3BB26radiusmax[2];
Double_t ssdcablepatchpanel3RB26zsection[2];
- ssdcablepatchpanel3BB26radiusmin[0] = ssdcableslay5pconrmin[3]-0.5*fgkSSDPatchPanelHeigth+2.8;
+ ssdcablepatchpanel3BB26radiusmin[0] = ssdcableslay5pconrmin[3]-0.5*kSSDPatchPanelHeight;// +2.8+0.003;//Avoid small overlap with SPDshieldring;
ssdcablepatchpanel3BB26radiusmax[0] = ssdcablepatchpanel3BB26radiusmin[0]
- + fgkSSDCablesLay5RightSideHeight
- + fgkSSDCablesLay6RightSideHeight+0.5*fgkSSDPatchPanelHeigth;
- ssdcablepatchpanel3BB26radiusmin[1] = fgkSSDPatchPanel2RB26Radius;
+ + kSSDCablesHeight;
+ ssdcablepatchpanel3BB26radiusmin[1] = kSSDPatchPanel2RB26Radius;
ssdcablepatchpanel3BB26radiusmax[1] = ssdcablepatchpanel3BB26radiusmin[1]
- + 0.*fgkSSDCablesLay5RightSideHeight
- + 0.*fgkSSDCablesLay6RightSideHeight+0.5*fgkSSDPatchPanelHeigth;
+ + kSSDCablesHeight;
ssdcablepatchpanel3RB26zsection[0] = 0.5*fgkSSDCentralSupportLength
- + fgkSSDCentralAL3SupportLength
+ + fgkSSDCentralAL3SupportLength
+ fgkSSDPConeZLength[0];
- ssdcablepatchpanel3RB26zsection[1] = fgkSSDPatchPanel2RB26ITSDistance;
+ ssdcablepatchpanel3RB26zsection[1] = kSSDPatchPanel2RB26ITSDistance;
+ // Printf(Form("RB26 cable length %g",ssdcablepatchpanel3RB26zsection[1]-ssdcablepatchpanel3RB26zsection[0]));
+ // Printf(Form("Angular range %g",ssdcableangle));
+
TGeoPcon* ssdcablepatchpanel3RB26pconshape =
- new TGeoPcon(90.0-fgkSSDCablesPatchPanel2RB26Angle[0]
+ new TGeoPcon(90.0-kSSDCablesPatchPanel2RB26Angle[0]
- 0.5*ssdcableangle,ssdcableangle,2);
for(Int_t i=0; i<2;i++) ssdcablepatchpanel3RB26pconshape->DefineSection(i,ssdcablepatchpanel3RB26zsection[i],
ssdcablepatchpanel3BB26radiusmin[i],ssdcablepatchpanel3BB26radiusmax[i]);
TGeoVolume* ssdcablepatchpanel3RB26pcon = new TGeoVolume("SSDCablePatchPanel3RB26",
ssdcablepatchpanel3RB26pconshape,fSSDCopper);
ssdcablepatchpanel3RB26pcon->SetLineColor(9);
- TGeoRotation* ssdcablepatchpanel3B26rot[3];
+ TGeoRotation* ssdcablepatchpanel3B26rot[4];
for(Int_t i=0; i<4; i++) ssdcablepatchpanel3B26rot[i] = new TGeoRotation();
- ssdcablepatchpanel3B26rot[0]->SetAngles(1.0,0.0,0.0);
- ssdcablepatchpanel3B26rot[1]->SetAngles(fgkSSDCablesPatchPanel2RB26Angle[0]
- + fgkSSDCablesPatchPanel2RB26Angle[1],0.0,0.0);
- ssdcablepatchpanel3B26rot[2]->SetAngles(181.0,0.0,0.0);
- ssdcablepatchpanel3B26rot[3]->SetAngles(180.0+fgkSSDCablesPatchPanel2RB26Angle[0]
- + fgkSSDCablesPatchPanel2RB26Angle[1],0.0,0.0);
+ ssdcablepatchpanel3B26rot[0]->SetAngles(0.0,0.0,0.0);
+ ssdcablepatchpanel3B26rot[1]->SetAngles(kSSDCablesPatchPanel2RB26Angle[0]
+ + kSSDCablesPatchPanel2RB26Angle[1]+6.0,0.0,0.0);
+ ssdcablepatchpanel3B26rot[2]->SetAngles(180.0,0.0,0.0);
+ ssdcablepatchpanel3B26rot[3]->SetAngles(180.0 + kSSDCablesPatchPanel2RB26Angle[0]
+ + kSSDCablesPatchPanel2RB26Angle[1]+6.0,0.0,0.0);
for(Int_t i=0; i<4; i++) ssdcablesmother->AddNode(ssdcablepatchpanel3RB26pcon,i+1,ssdcablepatchpanel3B26rot[i]);
+ // Printf(Form("Cable to patch panels RB26 volume: %g (x4)",ssdcablepatchpanel3RB26pcon->Capacity()));
////////////////////////////////////
//cablescapacity[10] = 4.*ssdcablepatchpanel3RB26pconshape->Capacity();
////////////////////////////////////////
+ fgkSSDCentralAL3SupportLength
+ (4.0/5.0)*fgkSSDPConeZLength[0];
ssdcableitsring3BB26pconzsection[1] = ssdcablepatchpanel3RB26zsection[0];
- ssdcableitsring3BB26pconrmin[0] = fgkSSDPConeUpRadius-0.5*fgkSSDPatchPanelHeigth;
- ssdcableitsring3BB26pconrmax[0] = ssdcableitsring3BB26pconrmin[0]
- + fgkSSDCablesLay5RightSideHeight
- + fgkSSDCablesLay6RightSideHeight+0.5*fgkSSDPatchPanelHeigth;
+ ssdcableitsring3BB26pconrmin[0] = fgkSSDPConeUpRadius-0.5*kSSDPatchPanelHeight;
+ ssdcableitsring3BB26pconrmax[0] = ssdcableitsring3BB26pconrmin[0] + 2.5*kSSDCablesHeight; // widths of cable bunch is about half of patch panels; need factor 2.5
+
ssdcableitsring3BB26pconrmin[1] = ssdcablepatchpanel3BB26radiusmin[0];
ssdcableitsring3BB26pconrmax[1] = ssdcablepatchpanel3BB26radiusmax[0];
TGeoPcon* ssdcableitsring3BB26pconshape[4];
- ssdcableitsring3BB26pconshape[0] = new TGeoPcon(90.0-fgkSSDCablesPatchPanel2RB26Angle[0]
+ ssdcableitsring3BB26pconshape[0] = new TGeoPcon(90.0 - kSSDCablesPatchPanel2RB26Angle[0]
- 0.5*ssdcableangle,ssdcableangle
- + (fgkSSDCablesPatchPanel2RB26Angle[0]
- - fgkSSDCableAngle),2);
- ssdcableitsring3BB26pconshape[1] = new TGeoPcon(90.0+fgkSSDCablesPatchPanel2RB26Angle[1]
+ + (kSSDCablesPatchPanel2RB26Angle[0]
+ - kSSDCableAngle),2);
+ ssdcableitsring3BB26pconshape[1] = new TGeoPcon(90.0 + kSSDCablesPatchPanel2RB26Angle[1]
- 0.5*ssdcableangle,ssdcableangle
- + 3.0*fgkSSDCableAngle
- - fgkSSDCablesPatchPanel2RB26Angle[1],2);
- ssdcableitsring3BB26pconshape[2] = new TGeoPcon(270-fgkSSDCablesPatchPanel2RB26Angle[0]
+ + 3.0*kSSDCableAngle
+ - kSSDCablesPatchPanel2RB26Angle[1],2);
+ ssdcableitsring3BB26pconshape[2] = new TGeoPcon(270-kSSDCablesPatchPanel2RB26Angle[0]
- 0.5*ssdcableangle,ssdcableangle
- - fgkSSDCableAngle
- + fgkSSDCablesPatchPanel2RB26Angle[0],2);
- ssdcableitsring3BB26pconshape[3] = new TGeoPcon(270.0+fgkSSDCablesPatchPanel2RB26Angle[1]
+ - kSSDCableAngle
+ + kSSDCablesPatchPanel2RB26Angle[0],2);
+ ssdcableitsring3BB26pconshape[3] = new TGeoPcon(270.0+kSSDCablesPatchPanel2RB26Angle[1]
- 0.5*ssdcableangle,ssdcableangle
- + 3.0*fgkSSDCableAngle
- - fgkSSDCablesPatchPanel2RB26Angle[1],2);
+ + 3.0*kSSDCableAngle
+ - kSSDCablesPatchPanel2RB26Angle[1],2);
for(Int_t i=0;i<4;i++)
for(Int_t j=0; j<2; j++) ssdcableitsring3BB26pconshape[i]->DefineSection(j,ssdcableitsring3BB26pconzsection[j],
ssdcableitsring3BB26pconrmin[j],
for(Int_t i=0;i<4;i++){
ssdcableitsring3BB26pcon[i]->SetLineColor(9);
ssdcablesmother->AddNode(ssdcableitsring3BB26pcon[i],1);
+ //Printf(Form("Cable to patch panels RB26 volume part 2: %g (%d)",ssdcableitsring3BB26pcon[i]->Capacity(),i));
}
+
////////////////////////////////////
//cablescapacity[11] = ssdcableitsring3BB26pconshape[0]->Capacity()
// + ssdcableitsring3BB26pconshape[1]->Capacity()
Double_t ssdcablepatchpanel3RB24zsection[2];
ssdcablepatchpanel3BB24radiusmin[0] = ssdcablepatchpanel3BB26radiusmin[0];
ssdcablepatchpanel3BB24radiusmax[0] = ssdcablepatchpanel3BB26radiusmax[0];
- ssdcablepatchpanel3BB24radiusmin[1] = fgkSSDPatchPanel2RB24Radius;
+ ssdcablepatchpanel3BB24radiusmin[1] = kSSDPatchPanel2RB24Radius;
ssdcablepatchpanel3BB24radiusmax[1] = ssdcablepatchpanel3BB24radiusmin[1]
- + 0.*fgkSSDCablesLay5RightSideHeight
- + 0.*fgkSSDCablesLay6RightSideHeight
- + 0.5*fgkSSDPatchPanelHeigth;
+ + kSSDCablesHeight;
ssdcablepatchpanel3RB24zsection[0] = -0.5*fgkSSDCentralSupportLength
- fgkSSDCentralAL3SupportLength
- fgkSSDPConeZLength[0];
- ssdcablepatchpanel3RB24zsection[1] = -fgkSSDPatchPanel2RB24ITSDistance;
+ ssdcablepatchpanel3RB24zsection[1] = -kSSDPatchPanel2RB24ITSDistance;
+ //Printf(Form("RB24 cable length %g",ssdcablepatchpanel3RB24zsection[1]-ssdcablepatchpanel3RB24zsection[0]));
TGeoPcon* ssdcablepatchpanel3RB24pconshape =
- new TGeoPcon(90.0-fgkSSDCablesPatchPanel2RB24Angle[1]
+ new TGeoPcon(90.0-kSSDCablesPatchPanel2RB24Angle[1]
- 0.5*ssdcableangle,ssdcableangle,2);
for(Int_t i=0; i<2;i++) ssdcablepatchpanel3RB24pconshape->DefineSection(i,ssdcablepatchpanel3RB24zsection[i],
ssdcablepatchpanel3BB24radiusmin[i],ssdcablepatchpanel3BB24radiusmax[i]);
ssdcablepatchpanel3RB24pconshape,
fSSDCopper);
ssdcablepatchpanel3RB24pcon->SetLineColor(9);
- TGeoRotation* ssdcablepatchpanel3B24rot[3];
+ TGeoRotation* ssdcablepatchpanel3B24rot[4];
for(Int_t i=0; i<4; i++) ssdcablepatchpanel3B24rot[i] = new TGeoRotation();
- ssdcablepatchpanel3B24rot[0]->SetAngles(0.0,0.0,0.0);
- ssdcablepatchpanel3B24rot[1]->SetAngles(fgkSSDCablesPatchPanel2RB24Angle[0]
- + fgkSSDCablesPatchPanel2RB24Angle[1],0.0,0.0);
- ssdcablepatchpanel3B24rot[2]->SetAngles(180.0,0.0,0.0);
- ssdcablepatchpanel3B24rot[3]->SetAngles(180.0+fgkSSDCablesPatchPanel2RB24Angle[0]
- + fgkSSDCablesPatchPanel2RB24Angle[1],0.0,0.0);
+ ssdcablepatchpanel3B24rot[0]->SetAngles(-6.0,0.0,0.0);
+ ssdcablepatchpanel3B24rot[1]->SetAngles(kSSDCablesPatchPanel2RB24Angle[0]
+ + kSSDCablesPatchPanel2RB24Angle[1],0.0,0.0);
+ ssdcablepatchpanel3B24rot[2]->SetAngles(174.0,0.0,0.0);
+ ssdcablepatchpanel3B24rot[3]->SetAngles(180.0+kSSDCablesPatchPanel2RB24Angle[0]
+ + kSSDCablesPatchPanel2RB24Angle[1],0.0,0.0);
for(Int_t i=0; i<4; i++) ssdcablesmother->AddNode(ssdcablepatchpanel3RB24pcon,i+1,ssdcablepatchpanel3B24rot[i]);
+ //Printf(Form("Cable to patch panels RB24 volume: %g (x4)",ssdcablepatchpanel3RB24pcon->Capacity()));
////////////////////////////////////
//cablescapacity[12] = 4.*ssdcablepatchpanel3RB24pconshape->Capacity();
////////////////////////////////////////
Double_t ssdcableitsring3BB24pconrmax[2];
ssdcableitsring3BB24pconzsection[0] = -ssdcableitsring3BB26pconzsection[0];
ssdcableitsring3BB24pconzsection[1] = ssdcablepatchpanel3RB24zsection[0];
- ssdcableitsring3BB24pconrmin[0] = fgkSSDPConeUpRadius-0.5*fgkSSDPatchPanelHeigth;
- ssdcableitsring3BB24pconrmax[0] = ssdcableitsring3BB24pconrmin[0]
- + fgkSSDCablesLay5RightSideHeight
- + fgkSSDCablesLay6RightSideHeight+0.5*fgkSSDPatchPanelHeigth;
+ ssdcableitsring3BB24pconrmin[0] = fgkSSDPConeUpRadius-0.5*kSSDPatchPanelHeight;
+ ssdcableitsring3BB24pconrmax[0] = ssdcableitsring3BB24pconrmin[0] + 2.5*kSSDCablesHeight; // Cable bunch width smaller; make it thicker
+
ssdcableitsring3BB24pconrmin[1] = ssdcablepatchpanel3BB24radiusmin[0];
ssdcableitsring3BB24pconrmax[1] = ssdcablepatchpanel3BB24radiusmax[0];
TGeoPcon* ssdcableitsring3BB24pconshape[4];
- ssdcableitsring3BB24pconshape[0] = new TGeoPcon(fgkSSDCableAngle-0.5*ssdcableangle,ssdcableangle
- + (90.0-fgkSSDCablesPatchPanel2RB24Angle[1]
- - fgkSSDCableAngle),2);
- ssdcableitsring3BB24pconshape[1] = new TGeoPcon(90.0+fgkSSDCableAngle-0.5*ssdcableangle,
- ssdcableangle-fgkSSDCableAngle
- + fgkSSDCablesPatchPanel2RB24Angle[0],2);
- ssdcableitsring3BB24pconshape[2] = new TGeoPcon(180.0+fgkSSDCableAngle-0.5*ssdcableangle,ssdcableangle
- - fgkSSDCableAngle
- + 90.0-fgkSSDCablesPatchPanel2RB24Angle[1],2);
- ssdcableitsring3BB24pconshape[3] = new TGeoPcon(270.0+fgkSSDCableAngle-0.5*ssdcableangle,
- ssdcableangle-fgkSSDCableAngle
- + fgkSSDCablesPatchPanel2RB24Angle[0],2);
+ ssdcableitsring3BB24pconshape[0] = new TGeoPcon(kSSDCableAngle-0.5*ssdcableangle,ssdcableangle
+ + (90.0-kSSDCablesPatchPanel2RB24Angle[1]
+ - kSSDCableAngle),2);
+ ssdcableitsring3BB24pconshape[1] = new TGeoPcon(90.0+kSSDCableAngle-0.5*ssdcableangle,
+ ssdcableangle-kSSDCableAngle
+ + kSSDCablesPatchPanel2RB24Angle[0],2);
+ ssdcableitsring3BB24pconshape[2] = new TGeoPcon(180.0+kSSDCableAngle-0.5*ssdcableangle,ssdcableangle
+ - kSSDCableAngle
+ + 90.0 - kSSDCablesPatchPanel2RB24Angle[1],2);
+ ssdcableitsring3BB24pconshape[3] = new TGeoPcon(270.0+kSSDCableAngle-0.5*ssdcableangle,
+ ssdcableangle-kSSDCableAngle
+ + kSSDCablesPatchPanel2RB24Angle[0],2);
for(Int_t i=0;i<4;i++)
for(Int_t j=0; j<2; j++) ssdcableitsring3BB24pconshape[i]->DefineSection(j,ssdcableitsring3BB24pconzsection[j],
ssdcableitsring3BB24pconrmin[j],
for(Int_t i=0;i<4;i++){
ssdcableitsring3BB24pcon[i]->SetLineColor(9);
ssdcablesmother->AddNode(ssdcableitsring3BB24pcon[i],1);
+ // Printf(Form("Cable to patch panels RB24 (part 2) volume: %g (%d)",ssdcableitsring3BB24pcon[i]->Capacity(),i));
}
+
////////////////////////////////////
//cablescapacity[13] = ssdcableitsring3BB24pconshape[0]->Capacity()
// + ssdcableitsring3BB24pconshape[1]->Capacity()
// + ssdcableitsring3BB24pconshape[2]->Capacity()
// + ssdcableitsring3BB24pconshape[3]->Capacity();
- ////////////////////////////////////
- // Volumes for Material Budget
- ////////////////////////////////////
- TGeoTube* ssdcablelay6materialbudgetubeshape = new TGeoTube(ssdcableslay6rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight,
- ssdcableslay6rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight
- + fgkSSDCableMaterialBudgetHeight,0.5*ssdcablelay6rightsidelength);
- TGeoVolume* ssdcablelay6materialbudgetube = new TGeoVolume("SSDCableLay6MaterialBudgetTube",
- ssdcablelay6materialbudgetubeshape,
- fSSDCopper);
- ssdcablelay6materialbudgetube->SetLineColor(9);
- ssdcablesmother->AddNode(ssdcablelay6materialbudgetube,1,ssdcablelay6rightrans);
- ssdcablesmother->AddNode(ssdcablelay6materialbudgetube,2,ssdcablesLay6RightTubeToLeftrans);
+ // MvL: Pcon are connection to patch panels (part of)
+ // Removed; do not contribute much; put into ring structure
+ /*
TGeoPcon* ssdcablelay6materialbudgetpconshape =
- new TGeoPcon(90.0-fgkSSDCableAngle-0.5*ssdcableangle,ssdcableangle,2);
+ new TGeoPcon(90.0-kSSDCableAngle-0.5*ssdcableangle,ssdcableangle,2);
TGeoVolume* ssdcablelay6materialbudgetpcon;
Double_t ssdcablelay6materialbudgetpconrmin[2];
Double_t ssdcablelay6materialbudgetpconrmax[2];
Double_t ssdcablelay6materialbudgetpconzsection[2];
ssdcablelay6materialbudgetpconrmin[0] = ssdcableslay6rightsideradiusmax
- + fgkSSDCablesLay5RightSideWaterHeight;
+ + kSSDCablesLay5RightSideWaterHeight;
ssdcablelay6materialbudgetpconrmax[0] = ssdcablelay6materialbudgetpconrmin[0]
- + fgkSSDCableMaterialBudgetHeight;
+ + kSSDCableMaterialBudgetHeight;
ssdcablelay6materialbudgetpconrmin[1] = ssdcablelay6materialbudgetpconrmin[0];
ssdcablelay6materialbudgetpconrmax[1] = ssdcablelay6materialbudgetpconrmax[0];
ssdcablelay6materialbudgetpconzsection[0] = fgkEndCapSupportCenterLay6ITSPosition
ssdcablesmother->AddNode(ssdcablelay6materialbudgetpcon,i+1,ssdcableslay5pconrot[i]);
ssdcablesmother->AddNode(ssdcablelay6materialbudgetpcon,i+5,ssdcablesLay5RightPConToLeftMatrix[i]);
}
+ */
////////////////////////////////////
/* cablescapacity[14] = 2.*ssdcablelay6materialbudgetubeshape->Capacity();
cablescapacity[15] = 2.*ssdcablelay6materialbudgetpconshape->Capacity();
Double_t ssdcablesvolume = 0.0;
for(Int_t i=0;i<16;i++) ssdcablesvolume+=cablescapacity[i];
std::cout << ssdcablesvolume << std::endl;*/
+ // Printf(Form("Total volume (one side; without conn to patch panel): %g",totvol));
return ssdcablesmother;
}
////////////////////////////////////////////////////////////////////////////////
-TGeoArb8* AliITSv11GeometrySSD::GetArbShape(TVector3* vertexpos[], Double_t* width,
- Double_t height, char* shapename, Int_t isign) const{
+TGeoArb8* AliITSv11GeometrySSD::GetArbShape(TVector3 const * const vertexpos[4] , const Double_t* width,
+ Double_t height, const char* shapename, Int_t isign) const{
/////////////////////////////////////////////////////////////
// Method generating an Arb shape
/////////////////////////////////////////////////////////////
const Int_t kvertexnumber = 8;
const Int_t ktransvectnumber = 2;
- TVector3* vertex[kvertexnumber];
- TVector3* transvector[2];
- for(Int_t i=0; i<ktransvectnumber; i++) transvector[i] = new TVector3(0.,width[i]);
+ TVector3 vertex[kvertexnumber];
+ TVector3 transvector[2];
+ for(Int_t i=0; i<ktransvectnumber; i++) transvector[i].SetY(width[i]);
/////////////////////////////////////////////////////////////
//Setting the vertices for TGeoArb8
/////////////////////////////////////////////////////////////
- vertex[0] = new TVector3(*vertexpos[0]);
- vertex[1] = new TVector3(*vertexpos[1]);
- vertex[2] = new TVector3(*vertex[1]+isign*(*transvector[0]));
- vertex[3] = new TVector3(*vertex[0]+isign*(*transvector[0]));
- vertex[4] = new TVector3(*vertexpos[2]);
- vertex[5] = new TVector3(*vertexpos[3]);
- vertex[6] = new TVector3(*vertex[5]+isign*(*transvector[1]));
- vertex[7] = new TVector3(*vertex[4]+isign*(*transvector[1]));
+ vertex[0] = *vertexpos[0];
+ vertex[1] = *vertexpos[1];
+ vertex[2] = vertex[1];
+ vertex[3] = vertex[0];
+ vertex[4] = *vertexpos[2];
+ vertex[5] = *vertexpos[3];
+ vertex[6] = vertex[5];
+ vertex[7] = vertex[4];
+
+ // NB: order of points is clockwise
+ if (isign < 0) {
+ vertex[2] -= transvector[0];
+ vertex[3] -= transvector[0];
+ vertex[6] -= transvector[1];
+ vertex[7] -= transvector[1];
+ }
+ else {
+ vertex[0] += transvector[0];
+ vertex[1] += transvector[0];
+ vertex[4] += transvector[1];
+ vertex[5] += transvector[1];
+ }
+
/////////////////////////////////////////////////////////////
TGeoArb8* arbshape = new TGeoArb8(shapename,0.5*height);
- for(Int_t i = 0; i<kvertexnumber;i++)
- arbshape->SetVertex(i,vertex[i]->X(),vertex[i]->Y());
- /////////////////////////////////////////////////////////////
- // Deallocating memory
- /////////////////////////////////////////////////////////////
- for(Int_t i=0; i< kvertexnumber; i++) delete vertex[i];
- for(Int_t i=0; i< ktransvectnumber; i++) delete transvector[i];
- /////////////////////////////////////////////////////////////
+ for(Int_t i = 0; i<kvertexnumber;i++) {
+ arbshape->SetVertex(i,vertex[i].X(),vertex[i].Y());
+ }
+
return arbshape;
}
///////////////////////////////////////////////////////////////////////////////
Double_t angle = 0.;
for(Int_t i=0; i<nedges+1; i++){
angle = 90.+0.5*phi-i*(phi/nedges);
- vertexposition[0][i] = new TVector3(rmin*CosD(angle),rmin*SinD(angle));
- vertexposition[1][i] = new TVector3(rmax*CosD(angle),rmax*SinD(angle));
+ vertexposition[0][i] = new TVector3(rmin*CosD(angle),rmin*SinD(angle),0);
+ vertexposition[1][i] = new TVector3(rmax*CosD(angle),rmax*SinD(angle),0);
}
Double_t *xvertexpoints = new Double_t[kvertexnumber];
Double_t *yvertexpoints = new Double_t[kvertexnumber];
return arcshape;
}
////////////////////////////////////////////////////////////////////////////////
-TGeoShape* AliITSv11GeometrySSD::GetScrewShape(Double_t* radius,Int_t* edgesnumber,Double_t* section) const {
+TGeoShape* AliITSv11GeometrySSD::GetScrewShape(const Double_t* radius,const Int_t* edgesnumber,const Double_t* section) const {
///////////////////////////////////////////////////////////////////////
// Method Generating the Screw Shape
// radius[0]: outer radius
return screwshape;
}
////////////////////////////////////////////////////////////////////////////////
-TGeoShape* AliITSv11GeometrySSD::GetHoleShape(Double_t radius, Int_t nedges, Double_t *section) const {
+TGeoShape* AliITSv11GeometrySSD::GetHoleShape(Double_t radius, Int_t nedges, const Double_t *section) const {
///////////////////////////////////////////////////////////////////////
// Method Generating the Hole Shape
// radius of the Hole
return holeshape;
}
////////////////////////////////////////////////////////////////////////////////
-TVector3* AliITSv11GeometrySSD::GetReflection(TVector3* vector,Double_t* param) const{
+TVector3* AliITSv11GeometrySSD::GetReflection(const TVector3* vector,const Double_t* param) const{
/////////////////////////////////////////////////////////////
// Given an axis specified by param, it gives the reflection of the point
// respect to the axis
return reflectedvector;
}
////////////////////////////////////////////////////////////////////////////////
-TGeoHMatrix* AliITSv11GeometrySSD::AddTranslationToHMatrix(TGeoHMatrix* ct,
+TGeoHMatrix* AliITSv11GeometrySSD::AddTranslationToHMatrix(const TGeoHMatrix* ct,
Double_t dx,
Double_t dy,
Double_t dz) const{
/////////////////////////////////////////////////////////////
// Method returning the Medium type
/////////////////////////////////////////////////////////////
- char ch[30];
- sprintf(ch, "ITS_%s",mediumName);
+ char ch[100];
+ snprintf(ch,100, "ITS_%s",mediumName);
TGeoMedium* medium = gGeoManager->GetMedium(ch);
if (! medium)
- printf("Error(AliITSv11GeometrySSD)::medium %s not found !\n", mediumName);
+ AliError(Form("medium %s not found !\n", mediumName));
return medium;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////
fSSDStiffener0603CapacitorMedium = GetMedium("SDD ruby sph. Al2O3$");
fSSDStiffener1812CapacitorMedium = GetMedium("SDD ruby sph. Al2O3$");
+ fSSDStiffenerCapacitorCapMedium = GetMedium("NiSn$");
///////////////////////////
// Stiffener Hybrid Wire
///////////////////////////
/////////////////////////////////////////////////////////////////////
fSSDAir = GetMedium("SDD AIR$");
fSSDCopper = GetMedium("COPPER$");
+ fSSDSn = GetMedium("Sn$");
fCreateMaterials = kTRUE;
}
/////////////////////////////////////////////////////////////////////
+