]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZEROv0.cxx
Updated VZERO source
[u/mrichter/AliRoot.git] / VZERO / AliVZEROv0.cxx
index 303cd50738a2a3817f0da764cc8ab4b30cc91ec1..a81139e366cf3d52127ed2e2d1a060152d566d48 100755 (executable)
  **************************************************************************/
 
 
-
 //////////////////////////////////////////////////////////////////////
 //                                                                  //
 //  (V-zero) detector  version 0  as designed by the Lyon group     //
 //   All comments should be sent to Brigitte CHEYNIS :              //
 //                                  b.cheynis@ipnl.in2p3.fr         // 
+//   Geometrie      du 25/02/2002                                   //
 //                                                                  //
 //////////////////////////////////////////////////////////////////////
 
@@ -43,6 +43,7 @@
 
 #include "AliVZEROv0.h"
 #include "AliRun.h"
+#include "AliMagF.h"
 #include "AliMC.h"
 #include "AliVZEROhit.h"
 #include "AliVZEROdigit.h"
 #include "AliConst.h"
 #include "ABSOSHILConst.h"
 #include "ABSOConst.h"
+#include "TLorentzVector.h"
 
 ClassImp(AliVZEROv0)
 
 //--------------------------------------------------------------------
 AliVZEROv0:: AliVZEROv0():AliVZERO()
 {
-  fRootFile = 0;
-  fhMultiplicity = 0;
-  fhGEANTcode = 0;
-  fhCerenkov = 0;
-  fhToF = 0;
+
+
 }
 //--------------------------------------------------------------------
 AliVZEROv0::AliVZEROv0(const char *name, const char *title):
@@ -79,33 +78,37 @@ AliVZEROv0::AliVZEROv0(const char *name, const char *title):
   Int_t i;
 
   printf("\n");
-  for(i=0;i<35;i++) printf("*");
-  printf(" create VZERO object");
-  for(i=0;i<35;i++) printf("*");
+  for(i=0;i<30;i++) printf("*");
+  printf(" Create VZERO object ");
+  for(i=0;i<30;i++) printf("*");
   printf("\n");
   
 }
