Float_t xxmax = (kBframeLength - kNulocLength)/2.;
Int_t index=0;
Int_t* fStations = new Int_t[5];
- for (Int_t i=0; i<5; i++) fStations[i] = 1;
+ for (Int_t iSt=0; iSt<5; iSt++) fStations[iSt] = 1;
fStations[2] = 1;
if (fStations[2])
Float_t senspar2[3] = { tlength/2., senspar[1], senspar[2]};
Float_t hFramepar2[3] = { tlength/2., hFramepar[1], hFramepar[2]};
Float_t bFramepar2[3] = { tlength/2., bFramepar[1], bFramepar[2]};
- Float_t *dum=0;
Float_t pcbDLength3 = (kPcbLength - tlength);
// For rounded pcb of central slat
// create and position the slat (mother) volumes
- char idSlatCh5[5];
- char idSlatCh6[5];
+ char idSlatCh5[6];
+ char idSlatCh6[6];
Float_t xSlat3;
Float_t ySlat3 = 0;
- Float_t angle = 0.;
+ angle = 0.;
+
Float_t spar2[3];
for (i = 0; i < kNslats3; i++){
spar2[1] = spar[1];
spar2[2] = spar[2];
Float_t dzCh3 = dzCh;
- Float_t zSlat3 = (i%2 ==0)? -zSlat : zSlat; // seems not that zSlat3 = zSlat4 & 5 refering to plan PQ7EN345-6 ?
+ Float_t dzSlat3 = -0.25; // see drawing PQ7EN345-6 (Delta_slat=80mm instead 85mm)
+ Float_t zSlat3 = (i%2 ==0)? -(zSlat+dzSlat3) : (zSlat+dzSlat3); // seems not that zSlat3 = zSlat4 & 5 refering to plan PQ7EN345-6 ? -> Indeed, fixed J.C.
- sprintf(idSlatCh5,"LA%d",i+kNslats3-1);
+ sprintf(idSlatCh5,"SLA%d",i+kNslats3-1);
detElemId = 509 - (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId == 508 || detElemId == 509) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
+ TGeoRotation("rot1",90,180+angle,90,90+angle,180,0) );
+ else {
+ if (detElemId % 2 == 0)
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
- TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
- else
+ TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot1",90,angle,90,270+angle,180,0) );
-
- sprintf(idSlatCh5,"LA%d",3*kNslats3-2+i);
+ }
+
+ sprintf(idSlatCh5,"SLA%d",3*kNslats3-2+i);
detElemId = 500 + (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId == 500 || detElemId == 501) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
+ TGeoRotation("rot2",90,angle,90,90+angle,0,0) );
+ else {
+ if (detElemId % 2 == 1)
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
- TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
- else
+ TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
- TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
+ TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
+ }
if (i > 0) {
- sprintf(idSlatCh5,"LA%d",kNslats3-1-i);
+ sprintf(idSlatCh5,"SLA%d",kNslats3-1-i);
detElemId = 509 + (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 510)
+ if (detElemId % 2 == 0 ) {
+ if (detElemId == 510) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
+ TGeoRotation("rot3",90,180+angle,90,270+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot3",90,angle,90,90+angle,0,0) );
+ }
else
GetEnvelopes(moduleId)->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);
+ sprintf(idSlatCh5,"SLA%d",3*kNslats3-2-i);
detElemId = 518 - (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 517)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 517) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
+ TGeoRotation("rot4",90,angle,90,270+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh5, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot4",90,180+angle,90,90+angle,180,0) );
+ }
else
GetEnvelopes(moduleId)->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);
+ sprintf(idSlatCh6,"SLB%d",kNslats3-1+i);
detElemId = 609 - (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId == 608 || detElemId == 609) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
+ TGeoRotation("rot5",90,180+angle,90,90+angle,180,0));
+ else {
+ if (detElemId % 2 == 0)
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
- TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
- else
+ TGeoRotation("rot5",90,angle,90,90+angle,0,0));
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, ySlat3, -zSlat3 + dzCh3),
- TGeoRotation("rot5",90,angle,90,270+angle,180,0) );
+ TGeoRotation("rot5",90,angle,90,270+angle,180,0));
+ }
- sprintf(idSlatCh6,"LB%d",3*kNslats3-2+i);
+ sprintf(idSlatCh6,"SLB%d",3*kNslats3-2+i);
detElemId = 600 + (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
- GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
- TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
- else
+ if (detElemId == 600 || detElemId == 601) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
+ TGeoRotation("rot6",90,angle,90,90+angle,0,0) );
+ else {
+ if (detElemId % 2 == 1)
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, ySlat3, zSlat3 - dzCh3),
+ TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
+ }
if (i > 0) {
- sprintf(idSlatCh6,"LB%d",kNslats3-1-i);
+ sprintf(idSlatCh6,"SLB%d",kNslats3-1-i);
detElemId = 609 + (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 610)
+ if (detElemId % 2 == 0 ) {
+ if (detElemId == 610) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
+ TGeoRotation("rot7",90,180+angle,90,270+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(xSlat3, -ySlat3, -zSlat3 + dzCh3),
TGeoRotation("rot7",90,angle,90,90+angle,0,0) );
+ }
else
GetEnvelopes(moduleId)->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);
+
+ sprintf(idSlatCh6,"SLB%d",3*kNslats3-2-i);
detElemId = 618 - (i + kNslats3-1-4);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 617)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 617) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
+ TGeoRotation("rot8",90,angle,90,270+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot8",90,180+angle,90,90+angle,180,0) );
+ }
else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh6, detElemId, true, TGeoTranslation(-xSlat3, -ySlat3, zSlat3 - dzCh3),
TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
trCTube->RegisterYourself();
TGeoTranslation* trDTube = new TGeoTranslation("trDTube", -(kPcbLength+kVframeLength)/2., -kYpos3[1], 0.);
trDTube->RegisterYourself();
+ TGeoTranslation* trCBTube = new TGeoTranslation("trCBTube", 0., ( kPcbHeight - kBframeHeight ) / 2., 0.);
+ trCBTube->Add(trCTube);
+ trCBTube->RegisterYourself();
+ TGeoTranslation* trDBTube = new TGeoTranslation("trDBTube", 0., ( kPcbHeight - kBframeHeight ) / 2., 0.);
+ trDBTube->Add(trDTube);
+ trDBTube->RegisterYourself();
Float_t cPhi2 = (TMath::Pi()/2.-TMath::ACos((kSensHeight/2.)/(AliMUONConstants::Rmin(2)-kRframeLength)));
TGeoBBox *boxCCut = new TGeoBBox("boxCCut",(cFramepar3[1]-cFramepar3[0]*TMath::Cos(cPhi2))/2., hFramepar3[1], cFramepar3[2]+0.001);
TString compOperation(csName);
compOperation+="-tubeCut:tr";
compOperation+=slatType[iSlatType];
- compOperation+="Tube";
if (strstr(volName,"B")){
- // Displacement
- TGeoTranslation* trB = new TGeoTranslation("trB", 0., -( kPcbHeight - kBframeHeight ) / 2., 0.);
- trB->RegisterYourself();
- compOperation.ReplaceAll("-tubeCut",":trB-tubeCut");
+ compOperation+="B";
}
- compName=Form("composite%d%c",iCh,volLetter[iVol]);
+ compOperation+="Tube";
+ compName=Form("composite%c%d%c",slatType[iSlatType],iCh,volLetter[iVol]);
composite[lIndex] = new TGeoCompositeShape(compName, compOperation.Data());
-
// Reset shape to volume
mVol->SetShape((TGeoShape*)composite[lIndex]);
}
if (i == 0 && quadrant == 2) continue;
if (i == 0 && quadrant == 4) continue;
- sprintf(idSlatCh5,"LA%d",ConvertSlatNum(i,quadrant,kNslats3-1));
- sprintf(idSlatCh6,"LB%d",ConvertSlatNum(i,quadrant,kNslats3-1));
+ sprintf(idSlatCh5,"SLA%d",ConvertSlatNum(i,quadrant,kNslats3-1));
+ sprintf(idSlatCh6,"SLB%d",ConvertSlatNum(i,quadrant,kNslats3-1));
Int_t moduleSlatCh5 = GetModuleId(idSlatCh5);
Int_t moduleSlatCh6 = GetModuleId(idSlatCh6);
Float_t xvFrame = (slatLength3[i] - kVframeLength)/2.;
(2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
}
+ // Different rotation due to new mapping convention
if (i == 0 || i == 1) { // first vertical spacers
GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05V", idSlatCh5,
- (2*i-1)*10+quadrant,TGeoTranslation(xvFrame2,0.,0.));
+ (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame2,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06V", idSlatCh6,
- (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
+ (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
if (i == 0) { // rounded spacer for central slat (J.C.)
GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5D", idSlatCh5,
- (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
+ (2*i)*10+quadrant,TGeoTranslation(xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6D", idSlatCh6,
- (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
+ (2*i)*10+quadrant,TGeoTranslation(xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
}
if (i == 1) { // rounded + vertical spacer for rounded slat (J.C.)
GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5D", idSlatCh5,
- (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos3[1],0.));
+ (2*i)*10+quadrant,TGeoTranslation(xvFrame,-kYpos3[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6D", idSlatCh6,
- (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos3[1],0.));
+ (2*i)*10+quadrant,TGeoTranslation(xvFrame,-kYpos3[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
}
}
// position the panels and the insulating material
for (j = 0; j < kNPCB3[i]; j++){
- index++;
- Float_t xx = kSensLength * (-kNPCB3[i]/2. + j + 0.5);
+ index++;
+ xx = kSensLength * (-kNPCB3[i]/2. + j + 0.5);
Float_t xx2 = xx - pcbDLength3/2.;
Float_t xx3 = xx + (kSensLength-csvPcbLength)/2.;
Float_t zPanel = spar[2] - nomexbpar[2];
- if (i==0 && j==0){ // Rounded pcb of central slat (SR1, NR1)
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5X", idSlatCh5, 2*index-1,TGeoTranslation(xx3,0.,zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5X", idSlatCh5, 2*index,TGeoTranslation(xx3,0.,-zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5I", idSlatCh5, index,TGeoTranslation(xx3,0.,0.));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6X", idSlatCh6, 2*index-1,TGeoTranslation(xx3,0.,zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6X", idSlatCh6, 2*index,TGeoTranslation(xx3,0.,-zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6I", idSlatCh6, index,TGeoTranslation(xx3,0.,0.));
- } else {
- if (i==1 && j==0){ // Rounded pcb of rounded slats (SR2. NR2)
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5X", idSlatCh5, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5X", idSlatCh5, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5I", idSlatCh5, index,TGeoTranslation(xx,0.,0.));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6X", idSlatCh6, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6X", idSlatCh6, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6I", idSlatCh6, index,TGeoTranslation(xx,0.,0.));
- } else {
- if ( (i == 0 || i == 1 || i == 2) && j == kNPCB3[i]-1) { // 1 pcb is shortened by 5cm
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index-1,TGeoTranslation(xx2,0.,zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index,TGeoTranslation(xx2,0.,-zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5I", idSlatCh5, index,TGeoTranslation(xx2,0.,0.));
- } else {
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05I", idSlatCh5, index,TGeoTranslation(xx,0.,0.));
- }
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06I", idSlatCh6, index,TGeoTranslation(xx,0.,0.));
+ if (i==0 || i==1) { // Different rotation due to new mapping convention
+ if (i==0 && j==0) { // Rounded pcb of central slat (SR1, NR1)
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5X", idSlatCh5, 2*index-1,TGeoTranslation(-xx3,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5X", idSlatCh5, 2*index,TGeoTranslation(-xx3,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SC5I", idSlatCh5, index,TGeoTranslation(-xx3,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6X", idSlatCh6, 2*index-1,TGeoTranslation(-xx3,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6X", idSlatCh6, 2*index,TGeoTranslation(-xx3,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SC6I", idSlatCh6, index,TGeoTranslation(-xx3,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
+ else {
+ if (i==1 && j==0){ // Rounded pcb of rounded slats (SR2. NR2)
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5X", idSlatCh5, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5X", idSlatCh5, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SD5I", idSlatCh5, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6X", idSlatCh6, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6X", idSlatCh6, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("SD6I", idSlatCh6, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
+ else {
+ if (j == kNPCB3[i]-1) { // 1 pcb is shortened by 5cm
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index-1,TGeoTranslation(-xx2,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index,TGeoTranslation(-xx2,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5I", idSlatCh5, index,TGeoTranslation(-xx2,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
+ else {
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05I", idSlatCh5, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06I", idSlatCh6, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
}
}
+ else {
+ if (i==2 && j == kNPCB3[i]-1) { // 1 pcb is shortened by 5cm
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index-1,TGeoTranslation(xx2,0.,zPanel));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5X", idSlatCh5, 2*index,TGeoTranslation(xx2,0.,-zPanel));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("SB5I", idSlatCh5, index,TGeoTranslation(xx2,0.,0.));
+ } else {
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index-1,TGeoTranslation(xx,0.,zPanel));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05X", idSlatCh5, 2*index,TGeoTranslation(xx,0.,-zPanel));
+ GetEnvelopes(moduleSlatCh5)->AddEnvelopeConstituent("S05I", idSlatCh5, index,TGeoTranslation(xx,0.,0.));
+ }
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index-1,TGeoTranslation(xx,0.,zPanel));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06X", idSlatCh6, 2*index,TGeoTranslation(xx,0.,-zPanel));
+ GetEnvelopes(moduleSlatCh6)->AddEnvelopeConstituent("S06I", idSlatCh6, index,TGeoTranslation(xx,0.,0.));
+ }
}
}
}
+
// position the nomex volume inside the panel volume
gMC->Gspos("S05N",1,"S05C",0.,0.,0.,0,"ONLY");
gMC->Gspos("S05B",2,"S05P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("SB5B",1,"SB5P",0., yborder,0.,0,"ONLY");
gMC->Gspos("SB5B",2,"SB5P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SC5B",1,"SC5P",0., 0.,0.,0,"ONLY");
- gMC->Gspos("SC5B",2,"SC5P",0., 0.,0.,rotB,"ONLY");
- gMC->Gspos("SD5B",1,"SD5P",0., 0.,0.,0,"ONLY");
+ gMC->Gspos("SC5B",1,"SC5P",0., yborder,0.,rotB,"ONLY");
+ gMC->Gspos("SC5B",2,"SC5P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("S05B",1,"SD5P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD5B",1,"SD5P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("S06B",1,"S06P",0., yborder,0.,0,"ONLY");
gMC->Gspos("S06B",2,"S06P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SC6B",1,"SC6P",0., 0.,0.,0,"ONLY");
- gMC->Gspos("SC6B",2,"SC6P",0., 0.,0.,rotB,"ONLY");
- gMC->Gspos("SD6B",1,"SD6P",0., 0.,0.,0,"ONLY");
+ gMC->Gspos("SC6B",1,"SC6P",0., yborder,0.,rotB,"ONLY");
+ gMC->Gspos("SC6B",2,"SC6P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("S06B",1,"SD6P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD6B",1,"SD6P",0.,-yborder,0.,0,"ONLY");
// create the NULOC volume and position it in the horizontal frame
gMC->Gsvolu("S05E","BOX",kNulocMaterial,nulocpar,3);
gMC->Gspos("S05E",2*index ,"SB5B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
}
if (xx > -xxmax3 && xx< xxmax3) {
- gMC->Gspos("S05E",2*index-1,"SC5B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2., 0, "ONLY");
- gMC->Gspos("S05E",2*index ,"SC5B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2., 0, "ONLY");
- gMC->Gspos("S06E",2*index-1,"SC6B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S06E",2*index ,"SC6B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S05E",2*index-1,"SC5B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2., 0, "ONLY");
+ gMC->Gspos("S05E",2*index ,"SC5B", xx, 0., kBframeWidth/2.- kNulocWidth/2., 0, "ONLY");
+ gMC->Gspos("S06E",2*index-1,"SC6B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S06E",2*index ,"SC6B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
}
if (xx > xxmax4 && xx< xxmax) {
- gMC->Gspos("S05E",2*index-1,"SD5B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S05E",2*index ,"SD5B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S06E",2*index-1,"SD6B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S06E",2*index ,"SD6B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S05E",2*index-1,"SD5B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S05E",2*index ,"SD5B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S06E",2*index-1,"SD6B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S06E",2*index ,"SD6B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
}
- }
+ }
//
//Geometry of the support pannel Verticla length 3.62m, horizontal length 1.62m, internal radius dMotherInner of SC05 and SC06 (F. Orsini, Saclay)
cablepar6[0] = supporthlengthCh6/2.;
lCableX6 = 0.;
lCableDY = (kYpos3[i+1]+kYpos3[i+2])/2.-cablepar[1]; // half way between 2 slats on same side
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
if(i==0){ // central slat is shorter (rounded)
cablepar[0] -= (kPcbLength-csvPcbLength)/2.;
lCableX = (kPcbLength-csvPcbLength)/2.;
cablepar6[0] = (supporthlengthCh6-kPcbLength-kVframeLength)/2.;
lCableX6 = (kPcbLength+kVframeLength)/2.;
lCableDY = (kYpos3[i+1]+kYpos3[i+2])/2.-cablepar[1]; // half way between 2 slats on same side
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S05L",100*i+cIndex++,"S05S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S05L",100*i+cIndex++,"S05S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar6,3);
else {
lCableDY = (kYpos3[i+1]+kYpos3[i+2])/2.-cablepar[1];
}
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
+
if (i<=2){ // shortened pcb
cablepar[0] += pcbDLength3/2.;
lCableX -= pcbDLength3/2.;
Float_t rFramepar4[5] = { AliMUONConstants::Rmin(3)-kRframeLength, AliMUONConstants::Rmin(3), kRframeWidth, rPhi1, rPhi2};
Float_t vrFrameHeight = hFramepar[1]+kYpos41[1]-AliMUONConstants::Rmin(3)+kRframeLength;
- char idSlatCh7[5];
- char idSlatCh8[5];
+ char idSlatCh7[6];
+ char idSlatCh8[6];
Float_t xSlat4;
Float_t ySlat41 = 0;
Float_t ySlat42 = 0;
Float_t dzCh4 = dzCh;
Float_t zSlat4 = (i%2 ==0)? -zSlat : zSlat;
- sprintf(idSlatCh7,"LC%d",kNslats4-1+i);
+ sprintf(idSlatCh7,"SLC%d",kNslats4-1+i);
detElemId = 713 - (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 712) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, ySlat41, -zSlat4 + dzCh4),
- TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
+ TGeoRotation("rot1",90,180+angle,90,90+angle,180,0) );
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, ySlat41, -zSlat4 + dzCh4),
+ TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
+ }
else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, ySlat41, -zSlat4 + dzCh4),
TGeoRotation("rot1",90,angle,90,270+angle,180,0) );
- sprintf(idSlatCh7,"LC%d",3*kNslats4-2+i);
+ sprintf(idSlatCh7,"SLC%d",3*kNslats4-2+i);
detElemId = 700 + (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 701) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, ySlat41, zSlat4 - dzCh4),
- TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
- else
+ TGeoRotation("rot2",90,angle,90,90+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, ySlat41, zSlat4 - dzCh4),
- TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
+ TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, ySlat41, zSlat4 - dzCh4),
+ TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
+
if (i > 0) {
- sprintf(idSlatCh7,"LC%d",kNslats4-1-i);
+ sprintf(idSlatCh7,"SLC%d",kNslats4-1-i);
detElemId = 713 + (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 714)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 714) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, -ySlat41, -zSlat4 + dzCh4),
+ TGeoRotation("rot3",90,180+angle,90,270+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(xSlat4, -ySlat41, -zSlat4 + dzCh4),
TGeoRotation("rot3",90,angle,90,90+angle,0,0) );
+ }
else
GetEnvelopes(moduleId)->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);
+
+ sprintf(idSlatCh7,"SLC%d",3*kNslats4-2-i);
detElemId = 726 - (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 725 )
+ if (detElemId % 2 == 1) {
+ if (detElemId == 725) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, -ySlat41, zSlat4 - dzCh4),
- TGeoRotation("rot4",90,180+angle,90,90+angle,180,0) );
+ TGeoRotation("rot4",90,angle,90,270+angle,180,0) );
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, -ySlat41, zSlat4 - dzCh4),
+ TGeoRotation("rot4",90,180+angle,90,90+angle,180,0) );
+ }
else
- GetEnvelopes(moduleId)->AddEnvelope(idSlatCh7, detElemId, true, TGeoTranslation(-xSlat4, -ySlat41, zSlat4 - dzCh4),
- TGeoRotation("rot4",90,180+angle,90,270+angle,0,0) );
+ GetEnvelopes(moduleId)->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);
+ sprintf(idSlatCh8,"SLD%d",kNslats4-1+i);
detElemId = 813 - (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 812) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, ySlat42, -zSlat4 + dzCh4),
- TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
- else
+ TGeoRotation("rot5",90,180+angle,90,90+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, ySlat42, -zSlat4 + dzCh4),
- TGeoRotation("rot5",90,angle,90,270+angle,180,0) );
+ TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, ySlat42, -zSlat4 + dzCh4),
+ TGeoRotation("rot5",90,angle,90,270+angle,180,0) );
- sprintf(idSlatCh8,"LD%d",3*kNslats4-2+i);
+ sprintf(idSlatCh8,"SLD%d",3*kNslats4-2+i);
detElemId = 800 + (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 801) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, ySlat42, zSlat4 - dzCh4),
- TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
- else
+ TGeoRotation("rot6",90,angle,90,90+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, ySlat42, zSlat4 - dzCh4),
- TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
+ TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, ySlat42, zSlat4 - dzCh4),
+ TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
if (i > 0) {
- sprintf(idSlatCh8,"LD%d",kNslats4-1-i);
+ sprintf(idSlatCh8,"SLD%d",kNslats4-1-i);
detElemId = 813 + (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 814)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 814) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, -ySlat42, -zSlat4 + dzCh4),
+ TGeoRotation("rot7",90,180+angle,90,270+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, -ySlat42, -zSlat4 + dzCh4),
TGeoRotation("rot7",90,angle,90,90+angle,0,0) );
+ }
else
- GetEnvelopes(moduleId)->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);
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(xSlat4, -ySlat42, -zSlat4 + dzCh4),
+ TGeoRotation("rot7",90,angle,90,270+angle,180,0) );
+
+ sprintf(idSlatCh8,"SLD%d",3*kNslats4-2-i);
detElemId = 826 - (i + kNslats4-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 825 )
+ if (detElemId % 2 == 1) {
+ if (detElemId == 825 ) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, -ySlat42, zSlat4 - dzCh4),
- TGeoRotation("rot8",90,180+angle,90,90+angle,180,0) );
- else
+ TGeoRotation("rot8",90,angle,90,270+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, -ySlat42, zSlat4 - dzCh4),
- TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
-
+ TGeoRotation("rot8",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh8, detElemId, true, TGeoTranslation(-xSlat4, -ySlat42, zSlat4 - dzCh4),
+ TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
+
}
}
// Displacement
TGeoTranslation* trDTube4 = new TGeoTranslation("trDTube4", -(kPcbLength+kVframeLength)/2., -kYpos41[1], 0.);
trDTube4->RegisterYourself();
+ TGeoTranslation* trDBTube4 = new TGeoTranslation("trDBTube4", 0., ( kPcbHeight - kBframeHeight ) / 2., 0.);
+ trDBTube4->Add(trDTube4);
+ trDBTube4->RegisterYourself();
+
TObjArray composite4(nSlatType*((nVol+1)*2));
new TGeoBBox("box4DCut",(kPcbLength+kVframeLength)/2., hFramepar[1], vFramepar[2]+0.001);
// Displacement
TString compOperation(csName);
compOperation+="-tube4Cut:tr";
compOperation+=slatType[iSlatType];
- compOperation+="Tube4";
if (strstr(volName,"B")){
- // Displacement
- Float_t posXb = 0.;
- Float_t posYb = -( kPcbHeight - kBframeHeight ) / 2.;
- Float_t posZb = 0.;
- TGeoTranslation* trB = new TGeoTranslation("trB", posXb, posYb, posZb);
- trB->RegisterYourself();
- compOperation.ReplaceAll("-tube4Cut",":trB-tube4Cut");
- }
- compName=Form("composite4%d%c",iCh,volLetter[iVol]);
+ compOperation+="B";
+ }
+ compOperation+="Tube4";
+ compName=Form("composite4%c%d%c",slatType[iSlatType],iCh,volLetter[iVol]);
composite4[lIndex] = new TGeoCompositeShape(compName, compOperation.Data());
// Reset shape to volume
if (i == 0 && quadrant == 2) continue;
if (i == 0 && quadrant == 4) continue;
- sprintf(idSlatCh7,"LC%d",ConvertSlatNum(i,quadrant,kNslats4-1));
- sprintf(idSlatCh8,"LD%d",ConvertSlatNum(i,quadrant,kNslats4-1));
+ sprintf(idSlatCh7,"SLC%d",ConvertSlatNum(i,quadrant,kNslats4-1));
+ sprintf(idSlatCh8,"SLD%d",ConvertSlatNum(i,quadrant,kNslats4-1));
Int_t moduleSlatCh7 = GetModuleId(idSlatCh7);
Int_t moduleSlatCh8 = GetModuleId(idSlatCh8);
GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07V", idSlatCh7, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08V", idSlatCh8, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08V", idSlatCh8, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
- } else { // Vertical and Rounded+Vertical spacer
- GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07V", idSlatCh7, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
- GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7D", idSlatCh7, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos41[1],0.));
- GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08V", idSlatCh8, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
- GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8D", idSlatCh8, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos42[1],0.));
+ } else { // Vertical and Rounded+Vertical spacer - Different rotation due to new mapping convention
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07V", idSlatCh7, (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7D", idSlatCh7, (2*i)*10+quadrant,TGeoTranslation(xvFrame,-kYpos41[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08V", idSlatCh8, (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8D", idSlatCh8, (2*i)*10+quadrant,TGeoTranslation(+xvFrame,-kYpos42[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
}
// position the panels and the insulating material
for (j = 0; j < kNPCB4[i]; j++){
index++;
- Float_t xx = kSensLength * (-kNPCB4[i]/2.+j+.5);
+ xx = kSensLength * (-kNPCB4[i]/2.+j+.5);
Float_t zPanel = spar[2] - nomexbpar[2];
- if (i==1 && j==0){ // Rounded pcb of rounded slat
- GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7X", idSlatCh7, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7X", idSlatCh7, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7I", idSlatCh7, index,TGeoTranslation(xx,0.,0.));
- GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8X", idSlatCh8, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8X", idSlatCh8, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8I", idSlatCh8, index,TGeoTranslation(xx,0.,0.));
+ if (i==1) { // Different rotation due to new mapping convention
+ if (j==0){ // Rounded pcb of rounded slat
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7X", idSlatCh7, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7X", idSlatCh7, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("SD7I", idSlatCh7, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8X", idSlatCh8, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8X", idSlatCh8, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("SD8I", idSlatCh8, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ } else {
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07X", idSlatCh7, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07X", idSlatCh7, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07I", idSlatCh7, index,TGeoTranslation(-xx,0.,0.));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08X", idSlatCh8, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08X", idSlatCh8, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh8)->AddEnvelopeConstituent("S08I", idSlatCh8, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
} else {
GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07X", idSlatCh7, 2*index-1,TGeoTranslation(xx,0.,zPanel));
GetEnvelopes(moduleSlatCh7)->AddEnvelopeConstituent("S07X", idSlatCh7, 2*index,TGeoTranslation(xx,0.,-zPanel));
Float_t yborder = ( kPcbHeight - kBframeHeight ) / 2.;
gMC->Gspos("S07B",1,"S07P",0., yborder,0.,0,"ONLY");
gMC->Gspos("S07B",2,"S07P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SD7B",1,"SD7P",0., 0.,0.,0,"ONLY");
- gMC->Gspos("S07B",1,"SD7P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("S07B",1,"SD7P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD7B",1,"SD7P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("S08B",1,"S08P",0., yborder,0.,0,"ONLY");
gMC->Gspos("S08B",2,"S08P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SD8B",1,"SD8P",0., 0.,0.,0,"ONLY");
gMC->Gspos("S08B",1,"SD8P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD8B",1,"SD8P",0.,-yborder,0.,0,"ONLY");
// create the NULOC volume and position it in the horizontal frame
gMC->Gspos("S08E",2*index ,"S08B", xx, 0., kBframeWidth/2. - kNulocWidth/2, 0, "ONLY");
}
if (xx > xxmax4 && xx< xxmax) {
- gMC->Gspos("S07E",2*index-1,"SD7B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S07E",2*index ,"SD7B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S08E",2*index-1,"SD8B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S08E",2*index ,"SD8B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S07E",2*index-1,"SD7B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S07E",2*index ,"SD7B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S08E",2*index-1,"SD8B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S08E",2*index ,"SD8B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
}
//
lCableX = kXpos4[i]/2.;
lCableDY = (kYpos41[i+1]+kYpos41[i+2])/2.-cablepar[1];
lCableDY8 = (kYpos42[i+1]+kYpos42[i+2])/2.-cablepar[1];
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,lCableY8+lCableDY8,lCableZ,0,"ONLY",cablepar,3);
lCableX = (kPcbLength+kVframeLength)/2.;
lCableDY = (kYpos41[i+1]+kYpos41[i+2])/2.-cablepar[1]; // half way between 2 slats on same side
lCableDY8 = (kYpos42[i+1]+kYpos42[i+2])/2.-cablepar[1]; // half way between 2 slats on same side
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,lCableY8+lCableDY8,lCableZ,0,"ONLY",cablepar,3);
lCableDY = (kYpos41[i+1]+kYpos41[i+2])/2.-cablepar[1];
lCableDY8 = (kYpos42[i+1]+kYpos42[i+2])/2.-cablepar[1];
}
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S07L",10*i+cIndex++,"S07S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,lCableY8+lCableDY8,lCableZ,0,"ONLY",cablepar,3);
Float_t rFramepar5[5] = { AliMUONConstants::Rmin(4)-kRframeLength, AliMUONConstants::Rmin(4), kRframeWidth, rPhi1, rPhi2};
Float_t vrFrameHeight = hFramepar[1]+kYpos5[1]-AliMUONConstants::Rmin(4)+kRframeLength;
- char idSlatCh9[5];
- char idSlatCh10[5];
+ char idSlatCh9[6];
+ char idSlatCh10[6];
Float_t xSlat5;
Float_t ySlat5 = 0;
angle = 0.;
Float_t dzCh5 = dzCh;
Float_t zSlat5 = (i%2 ==0)? -zSlat : zSlat;
- sprintf(idSlatCh9,"LE%d",kNslats5-1+i);
+ sprintf(idSlatCh9,"SLE%d",kNslats5-1+i);
detElemId = 913 - (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 912) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot1",90,180+angle,90,90+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot1",90,angle,90,90+angle,0,0) );
+ }
else
- GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
- TGeoRotation("rot1",90,angle,90,270+angle,180,0) );
- sprintf(idSlatCh9,"LE%d",3*kNslats5-2+i);
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot1",90,angle,90,270+angle,180,0) );
+ sprintf(idSlatCh9,"SLE%d",3*kNslats5-2+i);
detElemId = 900 + (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 901) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
- TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
- else
+ TGeoRotation("rot2",90,angle,90,90+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot2",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot2",90,180+angle,90,270+angle,0,0) );
+
if (i > 0) {
- sprintf(idSlatCh9,"LE%d",kNslats5-1-i);
+ sprintf(idSlatCh9,"SLE%d",kNslats5-1-i);
detElemId = 913 + (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 914)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 914) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
- TGeoRotation("rot3",90,angle,90,90+angle,0,0) );
- else
+ TGeoRotation("rot3",90,180+angle,90,270+angle,0,0) );
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot3",90,angle,90,90+angle,0,0) );
+ }
+ else
GetEnvelopes(moduleId)->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);
+
+ sprintf(idSlatCh9,"SLE%d",3*kNslats5-2-i);
detElemId = 926 - (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 925 )
+ if (detElemId % 2 == 1) {
+ if (detElemId == 925) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot4",90,angle,90,270+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot4",90,180+angle,90,90+angle,180,0) );
+ }
else
- GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
- TGeoRotation("rot4",90,180+angle,90,270+angle,0,0) );
+ GetEnvelopes(moduleId)->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);
+ sprintf(idSlatCh10,"SLF%d",kNslats5-1+i);
detElemId = 1013 - (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 0) {
+ if (detElemId == 1012) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot5",90,180+angle,90,90+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot5",90,angle,90,90+angle,0,0) );
+ }
else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, ySlat5, -zSlat5 + dzCh5),
TGeoRotation("rot5",90,angle,90,270+angle,180,0) );
- sprintf(idSlatCh10,"LF%d",3*kNslats5-2+i);
+ sprintf(idSlatCh10,"SLF%d",3*kNslats5-2+i);
detElemId = 1000 + (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0)
+ if (detElemId % 2 == 1) {
+ if (detElemId == 1001) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
- TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
- else
+ TGeoRotation("rot6",90,angle,90,90+angle,0,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot6",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot6",90,180+angle,90,270+angle,0,0) );
+
if (i > 0) {
- sprintf(idSlatCh10,"LF%d",kNslats5-1-i);
+ sprintf(idSlatCh10,"SLF%d",kNslats5-1-i);
detElemId = 1013 + (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 0 && detElemId != 1014)
- GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
- TGeoRotation("rot7",90,angle,90,90+angle,0,0) );
- else
+ if (detElemId % 2 == 0) {
+ if (detElemId == 1014) // Round slat, new rotation due to mapping convention
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot7",90,180+angle,90,270+angle,0,0) );
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
+ TGeoRotation("rot7",90,angle,90,90+angle,0,0) );
+ }
+ else
GetEnvelopes(moduleId)->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);
+ TGeoRotation("rot7",90,angle,90,270+angle,180,0) );
+
+ sprintf(idSlatCh10,"SLF%d",3*kNslats5-2-i);
detElemId = 1026 - (i + kNslats5-1-6);
moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
- if (detElemId % 2 == 1 && detElemId != 1025 )
+ if (detElemId % 2 == 1) {
+ if (detElemId == 1025) // Round slat, new rotation due to mapping convention
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
- TGeoRotation("rot8",90,180+angle,90,90+angle,180,0) );
- else
+ TGeoRotation("rot8",90,angle,90,270+angle,180,0) );
+ else
GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot8",90,180+angle,90,90+angle,180,0) );
+ }
+ else
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat5 - dzCh5),
TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
}
}
// Displacement
TGeoTranslation* trDTube5 = new TGeoTranslation("trDTube5", -(kPcbLength+kVframeLength)/2., -kYpos5[1], 0.);
trDTube5->RegisterYourself();
+ TGeoTranslation* trDBTube5 = new TGeoTranslation("trDBTube5", 0., ( kPcbHeight - kBframeHeight ) / 2., 0.);
+ trDBTube5->Add(trDTube5);
+ trDBTube5->RegisterYourself();
+
TObjArray composite5(nSlatType*((nVol+1)*2));
new TGeoBBox("box5DCut",(kPcbLength+kVframeLength)/2., hFramepar[1], vFramepar[2]+0.001);
// Displacement
TString compOperation(csName);
compOperation+="-tube5Cut:tr";
compOperation+=slatType[iSlatType];
- compOperation+="Tube5";
if (strstr(volName,"B")){
- // Displacement
- TGeoTranslation* trB = new TGeoTranslation("trB", 0., -(kPcbHeight - kBframeHeight)/2., 0.);
- trB->RegisterYourself();
- compOperation.ReplaceAll("-tube5Cut",":trB-tube5Cut");
+ compOperation+="B";
}
- compName=Form("composite5%d%c",iCh,volLetter[iVol]);
+ compOperation+="Tube5";
+ compName=Form("composite5%c%d%c",slatType[iSlatType],iCh,volLetter[iVol]);
composite5[lIndex] = new TGeoCompositeShape(compName, compOperation.Data());
// Reset shape to volume
if (i == 0 && quadrant == 2) continue;
if (i == 0 && quadrant == 4) continue;
- sprintf(idSlatCh9,"LE%d",ConvertSlatNum(i,quadrant,kNslats5-1));
- sprintf(idSlatCh10,"LF%d",ConvertSlatNum(i,quadrant,kNslats5-1));
+ sprintf(idSlatCh9,"SLE%d",ConvertSlatNum(i,quadrant,kNslats5-1));
+ sprintf(idSlatCh10,"SLF%d",ConvertSlatNum(i,quadrant,kNslats5-1));
Int_t moduleSlatCh9 = GetModuleId(idSlatCh9);
Int_t moduleSlatCh10 = GetModuleId(idSlatCh10);
Float_t xvFrame = (slatLength5[i] - kVframeLength)/2.; // ok
GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09V", idSlatCh9, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10V", idSlatCh10, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10V", idSlatCh10, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.));
- } else { // Vertical and Rounded+Vertical spacer
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09V", idSlatCh9, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9D", idSlatCh9, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos5[1],0.));
- GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10V", idSlatCh10, (2*i-1)*10+quadrant,TGeoTranslation(xvFrame,0.,0.));
- GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0D", idSlatCh10, (2*i)*10+quadrant,TGeoTranslation(-xvFrame,-kYpos5[1],0.));
+ } else { // Vertical and Rounded+Vertical spacer - Different rotation due to new mapping convention
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09V", idSlatCh9, (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9D", idSlatCh9, (2*i)*10+quadrant,TGeoTranslation(xvFrame,-kYpos5[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10V", idSlatCh10, (2*i-1)*10+quadrant,TGeoTranslation(-xvFrame,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0D", idSlatCh10, (2*i)*10+quadrant,TGeoTranslation(xvFrame,-kYpos5[1],0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
}
// position the panels and the insulating material
for (j = 0; j < kNPCB5[i]; j++){
index++;
- Float_t xx = kSensLength * (-kNPCB5[i]/2.+j+.5);
+ xx = kSensLength * (-kNPCB5[i]/2.+j+.5);
Float_t zPanel = spar[2] - nomexbpar[2];
- if (i==1 && j==0){ // Rounded pcb of rounded slat
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9X", idSlatCh9, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9X", idSlatCh9, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9I", idSlatCh9, index,TGeoTranslation(xx,0.,0.));
- GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0X", idSlatCh10, 2*index-1,TGeoTranslation(xx,0.,zPanel));
- GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0X", idSlatCh10, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0I", idSlatCh10, index,TGeoTranslation(xx,0.,0.));
+ if (i==1) { // Different rotation due to new mapping convention
+ if (j==0) { // Rounded pcb of rounded slat
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9X", idSlatCh9, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9X", idSlatCh9, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("SD9I", idSlatCh9, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0X", idSlatCh10, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0X", idSlatCh10, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("SD0I", idSlatCh10, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ } else {
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09X", idSlatCh9, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09X", idSlatCh9, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09I", idSlatCh9, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10X", idSlatCh10, 2*index-1,TGeoTranslation(-xx,0.,zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10X", idSlatCh10, 2*index,TGeoTranslation(-xx,0.,-zPanel),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10I", idSlatCh10, index,TGeoTranslation(-xx,0.,0.),TGeoRotation("rotAbX",90,180+angle,90,90+angle,180,0));
+ }
} else {
GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09X", idSlatCh9, 2*index-1,TGeoTranslation(xx,0.,zPanel));
GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09X", idSlatCh9, 2*index,TGeoTranslation(xx,0.,-zPanel));
- GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09I", idSlatCh9, index,TGeoTranslation(xx,0.,0.));
-
+ GetEnvelopes(moduleSlatCh9)->AddEnvelopeConstituent("S09I", idSlatCh9, index,TGeoTranslation(xx,0.,0.));
GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10X", idSlatCh10, 2*index-1,TGeoTranslation(xx,0.,zPanel));
GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10X", idSlatCh10, 2*index,TGeoTranslation(xx,0.,-zPanel));
GetEnvelopes(moduleSlatCh10)->AddEnvelopeConstituent("S10I", idSlatCh10, index,TGeoTranslation(xx,0.,0.));
Float_t yborder = ( kPcbHeight - kBframeHeight ) / 2.;
gMC->Gspos("S09B",1,"S09P",0., yborder,0.,0,"ONLY");
gMC->Gspos("S09B",2,"S09P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SD9B",1,"SD9P",0., 0.,0.,0,"ONLY");
gMC->Gspos("S09B",1,"SD9P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD9B",1,"SD9P",0.,-yborder,0.,0,"ONLY");
gMC->Gspos("S10B",1,"S10P",0., yborder,0.,0,"ONLY");
gMC->Gspos("S10B",2,"S10P",0.,-yborder,0.,0,"ONLY");
- gMC->Gspos("SD0B",1,"SD0P",0., 0.,0.,0,"ONLY");
gMC->Gspos("S10B",1,"SD0P",0., yborder,0.,0,"ONLY");
+ gMC->Gspos("SD0B",1,"SD0P",0.,-yborder,0.,0,"ONLY");
// // create the NULOC volume and position it in the horizontal frame
gMC->Gspos("S10E",2*index ,"S10B", xx, 0., kBframeWidth/2. - kNulocWidth/2, 0, "ONLY");
}
if (xx > xxmax4 && xx< xxmax) {
- gMC->Gspos("S09E",2*index-1,"SD9B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S09E",2*index ,"SD9B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S10E",2*index-1,"SD0B", xx, -yborder,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
- gMC->Gspos("S10E",2*index ,"SD0B", xx, -yborder, kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S09E",2*index-1,"SD9B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S09E",2*index ,"SD9B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S10E",2*index-1,"SD0B", xx, 0.,-kBframeWidth/2.+ kNulocWidth/2, 0, "ONLY");
+ gMC->Gspos("S10E",2*index ,"SD0B", xx, 0., kBframeWidth/2.- kNulocWidth/2, 0, "ONLY");
}
//
else {
lCableDY = (kYpos5[i+1]+kYpos5[i+2])/2.-cablepar[1];
}
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
// Then bottom cables
cablepar[0] = (supporthlength-kPcbLength-kVframeLength)/2.;
lCableX = (kPcbLength+kVframeLength)/2.;
lCableDY = (kYpos5[i+1]+kYpos5[i+2])/2.-cablepar[1]; // half way between 2 slats on same side
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
}
else {
lCableDY = (kYpos5[i+1]+kYpos5[i+2])/2.-cablepar[1];
}
- lCableZ = TMath::Power(-1,i)*(nomexthickness+carbonthickness+(iCable++)*kCableWidth)/2.;
+ lCableZ = TMath::Power(-1,i)*(nomexthickness/2.+carbonthickness+(-1+iCable++)*kCableWidth+kCableWidth/2.);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,lCableY+lCableDY,lCableZ,0,"ONLY",cablepar,3);
gMC->Gsposp("S09L",10*i+cIndex++,"S09S",lCableX,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar,3);
if(i>0){
}
-
//______________________________________________________________________________
-void AliMUONSlatGeometryBuilder::SetTransformations()
+void AliMUONSlatGeometryBuilder::SetVolumes()
{
-/// Defines the transformations for the station345 chambers.
+/// Defines the volumes for the station345 chambers.
if (gAlice->GetModule("DIPO")) {
// if DIPO is preset, the whole station will be placed in DDIP volume
SetVolume(13, "SC09O", true);
SetVolume(14, "SC10I", true);
SetVolume(15, "SC10O", true);
+}
+
+
+//______________________________________________________________________________
+void AliMUONSlatGeometryBuilder::SetTransformations()
+{
+/// Defines the transformations for the station345 chambers.
// Stations 345 are not perpendicular to the beam axis
// See AliMUONConstants class