]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFv4T0.cxx
Adding the AliAnalysisGUI class which is the main class that controls the GUI.
[u/mrichter/AliRoot.git] / TOF / AliTOFv4T0.cxx
index 7908962aafc9885f83bdca6a5baab81805f47b2b..1b528efa55bbf039525761517b9a65c0f2b28137 100644 (file)
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include <Riostream.h>
-#include <stdlib.h>
+#include "TBRIK.h"
+#include "TGeometry.h"
+#include "TLorentzVector.h"
+#include "TNode.h"
 #include "TVirtualMC.h"
 
-#include <TBRIK.h>
-#include <TGeometry.h>
-#include <TLorentzVector.h>
-#include <TNode.h>
-#include <TObject.h>
-#include <TVirtualMC.h>
-
 #include "AliConst.h"
+#include "AliLog.h"
+#include "AliMagF.h"
+#include "AliMC.h"
 #include "AliRun.h"
+
+#include "AliTOFGeometry.h"
+#include "AliTOFGeometryV4.h"
 #include "AliTOFv4T0.h"
-#include "AliMC.h"
+
+extern TDirectory *gDirectory;
+extern TVirtualMC *gMC;
+
+extern AliRun *gAlice;
+
 ClassImp(AliTOFv4T0)
+
 //_____________________________________________________________________________
-AliTOFv4T0::AliTOFv4T0()
+  AliTOFv4T0::AliTOFv4T0():
+  fIdFTOA(-1),
+  fIdFTOB(-1),
+  fIdFTOC(-1),
+  fIdFLTA(-1),
+  fIdFLTB(-1),
+  fIdFLTC(-1),
+  fTOFHoles(kFALSE)
 {
   //
   // Default constructor
@@ -64,8 +76,15 @@ AliTOFv4T0::AliTOFv4T0()
 }
  
 //_____________________________________________________________________________
-AliTOFv4T0::AliTOFv4T0(const char *name, const char *title)
-        : AliTOF(name,title,"tzero")
+AliTOFv4T0::AliTOFv4T0(const char *name, const char *title):
+  AliTOF(name,title,"tzero"),
+  fIdFTOA(-1),
+  fIdFTOB(-1),
+  fIdFTOC(-1),
+  fIdFLTA(-1),
+  fIdFLTB(-1),
+  fIdFLTC(-1),
+  fTOFHoles(kFALSE)
 {
   //
   // Standard constructor
@@ -75,24 +94,31 @@ AliTOFv4T0::AliTOFv4T0(const char *name, const char *title)
   // put TOF
 
 
-  AliModule* frame=gAlice->GetModule("FRAME");
+  AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
   if(!frame) {
-    Error("Ctor","TOF needs FRAME to be present\n");
-    exit(1);
+    AliFatal("TOF needs FRAME to be present");
   } else{
     
     if (fTOFGeometry) delete fTOFGeometry;
-    fTOFGeometry = new AliTOFGeometry();
+    fTOFGeometry = new AliTOFGeometryV4();
 
     if(frame->IsVersion()==1) {
-      cout << " Frame version " << frame->IsVersion() << endl
-      cout << " Full Coverage for TOF" << endl;
+      AliInfo(Form("Frame version %d", frame->IsVersion()))
+      AliInfo("Full Coverage for TOF");
       fTOFHoles=false;}    
     else {
-      cout << " Frame version " << frame->IsVersion() << endl
-      cout << " TOF with Holes for PHOS " << endl;
+      AliInfo(Form("Frame version %d", frame->IsVersion()))
+      AliInfo("TOF with Holes for PHOS");
       fTOFHoles=true;}      
   }
+  fTOFGeometry->SetHoles(fTOFHoles);
+
+  // Save the geometry
+  TDirectory* saveDir = gDirectory;
+  gAlice->GetRunLoader()->CdGAFile();
+  fTOFGeometry->Write("TOFgeometry");
+  saveDir->cd();
+
 } 
 
 //____________________________________________________________________________