+
 //-------------------------------------------------------------------------
 void AliVZEROv0::CreateGeometry()
 {
 
-// Creates the Geant geometry of the V-zeroR Detector (right part) version 0
+// Creates the Geant geometry of the V-zero Detector  version 0
 
   
   Int_t i;
   
   printf("\n");
-  for(i=0;i<35;i++) printf("*");
-  printf(" VZERO Create Geometry ");
-  for(i=0;i<35;i++) printf("*");
+  for(i=0;i<30;i++) printf("*");
+  printf(" Create VZERO Geometry ");
+  for(i=0;i<30;i++) printf("*");
   printf("\n");
     
   
   Int_t    *idtmed = fIdtmed->GetArray()-2999;
 
-  Int_t    n_detec = 1;
-  Int_t    n_cells = 1;
-
+  Int_t    n_detec_R = 1;
+  Int_t    n_detec_L = 1;
+  Int_t    n_cells_R = 1;
+  Int_t    n_cells_L = 1;
+  
   Int_t    idrotm[999];
  
   Float_t  height1, height2, height3, height4, height5; 
@@ -119,15 +122,16 @@ void AliVZEROv0::CreateGeometry()
   Float_t  pi = TMath::Pi();
   Float_t  thick_alu;
   
-  height1           =     2.3;           // height of cell 1, in cm
-  height2           =     3.7;           // height of cell 2, in cm
-  height3           =     6.2;           // height of cell 3, in cm
-  height4           =    10.5;           // height of cell 4, in cm
-  height5           =    10.5;           // height of cell 5, in cm
+  height1           =     2.0;           // height of cell 1, in cm
+  height2           =     3.2;           // height of cell 2, in cm
+  height3           =     4.9;           // height of cell 3, in cm
+  height4           =     7.5;           // height of cell 4, in cm
+  height5           =    12.0;           // height of cell 5, in cm
   
-  theta             = pi/12.0/2.0;       // half angular opening = 7.5 degrees
+  theta             = pi/6.0/2.0;       // half angular opening = 15 degrees
   half_thick_alu    = 0.0025;            // half thickness of aluminum foil, in cm
   thick_alu         = 2.0 * half_thick_alu; 
+  fThickness1      = 2.5;
   half_thick_qua1   = fThickness1/2.0;   // half thickness of WRAPPED quartz cell (inner ring)
   half_thick_qua2   = half_thick_qua1  - 0.25;
   half_thick_qua3   = half_thick_qua2  - 0.25;
@@ -135,14 +139,175 @@ void AliVZEROv0::CreateGeometry()
   half_thick_qua5   = half_thick_qua4  - 0.25;
   
   zdet              =    86.9 +fThickness/2.0;  // distance to vertex (along Z axis)
-  r0                =    3.4;            // closest distance to center of the beam pipe
+  r0                =    4.0;            // closest distance to center of the beam pipe
   height            =    height1 + height2 + height3 + height4 + height5;
   r5                =    r0 + height;
 
+//............................................................................
+
+// Here I add the flange which is sitting on beam line 
+// right in front of V0R detector, and which I found on CERN drawing 
+// entitled : ALICE BEAM VACCUM CHAMBER - RB26 version III :  
+   
+//     Float_t   pflange[3];
+//     
+//     pflange[0] = 3.0;
+//     pflange[1] = 5.675;
+//     pflange[2] = 0.9;        
+// 
+//     gMC->Gsvolu("QFA0","TUBE", idtmed[3003], pflange, 3);
+//     gMC->Gspos("QFA0", 1 ,"alic", 0.0, 0.0, 85.0+0.9, 0, "ONLY");
+     
+//............................................................................
+
 
-// Creation of mother volume V0RI :
+// Creation of mother volume V0LE - left part - :
+// Face entree a -350.0 cm ...
+
+   Float_t   partube[3];
+   
+   partube[0] =  4.3;
+   partube[1] = 45.0;
+   partube[2] = fThickness1/2.0;   
+    
+   gMC->Gsvolu("V0LE","TUBE",idtmed[3002],partube,3);
+  
+   
+// Creation of five rings - left part - :
+// Face entree a -350.0 cm ... 
+
+// Mother volume V0L0 in which will be set 5 quartz cells 
+
+
+  Float_t   par[11];
+  
+  Float_t   dist0_left;   
+  Float_t   r0_left      =   4.3;   
+  Float_t   height1_left =   2.6; 
+  Float_t   height2_left =   4.1;
+  Float_t   height3_left =   6.4;
+  Float_t   height4_left =  10.2;
+  Float_t   height5_left =  16.9;
+  Float_t   height_left  = height1_left + height2_left + height3_left 
+                                        + height4_left + height5_left;
+  Float_t   r5_left      = r0_left  + height_left; 
+  
+   
+  dist0_left  =  r0_left + height_left / 2.0;
+  thick_alu   =  2.0*half_thick_alu;
+  
+  par[0]      =  half_thick_qua1;
+  par[1]      =  0.0;
+  par[2]      =  0.0;
+  par[3]      =  height_left / 2.0 ;
+  par[4]      =  TMath::Tan(theta) * r0_left;
+  par[5]      =  TMath::Tan(theta) * r5_left;
+  par[6]      =  0.0;
+  par[7]      =  height_left / 2.0 ;
+  par[8]      =  TMath::Tan(theta) * r0_left;
+  par[9]      =  TMath::Tan(theta) * r5_left;
+  par[10]     =  0.0;
+  
+
+  gMC->Gsvolu("V0L0","TRAP",idtmed[3010],par,11);  // air volume
+  
+  Float_t   dist1_left;
+  Float_t   r1_left;
+  Float_t   offset_left;
+     
+  dist1_left     =  (- height_left + height1_left) /2.0; 
+  r1_left        =  r0_left + height1_left;
+  offset_left    = - fThickness1/2.0 + 0.1; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;
+  par[3]    =  height1_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r0_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r1_left- thick_alu;
+  par[7]    =  height1_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r0_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r1_left - thick_alu;
+
+
+  gMC->Gsvolu("V0L1","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0L1",1,"V0L0", 0.0, dist1_left , 0.0, 0,"ONLY"); 
+  
+  Float_t   dist2_left;
+  Float_t   r2_left; 
+    
+  dist2_left     =    (- height_left + height2_left) /2.0 + height1_left;
+  r2_left        =       r1_left + height2_left; 
+  
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height2_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r1_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[7]    =  height2_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r1_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r2_left - thick_alu;
+
+  gMC->Gsvolu("V0L2","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0L2",1,"V0L0", 0.0, dist2_left , 0.0, 0,"ONLY"); 
+  
+  
+  Float_t   dist3_left;
+  Float_t   r3_left;
+     
+  dist3_left     =    (- height_left + height3_left) /2.0 + height1_left + height2_left;
+  r3_left        =       r2_left + height3_left; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height3_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[7]    =  height3_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r3_left - thick_alu;
+
+  gMC->Gsvolu("V0L3","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0L3",1,"V0L0", 0.0, dist3_left , 0.0, 0,"ONLY");
+    
+  Float_t   dist4_left;
+  Float_t   r4_left;
+       
+  dist4_left     =    (- height_left + height4_left) /2.0 + height1_left 
+                                     + height2_left + height3_left;
+  r4_left        =       r3_left + height4_left; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height4_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[7]    =  height4_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r4_left - thick_alu;
+
+  gMC->Gsvolu("V0L4","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0L4",1,"V0L0", 0.0, dist4_left , 0.0, 0,"ONLY");
+
+
+  Float_t   dist5_left;
+
+         
+  dist5_left     =    (- height_left + height5_left) /2.0 + height1_left 
+                                     + height2_left + height3_left + height4_left;
+
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height5_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r5_left - thick_alu;
+  par[7]    =  height5_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r5_left - thick_alu;
+
+  gMC->Gsvolu("V0L5","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0L5",1,"V0L0", 0.0, dist5_left , 0.0, 0,"ONLY");
+  
+  
+//............................................................................
+
+// Creation of mother volume V0RI - right part - :
 
-  Float_t   partube[3];
   
   partube[0] = r0 - 0.2;
   partube[1] = (r5 + 1.0) / TMath::Cos(theta);
@@ -157,7 +322,7 @@ void AliVZEROv0::CreateGeometry()
   
   parbox[0] =    0.;
   parbox[1] =  360.;
-  parbox[2] =    24;
+  parbox[2] =    12;
   parbox[3] =     2;
   parbox[4] =  -0.1/2.0;
   parbox[5] =  r0;
@@ -196,8 +361,7 @@ void AliVZEROv0::CreateGeometry()
 // Mother volume V0R0 in which will be set 5  quartz cells 
 // each one  WRAPPED in reflecting aluminum : 
   
-  Float_t   dist0; 
-  Float_t   par[11];   
+  Float_t   dist0;   
     
   dist0     =  r0 + height / 2.0;
   thick_alu =  2.0*half_thick_alu;
@@ -250,7 +414,7 @@ void AliVZEROv0::CreateGeometry()
   parbox[2] = half_thick_qua1;
   
   gMC->Gsvolu("V0A2","BOX",idtmed[3004],parbox,3);   // aluminum rectangular foil
-  Float_t  theta_deg = 180./12./2.0; 
+  Float_t  theta_deg = 180./6./2.0; 
   Float_t h1;
   h1 = TMath::Tan(theta) * (r0 + height1/2.0);  
   AliMatrix(idrotm[911],90.0,+theta_deg,90.0,90.+theta_deg,0.0,0.);  
@@ -470,49 +634,73 @@ void AliVZEROv0::CreateGeometry()
 
 
   Float_t  phi_rad ;  
-  Float_t  phi_deg = 180./12.; 
+  Float_t  phi_deg = 180./6.; 
 
-  
-  for(Float_t  phi = 7.5; phi < 360.0; phi = phi + phi_deg)
+ // Partie de droite : 
+  for(Float_t  phi = 15.0; phi < 360.0; phi = phi + phi_deg)
       {
         phi_rad = phi*pi/180.;
        AliMatrix(idrotm[902], 90.0, phi, 90.0, 90.0 +phi, 0.0 , 0.0);
-        gMC->Gspos("V0R0",n_detec,"V0RI",-dist0*TMath::Sin(phi_rad),
+        gMC->Gspos("V0R0",n_detec_R,"V0RI",-dist0*TMath::Sin(phi_rad),
                          dist0*TMath::Cos(phi_rad),offset + half_thick_qua1,idrotm[902],"ONLY");
-       n_detec++;
+       n_detec_R++;
        }
 
 
   gMC->Gspos("V0RI",1,"alic",0.0,0.0,zdet,0,"ONLY");
  
-  n_cells = (n_detec - 1) * 5;
+  n_cells_R = (n_detec_R - 1) * 5;
   printf(" \n\n\n"); 
-  printf(" Number of cells =   %d\n\n",  n_cells);    
+  printf("    Number of cells on Right side =   %d\n",  n_cells_R);    
+
+// Partie de gauche :
+
+  for(Float_t  phi = 15.0; phi < 360.0; phi = phi + phi_deg)
+      {
+        phi_rad = phi*pi/180.;
+       AliMatrix(idrotm[902], 90.0, phi, 90.0, 90.0 +phi, 0.0 , 0.0);
+        gMC->Gspos("V0L0",n_detec_L,"V0LE",-dist0_left*TMath::Sin(phi_rad),
+                         dist0_left*TMath::Cos(phi_rad),offset_left + half_thick_qua1,idrotm[902],"ONLY");
+        n_detec_L++;
+       }
+
+
+  gMC->Gspos("V0LE",1,"alic",0.0,0.0,-350.0-fThickness1/2.0,0,"ONLY");
+  n_cells_L = (n_detec_L - 1) * 5;
+  printf(" \n\n\n"); 
+  printf("    Number of cells on Left side  =   %d\n\n",  n_cells_L);    
+
          
 }
     
     
+    
 //_____________________________________________________________________________
 void AliVZEROv0::BuildGeometry()
 {
   
   // Builds simple ROOT TNode geometry for event display
-  
+
   
   Int_t i;
 
   printf("\n");
-  for(i=0;i<35;i++) printf("*");
+  for(i=0;i<30;i++) printf("*");
   printf(" VZERO BuildGeometry ");
-  for(i=0;i<35;i++) printf("*");
+  for(i=0;i<30;i++) printf("*");
   printf("\n");
   
-  TNode *Top, *Node0, *Node1, *Node2;
-  TNode *Node3, *Node4 , *Node5, *Node6 , *Node7;
+  TNode *Top
+
   TNode *V0Rnode, *V0Rnode0, *V0Rnode6 , *V0Rnode7, *V0Rnode8, *V0Rnode9;
   TNode *V0Rnode1, *V0Rnode2, *V0Rnode3, *V0Rnode4, *V0Rnode5;
+  TNode *V0Lnode, *V0Lnode0;
+  TNode *V0Lnode1, *V0Lnode2, *V0Lnode3, *V0Lnode4, *V0Lnode5;
+   
   const int kColorVZERO  = kGreen;
-  
   Top = gAlice->GetGeometry()->GetNode("alice");
 
   Float_t  height1, height2, height3, height4, height5; 
@@ -526,13 +714,19 @@ void AliVZEROv0::BuildGeometry()
   Float_t  pi = TMath::Pi();
   Float_t  thick_alu;
   
-  height1           =     2.3;         
-  height2           =     3.7; 
-  height3           =     6.2;
-  height4           =    10.5;
-  height5           =    10.5;
+//   height1           =     1.9;         
+//   height2           =     3.7; 
+//   height3           =     6.2;
+//   height4           =    10.5;
+//   height5           =    10.5;
+
+  height1           =     2.0;           // height of cell 1, in cm
+  height2           =     3.2;           // height of cell 2, in cm
+  height3           =     4.9;           // height of cell 3, in cm
+  height4           =     7.5;           // height of cell 4, in cm
+  height5           =    12.0;           // height of cell 5, in cm
   
-  theta             = pi/12.0/2.0;    
+  theta             = pi/6.0/2.0;    
   half_thick_alu    = 0.0025;        
   thick_alu         = 2.0 * half_thick_alu; 
   half_thick_qua1   = fThickness1/2.0; 
@@ -542,7 +736,7 @@ void AliVZEROv0::BuildGeometry()
   half_thick_qua5   = half_thick_qua4  - 0.25;
   
   zdet              =    86.9 +fThickness/2.0;   
-  r0                =    3.4;         
+  r0                =    4.0;         
   height            =    height1 + height2 + height3 + height4 + height5;
   r5                =    r0 + height;
 
@@ -562,7 +756,7 @@ void AliVZEROv0::BuildGeometry()
   fNodes->Add(V0Rnode);
   
   V0Rnode->SetVisibility(2);
-        
+     
  
 // Rondelles de carbone (epaisseur 1 mm) de maintien des cellules ...
  
@@ -571,7 +765,7 @@ void AliVZEROv0::BuildGeometry()
  
   parbox[0] =    0.;
   parbox[1] =  360.;
-  parbox[2] =    24;
+  parbox[2] =    12;
   parbox[3] =     2;
   parbox[4] =  -0.1/2.0;
   parbox[5] =  r0;
@@ -746,14 +940,15 @@ void AliVZEROv0::BuildGeometry()
 
                
   Float_t  phi;
-  Float_t  phi_deg= 180./12.;
+  Float_t  phi_deg= 180./6.;
   Float_t  phi_rad;
   Float_t  xdet,ydet;
-  Int_t    n_detec = 1; 
+  Int_t    n_detec_R = 1; 
+
   char     NameNode[12];  
 
  
-  for (phi = 7.5; phi < 360.0; phi = phi + phi_deg) 
+  for (phi = 15.0; phi < 360.0; phi = phi + phi_deg) 
   {
      
     TRotMatrix* mat920 = new TRotMatrix("rot920","rot920", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );        
@@ -763,323 +958,283 @@ void AliVZEROv0::BuildGeometry()
     ydet = dist0*TMath::Cos(phi_rad);
     
   
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     
     V0Rnode->cd();
     V0Rnode0 = new TNode(NameNode,NameNode,V0R0,-xdet,ydet, offset + half_thick_qua1,mat920);   
     V0Rnode0->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode0);
-    n_detec++;
+    n_detec_R++;
     
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     V0Rnode0->cd();    
     V0Rnode1 = new TNode(NameNode,NameNode,V0R1,0.0,dist1, 0.0,0);      
     V0Rnode1->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode1);
-    n_detec++;
+    n_detec_R++;
     
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     V0Rnode0->cd();    
     V0Rnode2 = new TNode(NameNode,NameNode,V0R2,0.0,dist2, - half_thick_qua1 + half_thick_qua2,0);      
     V0Rnode2->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode2);
