X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFv0.cxx;h=1fec9745dc0203fbd839655c6bf4b229761f300b;hb=ab8b576a69db078e7556937659a83b0dcaa3e1d7;hp=af2986157664bca2b846c9d339a817fdacc6394f;hpb=dfacde6376198417ae8059111b161f12acf105d9;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFv0.cxx b/TOF/AliTOFv0.cxx index af298615766..1fec9745dc0 100644 --- a/TOF/AliTOFv0.cxx +++ b/TOF/AliTOFv0.cxx @@ -13,92 +13,51 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.21 2001/08/28 08:45:59 vicinanz -TTask and TFolder structures implemented - -Revision 1.9 2001/05/04 10:09:48 vicinanz -Major upgrades to the strip structure - -Revision 1.8 2000/12/04 08:48:20 alibrary -Fixing problems in the HEAD - -Revision 1.7 2000/10/02 21:28:17 fca -Removal of useless dependecies via forward declarations - -Revision 1.6 2000/05/10 16:52:18 vicinanz -New TOF version with holes for PHOS/RICH - -Revision 1.4.2.1 2000/05/10 09:37:16 vicinanz -New version with Holes for PHOS/RICH - -Revision 1.14 1999/11/05 22:39:06 fca -New hits structure - -Revision 1.13 1999/11/02 11:26:39 fca -added stdlib.h for exit - -Revision 1.12 1999/11/01 20:41:57 fca -Added protections against using the wrong version of FRAME - -Revision 1.11 1999/10/22 08:04:14 fca -Correct improper use of negative parameters - -Revision 1.10 1999/10/16 19:30:06 fca -Corrected Rotation Matrix and CVS log - -Revision 1.9 1999/10/15 15:35:20 fca -New version for frame1099 with and without holes - -Revision 1.8 1999/09/29 09:24:33 fca -Introduction of the Copyright and cvs Log - -*/ +/* $Id$ */ /////////////////////////////////////////////////////////////////////////////// // // -// Time Of Flight: design of C.Williams // -// // // This class contains the functions for version 0 of the Time Of Flight // // detector. // -// -// VERSION WITH 5 MODULES AND TILTED STRIPS -// NO HITS DEFINED BY DEFAULT FOR THIS VERSION -// FULL COVERAGE VERSION -// -// Authors: -// -// Alessio Seganti -// Domenico Vicinanza -// -// University of Salerno - Italy -// -// Fabrizio Pierella -// University of Bologna - Italy -// -// -//Begin_Html -/* - -*/ -//End_Html +// // +// VERSION WITH 5 MODULES AND TILTED STRIPS // +// NO HITS DEFINED BY DEFAULT FOR THIS VERSION // +// FULL COVERAGE VERSION // +// // +// Authors: // +// // +// Alessio Seganti // +// Domenico Vicinanza // +// // +// University of Salerno - Italy // +// // +// Fabrizio Pierella // +// University of Bologna - Italy // +// // +// // +//Begin_Html // +/* // + // +*/ // +//End_Html // // // /////////////////////////////////////////////////////////////////////////////// -#include +#include #include -#include "AliTOFv0.h" -#include "TBRIK.h" -#include "TGeometry.h" -#include "TNode.h" +#include +#include #include -#include "TObject.h" +#include +#include +#include + +#include "AliConst.h" #include "AliRun.h" +#include "AliTOFv0.h" +#include "AliTOFConstants.h" // AdC #include "AliMC.h" -#include "AliConst.h" - ClassImp(AliTOFv0) @@ -133,31 +92,7 @@ AliTOFv0::AliTOFv0(const char *name, const char *title) } //____________________________________________________________________________ -AliTOFv0::~AliTOFv0() -{ - // destructor - - if ( fHits) { - fHits->Delete() ; - delete fHits ; - fHits = 0 ; - } - - if ( fSDigits) { - fSDigits->Delete() ; - delete fSDigits ; - fSDigits = 0 ; - } - - if ( fDigits) { - fDigits->Delete() ; - delete fDigits ; - fDigits = 0 ; - } - -} -//_____________________________________________________________________________ void AliTOFv0::BuildGeometry() { // @@ -165,10 +100,10 @@ void AliTOFv0::BuildGeometry() // TNode *node, *top; const int kColorTOF = 27; - + // Find top TNODE top = gAlice->GetGeometry()->GetNode("alice"); - + // Position the different copies const Float_t krTof =(fRmax+fRmin)/2; const Float_t khTof = fRmax-fRmin; @@ -176,65 +111,69 @@ void AliTOFv0::BuildGeometry() const Float_t kPi = TMath::Pi(); const Float_t kangle = 2*kPi/kNTof; Float_t ang; - + + // define offset for nodes + Float_t zOffsetC = fZtof - fZlenC*0.5; + Float_t zOffsetB = fZtof - fZlenC - fZlenB*0.5; + Float_t zOffsetA = 0.; // Define TOF basic volume char nodeName0[7], nodeName1[7], nodeName2[7]; char nodeName3[7], nodeName4[7], rotMatNum[7]; - + new TBRIK("S_TOF_C","TOF box","void", - 120*0.5,khTof*0.5,fZlenC*0.5); + fStripLn*0.5,khTof*0.5,fZlenC*0.5); new TBRIK("S_TOF_B","TOF box","void", - 120*0.5,khTof*0.5,fZlenB*0.5); + fStripLn*0.5,khTof*0.5,fZlenB*0.5); new TBRIK("S_TOF_A","TOF box","void", - 120*0.5,khTof*0.5,fZlenA*0.5); - + fStripLn*0.5,khTof*0.5,fZlenA*0.5); + for (Int_t nodeNum=1;nodeNum<19;nodeNum++){ - - if (nodeNum<10) { - sprintf(rotMatNum,"rot50%i",nodeNum); - sprintf(nodeName0,"FTO00%i",nodeNum); - sprintf(nodeName1,"FTO10%i",nodeNum); - sprintf(nodeName2,"FTO20%i",nodeNum); - sprintf(nodeName3,"FTO30%i",nodeNum); - sprintf(nodeName4,"FTO40%i",nodeNum); - } - if (nodeNum>9) { - sprintf(rotMatNum,"rot5%i",nodeNum); - sprintf(nodeName0,"FTO0%i",nodeNum); - sprintf(nodeName1,"FTO1%i",nodeNum); - sprintf(nodeName2,"FTO2%i",nodeNum); - sprintf(nodeName3,"FTO3%i",nodeNum); - sprintf(nodeName4,"FTO4%i",nodeNum); - } - - new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0); - ang = (4.5-nodeNum) * kangle; - - top->cd(); - node = new TNode(nodeName0,nodeName0,"S_TOF_C",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),299.15,rotMatNum); - node->SetLineColor(kColorTOF); - fNodes->Add(node); - - top->cd(); - node = new TNode(nodeName1,nodeName1,"S_TOF_C",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),-299.15,rotMatNum); - node->SetLineColor(kColorTOF); - fNodes->Add(node); - - top->cd(); - node = new TNode(nodeName2,nodeName2,"S_TOF_B",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),146.45,rotMatNum); - node->SetLineColor(kColorTOF); - fNodes->Add(node); - - top->cd(); - node = new TNode(nodeName3,nodeName3,"S_TOF_B",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),-146.45,rotMatNum); - node->SetLineColor(kColorTOF); - fNodes->Add(node); - - top->cd(); - node = new TNode(nodeName4,nodeName4,"S_TOF_A",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),0.,rotMatNum); - node->SetLineColor(kColorTOF); - fNodes->Add(node); + + if (nodeNum<10) { + sprintf(rotMatNum,"rot50%i",nodeNum); + sprintf(nodeName0,"FTO00%i",nodeNum); + sprintf(nodeName1,"FTO10%i",nodeNum); + sprintf(nodeName2,"FTO20%i",nodeNum); + sprintf(nodeName3,"FTO30%i",nodeNum); + sprintf(nodeName4,"FTO40%i",nodeNum); + } + if (nodeNum>9) { + sprintf(rotMatNum,"rot5%i",nodeNum); + sprintf(nodeName0,"FTO0%i",nodeNum); + sprintf(nodeName1,"FTO1%i",nodeNum); + sprintf(nodeName2,"FTO2%i",nodeNum); + sprintf(nodeName3,"FTO3%i",nodeNum); + sprintf(nodeName4,"FTO4%i",nodeNum); + } + + new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0); + ang = (4.5-nodeNum) * kangle; + + top->cd(); + node = new TNode(nodeName0,nodeName0,"S_TOF_C",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),zOffsetC,rotMatNum); + node->SetLineColor(kColorTOF); + fNodes->Add(node); + + top->cd(); + node = new TNode(nodeName1,nodeName1,"S_TOF_C",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),-zOffsetC,rotMatNum); + node->SetLineColor(kColorTOF); + fNodes->Add(node); + + top->cd(); + node = new TNode(nodeName2,nodeName2,"S_TOF_B",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),zOffsetB,rotMatNum); + node->SetLineColor(kColorTOF); + fNodes->Add(node); + + top->cd(); + node = new TNode(nodeName3,nodeName3,"S_TOF_B",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),-zOffsetB,rotMatNum); + node->SetLineColor(kColorTOF); + fNodes->Add(node); + + top->cd(); + node = new TNode(nodeName4,nodeName4,"S_TOF_A",krTof*TMath::Cos(ang),krTof*TMath::Sin(ang),zOffsetA,rotMatNum); + node->SetLineColor(kColorTOF); + fNodes->Add(node); } // end loop on nodeNum } @@ -497,22 +436,26 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, Float_t t = zFLTC+zFLTB+zFLTA*0.5+ 2*db;//Half Width of Barrel - Float_t gap = fGapA; //cm distance between the strip axis + Float_t gap = fGapA+0.5; //cm updated distance between the strip axis Float_t zpos = 0; Float_t ang = 0; - Int_t i=1,j=1; + 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.); - gMC->Gspos("FSTR",j,"FLTA",0.,ycoor, 0.,idrotm[0],"ONLY"); - printf("%f, St. %2i, Pl.3 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); + 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++; + //j++; // AdC Int_t upDown = -1; // upDown=-1 -> Upper strip // upDown=+1 -> Lower strip do{ @@ -523,28 +466,30 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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"); - - printf("%f, St. %2i, Pl.3 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); - - j += 2; - upDown*= -1; // Alternate strips - zcoor = zcoor-(zSenStrip/2)/TMath::Cos(ang)- - upDown*gap*TMath::Tan(ang)- - (zSenStrip/2)/TMath::Cos(ang); + //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); - + 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); - + 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.); @@ -553,17 +498,20 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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"); - printf("%f, St. %2i, Pl.3 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); - + //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; - i=1; + Int_t i=1; // AdC upDown = 1; Float_t deadRegion = 1.0;//cm @@ -580,10 +528,10 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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"); - - printf("%f, St. %2i, Pl.4 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); - + 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; @@ -595,14 +543,16 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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; + 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"); - - printf("%f, St. %2i, Pl.4 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); - + 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); @@ -610,6 +560,9 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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); @@ -617,13 +570,16 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, 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, zcoor,idrotm[nrot], "ONLY"); + 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); - printf("%f, St. %2i, Pl.4 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); + 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); @@ -634,7 +590,8 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, nrot = 0; i=0; - ycoor= -hTof*0.5+kspace+gap; + Float_t deltaGap=-2.5; // [cm] update distance from strip center and plate + ycoor= -hTof*0.5+kspace+gap+deltaGap; do { i++; @@ -644,10 +601,10 @@ void AliTOFv0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC, ang /= kRaddeg; zcoor = zpos+(zFLTC*0.5+zFLTB+zFLTA*0.5+db*2); gMC->Gspos("FSTR",i, "FLTC", 0., ycoor, zcoor,idrotm[nrot], "ONLY"); - - printf("%f, St. %2i, Pl.5 ",ang*kRaddeg,i); - printf("y = %f, z = %f, zpos = %f \n",ycoor,zcoor,zpos); - + 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); @@ -733,7 +690,7 @@ fp */ void AliTOFv0::DrawModule() const { // - // Draw a shaded view of the Time Of Flight version 1 + // Draw a shaded view of the Time Of Flight version 0 // // Set everything unseen gMC->Gsatt("*", "seen", -1); @@ -777,6 +734,191 @@ void AliTOFv0::DrawModule() const gMC->Gdman(18, 4, "MAN"); gMC->Gdopt("hide","off"); } +//_____________________________________________________________________________ +void AliTOFv0::DrawDetectorModules() +{ +// +// Draw a shaded view of the TOF detector version 0 +// + +//Set ALIC mother transparent + gMC->Gsatt("ALIC","SEEN",0); + +// +//Set volumes visible +// +//=====> Level 1 + // Level 1 for TOF volumes + gMC->Gsatt("B077","seen",0); + + +//==========> Level 2 + // Level 2 + gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped - + gMC->Gsatt("B071","seen",0); + gMC->Gsatt("B074","seen",0); + gMC->Gsatt("B075","seen",0); + gMC->Gsatt("B080","seen",0); // B080 does not has sub-level + + + // Level 2 of B071 + gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped - + gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped - + gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped - + gMC->Gsatt("B069","seen",-1); // all B069 sub-levels skipped - + gMC->Gsatt("B056","seen",0); // B056 does not has sub-levels - + gMC->Gsatt("B059","seen",-1); // all B059 sub-levels skipped - + gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped - + gMC->Gsatt("BTR1","seen",0); // BTR1 do not have sub-levels - + gMC->Gsatt("BTO1","seen",0); + + + // Level 2 of B074 + gMC->Gsatt("BTR2","seen",0); // BTR2 does not has sub-levels - + gMC->Gsatt("BTO2","seen",0); + + // Level 2 of B075 + gMC->Gsatt("BTR3","seen",0); // BTR3 do not have sub-levels - + gMC->Gsatt("BTO3","seen",0); + +// ==================> Level 3 + // Level 3 of B071 / Level 2 of BTO1 + gMC->Gsatt("FTOC","seen",-2); + gMC->Gsatt("FTOB","seen",-2); + gMC->Gsatt("FTOA","seen",-2); + + // Level 3 of B074 / Level 2 of BTO2 + // -> cfr previous settings + + // Level 3 of B075 / Level 2 of BTO3 + // -> cfr previous settings + + gMC->Gdopt("hide","on"); + gMC->Gdopt("shad","on"); + gMC->Gsatt("*", "fill", 5); + gMC->SetClipBox("."); + gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000); + gMC->DefaultRange(); + gMC->Gdraw("alic", 45, 40, 0, 10, 10, .015, .015); + gMC->Gdhead(1111,"TOF detector V1"); + gMC->Gdman(18, 4, "MAN"); + gMC->Gdopt("hide","off"); +} + +//_____________________________________________________________________________ +void AliTOFv0::DrawDetectorStrips() +{ +// +// Draw a shaded view of the TOF strips for version 0 +// + +//Set ALIC mother transparent + gMC->Gsatt("ALIC","SEEN",0); + +// +//Set volumes visible +//=====> Level 1 + // Level 1 for TOF volumes + gMC->Gsatt("B077","seen",0); + +//==========> Level 2 + // Level 2 + gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped - + gMC->Gsatt("B071","seen",0); + gMC->Gsatt("B074","seen",0); + gMC->Gsatt("B075","seen",0); + gMC->Gsatt("B080","seen",0); // B080 does not has sub-level + + // Level 2 of B071 + gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped - + gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped - + gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped - + gMC->Gsatt("B069","seen",-1); // all B069 sub-levels skipped - + gMC->Gsatt("B056","seen",0); // B056 does not has sub-levels - + gMC->Gsatt("B059","seen",-1); // all B059 sub-levels skipped - + gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped - + gMC->Gsatt("BTR1","seen",0); // BTR1 do not have sub-levels - + gMC->Gsatt("BTO1","seen",0); + +// ==================> Level 3 + // Level 3 of B071 / Level 2 of BTO1 + gMC->Gsatt("FTOC","seen",0); + gMC->Gsatt("FTOB","seen",0); + gMC->Gsatt("FTOA","seen",0); + + // Level 3 of B074 / Level 2 of BTO2 + // -> cfr previous settings + + // Level 3 of B075 / Level 2 of BTO3 + // -> cfr previous settings + + +// ==========================> Level 4 + // Level 4 of B071 / Level 3 of BTO1 / Level 2 of FTOC + gMC->Gsatt("FLTC","seen",0); + // Level 4 of B071 / Level 3 of BTO1 / Level 2 of FTOB + gMC->Gsatt("FLTB","seen",0); + // Level 4 of B071 / Level 3 of BTO1 / Level 2 of FTOA + gMC->Gsatt("FLTA","seen",0); + + // Level 4 of B074 / Level 3 of BTO2 / Level 2 of FTOC + // -> cfr previous settings + // Level 4 of B074 / Level 3 of BTO2 / Level 2 of FTOB + // -> cfr previous settings + + // Level 4 of B075 / Level 3 of BTO3 / Level 2 of FTOC + // -> cfr previous settings + +//======================================> Level 5 + // Level 5 of B071 / Level 4 of BTO1 / Level 3 of FTOC / Level 2 of FLTC + gMC->Gsatt("FALC","seen",0); // no children for FALC + gMC->Gsatt("FSTR","seen",-2); + gMC->Gsatt("FPEC","seen",0); // no children for FPEC + gMC->Gsatt("FECC","seen",0); // no children for FECC + gMC->Gsatt("FWAC","seen",0); // no children for FWAC + gMC->Gsatt("FAIC","seen",0); // no children for FAIC + + // Level 5 of B071 / Level 4 of BTO1 / Level 3 of FTOB / Level 2 of FLTB + gMC->Gsatt("FALB","seen",0); // no children for FALB +//--> gMC->Gsatt("FSTR","seen",-2); + + + // -> cfr previous settings + gMC->Gsatt("FPEB","seen",0); // no children for FPEB + gMC->Gsatt("FECB","seen",0); // no children for FECB + gMC->Gsatt("FWAB","seen",0); // no children for FWAB + gMC->Gsatt("FAIB","seen",0); // no children for FAIB + + // Level 5 of B071 / Level 4 of BTO1 / Level 3 of FTOA / Level 2 of FLTA + gMC->Gsatt("FALA","seen",0); // no children for FALB +//--> gMC->Gsatt("FSTR","seen",-2); + // -> cfr previous settings + gMC->Gsatt("FPEA","seen",0); // no children for FPEA + gMC->Gsatt("FECA","seen",0); // no children for FECA + gMC->Gsatt("FWAA","seen",0); // no children for FWAA + gMC->Gsatt("FAIA","seen",0); // no children for FAIA + + // Level 2 of B074 + gMC->Gsatt("BTR2","seen",0); // BTR2 does not has sub-levels - + gMC->Gsatt("BTO2","seen",0); + + // Level 2 of B075 + gMC->Gsatt("BTR3","seen",0); // BTR3 do not have sub-levels - + gMC->Gsatt("BTO3","seen",0); + +// for others Level 5, cfr. previous settings + + gMC->Gdopt("hide","on"); + gMC->Gdopt("shad","on"); + gMC->Gsatt("*", "fill", 5); + gMC->SetClipBox("."); + gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000); + gMC->DefaultRange(); + gMC->Gdraw("alic", 45, 40, 0, 10, 10, .015, .015); + gMC->Gdhead(1111,"TOF Strips V1"); + gMC->Gdman(18, 4, "MAN"); + gMC->Gdopt("hide","off"); +} //_____________________________________________________________________________ void AliTOFv0::CreateMaterials() @@ -868,18 +1010,29 @@ void AliTOFv0::StepManager() z = pos[2]; plate = 0; - if (TMath::Abs(z) <= fZlenA*0.5) plate = 3; + if (TMath::Abs(z) <= fZlenA*0.5) plate = 2; //3; // AdC if (z < (fZlenA*0.5+fZlenB) && - z > fZlenA*0.5) plate = 4; + z > fZlenA*0.5) plate = 1; //4; // AdC if (z >-(fZlenA*0.5+fZlenB) && - z < -fZlenA*0.5) plate = 2; - if (z > (fZlenA*0.5+fZlenB)) plate = 5; - if (z <-(fZlenA*0.5+fZlenB)) plate = 1; + z < -fZlenA*0.5) plate = 3; //2; // AdC + if (z > (fZlenA*0.5+fZlenB)) plate = 0; //5; // AdC + if (z <-(fZlenA*0.5+fZlenB)) plate = 4; //1; // AdC + + if (plate==0) strip=AliTOFConstants::fgkNStripC-strip; // AdC + else if (plate==1) strip=AliTOFConstants::fgkNStripB-strip; // AdC + else strip--; // AdC + + if (z<=0.) padx=AliTOFConstants::fgkNpadX-padx; // AdC + else padx--; // AdC + + if (plate==3 || plate==4) padz=AliTOFConstants::fgkNpadZ-padz; // AdC + else padz--; // AdC phi = pos.Phi(); - phid = phi*kRaddeg+180.; + if (phi>=0.) phid = phi*kRaddeg; //+180.; // AdC + else phid = phi*kRaddeg + 360.; // AdC sector = Int_t (phid/20.); - sector++; + //sector++; // AdC for(i=0;i<3;++i) { hits[i] = pos[i]; @@ -900,7 +1053,7 @@ void AliTOFv0::StepManager() vol[3]= padx; vol[4]= padz; - AddHit(gAlice->CurrentTrack(),vol, hits); + AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits); } }