@@ -104,20 +130,22 @@ void AliTOFv4T0::BuildGeometry()
   TNode *node, *top;
   const int kColorTOF  = 27;
   
+  TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
+
   // Find top TNODE
-  top = gAlice->GetGeometry()->GetNode("alice");
+  top = (TNode*)globalGeometry->GetNode("alice");
   
   // Position the different copies
-  const Float_t krTof  =(fRmax+fRmin)/2;
-  const Float_t khTof  = fRmax-fRmin;
-  const Int_t   kNTof = fNTof;
-  const Float_t kPi   = TMath::Pi();
+  const Float_t krTof  =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
+  const Float_t khTof  = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
+  const Int_t   kNTof  = fTOFGeometry->NSectors();
+  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 zOffsetC = fTOFGeometry->MaxhZtof() - fTOFGeometry->ZlenC()*0.5;
+  Float_t zOffsetB = fTOFGeometry->MaxhZtof() - fTOFGeometry->ZlenC() - fTOFGeometry->ZlenB()*0.5;
   Float_t zOffsetA = 0.;
   // Define TOF basic volume
   
@@ -125,11 +153,11 @@ void AliTOFv4T0::BuildGeometry()
   char nodeName3[7], nodeName4[7], rotMatNum[7];
   
   new TBRIK("S_TOF_C","TOF box","void",
-            fStripLn*0.5,khTof*0.5,fZlenC*0.5);
+            fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenC()*0.5);
   new TBRIK("S_TOF_B","TOF box","void",
-            fStripLn*0.5,khTof*0.5,fZlenB*0.5);
+            fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
   new TBRIK("S_TOF_A","TOF box","void",
-            fStripLn*0.5,khTof*0.5,fZlenA*0.5);
+            fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
   
   for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
     
@@ -154,33 +182,32 @@ void AliTOFv4T0::BuildGeometry()
     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 = 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 = 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 = 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 = 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 = 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
-}
-
 
+}
  
 //_____________________________________________________________________________
 void AliTOFv4T0::CreateGeometry()
@@ -207,16 +234,15 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   //
   // Definition of the Time Of Fligh Resistive Plate Chambers
   // xFLT, yFLT, zFLT - sizes of TOF modules (large)
-  
+
   Float_t  ycoor;
   Float_t  par[3];
   Int_t    *idtmed = fIdtmed->GetArray()-499;
   Int_t    idrotm[100];
   Int_t    nrot = 0;
 
-  Float_t radius = fRmin+2.;//cm
+  Float_t radius = fTOFGeometry->Rmin()+2.;//cm
 
-  
   par[0] =  xtof * 0.5;
   par[1] =  ytof * 0.5;
   par[2] = zlenC * 0.5;
@@ -255,27 +281,26 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   gMC->Gspos("FTOA", 0, "BTO3", 0, zcor3,  0, idrotm[0], "ONLY");
   
 
-  Float_t db = 0.5;//cm
+  Float_t db = 0.5; // cm
   Float_t xFLT, xFST, yFLT, zFLTA, zFLTB, zFLTC;
   
-  xFLT = fStripLn;
+  xFLT = fTOFGeometry->StripLength();
   yFLT = ytof;
   zFLTA = zlenA;
   zFLTB = zlenB;
   zFLTC = zlenC;
   
-  xFST = xFLT-fDeadBndX*2;//cm
+  xFST = xFLT - dynamic_cast<AliTOFGeometryV4*>(fTOFGeometry)->DeadBndX()*2.; // cm
   
   // Sizes of MRPC pads
   
-  Float_t yPad = 0.505;//cm 
+  Float_t yPad = 0.505; //cm
   
   // Large not sensitive volumes with Insensitive Freon
   par[0] = xFLT*0.5;
   par[1] = yFLT*0.5;
   
-  if (fDebug) cout << ClassName() <<
-               ": ************************* TOF geometry **************************"<<endl;
+  AliDebug(1, "************************* TOF geometry **************************");
   
   par[2] = (zFLTA *0.5);
   gMC->Gsvolu("FLTA", "BOX ", idtmed[512], par, 3); // Insensitive Freon