-    n_detec++;
+    n_detec_R++;
 
 
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     V0Rnode0->cd();    
     V0Rnode3 = new TNode(NameNode,NameNode,V0R3,0.0,dist3, - half_thick_qua1 + half_thick_qua3,0);      
     V0Rnode3->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode3);
-    n_detec++;
+    n_detec_R++;
 
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     V0Rnode0->cd();    
     V0Rnode4 = new TNode(NameNode,NameNode,V0R4,0.0,dist4, - half_thick_qua1 + half_thick_qua4,0);      
     V0Rnode4->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode4);
-    n_detec++;
+    n_detec_R++;
      
-    sprintf(NameNode,"SUBDET%d",n_detec);
+    sprintf(NameNode,"SUBDER%d",n_detec_R);
     V0Rnode0->cd();    
     V0Rnode5 = new TNode(NameNode,NameNode,V0R5,0.0,dist5, - half_thick_qua1 + half_thick_qua5,0);      
     V0Rnode5->SetLineColor(kColorVZERO);
     fNodes->Add(V0Rnode5);
-    n_detec++;
+    n_detec_R++;
        
     V0Rnode0->SetVisibility(2);
     
   }  
-  
 
-//  Here I add the enveloppe of the  FRONTAL ABSORBER defined by Andreas Morsch 
-//  in   AliABSOv0::CreateGeometry()  :
 
-    Float_t parm[24];
-    Float_t dz;
-    
-    Top->cd();
+// Left side of VZERO :
   
-    parm[0]  = 0.;
-    parm[1]  = 360.;
-    parm[2]  = 7.;
-
-    parm[3]  = -(zRear-zAbsStart)/2.;
-    parm[4]  = rAbs;
-    parm[5]  = zAbsStart * TMath::Tan(theta1);
-
-    parm[6]  = parm[3]+(zNose-zAbsStart);
-    parm[7]  = rAbs;
-    parm[8]  = zNose * TMath::Tan(theta1);
-
-    parm[9]  = parm[3]+(zConeTPC-zAbsStart);
-    parm[10] = rAbs;
-    parm[11] = parm[8] + (parm[9] - parm[6]) * TMath::Tan(theta2);
-
-    parm[12] = parm[3]+(zOpen-zAbsStart);
-    parm[13] = rAbs;
-    parm[14] = parm[11] + (parm[12] - parm[9]) * TMath::Tan(accMax);
-
-    parm[15] = parm[3]+(zRear-dRear-zAbsStart);
-    parm[16] = rAbs   + (parm[15] - parm[12]) * TMath::Tan(thetaOpen1) ;
-    parm[17] = parm[14] + (parm[15] - parm[12]) * TMath::Tan(accMax);
-
-    parm[18] = parm[3]+(zRear-dRear-zAbsStart);
-    parm[19] = (zRear-dRear) * TMath::Tan(accMin);
-    parm[20] = parm[14] + (parm[18] - parm[12]) * TMath::Tan(accMax);
-
-    parm[21] = -parm[3];
-    parm[22] = zRear* TMath::Tan(accMin);
-    parm[23] = parm[20] + (parm[21] - parm[18]) * TMath::Tan(accMax);
   
