-
- dm[0]= .3;
- dm[1]= .3;
- dm[2]= 4.5;
-
- gMC->Gsvolu("TPSC","BOX ",idtmed[0],dm,3);
-
- // TPC Connectors
-
- dm[0]= .25;
- dm[1]= .15;
- dm[2]= 3.75;
-
- gMC->Gsvolu("TPCC","BOX ",idtmed[13],dm,3);
-
- gMC->Gspos("TPCC",1,"TPSC",0.,0.15,0.,0,"ONLY");
-
- zz = -12.7875;
-
-
- Float_t alpha;
- Float_t astep;
-
- // inner part of the inner sector - 2 x 20 holes
-
- astep = 20.00096874/19.;
-
- alpha = 10.00048437-astep;
-
- Float_t x1,x2;
-
- x1 = 13.31175725;
- x1 -= 0.996357832;
-
- x2 = 15.06180253;
- x2 -= 1.163028812;
-
- Int_t ncon;
-
- for(ncon=0;ncon<20;ncon++){
-
- phi1 = 0.;
- theta1 = 90.+alpha;
- phi2=90.;
- theta2 = 90.;
- phi3 = (alpha>0) ? 0. : 180.;
- theta3 = TMath::Abs(alpha);
-
- AliMatrix(idrotm[nRotMat], theta1, phi1, theta2, phi2, theta3, phi3);
-
-
-
- gMC->Gspos("TPSC",ncon+1,"TIRC",x1,0.3,-12.7875,idrotm[nRotMat],"ONLY");
- gMC->Gspos("TPSC",ncon+21,"TIRC",x2,0.3,-2.8625,idrotm[nRotMat],"ONLY");
-
-
- x1 -= 1.296357833;
- x2 -= 1.463028812;
-
- alpha -= astep;
- nRotMat++;
-
- }
-
- // outer part of the inner sector - 2 x 25 holes
-
- astep = 20.00096874/24.;
- alpha = 10.00048437-astep;
-
- x1 = 16.81184781;
- x1 -= 1.016295986;
-
- x2 = 18.5618931;
- x2 -= 1.150914854;
-
- for(ncon=0;ncon<25;ncon++){
-
- phi1 = 0.;
- theta1 = 90.+alpha;
- phi2=90.;
- theta2 = 90.;
- phi3 = (alpha>0) ? 0. : 180.;
- theta3 = TMath::Abs(alpha);
-
- AliMatrix(idrotm[nRotMat], theta1, phi1, theta2, phi2, theta3, phi3);
-
-
-
- gMC->Gspos("TPSC",ncon+41,"TIRC",x1,0.3,7.0625,idrotm[nRotMat],"ONLY");
- gMC->Gspos("TPSC",ncon+66,"TIRC",x2,0.3,16.9875,idrotm[nRotMat],"ONLY");
-
-
- x1 -= 1.316295986;
- x2 -= 1.450914854;
-
- alpha -= astep;
- nRotMat++;
-
- }
-
- //--------------------------------------------------------------------------
- // TPC Outer Readout Chambers
- // this is NOT a final design
- //--------------------------------------------------------------------------
-
- dm[0]= 23.3875;
- dm[1]= 43.524;
- dm[2]= 1.5; //thickness
- dm[3]= 57.1;
-
- gMC->Gsvolu("TORC","TRD1",idtmed[4],dm,4);
-
- //------------------------------------------------
- // Tpc Outer readout chamber Pad Plane
- //------------------------------------------------
-
- dm[2]= 0.5;
-
- gMC->Gsvolu("TOPP","TRD1",idtmed[12],dm,4);
-
- dm[0] -= 1.218511934;
- dm[1] -= 1.218511934;
- dm[2] = 0.35;
-
- gMC->Gsvolu("TOC3","TRD1",idtmed[1],dm,4);
-
- gMC->Gspos("TOC3",1,"TOPP",0.,0.15,0.,0,"ONLY");
-
- gMC->Gspos("TOPP",1,"TORC",0.,1.0,0.,0,"ONLY");
-
- // empty space
-
- dm[0]= 21.035;
- dm[1]= 38.7205;
- dm[2]= 0.7;
- dm[3]= 50.15;
-
- gMC->Gsposp("TRCE",10,"TORC",0.,-0.8,-2.15,0,"ONLY",dm,4);
-
- dm[0]= 22.2935;
- dm[1]= 40.5085;
- dm[2]= 2.25;
- dm[3]= 51.65;
-
- gMC->Gsvolu("TOC1","TRD1",idtmed[4],dm,4);
-
- dm[0]= 21.35;
- dm[1]= 38.7205;
- dm[2]= 2.25;
- dm[3]= 50.15;
-
- gMC->Gsposp("TRCE",11,"TOC1",0.,0.,0.,0,"ONLY",dm,4);
-
- //-----------------------------------------------
- // Tpc Services Support Wheel
- //-----------------------------------------------
-
- dm[0]=0.;
- dm[1]=360.;
- dm[2]=18.;
- dm[3]=2.;
-
- dm[4]= -5.;
- dm[5]= 77.017;
- dm[6]= 255.267;
-
- dm[7]= 5.;
- dm[8]= dm[5];
- dm[9]= dm[6];
-
- gMC->Gsvolu("TSSW","PGON",idtmed[4],dm,10);
-
- // Tpc Services Wheel Cover
-
- dm[4]= -0.5;
- dm[7]= 0.5;
-
- gMC->Gsvolu("TSWC","PGON",idtmed[4],dm,10);
-
- // Tpc Service wheel Cover Empty space
-
- dm[0]= 10.99;
- dm[1]= 39.599;
- dm[2]= .5;
- dm[3]= 81.125;
-
- gMC->Gsvolu("TSCE","TRD1",idtmed[0],dm,4);
-
- // Tpc services Wheel Empty Spaces
-
- dm[0]= 13.18017507;
- dm[1]= 44.61045938;
- dm[2]= 4.;
- dm[3]= 89.125;
-
- gMC->Gsvolu("TWES","TRD1",idtmed[0],dm,4);
-
- // Tpc Services Wheel Bars
-
- gMC->Gsvolu("TSWB","TRD1",idtmed[4],dm,0);
-
- // bars-> TWES
-
- dm[2]= 4.;
- dm[3]= .4;
-
- dm[0]= 13.8149522;
- dm[1]= 13.95601379;
-
- gMC->Gsposp("TSWB",1,"TWES",0.,0.,-85.125,0,"ONLY",dm,4);
-
- dm[0]= 43.83462067;
- dm[1]= 43.97568225;
-
- gMC->Gsposp("TSWB",2,"TWES",0.,0.,85.125,0,"ONLY",dm,4);
-
- // TPc ELectronics - right now 30% X0 Si
-
- dm[0]= 14.03813696;
- dm[1]= 43.3524075;
- dm[2]= 1.404;
- dm[3]= 83.125;
-
- gMC->Gsvolu("TPEL","TRD1",idtmed[11],dm,4);
- gMC->Gspos("TPEL",1,"TWES",0.,0.,0.,0,"ONLY");
-
- //--------------------------------------------------------------------------
- // End caps
- //--------------------------------------------------------------------------
-
- // TPc Main Wheel - Al
-
- dm[0]= 74.9;
- dm[1]= 264.4;
- dm[2]= 3.0;
-
- gMC->Gsvolu("TPMW","TUBE",idtmed[4],dm,3);
-
- //--------------------------------------------------------------------------
- // Tpc Empty Space for the Readout chambers
- //--------------------------------------------------------------------------
-
- Float_t rLow= 86.2;
- Float_t rUp= 243.5;
- Float_t dR = 0.5*(rUp-rLow);
-
- space= 1.5/cosAlpha; // wheel ribs are 3.0 cm wide
-
- dm[0]= rLow*tanAlpha-space;
- dm[1]= rUp*tanAlpha-space;
- dm[2] = 3.0;
- dm[3]= dR;
-
- gMC->Gsvolu("TESR","TRD1",idtmed[0],dm,4);
-
- // TIC1->TESR
-
- gMC->Gspos("TIC1",1,"TESR",0.,0.75,-dR+23.97,0,"ONLY");
-
- // TOC1->TESR
-
- gMC->Gspos("TOC1",1,"TESR",0.,0.75,dR-55.02,0,"ONLY");
-
- // Tpc Empty Space Bars - Al (daughters of TESR)
-
- Float_t zBar;
-
- gMC->Gsvolu("TESB","TRD1",idtmed[4],dm,0);
-
- // lower bar
-
- dm[0]= rLow*tanAlpha-space;
- dm[1]= 88.7*tanAlpha-space;
- dm[2]= 2.25;
- dm[3]= 1.275;
-
- zBar = -dR+dm[3];
-
- gMC->Gsposp("TESB",1,"TESR",0.,0.75,zBar,0,"ONLY",dm,4);
-
- // middle bar
-
- dm[0]= 131.65*tanAlpha-space;
- dm[1]= 136.5*tanAlpha-space;
- dm[3]= 2.425;
-
- zBar = -dR +131.65+dm[3]-rLow;
-
- gMC->Gsposp("TESB",2,"TESR",0.,0.75,zBar,0,"ONLY",dm,4);
-
- // upper bar
-
- dm[0]= 240.4*tanAlpha-space;
- dm[1]= rUp*tanAlpha-space;
- dm[3]= 1.55;
-
- zBar = dR-dm[3];
-
- gMC->Gsposp("TESB",3,"TESR",0.,0.75,zBar,0,"ONLY",dm,4);
-
- //------------------------------------------------------
- // TPc Lower "S" Sectors
- //------------------------------------------------------
-
-
- Float_t inSecLowEdge = fTPCParam->GetInnerRadiusLow();
- Float_t inSecUpEdge = fTPCParam->GetInnerRadiusUp();
-
- dm[0] = inSecLowEdge*TMath::Tan(0.5*innerOpenAngle)-0.01;
- dm[1] = inSecUpEdge*TMath::Tan(0.5*innerOpenAngle)-0.01;
- dm[2] = 0.5*(250. - 5.e-3);
- dm[3] = 0.5*(inSecUpEdge-inSecLowEdge);
-
- gMC->Gsvolu("TPLS", "TRD1", idtmed[2], dm, 4); // sensitive
-
-
+ cfl->DefineSection(4,68.6,59.7,61.2);
+ cfl->DefineSection(5,71.1,59.7,61.2);
+ //
+ TGeoVolume *cflv = new TGeoVolume("TPC_CDR",cfl,m3);
+ // sandwich
+ TGeoTube *cd1 = new TGeoTube(60.6424,61.19,71.1);
+ TGeoTube *cd2 = new TGeoTube(60.6462,61.1862,71.1);
+ TGeoTube *cd3 = new TGeoTube(60.6662,61.1662,71.1);
+ //
+ TGeoMedium *sm6 = gGeoManager->GetMedium("TPC_Prepreg1");
+ TGeoVolume *cd1v = new TGeoVolume("TPC_CDR1",cd1,sm2); //tedlar
+ TGeoVolume *cd2v = new TGeoVolume("TPC_CDR2",cd2,sm6);// prepreg1
+ TGeoVolume *cd3v = new TGeoVolume("TPC_CDR3",cd3,sm4); //nomex
+ //
+ // seals for central drum 2 copies
+ //
+ TGeoTube *cs = new TGeoTube(56.9,61.2,0.1);
+ TGeoMedium *sm7 = gGeoManager->GetMedium("TPC_Mylar");
+ TGeoVolume *csv = new TGeoVolume("TPC_CDRS",cs,sm7);
+ v1->AddNode(csv,1,new TGeoTranslation(0.,0.,-71.2));
+ v1->AddNode(csv,2,new TGeoTranslation(0.,0.,71.2));
+ //
+ // seal collars
+ TGeoPcon *se = new TGeoPcon(0.,360.,6);
+ se->DefineSection(0,-72.8,59.7,61.2);
+ se->DefineSection(1,-72.3,59.7,61.2);
+ //
+ se->DefineSection(2,-72.3,58.85,61.2);
+ se->DefineSection(3,-71.6,58.85,61.2);
+ //
+ se->DefineSection(4,-71.6,59.7,61.2);
+ se->DefineSection(5,-71.3,59.7,61.2);
+ //
+ TGeoVolume *sev = new TGeoVolume("TPC_CDCE",se,m3);
+ //
+ TGeoTube *si = new TGeoTube(56.9,58.8,1.);
+ TGeoVolume *siv = new TGeoVolume("TPC_CDCI",si,m3);
+ //
+ // define reflection matrix
+ //
+ TGeoRotation *ref = new TGeoRotation("ref",90.,0.,90.,90.,180.,0.);
+ //
+ cd1v->AddNode(cd2v,1); cd2v->AddNode(cd3v,1); cflv->AddNode(cd1v,1);
+ //
+ v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-69.9));
+ v1->AddNode(siv,2,new TGeoTranslation(0.,0.,69.9));
+ v1->AddNode(sev,1); v1->AddNode(sev,2,ref); v1->AddNode(cflv,1);
+ //
+ // central membrane - 2 rings and a mylar membrane - assembly
+ //
+ TGeoTube *ih = new TGeoTube(81.05,84.05,0.3);
+ TGeoTube *oh = new TGeoTube(250.,256.,.5);
+ TGeoTube *mem = new TGeoTube(84.05,250,0.01);
+ TGeoVolume *ihv = new TGeoVolume("TPC_IHVH",ih,m3);
+ TGeoVolume *ohv = new TGeoVolume("TPC_OHVH",oh,m3);
+ TGeoVolume *memv = new TGeoVolume("TPC_HV",mem,sm7);
+ //
+ TGeoVolumeAssembly *cm = new TGeoVolumeAssembly("TPC_HVMEM");
+ cm->AddNode(ihv,1);
+ cm->AddNode(ohv,1);
+ cm->AddNode(memv,1);
+ v9->AddNode(cm,1);
+ //
+ // end caps - they are make as an assembly of single segments
+ // containing both readout chambers
+ //
+ Double_t openingAngle = 10.*TMath::DegToRad();
+ Double_t thick=1.5; // rib
+ Double_t shift = thick/TMath::Sin(openingAngle);
+ //
+ Double_t lowEdge = 86.3; // hole in the wheel
+ Double_t upEdge = 240.4; // hole in the wheel
+ //
+ new TGeoTubeSeg("sec",74.5,264.4,3.,0.,20.);
+ //
+ TGeoPgon *hole = new TGeoPgon("hole",0.,20.,1,4);
+ //
+ hole->DefineSection(0,-3.5,lowEdge-shift,upEdge-shift);
+ hole->DefineSection(1,-1.5,lowEdge-shift,upEdge-shift);
+ //
+ hole->DefineSection(2,-1.5,lowEdge-shift,upEdge+3.-shift);
+ hole->DefineSection(3,3.5,lowEdge-shift,upEdge+3.-shift);
+ //
+ Double_t ys = shift*TMath::Sin(openingAngle);
+ Double_t xs = shift*TMath::Cos(openingAngle);
+ TGeoTranslation *tr = new TGeoTranslation("tr",xs,ys,0.);
+ tr->RegisterYourself();
+ TGeoCompositeShape *chamber = new TGeoCompositeShape("sec-hole:tr");
+ TGeoVolume *sv = new TGeoVolume("TPC_WSEG",chamber,m3);
+ TGeoPgon *bar = new TGeoPgon("bar",0.,20.,1,2);
+ bar->DefineSection(0,-3.,131.5-shift,136.5-shift);
+ bar->DefineSection(1,1.5,131.5-shift,136.5-shift);
+ TGeoVolume *barv = new TGeoVolume("TPC_WBAR",bar,m3);
+ TGeoVolumeAssembly *ch = new TGeoVolumeAssembly("TPC_WCH");//empty segment
+ //
+ ch->AddNode(sv,1); ch->AddNode(barv,1,tr);
+ //
+ // readout chambers
+ //
+ // IROC first
+ //
+ TGeoTrd1 *ibody = new TGeoTrd1(13.8742,21.3328,4.29,21.15);
+ TGeoVolume *ibdv = new TGeoVolume("TPC_IROCB",ibody,m3);
+ // empty space
+ TGeoTrd1 *emp = new TGeoTrd1(12.3742,19.8328,3.99,19.65);
+ TGeoVolume *empv = new TGeoVolume("TPC_IROCE",emp,m1);
+ ibdv->AddNode(empv,1,new TGeoTranslation(0.,-0.3,0.));
+ //bars
+ Double_t tga = (19.8328-12.3742)/39.3;
+ Double_t xmin,xmax;
+ xmin = 9.55*tga+12.3742;
+ xmax = 9.95*tga+12.3742;
+ TGeoTrd1 *ib1 = new TGeoTrd1(xmin,xmax,3.29,0.2);
+ TGeoVolume *ib1v = new TGeoVolume("TPC_IRB1",ib1,m3);
+ empv->AddNode(ib1v,1,new TGeoTranslation("tt1",0.,0.7,-9.9));
+ xmin=19.4*tga+12.3742;
+ xmax=19.9*tga+12.3742;
+ TGeoTrd1 *ib2 = new TGeoTrd1(xmin,xmax,3.29,0.25);
+ TGeoVolume *ib2v = new TGeoVolume("TPC_TRB2",ib2,m3);
+ empv->AddNode(ib2v,1,new TGeoTranslation(0.,0.7,0.));
+ xmin=29.35*tga+12.3742;
+ xmax=29.75*tga+12.3742;
+ TGeoTrd1 *ib3 = new TGeoTrd1(xmin,xmax,3.29,0.2);
+ TGeoVolume *ib3v = new TGeoVolume("TPC_IRB3",ib3,m3);
+ empv->AddNode(ib3v,1,new TGeoTranslation(0.,0.7,9.9));
+ //
+ // holes for connectors
+ //
+ TGeoBBox *conn = new TGeoBBox(0.4,0.3,4.675); // identical for iroc and oroc
+ TGeoVolume *connv = new TGeoVolume("TPC_RCCON",conn,m1);
+ TString fileName(gSystem->Getenv("ALICE_ROOT"));
+ fileName += "/TPC/conn_iroc.dat";
+ ifstream in;
+ in.open(fileName.Data(), ios_base::in); // asci file
+ for(Int_t i =0;i<86;i++){
+ Double_t y = 3.99;
+ Double_t x,z,ang;
+ in>>x>>z>>ang;
+ z-=26.5;
+ TGeoRotation *rrr = new TGeoRotation();
+ rrr->RotateY(ang);
+ TGeoCombiTrans *trans = new TGeoCombiTrans("trans",x,y,z,rrr);
+ ibdv->AddNode(connv,i+1,trans);
+ }
+ in.close();
+ // "cap"
+ new TGeoTrd1("icap",14.5974,23.3521,1.19,24.825);
+ // "hole"
+ new TGeoTrd1("ihole",13.8742,21.3328,1.2,21.15);
+ TGeoTranslation *tr1 = new TGeoTranslation("tr1",0.,0.,1.725);
+ tr1->RegisterYourself();
+ TGeoCompositeShape *ic = new TGeoCompositeShape("icap-ihole:tr1");
+ TGeoVolume *icv = new TGeoVolume("TPC_IRCAP",ic,m3);
+ //
+ // pad plane and wire fixations
+ //
+ TGeoTrd1 *pp = new TGeoTrd1(14.5974,23.3521,0.3,24.825); //pad+iso
+ TGeoMedium *m4 = gGeoManager->GetMedium("TPC_G10");
+ TGeoVolume *ppv = new TGeoVolume("TPC_IRPP",pp,m4);
+ TGeoPara *f1 = new TGeoPara(.6,.5,24.825,0.,-10.,0.);
+ TGeoVolume *f1v = new TGeoVolume("TPC_IRF1",f1,m4);
+ TGeoPara *f2 = new TGeoPara(.6,.5,24.825,0.,10.,0.);
+ TGeoVolume *f2v = new TGeoVolume("TPC_IRF2",f2,m4);
+ //
+ TGeoVolumeAssembly *iroc = new TGeoVolumeAssembly("TPC_IROC");
+ //
+ iroc->AddNode(ibdv,1);
+ iroc->AddNode(icv,1,new TGeoTranslation(0.,3.1,-1.725));
+ iroc->AddNode(ppv,1,new TGeoTranslation(0.,4.59,-1.725));
+ tga =(23.3521-14.5974)/49.65;
+ Double_t xx = 24.825*tga+14.5974-0.6;
+ iroc->AddNode(f1v,1,new TGeoTranslation(-xx,5.39,-1.725));
+ iroc->AddNode(f2v,1,new TGeoTranslation(xx,5.39,-1.725));
+ //
+ // OROC
+ //
+ TGeoTrd1 *obody = new TGeoTrd1(22.2938,40.5084,4.19,51.65);
+ TGeoVolume *obdv = new TGeoVolume("TPC_OROCB",obody,m3);
+ TGeoTrd1 *oemp = new TGeoTrd1(20.2938,38.5084,3.89,49.65);
+ TGeoVolume *oempv = new TGeoVolume("TPC_OROCE",oemp,m1);
+ obdv->AddNode(oempv,1,new TGeoTranslation(0.,-0.3,0.));
+ //horizontal bars
+ tga=(38.5084-20.2938)/99.3;
+ xmin=tga*10.2+20.2938;
+ xmax=tga*10.6+20.2938;
+ TGeoTrd1 *ob1 = new TGeoTrd1(xmin,xmax,2.915,0.2);
+ TGeoVolume *ob1v = new TGeoVolume("TPC_ORB1",ob1,m3);
+ //
+ xmin=22.55*tga+20.2938;
+ xmax=24.15*tga+20.2938;
+ TGeoTrd1 *ob2 = new TGeoTrd1(xmin,xmax,2.915,0.8);
+ TGeoVolume *ob2v = new TGeoVolume("TPC_ORB2",ob2,m3);
+ //
+ xmin=36.1*tga+20.2938;
+ xmax=36.5*tga+20.2938;
+ TGeoTrd1 *ob3 = new TGeoTrd1(xmin,xmax,2.915,0.2);
+ TGeoVolume *ob3v = new TGeoVolume("TPC_ORB3",ob3,m3);
+ //
+ xmin=49.0*tga+20.2938;
+ xmax=50.6*tga+20.2938;
+ TGeoTrd1 *ob4 = new TGeoTrd1(xmin,xmax,2.915,0.8);
+ TGeoVolume *ob4v = new TGeoVolume("TPC_ORB4",ob4,m3);
+ //
+ xmin=63.6*tga+20.2938;
+ xmax=64.0*tga+20.2938;
+ TGeoTrd1 *ob5 = new TGeoTrd1(xmin,xmax,2.915,0.2);
+ TGeoVolume *ob5v = new TGeoVolume("TPC_ORB5",ob5,m3);
+ //
+ xmin=75.5*tga+20.2938;
+ xmax=77.15*tga+20.2938;
+ TGeoTrd1 *ob6 = new TGeoTrd1(xmin,xmax,2.915,0.8);
+ TGeoVolume *ob6v = new TGeoVolume("TPC_ORB6",ob6,m3);
+ //
+ xmin=88.7*tga+20.2938;
+ xmax=89.1*tga+20.2938;
+ TGeoTrd1 *ob7 = new TGeoTrd1(xmin,xmax,2.915,0.2);
+ TGeoVolume *ob7v = new TGeoVolume("TPC_ORB7",ob7,m3);
+ //
+ oempv->AddNode(ob1v,1,new TGeoTranslation(0.,0.975,-39.25));
+ oempv->AddNode(ob2v,1,new TGeoTranslation(0.,0.975,-26.3));
+ oempv->AddNode(ob3v,1,new TGeoTranslation(0.,0.975,-13.35));
+ oempv->AddNode(ob4v,1,new TGeoTranslation(0.,0.975,0.15));
+ oempv->AddNode(ob5v,1,new TGeoTranslation(0.,0.975,14.15));
+ oempv->AddNode(ob6v,1,new TGeoTranslation(0.,0.975,26.7));
+ oempv->AddNode(ob7v,1,new TGeoTranslation(0.,0.975,39.25));
+ // vertical bars
+ TGeoBBox *ob8 = new TGeoBBox(0.8,2.915,5.1);
+ TGeoBBox *ob9 = new TGeoBBox(0.8,2.915,5.975);
+ TGeoBBox *ob10 = new TGeoBBox(0.8,2.915,5.775);
+ TGeoBBox *ob11 = new TGeoBBox(0.8,2.915,6.25);
+ TGeoBBox *ob12 = new TGeoBBox(0.8,2.915,6.5);
+ //
+ TGeoVolume *ob8v = new TGeoVolume("TPC_ORB8",ob8,m3);
+ TGeoVolume *ob9v = new TGeoVolume("TPC_ORB9",ob9,m3);
+ TGeoVolume *ob10v = new TGeoVolume("TPC_ORB10",ob10,m3);
+ TGeoVolume *ob11v = new TGeoVolume("TPC_ORB11",ob11,m3);
+ TGeoVolume *ob12v = new TGeoVolume("TPC_ORB12",ob12,m3);
+ //
+ oempv->AddNode(ob8v,1,new TGeoTranslation(0.,0.975,-44.55));
+ oempv->AddNode(ob8v,2,new TGeoTranslation(0.,0.975,44.55));
+ oempv->AddNode(ob9v,1,new TGeoTranslation(0.,0.975,-33.075));
+ oempv->AddNode(ob9v,2,new TGeoTranslation(0.,0.975,-19.525));
+ oempv->AddNode(ob10v,1,new TGeoTranslation(0.,0.975,20.125));
+ oempv->AddNode(ob10v,2,new TGeoTranslation(0.,0.975,33.275));
+ oempv->AddNode(ob11v,1,new TGeoTranslation(0.,0.975,-6.9));
+ oempv->AddNode(ob12v,1,new TGeoTranslation(0.,0.975,7.45));
+ //
+ // holes for connectors
+ //
+ fileName = gSystem->Getenv("ALICE_ROOT");
+ fileName += "/TPC/conn_oroc.dat";
+ in.open(fileName.Data(), ios_base::in); // asci file
+ for(Int_t i =0;i<78;i++){
+ Double_t y =3.89;
+ Double_t x,z,ang;
+ Double_t x1,z1,x2,z2;
+ in>>x>>z>>ang;
+ Double_t xr = 4.7*TMath::Sin(ang*TMath::DegToRad());
+ Double_t zr = 4.7*TMath::Cos(ang*TMath::DegToRad());
+ //
+ x1=xr+x; x2=-xr+x; z1=zr+z; z2 = -zr+z;
+ //
+ TGeoRotation *rr = new TGeoRotation();
+ rr->RotateY(ang);
+ z1-=54.95;
+ z2-=54.95;
+ TGeoCombiTrans *trans1 = new TGeoCombiTrans("trans1",x1,y,z1,rr);
+ TGeoCombiTrans *trans2 = new TGeoCombiTrans("trans2",x2,y,z2,rr);
+ obdv->AddNode(connv,i+1,trans1);
+ obdv->AddNode(connv,i+79,trans2);
+ }
+ in.close();
+ // cap
+ new TGeoTrd1("ocap",23.3874,43.5239,1.09,57.1);
+ new TGeoTrd1("ohole",22.2938,40.5084,1.09,51.65);
+ TGeoTranslation *tr5 = new TGeoTranslation("tr5",0.,0.,-2.15);
+ tr5->RegisterYourself();
+ TGeoCompositeShape *oc = new TGeoCompositeShape("ocap-ohole:tr5");
+ TGeoVolume *ocv = new TGeoVolume("TPC_ORCAP",oc,m3);
+ //
+ // pad plane and wire fixations
+ //
+ TGeoTrd1 *opp = new TGeoTrd1(23.3874,43.5239,0.3,57.1);
+ TGeoVolume *oppv = new TGeoVolume("TPC_ORPP",opp,m4);
+ //
+ tga=(43.5239-23.3874)/114.2;
+ TGeoPara *f3 = new TGeoPara(.7,.6,57.1,0.,-10.,0.);
+ TGeoPara *f4 = new TGeoPara(.7,.6,57.1,0.,10.,0.);
+ xx = 57.1*tga+23.3874-0.7;
+ TGeoVolume *f3v = new TGeoVolume("TPC_ORF1",f3,m4);
+ TGeoVolume *f4v = new TGeoVolume("TPC_ORF2",f4,m4);
+ //
+ TGeoVolumeAssembly *oroc = new TGeoVolumeAssembly("TPC_OROC");
+ //
+ oroc->AddNode(obdv,1);
+ oroc->AddNode(ocv,1,new TGeoTranslation(0.,3.1,2.15));
+ oroc->AddNode(oppv,1,new TGeoTranslation(0.,4.49,2.15));
+ oroc->AddNode(f3v,1,new TGeoTranslation(-xx,5.39,2.15));
+ oroc->AddNode(f4v,1,new TGeoTranslation(xx,5.39,2.15));
+ //
+ // now iroc and oroc are placed into a sector...
+ //
+ TGeoVolumeAssembly *secta = new TGeoVolumeAssembly("TPC_SECT"); // a-side
+ TGeoVolumeAssembly *sectc = new TGeoVolumeAssembly("TPC_SECT"); // c-side
+ TGeoRotation rot1("rot1",90.,90.,0.);
+ TGeoRotation rot2("rot2");
+ rot2.RotateY(10.);
+ TGeoRotation *rot = new TGeoRotation("rot");
+ *rot=rot1*rot2;
+ //
+ Double_t x0,y0;
+ x0=110.2*TMath::Cos(openingAngle);
+ y0=110.2*TMath::Sin(openingAngle);
+ TGeoCombiTrans *combi1a = new TGeoCombiTrans("combi1",x0,y0,1.09+0.195,rot); //a-side
+ TGeoCombiTrans *combi1c = new TGeoCombiTrans("combi1",x0,y0,1.09+0.222,rot); //c-side
+ x0=188.45*TMath::Cos(openingAngle);
+ y0=188.45*TMath::Sin(openingAngle);
+ TGeoCombiTrans *combi2a = new TGeoCombiTrans("combi2",x0,y0,0.99+0.195,rot); //a-side
+ TGeoCombiTrans *combi2c = new TGeoCombiTrans("combi2",x0,y0,0.99+0.222,rot); //c-side
+ //
+ //
+ // A-side
+ //
+ secta->AddNode(ch,1);
+ secta->AddNode(iroc,1,combi1a);
+ secta->AddNode(oroc,1,combi2a);
+ //
+ // C-side
+ //
+ sectc->AddNode(ch,1);
+ sectc->AddNode(iroc,1,combi1c);
+ sectc->AddNode(oroc,1,combi2c);
+ //
+ // now I try to make wheels...
+ //
+ TGeoVolumeAssembly *wheela = new TGeoVolumeAssembly("TPC_ENDCAP");
+ TGeoVolumeAssembly *wheelc = new TGeoVolumeAssembly("TPC_ENDCAP");
+ //
+ for(Int_t i =0;i<18;i++){
+ Double_t phi = (20.*i);
+ TGeoRotation *r = new TGeoRotation();
+ r->RotateZ(phi);
+ wheela->AddNode(secta,i+1,r);
+ wheelc->AddNode(sectc,i+1,r);
+
+ }
+ // wheels in the drift volume!
+
+ TGeoCombiTrans *combi3 = new TGeoCombiTrans("combi3",0.,0.,256.6,ref);
+ v9->AddNode(wheela,1,combi3);
+ v9->AddNode(wheelc,2,new TGeoTranslation(0.,0.,-256.6));
+ //_____________________________________________________________
+ // service support wheel
+ //_____________________________________________________________
+ TGeoPgon *sw = new TGeoPgon(0.,20.,1,2);
+ sw->DefineSection(0,-4.,80.5,251.75);
+ sw->DefineSection(1,4.,80.5,251.75);
+ TGeoVolume *swv = new TGeoVolume("TPC_SWSEG",sw,m3); //Al
+ //
+ thick=1.;
+ shift = thick/TMath::Sin(openingAngle);
+ TGeoPgon *sh = new TGeoPgon(0.,20.,1,2);
+ sh->DefineSection(0,-4.,81.5-shift,250.75-shift);
+ sh->DefineSection(1,4.,81.5-shift,250.75-shift);
+ TGeoVolume *shv = new TGeoVolume("TPC_SWS1",sh,m1); //Air
+ //
+ TGeoMedium *m9 = gGeoManager->GetMedium("TPC_Si");
+ TGeoPgon *el = new TGeoPgon(0.,20.,1,2);
+ el->DefineSection(0,-1.872,81.5-shift,250.75-shift);
+ el->DefineSection(1,1.872,81.5-shift,250.75-shift);
+ TGeoVolume *elv = new TGeoVolume("TPC_ELEC",el,m9); //Si
+ //
+ shv->AddNode(elv,1);
+ //
+ //
+ ys = shift*TMath::Sin(openingAngle);
+ xs = shift*TMath::Cos(openingAngle);
+ swv->AddNode(shv,1,new TGeoTranslation(xs,ys,0.));
+ // cover
+ TGeoPgon *co = new TGeoPgon(0.,20.,1,2);
+ co->DefineSection(0,-0.5,77.,255.25);
+ co->DefineSection(1,0.5,77.,255.25);
+ TGeoVolume *cov = new TGeoVolume("TPC_SWC1",co,m3);//Al
+ // hole in a cover
+ TGeoPgon *coh = new TGeoPgon(0.,20.,1,2);
+ shift=4./TMath::Sin(openingAngle);
+ coh->DefineSection(0,-0.5,85.-shift,247.25-shift);
+ coh->DefineSection(1,0.5,85.-shift,247.25-shift);
+ //
+ TGeoVolume *cohv = new TGeoVolume("TPC_SWC2",coh,m1);
+ //
+ ys = shift*TMath::Sin(openingAngle);
+ xs = shift*TMath::Cos(openingAngle);
+ cov->AddNode(cohv,1,new TGeoTranslation(xs,ys,0.));
+ //
+ // Sector as an Assembly
+ //
+ TGeoVolumeAssembly *swhs = new TGeoVolumeAssembly("TPC_SSWSEC");
+ swhs->AddNode(swv,1);
+ swhs->AddNode(cov,1,new TGeoTranslation(0.,0.,-4.5));
+ swhs->AddNode(cov,2,new TGeoTranslation(0.,0.,4.5));
+ //
+ // SSW as an Assembly of sectors
+ //
+ TGeoVolumeAssembly *swheel = new TGeoVolumeAssembly("TPC_SSWHEEL");
+ for(Int_t i =0;i<18;i++){
+ Double_t phi = (20.*i);
+ TGeoRotation *r = new TGeoRotation();
+ r->RotateZ(phi);
+ swheel->AddNode(swhs,i+1,r);
+ }
+ v1->AddNode(swheel,1,new TGeoTranslation(0.,0.,-284.6));
+ v1->AddNode(swheel,2,new TGeoTranslation(0.,0.,284.6));
+
+ // sensitive strips - strip "0" is always set
+ // conditional
+ Int_t totrows;
+ totrows = fTPCParam->GetNRowLow() + fTPCParam->GetNRowUp();
+ Double_t *upar;
+ upar=NULL;
+ gGeoManager->Volume("TPC_Strip","PGON",m5->GetId(),upar);
+ upar=new Double_t [10];
+ upar[0]=0.;
+ upar[1]=360.;
+ upar[2]=18.;
+ upar[3]=2.;
+ //
+ upar[4]=-124.8;
+ upar[7]=124.8;
+
+ Double_t rlow=fTPCParam->GetPadRowRadiiLow(0);
+
+ upar[5]=rlow;
+ upar[6]=rlow+.01;
+ upar[8]=upar[5];
+ upar[9]=upar[6];
+ //
+ gGeoManager->Node("TPC_Strip",1,"TPC_Drift",0.,0.,124.82,0,kTRUE,upar,10);
+ gGeoManager->Node("TPC_Strip",totrows+1,
+ "TPC_Drift",0.,0.,-124.82,0,kTRUE,upar,10);
+ //
+ // now, strips optionally
+ //
+ if(fSens){
+ //lower sectors
+ for(Int_t i=2;i<fTPCParam->GetNRowLow()+1;i++){
+ rlow=fTPCParam->GetPadRowRadiiLow(i-1);
+ upar[5]=rlow;
+ upar[6]=rlow+.01;
+ upar[8]=upar[5];
+ upar[9]=upar[6];
+ gGeoManager->Node("TPC_Strip",i,
+ "TPC_Drift",0.,0.,124.82,0,kTRUE,upar,10);
+ gGeoManager->Node("TPC_Strip",totrows+i,
+ "TPC_Drift",0.,0.,-124.82,0,kTRUE,upar,10);
+ }
+ //upper sectors
+ for(Int_t i=1;i<fTPCParam->GetNRowUp()+1;i++){
+ rlow=fTPCParam->GetPadRowRadiiUp(i-1);
+ upar[5]=rlow;
+ upar[6]=rlow+.01;
+ upar[8]=upar[5];
+ upar[9]=upar[6];
+ gGeoManager->Node("TPC_Strip",i+fTPCParam->GetNRowLow(),
+ "TPC_Drift",0.,0.,124.82,0,kTRUE,upar,10);
+ gGeoManager->Node("TPC_Strip",totrows+i+fTPCParam->GetNRowLow(),
+ "TPC_Drift",0.,0.,-124.82,0,kTRUE,upar,10);
+ }
+ }//strips