@@ -296,7 +321,7 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   // fp to be checked
   const Float_t khAlWall = 0.11;
   par[0] = xFLT*0.5;
-  par[1] = khAlWall/2.;//cm
+  par[1] = khAlWall/2.; // cm
   ycoor = -yFLT/2 + par[1];
   par[2] = (zFLTA *0.5);
   gMC->Gsvolu("FALA", "BOX ", idtmed[508], par, 3); // Alluminium
@@ -313,12 +338,12 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   
   ///////////////// Detector itself //////////////////////
   
-  const Float_t  kdeadBound  =  fDeadBndZ; //cm non-sensitive between the pad edge 
+  const Float_t  kdeadBound  =  dynamic_cast<AliTOFGeometryV4*>(fTOFGeometry)->DeadBndZ(); //cm non-sensitive between the pad edge 
   //and the boundary of the strip
-  const Int_t    knx    = fNpadX;          // number of pads along x
-  const Int_t    knz    = fNpadZ;          // number of pads along z
+  const Int_t    knx    = fTOFGeometry->NpadX();  // number of pads along x
+  const Int_t    knz    = fTOFGeometry->NpadZ();  // number of pads along z
   
-  Float_t zSenStrip  = fZpad*fNpadZ;//cm
+  Float_t zSenStrip  = fTOFGeometry->ZPad() * fTOFGeometry->NpadZ(); // cm
   Float_t stripWidth = zSenStrip + 2*kdeadBound;
   
   par[0] = xFLT*0.5;
@@ -332,7 +357,7 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   const Float_t khpcby = 0.08    ;   // heigth of PCB   Layer
   const Float_t khmyly = 0.035   ;   // heigth of MYLAR Layer
   const Float_t khgraphy = 0.02  ;   // heigth of GRAPHITE Layer
-  const Float_t khglasseiy = 0.135;   // 0.6 Ext. Glass + 1.1 i.e. (Int. Glass/2) (mm)
+  const Float_t khglasseiy = 0.135;  // 0.6 Ext. Glass + 1.1 i.e. (Int. Glass/2) (mm)
   const Float_t khsensmy = 0.11  ;   // heigth of Sensitive Freon Mixture
   const Float_t kwsensmz = 2*3.5 ;   // cm
   const Float_t klsensmx = 48*2.5;   // cm
@@ -347,7 +372,7 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
   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; 
+  // Coordinates of the strip center in the strip reference frame;
   // used for positioninG internal strip volumes
   Float_t posfp[3]={0.,0.,0.};  
   
@@ -459,10 +484,8 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
     ang /= kRaddeg;
     Float_t zpos = tan(ang)*radius;
     Float_t ypos= fTOFGeometry->GetHeights(2,istrip);
-    gMC->Gspos("FSTR",fNStripA-istrip,"FLTA",0.,ypos, zpos,idrotm[0],  "ONLY");
-    if(fDebug>=1) {
-      printf("y = %f,  z = %f, , z coord = %f, Rot ang = %f, St. %2i \n",ypos,zpos,tan(ang)*radius ,ang*kRaddeg,istrip);
-    }
+    gMC->Gspos("FSTR",fTOFGeometry->NStripA()-istrip,"FLTA",0.,ypos, zpos,idrotm[0],  "ONLY");
+    AliDebug(1, Form("y = %f,  z = %f, , z coord = %f, Rot ang = %f, St. %2i",ypos,zpos,tan(ang)*radius ,ang*kRaddeg,istrip));
   }
 
   
@@ -476,9 +499,7 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
     Float_t zpos = tan(ang)*radius+(zFLTA*0.5+zFLTB*0.5+db);
     Float_t ypos= fTOFGeometry->GetHeights(3,istrip);
     gMC->Gspos("FSTR",istrip+1,"FLTB",0.,ypos, zpos,idrotm[nrot],  "ONLY");
