// -------------------------------
// Abstract base class for geometry construction per chamber.
//
-// Author: Eric Dumonteil (dumontei@cea.fr)
+
// This Builder is designed according to the enveloppe methode. The basic idea is to be able to allow moves
#include "AliMUONSlatGeometryBuilder.h"
#include "AliMUON.h"
-#include "AliMUONChamber.h"
+#include "AliMUONConstants.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONConstants.h"
//______________________________________________________________________________
AliMUONSlatGeometryBuilder::AliMUONSlatGeometryBuilder(AliMUON* muon)
- : AliMUONVGeometryBuilder("slat.dat",
- muon->Chamber(4).GetGeometry(),
- muon->Chamber(5).GetGeometry(),
- muon->Chamber(6).GetGeometry(),
- muon->Chamber(7).GetGeometry(),
- muon->Chamber(8).GetGeometry(),
- muon->Chamber(9).GetGeometry()),
+ : AliMUONVGeometryBuilder(4, 5, 6, 7, 8, 9),
fMUON(muon)
{
// Standard constructor
// sensitive area: 40*40 cm**2
const Float_t kSensLength = 40.;
const Float_t kSensHeight = 40.;
- const Float_t kSensWidth = 0.5; // according to TDR fig 2.120
+ const Float_t kSensWidth = AliMUONConstants::Pitch()*2;// 0.5 cm, according to TDR fig 2.120
const Int_t kSensMaterial = idGas;
// const Float_t kYoverlap = 1.5;
const Float_t kPanelHeight = kSensHeight;
const Float_t kPanelWidth = 2 * kCarbonWidth + kNomexWidth;
+ // Frame along the rounded (spacers) slats
+ const Float_t kRframeHeight = 2.00;
+
// spacer around the slat: 2 sticks along length,2 along height
// H: the horizontal ones
const Float_t kHframeLength = kPcbLength;
const Float_t kSlatHeight = kPcbHeight;
const Float_t kSlatWidth = kSensWidth + 2.*(kPcbWidth + kInsuWidth + kPanelWidth
+ kNomexBWidth); //replaced rohacell with Nomex Ch. Finck
- const Int_t kSlatMaterial = idAir;
+ // const Int_t kSlatMaterial = idAir;
const Float_t kDslatLength = -1.25; // position of the slat respect to the beam plane (half vertical spacer) Ch. Finck
Float_t zSlat = AliMUONConstants::DzSlat();// implemented Ch. Finck
Float_t dzCh = AliMUONConstants::DzCh();
iChamber1 = iChamber;
iChamber2 = &fMUON->Chamber(5);
- //iChamber1->GetGeometry()->SetDebug(kTRUE);
- //iChamber2->GetGeometry()->SetDebug(kTRUE);
+ //GetGeometry(4)->SetDebug(kTRUE);
+ //GetGeometry(5)->SetDebug(kTRUE);
- if (gAlice->GetModule("DIPO")) {
- // if DIPO is preset, the whole station will be placed in DDIP volume
- iChamber1->GetGeometry()->SetMotherVolume("DDIP");
- iChamber2->GetGeometry()->SetMotherVolume("DDIP");
+ if (!gAlice->GetModule("DIPO")) {
+ // Mother volume for each chamber in st3 are only defined if Dipole volue is there.
+ // Outer excess and inner recess for mother volume radius
+ // with respect to ROuter and RInner
+ Float_t dframepIn = kRframeHeight;
+ Float_t dframepOut= kVframeLength + 37.0; // Additional 37 cm gap is needed to wrap the corners of the slats
+ Float_t tpar[3];
+ Double_t dstation = ( (-AliMUONConstants::DefaultChamberZ(5)) -
+ (-AliMUONConstants::DefaultChamberZ(4)) ) /2.1;
+ tpar[0] = AliMUONConstants::Rmin(2)-dframepIn;
+ tpar[1] = AliMUONConstants::Rmax(2)+dframepOut;
+ tpar[2] = dstation;
+ gMC->Gsvolu("CH05", "TUBE", idAir, tpar, 3);
+ gMC->Gsvolu("CH06", "TUBE", idAir, tpar, 3);
}
-
-
// volumes for slat geometry (xx=5,..,10 chamber id):
// Sxx0 Sxx1 Sxx2 Sxx3 --> Slat Mother volumes
// SxxG --> Sensitive volume (gas)
Float_t dzCh3 = dzCh;
Float_t zSlat3 = (i%2 ==0)? -zSlat : zSlat; // seems not that zSlat3 = zSlat4 & 5 refering to plan PQ7EN345-6 ?
- sprintf(idSlatCh5,"LA%d",kNslats3-1+i);
- gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
- detElemId = 500 + i + kNslats3-1;
+ sprintf(idSlatCh5,"LA%d",i+kNslats3-1);
+ //gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
+ detElemId = 509 - (i + kNslats3-1-4);
GetEnvelopes(4)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh5,"LA%d",3*kNslats3-2+i);
- gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
- detElemId = 550 + i + kNslats3-1;
+ //gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
+ detElemId = 500 + (i + kNslats3-1-4);
GetEnvelopes(4)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh5,"LA%d",kNslats3-1-i);
- gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
- detElemId = 500 - i + kNslats3-1;
+ // gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
+ detElemId = 509 + (i + kNslats3-1-4);
GetEnvelopes(4)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot3",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh5,"LA%d",3*kNslats3-2-i);
- gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
- detElemId = 550 - i + kNslats3-1;
+ // gMC->Gsvolu(idSlatCh5,"BOX",kSlatMaterial,spar2,3);
+ detElemId = 518 - (i + kNslats3-1-4);
GetEnvelopes(4)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot4",90,180+angle,90,270+angle,0,0) );
}
sprintf(idSlatCh6,"LB%d",kNslats3-1+i);
- gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
- detElemId = 600 + i + kNslats3-1;
+ // gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
+ detElemId = 609 - (i + kNslats3-1-4);
GetEnvelopes(5)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh6,"LB%d",3*kNslats3-2+i);
- gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
- detElemId = 650 + i + kNslats3-1;
+ // gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
+ detElemId = 600 + (i + kNslats3-1-4);
GetEnvelopes(5)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh6,"LB%d",kNslats3-1-i);
- gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
- detElemId = 600 - i + kNslats3-1;
+ //gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
+ detElemId = 609 + (i + kNslats3-1-4);
GetEnvelopes(5)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot7",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh6,"LB%d",3*kNslats3-2-i);
- gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
- detElemId = 650 - i + kNslats3-1;
+ //gMC->Gsvolu(idSlatCh6,"BOX",kSlatMaterial,spar,3);
+ detElemId = 618 - (i + kNslats3-1-4);
GetEnvelopes(5)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
}
Double_t divpar[3];
Double_t dydiv = kSensHeight/ndiv;
Double_t ydiv = (kSensHeight - dydiv)/2.;
- Double_t rmin = 31.5; // Corrected in sep04 from PQ-LAT-SR2 de CEA-DSM-DAPNIA-SIS/BE ph HARDY 19-Oct-2002 slat
+ Double_t rmin = AliMUONConstants::Rmin(2);// Same radius for both chamber in St3
Double_t xdiv = 0.;
Float_t xvol;
Float_t yvol;
for (Int_t idiv = 0; idiv < ndiv; idiv++){
ydiv += dydiv;
xdiv = 0.;
- if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
+ if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos((ydiv-dydiv/2.)/rmin) );
divpar[0] = (kPcbLength - xdiv)/2.;
divpar[1] = dydiv/2. - epsilon;
divpar[2] = kSensWidth/2.;
// 9 box volumes are used to define the PCB closed to the beam pipe of the slat 122000SR1 of chamber 5 and 6 of St3
// Accordingly to plan PQ-LAT-SR1 of CEA-DSM-DAPNIA-SIS/BE ph HARDY 8-Oct-2002
// Rmin = 31.5 cm
- rmin = 31.5; //in cm
+ rmin = AliMUONConstants::Rmin(2); // Same radius for both chamber in St3
ndiv = 9;
dydiv = kSensHeight/ndiv; // Vertical size of the box volume approximating the rounded PCB
ydiv = -kSensHeight/2 + dydiv/2.; // Initializing vertical position of the volume from bottom
Float_t slatLength4[kNslats4];
+
+ // Mother volume for each chamber
+ // Outer excess and inner recess for mother volume radius
+ // with respect to ROuter and RInner
+ Float_t dframepIn = kRframeHeight;
+ Float_t dframepOut= kVframeLength + 40.0; // Additional 30 cm gap is needed to wrap the corners of the slats
+ Float_t tpar[3];
+ Double_t dstation = ( (-AliMUONConstants::DefaultChamberZ(7)) -
+ (-AliMUONConstants::DefaultChamberZ(6)) ) /2.2;
+ tpar[0] = AliMUONConstants::Rmin(3)-dframepIn;
+ tpar[1] = AliMUONConstants::Rmax(3)+dframepOut;
+ tpar[2] = dstation;
+ gMC->Gsvolu("CH07", "TUBE", idAir, tpar, 3);
+ gMC->Gsvolu("CH08", "TUBE", idAir, tpar, 3);
+
// create and position the slat (mother) volumes
char idSlatCh7[5];
Float_t zSlat4 = (i%2 ==0)? -zSlat : zSlat;
sprintf(idSlatCh7,"LC%d",kNslats4-1+i);
- gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
- detElemId = 700 + i + kNslats4-1;
+ //gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
+ detElemId = 713 - (i + kNslats4-1-6);
GetEnvelopes(6)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, ySlat41, -zSlat4 + dzCh4),
TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh7,"LC%d",3*kNslats4-2+i);
- gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
- detElemId = 750 + i + kNslats4-1;
+ //gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
+ detElemId = 700 + (i + kNslats4-1-6);
GetEnvelopes(6)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, ySlat41, zSlat4 - dzCh4),
TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh7,"LC%d",kNslats4-1-i);
- gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
- detElemId = 700 - i + kNslats4-1;
+ //gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
+ detElemId = 713 + (i + kNslats4-1-6);
GetEnvelopes(6)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, -ySlat41, -zSlat4 + dzCh4),
TGeoRotation("rot3",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh7,"LC%d",3*kNslats4-2-i);
- detElemId = 750 - i + kNslats4-1;
- gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
+ detElemId = 726 - (i + kNslats4-1-6);
+ //gMC->Gsvolu(idSlatCh7,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(6)->AddEnvelope(idSlatCh7, detElemId, true,
TGeoTranslation(-xSlat4, -ySlat41, zSlat4 - dzCh4),
TGeoRotation("rot4",90,180+angle,90,270+angle,0,0) );
}
sprintf(idSlatCh8,"LD%d",kNslats4-1+i);
- gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
- detElemId = 800 + i + kNslats4-1;
+ //gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
+ detElemId = 813 - (i + kNslats4-1-6);
GetEnvelopes(7)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, ySlat42, -zSlat4 + dzCh4),
TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh8,"LD%d",3*kNslats4-2+i);
- detElemId = 850 + i + kNslats4-1;
- gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
+ detElemId = 800 + (i + kNslats4-1-6);
+ //gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(7)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, ySlat42, zSlat4 - dzCh4),
TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh8,"LD%d",kNslats4-1-i);
- detElemId = 800 - i + kNslats4-1;
- gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
+ detElemId = 813 + (i + kNslats4-1-6);
+ //gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(7)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, -ySlat42, -zSlat4 + dzCh4),
TGeoRotation("rot7",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh8,"LD%d",3*kNslats4-2-i);
- detElemId = 850 - i + kNslats4-1;
- gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
+ detElemId = 826 - (i + kNslats4-1-6);
+ //gMC->Gsvolu(idSlatCh8,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(7)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, -ySlat42, zSlat4 - dzCh4),
TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
}
Double_t divpar[3];
Double_t dydiv = kSensHeight/ndiv;
Double_t ydiv = (kSensHeight - dydiv)/2.;
- Float_t rmin = 39.5;// Corrected in sep04 from PQ-LAT-NR3 de CEA-DSM-DAPNIA-SIS/BE ph HARDY 19-Oct-2002 slat
+ Float_t rmin = AliMUONConstants::Rmin(3); // Same radius for both chamber of St4
Float_t xdiv = 0.;
Float_t xvol;
Float_t yvol;
for (Int_t idiv = 0; idiv < ndiv; idiv++){
ydiv += dydiv;
xdiv = 0.;
- if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
+ if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos((ydiv-dydiv/2.)/rmin) );
divpar[0] = (kPcbLength - xdiv)/2.;
divpar[1] = dydiv/2. - epsilon;
divpar[2] = kSensWidth/2.;
const Float_t kYpos5[kNslats5] = {0., 38.2, 37.9, 37.6, 37.3, 37.05, 36.75};
Float_t slatLength5[kNslats5];
+ // Mother volume for each chamber
+ // Outer excess and inner recess for mother volume radius
+ // with respect to ROuter and RInner
+ Float_t dframepIn = kRframeHeight;
+ Float_t dframepOut= kVframeLength + 40.0; // Additional 40 cm gap is needed to wrap the corners of the slats
+ Float_t tpar[3];
+ Double_t dstation = ( (-AliMUONConstants::DefaultChamberZ(9)) -
+ (-AliMUONConstants::DefaultChamberZ(8)) ) /2.3;
+ tpar[0] = AliMUONConstants::Rmin(4)-dframepIn;
+ tpar[1] = AliMUONConstants::Rmax(4)+dframepOut;
+ tpar[2] = dstation;
+ gMC->Gsvolu("CH09", "TUBE", idAir, tpar, 3);
+ gMC->Gsvolu("CH10", "TUBE", idAir, tpar, 3);
+
// create and position the slat (mother) volumes
char idSlatCh9[5];
Float_t zSlat5 = (i%2 ==0)? -zSlat : zSlat;
sprintf(idSlatCh9,"LE%d",kNslats5-1+i);
- detElemId = 900 + i + kNslats5-1;
- gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
+ detElemId = 913 - (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh9,"LE%d",3*kNslats5-2+i);
- detElemId = 950 + i + kNslats5-1;
- gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
+ detElemId = 900 + (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh9,"LE%d",kNslats5-1-i);
- detElemId = 900 - i + kNslats5-1;
- gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
+ detElemId = 913 + (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot3",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh9,"LE%d",3*kNslats5-2-i);
- detElemId = 950 - i + kNslats5-1;
- gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
+ detElemId = 926 - (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot4",90,180+angle,90,270+angle,0,0) );
}
sprintf(idSlatCh10,"LF%d",kNslats5-1+i);
- detElemId = 1000 + i + kNslats5-1;
- gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
+ detElemId = 1013 - (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
sprintf(idSlatCh10,"LF%d",3*kNslats5-2+i);
- detElemId = 1050 + i + kNslats5-1;
- gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
+ detElemId = 1000 + (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
if (i > 0) {
sprintf(idSlatCh10,"LF%d",kNslats5-1-i);
- detElemId = 1000 - i + kNslats5-1;
- gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
+ detElemId = 1013 + (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot7",90,angle,90,270+angle,180,0) );
sprintf(idSlatCh10,"LF%d",3*kNslats5-2-i);
- detElemId = 1050 - i + kNslats5-1;
- gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
+ detElemId = 1026 - (i + kNslats5-1-6);
+ //gMC->Gsvolu(idSlatCh10,"BOX",kSlatMaterial,spar,3);
GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
}
Double_t divpar[3];
Double_t dydiv = kSensHeight/ndiv;
Double_t ydiv = (kSensHeight - dydiv)/2.;
- Float_t rmin = 39.5;
+ Float_t rmin = AliMUONConstants::Rmin(4);
Float_t xdiv = 0.;
Float_t xvol;
Float_t yvol;
for (Int_t idiv = 0; idiv < ndiv; idiv++){
ydiv += dydiv;
xdiv = 0.;
- if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
+ if (ydiv < rmin) xdiv = rmin * TMath::Sin( TMath::ACos((ydiv-dydiv/2.)/rmin) );
divpar[0] = (kPcbLength - xdiv)/2.;
divpar[1] = dydiv/2. - epsilon;
divpar[2] = kSensWidth/2.;
//______________________________________________________________________________
void AliMUONSlatGeometryBuilder::SetTransformations()
{
-// Defines the transformations for the station2 chambers.
+// Defines the transformations for the station345 chambers.
// ---
- AliMUONChamber* iChamber1 = &fMUON->Chamber(4);
- Double_t zpos1 = - iChamber1->Z();
- iChamber1->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos1));
-
- AliMUONChamber* iChamber2 = &fMUON->Chamber(5);
- Double_t zpos2 = - iChamber2->Z();
- iChamber2->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos2));
-
- iChamber1 = &fMUON->Chamber(6);
- zpos1 = - iChamber1->Z();
- iChamber1->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos1));
-
- iChamber2 = &fMUON->Chamber(7);
- zpos2 = - iChamber2->Z();
- iChamber2->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos2));
-
- iChamber1 = &fMUON->Chamber(8);
- zpos1 = - iChamber1->Z();
- iChamber1->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos1));
-
- iChamber2 = &fMUON->Chamber(9);
- zpos2 = - iChamber2->Z();
- iChamber2->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos2));
+ if (gAlice->GetModule("DIPO")) {
+ // if DIPO is preset, the whole station will be placed in DDIP volume
+ SetMotherVolume(4, "DDIP");
+ SetMotherVolume(5, "DDIP");
+ SetVolume(4, "CH05", true);
+ SetVolume(5, "CH06", true);
+ }
+ else {
+ SetVolume(4, "CH05");
+ SetVolume(5, "CH06");
+ }
+
+ if (gAlice->GetModule("SHIL")) {
+ SetMotherVolume(6, "YOUT2");
+ SetMotherVolume(7, "YOUT2");
+ SetMotherVolume(8, "YOUT2");
+ SetMotherVolume(9, "YOUT2");
+ }
+
+ SetVolume(6, "CH07");
+ SetVolume(7, "CH08");
+ SetVolume(8, "CH09");
+ SetVolume(9, "CH10");
+
+// Stations 345 are not perpendicular to the beam axis
+// See AliMUONConstants class
+ TGeoRotation st345inclination("rot99");
+ st345inclination.RotateX(AliMUONConstants::St345Inclination());
+
+ Double_t zpos1= - AliMUONConstants::DefaultChamberZ(4);
+ SetTransformation(4, TGeoTranslation(0., 0., zpos1), st345inclination);
+
+ zpos1= - AliMUONConstants::DefaultChamberZ(5);
+ SetTransformation(5, TGeoTranslation(0., 0., zpos1), st345inclination);
+
+ zpos1 = - AliMUONConstants::DefaultChamberZ(6);
+ SetTransformation(6, TGeoTranslation(0., 0., zpos1), st345inclination);
+
+ zpos1 = - AliMUONConstants::DefaultChamberZ(7);
+ SetTransformation(7, TGeoTranslation(0., 0., zpos1), st345inclination );
+
+ zpos1 = - AliMUONConstants::DefaultChamberZ(8);
+ SetTransformation(8, TGeoTranslation(0., 0., zpos1), st345inclination);
+
+ zpos1 = - AliMUONConstants::DefaultChamberZ(9);
+ SetTransformation(9, TGeoTranslation(0., 0., zpos1), st345inclination);
}