+ // heigth of the FSTR Volume (the strip volume)
+ const Float_t khstripy = 2*khhony+3*khpcby+4*(khmyly+khgraphy+khglasseiy)+2*khsensmy;
+ // width of the FSTR Volume (the strip volume)
+ const Float_t kwstripz = 10.;
+ // length of the FSTR Volume (the strip volume)
+ const Float_t klstripx = 122.;
+
+ Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
+// coordinates of the strip center in the strip reference frame; used for positioning
+// internal strip volumes
+ Float_t posfp[3]={0.,0.,0.};
+
+
+ // FSTR volume definition and filling this volume with non sensitive Gas Mixture
+ gMC->Gsvolu("FSTR","BOX",idtmed[512],parfp,3);
+ //-- HONY Layer definition
+// parfp[0] = -1;
+ parfp[1] = khhony*0.5;
+// parfp[2] = -1;
+ gMC->Gsvolu("FHON","BOX",idtmed[503],parfp,3);
+ // positioning 2 HONY Layers on FSTR volume
+
+ posfp[1]=-khstripy*0.5+parfp[1];
+ gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+
+ //-- PCB Layer definition
+ parfp[1] = khpcby*0.5;
+ gMC->Gsvolu("FPCB","BOX",idtmed[504],parfp,3);
+ // positioning 2 PCB Layers on FSTR volume
+ posfp[1]=-khstripy*0.5+khhony+parfp[1];
+ gMC->Gspos("FPCB",1,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FPCB",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+ // positioning the central PCB layer
+ gMC->Gspos("FPCB",3,"FSTR",0.,0.,0.,0,"ONLY");
+
+
+
+ //-- MYLAR Layer definition
+ parfp[1] = khmyly*0.5;
+ gMC->Gsvolu("FMYL","BOX",idtmed[511],parfp,3);
+ // positioning 2 MYLAR Layers on FSTR volume
+ posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
+ gMC->Gspos("FMYL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FMYL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+ // adding further 2 MYLAR Layers on FSTR volume
+ posfp[1] = khpcby*0.5+parfp[1];
+ gMC->Gspos("FMYL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FMYL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+
+
+ //-- Graphite Layer definition
+ parfp[1] = khgraphy*0.5;
+ gMC->Gsvolu("FGRP","BOX",idtmed[502],parfp,3);
+ // positioning 2 Graphite Layers on FSTR volume
+ posfp[1] = -khstripy*0.5+khhony+khpcby+khmyly+parfp[1];
+ gMC->Gspos("FGRP",1,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FGRP",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+ // adding further 2 Graphite Layers on FSTR volume
+ posfp[1] = khpcby*0.5+khmyly+parfp[1];
+ gMC->Gspos("FGRP",3,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FGRP",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+
+
+ //-- Glass (EXT. +Semi INT.) Layer definition
+ parfp[1] = khglasseiy*0.5;
+ gMC->Gsvolu("FGLA","BOX",idtmed[514],parfp,3);
+ // positioning 2 Glass Layers on FSTR volume
+ posfp[1] = -khstripy*0.5+khhony+khpcby+khmyly+khgraphy+parfp[1];
+ gMC->Gspos("FGLA",1,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+ // adding further 2 Glass Layers on FSTR volume
+ posfp[1] = khpcby*0.5+khmyly+khgraphy+parfp[1];
+ gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FGLA",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
+
+
+ //-- Sensitive Mixture Layer definition
+ parfp[0] = klsensmx*0.5;
+ parfp[1] = khsensmy*0.5;
+ parfp[2] = kwsensmz*0.5;
+ gMC->Gsvolu("FSEN","BOX",idtmed[513],parfp,3);
+ gMC->Gsvolu("FNSE","BOX",idtmed[512],parfp,3);
+ // positioning 2 gas Layers on FSTR volume
+ // the upper is insensitive freon
+ // while the remaining is sensitive
+ posfp[1] = khpcby*0.5+khmyly+khgraphy+khglasseiy+parfp[1];
+ gMC->Gspos("FNSE",0,"FSTR", 0., posfp[1],0.,0,"ONLY");
+ gMC->Gspos("FSEN",0,"FSTR", 0.,-posfp[1],0.,0,"ONLY");
+
+ // dividing FSEN along z in knz=2 and along x in knx=48
+ gMC->Gsdvn("FSEZ","FSEN",knz,3);
+ gMC->Gsdvn("FSEX","FSEZ",knx,1);
+
+ // FPAD volume definition
+ parfp[0] = klpadx*0.5;
+ parfp[1] = khsensmy*0.5;
+ parfp[2] = kwpadz*0.5;
+ gMC->Gsvolu("FPAD","BOX",idtmed[513],parfp,3);
+ // positioning the FPAD volumes on previous divisions
+ gMC->Gspos("FPAD",0,"FSEX",0.,0.,0.,0,"ONLY");
+
+//// Positioning the Strips (FSTR) in the FLT volumes /////
+
+ // Plate A (Central)
+
+ Float_t t = zFLTC+zFLTB+zFLTA*0.5+ 2*db;//Half Width of Barrel
+
+ Float_t gap = fGapA+0.5; //cm updated distance between the strip axis
+ Float_t zpos = 0;
+ Float_t ang = 0;
+ Int_t j=1; // AdC
+ nrot = 0;
+ zcoor = 0;
+ ycoor = -14.5 + kspace ; //2 cm over front plate
+
+ AliMatrix (idrotm[0], 90., 0.,90.,90.,0., 90.);
+
+ Int_t centerLoc= (Int_t)(fNStripA/2.) + 1; // AdC
+
+ //gMC->Gspos("FSTR",j,"FLTA",0.,ycoor, 0.,idrotm[0],"ONLY");
+ gMC->Gspos("FSTR",centerLoc,"FLTA",0.,ycoor, 0.,idrotm[0],"ONLY"); // AdC
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.3 ",ClassName(),ang*kRaddeg,j); // AdC
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ zcoor -= zSenStrip;
+ //j++; // AdC
+ Int_t upDown = -1; // upDown=-1 -> Upper strip
+ // upDown=+1 -> Lower strip
+ do{
+ ang = atan(zcoor/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0.,90.-ang,90.,-ang, 90.);
+ AliMatrix (idrotm[nrot+1],90.,180.,90.+ang,90., ang, 90.);
+ ang /= kRaddeg;
+ ycoor = -14.5+ kspace; //2 cm over front plate
+ ycoor += (1-(upDown+1)/2)*gap;
+ //gMC->Gspos("FSTR",j ,"FLTA",0.,ycoor, zcoor,idrotm[nrot], "ONLY");
+ //gMC->Gspos("FSTR",j+1,"FLTA",0.,ycoor,-zcoor,idrotm[nrot+1],"ONLY");
+ gMC->Gspos("FSTR",centerLoc-j,"FLTA",0.,ycoor, zcoor,idrotm[nrot], "ONLY"); // AdC
+ gMC->Gspos("FSTR",centerLoc+j,"FLTA",0.,ycoor,-zcoor,idrotm[nrot+1],"ONLY"); // AdC
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.3 ",ClassName(),ang*kRaddeg,j); // AdC
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ //j += 2; // AdC
+ upDown*= -1; // Alternate strips
+ zcoor = zcoor-(zSenStrip/2)/TMath::Cos(ang)-
+ upDown*gap*TMath::Tan(ang)-
+ (zSenStrip/2)/TMath::Cos(ang);
+ } while (zcoor-(stripWidth/2)*TMath::Cos(ang)>-t+zFLTC+zFLTB+db*2);
+
+ zcoor = zcoor+(zSenStrip/2)/TMath::Cos(ang)+
+ upDown*gap*TMath::Tan(ang)+
+ (zSenStrip/2)/TMath::Cos(ang);
+
+ gap = fGapB;
+ zcoor = zcoor-(zSenStrip/2)/TMath::Cos(ang)-
+ upDown*gap*TMath::Tan(ang)-
+ (zSenStrip/2)/TMath::Cos(ang);
+
+ ang = atan(zcoor/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0.,90.-ang,90.,-ang, 90.);
+ AliMatrix (idrotm[nrot+1],90.,180.,90.+ang,90., ang, 90.);
+ ang /= kRaddeg;
+
+ ycoor = -14.5+ kspace; //2 cm over front plate
+ ycoor += (1-(upDown+1)/2)*gap;
+ //gMC->Gspos("FSTR",j ,"FLTA",0.,ycoor, zcoor,idrotm[nrot], "ONLY");
+ //gMC->Gspos("FSTR",j+1,"FLTA",0.,ycoor,-zcoor,idrotm[nrot+1],"ONLY");
+ gMC->Gspos("FSTR",centerLoc-j,"FLTA",0.,ycoor, zcoor,idrotm[nrot], "ONLY"); // AdC
+ gMC->Gspos("FSTR",centerLoc+j,"FLTA",0.,ycoor,-zcoor,idrotm[nrot+1],"ONLY"); // AdC
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.3 ",ClassName(),ang*kRaddeg,j); // AdC
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ ycoor = -hTof/2.+ kspace;//2 cm over front plate
+
+ // Plate B
+
+ nrot = 0;
+ Int_t i=1; // AdC
+ upDown = 1;
+ Float_t deadRegion = 1.0;//cm
+
+ zpos = zcoor - (zSenStrip/2)/TMath::Cos(ang)-
+ upDown*gap*TMath::Tan(ang)-
+ (zSenStrip/2)/TMath::Cos(ang)-
+ deadRegion/TMath::Cos(ang);
+
+ ang = atan(zpos/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0., 90.-ang,90.,ang, 270.);
+ ang /= kRaddeg;
+ ycoor = -hTof*0.5+ kspace ; //2 cm over front plate
+ ycoor += (1-(upDown+1)/2)*gap;
+ zcoor = zpos+(zFLTA*0.5+zFLTB*0.5+db); // Moves to the system of the modulus FLTB
+ gMC->Gspos("FSTR",i, "FLTB", 0., ycoor, zcoor,idrotm[nrot], "ONLY");
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.4 ",ClassName(),ang*kRaddeg,i);
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ i++;
+ upDown*=-1;
+
+ do {
+ zpos = zpos - (zSenStrip/2)/TMath::Cos(ang)-
+ upDown*gap*TMath::Tan(ang)-
+ (zSenStrip/2)/TMath::Cos(ang);
+ ang = atan(zpos/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0., 90.-ang,90.,ang, 270.);
+ ang /= kRaddeg;
+ Float_t deltaSpaceinB=-0.5; // [cm] to avoid overlaps with the end of freon frame
+ Float_t deltaGapinB=0.5; // [cm] to avoid overlaps in between initial strips
+ ycoor = -hTof*0.5+ kspace+deltaSpaceinB ; //2 cm over front plate
+ ycoor += (1-(upDown+1)/2)*(gap+deltaGapinB);
+ zcoor = zpos+(zFLTA*0.5+zFLTB*0.5+db); // Moves to the system of the modulus FLTB
+ gMC->Gspos("FSTR",i, "FLTB", 0., ycoor, zcoor,idrotm[nrot], "ONLY");
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.4 ",ClassName(),ang*kRaddeg,i);
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ upDown*=-1;
+ i++;
+ } while (TMath::Abs(ang*kRaddeg)<22.5);
+ //till we reach a tilting angle of 22.5 degrees
+
+ ycoor = -hTof*0.5+ kspace ; //2 cm over front plate
+ zpos = zpos - zSenStrip/TMath::Cos(ang);
+ // this avoid overlaps in between outer strips in plate B
+ Float_t deltaMovingUp=0.8; // [cm]
+ Float_t deltaMovingDown=-0.5; // [cm]
+
+ do {
+ ang = atan(zpos/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0., 90.-ang,90.,ang, 270.);
+ ang /= kRaddeg;
+ zcoor = zpos+(zFLTB/2+zFLTA/2+db);
+ gMC->Gspos("FSTR",i, "FLTB", 0., ycoor+deltaMovingDown+deltaMovingUp, zcoor,idrotm[nrot], "ONLY");
+ deltaMovingUp+=0.8; // update delta moving toward the end of the plate
+ zpos = zpos - zSenStrip/TMath::Cos(ang);
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.4 ",ClassName(),ang*kRaddeg,i);
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ i++;
+ } while (zpos-stripWidth*0.5/TMath::Cos(ang)>-t+zFLTC+db);
+
+ // Plate C
+
+ zpos = zpos + zSenStrip/TMath::Cos(ang);
+
+ zpos = zpos - (zSenStrip/2)/TMath::Cos(ang)+
+ gap*TMath::Tan(ang)-
+ (zSenStrip/2)/TMath::Cos(ang);
+
+ nrot = 0;
+ i=0;
+ Float_t deltaGap=-2.5; // [cm] update distance from strip center and plate
+ ycoor= -hTof*0.5+kspace+gap+deltaGap;
+
+ do {
+ i++;
+ ang = atan(zpos/radius);
+ ang *= kRaddeg;
+ AliMatrix (idrotm[nrot], 90., 0., 90.-ang,90.,ang, 270.);
+ ang /= kRaddeg;
+ zcoor = zpos+(zFLTC*0.5+zFLTB+zFLTA*0.5+db*2);
+ gMC->Gspos("FSTR",i, "FLTC", 0., ycoor, zcoor,idrotm[nrot], "ONLY");
+ if(fDebug>=1) {
+ printf("%s: %f, St. %2i, Pl.5 ",ClassName(),ang*kRaddeg,i);
+ printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos);
+ }
+ zpos = zpos - zSenStrip/TMath::Cos(ang);
+ } while (zpos-stripWidth*TMath::Cos(ang)*0.5>-t);
+
+
+////////// Layers after strips /////////////////
+// honeycomb (Polyethilene) Layer after (1.2cm)
+
+ Float_t overSpace = fOverSpc;//cm
+
+ par[0] = xFLT*0.5;
+ par[1] = 0.6;
+ par[2] = (zFLTA *0.5);
+ ycoor = -yFLT/2 + overSpace + par[1];
+ gMC->Gsvolu("FPEA", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FPEA", 0, "FLTA", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTB *0.5);
+ gMC->Gsvolu("FPEB", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FPEB", 0, "FLTB", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTC *0.5);
+ gMC->Gsvolu("FPEC", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FPEC", 0, "FLTC", 0., ycoor, 0., 0, "ONLY");
+
+// Electronics (Cu) after
+ ycoor += par[1];
+ par[0] = xFLT*0.5;
+ par[1] = 1.43*0.05*0.5; // 5% of X0
+ par[2] = (zFLTA *0.5);
+ ycoor += par[1];
+ gMC->Gsvolu("FECA", "BOX ", idtmed[501], par, 3); // Cu
+ gMC->Gspos ("FECA", 0, "FLTA", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTB *0.5);
+ gMC->Gsvolu("FECB", "BOX ", idtmed[501], par, 3); // Cu
+ gMC->Gspos ("FECB", 0, "FLTB", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTC *0.5);
+ gMC->Gsvolu("FECC", "BOX ", idtmed[501], par, 3); // Cu
+ gMC->Gspos ("FECC", 0, "FLTC", 0., ycoor, 0., 0, "ONLY");
+
+// cooling WAter after
+ ycoor += par[1];
+ par[0] = xFLT*0.5;
+ par[1] = 36.1*0.02*0.5; // 2% of X0
+ par[2] = (zFLTA *0.5);
+ ycoor += par[1];
+ gMC->Gsvolu("FWAA", "BOX ", idtmed[515], par, 3); // Water
+ gMC->Gspos ("FWAA", 0, "FLTA", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTB *0.5);
+ gMC->Gsvolu("FWAB", "BOX ", idtmed[515], par, 3); // Water
+ gMC->Gspos ("FWAB", 0, "FLTB", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTC *0.5);
+ gMC->Gsvolu("FWAC", "BOX ", idtmed[515], par, 3); // Water
+ gMC->Gspos ("FWAC", 0, "FLTC", 0., ycoor, 0., 0, "ONLY");
+
+// frame of Air
+ ycoor += par[1];
+ par[0] = xFLT*0.5;
+ par[1] = (yFLT/2-ycoor-0.2)*0.5; // Aluminum layer considered (0.2 cm)
+ par[2] = (zFLTA *0.5);
+ ycoor += par[1];
+ gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
+ gMC->Gspos ("FAIA", 0, "FLTA", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTB *0.5);
+ gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
+ gMC->Gspos ("FAIB", 0, "FLTB", 0., ycoor, 0., 0, "ONLY");
+ par[2] = (zFLTC *0.5);
+ gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
+ gMC->Gspos ("FAIC", 0, "FLTC", 0., ycoor, 0., 0, "ONLY");
+/* fp
+//Back Plate honycomb (2cm)
+ par[0] = -1;
+ par[1] = 2 *0.5;
+ par[2] = -1;
+ ycoor = yFLT/2 - par[1];
+ gMC->Gsvolu("FBPA", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FBPA", 0, "FLTA", 0., ycoor, 0., 0, "ONLY");
+ gMC->Gsvolu("FBPB", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FBPB", 0, "FLTB", 0., ycoor, 0., 0, "ONLY");
+ gMC->Gsvolu("FBPC", "BOX ", idtmed[503], par, 3); // Hony
+ gMC->Gspos ("FBPC", 0, "FLTC", 0., ycoor, 0., 0, "ONLY");
+fp */
+}
+
+//_____________________________________________________________________________
+void AliTOFv0::DrawModule() const
+{
+ //
+ // Draw a shaded view of the Time Of Flight version 0
+ //