-    printf(" zRear, zAbsStart,  rAbs =  %f , %f , %f \n\n", 
-             zRear, zAbsStart,  rAbs ); 
-             
-   
-    TPCON *abs0 = new TPCON("abs0", "abs0", "void", parm[0], parm[1], parm[2]);
-    
-    
-    abs0->DefineSection(0, parm[3],  parm[4],  parm[5] );
-    abs0->DefineSection(1, parm[6],  parm[7],  parm[8] );
-    abs0->DefineSection(2, parm[9], parm[10], parm[11] );
-    abs0->DefineSection(3,parm[12], parm[13], parm[14] );
-    abs0->DefineSection(4,parm[15], parm[16], parm[17] );
-    abs0->DefineSection(5,parm[18], parm[19], parm[20] );
-    abs0->DefineSection(6,parm[21], parm[22], parm[23] );
-
-    dz = (zRear-zAbsStart)/2.+zAbsStart;
-    
-    TRotMatrix* mat921 = new TRotMatrix("rot921","rot921",90.0,0.0,90.,90.0,180.0,0.0);
-    
-    Node0 = new TNode("abs0","abs0",abs0,0.0,0.0,dz,0);
-    Node0->SetLineColor(38);   
-    fNodes->Add(Node0);
-    
-    
-    Float_t cpar[5];
-    
-    cpar[0] = (zNose - zAbsStart) / 2.;
-    cpar[1] = zAbsStart * TMath::Tan(accMax);
-    cpar[2] = zAbsStart * TMath::Tan(theta1)-dSteel;
-    cpar[3] = zNose * TMath::Tan(accMax);
-    cpar[4] = zNose * TMath::Tan(theta1)-dSteel;    
+  Float_t   dist0_left;   
+  Float_t   r0_left      =   4.3;   
+  Float_t   height1_left =   2.6; 
+  Float_t   height2_left =   4.1;
+  Float_t   height3_left =   6.4;
+  Float_t   height4_left =  10.2;
+  Float_t   height5_left =  16.9;
+  Float_t   height_left  = height1_left + height2_left + height3_left 
+                                        + height4_left + height5_left;
+  Float_t   r5_left      = r0_left  + height_left; 
 
-    dz = -(zRear-zAbsStart)/2.+cpar[0];
-    
-    TCONE *abs1 =  new TCONE("abs1", "abs1", "void", cpar[0], cpar[1], cpar[2], 
-                              cpar[3], cpar[4]);        
-    
-    Node0->cd();
+  partube[0] =  r0_left;
+  partube[1] = (r5_left) / TMath::Cos(theta);
+  partube[2] = fThickness1/2.0; 
   