-    if(fDebug>=1) {
-      printf("y = %f,  z = %f, , z coord = %f, Rot ang = %f, St. %2i \n",ypos,zpos,tan(ang)*radius,ang*kRaddeg,istrip);
-    }
+    AliDebug(1, Form("y = %f,  z = %f, , z coord = %f, Rot ang = %f, St. %2i",ypos,zpos,tan(ang)*radius,ang*kRaddeg,istrip));
   }
 
   
@@ -492,15 +513,13 @@ void AliTOFv4T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenC,
     Float_t zpos = tan(ang)*radius+(zFLTC*0.5+zFLTB+zFLTA*0.5+db*2);
     Float_t ypos= fTOFGeometry->GetHeights(4,istrip);
     gMC->Gspos("FSTR",istrip+1,"FLTC",0.,ypos, zpos,idrotm[nrot],  "ONLY");
-    if(fDebug>=1) {
-      printf("y = %f,  z = %f, z coord = %f, Rot ang = %f, St. %2i \n",ypos,zpos,tan(ang)*radius,ang*kRaddeg,istrip);
-    }
+    AliDebug(1, Form("y = %f,  z = %f, z coord = %f, Rot ang = %f, St. %2i",ypos,zpos,tan(ang)*radius,ang*kRaddeg,istrip));
   }
    
   ////////// Layers after strips /////////////////
   // Al Layer thickness (2.3mm) factor 0.7
   
-  Float_t overSpace = fOverSpc;//cm
+  Float_t overSpace = dynamic_cast<AliTOFGeometryV4*>(fTOFGeometry)->OverSpc();//cm
   
   par[0] = xFLT*0.5;
   par[1] = 0.115*0.7; // factor 0.7
@@ -704,7 +723,7 @@ void AliTOFv4T0::DrawModule() const
   gMC->Gdopt("hide","off");
 }
 //_____________________________________________________________________________
-void AliTOFv4T0::DrawDetectorModules()
+void AliTOFv4T0::DrawDetectorModules() const
 {
 //
 // Draw a shaded view of the TOF detector version 4
@@ -776,7 +795,7 @@ void AliTOFv4T0::DrawDetectorModules()
 }                                 
 
 //_____________________________________________________________________________
