- if (i > 0) {
- sprintf(idSlatCh9,"LE%d",kNslats5-1-i);
- detElemId = 900 - i + kNslats5-1;
- gMC->Gsvolu(idSlatCh9,"BOX",kSlatMaterial,spar,3);
- GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, zSlat+2.*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);
- GetEnvelopes(8)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat-2.*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);
- GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, ySlat5, zSlat+2.*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);
- GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat-2.*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);
- GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, zSlat+2.*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);
- GetEnvelopes(9)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, -ySlat5, zSlat-2.*dzCh5),
- TGeoRotation("rot8",90,180+angle,90,270+angle,0,0) );
- }
- }
- // // create the panel volume
+ // Add readout cables
+ gMC->Gsvolu("S07L","BOX",kCableMaterial,dum,0);
+ gMC->Gsvolu("S08L","BOX",kCableMaterial,dum,0);
+
+ ySlat41 = 0.;
+ ySlat42 = 0.;
+ Float_t lCableX = 0.;
+ Float_t lCableY = 0.;
+ Float_t lCableY8 = 0.;
+ Float_t lCableZ = 0.;
+ Float_t cablepar[3] = {supporthlength/2., kCableHeight/2., kCableWidth/2.};
+ Float_t lCableDY = 0.;
+ Float_t lCableDY8 = 0.;
+ for (i = 0; i<kNslats4; i++){
+ Int_t iCable = 1;
+ Int_t cIndex = 0;
+ Int_t cIndex8 = 0;
+ ySlat41 += kYpos41[i];
+ ySlat42 += kYpos42[i];
+
+ lCableY = ySlat41;
+ lCableY8 = ySlat42;
+
+ // Cables going out from the start of slat
+ if(kNPCB4[i]>=4){ // Only if 4 or more pcb
+ // First top cables
+ cablepar[0] = (supporthlength-kXpos4[i])/2.;
+ 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/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);
+ gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,-(lCableY8+lCableDY8),lCableZ,0,"ONLY",cablepar,3);
+ // Then bottom cables
+ if (i>0){
+ if (i==1) { // Rounded slat. Bottom cable starts at dMotherInner (beam pipe)
+ cablepar[0] = (supporthlength-kXpos4[i]-dMotherInner)/2.;
+ lCableX = (kXpos4[i]+dMotherInner)/2.;
+ lCableDY = (kYpos41[i]+kYpos41[i])/2.-cablepar[1];
+ lCableDY8 = (kYpos42[i]+kYpos42[i])/2.-cablepar[1];
+ }
+ if (i>=2) {
+ lCableDY = (kYpos41[i]+kYpos41[i-1])/2.-cablepar[1];
+ if ((lCableY-lCableDY)<(dMotherInner+cablepar[1])){
+ lCableDY = lCableY - dMotherInner - cablepar[1];
+ }
+ lCableDY8 = (kYpos42[i]+kYpos42[i-1])/2.-cablepar[1];
+ if ((lCableY8-lCableDY8)<(dMotherInner+cablepar[1])){
+ lCableDY8 = lCableY8 - dMotherInner - cablepar[1];
+ }
+ }
+ 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);
+ gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,-(lCableY8-lCableDY8),lCableZ,0,"ONLY",cablepar,3);
+ }
+ }
+
+ // Rounded slats have an extra cable starting at second pcb
+ if(i==1){
+ // Only on top
+ cablepar[0] = (supporthlength-kPcbLength-kVframeLength)/2.;
+ 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/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);
+ gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,-(lCableY8+lCableDY8),lCableZ,0,"ONLY",cablepar,3);
+ }
+
+ // Cables going out from the end of the slats
+ cablepar[0] = (supporthlength-(slatLength4[i]+kXpos4[i]+kDslatLength)+kVframeLength)/2.;
+ lCableX = slatLength4[i]+kXpos4[i]-kVframeLength+kDslatLength+cablepar[0]-supporthlength/2.;
+ if(i+1>=kNslats4 || i+2>=kNslats4){ // If no more higher slats, then use distance to lower slat
+ lCableDY = kPcbHeight/2.+cablepar[1];
+ lCableDY8 = lCableDY;
+ }
+ else {
+ 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/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);
+ gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,-(lCableY8+lCableDY8),lCableZ,0,"ONLY",cablepar,3);
+ // Then bottom cables
+ if(i>0){
+ if (i==1) {
+ lCableDY = (kYpos41[i]+kYpos41[i])/2.-cablepar[1];
+ lCableDY8 = (kYpos42[i]+kYpos42[i])/2.-cablepar[1];
+ }
+ else{
+ lCableDY = (kYpos41[i]+kYpos41[i-1])/2.-cablepar[1]; // half way between 2 slats on same side
+ if ((lCableY-lCableDY)<(dMotherInner+cablepar[1])){
+ lCableDY = lCableY - dMotherInner - cablepar[1];
+ }
+ lCableDY8 = (kYpos42[i]+kYpos42[i-1])/2.-cablepar[1]; // half way between 2 slats on same side
+ if ((lCableY8-lCableDY8)<(dMotherInner+cablepar[1])){
+ lCableDY8 = lCableY8 - dMotherInner - cablepar[1];
+ }
+ }
+ 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);
+ gMC->Gsposp("S08L",10*i+cIndex8++,"S08S",lCableX,-(lCableY8-lCableDY8),lCableZ,0,"ONLY",cablepar,3);
+ }
+ }
+
+ Float_t dzCh7 = dzCh;
+ TGeoTranslation* trSupport1St4 = new TGeoTranslation("trSupport1St4", supporthlength/2., 0. , dzCh7);
+ TGeoRotation* roSupportSt4 = new TGeoRotation("roSupportSt4",90.,180.,-90.);
+ TGeoCombiTrans* coSupport2St4 = new TGeoCombiTrans(-supporthlength/2., 0., -dzCh7, roSupportSt4);
+ GetEnvelopes(9)->AddEnvelope("S07S", 0, 1, *trSupport1St4);
+ GetEnvelopes(8)->AddEnvelope("S07S", 0, 2, *coSupport2St4);
+ GetEnvelopes(11)->AddEnvelope("S08S", 0, 1, *trSupport1St4);
+ GetEnvelopes(10)->AddEnvelope("S08S", 0, 2, *coSupport2St4);
+
+ // End of pannel support geometry
+
+ // cout << "Geometry for Station 4...... done" << endl;
+
+ }
+
+ if (fStations[4]) {
+
+
+ // //********************************************************************
+ // // Station 5 **
+ // //********************************************************************
+ // Mother volume for each chamber in St4 is an envelop (or assembly)
+ // There is one assembly mother per half a chamber called SC09I, SC09O, SC10I and SC10O
+ // Same volume name definitions as in St3
+
+ const Int_t kNslats5 = 7; // number of slats per quadrant
+ const Int_t kNPCB5[kNslats5] = {5, 6, 6, 6, 5, 4, 3}; // n PCB per slat
+ const Float_t kXpos5[kNslats5] = {38.75, 0., 0., 0., 0., 0., 0.}; // J.C. Correct value
+ const Float_t kYpos5[kNslats5] = {0., 38.2, 37.9, 37.6, 37.3, 37.05, 36.75};
+ Float_t slatLength5[kNslats5];
+
+ Float_t rPhi1 = TMath::RadToDeg()*(TMath::ASin((kYpos5[1]-hFramepar[1])/(AliMUONConstants::Rmin(4))));
+ Float_t rPhi2 = TMath::RadToDeg()*(TMath::ACos(-vFramepar[0]/(AliMUONConstants::Rmin(4)-kRframeLength)));
+ 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[6];
+ char idSlatCh10[6];
+ Float_t xSlat5;
+ Float_t ySlat5 = 0;
+ angle = 0.;
+
+ for (i = 0; i < kNslats5; i++){
+
+ slatLength5[i] = kPcbLength * kNPCB5[i] + 2.* kVframeLength;
+ xSlat5 = slatLength5[i]/2. + kDslatLength + kXpos5[i];
+ ySlat5 += kYpos5[i];
+
+ spar[0] = slatLength5[i]/2.;
+ spar[1] = kSlatHeight/2.;
+ spar[2] = kSlatWidth/2.;
+
+ Float_t dzCh5 = dzCh;
+ Float_t zSlat5 = (i%2 ==0)? -zSlat : zSlat;
+
+ sprintf(idSlatCh9,"SLE%d",kNslats5-1+i);
+ detElemId = 913 - (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 0)
+ 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,"SLE%d",3*kNslats5-2+i);
+ detElemId = 900 + (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 0)
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh9, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot2",90,180+angle,90,270+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) );
+ if (i > 0) {
+ sprintf(idSlatCh9,"SLE%d",kNslats5-1-i);
+ detElemId = 913 + (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 0 && detElemId != 914)
+ 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,"SLE%d",3*kNslats5-2-i);
+ detElemId = 926 - (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 1 && detElemId != 925 )
+ 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) );
+ }
+
+ sprintf(idSlatCh10,"SLF%d",kNslats5-1+i);
+ detElemId = 1013 - (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 0)
+ 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,"SLF%d",3*kNslats5-2+i);
+ detElemId = 1000 + (i + kNslats5-1-6);
+ moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+ if (detElemId % 2 == 0)
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(-xSlat5, ySlat5, zSlat5 - dzCh5),
+ TGeoRotation("rot6",90,180+angle,90,270+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) );
+ if (i > 0) {
+ 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
+ GetEnvelopes(moduleId)->AddEnvelope(idSlatCh10, detElemId, true, TGeoTranslation(xSlat5, -ySlat5, -zSlat5 + dzCh5),
+ 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 )
+ 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) );
+ }
+ }
+
+ // create the panel volume