-    Node1 = new TNode("abs1","abs1",abs1,0.0,0.0,dz,0);
-    Node1->SetLineColor(7);    
-    fNodes->Add(Node1);
-    
-//  Here I add a reference box to visualise the vertex zone :
-    
-    Top->cd();
-    
-    Float_t  paref[3];
-    
-    paref[0]  =  10.0;
-    paref[1]  =  15.0; 
-    paref[2]  =   5.6;
-    
-    TBRIK *aref = new TBRIK("aref","aref", "void", paref[0],paref[1],paref[2]);
-                           
-    Node2 = new TNode("aref","aref",aref,0.0,0.0,0.0,0);
-    Node2->SetLineColor(kBlue);        
-    fNodes->Add(Node2);    
-      
-//  Here I add the  mother volume  QBPM
-//  and the flanges  QB29, QB22 et QB24 defined by Andreas Morsch 
-//  in   AliPIPEv0::CreateGeometry()  :
+  TTUBE *V0LE = new TTUBE("V0LE", "V0LE", "void", partube[0], partube[1], partube[2]);
+               
+  Top->cd();
+  
+  V0Lnode = new TNode("V0LE","V0LE",V0LE,0.0,0.0,-350.0-fThickness1/2.0,0);
+  
+  V0Lnode->SetLineColor(kBlue);
+  fNodes->Add(V0Lnode);
+  
+  V0Lnode->SetVisibility(2);
+  
+  dist0_left  =  r0_left + height_left / 2.0;
+  thick_alu   =  2.0*half_thick_alu;
+  
+  par[0]      =  half_thick_qua1;
+  par[1]      =  0.0;
+  par[2]      =  0.0;
+  par[3]      =  height_left / 2.0 ;
+  par[4]      =  TMath::Tan(theta) * r0_left;
+  par[5]      =  TMath::Tan(theta) * r5_left;
+  par[6]      =  0.0;
+  par[7]      =  height_left / 2.0 ;
+  par[8]      =  TMath::Tan(theta) * r0_left;
+  par[9]      =  TMath::Tan(theta) * r5_left;
+  par[10]     =  0.0;
+  
+  TTRAP *V0L0 = new TTRAP("V0L0", "V0L0", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
+               
+  
+  Float_t   dist1_left;
+  Float_t   r1_left;
+  Float_t   offset_left;
+     
+  dist1_left     =  (- height_left + height1_left) /2.0; 
+  r1_left        =  r0_left + height1_left;
+  offset_left    = - fThickness1/2.0 + 0.1; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;
+  par[3]    =  height1_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r0_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r1_left- thick_alu;
+  par[7]    =  height1_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r0_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r1_left - thick_alu;
+
+  TTRAP *V0L1 = new TTRAP("V0L1", "V0L1", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
  
-
-    Float_t parp[36];
+  Float_t   dist2_left;
+  Float_t   r2_left; 
     
-//  Mother Volume QBPM :
+  dist2_left     =    (- height_left + height2_left) /2.0 + height1_left;
+  r2_left        =       r1_left + height2_left; 
+  
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height2_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r1_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[7]    =  height2_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r1_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r2_left - thick_alu;
 
-    parp[0]  =    0;
-    parp[1]  =  360;
-    parp[2]  =   11;
+  TTRAP *V0L2 = new TTRAP("V0L2", "V0L2", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
  
-    parp[3]  = - 90;
-    parp[4]  =    0;
-    parp[5]  =    5.8;
-
-    parp[6]  = - 81.0;
-    parp[7]  =    0.;
-    parp[8]  =    5.8;
-
-    parp[9]  = - 81.;
-    parp[10]  =    0.;
-    parp[11] =    4.22;
 
-    parp[12] = - 28.00;
-    parp[13] =    0;
-    parp[14] =    4.22;
-
-    parp[15] = - 28.00;
-    parp[16] =    0;
-    parp[17] =    3.2;
-
-    parp[18] =    0;
-    parp[19] =    0;
-    parp[20] =    3.2;
+  
+  Float_t   dist3_left;
+  Float_t   r3_left;
+     
+  dist3_left     =    (- height_left + height3_left) /2.0 + height1_left + height2_left;
+  r3_left        =       r2_left + height3_left; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height3_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[7]    =  height3_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r2_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  
+  TTRAP *V0L3 = new TTRAP("V0L3", "V0L3", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
+   
+  Float_t   dist4_left;
+  Float_t   r4_left;
+       
+  dist4_left     =    (- height_left + height4_left) /2.0 + height1_left 
+                                     + height2_left + height3_left;
+  r4_left        =       r3_left + height4_left; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height4_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[7]    =  height4_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r3_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  
+  TTRAP *V0L4 = new TTRAP("V0L4", "V0L4", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
+               
 
-    parp[21] =   28.00;
-    parp[22] =    0;
-    parp[23] =    3.2;
+  Float_t   dist5_left;
 
-    parp[24] =   28.00;
-    parp[25] =    0;
-    parp[26] =    4.22;
+         
+  dist5_left     =    (- height_left + height5_left) /2.0 + height1_left 
+                                     + height2_left + height3_left + height4_left;
 
-    parp[27] =  250;
-    parp[28] =    0;
-    parp[29] =   4.22;
+   
+  par[0]    =  half_thick_qua1 - thick_alu;   
+  par[3]    =  height5_left / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r5_left - thick_alu;
+  par[7]    =  height5_left / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r4_left - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r5_left - thick_alu;
+  
+  TTRAP *V0L5 = new TTRAP("V0L5", "V0L5", "void", par[0], par[1], par[2], par[3],
+               par[4], par[5], par[6], par[7], par[8], par[9], par[10]);
 
-    parp[30] =  250;
-    parp[31] =    0;
-    parp[32] =    5;
 
-    parp[33] =  800;
-    parp[34] =    0;
-    parp[35] =    5;
-    
-    TPCON *pip0 = new TPCON("pip0", "pip0", "void", parp[0], parp[1], parp[2]);
+  Int_t    n_detec_L = 1;
+  for (phi = 15.0; phi < 360.0; phi = phi + phi_deg) 
+  {
      
-    pip0->DefineSection( 0, parp[3],  parp[4],  parp[5] );
-    pip0->DefineSection( 1, parp[6],  parp[7],  parp[8] );
-    pip0->DefineSection( 2, parp[9], parp[10], parp[11] );
-    pip0->DefineSection( 3,parp[12], parp[13], parp[14] );
-    pip0->DefineSection( 4,parp[15], parp[16], parp[17] );
-    pip0->DefineSection( 5,parp[18], parp[19], parp[20] );
-    pip0->DefineSection( 6,parp[21], parp[22], parp[23] );
-    pip0->DefineSection( 7,parp[24], parp[25], parp[26] );
-    pip0->DefineSection( 8,parp[27], parp[28], parp[29] );
-    pip0->DefineSection( 9,parp[30], parp[31], parp[32] );
-    pip0->DefineSection(10,parp[33], parp[34], parp[35] );
-    
-    dz = 0.0;
-    
-    Top->cd();
-    
-    Node3 = new TNode("pip0","pip0",pip0,0.0,0.0,dz,mat921);
-    Node3->SetLineColor(10);   
-    fNodes->Add(Node3);
-    Node3->SetVisibility(2);
-    
-//  Flanges QB29 at  654.8  and   254.8  cms :
-
-    Float_t  ptube[3];
-    
-    ptube[0] = 3.0;
-    ptube[1] = 4.9;
-    ptube[2] = 2.2; 
+    TRotMatrix* mat920 = new TRotMatrix("rot920","rot920", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );        
     
-    TTUBE *pip1 = new TTUBE("pip1", "pip1", "void", ptube[0], ptube[1], ptube[2]);  
+    phi_rad = phi*pi/180.;
+    xdet = dist0_left*TMath::Sin(phi_rad);
+    ydet = dist0_left*TMath::Cos(phi_rad);
+    
+  
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    
+    V0Lnode->cd();
+    V0Lnode0 = new TNode(NameNode,NameNode,V0L0,-xdet,ydet, offset_left + half_thick_qua1,mat920);      
+    V0Lnode0->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode0);
+    n_detec_L++;
+    
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    V0Lnode0->cd();    
+    V0Lnode1 = new TNode(NameNode,NameNode,V0L1,0.0,dist1_left, 0.0,0);         
+    V0Lnode1->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode1);
+    n_detec_L++;
+    
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    V0Lnode0->cd();    
+    V0Lnode2 = new TNode(NameNode,NameNode,V0L2,0.0,dist2_left, 0.0,0);         
+    V0Lnode2->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode2);
+    n_detec_L++;
+
+
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    V0Lnode0->cd();    
+    V0Lnode3 = new TNode(NameNode,NameNode,V0L3,0.0,dist3_left, 0.0,0);         
+    V0Lnode3->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode3);
+    n_detec_L++;
+
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    V0Lnode0->cd();    
+    V0Lnode4 = new TNode(NameNode,NameNode,V0L4,0.0,dist4_left, 0.0,0);         
+    V0Lnode4->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode4);
+    n_detec_L++;
      
-    Node3->cd();
+    sprintf(NameNode,"SUBDEL%d",n_detec_L);
+    V0Lnode0->cd();    
+    V0Lnode5 = new TNode(NameNode,NameNode,V0L5,0.0,dist5_left, 0.0,0);         
+    V0Lnode5->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Lnode5);
+    n_detec_L++;
        
+    V0Lnode0->SetVisibility(2);
     
-    Node4 = new TNode("pip1","pip1",pip1,0.0,0.0,254.8,0);
-    Node4->SetLineColor(6);    
-    fNodes->Add(Node4);
-    
-    TTUBE *pip2 = new TTUBE("pip2", "pip2", "void", ptube[0], ptube[1], ptube[2]);  
-    
-    Node3->cd();
-    
-    Node5 = new TNode("pip2","pip2",pip2,0.0,0.0,654.8,0);
-    Node5->SetLineColor(6);    
-    fNodes->Add(Node5);
-    
-
-//  Al-Be  section QBAB at 335.0 cm  (LEFT side) :
-    
-    ptube[0] =  2.90;
-    ptube[1] =  3.05;
-    ptube[2] = 171.0;
-
-    TTUBE *pip3 = new TTUBE("pip3", "pip3", "void", ptube[0], ptube[1], ptube[2]); 
-     
-    Node3->cd();
+  }    
 
