+ voNomexSupportSt3Ch6->AddNode(voCarbonSupportSt3Ch6,1,trCarbon1St3);
+ voNomexSupportSt3Ch6->AddNode(voCarbonSupportSt3Ch6,2,trCarbon2St3);
+
+
+ // Add readout cables
+ gMC->Gsvolu("S05L","BOX",kCableMaterial,dum,0);
+ gMC->Gsvolu("S06L","BOX",kCableMaterial,dum,0);
+
+ ySlat3 = 0.;
+ Float_t lCableX = 0.;
+ Float_t lCableX6 = 0.;
+ Float_t lCableY = 0.;
+ Float_t lCableZ = 0.;
+ Float_t cablepar[3] = {supporthlength/2., kCableHeight/2., kCableWidth/2.};
+ Float_t cablepar6[3] = {supporthlengthCh6/2., kCableHeight/2., kCableWidth/2.};
+ Float_t lCableDY = 0.;
+ Int_t cIndex = 0;
+ Int_t cIndex6 = 0;
+ for (i = 0; i<kNslats3; i++){
+ Int_t iCable = 1;
+ cIndex = 0;
+ cIndex6 = 0;
+ ySlat3 += kYpos3[i];
+ lCableY = ySlat3;
+
+ // Cables going out from the start of slat
+ if(kNPCB3[i]>=4 && i<kNslats3-2){ // Only if 4 or more pcb
+ // First top cables
+ cablepar[0] = supporthlength/2.;
+ lCableX = 0.;
+ 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/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] -= (kPcbLength-csvPcbLength)/2.;
+ lCableX6 = (kPcbLength-csvPcbLength)/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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+
+ // Then bottom cables
+ if(i>0){
+ if(i==1){ // Rounded slat. Bottom cable starts at dMotherInner (beam pipe)
+ cablepar[0] -= dMotherInner/2.;
+ lCableX += dMotherInner/2.;
+ cablepar6[0] -= dMotherInner/2.;
+ lCableX6 += dMotherInner/2.;
+ lCableDY = (kYpos3[i]+kYpos3[i])/2.-cablepar[1];
+ }
+ if(i>=2){
+ lCableDY = (kYpos3[i]+kYpos3[i-1])/2.-cablepar[1]; // half way between 2 slats on same side
+ if ((lCableY-lCableDY)<(dMotherInner+cablepar[1])){
+ lCableDY = lCableY - dMotherInner - cablepar[1];
+ }
+ }
+ 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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY-lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+ }
+ }
+
+ // Rounded slats have an extra cable starting at second pcb
+ if(i==1){
+ // First top cables
+ cablepar[0] = (supporthlength-kPcbLength-kVframeLength)/2.;
+ lCableX = (kPcbLength+kVframeLength)/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/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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+ // Then bottom cables
+ lCableDY = (kYpos3[i]+kYpos3[i])/2.-cablepar[1];
+ 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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY-lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+ }
+
+ // Cables going out from the end of the slats
+ // First top cables
+ cablepar[0] = (supporthlength-(slatLength3[i]+kDslatLength)+kVframeLength)/2.;
+ lCableX = slatLength3[i]-kVframeLength+kDslatLength+cablepar[0]-supporthlength/2.;
+ cablepar6[0] = (supporthlengthCh6-(slatLength3[i]+kDslatLength)+kVframeLength)/2.;
+ lCableX6 = slatLength3[i]-kVframeLength+kDslatLength+cablepar6[0]-supporthlengthCh6/2.;
+ if(i+1>=kNslats3 || i+2>=kNslats3){ // If no more higher slats, then use distance to lower slat
+ lCableDY = kPcbHeight/2.+cablepar[1];
+ }
+ else {
+ lCableDY = (kYpos3[i+1]+kYpos3[i+2])/2.-cablepar[1];
+ }
+ 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.;
+ }
+ 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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY+lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+ // Then bottom cables
+ if(i>0){ // Loop is over top half of slats, lower half are symmetric
+ if (i==1) {
+ lCableDY = (kYpos3[i]+kYpos3[i])/2.-cablepar[1];
+ }
+ else{
+ lCableDY = (kYpos3[i]+kYpos3[i-1])/2.-cablepar[1]; // half way between 2 slats on same side
+ }
+ 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);
+ gMC->Gsposp("S06L",100*i+cIndex6++,"S06S",lCableX6,-(lCableY-lCableDY),lCableZ,0,"ONLY",cablepar6,3);
+ }
+ }
+