-void AliTOFv4T0::DrawDetectorStrips()
+void AliTOFv4T0::DrawDetectorStrips() const
 {
   //
   // Draw a shaded view of the TOF strips for version 4
@@ -896,7 +915,156 @@ void AliTOFv4T0::CreateMaterials()
   //
   // Define materials for the Time Of Flight
   //
-  AliTOF::CreateMaterials();
+  //AliTOF::CreateMaterials();
+
+  //
+  // Defines TOF materials for all versions
+  // Revision: F. Pierella 18-VI-2002
+  //
+
+  AliMagF *magneticField = (AliMagF*)gAlice->Field();
+
+  Int_t   isxfld = magneticField->Integ();
+  Float_t sxmgmx = magneticField->Max();
+
+  //--- Quartz (SiO2) to simulate float glass
+  //    density tuned to have correct float glass 
+  //    radiation length
+  Float_t   aq[2] = { 28.0855,15.9994 };
+  Float_t   zq[2] = { 14.,8. };
+  Float_t   wq[2] = { 1.,2. };
+  Float_t   dq = 2.55; // std value: 2.2
+  Int_t nq = -2;
+
+  // --- Freon C2F4H2 (TOF-TDR pagg.)
+  // Geant Manual CONS110-1, pag. 43 (Geant, Detector Description and Simulation Tool)
+  Float_t afre[3]  = {12.011,18.998,1.007};
+  Float_t zfre[3]  = { 6., 9., 1.}; 
+  Float_t wfre[3]  = { 2., 4., 2.};
+  Float_t densfre  = 0.00375;   
+// http://www.fi.infn.it/sezione/prevprot/gas/freon.html
+  Int_t nfre = -3; 
+/*
+  //-- Isobutane quencher C4H10 (5% in the sensitive mixture)
+  Float_t aiso[2]  = {12.011,1.007};
+  Float_t ziso[2]  = { 6.,  1.};
+  Float_t wiso[2]  = { 4., 10.};
+  Float_t densiso  = .......;  // (g/cm3) density
+  Int_t nfre = -2; // < 0 i.e. proportion by number of atoms of each kind
+  //-- SF6 (5% in the sensitive mixture)
+  Float_t asf[3]  = {32.066,18.998};
+  Float_t zsf[3]  = { 16., 9.};
+  Float_t wsf[3]  = {  1., 6.}; 
+  Float_t denssf  = .....;   // (g/cm3) density
+  Int_t nfre = -2; // < 0 i.e. proportion by number of atoms of each kind
+*/
+  // --- CO2 
+  Float_t ac[2]   = {12.,16.};
+  Float_t zc[2]   = { 6., 8.};
+  Float_t wc[2]   = { 1., 2.};
+  Float_t dc = .001977;
+  Int_t nc = -2;
+   // For mylar (C5H4O2) 
+  Float_t amy[3] = { 12., 1., 16. };
+  Float_t zmy[3] = {  6., 1.,  8. };
+  Float_t wmy[3] = {  5., 4.,  2. };
+  Float_t dmy    = 1.39;
+  Int_t nmy = -3;
+ // For polyethilene (CH2) - honeycomb -
+  Float_t ape[2] = { 12., 1. };
+  Float_t zpe[2] = {  6., 1. };
+  Float_t wpe[2] = {  1., 2. };
+  Float_t dpe    = 0.935*0.479; //To have 1%X0 for 1cm as for honeycomb
+  Int_t npe = -2;
+  // --- G10 
+  Float_t ag10[4] = { 12.,1.,16.,28. };
+  Float_t zg10[4] = {  6.,1., 8.,14. };
+  Float_t wmatg10[4] = { .259,.288,.248,.205 };
+  Float_t densg10  = 1.7;
+  Int_t nlmatg10 = -4;
+
+  // plexiglass CH2=C(CH3)CO2CH3
+  Float_t aplex[3] = { 12.,1.,16.};
+  Float_t zplex[3] = {  6.,1., 8.};
+  Float_t wmatplex[3] = {5.,8.,2.};
+  Float_t densplex  =1.16;
+  Int_t nplex = -3;
+
+  // ---- ALUMINA (AL203) 
+  Float_t aal[2] = { 27.,16.};
+  Float_t zal[2] = { 13., 8.};
+  Float_t wmatal[2] = { 2.,3. };
+  Float_t densal  = 2.3;
+  Int_t nlmatal = -2;
+  // -- Water
+  Float_t awa[2] = {  1., 16. };
+  Float_t zwa[2] = {  1.,  8. };
+  Float_t wwa[2] = {  2.,  1. };
+  Float_t dwa    = 1.0;
+  Int_t nwa = -2;
+
+// stainless steel
+  Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
+  Float_t zsteel[4] = { 26.,24.,28.,14. };
+  Float_t wsteel[4] = { .715,.18,.1,.005 };
+
+  //AliMaterial(0, "Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
+
+  // AIR
+  Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
+  Float_t zAir[4]={6.,7.,8.,18.};
+  Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
+  Float_t dAir = 1.20479E-3;
+
+  AliMixture( 1, "Air$", aAir, zAir, dAir, 4, wAir);
+
+  AliMaterial( 2, "Cu $",  63.54, 29.0, 8.96, 1.43, 14.8);
+  AliMaterial( 3, "C  $",  12.01,  6.0, 2.265,18.8, 74.4);
+  AliMixture ( 4, "Polyethilene$", ape, zpe, dpe, npe, wpe);
+  AliMixture ( 5, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
+  AliMixture ( 6, "PLE$", aplex, zplex, densplex, nplex, wmatplex);
+  AliMixture ( 7, "CO2$", ac, zc, dc, nc, wc);
+  AliMixture ( 8, "ALUMINA$", aal, zal, densal, nlmatal, wmatal);
+  AliMaterial( 9, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
+  AliMaterial(10, "C-TRD$", 12.01, 6., 2.265*18.8/69.282*15./100, 18.8, 74.4); // for 15%
+  AliMixture (11, "Mylar$",  amy, zmy, dmy, nmy, wmy);
+  AliMixture (12, "Freon$",  afre, zfre, densfre, nfre, wfre);
+  AliMixture (13, "Glass$", aq, zq, dq, nq, wq);
+  AliMixture (14, "Water$",  awa, zwa, dwa, nwa, wwa);
+  AliMixture (15, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
+
+  Float_t epsil, stmin, deemax, stemax;
+  //   Previous data
+  //       EPSIL  =  0.1   ! Tracking precision, 
+  //       STEMAX = 0.1      ! Maximum displacement for multiple scattering
+  //       DEEMAX = 0.1    ! Maximum fractional energy loss, DLS 
+  //       STMIN  = 0.1 
+  //
+  //   New data  
+  epsil  = .001;  // Tracking precision,
+  stemax = -1.;   // Maximum displacement for multiple scattering
+  deemax = -.3;   // Maximum fractional energy loss, DLS
+  stmin  = -.8;
+
+  AliMedium( 1, "Air$"  ,  1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 2, "Cu $"  ,  2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 3, "C  $"  ,  3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 4, "Pol$"  ,  4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 5, "G10$"  ,  5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 6, "PLE$"  ,  6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 7, "CO2$"  ,  7, 0, isxfld, sxmgmx, 10., -.01, -.1, .01, -.01);
+  AliMedium( 8,"ALUMINA$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium( 9,"Al Frame$",9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(10, "DME-S$",  6, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(11, "C-TRD$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(12, "Myl$"  , 11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(13, "Fre$"  , 12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(14, "Fre-S$", 12, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(15, "Glass$", 13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(16, "Water$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+  AliMedium(17, "STEEL$", 15, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
+
 }
 
 //_____________________________________________________________________________
@@ -905,13 +1073,11 @@ void AliTOFv4T0::Init()
   //
   // Initialise the detector after the geometry has been defined
   //
-  if(fDebug) {   
-    printf("%s: **************************************"
+  AliDebug(1, "**************************************"
            "  TOF  "
-           "**************************************\n",ClassName());
-    printf("\n%s:   Version 4 of TOF initialing, "
-          "symmetric TOF - Full Coverage version\n",ClassName());
-  }
+           "**************************************");
+  AliDebug(1, "  Version 4 of TOF initialing, "
+          "symmetric TOF - Full Coverage version");
   
   AliTOF::Init();
   
@@ -922,11 +1088,9 @@ void AliTOFv4T0::Init()
   fIdFLTB = gMC->VolId("FLTB");
   fIdFLTC = gMC->VolId("FLTC");
 
-  if(fDebug) {   
-    printf("%s: **************************************"
+  AliDebug(1, "**************************************"
            "  TOF  "
-           "**************************************\n",ClassName());
-  }
+           "**************************************");
 }
  
 //_____________________________________________________________________________
@@ -939,17 +1103,27 @@ void AliTOFv4T0::StepManager()
 
   TLorentzVector mom, pos;
   Float_t xm[3],pm[3],xpad[3],ppad[3];
-  Float_t hits[14],phi,phid,z;
+  Float_t hits[14];
   Int_t   vol[5];
   Int_t   sector, plate, padx, padz, strip;
   Int_t   copy, padzid, padxid, stripid, i;
   Int_t   *idtmed = fIdtmed->GetArray()-499;
   Float_t incidenceAngle;
       
-  if(gMC->GetMedium()==idtmed[513] && 
-     gMC->IsTrackEntering() && gMC->TrackCharge()
-     && gMC->CurrentVolID(copy)==fIdSens) 
-  {    
+  if(
+     gMC->IsTrackEntering()
+     && gMC->TrackCharge()
+     //&& gMC->GetMedium()==idtmed[513]
+     && gMC->CurrentMedium()==idtmed[513]
+     && gMC->CurrentVolID(copy)==fIdSens
+     )
+  {
+
+    AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
+
+    AddTrackReference(mcApplication->GetCurrentTrackNumber());
+    //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
+
     // getting information about hit volumes
     
     padzid=gMC->CurrentVolOffID(2,copy);
@@ -983,46 +1157,65 @@ void AliTOFv4T0::StepManager()
     gMC->Gmtod(xm,xpad,1);
     gMC->Gmtod(pm,ppad,2);
 
+    
+    if (TMath::Abs(ppad[1])>1) {
+      AliWarning("Abs(ppad) > 1");
+      ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
+    }
     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
 
 
-    z = pos[2];
+    const char * pathA="FTOA";
+    const char * pathB="FTOB";
+    const char * pathC="FTOC";
+    const char * path71="B071";
+    const char * path75="B075";
+    const char * path74="B074";
+    const char* volpath;    
 
-    plate = -1;  
+    Int_t index=0;
+    volpath=gMC->CurrentVolOffName(6);
+    index=gMC->CurrentVolOffID(6,copy);
+    index=copy;
+
+    
+    plate=-1;
+    if(strcmp(pathC,volpath)==0 && index==1)plate=0;
+    if(strcmp(pathB,volpath)==0 && index==1)plate=1;
+    if(strcmp(pathA,volpath)==0 && index==0)plate=2;
+    if(strcmp(pathB,volpath)==0 && index==2)plate=3;
+    if(strcmp(pathC,volpath)==0 && index==2)plate=4;
 
-    if (TMath::Abs(z) <=  fZlenA*0.5)  plate = 2; //3; // AdC
-    if (z < (fZlenA*0.5+fZlenB) && 
-        z >  fZlenA*0.5)               plate = 1; //4; // AdC
-    if (z >-(fZlenA*0.5+fZlenB) &&
-        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=fTOFGeometry->NStripC()-strip; // AdC
-    else if (plate==1) strip=fTOFGeometry->NStripB()-strip; // AdC
-    else strip--; // AdC
+    if (plate==0) strip=fTOFGeometry->NStripC()-strip;
+    else if (plate==1) strip=fTOFGeometry->NStripB()-strip;
+    else strip--;
  
-    //Apply ALICE conventions for volume numbering increasing with theta, phi 
+    //Apply ALICE conventions for volume numbering increasing with theta, phi
 
     if (plate==3 || plate==4){
-      padx=fTOFGeometry->NpadX()-padx; // SA
-      padz=fTOFGeometry->NpadZ()-padz; // AdC
+      padx=fTOFGeometry->NpadX()-padx;
+      padz=fTOFGeometry->NpadZ()-padz;
       xpad[0]=-xpad[0];      
       xpad[2]=-xpad[2];      
     }
     else {
-     padx--; // AdC
-     padz--; // AdC
+     padx--;
+     padz--;
     }
 
 
 
-    phi = pos.Phi();
-    if (phi>=0.) phid = phi*kRaddeg; //+180.; // AdC
-    else phid = phi*kRaddeg + 360.; // AdC
+    volpath=gMC->CurrentVolOffName(8);
+    index=gMC->CurrentVolOffID(8,copy);
+    index=copy;
 
-    sector = Int_t (phid/20.);
+    sector=-1;
+    if(strcmp(path71,volpath)==0 && index <6) sector=12+index;
+    if(strcmp(path71,volpath)==0 && index >=6) sector=index-3;
+    if(strcmp(path75,volpath)==0) sector=index-1;
+    if(strcmp(path74,volpath)==0) sector=10+index;
 
     for(i=0;i<3;++i) {
       hits[i]   = pos[i];
@@ -1044,6 +1237,7 @@ void AliTOFv4T0::StepManager()
     vol[3]= padx;
     vol[4]= padz;    
 
-    AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
+    AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
+    //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
   }
 }