-    Node6 = new TNode("pip3","pip3",pip3,0.0,0.0,335.0+ptube[2],0);
-    Node6->SetLineColor(6);
-    fNodes->Add(Node6);
-    
-// Here I add the flange which is sitting on beam line 
-// right in front of V0R detector, and which I found on CERN drawing 
-// entitled : ALICE BEAM VACCUM CHAMBER - RB26 version III :  
-
-    ptube[0] = 3.0;
-    ptube[1] = 5.675;
-    ptube[2] = 0.9; 
-    
-    TTUBE *pip4 = new TTUBE("pip4", "pip4", "void", ptube[0], ptube[1], ptube[2]);  
-     
-    Node3->cd();
-    
-    
-    Node7 = new TNode("pip4","pip4",pip4,0.0,0.0,-85.0-0.9,0);
-    Node7->SetLineColor(6);
-    fNodes->Add(Node7);   
-         
- }  
+        
+}  
     
 
 //------------------------------------------------------------------------
 void AliVZEROv0::CreateMaterials()
 {
-  Int_t i;
+    Int_t i;
 
-  printf("\n");
-  for(i=0;i<35;i++) printf("*");
-  printf(" VZERO create materials ");
-  for(i=0;i<35;i++) printf("*");
-  printf("\n");
+    printf("\n");
+    for(i=0;i<30;i++) printf("*");
+    printf(" VZERO create materials ");
+    for(i=0;i<30;i++) printf("*");
+    printf("\n");
+    
 
-/* ...................  OLD VALUES  ( used in RICH) ............................   
-    Float_t ppckov[14] = { 5.63e-9,5.77e-9,5.9e-9,6.05e-9,6.2e-9,6.36e-9,6.52e-9,
-                          6.7e-9,6.88e-9,7.08e-9,7.3e-9,7.51e-9,7.74e-9,8e-9 };                           
-    Float_t rindex_quarz[14] = { 1.528309,1.533333,
-                                1.538243,1.544223,1.550568,1.55777,
-                                1.565463,1.574765,1.584831,1.597027,
-                                1.611858,1.6277,1.6472,1.6724 };
-    Float_t absco_quarz[14] = { 20.126,16.27,13.49,11.728,9.224,8.38,7.44,7.17,
-                               6.324,4.483,1.6,.323,.073,0. }; 
-...................................................................................... */                              
-
-             
     Float_t ppckov[14] = { 5.5e-9, 5.7e-9, 5.9e-9, 6.1e-9, 6.3e-9, 6.5e-9, 6.7e-9, 
                            6.9e-9, 7.1e-9, 7.3e-9, 7.5e-9, 7.7e-9, 7.9e-9, 8.1e-9 };
+
+           
+    Float_t ppckov_alu[14] = { 5.5e-9, 5.7e-9, 5.9e-9, 6.1e-9, 6.3e-9, 6.5e-9, 6.7e-9, 
+                               6.9e-9, 7.1e-9, 7.3e-9, 7.5e-9, 7.7e-9, 7.9e-9, 8.1e-9 };
                           
     Float_t rindex_quarz[14] = { 1.52398,  1.53090, 1.53835, 1.54641, 1.55513, 1.56458, 
                                  1.57488,  1.58611, 1.59842, 1.61197, 1.62696, 1.64362, 
-                                1.662295, 1.68337 };
+                                 1.662295, 1.68337 };
                                 
     Float_t absco_quarz[14] = { 105.8,  45.656, 35.665, 28.598, 25.007, 21.04, 17.525, 
                                 14.177, 9.282, 4.0925, 1.149, 0.3627, 0.1497, 0.05 };  
@@ -1088,11 +1243,12 @@ void AliVZEROv0::CreateMaterials()
     
         
     Float_t rindex_alu[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; 
-
+    
+    
     Float_t absco_alu[14]  = { 1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,
                               1e-4,1e-4,1e-4,1e-4 };
     Float_t effic_alu[14]  = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. };
-    
+
 
     Int_t *idtmed = fIdtmed->GetArray()-2999;
     
@@ -1128,12 +1284,12 @@ void AliVZEROv0::CreateMaterials()
     
 //  Definition of materials :
        
-    AliMaterial( 1, "AIR A$", 14.61, 7.3, .001205, 30420., 67500);
-    AliMaterial(11, "AIR I$", 14.61, 7.3, .001205, 30420., 67500);
-    AliMaterial( 2, "CARBON$"  , 12.01, 6.0, 2.265, 18.8, 49.9);
+    AliMaterial( 1, "AIR A$", 14.61, 7.3, .001205, 30420., 67500, 0, 0);
+    AliMaterial(11, "AIR I$", 14.61, 7.3, .001205, 30420., 67500, 0, 0);
+    AliMaterial( 2, "CARBON$"  , 12.01, 6.0, 2.265, 18.8, 49.9, 0, 0);
     AliMixture(  3, "QUA", aqua, zqua, densqua, nlmatqua, wmatqua);
-    AliMaterial( 4, "ALUMINIUM1$", 26.98, 13., 2.7, 8.9, 37.2);
-    AliMaterial( 5, "ALUMINIUM2$", aal, zal, densal, radlal, 0);
+    AliMaterial( 4, "ALUMINIUM1$", 26.98, 13., 2.7, 8.9, 37.2, 0, 0);
+    AliMaterial( 5, "ALUMINIUM2$", aal, zal, densal, radlal, 0, 0, 0);
     
     
     AliMixture( 6, "Scintillator$",ascin,zscin,denscin,-2,wscin);
@@ -1144,27 +1300,41 @@ void AliVZEROv0::CreateMaterials()
     
     Float_t tmaxfd, stemax, deemax, epsil, stmin;
     
-    tmaxfd = -10.;
-    stemax = -0.1;
-    deemax = -0.1;
-    epsil  = -0.01;
-    stmin  = -0.001;
-    
+    tmaxfd = 10.;
+    stemax = 0.1;
+    deemax = 0.1;     
+    epsil  = 0.001;
+    stmin  = 0.001;
+              
+    printf(" \n");
+    printf(" StepQua,    StepAlu    = %f %f \n",fMaxStepQua,fMaxStepAlu);
+    printf(" DeStepQua,  DeStepAlu  = %f %f \n",fMaxDestepQua,fMaxDestepAlu);
+    printf(" \n");    
+
 
 //  Active Air :    
