/////////////////////////////////////////////////////////////////////////////////
// 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::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;
////////////////////////
// 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 < fgkendlabbercarbonfiberjunctionumber; i++) {
fendladdercarbonfiberjunction[i] = 0;
}
- for (Int_t i=0; i < fgkendladdercabonfiberjunctionmatrixnumber; i++) {
+ for (Int_t i=0; i < fgkendladdercarbonfiberjunctionmatrixnumber; i++) {
fendladdercarbonfiberjunctionmatrix[i] = 0;
}
for (Int_t i=0; i < fgkendladdercarbonfibermatrixnumber; i++) {
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),
- fSSDStiffenerCapacitorCapMedium(s.fSSDStiffenerCapacitorCapMedium),
- 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),
- fSSDSn(s.fSSDSn),
- 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),
- fcoolingtube(s.fcoolingtube),
- 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),
- fColorNiSn(s.fColorNiSn),
- 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(){
///////////////////////////////////////////////////////////////////////
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],
}
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];
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];
fgkCarbonFiberJunctionEdge[0]
* TMath::Sin(fgkCarbonFiberJunctionAngle[0]
* TMath::DegToRad()));
- vertex[4] = new TVector3(fgkCarbonFiberJunctionLength,
+ vertex[4] = new TVector3(fgkCarbonFiberJunctionLength-fgkSSDTolerance,
fgkCarbonFiberJunctionEdge[1]);
- vertex[5] = new TVector3(fgkCarbonFiberJunctionLength);
+ vertex[5] = new TVector3(fgkCarbonFiberJunctionLength-fgkSSDTolerance);
vertex[1] = GetReflection(vertex[5],reflectionparam);
vertex[2] = GetReflection(vertex[4],reflectionparam);
Double_t xvertexpoints[6], yvertexpoints[6];
}
///////////////////////////////////////////////////////////////////////////////
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
/////////////////////////////////////////////////////////////
///////////////////////////////////////
TVector3** vertexposition = new TVector3*[kvertexnumber];
- 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));
+ 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));
vertexposition[1] = new TVector3(fgkCoolingTubeSupportRmax*CosD(angle),
fgkCoolingTubeSupportRmax*SinD(angle));
vertexposition[2] = new TVector3(vertexposition[1]->X(),
for(Int_t i=0; i<nedges; i++)
vertexposition[i+5] =
- new TVector3(Router*CosD(psi+i*(2.*phi/nedges)),
- Router*SinD(psi+i*(2.*phi/nedges)));
+ new TVector3(router*CosD(psi+i*(2.*phi/nedges)),
+ router*SinD(psi+i*(2.*phi/nedges)));
///////////////////////////////////////////////////////////////////////
// TGeoXTru Volume definition for Cooling Tube Support Arc Part
///////////////////////////////////////////////////////////////////////
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];
+ 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];
+ 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[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];
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];
+ ymothervertex[4] = yvertexpoints[0][3+2*nedges]+fgkSSDTolerance;
xmothervertex[5] = xvertexpoints[0][4+2*nedges];
- ymothervertex[5] = yvertexpoints[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];
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],
endcapsidecoverboxtrans[2*(kendcapcoverholenumber[0]-1)+3
+i*(kendcapcoverholenumber[1]-1)+j]);
}
- return endcapsidecovermother;
+ delete [] endcapsidecoverboxtrans;
+ return endcapsidecovermother;
}
////////////////////////////////////////////////////////////////////////////////
TGeoVolume** AliITSv11GeometrySSD::GetEndCapCards() const {
Double_t ssdcablepatchpanel3BB26radiusmin[2];
Double_t ssdcablepatchpanel3BB26radiusmax[2];
Double_t ssdcablepatchpanel3RB26zsection[2];
- ssdcablepatchpanel3BB26radiusmin[0] = ssdcableslay5pconrmin[3]-0.5*fgkSSDPatchPanelHeight+2.8;
+ ssdcablepatchpanel3BB26radiusmin[0] = ssdcableslay5pconrmin[3]-0.5*fgkSSDPatchPanelHeight+2.8+0.003;//Avoid small overlap with SPDshieldring;
ssdcablepatchpanel3BB26radiusmax[0] = ssdcablepatchpanel3BB26radiusmin[0]
+ fgkSSDCablesLay5RightSideHeight
+ fgkSSDCablesLay6RightSideHeight+0.5*fgkSSDPatchPanelHeight;
return ssdcablesmother;
}
////////////////////////////////////////////////////////////////////////////////
-TGeoArb8* AliITSv11GeometrySSD::GetArbShape(TVector3* vertexpos[], Double_t* width,
+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
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{
fCreateMaterials = kTRUE;
}
/////////////////////////////////////////////////////////////////////
+