X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSv11GeometrySDD.cxx;h=4047f4dac15aa8231dd11a9bcee0e4468a64f87d;hb=b536a002503c87c13ea3f4dad74e73066b559ea2;hp=e64faa64055c01847c8d90072f18f6e6055234a1;hpb=fd5b63987dc7f4434b0ebb67621b2422966db8ce;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSv11GeometrySDD.cxx b/ITS/AliITSv11GeometrySDD.cxx index e64faa64055..4047f4dac15 100755 --- a/ITS/AliITSv11GeometrySDD.cxx +++ b/ITS/AliITSv11GeometrySDD.cxx @@ -117,7 +117,7 @@ const Int_t AliITSv11GeometrySDD::fgkLay3Ndet = 6; const Int_t AliITSv11GeometrySDD::fgkLay3Nladd = 14; const Double_t AliITSv11GeometrySDD::fgkLay3CoolPipeSuppH = 7.5*fgkmm; -const Double_t AliITSv11GeometrySDD::fgkLay4Rmin = 235.*fgkmm; +const Double_t AliITSv11GeometrySDD::fgkLay4Rmin = 234.8*fgkmm; const Double_t AliITSv11GeometrySDD::fgkLay4Rmax = 286.*fgkmm; const Double_t AliITSv11GeometrySDD::fgkLay4Length = (671.+0.)*fgkmm; // ladder+supporting rings (length of the virtual tube) const Double_t AliITSv11GeometrySDD::fgkLay4LadderLength = 671.*fgkmm; @@ -809,11 +809,13 @@ void AliITSv11GeometrySDD::CreateBasicObjects() { Double_t distCenterSideDown = 0.5*fgkLadderWidth/TMath::Cos(beta); //--- the top V of the Carbon Fiber Ladder (segment) - TGeoArb8 *cfLaddTop1 = CreateLadderSide( fgkSegmentLength/2., halfTheta, + TGeoArb8 *cfLaddTop1 = CreateLadderSide( "CFladdTopCornerVol1shape", + fgkSegmentLength/2., halfTheta, -1, fgkLadderLa, fgkLadderHa, fgkLadderl); TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1", cfLaddTop1,carbonFiberLadderStruct); - TGeoArb8 *cfLaddTop2 = CreateLadderSide( fgkSegmentLength/2., halfTheta, + TGeoArb8 *cfLaddTop2 = CreateLadderSide( "CFladdTopCornerVol2shape", + fgkSegmentLength/2., halfTheta, 1, fgkLadderLa, fgkLadderHa, fgkLadderl); TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerVol2", cfLaddTop2, carbonFiberLadderStruct); @@ -822,11 +824,13 @@ void AliITSv11GeometrySDD::CreateBasicObjects() { TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2-dy, 0); //--- the 2 side V - TGeoArb8 *cfLaddSide1 = CreateLadderSide( fgkSegmentLength/2., beta, -1, + TGeoArb8 *cfLaddSide1 = CreateLadderSide( "CFladdSideCornerVol1shape", + fgkSegmentLength/2., beta, -1, fgkLadderLb, fgkLadderHb, fgkLadderl); TGeoVolume *cfLaddSideVol1 = new TGeoVolume( "ITSsddCFladdSideCornerVol1", cfLaddSide1,carbonFiberLadderStruct); - TGeoArb8 *cfLaddSide2 = CreateLadderSide( fgkSegmentLength/2., beta, 1, + TGeoArb8 *cfLaddSide2 = CreateLadderSide( "CFladdSideCornerVol2shape", + fgkSegmentLength/2., beta, 1, fgkLadderLb, fgkLadderHb, fgkLadderl); TGeoVolume *cfLaddSideVol2 = new TGeoVolume( "ITSsddCFladdSideCornerVol2", cfLaddSide2,carbonFiberLadderStruct); @@ -1219,6 +1223,7 @@ void AliITSv11GeometrySDD::Layer3(TGeoVolume *moth) { TGeoVolumeAssembly *lay3Ladder = CreateLadder(3); TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3); + TGeoVolumeAssembly *lay3Ladd2Det = CreateDetectorsAssemblyLadd2(); //TGeoVolume *lay3Detectors = CreateDetectors(3); TGeoTube *virtualLayer3Shape = new TGeoTube("ITSsddLayer3Shape", fgkLay3Rmin,fgkLay3Rmax,fgkLay3Length*0.5); @@ -1265,14 +1270,14 @@ void AliITSv11GeometrySDD::Layer3(TGeoVolume *moth) { if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius; minRadiusDetBox += detectorsThick/2; TGeoCombiTrans *ctDet; + ctDet = CreateCombiTrans(rotName, minRadiusDetBox, + 0, ladderPhi, kTRUE); + if (iLadd != 2) - ctDet = CreateCombiTrans(rotName, minRadiusDetBox, - 0, ladderPhi, kTRUE); + virtualLayer3->AddNode(lay3Detectors, iLadd, ctDet); else - ctDet = CreateCombiTrans(rotName, minRadiusDetBox, - 0, ladderPhi, kFALSE); + virtualLayer3->AddNode(lay3Ladd2Det , iLadd, ctDet); - virtualLayer3->AddNode(lay3Detectors, iLadd, ctDet); /////////////////////////////////////////////////// } @@ -1924,21 +1929,32 @@ TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateLadder(Int_t iLay) { //________________________________________________________________________ -TGeoArb8 *AliITSv11GeometrySDD::CreateLadderSide(Double_t dz, Double_t angle, - Double_t xSign, Double_t L, Double_t H, Double_t l) { +TGeoArb8 *AliITSv11GeometrySDD::CreateLadderSide(const char *name, + Double_t dz, Double_t angle, Double_t xSign, + Double_t L, Double_t H, Double_t l) { // Create one half of the V shape corner of CF ladder TGeoArb8 *cfLaddSide = new TGeoArb8(dz); - cfLaddSide->SetVertex( 0, 0, 0); - cfLaddSide->SetVertex( 1, 0, -H); - cfLaddSide->SetVertex( 2, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)), - -L*TMath::Cos(angle)-l*TMath::Sin(angle)); - cfLaddSide->SetVertex( 3, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); - cfLaddSide->SetVertex( 4, 0, 0); - cfLaddSide->SetVertex( 5, 0, -H); - cfLaddSide->SetVertex( 6, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)), - -L*TMath::Cos(angle)-l*TMath::Sin(angle)); - cfLaddSide->SetVertex(7, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfLaddSide->SetName(name); + + // Points must be in clockwise order + cfLaddSide->SetVertex(0, 0, 0); + cfLaddSide->SetVertex(2, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)), + -L*TMath::Cos(angle)-l*TMath::Sin(angle)); + cfLaddSide->SetVertex(4, 0, 0); + cfLaddSide->SetVertex(6, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)), + -L*TMath::Cos(angle)-l*TMath::Sin(angle)); + if (xSign < 0) { + cfLaddSide->SetVertex(1, 0, -H); + cfLaddSide->SetVertex(3, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfLaddSide->SetVertex(5, 0, -H); + cfLaddSide->SetVertex(7, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + } else { + cfLaddSide->SetVertex(1, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfLaddSide->SetVertex(3, 0, -H); + cfLaddSide->SetVertex(5, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfLaddSide->SetVertex(7, 0, -H); + } return cfLaddSide; } @@ -2236,7 +2252,6 @@ TGeoVolume* AliITSv11GeometrySDD::CreateHybrid(Int_t iLRSide) { //**************************************************** CC outside chips: // I don't think there is a second aluminium layer here ... for (Int_t i = 0; i<4; i++) { - char ch[20]; sprintf(ch, "ccLayerA%i", i); AliITSv11GeomCableFlat ccLayer1(ch, 6.6*fgkmm, ccUpLayerTotThick); @@ -2785,19 +2800,19 @@ TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportL() { Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle); TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.); + side1->SetName("ITSsddCPSside1"); side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.); - side1->SetVertex( 1, fgkCoolPipeSuppMaxLength/2.-diffX, - -fgkCoolPipeSuppWidthExt/2.); + side1->SetVertex( 1, 0, fgkCoolPipeSuppWidthExt/2.); side1->SetVertex( 2, fgkCoolPipeSuppMaxLength/2.-diffX, fgkCoolPipeSuppWidthExt/2.); - side1->SetVertex( 3, 0, fgkCoolPipeSuppWidthExt/2.); - side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.); - side1->SetVertex( 5, fgkCoolPipeSuppMaxLength/2., + side1->SetVertex( 3, fgkCoolPipeSuppMaxLength/2.-diffX, -fgkCoolPipeSuppWidthExt/2.); + side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.); + side1->SetVertex( 5, 0, fgkCoolPipeSuppWidthExt/2.); side1->SetVertex( 6, fgkCoolPipeSuppMaxLength/2., fgkCoolPipeSuppWidthExt/2.); - side1->SetVertex( 7, 0, fgkCoolPipeSuppWidthExt/2.); - side1->SetName("ITSsddCPSside1"); + side1->SetVertex( 7, fgkCoolPipeSuppMaxLength/2., + -fgkCoolPipeSuppWidthExt/2.); TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1",0, - fgkCoolPipeSuppAxeDist @@ -2874,6 +2889,7 @@ TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportR() { Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle); TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.); + side1->SetName("ITSsddCPSside1R"); side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.); side1->SetVertex( 1, -(fgkCoolPipeSuppMaxLength/2.-diffX), -fgkCoolPipeSuppWidthExt/2.); @@ -2886,7 +2902,6 @@ TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportR() { side1->SetVertex( 6, -fgkCoolPipeSuppMaxLength/2., fgkCoolPipeSuppWidthExt/2.); side1->SetVertex( 7, 0, fgkCoolPipeSuppWidthExt/2.); - side1->SetName("ITSsddCPSside1R"); TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1R",0, - fgkCoolPipeSuppAxeDist @@ -3104,12 +3119,14 @@ TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadder(Int_t iLay) { //--- The 3 V shape corners of the Carbon Fiber Ladder //--- the top V - TGeoArb8 *cfLaddTop1 = CreateLadderSide(topCornerLength/2., halfTheta, -1, + TGeoArb8 *cfLaddTop1 = CreateLadderSide("CFladdTopCornerV1shape", + topCornerLength/2., halfTheta, -1, fgkLadderLa, fgkLadderHa, fgkLadderl); - TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1", + TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerV1", cfLaddTop1,carbonFiberLadderStruct); cfLaddTopVol1->SetLineColor(fColorCarbonFiber); - TGeoArb8 *cfLaddTop2 = CreateLadderSide( topCornerLength/2., halfTheta, 1, + TGeoArb8 *cfLaddTop2 = CreateLadderSide( "CFladdTopCornerV2shape", + topCornerLength/2., halfTheta, 1, fgkLadderLa, fgkLadderHa, fgkLadderl); TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerV2", cfLaddTop2,carbonFiberLadderStruct); @@ -3120,12 +3137,14 @@ TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadder(Int_t iLay) { virtualEnd->AddNode(cfLaddTopVol2, 1, trTop1); //--- the 2 side V - TGeoArb8 *cfLaddSide1 = CreateLadderSide( length/2., beta, -1, + TGeoArb8 *cfLaddSide1 = CreateLadderSide( "CFladdSideCornerV1shape", + length/2., beta, -1, fgkLadderLb, fgkLadderHb, fgkLadderl); TGeoVolume *cfLaddSideVol1 = new TGeoVolume("ITSsddCFladdSideCornerV1", cfLaddSide1,carbonFiberLadderStruct); cfLaddSideVol1->SetLineColor(fColorCarbonFiber); - TGeoArb8 *cfLaddSide2 = CreateLadderSide( length/2., beta, 1, + TGeoArb8 *cfLaddSide2 = CreateLadderSide( "CFladdSideCornerV2shape", + length/2., beta, 1, fgkLadderLb, fgkLadderHb, fgkLadderl); TGeoVolume *cfLaddSideVol2 = new TGeoVolume("ITSsddCFladdSideCornerV2", cfLaddSide2,carbonFiberLadderStruct); @@ -5271,6 +5290,49 @@ TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateDetectorsAssembly(Int_t iLay) { } +//________________________________________________________________________ +TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateDetectorsAssemblyLadd2() { +// +// return a box volume containing the detectors +// Special case for Layer 3 Ladder 2 which is rotated (cannot simply +// rotate the standard volume, because the module numbering would be wrong) +// M.Sitta 25 Nov 2009 +// + + Int_t nDetectors = fgkLay3Ndet; + Double_t *sensorZPos = fLay3sensorZPos; + TGeoVolume *sensorSDD = fSDDsensor3; + + char name[30]; + sprintf(name,"ITSsddDetBoxLadd2"); + + TGeoVolumeAssembly *virtualDet = new TGeoVolumeAssembly("ITSsddLadd"); + + for (Int_t i=0; i= nDetectors/2) { + TGeoTranslation *sensorPos = new TGeoTranslation(0,localY,localZ); + sensorPos->SetName(name); + virtualDet->AddNode(sensorSDD, i, sensorPos); + } + else { + TGeoRotation *rotSensor = new TGeoRotation("",0, 180, 180); + TGeoCombiTrans *sensorPos = new TGeoCombiTrans(0,localY, + localZ, rotSensor); + sensorPos->SetName(name); + virtualDet->AddNode(sensorSDD, i, sensorPos); + }; + } + + if(GetDebug(1)) virtualDet->CheckOverlaps(0.01); + return virtualDet; +} + + //________________________________________________________________________ Int_t AliITSv11GeometrySDD::ExportSensorGeometry(AliITSgeom *geom, Int_t iLaySDD, Int_t startMod) { @@ -5815,17 +5877,19 @@ void AliITSv11GeometrySDD::SDDCables(TGeoVolume *moth) // cables that are grouped at the end of SSD cones //================================== - Double_t fgkSDDCableR6 = fgkSDDCableR5+9; - Double_t fgkSDDCableZ6 = fgkSDDCableZ5+8.8; +// Double_t fgkSDDCableR6 = fgkSDDCableR5+9; +// Double_t fgkSDDCableZ6 = fgkSDDCableZ5+8.8; + Double_t fgkSDDCableR6 = fgkSDDCableR5+8; + Double_t fgkSDDCableZ6 = fgkSDDCableZ5+8; TGeoVolumeAssembly *endConeSDDCable = new TGeoVolumeAssembly("endConeSDDCable"); // Add some hardcoded shifts to avoid overlaps with SSD pathc panels - CreateAndInsetConeCablePart(endConeSDDCable, 40, 1*3,2*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6+0.7,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 20, 1*3,2*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6); - CreateAndInsetConeCablePart(endConeSDDCable, 60, 1*3,1*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6+0.6,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 50, 1*3,1*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); CreateAndInsetConeCablePart(endConeSDDCable, 85, 2*3,1*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); @@ -5833,29 +5897,29 @@ void AliITSv11GeometrySDD::SDDCables(TGeoVolume *moth) CreateAndInsetConeCablePart(endConeSDDCable, 95, 0*3,1*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); - CreateAndInsetConeCablePart(endConeSDDCable, 110, 2*3,3*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6+0.9,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 105, 2*3,3*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6); - CreateAndInsetConeCablePart(endConeSDDCable, 146, 0*3,3*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6+0.7,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 129, 0*3,3*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); - CreateAndInsetConeCablePart(endConeSDDCable, 176.1, 0*3,1*4, fgkSDDCableR5, + CreateAndInsetConeCablePart(endConeSDDCable, 176, 0*3,1*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); CreateAndInsetConeCablePart(endConeSDDCable, 190, 2*3,0*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); - CreateAndInsetConeCablePart(endConeSDDCable, 220, 1*3,2*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 210, 1*3,2*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6); - CreateAndInsetConeCablePart(endConeSDDCable, 240, 1*3,2*4, fgkSDDCableR5, + CreateAndInsetConeCablePart(endConeSDDCable, 230, 1*3,2*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); - CreateAndInsetConeCablePart(endConeSDDCable, 290.1, 2*3,2*4, fgkSDDCableR5, + CreateAndInsetConeCablePart(endConeSDDCable, 277, 2*3,2*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); - CreateAndInsetConeCablePart(endConeSDDCable, 315, 1*3,1*4, fgkSDDCableR5, - fgkSDDCableZ5,fgkSDDCableR6+0.6,fgkSDDCableZ6); + CreateAndInsetConeCablePart(endConeSDDCable, 306, 1*3,1*4, fgkSDDCableR5, + fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6); CreateAndInsetConeCablePart(endConeSDDCable, 353, 1*3,3*4, fgkSDDCableR5, fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);