-    AliMedium(1, "ACTIVE AIR$", 1, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
+    AliMedium(1, "ACTIVE AIR$", 1, 1, ISXFLD, SXMGMX,
+              10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ;
 
 //  Inactive air : 
   
-    AliMedium(11, "INACTIVE AIR$", 11, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
+    AliMedium(11, "INACTIVE AIR$", 11, 0, ISXFLD, SXMGMX,
+              10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ;
     
-    AliMedium(2, "CARBON$ ", 2,  1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);   
+    AliMedium(2, "CARBON$ ", 2,  1, ISXFLD, SXMGMX,
+              tmaxfd, stemax, deemax, epsil, stmin, 0, 0);   
 
-    AliMedium(3, "QUARZ$", 3, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepQua, fMaxDestepQua, epsil, stmin);
+    AliMedium(3, "QUARZ$", 3, 1, ISXFLD, SXMGMX,
+              tmaxfd, fMaxStepQua, fMaxDestepQua, epsil, stmin, 0, 0);
     
-    AliMedium(4,"ALUMINUM1$",4, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu, fMaxDestepAlu, epsil, stmin);
-    AliMedium(5,"ALUMINUM2$",5, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu, fMaxDestepAlu, epsil, stmin);    
-    AliMedium(6,"SCINTILLATOR$",6, 1, ISXFLD, SXMGMX, 10., .01, 1., .003, .003);
+    AliMedium(4,"ALUMINUM1$",4, 1, ISXFLD, SXMGMX,
+              tmaxfd, fMaxStepAlu, fMaxDestepAlu, epsil, stmin, 0, 0);
+             
+
+    AliMedium(5,"ALUMINUM2$",5, 1, ISXFLD, SXMGMX,
+              tmaxfd, fMaxStepAlu, fMaxDestepAlu, epsil, stmin, 0, 0);    
+
+    AliMedium(6,"SCINTILLATOR$",6, 1, ISXFLD, SXMGMX, 10., .01, 1., .003, .003, 0, 0);
 
     gMC->Gstpar(idtmed[3000], "LOSS", 1.);  //  [3000] = air ACTIF  [3010] = air INACTIF
     gMC->Gstpar(idtmed[3000], "HADR", 1.);
@@ -1179,7 +1349,9 @@ void AliVZEROv0::CreateMaterials()
     gMC->Gstpar(idtmed[3002], "LOSS", 1.);  //  [3002] = quartz
     gMC->Gstpar(idtmed[3002], "HADR", 1.);
     gMC->Gstpar(idtmed[3002], "DCAY", 1.);
-    gMC->Gstpar(idtmed[3002], "DRAY", 1.);
+    gMC->Gstpar(idtmed[3002], "DRAY", 1.);  
+    gMC->Gstpar(idtmed[3002], "CUTGAM",0.5E-4) ; 
+    gMC->Gstpar(idtmed[3002], "CUTELE",1.0E-4) ;
     
     gMC->Gstpar(idtmed[3003], "LOSS", 1.);  //  [3003] = normal aluminum
     gMC->Gstpar(idtmed[3003], "HADR", 1.);
@@ -1190,16 +1362,18 @@ void AliVZEROv0::CreateMaterials()
     gMC->Gstpar(idtmed[3004], "HADR", 1.);
     gMC->Gstpar(idtmed[3004], "DCAY", 1.);
     gMC->Gstpar(idtmed[3004], "DRAY", 1.);
+    gMC->Gstpar(idtmed[3004], "CUTGAM",0.5E-4) ; 
+    gMC->Gstpar(idtmed[3004], "CUTELE",1.0E-4) ;
     
     gMC->Gstpar(idtmed[3005], "LOSS", 1.);  //  [3005] = scintillator
     gMC->Gstpar(idtmed[3005], "HADR", 1.);
     gMC->Gstpar(idtmed[3005], "DCAY", 1.);
     gMC->Gstpar(idtmed[3005], "DRAY", 1.);    
     
-    geant3->Gsckov(idtmed[3002], 14, ppckov, absco_quarz, effic_all,rindex_quarz);
-    
-    geant3->Gsckov(idtmed[3004], 14, ppckov, absco_alu, effic_alu, rindex_alu);
+    geant3->Gsckov(idtmed[3002], 14, ppckov, absco_quarz, effic_all,rindex_quarz);    
+    geant3->Gsckov(idtmed[3004], 14, ppckov_alu, absco_alu, effic_alu, rindex_alu);
 
+    
 }
 //---------------------------------------------------------------------
 void AliVZEROv0::DrawModule()
@@ -1210,9 +1384,9 @@ void AliVZEROv0::DrawModule()
    Int_t i;
 
    printf("\n");
-   for(i=0;i<35;i++) printf("*");
+   for(i=0;i<30;i++) printf("*");
    printf(" VZERO DrawModule ");
-   for(i=0;i<35;i++) printf("*");
+   for(i=0;i<30;i++) printf("*");
    printf("\n");
 
 
@@ -1224,21 +1398,13 @@ void AliVZEROv0::Init()
 // Initialises version 0 of the VZERO Detector
 // Just prints an information message
   
-   Int_t i;
-
-   printf("\n");
-   for(i=0;i<35;i++) printf("*");
-   printf(" VZERO_Init \n");
-   for(i=0;i<35;i++) printf("*");
-   printf("\n");
-  
-   fMulti       = 0;
-   fNCerenkovs  = 0;
-   fNGCerenkovs = 0;
-   fNdead       = 0;
-  
-   BookingHistograms();
+   printf(" VZERO version %d initialized \n",IsVersion());
    
+//   gMC->SetMaxStep(fMaxStepAlu);
+//   gMC->SetMaxStep(fMaxStepQua);
+   
+//   AliVZERO::Init();
+  
 }
 
 //-------------------------------------------------------------------
@@ -1246,138 +1412,115 @@ void AliVZEROv0::Init()
 void AliVZEROv0::StepManager()
 {
   
-//   Minimal version of StepManager :
-//   Everything has been removed, I only AddHit whenever hit is in 
-//   volume V0RI.  
-  
-     Int_t          copy;
-     Int_t          vol[4];  // (box, layer, row, column) indices
-     Float_t        hits[19];  // position wrt MRS,   energies...
+//   (Very)Minimal version of StepManager 
+
+    
+     Int_t  copy;
+     static Int_t vol[4];
+     static Float_t hits[15];
      
      TLorentzVector pos;
-     Float_t        global[3];
-     Float_t        local[3];
      
-     TLorentzVector momentum;
+     TLorentzVector mom;
      Float_t        theta;
      Float_t        phi;
-     Float_t        mom[4];
      Float_t        kRaddeg = 180/TMath::Pi();
+     Float_t        RingNumber;
+
+     Int_t ipart;
      
-     Float_t        TrackEnters = 0.0;
-     Float_t        TrackExits  = 0.0;
-     Float_t        Cerenkov    = 0.0;
-     
-     gMC->SetMaxStep(fMaxStepAlu);
-     gMC->SetMaxStep(fMaxStepQua);
-     
-     if (!gMC->IsTrackAlive()) return;
-     
-     if (gMC->IsTrackEntering())       TrackEnters = 1.0;
-     if (gMC->IsTrackExiting() )       TrackExits  = 1.0;
-     if (gMC->TrackPid() == 50000050)  Cerenkov    = 1.0;
-     
-  
-        
-     gMC->TrackPosition(pos);
-     gMC->TrackMomentum(momentum);
-     
-     mom[0] = momentum[0];
-     mom[1] = momentum[1];
-     mom[2] = momentum[2];
-     mom[3] = momentum[3];
-     
-     Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
-     Double_t rt = TMath::Sqrt(tc);
-     theta   = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg;
-     phi     = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
-    
-     global[0] = pos[0];
-     global[1] = pos[1];
-     global[2] = pos[2];
-     
-     
-     gMC->Gmtod(global,local,1);
+          
+//     TGeant3 *geant3 = (TGeant3*) gMC;     
+//     Int_t  Nphot = geant3->Gckin2()->ngphot;
      
-     hits[0]   = global[0];
-     hits[1]   = global[1];
-     hits[2]   = global[2];
-     hits[3]   = local[0];
-     hits[4]   = local[1];
-     hits[5]   = local[2];
-     hits[6]   = gMC->Edep();
-     hits[7]   = gMC->Etot();
-     hits[8]   = Float_t (gMC->TrackPid());
-     hits[9]   = Float_t (gMC->IdFromPDG(gMC->TrackPid()));
-     hits[10]  = gMC->TrackTime();
-     hits[11]  = TrackEnters;
-     hits[12]  = TrackExits;
-     hits[13]  = gMC->TrackCharge();
-     hits[14]  = Cerenkov;  
+
+//   Only charged tracks :
      
-     hits[16]  = theta;
-     hits[17]  = phi; 
-   
+     if ( !gMC->TrackCharge() || !gMC->IsTrackAlive() ) return; 
+
+
      vol[0]    = gMC->CurrentVolOffID(1, vol[1]);
      vol[2]    = gMC->CurrentVolID(copy);
      vol[3]    = copy;
 
+     if      ( gMC->CurrentVolID(copy) == gMC->VolId("V0R1") ||
+               gMC->CurrentVolID(copy) == gMC->VolId("V0L1") )
+              RingNumber = 1.0;
+     else if ( gMC->CurrentVolID(copy) == gMC->VolId("V0R2") ||
+               gMC->CurrentVolID(copy) == gMC->VolId("V0L2") ) 
+              RingNumber = 2.0;  
+     else if ( gMC->CurrentVolID(copy) == gMC->VolId("V0R3") ||
+               gMC->CurrentVolID(copy) == gMC->VolId("V0L3") )
+              RingNumber = 3.0;
+     else if ( gMC->CurrentVolID(copy) == gMC->VolId("V0R4") ||
+               gMC->CurrentVolID(copy) == gMC->VolId("V0L4") )          
+              RingNumber = 4.0; 
+     else if ( gMC->CurrentVolID(copy) == gMC->VolId("V0R5") ||
+               gMC->CurrentVolID(copy) == gMC->VolId("V0L5") )   
+               RingNumber = 5.0; 
+     else
+              RingNumber = 0.0;
+
+     if (gMC->IsTrackEntering() && RingNumber > 0.5) {
+       
+         gMC->TrackPosition(pos);
+     
+         gMC->TrackMomentum(mom);      
+         Double_t tc   = mom[0]*mom[0]+mom[1]*mom[1];
+         Double_t Pt   = TMath::Sqrt(tc);
+        Double_t Pmom = TMath::Sqrt(tc+mom[2]*mom[2]);
 
-     if (gMC->CurrentVolID(copy) >= gMC->VolId("V0RI") &&
-         gMC->CurrentVolID(copy) <= gMC->VolId("V0E4"))         
-     {
-        AddHit(gAlice->CurrentTrack(), vol, hits);
-       }       
-
-  }
-//---------------------------------------------------------------------
-void AliVZEROv0::AddHit(Int_t track, Int_t* vol, Float_t* hits)
-{
-  
-  // Adds a  hit 
-  
-  
-   TClonesArray  &lhits = *fHits;
-   
-   new(lhits[fNhits++]) AliVZEROhit(fIshunt, track, vol, hits);
-
+         theta   = Float_t(TMath::ATan2(Pt,Double_t(mom[2])))*kRaddeg;
+         phi     = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
+     
+         ipart  = gMC->TrackPid();
+
+         hits[0]  = pos[0];
+         hits[1]  = pos[1];
+         hits[2]  = pos[2];             
+        hits[3]  =  ipart; 
+        
+//         Float_t ttime = gMC->TrackTime();
+//         hits[4] = ttime*1e9;
+
+        hits[4]  = gMC->TrackTime();
+         hits[5]  = gMC->TrackCharge();
+        hits[6]  = theta;
+        hits[7]  = phi;
+        hits[8]  = RingNumber;
+        
+        hits[9]  = Pt;
+        hits[10] = Pmom;
+        hits[11] = mom[0];
+        hits[12] = mom[1];
+        hits[13] = mom[2];
+        
+
+         AddHit(gAlice->CurrentTrack(), vol, hits);
+        
+        }
+     
 }
 
-//---------------------------------------------------------------------
-void AliVZEROv0::FinishEvent()
+//_____________________________________________________________________________
+void AliVZEROv0::AddHit(Int_t track, Int_t *vol, Float_t *hits)
 {
-   
-   printf("\n");
-   for(int i=0;i<30;i++) printf("*");
-   printf(" VZERO_finishevent");
-   for(int i=0;i<30;i++) printf("*");
-   printf("\n");
-   
-     AddDigit(tracks, digits);
-     
-     
-     if(fMulti > 0) fhMultiplicity->Fill(fMulti); 
-     fhCerenkov->Fill(fNCerenkovs); 
+  //
+  // Add a VZERO hit
+  //
 
-     fMulti       = 0;
-     fNCerenkovs  = 0;
-     fNGCerenkovs = 0;
-     fNdead       = 0;
-     
+  TClonesArray &lhits = *fHits;
+  new(lhits[fNhits++]) AliVZEROhit(fIshunt,track,vol,hits);
 }
 
 //---------------------------------------------------------------------
-void AliVZEROv0::AddDigit(Int_t *tracks, Int_t* digits) 
+void AliVZEROv0::AddDigits(Int_t *tracks, Int_t* digits) 
 {
 
    TClonesArray  &ldigits = *fDigits;
-
    new(ldigits[fNdigits++]) AliVZEROdigit(tracks, digits);
-
 }
 
-
 //---------------------------------------------------------------------
 void AliVZEROv0::MakeBranch(Option_t *option)
 {
@@ -1387,7 +1530,7 @@ void AliVZEROv0::MakeBranch(Option_t *option)
   
   char branchname[10];
   sprintf(branchname,"%s",GetName());
-  
+  printf(" fBufferSize = %d \n",fBufferSize);
   
   char *H = strstr(option,"H");
   
@@ -1401,63 +1544,6 @@ void AliVZEROv0::MakeBranch(Option_t *option)
   if (fDigits   && gAlice->TreeD() && D) {
     gAlice->TreeD()->Branch(branchname,&fDigits, fBufferSize);
     printf("* AliDetector::MakeBranch * Making Branch %s for digits\n",branchname);
-  }     
-
-
-}
-
-//---------------------------------------------------------------------
-void AliVZEROv0::BookingHistograms()
-{
-
-  if (fhMultiplicity)         
-    delete fhMultiplicity;
-    
-  if (fhGEANTcode) 
-    delete fhGEANTcode;
-    
-  if (fhCerenkov)
-    delete fhCerenkov; 
-     
-  if (fhToF)
-    delete fhToF;    
-
-//  fhMultiplicity = new TH1F("hMultiplicity", "hMultiplicity", 350,  0. , 350.); 
-
-  fhMultiplicity = new TH1F("hMultiplicity", "hMultiplicity", 100,  1. , 100.);
-  fhGEANTcode    = new TH1F("hGEANTcode", "hGEANTcode", 50,  1., 50.);
-  fhCerenkov     = new TH1F("hCerenkov", "hCerenkov", 100, 1., 100000.);
-  fhToF          = new TH1F("hToF", "hToF",150,2.0,7.0);
-  
-}
-  
-//---------------------------------------------------------------------
-void AliVZEROv0::FinishRun()
-{
-
-   SavingHistograms();
-}
-
-
-
-//---------------------------------------------------------------------
-void AliVZEROv0::SavingHistograms()
-{
-
-//  Saves the histograms in a root file named "name.save" 
-
-
-  Text_t outputname[8] ;
-  outputname = "Fileout";
-  TFile output(outputname,"RECREATE");
-  output.cd();
-  
-  if (fhMultiplicity)         
-    fhMultiplicity->Write();
-  if (fhGEANTcode)
-    fhGEANTcode->Write(); 
-  if (fhCerenkov)
-    fhCerenkov->Write();
-  if (fhToF)
-    fhToF->Write();   
+  }  
+   
 }