X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FUPGRADE%2FAliITSUv1Layer.cxx;h=220010ee130f0e08331bd5c8030e277e3621f331;hb=693b35c978057ea1f1ce4ce0f6d512703f4d48b1;hp=05153c83b72b743b5d817766b3e59825a05e66b4;hpb=0659d2e0b3292cf57fc627a68eb08bfc011b8aa6;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/UPGRADE/AliITSUv1Layer.cxx b/ITS/UPGRADE/AliITSUv1Layer.cxx index 05153c83b72..220010ee130 100644 --- a/ITS/UPGRADE/AliITSUv1Layer.cxx +++ b/ITS/UPGRADE/AliITSUv1Layer.cxx @@ -44,19 +44,50 @@ #include using namespace TMath; -const Double_t AliITSUv1Layer::fgkDefaultSensorThick = 300*fgkmicron; -const Double_t AliITSUv1Layer::fgkDefaultLadderThick = 1*fgkcm; - -const Double_t AliITSUv1Layer::fgkOBHalfStaveWidth = 3.01 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBModuleGap = 0.01 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBFlexCable1Thick = 0.005*fgkcm; -const Double_t AliITSUv1Layer::fgkOBFlexCable2Thick = 0.01 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBBusCable1Thick = 0.02 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBBusCable2Thick = 0.02 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBColdPlateThick = 0.012*fgkcm; -const Double_t AliITSUv1Layer::fgkOBCarbonPlateThick = 0.012*fgkcm; -const Double_t AliITSUv1Layer::fgkOBGlueThick = 0.03 *fgkcm; -const Double_t AliITSUv1Layer::fgkOBModuleZLength = 21.06 *fgkcm; +// General Parameters +const Int_t AliITSUv1Layer::fgkNumberOfInnerLayers = 3; + +const Double_t AliITSUv1Layer::fgkDefaultSensorThick = 300*fgkmicron; +const Double_t AliITSUv1Layer::fgkDefaultStaveThick = 1*fgkcm; + +// Inner Barrel Parameters +const Int_t AliITSUv1Layer::fgkIBChipsPerRow = 9; +const Int_t AliITSUv1Layer::fgkIBNChipRows = 1; + +// Outer Barrel Parameters +const Int_t AliITSUv1Layer::fgkOBChipsPerRow = 7; +const Int_t AliITSUv1Layer::fgkOBNChipRows = 2; + +const Double_t AliITSUv1Layer::fgkOBHalfStaveWidth = 3.01 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBModuleWidth = fgkOBHalfStaveWidth; +const Double_t AliITSUv1Layer::fgkOBModuleGap = 0.01 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBChipXGap = 0.01 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBChipZGap = 0.01 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBFlexCableAlThick = 0.005*fgkcm; +const Double_t AliITSUv1Layer::fgkOBFlexCableKapThick = 0.01 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBBusCableAlThick = 0.02 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBBusCableKapThick = 0.02 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBColdPlateThick = 0.012*fgkcm; +const Double_t AliITSUv1Layer::fgkOBCarbonPlateThick = 0.012*fgkcm; +const Double_t AliITSUv1Layer::fgkOBGlueThick = 0.03 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBModuleZLength = 21.06 *fgkcm; +const Double_t AliITSUv1Layer::fgkOBHalfStaveYTrans = 1.76 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBHalfStaveXOverlap = 4.3 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBGraphiteFoilThick = 30.0 *fgkmicron; +const Double_t AliITSUv1Layer::fgkOBCoolTubeInnerD = 2.67 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBCoolTubeThick = 64.0 *fgkmicron; +const Double_t AliITSUv1Layer::fgkOBCoolTubeXDist = 11.1 *fgkmm; + +const Double_t AliITSUv1Layer::fgkOBSpaceFrameWidth = 42.0 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameTotHigh = 43.1 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSFrameBeamRadius = 0.6 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameLa = 3.0 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameHa = 0.721979*fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameLb = 3.7 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameHb = 0.890428*fgkmm; +const Double_t AliITSUv1Layer::fgkOBSpaceFrameL = 0.25 *fgkmm; +const Double_t AliITSUv1Layer::fgkOBSFBotBeamAngle = 56.5; +const Double_t AliITSUv1Layer::fgkOBSFrameBeamSidePhi = 65.0; ClassImp(AliITSUv1Layer) @@ -71,18 +102,20 @@ AliITSUv1Layer::AliITSUv1Layer(): fLayRadius(0), fZLength(0), fSensorThick(0), - fLadderThick(0), - fLadderWidth(0), - fLadderTilt(0), - fNLadders(0), + fStaveThick(0), + fStaveWidth(0), + fStaveTilt(0), + fNStaves(0), fNModules(0), - fDetTypeID(0), + fNChips(0), + fChipTypeID(0), fIsTurbo(0), fBuildLevel(0), fStaveModel(AliITSUv1::kIBModelDummy) { // // Standard constructor + for (int i=kNHLevels;i--;) fHierarchy[i] = 0; // } @@ -94,18 +127,20 @@ AliITSUv1Layer::AliITSUv1Layer(Int_t debug): fLayRadius(0), fZLength(0), fSensorThick(0), - fLadderThick(0), - fLadderWidth(0), - fLadderTilt(0), - fNLadders(0), + fStaveThick(0), + fStaveWidth(0), + fStaveTilt(0), + fNStaves(0), fNModules(0), - fDetTypeID(0), + fNChips(0), + fChipTypeID(0), fIsTurbo(0), fBuildLevel(0), fStaveModel(AliITSUv1::kIBModelDummy) { // // Constructor setting debugging level + for (int i=kNHLevels;i--;) fHierarchy[i] = 0; // } @@ -117,18 +152,20 @@ AliITSUv1Layer::AliITSUv1Layer(Int_t lay, Int_t debug): fLayRadius(0), fZLength(0), fSensorThick(0), - fLadderThick(0), - fLadderWidth(0), - fLadderTilt(0), - fNLadders(0), + fStaveThick(0), + fStaveWidth(0), + fStaveTilt(0), + fNStaves(0), fNModules(0), - fDetTypeID(0), + fNChips(0), + fChipTypeID(0), fIsTurbo(0), fBuildLevel(0), fStaveModel(AliITSUv1::kIBModelDummy) { // // Constructor setting layer number and debugging level + for (int i=kNHLevels;i--;) fHierarchy[i] = 0; // } @@ -140,19 +177,21 @@ AliITSUv1Layer::AliITSUv1Layer(Int_t lay, Bool_t turbo, Int_t debug): fLayRadius(0), fZLength(0), fSensorThick(0), - fLadderThick(0), - fLadderWidth(0), - fLadderTilt(0), - fNLadders(0), + fStaveThick(0), + fStaveWidth(0), + fStaveTilt(0), + fNStaves(0), fNModules(0), - fDetTypeID(0), + fNChips(0), + fChipTypeID(0), fIsTurbo(turbo), fBuildLevel(0), fStaveModel(AliITSUv1::kIBModelDummy) { // // Constructor setting layer number and debugging level - // for a "turbo" layer (i.e. where ladders overlap in phi) + // for a "turbo" layer (i.e. where staves overlap in phi) + for (int i=kNHLevels;i--;) fHierarchy[i] = 0; // } @@ -164,18 +203,20 @@ AliITSUv1Layer::AliITSUv1Layer(const AliITSUv1Layer &s): fLayRadius(s.fLayRadius), fZLength(s.fZLength), fSensorThick(s.fSensorThick), - fLadderThick(s.fLadderThick), - fLadderWidth(s.fLadderWidth), - fLadderTilt(s.fLadderTilt), - fNLadders(s.fNLadders), + fStaveThick(s.fStaveThick), + fStaveWidth(s.fStaveWidth), + fStaveTilt(s.fStaveTilt), + fNStaves(s.fNStaves), fNModules(s.fNModules), - fDetTypeID(s.fDetTypeID), + fNChips(s.fNChips), + fChipTypeID(s.fChipTypeID), fIsTurbo(s.fIsTurbo), fBuildLevel(s.fBuildLevel), fStaveModel(s.fStaveModel) { // // Copy constructor + for (int i=kNHLevels;i--;) fHierarchy[i] = s.fHierarchy[i]; // } @@ -192,16 +233,18 @@ AliITSUv1Layer& AliITSUv1Layer::operator=(const AliITSUv1Layer &s) fLayRadius = s.fLayRadius; fZLength = s.fZLength; fSensorThick = s.fSensorThick; - fLadderThick = s.fLadderThick; - fLadderWidth = s.fLadderWidth; - fLadderTilt = s.fLadderTilt; - fNLadders = s.fNLadders; + fStaveThick = s.fStaveThick; + fStaveWidth = s.fStaveWidth; + fStaveTilt = s.fStaveTilt; + fNStaves = s.fNStaves; fNModules = s.fNModules; + fNChips = s.fNChips; fIsTurbo = s.fIsTurbo; - fDetTypeID = s.fDetTypeID; + fChipTypeID = s.fChipTypeID; fBuildLevel = s.fBuildLevel; fStaveModel = s.fStaveModel; - + for (int i=kNHLevels;i--;) fHierarchy[i] = s.fHierarchy[i]; + // return *this; } @@ -235,15 +278,18 @@ void AliITSUv1Layer::CreateLayer(TGeoVolume *moth){ // Check if the user set the proper parameters - if (fLayRadius <= 0) AliFatal(Form("Wrong layer radius (%f)",fLayRadius)); - if (fZLength <= 0) AliFatal(Form("Wrong layer length (%f)",fZLength)); - if (fNLadders <= 0) AliFatal(Form("Wrong number of ladders (%d)",fNLadders)); - if (fNModules <= 0) AliFatal(Form("Wrong number of modules (%d)",fNModules)); - - if (fLadderThick <= 0) { - AliInfo(Form("Ladder thickness wrong or not set (%f), using default (%f)", - fLadderThick,fgkDefaultLadderThick)); - fLadderThick = fgkDefaultLadderThick; + if (fLayRadius<= 0) AliFatal(Form("Wrong layer radius (%f)",fLayRadius)); + if (fZLength <= 0) AliFatal(Form("Wrong layer length (%f)",fZLength)); + if (fNStaves <= 0) AliFatal(Form("Wrong number of staves (%d)",fNStaves)); + if (fNChips <= 0) AliFatal(Form("Wrong number of chips (%d)",fNChips)); + + if (fLayerNumber >= fgkNumberOfInnerLayers && fNModules <= 0) + AliFatal(Form("Wrong number of modules (%d)",fNModules)); + + if (fStaveThick <= 0) { + AliInfo(Form("Stave thickness wrong or not set (%f), using default (%f)", + fStaveThick,fgkDefaultStaveThick)); + fStaveThick = fgkDefaultStaveThick; } if (fSensorThick <= 0) { @@ -252,10 +298,10 @@ void AliITSUv1Layer::CreateLayer(TGeoVolume *moth){ fSensorThick = fgkDefaultSensorThick; } - if (fSensorThick > fLadderThick) { - AliWarning(Form("Sensor thickness (%f) is greater than ladder thickness (%f), fixing", - fSensorThick,fLadderThick)); - fSensorThick = fLadderThick; + if (fSensorThick > fStaveThick) { + AliWarning(Form("Sensor thickness (%f) is greater than stave thickness (%f), fixing", + fSensorThick,fStaveThick)); + fSensorThick = fStaveThick; } @@ -266,32 +312,32 @@ void AliITSUv1Layer::CreateLayer(TGeoVolume *moth){ } - // First create the ladder container - alpha = (360./(2*fNLadders))*DegToRad(); + // First create the stave container + alpha = (360./(2*fNStaves))*DegToRad(); - // fLadderWidth = fLayRadius*Tan(alpha); + // fStaveWidth = fLayRadius*Tan(alpha); snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLayerPattern(),fLayerNumber); TGeoVolume *layVol = new TGeoVolumeAssembly(volname); - layVol->SetUniqueID(fDetTypeID); + layVol->SetUniqueID(fChipTypeID); // layVol->SetVisibility(kFALSE); layVol->SetVisibility(kTRUE); layVol->SetLineColor(1); - TGeoVolume *laddVol = CreateLadder(); + TGeoVolume *stavVol = CreateStave(); // Now build up the layer - alpha = 360./fNLadders; - Double_t r = fLayRadius + ((TGeoBBox*)laddVol->GetShape())->GetDY(); - for (Int_t j=0; jGetShape())->GetDY(); + for (Int_t j=0; jAddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos, + layVol->AddNode(stavVol, j, new TGeoCombiTrans( xpos, ypos, zpos, new TGeoRotation("",phi,0,0))); } @@ -308,7 +354,7 @@ void AliITSUv1Layer::CreateLayer(TGeoVolume *moth){ void AliITSUv1Layer::CreateLayerTurbo(TGeoVolume *moth){ // // Creates the actual Layer and places inside its mother volume -// A so-called "turbo" layer is a layer where ladders overlap in phi +// A so-called "turbo" layer is a layer where staves overlap in phi // User can set width and tilt angle, no check is performed here // to avoid volume overlaps // @@ -332,31 +378,31 @@ void AliITSUv1Layer::CreateLayerTurbo(TGeoVolume *moth){ // Check if the user set the proper (remaining) parameters - if (fLadderWidth <= 0) - AliFatal(Form("Wrong ladder width (%f)",fLadderWidth)); - if (Abs(fLadderTilt) > 45) - AliWarning(Form("Ladder tilt angle (%f) greater than 45deg",fLadderTilt)); + if (fStaveWidth <= 0) + AliFatal(Form("Wrong stave width (%f)",fStaveWidth)); + if (Abs(fStaveTilt) > 45) + AliWarning(Form("Stave tilt angle (%f) greater than 45deg",fStaveTilt)); snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLayerPattern(), fLayerNumber); TGeoVolume *layVol = new TGeoVolumeAssembly(volname); - layVol->SetUniqueID(fDetTypeID); + layVol->SetUniqueID(fChipTypeID); layVol->SetVisibility(kTRUE); layVol->SetLineColor(1); - TGeoVolume *laddVol = CreateLadder(); + TGeoVolume *stavVol = CreateStave(); // Now build up the layer - alpha = 360./fNLadders; - Double_t r = fLayRadius /* +module thick ?! */; - for (Int_t j=0; jAddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos, - new TGeoRotation("", phi-fLadderTilt,0,0))); + layVol->AddNode(stavVol, j, new TGeoCombiTrans( xpos, ypos, zpos, + new TGeoRotation("", phi-fStaveTilt,0,0))); } @@ -367,9 +413,9 @@ void AliITSUv1Layer::CreateLayerTurbo(TGeoVolume *moth){ } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateLadder(const TGeoManager * /*mgr*/){ +TGeoVolume* AliITSUv1Layer::CreateStave(const TGeoManager * /*mgr*/){ // -// Creates the actual Ladder +// Creates the actual Stave // // Input: // mgr : the GeoManager (used only to get the proper material) @@ -383,97 +429,187 @@ TGeoVolume* AliITSUv1Layer::CreateLadder(const TGeoManager * /*mgr*/){ // char volname[30]; - Double_t xLenO = 5.79/2; - Double_t xlenI, ylen, zlen; - Double_t xpos, ypos, zpos, zmod; + Double_t xlen, ylen, zlen; + Double_t xpos, ypos; Double_t alpha; // First create all needed shapes - alpha = (360./(2*fNLadders))*DegToRad(); + alpha = (360./(2*fNStaves))*DegToRad(); - // The ladder - xlenI = fLayRadius*Tan(alpha); - if (fIsTurbo) xlenI = 0.5*fLadderWidth; - ylen = 0.5*fLadderThick; + // The stave + xlen = fLayRadius*Tan(alpha); + if (fIsTurbo) xlen = 0.5*fStaveWidth; + ylen = 0.5*fStaveThick; zlen = 0.5*fZLength; Double_t yplus = 0.46; - TGeoXtru *ladder = new TGeoXtru(2); //z sections - Double_t xv[5] = {xlenI,xlenI,0,-xlenI,-xlenI}; + TGeoXtru *stave = new TGeoXtru(2); //z sections + Double_t xv[5] = {xlen,xlen,0,-xlen,-xlen}; Double_t yv[5] = {ylen+0.09,-0.15,-yplus-fSensorThick,-0.15,ylen+0.09}; - ladder->DefinePolygon(5,xv,yv); - ladder->DefineSection(0,-zlen,0,0,1.); - ladder->DefineSection(1,+zlen,0,0,1.); + stave->DefinePolygon(5,xv,yv); + stave->DefineSection(0,-zlen,0,0,1.); + stave->DefineSection(1,+zlen,0,0,1.); // We have all shapes: now create the real volumes - snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); -// TGeoVolume *laddVol = new TGeoVolume(volname, ladder, medAir); - TGeoVolume *laddVol = new TGeoVolumeAssembly(volname); - - // laddVol->SetVisibility(kFALSE); - laddVol->SetVisibility(kTRUE); - laddVol->SetLineColor(2); - TGeoVolume *modVol = 0; - TGeoVolume *mechLaddVol = 0; - - // Now build up the ladder - if (fLayerNumber<3) { - modVol = CreateModuleInnerB(xlenI,ylen,zlen); - zmod = ((TGeoBBox*)modVol->GetShape())->GetDZ(); - for (Int_t j=0; jGetDZ() + j*2*zmod + zmod; - laddVol->AddNode(modVol, j, new TGeoTranslation(xpos, ypos, zpos)); - } + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); +// TGeoVolume *staveVol = new TGeoVolume(volname, stave, medAir); + TGeoVolume *staveVol = new TGeoVolumeAssembly(volname); + + // staveVol->SetVisibility(kFALSE); + staveVol->SetVisibility(kTRUE); + staveVol->SetLineColor(2); + TGeoVolume *mechStaveVol = 0; + + // Now build up the stave + if (fLayerNumber < fgkNumberOfInnerLayers) { + TGeoVolume *modVol = CreateStaveInnerB(xlen,ylen,zlen); + staveVol->AddNode(modVol, 0); + fHierarchy[kHalfStave] = 1; - // put mechanical stave structure, only inner barrel up to now - mechLaddVol = CreateStaveStructInnerB(xlenI,zlen); - if (mechLaddVol) - laddVol->AddNode(mechLaddVol, fNModules, new TGeoCombiTrans(0, -0.15-ylen, 0, new TGeoRotation("",0, 0, 180))); + // Mechanical stave structure + mechStaveVol = CreateStaveStructInnerB(xlen,zlen); + if (mechStaveVol) { + ypos = ((TGeoBBox*)(modVol->GetShape()))->GetDY() + + ((TGeoBBox*)(mechStaveVol->GetShape()))->GetDY(); + staveVol->AddNode(mechStaveVol, 1, new TGeoCombiTrans(0, -ypos, 0, new TGeoRotation("",0, 0, 180))); + } } else{ + TGeoVolume *hstaveVol = CreateStaveOuterB(); if (fStaveModel == AliITSUv1::kOBModel0) { // Create simplified stave struct as in v0 - modVol = CreateModuleInnerB(xlenI,ylen,zlen); - printf("?????? %f %f %f\n",xlenI,ylen,zlen); - zmod = ((TGeoBBox*)modVol->GetShape())->GetDZ(); - for (Int_t j=0; jGetDZ() + j*2*zmod + zmod; - laddVol->AddNode(modVol, j, new TGeoTranslation(xpos, ypos, zpos)); - } + staveVol->AddNode(hstaveVol, 0); + fHierarchy[kHalfStave] = 1; } else { // (if fStaveModel) Create new stave struct as in TDR - modVol = CreateStaveOuterB(xLenO); - laddVol->AddNode(modVol, 1, new TGeoTranslation(0, 2.5, 0)); - - mechLaddVol = CreateSpaceFrameOuterB(xLenO); - if (mechLaddVol) - laddVol->AddNode(mechLaddVol, 1, - new TGeoCombiTrans(0, 0, 0, - new TGeoRotation("", 180, 0, 0))); + xpos = ((TGeoBBox*)(hstaveVol->GetShape()))->GetDX() + - fgkOBHalfStaveXOverlap/2; + // ypos is CF height as computed in CreateSpaceFrameOuterB1 + ypos = (fgkOBSpaceFrameTotHigh - fgkOBHalfStaveYTrans)/2; + staveVol->AddNode(hstaveVol, 0, new TGeoTranslation(-xpos, ypos, 0)); + staveVol->AddNode(hstaveVol, 1, new TGeoTranslation( xpos, ypos+fgkOBHalfStaveYTrans, 0)); + fHierarchy[kHalfStave] = 2; // RS + mechStaveVol = CreateSpaceFrameOuterB(); + if (mechStaveVol) + staveVol->AddNode(mechStaveVol, 1, + new TGeoCombiTrans(0, 0, 0, + new TGeoRotation("", 180, 0, 0))); } // if (fStaveModel) } - // Done, return the ladder - return laddVol; + // Done, return the stave + return staveVol; +} + +//________________________________________________________________________ +TGeoVolume* AliITSUv1Layer::CreateStaveInnerB(const Double_t xsta, + const Double_t ysta, + const Double_t zsta, + const TGeoManager *mgr){ +// +// Create the chip stave for the Inner Barrel +// (Here we fake the halfstave volume to have the same +// formal geometry hierarchy as for the Outer Barrel) +// +// Input: +// xsta, ysta, zsta : X, Y, Z stave half lengths +// mgr : the GeoManager (used only to get the proper material) +// +// Output: +// +// Return: +// +// Created: 06 Mar 2014 Mario Sitta +// + + // Local variables + Double_t xmod, ymod, zmod; + char volname[30]; + + // First we create the module (i.e. the HIC with 9 chips) + TGeoVolume *moduleVol = CreateModuleInnerB(xsta, ysta, zsta); + + // Then we create the fake halfstave and the actual stave + xmod = ((TGeoBBox*)(moduleVol->GetShape()))->GetDX(); + ymod = ((TGeoBBox*)(moduleVol->GetShape()))->GetDY(); + zmod = ((TGeoBBox*)(moduleVol->GetShape()))->GetDZ(); + + TGeoBBox *hstave = new TGeoBBox(xmod, ymod, zmod); + + TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSHalfStavePattern(), fLayerNumber); + TGeoVolume *hstaveVol = new TGeoVolume(volname, hstave, medAir); + + + // Finally build it up + hstaveVol->AddNode(moduleVol, 0); + fHierarchy[kModule] = 1; + + // Done, return the stave structure + return hstaveVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveStructInnerB(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateModuleInnerB(Double_t xmod, + Double_t ymod, + Double_t zmod, + const TGeoManager *mgr){ +// +// Creates the IB Module: (only the chips for the time being) +// +// Input: +// xmod, ymod, zmod : X, Y, Z module half lengths +// mgr : the GeoManager (used only to get the proper material) +// +// Output: +// +// Return: +// the module as a TGeoVolume +// +// Created: 06 Mar 2014 M. Sitta +// + + Double_t zchip; + Double_t zpos; + char volname[30]; + + // First create the single chip + zchip = zmod/fgkIBChipsPerRow; + TGeoVolume *chipVol = CreateChipInnerB(xmod, ymod, zchip); + + // Then create the module and populate it with the chips + TGeoBBox *module = new TGeoBBox(xmod, ymod, zmod); + + TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSModulePattern(), fLayerNumber); + TGeoVolume *modVol = new TGeoVolume(volname, module, medAir); + + // mm (not used) zlen = ((TGeoBBox*)chipVol->GetShape())->GetDZ(); + for (Int_t j=0; jAddNode(chipVol, j, new TGeoTranslation(0, 0, zpos)); + fHierarchy[kChip]++; + } + + // Done, return the module + return modVol; +} + +//________________________________________________________________________ +TGeoVolume* AliITSUv1Layer::CreateStaveStructInnerB(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -484,33 +620,33 @@ TGeoVolume* AliITSUv1Layer::CreateStaveStructInnerB(const Double_t xlad, // Updated: 26 Apr 2013 Mario Sitta // - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; switch (fStaveModel) { case AliITSUv1::kIBModelDummy: - mechLaddVol = CreateStaveModelInnerBDummy(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerBDummy(xsta,zsta,mgr); break; case AliITSUv1::kIBModel0: - mechLaddVol = CreateStaveModelInnerB0(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerB0(xsta,zsta,mgr); break; case AliITSUv1::kIBModel1: - mechLaddVol = CreateStaveModelInnerB1(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerB1(xsta,zsta,mgr); break; case AliITSUv1::kIBModel21: - mechLaddVol = CreateStaveModelInnerB21(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerB21(xsta,zsta,mgr); break; case AliITSUv1::kIBModel22: - mechLaddVol = CreateStaveModelInnerB22(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerB22(xsta,zsta,mgr); break; case AliITSUv1::kIBModel3: - mechLaddVol = CreateStaveModelInnerB3(xlad,zlad,mgr); + mechStavVol = CreateStaveModelInnerB3(xsta,zsta,mgr); break; default: AliFatal(Form("Unknown stave model %d",fStaveModel)); break; } - return mechLaddVol; + return mechStavVol; } @@ -522,8 +658,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerBDummy(const Double_t , // Create dummy stave // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -539,15 +675,15 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerBDummy(const Double_t , } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure for Model 0 of TDR // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -570,8 +706,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, // Local parameters Double_t kConeOutRadius = 0.15/2; Double_t kConeInRadius = 0.1430/2; - Double_t kStaveLength = zlad*2; - Double_t kStaveWidth = xlad*2-kConeOutRadius*2; + Double_t kStaveLength = zsta*2; + Double_t kStaveWidth = xsta*2-kConeOutRadius*2; Double_t kWidth = kStaveWidth/4;//1/2 of kWidth Double_t kStaveHeight = 0.3; Double_t kHeight = kStaveHeight/2; @@ -589,11 +725,11 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, AliDebug(1, Form("BuildLevel %d\n",fBuildLevel)); char volname[30]; - snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); + snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); Double_t z=0, y=-0.011+0.0150, x=0; - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; if (fBuildLevel < 5) { @@ -605,10 +741,10 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.); mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.); - mechLaddVol = new TGeoVolume(volname, mechStruct, medAir); - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); + mechStavVol = new TGeoVolume(volname, mechStruct, medAir); + mechStavVol->SetLineColor(12); + mechStavVol->SetFillColor(12); + mechStavVol->SetVisibility(kTRUE); // detailed structure ++++++++++++++ //Pipe Kapton grey-35 @@ -616,8 +752,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, TGeoVolume *volCoolTube= new TGeoVolume("pipe", coolTube, medKapton); volCoolTube->SetFillColor(35); volCoolTube->SetLineColor(35); - mechLaddVol->AddNode(volCoolTube,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); - mechLaddVol->AddNode(volCoolTube,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); + mechStavVol->AddNode(volCoolTube,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); + mechStavVol->AddNode(volCoolTube,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); } if (fBuildLevel < 4) { @@ -625,8 +761,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, TGeoVolume *volCoolTubeW= new TGeoVolume("pipeWater", coolTubeW, medWater); volCoolTubeW->SetFillColor(4); volCoolTubeW->SetLineColor(4); - mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); - mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); + mechStavVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); + mechStavVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0)); } //frequency of filament @@ -642,16 +778,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, volT2->SetFillColor(12); for(int i=1;iAddNode(volT2,4*i+0, + mechStavVol->AddNode(volT2,4*i+0, new TGeoCombiTrans(x+kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1), new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,4*i+1, + mechStavVol->AddNode(volT2,4*i+1, new TGeoCombiTrans(x-kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1), new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); - mechLaddVol->AddNode(volT2,4*i+2, + mechStavVol->AddNode(volT2,4*i+2, new TGeoCombiTrans(x+kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1), new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,4*i+3, + mechStavVol->AddNode(volT2,4*i+3, new TGeoCombiTrans(x-kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1), new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); } @@ -664,16 +800,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, volT1->SetFillColor(12); for(int i=1;iAddNode(volT1,4*i+0, + mechStavVol->AddNode(volT1,4*i+0, new TGeoCombiTrans(x+kWidth,y-kHeight,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volT1",-90,kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+1, + mechStavVol->AddNode(volT1,4*i+1, new TGeoCombiTrans(x-kWidth,y-kHeight,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volT1",90,kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+2, + mechStavVol->AddNode(volT1,4*i+2, new TGeoCombiTrans(x+kWidth,y-kHeight,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volT1",-90,-kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+3, + mechStavVol->AddNode(volT1,4*i+3, new TGeoCombiTrans(x-kWidth,y-kHeight,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volT1",-90,+kAlpha,0))); } @@ -687,52 +823,52 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB0(const Double_t xlad, volTG->SetFillColor(5); for(int i=1;iAddNode(volTG,4*i+0, + mechStavVol->AddNode(volTG,4*i+0, new TGeoCombiTrans(x+kWidth,y-0.16,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(2*kL1*i), new TGeoRotation("volTG",-90,kAlpha,0))); - mechLaddVol->AddNode(volTG,4*i+1, + mechStavVol->AddNode(volTG,4*i+1, new TGeoCombiTrans(x-kWidth,y-0.16,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(2*kL1*i), new TGeoRotation("volTG",90,kAlpha,0))); - mechLaddVol->AddNode(volTG,4*i+2, + mechStavVol->AddNode(volTG,4*i+2, new TGeoCombiTrans(x+kWidth,y-0.16,z-kStaveLength/2+((4/n)*i*kL1)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volTG",-90,-kAlpha,0))); - mechLaddVol->AddNode(volTG,4*i+3, + mechStavVol->AddNode(volTG,4*i+3, new TGeoCombiTrans(x-kWidth,y-0.16,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), new TGeoRotation("volTG",-90,+kAlpha,0))); } - TGeoBBox *glue = new TGeoBBox(xlad, 0.005/2, zlad); + TGeoBBox *glue = new TGeoBBox(xsta, 0.005/2, zsta); TGeoVolume *volGlue=new TGeoVolume("Glue2", glue, medGlue); volGlue->SetLineColor(5); volGlue->SetFillColor(5); - //mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0))); + //mechStavVol->AddNode(volGlue, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0))); } if (fBuildLevel < 1) { //Flex cable brown-28 TGeoBBox(width,thickness,length); - TGeoBBox *kapCable = new TGeoBBox(xlad, 0.01/2, zlad); + TGeoBBox *kapCable = new TGeoBBox(xsta, 0.01/2, zsta); TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable); volCable->SetLineColor(28); volCable->SetFillColor(28); - mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0))); } // Done, return the stave structur - return mechLaddVol; + return mechStavVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure for Model 1 of TDR // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -755,9 +891,9 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, // Local parameters Double_t kConeOutRadius = 0.15/2; // Double_t kConeInRadius = 0.1430/2; - Double_t kStaveLength = zlad*2; - // Double_t kStaveWidth = xlad*2-kConeOutRadius*2; - Double_t kStaveWidth = xlad*2; + Double_t kStaveLength = zsta*2; + // Double_t kStaveWidth = xsta*2-kConeOutRadius*2; + Double_t kStaveWidth = xsta*2; Double_t kWidth = kStaveWidth/4;//1/2 of kWidth Double_t kStaveHeight = 0.3; Double_t kHeight = kStaveHeight/2; @@ -771,10 +907,10 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, Int_t loop = (Int_t)((kStaveLength/(2*kL1))/2); - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; char volname[30]; - snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); + snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); // detailed structure ++++++++++++++ @@ -783,7 +919,7 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, // Polimide micro channels numbers Double_t yMC = y-kHeight+0.01; Int_t nb = (Int_t)(kStaveWidth/0.1)+1; - Double_t xladMC = (nb*0.1-0.08)/2; + Double_t xstaMC = (nb*0.1-0.08)/2; if (fBuildLevel < 5) { @@ -795,37 +931,37 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.); mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.); - mechLaddVol = new TGeoVolume(volname, mechStruct, medAir); - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); + mechStavVol = new TGeoVolume(volname, mechStruct, medAir); + mechStavVol->SetLineColor(12); + mechStavVol->SetFillColor(12); + mechStavVol->SetVisibility(kTRUE); // Polimide micro channels numbers - TGeoBBox *tM0=new TGeoBBox(xladMC, 0.005/2, zlad); + TGeoBBox *tM0=new TGeoBBox(xstaMC, 0.005/2, zsta); TGeoVolume *volTM0=new TGeoVolume("MicroChanCover", tM0, medKapton); volTM0->SetLineColor(35); volTM0->SetFillColor(35); - mechLaddVol->AddNode(volTM0, 0, new TGeoCombiTrans(x,-0.0125+yMC, z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volTM0, 1, new TGeoCombiTrans(x,+0.0125+yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volTM0, 0, new TGeoCombiTrans(x,-0.0125+yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volTM0, 1, new TGeoCombiTrans(x,+0.0125+yMC, z, new TGeoRotation("",0, 0, 0))); - TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zlad); + TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zsta); TGeoVolume *volTM0b=new TGeoVolume("MicroChanWalls", tM0b, medKapton); volTM0b->SetLineColor(35); volTM0b->SetFillColor(35); for (Int_t ib=0;ibAddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xstaMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0))); } } if (fBuildLevel < 4) { // Water in Polimide micro channels - TGeoBBox *water=new TGeoBBox(0.08/2, 0.02/2, zlad+0.1); + TGeoBBox *water=new TGeoBBox(0.08/2, 0.02/2, zsta+0.1); TGeoVolume *volWater=new TGeoVolume("Water", water, medWater); volWater->SetLineColor(4); volWater->SetFillColor(4); for (Int_t ib=0;ib<(nb-1);ib++) { - mechLaddVol->AddNode(volWater, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.06,yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volWater, ib, new TGeoCombiTrans(x+ib*0.1-xstaMC+0.06,yMC, z, new TGeoRotation("",0, 0, 0))); } } @@ -838,16 +974,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, volT1->SetLineColor(12); volT1->SetFillColor(12); for(int i=0;iAddNode(volT1,4*i+0, + mechStavVol->AddNode(volT1,4*i+0, new TGeoCombiTrans(x+kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+(4*kL1)+kS1/2, new TGeoRotation("volT1",-90,kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+1, + mechStavVol->AddNode(volT1,4*i+1, new TGeoCombiTrans(x-kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+(4*kL1*i)+kS1/2, new TGeoRotation("volT1",90,kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+2, + mechStavVol->AddNode(volT1,4*i+2, new TGeoCombiTrans(x+kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT1",-90,-kAlpha,0))); - mechLaddVol->AddNode(volT1,4*i+3, + mechStavVol->AddNode(volT1,4*i+3, new TGeoCombiTrans(x-kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT1",-90,+kAlpha,0))); } @@ -858,16 +994,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, volT2->SetLineColor(12); volT2->SetFillColor(12); for(int i=0;iAddNode(volT2,4*i+0, + mechStavVol->AddNode(volT2,4*i+0, new TGeoCombiTrans(x+kWidth,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,4*i+1, + mechStavVol->AddNode(volT2,4*i+1, new TGeoCombiTrans(x-kWidth,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); - mechLaddVol->AddNode(volT2,4*i+2, + mechStavVol->AddNode(volT2,4*i+2, new TGeoCombiTrans(x+kWidth,y+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,4*i+3, + mechStavVol->AddNode(volT2,4*i+3, new TGeoCombiTrans(x-kWidth,y+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); } @@ -880,58 +1016,58 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB1(const Double_t xlad, volT3->SetLineColor(5); volT3->SetFillColor(5); for(int i=0;iAddNode(volT3,4*i+0, + mechStavVol->AddNode(volT3,4*i+0, new TGeoCombiTrans(x+kWidth,y-kHeight+0.0325,z-kStaveLength/2+(4*kL1*i)+kS1/2, new TGeoRotation("volT1",-90,kAlpha,0))); - mechLaddVol->AddNode(volT3,4*i+1, + mechStavVol->AddNode(volT3,4*i+1, new TGeoCombiTrans(x-kWidth,y-kHeight+0.0325,z-kStaveLength/2+(4*kL1*i)+kS1/2, new TGeoRotation("volT1",90,kAlpha,0))); - mechLaddVol->AddNode(volT3,4*i+2, + mechStavVol->AddNode(volT3,4*i+2, new TGeoCombiTrans(x+kWidth,y-kHeight+0.0325,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT1",-90,-kAlpha,0))); - mechLaddVol->AddNode(volT3,4*i+3, + mechStavVol->AddNode(volT3,4*i+3, new TGeoCombiTrans(x-kWidth,y-kHeight+0.0325,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT1",-90,+kAlpha,0))); } // Glue microchannel and sensor - TGeoBBox *glueM = new TGeoBBox(xlad, 0.01/2, zlad); + TGeoBBox *glueM = new TGeoBBox(xsta, 0.01/2, zsta); TGeoVolume *volGlueM=new TGeoVolume("MicroChanGlue", glueM, medGlue); volGlueM->SetLineColor(5); volGlueM->SetFillColor(5); - mechLaddVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0))); // Glue sensor and kapton - TGeoBBox *glue = new TGeoBBox(xlad, 0.005/2, zlad); + TGeoBBox *glue = new TGeoBBox(xsta, 0.005/2, zsta); TGeoVolume *volGlue=new TGeoVolume("SensorGlue", glue, medGlue); volGlue->SetLineColor(5); volGlue->SetFillColor(5); - mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0))); } if (fBuildLevel < 1) { - TGeoBBox *kapCable = new TGeoBBox(xlad, 0.01/2, zlad); + TGeoBBox *kapCable = new TGeoBBox(xsta, 0.01/2, zsta); TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable); volCable->SetLineColor(28); volCable->SetFillColor(28); - mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0))); } // Done, return the stave structur - return mechLaddVol; + return mechStavVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure for Model 2.1 of TDR // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -957,8 +1093,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, // Local parameters Double_t kConeOutRadius =0.151384/2; Double_t kConeInRadius = 0.145034/2; - Double_t kStaveLength = zlad; - Double_t kStaveWidth = xlad*2; + Double_t kStaveLength = zsta; + Double_t kStaveWidth = xsta*2; Double_t kWidth = (kStaveWidth+0.005)/4; Double_t kStaveHeigth = 0.33;//0.33; Double_t kHeight = (kStaveHeigth+0.025)/2; @@ -978,11 +1114,11 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, char volname[30]; - snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); + snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); Double_t z=0, y=-(kConeOutRadius+0.03)+0.0385, x=0; - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; if (fBuildLevel < 5) { // world (trapezoid) @@ -993,18 +1129,18 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.); mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.); - mechLaddVol = new TGeoVolume(volname, mechStruct, medAir); - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); + mechStavVol = new TGeoVolume(volname, mechStruct, medAir); + mechStavVol->SetLineColor(12); + mechStavVol->SetFillColor(12); + mechStavVol->SetVisibility(kTRUE); //Pipe Kapton grey-35 TGeoCone *cone1 = new TGeoCone(kStaveLength,kConeInRadius,kConeOutRadius,kConeInRadius,kConeOutRadius); TGeoVolume *volCone1= new TGeoVolume("PolyimidePipe", cone1, medKapton); volCone1->SetFillColor(35); volCone1->SetLineColor(35); - mechLaddVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z)); - mechLaddVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z)); + mechStavVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z)); + mechStavVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z)); } if (fBuildLevel < 4) { @@ -1013,8 +1149,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, TGeoVolume *volCoolTubeW= new TGeoVolume("Water", coolTubeW, medWater); volCoolTubeW->SetFillColor(4); volCoolTubeW->SetLineColor(4); - mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z)); - mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z)); + mechStavVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z)); + mechStavVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z)); } if (fBuildLevel < 3) { @@ -1025,11 +1161,11 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, volT2->SetLineColor(12); volT2->SetFillColor(12); for(int i=0;iAddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); - mechLaddVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); - mechLaddVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); -// mechLaddVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight-(0.12/2)+0.072,z+kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); + mechStavVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); + mechStavVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); + mechStavVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); + mechStavVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); +// mechStavVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight-(0.12/2)+0.072,z+kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); } @@ -1038,75 +1174,75 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, TGeoVolume *plate4 = new TGeoVolume("WallOut",box4,medM60J3K); plate4->SetFillColor(35); plate4->SetLineColor(35); - mechLaddVol->AddNode(plate4,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0))); - mechLaddVol->AddNode(plate4,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0))); + mechStavVol->AddNode(plate4,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0))); + mechStavVol->AddNode(plate4,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0))); //wall side in TGeoBBox *box5 = new TGeoBBox(0.015/2,0.12/2,kStaveLength-0.50); TGeoVolume *plate5 = new TGeoVolume("WallIn",box5,medM60J3K); plate5->SetFillColor(12); plate5->SetLineColor(12); - mechLaddVol->AddNode(plate5,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-0.03-0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0))); - mechLaddVol->AddNode(plate5,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+0.03+0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0))); + mechStavVol->AddNode(plate5,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-0.03-0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0))); + mechStavVol->AddNode(plate5,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+0.03+0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0))); //Amec Thermasol red-2 cover tube FGS300 TGeoConeSeg *cons1 = new TGeoConeSeg(kStaveLength-0.50,kConeOutRadius,kConeOutRadius+kLay1,kConeOutRadius,kConeOutRadius+kLay1,0,180); TGeoVolume *cone11 = new TGeoVolume("ThermasolPipeCover",cons1,medFGS003); cone11->SetFillColor(2); cone11->SetLineColor(2); - mechLaddVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone11",0,0,0))); - mechLaddVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone11",0,0,0))); + mechStavVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone11",0,0,0))); + mechStavVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone11",0,0,0))); TGeoBBox *box2 = new TGeoBBox((0.50-(2*kConeOutRadius))/2,kLay1/2,kStaveLength-0.50); TGeoVolume *plate2 = new TGeoVolume("ThermasolMiddle",box2,medFGS003); plate2->SetFillColor(2); plate2->SetLineColor(2); - mechLaddVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate2",0,0,0))); + mechStavVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate2",0,0,0))); TGeoBBox *box21 = new TGeoBBox((0.75-0.25-kConeOutRadius-kLay1)/2,kLay1/2,kStaveLength-0.50); TGeoVolume *plate21 = new TGeoVolume("ThermasolLeftRight",box21,medFGS003); plate21->SetFillColor(2); plate21->SetLineColor(2); - mechLaddVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0))); - mechLaddVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0))); + mechStavVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0))); + mechStavVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0))); TGeoBBox *box22 = new TGeoBBox((kLay1/2),kConeOutRadius/2,kStaveLength-0.50); TGeoVolume *plate22 = new TGeoVolume("ThermasolVertical",box22,medFGS003); plate22->SetFillColor(2); plate22->SetLineColor(2); - mechLaddVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); //C Fleece TGeoConeSeg *cons2 = new TGeoConeSeg(kStaveLength-0.50,kConeOutRadius+kLay1,kConeOutRadius+kLay1+kLay2,kConeOutRadius+kLay1,kConeOutRadius+kLay1+kLay2,0,180); TGeoVolume *cone12 = new TGeoVolume("CFleecePipeCover",cons2,medCarbonFleece); cone12->SetFillColor(28); cone12->SetLineColor(28); - mechLaddVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone12",0,0,0))); - mechLaddVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone12",0,0,0))); + mechStavVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone12",0,0,0))); + mechStavVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone12",0,0,0))); TGeoBBox *box3 = new TGeoBBox((0.50-(2*(kConeOutRadius+kLay1)))/2,kLay2/2,kStaveLength-0.50); TGeoVolume *plate3 = new TGeoVolume("CFleeceMiddle",box3,medCarbonFleece); plate3->SetFillColor(28); plate3->SetLineColor(28); - mechLaddVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate3",0,0,0))); + mechStavVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate3",0,0,0))); TGeoBBox *box31 = new TGeoBBox((0.75-0.25-kConeOutRadius-kLay1)/2,kLay2/2,kStaveLength-0.50); TGeoVolume *plate31 = new TGeoVolume("CFleeceLeftRight",box31,medCarbonFleece); plate31->SetFillColor(28); plate31->SetLineColor(28); - mechLaddVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0))); - mechLaddVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0))); + mechStavVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0))); + mechStavVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0))); TGeoBBox *box32 = new TGeoBBox((kLay2/2),(kConeOutRadius-kLay1)/2,kStaveLength-0.50); TGeoVolume *plate32 = new TGeoVolume("CFleeceVertical",box32,medCarbonFleece); plate32->SetFillColor(28); plate32->SetLineColor(28); - mechLaddVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); //K13D2U carbon plate @@ -1114,52 +1250,52 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB21(const Double_t xlad, TGeoVolume *plate1 = new TGeoVolume("CarbonPlate",box1,medK13D2U2k); plate1->SetFillColor(5); plate1->SetLineColor(5); - mechLaddVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(kLay3/2)),z,new TGeoRotation("plate1",0,0,0))); + mechStavVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(kLay3/2)),z,new TGeoRotation("plate1",0,0,0))); //C Fleece bottom plate TGeoBBox *box6 = new TGeoBBox(2*kWidth,kLay2/2,kStaveLength-0.50); TGeoVolume *plate6 = new TGeoVolume("CFleeceBottom",box6,medCarbonFleece); plate6->SetFillColor(2); plate6->SetLineColor(2); - mechLaddVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)),z,new TGeoRotation("plate1",0,0,0))); + mechStavVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)),z,new TGeoRotation("plate1",0,0,0))); } if (fBuildLevel < 2) { //Glue layers and kapton - TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, 0.005/2, zlad); + TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, 0.005/2, zsta); TGeoVolume *volGlue=new TGeoVolume("Glue", glue, medGlue); volGlue->SetLineColor(5); volGlue->SetFillColor(5); - mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 1, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); } if (fBuildLevel < 1) { - TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, 0.01/2, zlad); + TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, 0.01/2, zsta); TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable); volCable->SetLineColor(28); volCable->SetFillColor(28); - mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+0.01+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+0.01+(0.01/2)), z, new TGeoRotation("",0, 0, 0))); } // Done, return the stave structure - return mechLaddVol; + return mechStavVol; } // new model22 //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure for Model 2.2 of TDR // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1186,8 +1322,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, // Local parameters Double_t kConeOutRadius =0.107/2;//0.107/2; Double_t kConeInRadius = 0.1015/2;//0.10105/2 - Double_t kStaveLength = zlad; - Double_t kStaveWidth = xlad*2; + Double_t kStaveLength = zsta; + Double_t kStaveWidth = xsta*2; Double_t kWidth = (kStaveWidth)/4; Double_t kStaveHeight = 0.283;//0.33; Double_t kHeight = (kStaveHeight)/2; @@ -1212,11 +1348,11 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, Int_t loop = (Int_t)(kStaveLength/(2*kL1)); char volname[30]; - snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); + snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); Double_t z=0, y=-(2*kConeOutRadius)+klay1+klay2+fSensorThick/2-0.0004, x=0; - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; if (fBuildLevel < 5) { // world (trapezoid) @@ -1230,18 +1366,18 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, mechStruct->DefineSection(0,-kStaveLength,0,0,1.); mechStruct->DefineSection(1,kStaveLength,0,0,1.); - mechLaddVol = new TGeoVolume(volname, mechStruct, medAir); - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); + mechStavVol = new TGeoVolume(volname, mechStruct, medAir); + mechStavVol->SetLineColor(12); + mechStavVol->SetFillColor(12); + mechStavVol->SetVisibility(kTRUE); //Polyimide Pipe Kapton grey-35 TGeoCone *cone1 = new TGeoCone(kStaveLength,kConeInRadius,kConeOutRadius-0.0001,kConeInRadius,kConeOutRadius-0.0001); TGeoVolume *volCone1= new TGeoVolume("PolyimidePipe", cone1, medKapton); volCone1->SetFillColor(35); volCone1->SetLineColor(35); - mechLaddVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z)); - mechLaddVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z)); + mechStavVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z)); + mechStavVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z)); } if (fBuildLevel < 4) { @@ -1249,8 +1385,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, TGeoVolume *volCoolTubeW= new TGeoVolume("Water", coolTubeW, medWater); volCoolTubeW->SetFillColor(4); volCoolTubeW->SetLineColor(4); - mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z)); - mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z)); + mechStavVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z)); + mechStavVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z)); } if (fBuildLevel < 3) { @@ -1262,13 +1398,13 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, volT2->SetFillColor(12); for(int i=0;iAddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); + mechStavVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta))); // 2) Front Right Top Filament - mechLaddVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); + mechStavVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta))); // 3) Back Left Top Filament - mechLaddVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); + mechStavVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta))); // 4) Back Right Top Filament - mechLaddVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); + mechStavVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta))); } //Vertex structure @@ -1278,131 +1414,131 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB22(const Double_t xlad, TGeoVolume *ibdv = new TGeoVolume("TopVertex",trd1,medM60J3K); ibdv->SetFillColor(12); ibdv->SetLineColor(12); - mechLaddVol->AddNode(ibdv,1,new TGeoCombiTrans(x,y+kStaveHeight+0.03,z,new TGeoRotation("ibdv",0.,-90,0)));//y+kStaveHeight+0.056 + mechStavVol->AddNode(ibdv,1,new TGeoCombiTrans(x,y+kStaveHeight+0.03,z,new TGeoRotation("ibdv",0.,-90,0)));//y+kStaveHeight+0.056 //left trd2 TGeoTrd1 *trd2 = new TGeoTrd1(0,kSideVertexMWidth/2,kStaveLength, kSideVertexHeight/2); TGeoVolume *ibdv2 = new TGeoVolume("LeftVertex",trd2,medM60J3K); ibdv2->SetFillColor(12); ibdv2->SetLineColor(12); - mechLaddVol->AddNode(ibdv2,1,new TGeoCombiTrans(x+kStaveWidth/2-0.06,y-0.0355,z,new TGeoRotation("ibdv2",-103.3,90,0))); //x-kStaveWidth/2-0.09 old Config.C y-0.0355, + mechStavVol->AddNode(ibdv2,1,new TGeoCombiTrans(x+kStaveWidth/2-0.06,y-0.0355,z,new TGeoRotation("ibdv2",-103.3,90,0))); //x-kStaveWidth/2-0.09 old Config.C y-0.0355, //right trd3 TGeoTrd1 *trd3 = new TGeoTrd1(0,kSideVertexMWidth/2,kStaveLength, kSideVertexHeight/2); TGeoVolume *ibdv3 = new TGeoVolume("RightVertex",trd3,medM60J3K); ibdv3->SetFillColor(12); ibdv3->SetLineColor(12); - mechLaddVol->AddNode(ibdv3,1,new TGeoCombiTrans(x-kStaveWidth/2+0.06,y-0.0355,z,new TGeoRotation("ibdv3",103.3,90,0))); //x-kStaveWidth/2+0.09 old Config.C + mechStavVol->AddNode(ibdv3,1,new TGeoCombiTrans(x-kStaveWidth/2+0.06,y-0.0355,z,new TGeoRotation("ibdv3",103.3,90,0))); //x-kStaveWidth/2+0.09 old Config.C //Carbon Fleece - TGeoConeSeg *cons2 = new TGeoConeSeg(zlad,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,0,180); + TGeoConeSeg *cons2 = new TGeoConeSeg(zsta,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,0,180); TGeoVolume *cone12 = new TGeoVolume("CarbonFleecePipeCover",cons2,medCarbonFleece); cone12->SetFillColor(28); cone12->SetLineColor(28); - mechLaddVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone12",0,0,0))); - mechLaddVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone12",0,0,0))); + mechStavVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone12",0,0,0))); + mechStavVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone12",0,0,0))); - TGeoBBox *box3 = new TGeoBBox((0.50-(2*(kConeOutRadius+klay1)))/2,klay2/2,zlad);//kStaveLength-0.50); + TGeoBBox *box3 = new TGeoBBox((0.50-(2*(kConeOutRadius+klay1)))/2,klay2/2,zsta);//kStaveLength-0.50); TGeoVolume *plate3 = new TGeoVolume("CarbonFleeceMiddle",box3,medCarbonFleece); plate3->SetFillColor(28); plate3->SetLineColor(28); - mechLaddVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate3",0,0,0))); + mechStavVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate3",0,0,0))); - TGeoBBox *box31 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,klay2/2,zlad); + TGeoBBox *box31 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,klay2/2,zsta); TGeoVolume *plate31 = new TGeoVolume("CarbonFleeceLeftRight",box31,medCarbonFleece); plate31->SetFillColor(28); plate31->SetLineColor(28); - mechLaddVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(0.75-0.25-kConeOutRadius-klay1)/2,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0))); - mechLaddVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(0.75-0.25-kConeOutRadius-klay1)/2,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0))); + mechStavVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(0.75-0.25-kConeOutRadius-klay1)/2,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0))); + mechStavVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(0.75-0.25-kConeOutRadius-klay1)/2,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0))); - TGeoBBox *box32 = new TGeoBBox((klay2/2),(kConeOutRadius-klay1)/2,zlad); + TGeoBBox *box32 = new TGeoBBox((klay2/2),(kConeOutRadius-klay1)/2,zsta); TGeoVolume *plate32 = new TGeoVolume("CarbonFleeceVertical",box32,medCarbonFleece); plate32->SetFillColor(28); plate32->SetLineColor(28); - mechLaddVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); - mechLaddVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); + mechStavVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0))); //Amec Thermasol red-2 cover tube FGS300 or Carbon Paper - TGeoConeSeg *cons1 = new TGeoConeSeg(zlad,kConeOutRadius,kConeOutRadius+klay1-0.0001,kConeOutRadius,kConeOutRadius+klay1-0.0001,0,180);//kConeOutRadius+klay1-0.0001 + TGeoConeSeg *cons1 = new TGeoConeSeg(zsta,kConeOutRadius,kConeOutRadius+klay1-0.0001,kConeOutRadius,kConeOutRadius+klay1-0.0001,0,180);//kConeOutRadius+klay1-0.0001 TGeoVolume *cone11 = new TGeoVolume("ThermasolPipeCover",cons1,medFGS003); cone11->SetFillColor(2); cone11->SetLineColor(2); - mechLaddVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone11",0,0,0))); - mechLaddVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone11",0,0,0))); + mechStavVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone11",0,0,0))); + mechStavVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone11",0,0,0))); - TGeoBBox *box2 = new TGeoBBox((0.50-(2*kConeOutRadius))/2,(klay1/2),zlad);//kStaveLength-0.50); + TGeoBBox *box2 = new TGeoBBox((0.50-(2*kConeOutRadius))/2,(klay1/2),zsta);//kStaveLength-0.50); TGeoVolume *plate2 = new TGeoVolume("ThermasolMiddle",box2,medFGS003); plate2->SetFillColor(2); plate2->SetLineColor(2); - mechLaddVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate2",0,0,0))); + mechStavVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate2",0,0,0))); - TGeoBBox *box21 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,(klay1/2),zlad); + TGeoBBox *box21 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,(klay1/2),zsta); TGeoVolume *plate21 = new TGeoVolume("ThermasolLeftRight",box21,medFGS003); plate21->SetFillColor(2); plate21->SetLineColor(2); - mechLaddVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(klay1/2)+0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0))); - mechLaddVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(klay1/2)-0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0))); + mechStavVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(klay1/2)+0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0))); + mechStavVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(klay1/2)-0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0))); - TGeoBBox *box22 = new TGeoBBox((klay1/2),kConeOutRadius/2,zlad); + TGeoBBox *box22 = new TGeoBBox((klay1/2),kConeOutRadius/2,zsta); TGeoVolume *plate22 = new TGeoVolume("ThermasolVertical",box22,medFGS003); plate22->SetFillColor(2); plate22->SetLineColor(2); - mechLaddVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); - mechLaddVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); + mechStavVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0))); //K13D2U CF plate - TGeoBBox *box1 = new TGeoBBox(2*kWidth,(klay3)/2,zlad); + TGeoBBox *box1 = new TGeoBBox(2*kWidth,(klay3)/2,zsta); TGeoVolume *plate1 = new TGeoVolume("CFPlate",box1,medK13D2U2k); plate1->SetFillColor(5); plate1->SetLineColor(5); - mechLaddVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(klay3/2)),z,new TGeoRotation("plate1",0,0,0))); + mechStavVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(klay3/2)),z,new TGeoRotation("plate1",0,0,0))); //C Fleece bottom plate - TGeoBBox *box6 = new TGeoBBox(2*kWidth,(klay2)/2,zlad); + TGeoBBox *box6 = new TGeoBBox(2*kWidth,(klay2)/2,zsta); TGeoVolume *plate6 = new TGeoVolume("CarbonFleeceBottom",box6,medCarbonFleece); plate6->SetFillColor(2); plate6->SetLineColor(2); - mechLaddVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+(klay2/2)),z,new TGeoRotation("plate6",0,0,0))); + mechStavVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+(klay2/2)),z,new TGeoRotation("plate6",0,0,0))); } if (fBuildLevel < 2) { //Glue klayers and kapton - TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, (klay4)/2, zlad); + TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, (klay4)/2, zsta); TGeoVolume *volGlue=new TGeoVolume("Glue", glue, medGlue); volGlue->SetLineColor(5); volGlue->SetFillColor(5); - // mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4/2)), z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4)/2)+0.00005, z, new TGeoRotation("",0, 0, 0))); + // mechStavVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4/2)), z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4)/2)+0.00005, z, new TGeoRotation("",0, 0, 0))); } if (fBuildLevel < 1) { //Flex Cable or Bus - TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, klay5/2, zlad);//klay5/2 + TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, klay5/2, zsta);//klay5/2 TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable); volCable->SetLineColor(28); volCable->SetFillColor(28); - // mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.0002, z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.01185, z, new TGeoRotation("",0, 0, 0))); + // mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.0002, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.01185, z, new TGeoRotation("",0, 0, 0))); } // Done, return the stave structe - return mechLaddVol; + return mechStavVol; } // model3 //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, - const Double_t zlad, +TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xsta, + const Double_t zsta, const TGeoManager *mgr){ // // Create the mechanical stave structure for Model 3 of TDR // // Input: -// xlad : X length -// zlad : Z length +// xsta : X length +// zsta : Z length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1428,8 +1564,8 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, // Local parameters Double_t kConeOutRadius = 0.15/2; - Double_t kStaveLength = zlad*2; - Double_t kStaveWidth = xlad*2; + Double_t kStaveLength = zsta*2; + Double_t kStaveWidth = xsta*2; Double_t w = kStaveWidth/4;//1/2 of W Double_t staveHeight = 0.3; Double_t h = staveHeight/2; @@ -1447,9 +1583,9 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, Double_t ang1 = 0*TMath::DegToRad(); Double_t ang2 = 0*TMath::DegToRad(); Double_t ang3 = 0*TMath::DegToRad(); - Int_t modules = 4; + Int_t chips = 4; Double_t headWidth=0.25; - Double_t smcLength=kStaveLength/modules-2*headWidth;//6.25; + Double_t smcLength=kStaveLength/chips-2*headWidth;//6.25; Double_t smcWidth=kStaveWidth; Double_t smcSide1Thick=0.03; Double_t vaporThick=0.032; @@ -1462,7 +1598,7 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, char volname[30]; - snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber); + snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSStavePattern(), fLayerNumber); // detailed structure ++++++++++++++ Double_t z=0, y=0-0.007, x=0; @@ -1470,10 +1606,10 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, // Polimide micro channels numbers Double_t yMC = y-h+0.01; Int_t nb = (Int_t)(kStaveWidth/0.1)+1; - Double_t xladMC = (nb*0.1-0.08)/2; + Double_t xstaMC = (nb*0.1-0.08)/2; - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; if (fBuildLevel < 5) { // world (trapezoid) TGeoXtru *mechStruct = new TGeoXtru(2); //z sections @@ -1482,10 +1618,10 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, mechStruct->DefinePolygon(5,xv,yv); mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.); mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.); - mechLaddVol = new TGeoVolume(volname, mechStruct, medAir); - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); + mechStavVol = new TGeoVolume(volname, mechStruct, medAir); + mechStavVol->SetLineColor(12); + mechStavVol->SetFillColor(12); + mechStavVol->SetVisibility(kTRUE); // Silicon micro channels numbers @@ -1494,79 +1630,79 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, volTM0a->SetLineColor(35); volTM0a->SetFillColor(35); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0a, 0, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3))); - mechLaddVol->AddNode(volTM0a, 1, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0a, 0, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3))); + mechStavVol->AddNode(volTM0a, 1, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3))); } TGeoBBox *tM0c=new TGeoBBox(0.3/2, 0.003/2,smcLength/2); TGeoVolume *volTM0c=new TGeoVolume("microChanTop2", tM0c, medKapton); volTM0c->SetLineColor(35); volTM0c->SetFillColor(35); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0c, 0, new TGeoCombiTrans(x+(smcWidth/2)-(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3))); - mechLaddVol->AddNode(volTM0c, 1, new TGeoCombiTrans(x-(smcWidth/2)+(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0c, 0, new TGeoCombiTrans(x+(smcWidth/2)-(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3))); + mechStavVol->AddNode(volTM0c, 1, new TGeoCombiTrans(x-(smcWidth/2)+(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0c1=new TGeoBBox(0.2225/2, 0.003/2,smcLength/2); TGeoVolume *volTM0c1=new TGeoVolume("microChanBot1", tM0c1, medKapton); volTM0c1->SetLineColor(6); volTM0c1->SetFillColor(6); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0c1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0c1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0c1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0c1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0c2=new TGeoBBox(0.072/2, 0.003/2,smcLength/2); TGeoVolume *volTM0c2=new TGeoVolume("microChanBot2", tM0c2, medKapton); volTM0c2->SetLineColor(35); volTM0c2->SetFillColor(35); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0c2, 0, new TGeoCombiTrans(x+smcWidth/2-(0.072/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0c2, 0, new TGeoCombiTrans(x+smcWidth/2-(0.072/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0c2r=new TGeoBBox(0.068/2, 0.003/2,smcLength/2); TGeoVolume *volTM0c2r=new TGeoVolume("microChanBot3", tM0c2r, medKapton); volTM0c2r->SetLineColor(35); volTM0c2r->SetFillColor(35); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0c2r, 0, new TGeoCombiTrans(x-smcWidth/2+(0.068/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0c2r, 0, new TGeoCombiTrans(x-smcWidth/2+(0.068/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0d=new TGeoBBox(smcSide1Thick/2, 0.035/2,smcLength/2); TGeoVolume *volTM0d=new TGeoVolume("microChanSide1", tM0d, medKapton); volTM0d->SetLineColor(12); volTM0d->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0d, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0d, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0d, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0d, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0d1=new TGeoBBox(smcSide2Thick/2, 0.035/2,smcLength/2); TGeoVolume *volTM0d1=new TGeoVolume("microChanSide2", tM0d1, medKapton); volTM0d1->SetLineColor(12); volTM0d1->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0d1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0d1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0d1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0d1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0d2=new TGeoBBox(smcSide3Thick/2, (hh+0.003)/2, smcLength/2); TGeoVolume *volTM0d2=new TGeoVolume("microChanSide3", tM0d2, medKapton); volTM0d2->SetLineColor(12); volTM0d2->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0d2, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0d2, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0d2r=new TGeoBBox(smcSide4Thick/2, (hh+0.003)/2, smcLength/2); TGeoVolume *volTM0d2r=new TGeoVolume("microChanSide4", tM0d2r, medKapton); volTM0d2r->SetLineColor(12); volTM0d2r->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0d2r, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0d2r, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0e=new TGeoBBox(smcSide5Thick/2, hh/2,smcLength/2); TGeoVolume *volTM0e=new TGeoVolume("microChanSide5", tM0e, medKapton); volTM0e->SetLineColor(12); volTM0e->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { + for(Int_t mo=1; mo<=chips; mo++) { for (Int_t ie=0;ie<11;ie++) { - mechLaddVol->AddNode(volTM0e, 0, new TGeoCombiTrans(x-(ie*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace-(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0e, 1, new TGeoCombiTrans(x+(ie*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+smcSpace+(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0e, 0, new TGeoCombiTrans(x-(ie*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace-(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0e, 1, new TGeoCombiTrans(x+(ie*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+smcSpace+(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } } @@ -1577,9 +1713,9 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, Double_t smcCloseWallliquid=smcWidth/2-smcSide1Thick-liquidThick-smcSide2Thick-smcSide4Thick-12*smcSpace-11*smcSide5Thick; volTM0f->SetLineColor(12); volTM0f->SetFillColor(12); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0f, 0, new TGeoCombiTrans(x+smcCloseWallvapor-(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0f, 1, new TGeoCombiTrans(x-smcCloseWallliquid+(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0f, 0, new TGeoCombiTrans(x+smcCloseWallvapor-(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0f, 1, new TGeoCombiTrans(x-smcCloseWallliquid+(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } //Head(back) microchannel @@ -1587,59 +1723,59 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, TGeoVolume *volTM0hb=new TGeoVolume("microChanHeadBackBottom1", tM0hb, medKapton); volTM0hb->SetLineColor(4); volTM0hb->SetFillColor(4); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0hb, 0, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0hb, 1, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0hb, 0, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0hb, 1, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0h1=new TGeoBBox(smcWidth/2, 0.013/2, 0.05/2); TGeoVolume *volTM0h1=new TGeoVolume("microChanHeadBackBottom2", tM0h1, medKapton); volTM0h1->SetLineColor(5); volTM0h1->SetFillColor(5); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0h1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-headWidth+(0.05/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0h1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-headWidth+(0.05/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0h2=new TGeoBBox(smcWidth/2, 0.003/2, 0.18/2); TGeoVolume *volTM0h2=new TGeoVolume("microChanHeadBackBottom7", tM0h2, medKapton); volTM0h2->SetLineColor(6); volTM0h2->SetFillColor(6); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0h2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-0.02-(0.18/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0h2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-0.02-(0.18/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0h3=new TGeoBBox(smcWidth/2, 0.013/2, 0.02/2); TGeoVolume *volTM0h3=new TGeoVolume("microChanHeadBackBottom3", tM0h3, medKapton); volTM0h3->SetLineColor(5); volTM0h3->SetFillColor(5); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0h3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0h3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0b1=new TGeoBBox(smcWidth/2, 0.013/2, 0.03/2); TGeoVolume *volTM0b1=new TGeoVolume("microChanHeadBackBottom4", tM0b1, medKapton); volTM0b1->SetLineColor(5); volTM0b1->SetFillColor(5); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0b1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+headWidth-(0.03/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0b1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+headWidth-(0.03/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0b2=new TGeoBBox(smcWidth/2, 0.003/2, 0.2/2); TGeoVolume *volTM0b2=new TGeoVolume("microChanHeadBackBottom5", tM0b2, medKapton); volTM0b2->SetLineColor(6); volTM0b2->SetFillColor(6); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0b2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+0.02+(0.2/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0b2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+0.02+(0.2/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0b3=new TGeoBBox(smcWidth/2, 0.013/2, 0.02/2); TGeoVolume *volTM0b3=new TGeoVolume("microChanHeadBackBottom6", tM0b3, medKapton); volTM0b3->SetLineColor(5); volTM0b3->SetFillColor(5); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0b3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0b3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } - TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zlad); + TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zsta); TGeoVolume *volTM0b=new TGeoVolume("microChanWalls", tM0b, medKapton); volTM0b->SetLineColor(35); volTM0b->SetFillColor(35); for (Int_t ib=0;ibAddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0))); + //mechStavVol->AddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xstaMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0))); } } @@ -1652,15 +1788,15 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, TGeoVolume *volTM0dv=new TGeoVolume("microChanVapor", tM0dv, medWater); volTM0dv->SetLineColor(2); volTM0dv->SetFillColor(2); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0dv, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0dv, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } TGeoBBox *tM0dl=new TGeoBBox(liquidThick/2, 0.035/2,smcLength/2); TGeoVolume *volTM0dl=new TGeoVolume("microChanLiquid", tM0dl, medWater); volTM0dl->SetLineColor(3); volTM0dl->SetFillColor(3); - for(Int_t mo=1; mo<=modules; mo++) { - mechLaddVol->AddNode(volTM0dl, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + for(Int_t mo=1; mo<=chips; mo++) { + mechStavVol->AddNode(volTM0dl, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } // small cooling fluid now using water wait for freeon value TGeoBBox *tM0dlq=new TGeoBBox(smcSpace/2, hh/2,smcLength/2); @@ -1671,10 +1807,10 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, TGeoVolume *volTM0dvp=new TGeoVolume("microChanVapor", tM0dvp, medWater); volTM0dvp->SetLineColor(2); volTM0dvp->SetFillColor(2); - for(Int_t mo=1; mo<=modules; mo++) { + for(Int_t mo=1; mo<=chips; mo++) { for (Int_t is=0;is<12;is++) { - mechLaddVol->AddNode(volTM0dlq, 0, new TGeoCombiTrans(x+(is*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(vaporThick)+(smcSide2Thick)+(smcSide3Thick)+smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); - mechLaddVol->AddNode(volTM0dvp, 1, new TGeoCombiTrans(x-(is*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0dlq, 0, new TGeoCombiTrans(x+(is*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(vaporThick)+(smcSide2Thick)+(smcSide3Thick)+smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); + mechStavVol->AddNode(volTM0dvp, 1, new TGeoCombiTrans(x-(is*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0))); } } @@ -1693,16 +1829,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, volT1->SetLineColor(12); volT1->SetFillColor(12); for(int i=0;iAddNode(volT1,4*i+0, + mechStavVol->AddNode(volT1,4*i+0, new TGeoCombiTrans(x+w,y-h+0.04+filHeight/2,z-kStaveLength/2+(4*l*i)+s1/2, new TGeoRotation("volT1",-90,alpha,0))); - mechLaddVol->AddNode(volT1,4*i+1, + mechStavVol->AddNode(volT1,4*i+1, new TGeoCombiTrans(x-w,y-h+0.04+filHeight/2,z-kStaveLength/2+(4*l*i)+s1/2, new TGeoRotation("volT1",90,alpha,0))); - mechLaddVol->AddNode(volT1,4*i+2, + mechStavVol->AddNode(volT1,4*i+2, new TGeoCombiTrans(x+w,y-h+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, new TGeoRotation("volT1",-90,-alpha,0))); - mechLaddVol->AddNode(volT1,4*i+3, + mechStavVol->AddNode(volT1,4*i+3, new TGeoCombiTrans(x-w,y-h+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, new TGeoRotation("volT1",-90,+alpha,0))); } @@ -1714,16 +1850,16 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, volT2->SetLineColor(12); volT2->SetFillColor(12); for(int i=0;iAddNode(volT2,4*i+0, + mechStavVol->AddNode(volT2,4*i+0, new TGeoCombiTrans(x+w,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*l)+s1/2, new TGeoRotation("volT2",90,90-alpha,90-beta))); - mechLaddVol->AddNode(volT2,4*i+1, + mechStavVol->AddNode(volT2,4*i+1, new TGeoCombiTrans(x-w,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*l)+s1/2, new TGeoRotation("volT2",90,-90+alpha,-90+beta))); - mechLaddVol->AddNode(volT2,4*i+2, + mechStavVol->AddNode(volT2,4*i+2, new TGeoCombiTrans(x+w,y+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, new TGeoRotation("volT2",90,-90+alpha,90-beta))); - mechLaddVol->AddNode(volT2,4*i+3, + mechStavVol->AddNode(volT2,4*i+3, new TGeoCombiTrans(x-w,y+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, new TGeoRotation("volT2",90,90-alpha,-90+beta))); } @@ -1732,50 +1868,48 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelInnerB3(const Double_t xlad, if (fBuildLevel < 2) { // Glue Filament and Silicon MicroChannel - TGeoBBox *tM0=new TGeoBBox(xladMC/5, klay4/2, zlad); + TGeoBBox *tM0=new TGeoBBox(xstaMC/5, klay4/2, zsta); TGeoVolume *volTM0=new TGeoVolume("glueFM", tM0,medGlue ); volTM0->SetLineColor(5); volTM0->SetFillColor(5); - mechLaddVol->AddNode(volTM0, 0, new TGeoCombiTrans(x-xlad/2-0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volTM0, 1, new TGeoCombiTrans(x+xlad/2+0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volTM0, 0, new TGeoCombiTrans(x-xsta/2-0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volTM0, 1, new TGeoCombiTrans(x+xsta/2+0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0))); // Glue microchannel and sensor - TGeoBBox *glueM = new TGeoBBox(xladMC/5, klay4/2, zlad); + TGeoBBox *glueM = new TGeoBBox(xstaMC/5, klay4/2, zsta); TGeoVolume *volGlueM=new TGeoVolume("glueMS", glueM, medGlue); volGlueM->SetLineColor(5); volGlueM->SetFillColor(5); - mechLaddVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x-xlad/2-0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0))); - mechLaddVol->AddNode(volGlueM, 1, new TGeoCombiTrans(x+xlad/2+0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x-xsta/2-0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlueM, 1, new TGeoCombiTrans(x+xsta/2+0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0))); // Glue sensor and kapton - TGeoBBox *glue = new TGeoBBox(xlad, klay4/2, zlad); + TGeoBBox *glue = new TGeoBBox(xsta, klay4/2, zsta); TGeoVolume *volGlue=new TGeoVolume("glueSensorBus", glue, medGlue); volGlue->SetLineColor(5); volGlue->SetFillColor(5); - mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4/2, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4/2, z, new TGeoRotation("",0, 0, 0))); } if (fBuildLevel < 1) { - TGeoBBox *kapCable = new TGeoBBox(xlad, klay5/2, zlad); + TGeoBBox *kapCable = new TGeoBBox(xsta, klay5/2, zsta); TGeoVolume *volCable=new TGeoVolume("Flexcable", kapCable, medFlexCable); volCable->SetLineColor(28); volCable->SetFillColor(28); - mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4-klay5/2, z, new TGeoRotation("",0, 0, 0))); + mechStavVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4-klay5/2, z, new TGeoRotation("",0, 0, 0))); } // Done, return the stave structur - return mechLaddVol; + return mechStavVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveOuterB(const Double_t xlad, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateStaveOuterB(const TGeoManager *mgr){ // -// Create the module stave for the Outer Barrel +// Create the chip stave for the Outer Barrel // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1783,36 +1917,35 @@ TGeoVolume* AliITSUv1Layer::CreateStaveOuterB(const Double_t xlad, // Return: // // Created: 20 Dec 2013 Mario Sitta +// Updated: 12 Mar 2014 Mario Sitta // - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; switch (fStaveModel) { case AliITSUv1::kOBModelDummy: - mechLaddVol = CreateStaveModelOuterBDummy(xlad,mgr); + mechStavVol = CreateStaveModelOuterBDummy(mgr); break; case AliITSUv1::kOBModel0: - mechLaddVol = CreateStaveModelOuterB0(xlad,mgr); + mechStavVol = CreateStaveModelOuterB0(mgr); break; case AliITSUv1::kOBModel1: - mechLaddVol = CreateStaveModelOuterB1(xlad,mgr); + mechStavVol = CreateStaveModelOuterB1(mgr); break; default: AliFatal(Form("Unknown stave model %d",fStaveModel)); break; } - return mechLaddVol; + return mechStavVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterBDummy(const Double_t , - const TGeoManager *) const { +TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterBDummy(const TGeoManager *) const { // // Create dummy stave // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1828,15 +1961,13 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterBDummy(const Double_t , } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB0(const Double_t , - const TGeoManager *) const { +TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB0(const TGeoManager *mgr){ // // Creation of the mechanical stave structure for the Outer Barrel as in v0 -// is done directly in CreateLadder, so this method does nothing -// (doing it there is simpler, since all needed dimensions are known) +// (we fake the module and halfstave volumes to have always +// the same formal geometry hierarchy) // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1844,20 +1975,69 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB0(const Double_t , // Return: // // Created: 20 Dec 2013 Mario Sitta +// Updated: 12 Mar 2014 Mario Sitta // + // Local variables + Double_t xmod, ymod, zmod; + Double_t xlen, ylen, zlen; + Double_t ypos, zpos; + char volname[30]; + + // First create all needed shapes + + // The chip + xlen = fgkOBHalfStaveWidth; + ylen = 0.5*fStaveThick; // TO BE CHECKED + zlen = fgkOBModuleZLength/2; + + TGeoVolume *chipVol = CreateChipInnerB(xlen, ylen, zlen); + + xmod = ((TGeoBBox*)chipVol->GetShape())->GetDX(); + ymod = ((TGeoBBox*)chipVol->GetShape())->GetDY(); + zmod = ((TGeoBBox*)chipVol->GetShape())->GetDZ(); + + TGeoBBox *module = new TGeoBBox(xmod, ymod, zmod); + + zlen = fgkOBModuleZLength*fNModules; + TGeoBBox *hstave = new TGeoBBox(xlen, ylen, zlen/2); + + + // We have all shapes: now create the real volumes + + TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSModulePattern(), fLayerNumber); + TGeoVolume *modVol = new TGeoVolume(volname, module, medAir); + modVol->SetVisibility(kTRUE); + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSHalfStavePattern(), fLayerNumber); + TGeoVolume *hstaveVol = new TGeoVolume(volname, hstave, medAir); + + + // Finally build it up + modVol->AddNode(chipVol, 0); + fHierarchy[kChip]=1; + + for (Int_t j=0; jGetDZ() + j*2*zmod + zmod; + hstaveVol->AddNode(modVol, j, new TGeoTranslation(0, ypos, zpos)); + fHierarchy[kModule]++; + } + + // Done, return the stave structure - return 0; + return hstaveVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB1(const Double_t xlad, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB1(const TGeoManager *mgr){ // -// Create the mechanical stave structure for the Outer Barrel as in TDR +// Create the mechanical half stave structure +// for the Outer Barrel as in TDR // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -1866,251 +2046,303 @@ TGeoVolume* AliITSUv1Layer::CreateStaveModelOuterB1(const Double_t xlad, // // Created: 20 Nov 2013 Anastasia Barbano // Updated: 16 Jan 2014 Mario Sitta +// Updated: 24 Feb 2014 Mario Sitta // - // Materials defined in AliITSUv0 + + // Local parameters + Double_t yFlex1 = fgkOBFlexCableAlThick; + Double_t yFlex2 = fgkOBFlexCableKapThick; + Double_t flexOverlap = 5; // to be checked + Double_t xHalfSt = fgkOBHalfStaveWidth/2; + Double_t rCoolMin = fgkOBCoolTubeInnerD/2; + Double_t rCoolMax = rCoolMin + fgkOBCoolTubeThick; + Double_t kLay1 = 0.004; // to be checked + Double_t kLay2 = fgkOBGraphiteFoilThick; + + Double_t xlen, ylen; + Double_t ymod, zmod; + Double_t xtru[12], ytru[12]; + Double_t xpos, ypos, ypos1, zpos/*, zpos5cm*/; + Double_t zlen; + char volname[30]; + + + zlen = (fNModules*fgkOBModuleZLength + (fNModules-1)*fgkOBModuleGap)/2; + + + // First create all needed shapes + + TGeoVolume *moduleVol = CreateModuleOuterB(); + moduleVol->SetVisibility(kTRUE); + ymod = ((TGeoBBox*)(moduleVol->GetShape()))->GetDY(); + zmod = ((TGeoBBox*)(moduleVol->GetShape()))->GetDZ(); + + TGeoBBox *busAl = new TGeoBBox("BusAl", xHalfSt, fgkOBBusCableAlThick/2, + zlen); + TGeoBBox *busKap = new TGeoBBox("BusKap", xHalfSt, fgkOBBusCableKapThick/2, + zlen); + + TGeoBBox *coldPlate = new TGeoBBox("ColdPlate", fgkOBHalfStaveWidth/2, + fgkOBColdPlateThick/2, zlen); + + TGeoTube *coolTube = new TGeoTube("CoolingTube", rCoolMin, rCoolMax, zlen); + TGeoTube *coolWater = new TGeoTube("CoolingWater", 0., rCoolMin, zlen); + + xlen = xHalfSt - fgkOBCoolTubeXDist/2 - coolTube->GetRmax(); + TGeoBBox *graphlat = new TGeoBBox("GraphLateral", xlen/2, kLay2/2, zlen); + + xlen = fgkOBCoolTubeXDist/2 - coolTube->GetRmax(); + TGeoBBox *graphmid = new TGeoBBox("GraphMiddle", xlen, kLay2/2, zlen); + + ylen = coolTube->GetRmax() - kLay2; + TGeoBBox *graphvert = new TGeoBBox("GraphVertical", kLay2/2, ylen/2, zlen); + + TGeoTubeSeg *graphtub = new TGeoTubeSeg("GraphTube", rCoolMax, + rCoolMax+kLay2, zlen, + 180., 360.); + + xlen = xHalfSt - fgkOBCoolTubeXDist/2 - coolTube->GetRmax() - kLay2; + TGeoBBox *fleeclat = new TGeoBBox("FleecLateral", xlen/2, kLay1/2, zlen); + + xlen = fgkOBCoolTubeXDist/2 - coolTube->GetRmax() - kLay2; + TGeoBBox *fleecmid = new TGeoBBox("FleecMiddle", xlen, kLay1/2, zlen); + + ylen = coolTube->GetRmax() - kLay2 - kLay1; + TGeoBBox *fleecvert = new TGeoBBox("FleecVertical", kLay1/2, ylen/2, zlen); + + TGeoTubeSeg *fleectub = new TGeoTubeSeg("FleecTube", rCoolMax+kLay2, + rCoolMax+kLay1+kLay2, + zlen, 180., 360.); + + TGeoBBox *flex1_5cm = new TGeoBBox("Flex1MV_5cm",xHalfSt,yFlex1/2,flexOverlap/2); + TGeoBBox *flex2_5cm = new TGeoBBox("Flex2MV_5cm",xHalfSt,yFlex2/2,flexOverlap/2); + + // The half stave container (an XTru to avoid overlaps between neightbours) + xtru[0] = xHalfSt; + ytru[0] = 0; + xtru[1] = xtru[0]; + ytru[1] = -2*(ymod + busAl->GetDY() + busKap->GetDY() + coldPlate->GetDY() + + graphlat->GetDY() + fleeclat->GetDY()); + xtru[2] = fgkOBCoolTubeXDist/2 + fleectub->GetRmax(); + ytru[2] = ytru[1]; + xtru[3] = xtru[2]; + ytru[3] = ytru[2] - (coolTube->GetRmax() + fleectub->GetRmax()); + xtru[4] = fgkOBCoolTubeXDist/2 - fleectub->GetRmax(); + ytru[4] = ytru[3]; + xtru[5] = xtru[4]; + ytru[5] = ytru[2]; + for (Int_t i = 0; i<6; i++) { + xtru[6+i] = -xtru[5-i]; + ytru[6+i] = ytru[5-i]; + } + TGeoXtru *halfStave = new TGeoXtru(2); + halfStave->DefinePolygon(12, xtru, ytru); + halfStave->DefineSection(0,-fZLength/2); + halfStave->DefineSection(1, fZLength/2); + + + // We have all shapes: now create the real volumes + TGeoMedium *medAluminum = mgr->GetMedium("ITS_ALUMINUM$"); TGeoMedium *medCarbon = mgr->GetMedium("ITS_CARBON$"); TGeoMedium *medKapton = mgr->GetMedium("ITS_KAPTON(POLYCH2)$"); - TGeoMedium *medGlue = mgr->GetMedium("ITS_GLUE$"); TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$"); TGeoMedium *medCarbonFleece = mgr->GetMedium("ITS_CarbonFleece$"); TGeoMedium *medFGS003 = mgr->GetMedium("ITS_FGS003$"); //amec thermasol TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); - // Local parameters - Double_t modGap = fgkOBModuleGap; - Double_t yFlex1 = fgkOBFlexCable1Thick; - Double_t yFlex2 = fgkOBFlexCable2Thick; - Double_t yBus1 = fgkOBBusCable1Thick; - Double_t yBus2 = fgkOBBusCable2Thick; - Double_t xModPlate = fgkOBHalfStaveWidth; - Double_t yModPlate = fgkOBCarbonPlateThick; - Double_t xCPlate = fgkOBHalfStaveWidth; - Double_t yCPlate = fgkOBColdPlateThick; - Double_t yGlue = fgkOBGlueThick; - Double_t flexOverlap = 5; - Double_t deltaY = 0.176; - Double_t xOverlap = 0.23; //overlapping of the halfStaves to cover the dead zone of sensors - Double_t zMod = fgkOBModuleZLength; - Double_t xHalfSt = fgkOBHalfStaveWidth/2; - Double_t xPos = xOverlap/2 - xHalfSt; - Double_t xlen = xlad; - Double_t rMin = 0.267/2; - Double_t rMax = rMin + 0.0065; - Double_t kLay1 = 0.004; //carbon fleece - Double_t kLay2 = 0.003; //carbon paper - Double_t yPos = kLay1+kLay2; - Double_t ylen,zact; - Double_t zpos, zpos5cm; - Double_t ymod; - Double_t zbus; - Double_t zlen; + TGeoVolume *busAlVol = new TGeoVolume("BusAlVol", busAl , medAluminum); + busAlVol->SetLineColor(kCyan); + busAlVol->SetFillColor(busAlVol->GetLineColor()); + busAlVol->SetFillStyle(4000); // 0% transparent + TGeoVolume *busKapVol = new TGeoVolume("BusKapVol", busKap, medKapton); + busKapVol->SetLineColor(kBlue); + busKapVol->SetFillColor(busKapVol->GetLineColor()); + busKapVol->SetFillStyle(4000); // 0% transparent - if (fIsTurbo) xlen = 0.5*fLadderWidth; - //ylen = 0.5*fLadderThick; - ymod = 0.005/2;//0.5*fSensorThick; - ylen = 0.5*(2*kLay1+2*kLay2+2*rMax+yCPlate+yGlue+ yModPlate + ymod + 2*yFlex1 + 2*yFlex2 + yBus1 + yBus2 + deltaY); - zact = fNModules*zMod; //active area - zbus = zact + (fNModules-1)*modGap; - zlen = zbus/2; + TGeoVolume *coldPlateVol = new TGeoVolume("ColdPlateVol", + coldPlate, medCarbon); + coldPlateVol->SetLineColor(kYellow-3); + coldPlateVol->SetFillColor(coldPlateVol->GetLineColor()); + coldPlateVol->SetFillStyle(4000); // 0% transparent + TGeoVolume *coolTubeVol = new TGeoVolume("CoolingTubeVol", + coolTube, medKapton); + coolTubeVol->SetLineColor(kGray); + coolTubeVol->SetFillColor(coolTubeVol->GetLineColor()); + coolTubeVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *coolWaterVol = new TGeoVolume("CoolingWaterVol", + coolWater,medWater); + coolWaterVol->SetLineColor(kBlue); + coolWaterVol->SetFillColor(coolWaterVol->GetLineColor()); + coolWaterVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *graphlatVol = new TGeoVolume("GraphiteFoilLateral", + graphlat, medFGS003); + graphlatVol->SetLineColor(kGreen); + graphlatVol->SetFillColor(graphlatVol->GetLineColor()); + graphlatVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *graphmidVol = new TGeoVolume("GraphiteFoilMiddle", + graphmid, medFGS003); + graphmidVol->SetLineColor(kGreen); + graphmidVol->SetFillColor(graphmidVol->GetLineColor()); + graphmidVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *graphvertVol = new TGeoVolume("GraphiteFoilVertical", + graphvert, medFGS003); + graphvertVol->SetLineColor(kGreen); + graphvertVol->SetFillColor(graphvertVol->GetLineColor()); + graphvertVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *graphtubVol = new TGeoVolume("GraphiteFoilPipeCover", + graphtub, medFGS003); + graphtubVol->SetLineColor(kGreen); + graphtubVol->SetFillColor(graphtubVol->GetLineColor()); + graphtubVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *fleeclatVol = new TGeoVolume("CarbonFleeceLateral", + fleeclat, medCarbonFleece); + fleeclatVol->SetLineColor(kViolet); + fleeclatVol->SetFillColor(fleeclatVol->GetLineColor()); + fleeclatVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *fleecmidVol = new TGeoVolume("CarbonFleeceMiddle", + fleecmid, medCarbonFleece); + fleecmidVol->SetLineColor(kViolet); + fleecmidVol->SetFillColor(fleecmidVol->GetLineColor()); + fleecmidVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *fleecvertVol = new TGeoVolume("CarbonFleeceVertical", + fleecvert, medCarbonFleece); + fleecvertVol->SetLineColor(kViolet); + fleecvertVol->SetFillColor(fleecvertVol->GetLineColor()); + fleecvertVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *fleectubVol = new TGeoVolume("CarbonFleecePipeCover", + fleectub, medCarbonFleece); + fleectubVol->SetLineColor(kViolet); + fleectubVol->SetFillColor(fleectubVol->GetLineColor()); + fleectubVol->SetFillStyle(4000); // 0% transparent + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSHalfStavePattern(), fLayerNumber); + TGeoVolume *halfStaveVol = new TGeoVolume(volname, halfStave, medAir); +// halfStaveVol->SetLineColor(12); +// halfStaveVol->SetFillColor(12); +// halfStaveVol->SetVisibility(kTRUE); - // First create all needed shapes - TGeoTube *coolTube = new TGeoTube("CoolingTube",rMin,rMax,zbus/2); - TGeoTube *coolTubeW = new TGeoTube("CoolingTubeWater",0,rMin,zbus/2); - TGeoBBox *coldPlate = new TGeoBBox("ColdPlate",xCPlate/2,yCPlate/2,zbus/2); - TGeoBBox *glue = new TGeoBBox("Glue",xCPlate/2,yGlue/2,zbus/2); - TGeoBBox *modPlate = new TGeoBBox("CarbonPlate",xModPlate/2,yModPlate/2,zbus/2); - TGeoBBox *flex1 = new TGeoBBox("Flex1MV",xHalfSt,yFlex1/2,zMod/2); - TGeoBBox *flex2 = new TGeoBBox("Flex2MV",xHalfSt,yFlex2/2,zMod/2); - TGeoBBox *flex1_5cm = new TGeoBBox("Flex1MV_5cm",xHalfSt,yFlex1/2,flexOverlap/2); - TGeoBBox *flex2_5cm = new TGeoBBox("Flex2MV_5cm",xHalfSt,yFlex2/2,flexOverlap/2); - TGeoBBox *bus1 = new TGeoBBox("Bus1HV",xHalfSt,yBus1/2,zbus/2); - TGeoBBox *bus2 = new TGeoBBox("Bus2HV",xHalfSt,yBus2/2,zbus/2); - TGeoTubeSeg *cone1 = new TGeoTubeSeg(rMax +kLay2,rMax+kLay1+kLay2,zlen,180.,360.); //Carbon Fleece - TGeoTubeSeg *cone2 = new TGeoTubeSeg(rMax ,rMax+kLay2,zlen,180.,360.); //Graphite paper - TGeoBBox *box11 = new TGeoBBox((0.95-kLay2-rMax)/2,kLay1/2,zlen); - TGeoBBox *box12 = new TGeoBBox((1.11-2*kLay2-2*rMax)/2,kLay1/2,zlen); - TGeoBBox *box13 = new TGeoBBox(kLay1/2,(rMax-(kLay1+kLay2))/2,zlen); - TGeoBBox *box21 = new TGeoBBox((0.95-rMax)/2,kLay2/2,zlen); - TGeoBBox *box22 = new TGeoBBox((1.11-2*rMax)/2,kLay2/2,zlen); - TGeoBBox *box23 = new TGeoBBox(kLay2/2,(rMax-kLay2)/2,zlen); - TGeoBBox *mechStruct = new TGeoBBox("mechanicalStructure",xlen, ylen, 0.5*fZLength); - - - TGeoVolume *modVol = CreateModuleOuterB(xHalfSt, ymod, zMod); - - TGeoVolume *coolTubeVol = new TGeoVolume("CoolingTubeVol",coolTube,medKapton); - TGeoVolume *coolTubeWVol = new TGeoVolume("CoolingTubeWaterVol",coolTubeW,medWater); - TGeoVolume *coldPlateVol = new TGeoVolume("ColdPlateVol",coldPlate,medCarbon); - TGeoVolume *glueVol = new TGeoVolume("GlueVol",glue,medGlue); - TGeoVolume *modPlateVol = new TGeoVolume("CarbonPlateVol",modPlate,medCarbon); - TGeoVolume *flex1Vol = new TGeoVolume("Flex1Vol",flex1,medAluminum); - TGeoVolume *flex2Vol = new TGeoVolume("Flex2Vol",flex2,medKapton); TGeoVolume *flex1_5cmVol = new TGeoVolume("Flex1Vol5cm",flex1_5cm,medAluminum); TGeoVolume *flex2_5cmVol = new TGeoVolume("Flex2Vol5cm",flex2_5cm,medKapton); - TGeoVolume *bus1Vol = new TGeoVolume("Bus1Vol",bus1,medAluminum); - TGeoVolume *bus2Vol = new TGeoVolume("Bus2Vol",bus2,medKapton); - TGeoVolume *cone1Vol = new TGeoVolume("CarbonFleecePipeCover",cone1,medCarbonFleece); - TGeoVolume *cone2Vol = new TGeoVolume("GraphitePaperPipeCover",cone2,medFGS003); - TGeoVolume *plate11Vol = new TGeoVolume("CarbonFleeceLR1",box11,medCarbonFleece); - TGeoVolume *plate12Vol = new TGeoVolume("CarbonFleeceMiddle1",box12,medCarbonFleece); - TGeoVolume *plate13Vol = new TGeoVolume("CarbonFleeceVertical1",box13,medCarbonFleece); - TGeoVolume *plate21Vol = new TGeoVolume("CarbonFleeceLR2",box21,medFGS003); - TGeoVolume *plate22Vol = new TGeoVolume("CarbonFleeceMiddle2",box22,medFGS003); - TGeoVolume *plate23Vol = new TGeoVolume("CarbonFleeceVertical2",box23,medFGS003); - TGeoVolume *mechLaddVol = new TGeoVolume("mechLadderVolume",mechStruct,medAir); - - mechLaddVol->SetLineColor(12); - mechLaddVol->SetFillColor(12); - mechLaddVol->SetVisibility(kTRUE); - modVol->SetVisibility(kTRUE); + flex1_5cmVol->SetLineColor(kRed); flex2_5cmVol->SetLineColor(kGreen); - modPlateVol->SetLineColor(kMagenta-8); - coolTubeVol->SetLineColor(kGray); - coolTubeWVol->SetLineColor(kBlue); - coldPlateVol->SetLineColor(kYellow-3); - glueVol->SetLineColor(kBlack); - flex1Vol->SetLineColor(kRed); - flex2Vol->SetLineColor(kGreen); - bus1Vol->SetLineColor(kCyan); - bus2Vol->SetLineColor(kBlue); - cone1Vol->SetFillColor(kViolet); - plate11Vol->SetFillColor(kViolet); - plate12Vol->SetLineColor(kViolet); - plate13Vol->SetLineColor(kViolet); - cone2Vol->SetLineColor(kGreen); - plate22Vol->SetFillColor(kGreen); - plate21Vol->SetLineColor(kGreen); - plate23Vol->SetLineColor(kGreen); - - - //Carbon Fleece - - mechLaddVol->AddNode(plate11Vol,1,new TGeoTranslation(xPos -(1.11/2+rMax+box11->GetDX()+kLay2),-ylen + yPos +2*rMax-kLay2-kLay1/2,0)); - mechLaddVol->AddNode(plate11Vol,2,new TGeoTranslation(xPos +(1.11/2+rMax+box11->GetDX()+kLay2),-ylen + yPos +2*rMax-kLay2-kLay1/2,0)); - mechLaddVol->AddNode(plate11Vol,3,new TGeoTranslation(-xPos -(1.11/2+rMax+box11->GetDX()+kLay2),-ylen + yPos +2*rMax-kLay2-kLay1/2 +deltaY,0)); - mechLaddVol->AddNode(plate11Vol,4,new TGeoTranslation(-xPos +(1.11/2+rMax+box11->GetDX()+kLay2),-ylen + yPos +2*rMax-kLay2-kLay1/2 +deltaY,0)); - mechLaddVol->AddNode(plate12Vol,1,new TGeoTranslation(xPos ,-ylen + yPos +2*rMax-kLay2-kLay1/2,0)); - mechLaddVol->AddNode(plate12Vol,2,new TGeoTranslation(-xPos ,-ylen + yPos +2*rMax-kLay2-kLay1/2 + deltaY,0)); - mechLaddVol->AddNode(plate13Vol,1,new TGeoTranslation(xPos -(1.11/2+rMax+kLay2+box13->GetDX()),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY(),0)); - mechLaddVol->AddNode(plate13Vol,2,new TGeoTranslation(xPos -1.11/2+rMax+kLay2+box13->GetDX(),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY(),0)); - mechLaddVol->AddNode(plate13Vol,3,new TGeoTranslation(xPos +(1.11/2+rMax+kLay2+box13->GetDX()),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY(),0)); - mechLaddVol->AddNode(plate13Vol,4,new TGeoTranslation(xPos +1.11/2-rMax-kLay2-box13->GetDX(),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY(),0)); - mechLaddVol->AddNode(plate13Vol,5,new TGeoTranslation(-xPos -(1.11/2+rMax+kLay2+box13->GetDX()),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY() +deltaY,0)); - mechLaddVol->AddNode(plate13Vol,6,new TGeoTranslation(-xPos -1.11/2+rMax+kLay2+box13->GetDX(),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY() +deltaY,0)); - mechLaddVol->AddNode(plate13Vol,7,new TGeoTranslation(-xPos +(1.11/2+rMax+kLay2+box13->GetDX()),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY() +deltaY,0)); - mechLaddVol->AddNode(plate13Vol,8,new TGeoTranslation(-xPos +1.11/2-rMax-kLay2-box13->GetDX(),-ylen + yPos +2*rMax-kLay1-kLay2-box13->GetDY() +deltaY,0)); - - mechLaddVol->AddNode(cone1Vol,1,new TGeoTranslation(xPos - 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(cone1Vol,2,new TGeoTranslation(xPos + 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(cone1Vol,3,new TGeoTranslation(-xPos - 0.555,-ylen + yPos + rMax + deltaY,0)); - mechLaddVol->AddNode(cone1Vol,4,new TGeoTranslation(-xPos + 0.555,-ylen + yPos + rMax + deltaY,0)); - - - //Carbon Paper - - mechLaddVol->AddNode(plate21Vol,1,new TGeoTranslation(xPos -(1.11/2+rMax+box21->GetDX()),-ylen + yPos +2*rMax-kLay2/2,0)); - mechLaddVol->AddNode(plate21Vol,2,new TGeoTranslation(xPos +(1.11/2+rMax+box21->GetDX()) ,-ylen + yPos +2*rMax-kLay2/2,0)); - mechLaddVol->AddNode(plate21Vol,3,new TGeoTranslation(-xPos -(1.11/2+rMax+box21->GetDX()) ,-ylen + yPos +2*rMax-kLay2/2 +deltaY,0)); - mechLaddVol->AddNode(plate21Vol,4,new TGeoTranslation(-xPos +(1.11/2+rMax+box21->GetDX()) ,-ylen + yPos +2*rMax-kLay2/2 +deltaY,0)); - mechLaddVol->AddNode(plate22Vol,1,new TGeoTranslation(xPos ,-ylen + yPos +2*rMax-kLay2/2,0)); - mechLaddVol->AddNode(plate22Vol,2,new TGeoTranslation(-xPos ,-ylen + yPos +2*rMax-kLay2/2 + deltaY,0)); - mechLaddVol->AddNode(plate23Vol,1,new TGeoTranslation(xPos -(1.11/2+rMax+box23->GetDX()),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2,0)); - mechLaddVol->AddNode(plate23Vol,2,new TGeoTranslation(xPos -1.11/2+rMax+box23->GetDX(),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2,0)); - mechLaddVol->AddNode(plate23Vol,3,new TGeoTranslation(xPos +(1.11/2+rMax+box23->GetDX()),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2,0)); - mechLaddVol->AddNode(plate23Vol,4,new TGeoTranslation(xPos +1.11/2-rMax-box23->GetDX(),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2,0)); - mechLaddVol->AddNode(plate23Vol,5,new TGeoTranslation(-xPos -(1.11/2+rMax+box23->GetDX()),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2+deltaY,0)); - mechLaddVol->AddNode(plate23Vol,6,new TGeoTranslation(-xPos -1.11/2+rMax+box23->GetDX(),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2+deltaY,0)); - mechLaddVol->AddNode(plate23Vol,7,new TGeoTranslation(-xPos +(1.11/2+rMax+box23->GetDX()),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2+deltaY,0)); - mechLaddVol->AddNode(plate23Vol,8,new TGeoTranslation(-xPos +1.11/2-rMax-box23->GetDX(),-ylen + yPos +2*rMax-kLay2-(rMax-kLay2)/2+deltaY,0)); - - mechLaddVol->AddNode(cone2Vol,1,new TGeoTranslation(xPos - 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(cone2Vol,2,new TGeoTranslation(xPos + 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(cone2Vol,3,new TGeoTranslation(-xPos - 0.555,-ylen + yPos + rMax + deltaY,0)); - mechLaddVol->AddNode(cone2Vol,4,new TGeoTranslation(-xPos + 0.555,-ylen + yPos + rMax + deltaY,0)); - - //Cooling Tubes + water - - mechLaddVol->AddNode(coolTubeVol,1,new TGeoTranslation(xPos - 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(coolTubeWVol,1,new TGeoTranslation(xPos - 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(coolTubeVol,2,new TGeoTranslation(xPos + 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(coolTubeWVol,2,new TGeoTranslation(xPos + 0.555,-ylen + yPos + rMax,0)); - mechLaddVol->AddNode(coolTubeVol,3,new TGeoTranslation(-xPos - 0.555,-ylen + yPos + rMax + deltaY,0)); - mechLaddVol->AddNode(coolTubeWVol,3,new TGeoTranslation(-xPos - 0.555,-ylen + yPos + rMax + deltaY,0)); - mechLaddVol->AddNode(coolTubeVol,4,new TGeoTranslation(-xPos + 0.555,-ylen + yPos + rMax + deltaY,0)); - mechLaddVol->AddNode(coolTubeWVol,4,new TGeoTranslation(-xPos + 0.555,-ylen + yPos + rMax + deltaY,0)); - - //Cold Plate - - mechLaddVol->AddNode(coldPlateVol,1,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate/2,0)); - mechLaddVol->AddNode(coldPlateVol,2,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate/2 + deltaY,0)); - - //Glue - - mechLaddVol->AddNode(glueVol,1,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue/2,0)); - mechLaddVol->AddNode(glueVol,2,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue/2 + deltaY,0)); - - //Module Carbon Plate - - mechLaddVol->AddNode(modPlateVol,1,new TGeoTranslation(xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate/2,0)); - mechLaddVol->AddNode(modPlateVol,2,new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate/2 + deltaY,0)); - - //Bus - - mechLaddVol->AddNode(bus1Vol,1,new TGeoTranslation(xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 2*yFlex2 + yBus1/2,0)); - mechLaddVol->AddNode(bus1Vol,2,new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 2*yFlex2 + yBus1/2 + deltaY,0)); - mechLaddVol->AddNode(bus2Vol,1,new TGeoTranslation(xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 2*yFlex2 + yBus1 + yBus2/2,0)); - mechLaddVol->AddNode(bus2Vol,2,new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 2*yFlex2 + yBus1 + yBus2/2 + deltaY,0)); - //FPC + modules - for (Int_t j=0; jGetDY(); + halfStaveVol->AddNode(busKapVol, 1, new TGeoTranslation(0, ypos, 0)); - zpos = -(zact + (fNModules-1)*modGap)/2 + j*(zMod + modGap) + zMod/2; - zpos5cm = -(zact + (fNModules-1)*modGap)/2 + (j+1)*(zMod + modGap) + flexOverlap/2 ; - - mechLaddVol->AddNode(modVol, j, new TGeoTranslation(xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + ymod, zpos)); - mechLaddVol->AddNode(modVol, fNModules+j, new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + ymod +deltaY, zpos)); - mechLaddVol->AddNode(flex1Vol,j,new TGeoTranslation(xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2,zpos)); - mechLaddVol->AddNode(flex1Vol,fNModules+j,new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2 + deltaY,zpos)); - mechLaddVol->AddNode(flex2Vol,j,new TGeoTranslation(xPos, -ylen + yPos + yModPlate + 2*rMax + yCPlate + yGlue + 2*ymod + yFlex1 + yFlex2/2,zpos)); - mechLaddVol->AddNode(flex2Vol,fNModules+j,new TGeoTranslation(-xPos, -ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2/2 + deltaY,zpos)); - - if((j+1)!=fNModules){ - mechLaddVol->AddNode(flex1_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2 + yFlex1/2,zpos5cm)); - mechLaddVol->AddNode(flex1_5cmVol,fNModules+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2 + yFlex1/2 +deltaY,zpos5cm)); - mechLaddVol->AddNode(flex2_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 3*yFlex2/2,zpos5cm)); - mechLaddVol->AddNode(flex2_5cmVol,fNModules+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 3*yFlex2/2 +deltaY,zpos5cm)); - } - else { - mechLaddVol->AddNode(flex1_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2,zpos5cm-modGap)); - mechLaddVol->AddNode(flex1_5cmVol,fNModules+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2 +deltaY,zpos5cm-modGap)); - mechLaddVol->AddNode(flex2_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate +2*ymod + yFlex1 + yFlex2/2,zpos5cm-modGap)); - mechLaddVol->AddNode(flex2_5cmVol,fNModules+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2/2 +deltaY,zpos5cm-modGap)); + ypos -= (busKap->GetDY() + busAl->GetDY()); + halfStaveVol->AddNode(busAlVol, 1, new TGeoTranslation(0, ypos, 0)); - } + ypos -= (busAl->GetDY() + ymod); + for (Int_t j=0; jAddNode(moduleVol, j, new TGeoTranslation(0, ypos, zpos)); + fHierarchy[kModule]++; } + + ypos -= (ymod + coldPlate->GetDY()); + halfStaveVol->AddNode(coldPlateVol, 1, new TGeoTranslation(0, ypos, 0)); + + coolTubeVol->AddNode(coolWaterVol, 1, 0); + + xpos = fgkOBCoolTubeXDist/2; + ypos1 = ypos - (coldPlate->GetDY() + coolTube->GetRmax()); + halfStaveVol->AddNode(coolTubeVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(coolTubeVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + + halfStaveVol->AddNode(graphtubVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(graphtubVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + + halfStaveVol->AddNode(fleectubVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(fleectubVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + + xpos = xHalfSt - graphlat->GetDX(); + ypos1 = ypos - (coldPlate->GetDY() + graphlat->GetDY()); + halfStaveVol->AddNode(graphlatVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(graphlatVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + + halfStaveVol->AddNode(graphmidVol, 1, new TGeoTranslation(0, ypos1, 0)); + + xpos = xHalfSt - 2*graphlat->GetDX() + graphvert->GetDX(); + ypos1 = ypos - (coldPlate->GetDY() +2*graphlat->GetDY() +graphvert->GetDY()); + halfStaveVol->AddNode(graphvertVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(graphvertVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + xpos = graphmid->GetDX() - graphvert->GetDX(); + halfStaveVol->AddNode(graphvertVol, 3, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(graphvertVol, 4, new TGeoTranslation( xpos, ypos1, 0)); + + xpos = xHalfSt - fleeclat->GetDX(); + ypos1 = ypos - (coldPlate->GetDY() +2*graphlat->GetDY() +fleeclat->GetDY()); + halfStaveVol->AddNode(fleeclatVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(fleeclatVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + + halfStaveVol->AddNode(fleecmidVol, 1, new TGeoTranslation(0, ypos1, 0)); + + xpos = xHalfSt - 2*fleeclat->GetDX() + fleecvert->GetDX(); + ypos1 = ypos - (coldPlate->GetDY() +2*graphlat->GetDY() + + 2*fleeclat->GetDY() + fleecvert->GetDY()); + halfStaveVol->AddNode(fleecvertVol, 1, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(fleecvertVol, 2, new TGeoTranslation( xpos, ypos1, 0)); + xpos = fleecmid->GetDX() - fleecvert->GetDX(); + halfStaveVol->AddNode(fleecvertVol, 3, new TGeoTranslation(-xpos, ypos1, 0)); + halfStaveVol->AddNode(fleecvertVol, 4, new TGeoTranslation( xpos, ypos1, 0)); + + + + //THE FOLLOWING IS ONLY A REMINDER FOR WHAT IS STILL MISSING + +// for (Int_t j=0; jAddNode(moduleVol, j, new TGeoTranslation(xPos, -ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + ymod, zpos)); +// halfStaveVol->AddNode(moduleVol, fNChips+j, new TGeoTranslation(-xPos, -ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + ymod +deltaY, zpos)); + +// if((j+1)!=fNChips){ +// halfStaveVol->AddNode(flex1_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2 + yFlex1/2,zpos5cm)); +// halfStaveVol->AddNode(flex1_5cmVol,fNChips+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2 + yFlex1/2 +deltaY,zpos5cm)); +// halfStaveVol->AddNode(flex2_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 3*yFlex2/2,zpos5cm)); +// halfStaveVol->AddNode(flex2_5cmVol,fNChips+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + 2*yFlex1 + 3*yFlex2/2 +deltaY,zpos5cm)); +// } +// else { +// halfStaveVol->AddNode(flex1_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2,zpos5cm-modGap)); +// halfStaveVol->AddNode(flex1_5cmVol,fNChips+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1/2 +deltaY,zpos5cm-modGap)); +// halfStaveVol->AddNode(flex2_5cmVol,j,new TGeoTranslation(xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate +2*ymod + yFlex1 + yFlex2/2,zpos5cm-modGap)); +// halfStaveVol->AddNode(flex2_5cmVol,fNChips+j,new TGeoTranslation(-xPos,-ylen + yPos + 2*rCoolMax + yCPlate + yGlue + yModPlate + 2*ymod + yFlex1 + yFlex2/2 +deltaY,zpos5cm-modGap)); + +// } +// } - // Done, return the stave structur - return mechLaddVol; + // Done, return the half stave structure + return halfStaveVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB(const Double_t xlad, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB(const TGeoManager *mgr){ // // Create the space frame for the Outer Barrel // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -2119,31 +2351,30 @@ TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB(const Double_t xlad, // // - TGeoVolume *mechLaddVol = 0; + TGeoVolume *mechStavVol = 0; switch (fStaveModel) { case AliITSUv1::kOBModelDummy: - mechLaddVol = CreateSpaceFrameOuterBDummy(xlad,mgr); + case AliITSUv1::kOBModel0: + mechStavVol = CreateSpaceFrameOuterBDummy(mgr); break; case AliITSUv1::kOBModel1: - mechLaddVol = CreateSpaceFrameOuterB0(xlad,mgr); + mechStavVol = CreateSpaceFrameOuterB1(mgr); break; default: AliFatal(Form("Unknown stave model %d",fStaveModel)); break; } - return mechLaddVol; + return mechStavVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterBDummy(const Double_t , - const TGeoManager *) const { +TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterBDummy(const TGeoManager *) const { // // Create dummy stave // // Input: -// xlad : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -2157,13 +2388,11 @@ TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterBDummy(const Double_t , } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB0(const Double_t xlen, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB1(const TGeoManager *mgr){ // -// Create the space frame for the Outer Barrel (Model 0) +// Create the space frame for the Outer Barrel (Model 1) // // Input: -// xlen : X length // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -2173,6 +2402,8 @@ TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB0(const Double_t xlen, // // Created: 20 Dec 2013 Anastasia Barbano // Updated: 15 Jan 2014 Mario Sitta +// Updated: 18 Feb 2014 Mario Sitta +// Updated: 12 Mar 2014 Mario Sitta // @@ -2182,176 +2413,215 @@ TGeoVolume* AliITSUv1Layer::CreateSpaceFrameOuterB0(const Double_t xlen, // Local parameters - Double_t ladderWidth = 4.2; - Double_t ladderHeight = 4.2; -// Double_t ladderSegBoxDW = 7.5; -// Double_t ladderSegBoxDH = 7.1; - Double_t ladderBeamRadius = 0.06; - Double_t ladderLa = 0.3; - Double_t ladderHa = 0.0721979; - Double_t ladderLb = 0.37; - Double_t ladderHb = 0.0890428; - Double_t ladderl = 0.025; - Double_t beamSidePhi = 65; - Double_t bottomBeamAngle = 56.5; -// Double_t dy = ladderSegBoxDH/2; - Double_t triangleHeight = ladderHeight - ladderBeamRadius; - Double_t halfTheta = TMath::ATan( 0.5*ladderWidth/triangleHeight ); - Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.; + Double_t sframeWidth = fgkOBSpaceFrameWidth; + Double_t sframeHeight = fgkOBSpaceFrameTotHigh - fgkOBHalfStaveYTrans; + Double_t staveBeamRadius = fgkOBSFrameBeamRadius; + Double_t staveLa = fgkOBSpaceFrameLa; + Double_t staveHa = fgkOBSpaceFrameHa; + Double_t staveLb = fgkOBSpaceFrameLb; + Double_t staveHb = fgkOBSpaceFrameHb; + Double_t stavel = fgkOBSpaceFrameL; + Double_t bottomBeamAngle = fgkOBSFBotBeamAngle; + Double_t triangleHeight = sframeHeight - staveBeamRadius; + Double_t halfTheta = TMath::ATan( 0.5*sframeWidth/triangleHeight ); +// Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.; Double_t beta = (TMath::Pi() - 2.*halfTheta)/4.; -// Double_t dYTranslation = (ladderHeight/2. -0.5*ladderWidth*TMath::Tan(beta)-ladderBeamRadius); - Double_t distCenterSideDown = 0.5*ladderWidth/TMath::Cos(beta); - Double_t zact; - Double_t zbus; +// Double_t distCenterSideDown = 0.5*sframeWidth/TMath::Cos(beta); + Double_t zlen; - Double_t seglen; + Double_t xpos, ypos, zpos; + Double_t seglen; + char volname[30]; + + zlen = fNModules*fgkOBModuleZLength + (fNModules-1)*fgkOBModuleGap; + + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSHalfStavePattern(), fLayerNumber); + if (gGeoManager->GetVolume(volname)) { // Should always be so + sframeHeight -= ((TGeoBBox*)gGeoManager->GetVolume(volname)->GetShape())->GetDY()*2; + zlen = ((TGeoBBox*)gGeoManager->GetVolume(volname)->GetShape())->GetDZ()*2; + } + seglen = zlen/fNModules; - zact = fNModules*fgkOBModuleZLength; //active area - zbus = zact + (fNModules-1)*fgkOBModuleGap; - zlen = zbus/2; - seglen = zlen/10; // First create all needed shapes and volumes - TGeoBBox *spaceFrame = new TGeoBBox("CarbonFrame",xlen, 2.2, zlen); - TGeoBBox *segment = new TGeoBBox(ladderWidth/2,ladderHeight/2,seglen/2); + TGeoBBox *spaceFrame = new TGeoBBox(sframeWidth/2,sframeHeight/2,zlen/2); + TGeoBBox *segment = new TGeoBBox(sframeWidth/2,sframeHeight/2,seglen/2); TGeoVolume *spaceFrameVol = new TGeoVolume("CarbonFrameVolume", spaceFrame, medAir); - spaceFrameVol->SetVisibility(kTRUE); + spaceFrameVol->SetVisibility(kFALSE); - TGeoVolume *segmentVol = new TGeoVolume("segmentVol",segment,medAir); + TGeoVolume *segmentVol = new TGeoVolume("segmentVol", segment, medAir); //SpaceFrame - //--- the top V of the Carbon Fiber Ladder (segment) - TGeoArb8 *cfLaddTop1 = CreateLadderSide("CFladdTopCornerVol1shape", seglen/2., halfTheta, -1, ladderLa, ladderHa, ladderl); - TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1", cfLaddTop1,medCarbon); - TGeoArb8 *cfLaddTop2 = CreateLadderSide( "CFladdTopCornerVol2shape", seglen/2., halfTheta, 1, ladderLa, ladderHa, ladderl); - TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerVol2",cfLaddTop2,medCarbon ); + //--- the top V of the Carbon Fiber Stave (segment) + TGeoArb8 *cfStavTop1 = CreateStaveSide("CFstavTopCornerVol1shape", seglen/2., halfTheta, -1, staveLa, staveHa, stavel); + TGeoVolume *cfStavTopVol1 = new TGeoVolume("CFstavTopCornerVol1", + cfStavTop1, medCarbon); + cfStavTopVol1->SetLineColor(35); - //TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2-dy, 0); - TGeoTranslation *trTop1 = new TGeoTranslation(0, ladderHeight/2, 0); - - //--- the 2 side V - TGeoArb8 *cfLaddSide1 = CreateLadderSide( "CFladdSideCornerVol1shape", seglen/2., beta, -1,ladderLb, ladderHb, ladderl); - TGeoVolume *cfLaddSideVol1 = new TGeoVolume( "ITSsddCFladdSideCornerVol1", cfLaddSide1,medCarbon); - TGeoArb8 *cfLaddSide2 = CreateLadderSide( "CFladdSideCornerVol2shape", seglen/2., beta, 1, ladderLb, ladderHb, ladderl); - TGeoVolume *cfLaddSideVol2 = new TGeoVolume( "ITSsddCFladdSideCornerVol2", cfLaddSide2,medCarbon ); + TGeoArb8 *cfStavTop2 = CreateStaveSide("CFstavTopCornerVol2shape", seglen/2., halfTheta, 1, staveLa, staveHa, stavel); + TGeoVolume *cfStavTopVol2 = new TGeoVolume("CFstavTopCornerVol2", + cfStavTop2, medCarbon ); + cfStavTopVol2->SetLineColor(35); + TGeoTranslation *trTop1 = new TGeoTranslation(0, sframeHeight/2, 0); - TGeoCombiTrans *ctSideR = CreateCombiTrans("", distCenterSideDown, 0,alpha*TMath::RadToDeg()); - //AddTranslationToCombiTrans(ctSideR, 0, -dYTranslation-dy, 0); - AddTranslationToCombiTrans(ctSideR, 0, ladderHeight/2-2.85/*2.765250/*triangleHeight*/, 0); - TGeoCombiTrans *ctSideL = CreateCombiTrans("", distCenterSideDown,0,-alpha*TMath::RadToDeg()); - //AddTranslationToCombiTrans(ctSideL, 0, -dYTranslation-dy, 0); - AddTranslationToCombiTrans(ctSideL, 0, ladderHeight/2-2.85/*triangleHeight*/, 0); - - segmentVol->AddNode(cfLaddTopVol1,1,trTop1); - segmentVol->AddNode(cfLaddTopVol2,1,trTop1); - segmentVol->AddNode(cfLaddSideVol1,1,ctSideR); - segmentVol->AddNode(cfLaddSideVol1,2,ctSideL); - segmentVol->AddNode(cfLaddSideVol2,1,ctSideR); - segmentVol->AddNode(cfLaddSideVol2,2,ctSideL); + //--- the 2 side V + TGeoArb8 *cfStavSide1 = CreateStaveSide("CFstavSideCornerVol1shape", seglen/2., beta, -1, staveLb, staveHb, stavel); + TGeoVolume *cfStavSideVol1 = new TGeoVolume("CFstavSideCornerVol1", + cfStavSide1, medCarbon); + cfStavSideVol1->SetLineColor(35); + + TGeoArb8 *cfStavSide2 = CreateStaveSide("CFstavSideCornerVol2shape", seglen/2., beta, 1, staveLb, staveHb, stavel); + TGeoVolume *cfStavSideVol2 = new TGeoVolume("CFstavSideCornerVol2", + cfStavSide2, medCarbon ); + cfStavSideVol2->SetLineColor(35); + + xpos = -sframeWidth/2; + ypos = -sframeHeight/2 + staveBeamRadius + staveHb*TMath::Sin(beta); + TGeoCombiTrans *ctSideR = new TGeoCombiTrans( xpos, ypos, 0, + new TGeoRotation("", 180-2*beta*TMath::RadToDeg(), 0, 0)); + TGeoCombiTrans *ctSideL = new TGeoCombiTrans(-xpos, ypos, 0, + new TGeoRotation("",-180+2*beta*TMath::RadToDeg(), 0, 0)); + + segmentVol->AddNode(cfStavTopVol1,1,trTop1); + segmentVol->AddNode(cfStavTopVol2,1,trTop1); + segmentVol->AddNode(cfStavSideVol1,1,ctSideR); + segmentVol->AddNode(cfStavSideVol1,2,ctSideL); + segmentVol->AddNode(cfStavSideVol2,1,ctSideR); + segmentVol->AddNode(cfStavSideVol2,2,ctSideL); //--- The beams // Beams on the sides - Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*TMath::Sin(2*beta)/(TanD(beamSidePhi)*TanD(beamSidePhi))) )); - Double_t beamLength = TMath::Sqrt( ladderHeight*ladderHeight/( TMath::Sin(beamPhiPrime)*TMath::Sin(beamPhiPrime))+ ladderWidth*ladderWidth/4.)-ladderLa/2-ladderLb/2; - TGeoTubeSeg *sideBeamS = new TGeoTubeSeg(0, ladderBeamRadius,beamLength/2.,0, 180); - TGeoVolume *sideBeam = new TGeoVolume("ITSsddCFSideBeamVol", sideBeamS,medCarbon); - - //Euler rotation : about Z, then new X, then new Z - TGeoRotation *beamRot1 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),-beamPhiPrime*TMath::RadToDeg(),-90); - TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(), beamPhiPrime*TMath::RadToDeg(), -90); - TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(), beamPhiPrime*TMath::RadToDeg(), -90); - TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),-beamPhiPrime*TMath::RadToDeg(),-90); + Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*TMath::Sin(2*beta)/(TanD(fgkOBSFrameBeamSidePhi)*TanD(fgkOBSFrameBeamSidePhi))) )); + Double_t beamLength = TMath::Sqrt( sframeHeight*sframeHeight/( TMath::Sin(beamPhiPrime)*TMath::Sin(beamPhiPrime))+ sframeWidth*sframeWidth/4.)-staveLa/2-staveLb/2; + TGeoTubeSeg *sideBeam = new TGeoTubeSeg(0, staveBeamRadius, + beamLength/2, 0, 180); + TGeoVolume *sideBeamVol = new TGeoVolume("CFstavSideBeamVol", + sideBeam, medCarbon); + sideBeamVol->SetLineColor(35); + + TGeoRotation *beamRot1 = new TGeoRotation("", /*90-2*beta*/halfTheta*TMath::RadToDeg(), + -beamPhiPrime*TMath::RadToDeg(), -90); + TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(), + beamPhiPrime*TMath::RadToDeg(), -90); + TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(), + beamPhiPrime*TMath::RadToDeg(), -90); + TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(), + -beamPhiPrime*TMath::RadToDeg(), -90); TGeoCombiTrans *beamTransf[8]; - beamTransf[0] = new TGeoCombiTrans( 0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-3*seglen/8, beamRot1); + xpos = 0.5*triangleHeight*TMath::Tan(halfTheta); + ypos = staveBeamRadius/2; + zpos = seglen/8; + beamTransf[0] = new TGeoCombiTrans( xpos, ypos,-3*zpos, beamRot1); - beamTransf[1] = new TGeoCombiTrans( 0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-3*seglen/8, beamRot1); + beamTransf[1] = new TGeoCombiTrans( xpos, ypos,-3*zpos, beamRot1); AddTranslationToCombiTrans(beamTransf[1], 0, 0, seglen/2); - beamTransf[2] = new TGeoCombiTrans(0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-seglen/8, beamRot2); + beamTransf[2] = new TGeoCombiTrans( xpos, ypos, -zpos, beamRot2); - beamTransf[3] = new TGeoCombiTrans(0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-seglen/8, beamRot2); + beamTransf[3] = new TGeoCombiTrans( xpos, ypos, -zpos, beamRot2); AddTranslationToCombiTrans(beamTransf[3], 0, 0, seglen/2); - beamTransf[4] = new TGeoCombiTrans(-0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-3*seglen/8, beamRot3); + beamTransf[4] = new TGeoCombiTrans(-xpos, ypos,-3*zpos, beamRot3); - beamTransf[5] = new TGeoCombiTrans(-0.5*triangleHeight*TMath::Tan(halfTheta),ladderBeamRadius/2. ,-3*seglen/8, beamRot3); + beamTransf[5] = new TGeoCombiTrans(-xpos, ypos,-3*zpos, beamRot3); AddTranslationToCombiTrans(beamTransf[5], 0, 0, seglen/2); - beamTransf[6] = new TGeoCombiTrans(-0.5*triangleHeight* TMath::Tan(halfTheta),ladderBeamRadius/2., -seglen/8,beamRot4); - beamTransf[7] = new TGeoCombiTrans(-0.5*triangleHeight* TMath::Tan(halfTheta),ladderBeamRadius/2.,3*seglen/8,beamRot4); + beamTransf[6] = new TGeoCombiTrans(-xpos, ypos, -zpos, beamRot4); + beamTransf[7] = new TGeoCombiTrans(-xpos, ypos, 3*zpos, beamRot4); //--- Beams of the bottom - TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, ladderBeamRadius,ladderWidth/2.-ladderLb/3, 0, 180); - TGeoVolume *bottomBeam1Vol = new TGeoVolume("ITSsddBottomBeam1Vol", bottomBeam1, medCarbon); - TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, ladderBeamRadius,ladderWidth/2.-ladderLb/3, 0, 90); - TGeoVolume *bottomBeam2Vol = new TGeoVolume("ITSsddBottomBeam2Vol",bottomBeam2, medCarbon); - TGeoTubeSeg *bottomBeam3 = new TGeoTubeSeg(0, ladderBeamRadius,0.5*ladderWidth/SinD(bottomBeamAngle) - ladderLb/3, 0, 180); - TGeoVolume *bottomBeam3Vol = new TGeoVolume("ITSsddBottomBeam3Vol", bottomBeam3, medCarbon); - TGeoRotation *bottomBeamRot1 = new TGeoRotation("", 90, 90, 90); - TGeoRotation *bottomBeamRot2 = new TGeoRotation("",-90, 90, -90); - - TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans("",0,-(ladderHeight/2-ladderBeamRadius),0, bottomBeamRot1); - TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0,-(ladderHeight/2-ladderBeamRadius),-seglen/2, bottomBeamRot1); - TGeoCombiTrans *bottomBeamTransf3 = new TGeoCombiTrans(0,-(ladderHeight/2-ladderBeamRadius), seglen/2, bottomBeamRot2); - // be careful for beams #3: when "reading" from -z to +z and - // from the bottom of the ladder, it should draw a Lambda, and not a V - TGeoRotation *bottomBeamRot4 = new TGeoRotation("", -90, bottomBeamAngle, -90); - TGeoRotation *bottomBeamRot5 = new TGeoRotation("" ,-90,-bottomBeamAngle, -90); - TGeoCombiTrans *bottomBeamTransf4 = new TGeoCombiTrans(0,-(ladderHeight/2-ladderBeamRadius),-seglen/4,bottomBeamRot4); - TGeoCombiTrans *bottomBeamTransf5 = new TGeoCombiTrans(0,-(ladderHeight/2-ladderBeamRadius),seglen/4, bottomBeamRot5); - - cfLaddTopVol1->SetLineColor(35); - cfLaddTopVol2->SetLineColor(35); - cfLaddSideVol1->SetLineColor(35); - cfLaddSideVol2->SetLineColor(35); - sideBeam->SetLineColor(35); + TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, staveBeamRadius, + sframeWidth/2.-staveLb/3, 0, 180); + TGeoVolume *bottomBeam1Vol = new TGeoVolume("CFstavBottomBeam1Vol", + bottomBeam1, medCarbon); bottomBeam1Vol->SetLineColor(35); + + TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, staveBeamRadius, + sframeWidth/2.-staveLb/3, 0, 90); + TGeoVolume *bottomBeam2Vol = new TGeoVolume("CFstavBottomBeam2Vol", + bottomBeam2, medCarbon); bottomBeam2Vol->SetLineColor(35); + + TGeoTubeSeg *bottomBeam3 = new TGeoTubeSeg(0, staveBeamRadius, + 0.5*sframeWidth/SinD(bottomBeamAngle) - staveLb/3, + 0, 180); + TGeoVolume *bottomBeam3Vol = new TGeoVolume("CFstavBottomBeam3Vol", + bottomBeam3, medCarbon); bottomBeam3Vol->SetLineColor(35); + TGeoRotation *bottomBeamRot1 = new TGeoRotation("", 90, 90, 90); + TGeoRotation *bottomBeamRot2 = new TGeoRotation("",-90, 90, -90); - segmentVol->AddNode(sideBeam,1, beamTransf[0]); - segmentVol->AddNode(sideBeam,2, beamTransf[1]); - segmentVol->AddNode(sideBeam,3, beamTransf[2]); - segmentVol->AddNode(sideBeam,4, beamTransf[3]); - segmentVol->AddNode(sideBeam,5, beamTransf[4]); - segmentVol->AddNode(sideBeam,6, beamTransf[5]); - segmentVol->AddNode(sideBeam,7, beamTransf[6]); - segmentVol->AddNode(sideBeam,8, beamTransf[7]); + TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans("",0, + -(sframeHeight/2-staveBeamRadius), 0, + bottomBeamRot1); + TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0, + -(sframeHeight/2-staveBeamRadius), + -seglen/2, + bottomBeamRot1); + TGeoCombiTrans *bottomBeamTransf3 = new TGeoCombiTrans(0, + -(sframeHeight/2-staveBeamRadius), + seglen/2, + bottomBeamRot2); + // be careful for beams #3: when "reading" from -z to +z and + // from the bottom of the stave, it should draw a Lambda, and not a V + TGeoRotation *bottomBeamRot4 = new TGeoRotation("",-90, bottomBeamAngle,-90); + TGeoRotation *bottomBeamRot5 = new TGeoRotation("",-90,-bottomBeamAngle,-90); + + TGeoCombiTrans *bottomBeamTransf4 = new TGeoCombiTrans(0, + -(sframeHeight/2-staveBeamRadius), + -seglen/4, + bottomBeamRot4); + TGeoCombiTrans *bottomBeamTransf5 = new TGeoCombiTrans(0, + -(sframeHeight/2-staveBeamRadius), + seglen/4, + bottomBeamRot5); + + + segmentVol->AddNode(sideBeamVol,1, beamTransf[0]); + segmentVol->AddNode(sideBeamVol,2, beamTransf[1]); + segmentVol->AddNode(sideBeamVol,3, beamTransf[2]); + segmentVol->AddNode(sideBeamVol,4, beamTransf[3]); + segmentVol->AddNode(sideBeamVol,5, beamTransf[4]); + segmentVol->AddNode(sideBeamVol,6, beamTransf[5]); + segmentVol->AddNode(sideBeamVol,7, beamTransf[6]); + segmentVol->AddNode(sideBeamVol,8, beamTransf[7]); segmentVol->AddNode(bottomBeam1Vol,1,bottomBeamTransf1); segmentVol->AddNode(bottomBeam2Vol,1,bottomBeamTransf2); - segmentVol->AddNode(bottomBeam2Vol,1,bottomBeamTransf3); + segmentVol->AddNode(bottomBeam2Vol,2,bottomBeamTransf3); segmentVol->AddNode(bottomBeam3Vol,1,bottomBeamTransf4); - segmentVol->AddNode(bottomBeam3Vol,1,bottomBeamTransf5); + segmentVol->AddNode(bottomBeam3Vol,2,bottomBeamTransf5); - for(Int_t i=0;i<10;i++){ - spaceFrameVol->AddNode(segmentVol,i,new TGeoTranslation(0,0,seglen*(0.5+i))); - spaceFrameVol->AddNode(segmentVol,11+i,new TGeoTranslation(0,0,-seglen*(0.5+i))); + + // Then build up the space frame + for(Int_t i=0; iGetDZ() + (1 + 2*i)*segment->GetDZ(); + spaceFrameVol->AddNode(segmentVol, i, new TGeoTranslation(0, 0, zpos)); } - // Done, return the stave structur + // Done, return the space frame structure return spaceFrameVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateModuleInnerB(const Double_t xlad, - const Double_t ylad, - const Double_t zlad, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateChipInnerB(const Double_t xchip, + const Double_t ychip, + const Double_t zchip, + const TGeoManager *mgr){ // -// Creates the actual Module +// Creates the actual Chip // // Input: -// xlad,zlad : the ladder dimensions +// xchip,ychip,zchip : the chip dimensions // mgr : the GeoManager (used only to get the proper material) // // Output: @@ -2368,25 +2638,23 @@ TGeoVolume* AliITSUv1Layer::CreateModuleInnerB(const Double_t xlad, // First create all needed shapes - // The module - TGeoBBox *module = new TGeoBBox(xlad, ylad, zlad/fNModules); + // The chip + TGeoBBox *chip = new TGeoBBox(xchip, ychip, zchip); // The sensor - xlen = module->GetDX(); + xlen = chip->GetDX(); ylen = 0.5*fSensorThick; - zlen = module->GetDZ(); + zlen = chip->GetDZ(); TGeoBBox *sensor = new TGeoBBox(xlen, ylen, zlen); // We have all shapes: now create the real volumes - //TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); TGeoMedium *medSi = mgr->GetMedium("ITS_SI$"); - snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSModulePattern(), fLayerNumber); - // TGeoVolume *modVol = new TGeoVolume(volname, module, medAir); - TGeoVolume *modVol = new TGeoVolume(volname, module, medSi); - modVol->SetVisibility(kTRUE); - modVol->SetLineColor(1); + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSChipPattern(), fLayerNumber); + TGeoVolume *chipVol = new TGeoVolume(volname, chip, medSi); + chipVol->SetVisibility(kTRUE); + chipVol->SetLineColor(1); snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSSensorPattern(), fLayerNumber); TGeoVolume *sensVol = new TGeoVolume(volname, sensor, medSi); @@ -2397,87 +2665,141 @@ TGeoVolume* AliITSUv1Layer::CreateModuleInnerB(const Double_t xlad, sensVol->SetFillStyle(4000); // 0% transparent - // Now build up the module + // Now build up the chip xpos = 0.; - ypos = -module->GetDY() + sensor->GetDY(); + ypos = -chip->GetDY() + sensor->GetDY(); zpos = 0.; - modVol->AddNode(sensVol, 1, new TGeoTranslation(xpos, ypos, zpos)); + chipVol->AddNode(sensVol, 1, new TGeoTranslation(xpos, ypos, zpos)); - // Done, return the module - return modVol; + // Done, return the chip + return chipVol; } //________________________________________________________________________ -TGeoVolume* AliITSUv1Layer::CreateModuleOuterB(const Double_t xlad, - const Double_t ylad, - const Double_t zmod, - const TGeoManager *mgr){ +TGeoVolume* AliITSUv1Layer::CreateModuleOuterB(const TGeoManager *mgr){ // -// Creates the actual Module +// Creates the OB Module: HIC + FPC + Carbon plate // // Input: -// xlad,ylad,zlad : the half stave dimensions // mgr : the GeoManager (used only to get the proper material) // // Output: // // Return: +// the module as a TGeoVolume // // Created: 18 Dec 2013 M. Sitta, A. Barbano +// Updated: 26 Feb 2014 M. Sitta // char volname[30]; - Double_t xGap = 0.01; - Double_t zGap = 0.01; + Double_t xGap = fgkOBChipXGap; + Double_t zGap = fgkOBChipZGap; + Double_t xchip, ychip, zchip; Double_t xlen, ylen, zlen; Double_t xpos, ypos, zpos; // First create all needed shapes - // The module - TGeoBBox *module = new TGeoBBox(xlad, ylad, zmod/2); + // The chip (the same as for IB) + xlen = (fgkOBHalfStaveWidth/2-xGap/2)/fgkOBNChipRows; + ylen = 0.5*fStaveThick; // TO BE CHECKED + zlen = (fgkOBModuleZLength - (fgkOBChipsPerRow-1)*zGap)/(2*fgkOBChipsPerRow); - // The sensor - xlen = 0.5*(module->GetDX()-xGap/2); - //xlen = 0.5*1.5; - ylen = ylad; - zlen = (2*module->GetDZ()-6*zGap)/14; - TGeoBBox *sensor = new TGeoBBox(xlen, ylen, zlen); + TGeoVolume *chipVol = CreateChipInnerB(xlen, ylen, zlen); + + xchip = ((TGeoBBox*)chipVol->GetShape())->GetDX(); + ychip = ((TGeoBBox*)chipVol->GetShape())->GetDY(); + zchip = ((TGeoBBox*)chipVol->GetShape())->GetDZ(); + + // The module carbon plate + xlen = fgkOBHalfStaveWidth/2; + ylen = fgkOBCarbonPlateThick/2; + zlen = fgkOBModuleZLength/2; + TGeoBBox *modPlate = new TGeoBBox("CarbonPlate", xlen, ylen, zlen); + + // The glue + ylen = fgkOBGlueThick/2; + TGeoBBox *glue = new TGeoBBox("Glue", xlen, ylen, zlen); + + // The flex cables + ylen = fgkOBFlexCableAlThick/2; + TGeoBBox *flexAl = new TGeoBBox("FlexAl", xlen, ylen, zlen); + + ylen = fgkOBFlexCableKapThick/2; + TGeoBBox *flexKap = new TGeoBBox("FlexKap", xlen, ylen, zlen); + + // The module + xlen = fgkOBHalfStaveWidth/2; + ylen = ychip + modPlate->GetDY() + glue->GetDY() + + flexAl->GetDY() + flexKap->GetDY(); + zlen = fgkOBModuleZLength/2; + TGeoBBox *module = new TGeoBBox("OBModule", xlen, ylen, zlen); // We have all shapes: now create the real volumes - TGeoMedium *medSi = mgr->GetMedium("ITS_SI$"); + TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$"); + TGeoMedium *medCarbon = mgr->GetMedium("ITS_CARBON$"); + TGeoMedium *medGlue = mgr->GetMedium("ITS_GLUE$"); + TGeoMedium *medAluminum = mgr->GetMedium("ITS_ALUMINUM$"); + TGeoMedium *medKapton = mgr->GetMedium("ITS_KAPTON(POLYCH2)$"); + + TGeoVolume *modPlateVol = new TGeoVolume("CarbonPlateVol", + modPlate, medCarbon); + modPlateVol->SetLineColor(kMagenta-8); + modPlateVol->SetFillColor(modPlateVol->GetLineColor()); + modPlateVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *glueVol = new TGeoVolume("GlueVol", glue, medGlue); + glueVol->SetLineColor(kBlack); + glueVol->SetFillColor(glueVol->GetLineColor()); + glueVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *flexAlVol = new TGeoVolume("FlexAlVol", flexAl, medAluminum); + flexAlVol->SetLineColor(kRed); + flexAlVol->SetFillColor(flexAlVol->GetLineColor()); + flexAlVol->SetFillStyle(4000); // 0% transparent + + TGeoVolume *flexKapVol = new TGeoVolume("FlexKapVol", flexKap, medKapton); + flexKapVol->SetLineColor(kGreen); + flexKapVol->SetFillColor(flexKapVol->GetLineColor()); + flexKapVol->SetFillStyle(4000); // 0% transparent + snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSModulePattern(), fLayerNumber); - TGeoVolume *modVol = new TGeoVolume(volname, module, medSi); + TGeoVolume *modVol = new TGeoVolume(volname, module, medAir); modVol->SetVisibility(kTRUE); - - snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSSensorPattern(), fLayerNumber); - TGeoVolume *sensVol = new TGeoVolume(volname, sensor, medSi); - // Now build up the module - xpos = -module->GetDX() + sensor->GetDX(); - //xpos = -xGap/2 -sensor->GetDX(); - ypos = -module->GetDY() + sensor->GetDY(); - for(Int_t k=0;k<7;k++) //put 7x2 chip into one module + ypos = -module->GetDY() + modPlate->GetDY(); + modVol->AddNode(modPlateVol, 1, new TGeoTranslation(0, ypos, 0)); + + ypos += (modPlate->GetDY() + glue->GetDY()); + modVol->AddNode(glueVol, 1, new TGeoTranslation(0, ypos, 0)); + + xpos = -module->GetDX() + xchip; + ypos += (glue->GetDY() + ychip); + for(Int_t k=0; kGetDZ() + sensor->GetDZ() + k*(2*sensor->GetDZ() + zGap); - modVol->AddNode(sensVol, k+1, new TGeoTranslation(xpos, ypos, zpos)); - modVol->AddNode(sensVol, k+2, new TGeoTranslation(-xpos, ypos, zpos)); + zpos = -module->GetDZ() + zchip + k*(2*zchip + zGap); + modVol->AddNode(chipVol, 2*k , new TGeoTranslation( xpos, ypos, zpos)); + modVol->AddNode(chipVol, 2*k+1, + new TGeoCombiTrans(-xpos, ypos, zpos, new TGeoRotation("",0,180,180))); + fHierarchy[kChip]+=2; } + + ypos += (ychip + flexAl->GetDY()); + modVol->AddNode(flexAlVol, 1, new TGeoTranslation(0, ypos, 0)); + + ypos += (flexAl->GetDY() + flexKap->GetDY()); + modVol->AddNode(flexKapVol, 1, new TGeoTranslation(0, ypos, 0)); - //sensVol->SetVisibility(kTRUE); - sensVol->SetLineColor(kYellow); - //sensVol->SetLineWidth(1); - //sensVol->SetTransparency(30); - sensVol->SetFillColor(sensVol->GetLineColor()); - sensVol->SetFillStyle(4000); // 0% transparent + // Done, return the module return modVol; } @@ -2486,8 +2808,8 @@ TGeoVolume* AliITSUv1Layer::CreateModuleOuterB(const Double_t xlad, Double_t AliITSUv1Layer::RadiusOfTurboContainer(){ // // Computes the inner radius of the air container for the Turbo configuration -// as the radius of either the circle tangent to the ladder or the circle -// passing for the ladder's lower vertex +// as the radius of either the circle tangent to the stave or the circle +// passing for the stave's lower vertex // // Input: // none (all needed parameters are class members) @@ -2500,32 +2822,60 @@ Double_t AliITSUv1Layer::RadiusOfTurboContainer(){ // Created: 08 Mar 2012 Mario Sitta // - Double_t rr, delta, z, lladd, rladd; + Double_t rr, delta, z, lstav, rstav; - if (fLadderThick > 89.) // Very big angle: avoid overflows since surely + if (fStaveThick > 89.) // Very big angle: avoid overflows since surely return -1; // the radius from lower vertex is the right value - rladd = fLayRadius + 0.5*fLadderThick; - delta = (0.5*fLadderThick)/CosD(fLadderTilt); - z = (0.5*fLadderThick)*TanD(fLadderTilt); + rstav = fLayRadius + 0.5*fStaveThick; + delta = (0.5*fStaveThick)/CosD(fStaveTilt); + z = (0.5*fStaveThick)*TanD(fStaveTilt); - rr = rladd - delta; - lladd = (0.5*fLadderWidth) - z; + rr = rstav - delta; + lstav = (0.5*fStaveWidth) - z; - if ( (rr*SinD(fLadderTilt) < lladd) ) - return (rr*CosD(fLadderTilt)); + if ( (rr*SinD(fStaveTilt) < lstav) ) + return (rr*CosD(fStaveTilt)); else return -1; } //________________________________________________________________________ -void AliITSUv1Layer::SetLadderTilt(const Double_t t) +void AliITSUv1Layer::SetNUnits(Int_t u) +{ +// +// Sets the number of units in a stave: +// for the Inner Barrel: the number of chips per stave +// for the Outer Barrel: the number of modules per half stave +// +// +// Input: +// u : the number of units +// +// Output: +// +// Return: +// +// Created: 18 Feb 2013 Mario Sitta (was already SetNChips) +// + + if (fLayerNumber < fgkNumberOfInnerLayers) + fNChips = u; + else { + fNModules = u; + fNChips = fgkOBChipsPerRow; + } + +} + +//________________________________________________________________________ +void AliITSUv1Layer::SetStaveTilt(const Double_t t) { // -// Sets the Ladder tilt angle (for turbo layers only) +// Sets the Stave tilt angle (for turbo layers only) // // Input: -// t : the ladder tilt angle +// t : the stave tilt angle // // Output: // @@ -2535,19 +2885,19 @@ void AliITSUv1Layer::SetLadderTilt(const Double_t t) // if (fIsTurbo) - fLadderTilt = t; + fStaveTilt = t; else AliError("Not a Turbo layer"); } //________________________________________________________________________ -void AliITSUv1Layer::SetLadderWidth(const Double_t w){ +void AliITSUv1Layer::SetStaveWidth(const Double_t w){ // -// Sets the Ladder width (for turbo layers only) +// Sets the Stave width (for turbo layers only) // // Input: -// w : the ladder width +// w : the stave width // // Output: // @@ -2557,14 +2907,14 @@ void AliITSUv1Layer::SetLadderWidth(const Double_t w){ // if (fIsTurbo) - fLadderWidth = w; + fStaveWidth = w; else AliError("Not a Turbo layer"); } //________________________________________________________________________ -TGeoArb8 *AliITSUv1Layer::CreateLadderSide(const char *name, +TGeoArb8 *AliITSUv1Layer::CreateStaveSide(const char *name, Double_t dz, Double_t angle, Double_t xSign, Double_t L, Double_t H, Double_t l) { // @@ -2573,30 +2923,30 @@ TGeoArb8 *AliITSUv1Layer::CreateLadderSide(const char *name, // in AliITSv11GeometrySDD class by L.Gaudichet) // - // Create one half of the V shape corner of CF ladder + // Create one half of the V shape corner of CF stave - TGeoArb8 *cfLaddSide = new TGeoArb8(dz); - cfLaddSide->SetName(name); + TGeoArb8 *cfStavSide = new TGeoArb8(dz); + cfStavSide->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)), + cfStavSide->SetVertex(0, 0, 0); + cfStavSide->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)), + cfStavSide->SetVertex(4, 0, 0); + cfStavSide->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)); + cfStavSide->SetVertex(1, 0, -H); + cfStavSide->SetVertex(3, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfStavSide->SetVertex(5, 0, -H); + cfStavSide->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); + cfStavSide->SetVertex(1, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfStavSide->SetVertex(3, 0, -H); + cfStavSide->SetVertex(5, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle)); + cfStavSide->SetVertex(7, 0, -H); } - return cfLaddSide; + return cfStavSide; } //________________________________________________________________________