This commit was generated by cvs2svn to compensate for changes in r3312,
authorcheynis <cheynis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Apr 2001 13:02:07 +0000 (13:02 +0000)
committercheynis <cheynis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Apr 2001 13:02:07 +0000 (13:02 +0000)
which included commits to RCS files with non-trunk default branches.

13 files changed:
VZERO/AliVZERO.cxx [new file with mode: 0755]
VZERO/AliVZERO.h [new file with mode: 0755]
VZERO/AliVZEROdigit.cxx [new file with mode: 0644]
VZERO/AliVZEROdigit.h [new file with mode: 0644]
VZERO/AliVZEROhit.cxx [new file with mode: 0644]
VZERO/AliVZEROhit.h [new file with mode: 0644]
VZERO/AliVZEROv0.cxx [new file with mode: 0755]
VZERO/AliVZEROv0.h [new file with mode: 0755]
VZERO/DrawVZERO.C [new file with mode: 0755]
VZERO/Fileout [new file with mode: 0644]
VZERO/Makefile [new file with mode: 0644]
VZERO/VZEROLinkDef.h [new file with mode: 0755]
VZERO/ViewVZERO.C [new file with mode: 0755]

diff --git a/VZERO/AliVZERO.cxx b/VZERO/AliVZERO.cxx
new file mode 100755 (executable)
index 0000000..9eb5a58
--- /dev/null
@@ -0,0 +1,136 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
+
+///////////////////////////////////////////////////////////////////////////
+//                                                                       //
+//                          V-Zero   Detector                            //
+//  This class contains the base procedures for the VZERO  detector      //
+//  All comments should be sent to Brigitte CHEYNIS :                    //
+//                                 b.cheynis@ipnl.in2p3.fr               //                                                     //                                                                           //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
+
+#include <iostream.h>
+#include <fstream.h>
+
+#include "TMath.h"
+#include "TTUBE.h"
+#include "TNode.h"
+#include "TGeometry.h"
+#include "AliRun.h"
+#include "AliVZERO.h"
+#include "AliVZEROdigit.h"
+#include "AliMC.h"
+#include "AliVZEROhit.h"
+
+ClassImp(AliVZERO)
+
+//_____________________________________________________________________________
+AliVZERO::AliVZERO(const char *name, const char *title)
+       : AliDetector(name,title)
+{
+  //
+  // Standard constructor for VZERO Detector
+  //
+  
+  fIshunt       =  1 ; // All hits are associated with primary particles  
+   
+  fHits         =  new TClonesArray("AliVZEROhit",400) ; 
+  fDigits       =  new TClonesArray("AliVZEROdigit",400) ; 
+  
+  fNhits        =    0;
+  fNdigits      =    0; 
+  fNCerenkovs   =    0; 
+  fMulti        =    0;
+  fThickness    =  3.1;   // total thickness of the V0R box
+  fThickness1   =  2.5;   // thickness of the thickest quartz cell
+  
+  fMaxStepQua   =  0.05; 
+  fMaxStepAlu   =  0.01; 
+  
+  fMaxDestepQua =  -1.0;
+  fMaxDestepAlu =  -1.0;
+  
+  SetMarkerColor(kRed);
+ }
+
+//_____________________________________________________________________________
+void AliVZERO::BuildGeometry()
+{
+  //
+  // Build simple ROOT TNode geometry for event display
+  //
+}
+//_____________________________________________________________________________
+void AliVZERO::CreateGeometry()
+{
+  //
+  // Build simple ROOT TNode geometry for event display
+  //
+}
+//_____________________________________________________________________________
+void AliVZERO::CreateMaterials()
+{
+  //
+  // Build simple ROOT TNode geometry for event display
+  //
+}
+//_____________________________________________________________________________
+Int_t AliVZERO::DistanceToPrimitive(Int_t px, Int_t py)
+{
+  //
+  // Calculate the distance from the mouse to the VZERO on the screen
+  // Dummy routine
+  //
+  
+  return 9999;
+}
+//-------------------------------------------------------------------------
+void AliVZERO::Init()
+{
+  //
+  // Initialise the VZERO after it has been built
+  //
+}
+
+//-------------------------------------------------------------------------
+
+void AliVZERO::SetMaxStepQua(Float_t p1)
+{
+     fMaxStepQua = p1;
+}
+
+//___________________________________________
+void AliVZERO::SetMaxStepAlu(Float_t p1)
+{
+    fMaxStepAlu = p1;
+}
+
+//___________________________________________
+void AliVZERO::SetMaxDestepQua(Float_t p1)
+{
+    fMaxDestepQua = p1;
+}
+
+//___________________________________________
+void AliVZERO::SetMaxDestepAlu(Float_t p1)
+{
+    fMaxDestepAlu = p1;
+}
diff --git a/VZERO/AliVZERO.h b/VZERO/AliVZERO.h
new file mode 100755 (executable)
index 0000000..34961e1
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef VZERO_H
+#define VZERO_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+//////////////////////////////////////////////////
+//  Manager and hits classes for set : VZERO    //
+//////////////////////////////////////////////////
+#include "AliDetector.h"
+#include "AliHit.h"
+#include "TNamed.h"
+#include "TTree.h"
+
+class TDirectory;
+R__EXTERN TDirectory *  gDirectory;
+class AliVZERO : public AliDetector {
+public:
+
+  AliVZERO() {}
+  AliVZERO(const char *name, const char *title);
+  virtual       ~AliVZERO() {}
+  virtual void   AddDigit( Int_t* tracks, Int_t* digits) = 0;
+  virtual void   BuildGeometry();
+  virtual void   CreateGeometry();
+  virtual void   CreateMaterials();
+  virtual Int_t  DistanceToPrimitive(Int_t px, Int_t py);
+  virtual Int_t  IsVersion() const = 0;
+  virtual void   Init();
+  virtual void   DrawModule() {};
+  virtual void   StepManager() {};
+  virtual inline  void   SetThickness(Float_t thick)  {fThickness = thick;};
+  virtual inline  void   SetThickness1(Float_t thick) {fThickness1 = thick;};
+// Set Stepping Parameters
+  virtual void   SetMaxStepQua(Float_t p1);
+  virtual void   SetMaxStepAlu(Float_t p1);
+  virtual void   SetMaxDestepQua(Float_t p1);
+  virtual void   SetMaxDestepAlu(Float_t p1);
+
+   Int_t         fNCerenkovs;    //  Number of cerenkovs (detected on photocathode)
+   Int_t         fNGCerenkovs;   //  Number of cerenkovs (generated)
+   Int_t         fMulti; // Multiplicity of charged particles
+
+   Float_t      fThickness;
+   Float_t      fThickness1;
+
+protected:
+
+   Int_t fIdSens1;
+  
+// Stepping Parameters
+   Float_t fMaxStepQua;      // Maximum step size inside the quartz volumes
+   Float_t fMaxStepAlu;      // Maximum step size inside the  aluminum volumes
+   Float_t fMaxDestepQua;    // Maximum relative energy loss in quartz
+   Float_t fMaxDestepAlu;    // Maximum relative energy loss in aluminum
+  
+  ClassDef(AliVZERO,1)  //Class for the VZERO detector
+};
+
+//____________________________________________________________
+
+#endif
diff --git a/VZERO/AliVZEROdigit.cxx b/VZERO/AliVZEROdigit.cxx
new file mode 100644 (file)
index 0000000..0094ce8
--- /dev/null
@@ -0,0 +1,41 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
+#include "AliVZERO.h"
+#include "AliVZEROdigit.h"
+#include "AliRun.h"
+ClassImp(AliVZEROdigit)
+
+AliVZEROdigit::AliVZEROdigit(Int_t* tracks, Int_t *digits):
+  AliDigit(tracks){
+  
+  //
+  // Creates VZERO digit
+  // The creator for the AliVZEROdigit class. This routine fills the
+  // AliVZEROdigit data members from the array digits. 
+  //
+  
+  fTrack      = tracks[0];
+  fEvent      = digits[0];
+  fMulti      = digits[1];
+  fNCerenkovs = digits[2];
+  
+}
+
+
+
+
+
diff --git a/VZERO/AliVZEROdigit.h b/VZERO/AliVZEROdigit.h
new file mode 100644 (file)
index 0000000..985da02
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef VZERODIGIT_H
+#define VZERODIGIT_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+#include "AliDigit.h"
+#include "AliVZERO.h"
+
+//___________________________________________
+class AliVZEROdigit: public AliDigit  {
+
+ public:
+    Int_t fEvent;         // Event number
+    Int_t fMulti;         // Multiplicity of charged particles
+    Int_t fTrack;
+    Int_t fNCerenkovs;
+ public:
+    AliVZEROdigit() {}
+    AliVZEROdigit(Int_t* tracks, Int_t* digits);
+    virtual ~AliVZEROdigit() {}
+
+    ClassDef(AliVZEROdigit,1)  //Digit (Header) object for set : VZERO
+};
+#endif
diff --git a/VZERO/AliVZEROhit.cxx b/VZERO/AliVZEROhit.cxx
new file mode 100644 (file)
index 0000000..49bd9dd
--- /dev/null
@@ -0,0 +1,50 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
+#include "AliVZEROhit.h"
+
+ClassImp(AliVZEROhit)
+//_____________________________________________________________________________
+AliVZEROhit::AliVZEROhit(Int_t shunt, Int_t track, Int_t* vol, Float_t* hits):
+  AliHit(shunt, track)
+{
+  //
+  // Add a VZERO hit
+  //
+  
+  fVolume          = vol[2];
+  fCopy            = vol[3];
+  fX              = hits[0];
+  fY               = hits[1];
+  fZ               = hits[2];
+  fXloc            = hits[3];
+  fYloc            = hits[4];
+  fZloc            = hits[5];
+  fEdep            = hits[6];
+  fEtot            = hits[7];
+  fTrackPiD        = hits[8];
+  fParticle        = hits[9];
+  fTof             = hits[10];
+  fIsTrackEntering = hits[11];
+  fIsTrackExiting  = hits[12];
+  fCharge          = hits[13];
+  fIsCerenkov      = hits[14];
+  fMulti           = hits[15];
+  fTheta           = hits[16];
+  fPhi             = hits[17];
+  fNGCerenkovs     = hits[18];
+}
diff --git a/VZERO/AliVZEROhit.h b/VZERO/AliVZEROhit.h
new file mode 100644 (file)
index 0000000..f056643
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef VZEROHIT_H
+#define VZEROHIT_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+////////////////////////////////////////////////
+//  Manager and hits classes for set : VZERO  //
+////////////////////////////////////////////////
+#include "AliDetector.h"
+#include "AliHit.h"
+#include "TObjArray.h"
+#include "TArrayF.h"
+#include "TMath.h"
+class AliVZEROhit : public AliHit {
+public:
+  AliVZEROhit() {}
+  AliVZEROhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
+  virtual ~AliVZEROhit() {}
+  inline Int_t GetVolume() {return fVolume;};
+  inline Int_t GetCopy() {return fCopy;};
+  inline Float_t GetX() {return fX;};
+  inline Float_t GetY() {return fY;};
+  inline Float_t GetZ() {return fZ;};
+  inline Float_t GetXloc() {return fXloc;};
+  inline Float_t GetYloc() {return fYloc;};
+  inline Float_t GetZloc() {return fZloc;};
+  inline Float_t GetEdep() {return fEdep;};
+  inline Float_t GetEtot() {return fEtot;};
+  inline Float_t GetTrackPiD() {return fTrackPiD;};
+  inline Float_t GetParticle() {return fParticle;};
+  inline Float_t GetTof() {return fTof;};
+  inline Float_t IsTrackEntering() {return fIsTrackEntering;};
+  inline Float_t IsTrackExiting() {return fIsTrackExiting;};
+  inline Float_t GetCharge() {return fCharge;};
+  inline Float_t IsCerenkov() {return fIsCerenkov;};
+  inline Float_t GetMultiplicity() {return fMulti;};
+  inline Float_t GetTheta() {return fTheta;};
+  inline Float_t GetPhi() {return fPhi;};
+  inline Float_t GetNGCerenkovs() {return fNGCerenkovs;};
+  
+public:
+  Int_t   fVolume;                // Current volume ID
+  Int_t   fCopy;                  // Copy number
+  Float_t fXloc;                  // x coordinate in STRT coord
+  Float_t fYloc;                  // y coordinate in STRT coord 
+  Float_t fZloc;                  // z coordinate in STRT coord 
+  Float_t fEdep;                  // Energy loss
+  Float_t fEtot;                  // Total energy of particle 
+  Float_t fTrackPiD;              // Root particle ID 
+  Float_t fParticle;              // Geant particle ID 
+  Float_t fTof;                   // Time of flight wrt vertex
+  Float_t fIsTrackEntering;       // Entrance flag
+  Float_t fIsTrackExiting;        // Exit flag
+  Float_t fCharge;                // Charge of particle
+  Float_t fIsCerenkov;            // Particle is a cerenkov photon
+  Float_t fMulti;                 // Multiplicity of entering charged particles
+  Float_t fTheta; 
+  Float_t fPhi;
+  Float_t fNGCerenkovs;
+    
+  ClassDef(AliVZEROhit,1)  //Hits for detector VZERO
+};
+#endif
diff --git a/VZERO/AliVZEROv0.cxx b/VZERO/AliVZEROv0.cxx
new file mode 100755 (executable)
index 0000000..d3671f1
--- /dev/null
@@ -0,0 +1,1458 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
+
+//////////////////////////////////////////////////////////////////////
+//                                                                  //
+//  (V-zero) detector  version 0  as designed by the Lyon group     //
+//   All comments should be sent to Brigitte CHEYNIS :              //
+//                                  b.cheynis@ipnl.in2p3.fr         // 
+//                                                                  //
+//////////////////////////////////////////////////////////////////////
+
+#include <TMath.h>
+#include <TGeometry.h>
+#include <TTRD2.h>
+#include <TCONE.h>
+#include <TPGON.h>
+#include <TPCON.h>
+#include <TSPHE.h>
+#include <TTRAP.h>
+#include <TBRIK.h>
+#include <TBox.h>
+
+#include <TShape.h>
+#include <TNode.h>
+#include <TClonesArray.h>
+#include <TH1.h>
+#include <string.h>
+#include <iostream.h>
+
+#include "AliVZEROv0.h"
+#include "AliRun.h"
+#include "AliMC.h"
+#include "AliVZEROhit.h"
+#include "AliVZEROdigit.h"
+#include <iostream.h>
+#include <fstream.h>
+
+#include <TGeant3.h>
+#include <stdlib.h>
+#include "TObjectTable.h"
+
+#include "AliConst.h"
+#include "ABSOSHILConst.h"
+#include "ABSOConst.h"
+
+ClassImp(AliVZEROv0)
+
+//--------------------------------------------------------------------
+AliVZEROv0:: AliVZEROv0():AliVZERO()
+{
+}
+//--------------------------------------------------------------------
+AliVZEROv0::AliVZEROv0(const char *name, const char *title):
+ AliVZERO(name,title)
+{
+
+// Standard constructor for V-zeroR Detector (right part)  version 0
+
+
+  Int_t i;
+
+  printf("\n");
+  for(i=0;i<35;i++) printf("*");
+  printf(" create VZERO object");
+  for(i=0;i<35;i++) printf("*");
+  printf("\n");
+  
+}
+//-------------------------------------------------------------------------
+void AliVZEROv0::CreateGeometry()
+{
+
+// Creates the Geant geometry of the V-zeroR Detector (right part) 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("*");
+  printf("\n");
+    
+  
+  Int_t    *idtmed = fIdtmed->GetArray()-2999;
+
+  Int_t    n_detec = 1;
+  Int_t    n_cells = 1;
+
+  Int_t    idrotm[999];
+  Float_t  height1, height2, height3, height4, height5; 
+  Float_t  height;
+  Float_t  theta;  
+  Float_t  half_thick_alu;
+  Float_t  half_thick_qua1,half_thick_qua2,half_thick_qua3;
+  Float_t  half_thick_qua4,half_thick_qua5;
+  Float_t  zdet;
+  Float_t  r0, r5;
+  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
+  
+  theta             = pi/12.0/2.0;       // half angular opening = 7.5 degrees
+  half_thick_alu    = 0.0025;            // half thickness of aluminum foil, in cm
+  thick_alu         = 2.0 * half_thick_alu; 
+  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;
+  half_thick_qua4   = half_thick_qua3  - 0.25;
+  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
+  height            =    height1 + height2 + height3 + height4 + height5;
+  r5                =    r0 + height;
+
+
+// Creation of mother volume V0RI :
+
+  Float_t   partube[3];
+  
+  partube[0] = r0 - 0.2;
+  partube[1] = (r5 + 1.0) / TMath::Cos(theta);
+  partube[2] = fThickness/2.0; 
+  
+    
+  gMC->Gsvolu("V0RI","TUBE",idtmed[3010],partube,3);
+  
+// Creation of  carbon lids (1 mm thick) to keep V0RI box shut...
+
+  Float_t   parbox[10];
+  
+  parbox[0] =    0.;
+  parbox[1] =  360.;
+  parbox[2] =    24;
+  parbox[3] =     2;
+  parbox[4] =  -0.1/2.0;
+  parbox[5] =  r0;
+  parbox[6] =  r5;     
+  parbox[7] =  +0.1/2.0;
+  parbox[8] =  r0;
+  parbox[9] =  r5;  
+  
+  
+  gMC->Gsvolu("V0CA","PGON",idtmed[3001],parbox,10); 
+  gMC->Gspos("V0CA",1,"V0RI",0.0,0.0, fThickness/2.0-parbox[7],0,"ONLY");
+  gMC->Gspos("V0CA",2,"V0RI",0.0,0.0,-fThickness/2.0+parbox[7],0,"ONLY");
+  
+// Creation of aluminum rings to maintain the V0RI pieces ...
+
+  parbox[4] =  -fThickness/2.0;
+  parbox[5] =  r0 -0.2;
+  parbox[6] =  r0;     
+  parbox[7] =  +fThickness/2.0;
+  parbox[8] =  r0 -0.2;
+  parbox[9] =  r0; 
+  
+  gMC->Gsvolu("V0IR","PGON",idtmed[3003],parbox,10);    
+  gMC->Gspos("V0IR",1,"V0RI",0.0,0.0,0.0,0,"ONLY");
+  
+  parbox[4] =  -fThickness/2.0;
+  parbox[5] =  r5;
+  parbox[6] =  r5 + 1.0;     
+  parbox[7] =  +fThickness/2.0;
+  parbox[8] =  r5;
+  parbox[9] =  r5 + 1.0; 
+  gMC->Gsvolu("V0ER","PGON",idtmed[3003],parbox,10);    
+  gMC->Gspos("V0ER",1,"V0RI",0.0,0.0,0.0,0,"ONLY");
+  
+// Mother volume V0R0 in which will be set 5  quartz cells 
+// each one  WRAPPED in reflecting aluminum : 
+  
+  Float_t   dist0; 
+  Float_t   par[11];   
+    
+  dist0     =  r0 + height / 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 / 2.0 ;
+  par[4]    =  TMath::Tan(theta) * r0;
+  par[5]    =  TMath::Tan(theta) * r5;
+  par[6]    =  0.0;
+  par[7]    =  height / 2.0 ;
+  par[8]    =  TMath::Tan(theta) * r0;
+  par[9]    =  TMath::Tan(theta) * r5;
+  par[10]   =  0.0;
+
+
+  gMC->Gsvolu("V0R0","TRAP",idtmed[3010],par,11);  // air volume
+
+// Elementary cell of ring 1 :
+  Float_t   dist1;
+  Float_t   r1;
+  Float_t   offset;
+     
+  dist1     =  (- height + height1) /2.0; 
+  r1        =  r0 + height1;
+  offset    = - fThickness/2.0 + 0.1; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;
+  par[3]    =  height1 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r0 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r1- thick_alu;
+  par[7]    =  height1 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r0 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r1 - thick_alu;
+
+
+  gMC->Gsvolu("V0R1","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0R1",1,"V0R0", 0.0, dist1 , 0.0, 0,"ONLY");
+  
+  par[0]    =  half_thick_alu;
+
+  gMC->Gsvolu("V0A1","TRAP",idtmed[3004],par,11);  // aluminum trap-shaped foil
+  gMC->Gspos("V0A1",1,"V0R1",0.0,0.0, - half_thick_qua1 + half_thick_alu,0,"ONLY");  
+  gMC->Gspos("V0A1",2,"V0R1",0.0,0.0, + half_thick_qua1 - half_thick_alu,0,"ONLY");  
+
+  parbox[0] = half_thick_alu;
+  parbox[1] = height1 / TMath::Cos(theta)/ 2.0;
+  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 h1;
+  h1 = TMath::Tan(theta) * (r0 + height1/2.0);  
+  AliMatrix(idrotm[911],90.0,+theta_deg,90.0,90.+theta_deg,0.0,0.);  
+  gMC->Gspos("V0A2",1,"V0R1",-h1 + half_thick_alu,0.0,0.0,idrotm[911],"ONLY"); 
+  AliMatrix(idrotm[912],90.0,-theta_deg,90.0,90.-theta_deg,0.0,0.);  
+  gMC->Gspos("V0A2",2,"V0R1",+h1 - half_thick_alu,0.0,0.0,idrotm[912],"ONLY"); 
+
+  parbox[0] = TMath::Tan(theta) * r0;
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua1;
+  gMC->Gsvolu("V0A3","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0A3",1,"V0R1",0.0, - (height1/2.0) + half_thick_alu ,0.0,0,"ONLY");
+    
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua1;
+  gMC->Gsvolu("V0A4","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0A4",1,"V0R1",0.0, (height1/2.0) - half_thick_alu,0.0,0,"ONLY");
+
+  
+//  Elementary cell of ring 2 : 
+  Float_t   dist2;
+  Float_t   r2; 
+    
+  dist2     =    (- height + height2) /2.0 + height1;
+  r2        =       r1 + height2; 
+  
+  par[0]    =  half_thick_qua2 - thick_alu;   
+  par[3]    =  height2 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r1 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[7]    =  height2 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r1 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r2 - thick_alu;
+
+  gMC->Gsvolu("V0R2","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0R2",1,"V0R0", 0.0, dist2 , - half_thick_qua1 + half_thick_qua2, 0,"ONLY");
+
+  par[0]    =  half_thick_alu;
+
+  gMC->Gsvolu("V0B1","TRAP",idtmed[3004],par,11);  // aluminum trap-shaped foil
+  gMC->Gspos("V0B1",1,"V0R2",0.0,0.0, - half_thick_qua2 + half_thick_alu,0,"ONLY");  
+  gMC->Gspos("V0B1",2,"V0R2",0.0,0.0, + half_thick_qua2 - half_thick_alu,0,"ONLY");  
+
+  parbox[0] = half_thick_alu;
+  parbox[1] = height2 / TMath::Cos(theta)/ 2.0;
+  parbox[2] = half_thick_qua2;
+  
+  gMC->Gsvolu("V0B2","BOX",idtmed[3004],parbox,3);   // aluminum rectangular foil
+  Float_t h2;
+  h2 = TMath::Tan(theta) * (r0  + height1 + height2/2.0);  
+  gMC->Gspos("V0B2",1,"V0R2",-h2 + half_thick_alu,0.0,0.0,idrotm[911],"ONLY"); 
+  gMC->Gspos("V0B2",2,"V0R2",+h2 - half_thick_alu,0.0,0.0,idrotm[912],"ONLY"); 
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua2;
+  gMC->Gsvolu("V0B3","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0B3",1,"V0R2",0.0, - (height2/2.0) + half_thick_alu ,0.0,0,"ONLY");
+    
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 +  height2);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua2;
+  gMC->Gsvolu("V0B4","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0B4",1,"V0R2",0.0, (height2/2.0) - half_thick_alu,0.0,0,"ONLY");
+  
+
+// Elementary cell  ring 3 :   
+  
+  Float_t   dist3;
+  Float_t   r3; 
+    
+  dist3     =    (- height + height3) /2.0 + height1 + height2;
+  r3        =       r2 + height3; 
+   
+  par[0]    =  half_thick_qua3 - thick_alu;   
+  par[3]    =  height3 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[7]    =  height3 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r3 - thick_alu;
+
+  gMC->Gsvolu("V0R3","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0R3",1,"V0R0", 0.0, dist3 , - half_thick_qua1 +  half_thick_qua3, 0,"ONLY");
+
+
+  par[0]    =  half_thick_alu;
+
+  gMC->Gsvolu("V0C1","TRAP",idtmed[3004],par,11);  // aluminum trap-shaped foil
+  gMC->Gspos("V0C1",1,"V0R3",0.0,0.0, - half_thick_qua3 + half_thick_alu,0,"ONLY");  
+  gMC->Gspos("V0C1",2,"V0R3",0.0,0.0, + half_thick_qua3 - half_thick_alu,0,"ONLY");  
+
+  parbox[0] = half_thick_alu;
+  parbox[1] = height3 / TMath::Cos(theta)/ 2.0;
+  parbox[2] = half_thick_qua3;
+  
+  gMC->Gsvolu("V0C2","BOX",idtmed[3004],parbox,3);   // aluminum rectangular foil
+  Float_t h3;
+  h3 = TMath::Tan(theta) * (r0  + height1 + height2 + height3/2.0);  
+  gMC->Gspos("V0C2",1,"V0R3",-h3 + half_thick_alu,0.0,0.0,idrotm[911],"ONLY"); 
+  gMC->Gspos("V0C2",2,"V0R3",+h3 - half_thick_alu,0.0,0.0,idrotm[912],"ONLY"); 
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 + height2);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua3;
+  gMC->Gsvolu("V0C3","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0C3",1,"V0R3",0.0, - (height3/2.0) + half_thick_alu ,0.0,0,"ONLY");
+    
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 + height2 + height3);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua3;
+  gMC->Gsvolu("V0C4","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0C4",1,"V0R3",0.0, (height3/2.0) - half_thick_alu,0.0,0,"ONLY");
+
+
+// Elementary cell  ring 4 :  
+
+  Float_t   dist4;
+  Float_t   r4; 
+    
+  dist4     =    (- height + height4) /2.0 + height1 + height2 + height3;
+  r4        =       r3 + height4; 
+   
+  par[0]    =  half_thick_qua4 - thick_alu;   
+  par[3]    =  height4 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[7]    =  height4 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r4 - thick_alu;
+
+  gMC->Gsvolu("V0R4","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0R4",1,"V0R0", 0.0, dist4 , - half_thick_qua1 + half_thick_qua4, 0,"ONLY"); 
+
+
+  par[0]    =  half_thick_alu;
+
+  gMC->Gsvolu("V0D1","TRAP",idtmed[3004],par,11);  // aluminum trap-shaped foil
+  gMC->Gspos("V0D1",1,"V0R4",0.0,0.0, - half_thick_qua4 + half_thick_alu,0,"ONLY");  
+  gMC->Gspos("V0D1",2,"V0R4",0.0,0.0, + half_thick_qua4 - half_thick_alu,0,"ONLY");  
+
+  parbox[0] = half_thick_alu;
+  parbox[1] = height4 / TMath::Cos(theta)/ 2.0;
+  parbox[2] = half_thick_qua4;
+  
+  gMC->Gsvolu("V0D2","BOX",idtmed[3004],parbox,3);   // aluminum rectangular foil
+  Float_t h4;
+  h4 = TMath::Tan(theta) * (r0  + height1 + height2 + height3 + height4/2.0);  
+  gMC->Gspos("V0D2",1,"V0R4",-h4 + half_thick_alu,0.0,0.0,idrotm[911],"ONLY"); 
+  gMC->Gspos("V0D2",2,"V0R4",+h4 - half_thick_alu,0.0,0.0,idrotm[912],"ONLY"); 
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 + height2 + height3);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua4;
+  gMC->Gsvolu("V0D3","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0D3",1,"V0R4",0.0, - (height4/2.0) + half_thick_alu ,0.0,0,"ONLY");
+    
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 + height2 + height3 + height4);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua4;
+  gMC->Gsvolu("V0D4","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0D4",1,"V0R4",0.0, (height4/2.0) - half_thick_alu,0.0,0,"ONLY");
+
+
+// Elementary cell  ring 5 :  
+
+  Float_t   dist5;
+      
+  dist5     =    (- height + height5) /2.0 + height1 + height2 + height3 + height4;
+  
+  par[0]    =  half_thick_qua5 - thick_alu;      
+  par[3]    =  height5 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r5 - thick_alu;
+  par[7]    =  height5 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r5 - thick_alu;
+
+  gMC->Gsvolu("V0R5","TRAP",idtmed[3002],par,11);  // quartz volume
+  gMC->Gspos("V0R5",1,"V0R0", 0.0, dist5 , - half_thick_qua1 +  half_thick_qua5, 0,"ONLY"); 
+
+
+  par[0]    =  half_thick_alu;
+
+  gMC->Gsvolu("V0E1","TRAP",idtmed[3004],par,11);  // aluminum trap-shaped foil
+  gMC->Gspos("V0E1",1,"V0R5",0.0,0.0, - half_thick_qua5 + half_thick_alu,0,"ONLY");  
+  gMC->Gspos("V0E1",2,"V0R5",0.0,0.0, + half_thick_qua5 - half_thick_alu,0,"ONLY");  
+
+  parbox[0] = half_thick_alu;
+  parbox[1] = height5 / TMath::Cos(theta)/ 2.0;
+  parbox[2] = half_thick_qua5;
+  
+  gMC->Gsvolu("V0E2","BOX",idtmed[3004],parbox,3);   // aluminum rectangular foil
+  Float_t h5;
+  h5 = TMath::Tan(theta) * (r0  + height1 + height2 + height3 + height4 + height5/2.0);  
+  gMC->Gspos("V0E2",1,"V0R5",-h5 + half_thick_alu,0.0,0.0,idrotm[911],"ONLY"); 
+  gMC->Gspos("V0E2",2,"V0R5",+h5 - half_thick_alu,0.0,0.0,idrotm[912],"ONLY"); 
+
+  parbox[0] = TMath::Tan(theta) * (r0 + height1 + height2 + height3 + height4);
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua5;
+  gMC->Gsvolu("V0E3","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0E3",1,"V0R5",0.0, - (height5/2.0) + half_thick_alu ,0.0,0,"ONLY");
+    
+
+  parbox[0] = TMath::Tan(theta) * r5;
+  parbox[1] = half_thick_alu;
+  parbox[2] = half_thick_qua5;
+  gMC->Gsvolu("V0E4","BOX",idtmed[3004],parbox,3);
+  gMC->Gspos("V0E4",1,"V0R5",0.0, (height5/2.0) - half_thick_alu,0.0,0,"ONLY");
+
+
+  Float_t  phi_rad ;  
+  Float_t  phi_deg = 180./12.; 
+
+  
+  for(Float_t  phi = 7.5; 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),
+                         dist0*TMath::Cos(phi_rad),offset + half_thick_qua1,idrotm[902],"ONLY");
+       n_detec++;
+       }
+
+
+  gMC->Gspos("V0RI",1,"alic",0.0,0.0,zdet,0,"ONLY");
+  n_cells = (n_detec - 1) * 5;
+  printf(" \n\n\n"); 
+  printf(" Number of cells =   %d\n\n",  n_cells);    
+         
+}
+    
+    
+//_____________________________________________________________________________
+void AliVZEROv0::BuildGeometry()
+{
+  
+  // Builds simple ROOT TNode geometry for event display
+  
+  
+  Int_t i;
+
+  printf("\n");
+  for(i=0;i<35;i++) printf("*");
+  printf(" VZERO BuildGeometry ");
+  for(i=0;i<35;i++) printf("*");
+  printf("\n");
+  
+  TNode *Top, *Node0, *Node1, *Node2;
+  TNode *Node3, *Node4 , *Node5, *Node6 , *Node7;
+  TNode *V0Rnode, *V0Rnode0, *V0Rnode6 , *V0Rnode7, *V0Rnode8, *V0Rnode9;
+  TNode *V0Rnode1, *V0Rnode2, *V0Rnode3, *V0Rnode4, *V0Rnode5;
+  const int kColorVZERO  = kGreen;
+  
+  Top = gAlice->GetGeometry()->GetNode("alice");
+
+  Float_t  height1, height2, height3, height4, height5; 
+  Float_t  height;
+  Float_t  theta;  
+  Float_t  half_thick_alu;
+  Float_t  half_thick_qua1,half_thick_qua2,half_thick_qua3;
+  Float_t  half_thick_qua4,half_thick_qua5;
+  Float_t  zdet;
+  Float_t  r0, r5;
+  Float_t  pi = TMath::Pi();
+  Float_t  thick_alu;
+  
+  height1           =     2.3;         
+  height2           =     3.7; 
+  height3           =     6.2;
+  height4           =    10.5;
+  height5           =    10.5;
+  
+  theta             = pi/12.0/2.0;    
+  half_thick_alu    = 0.0025;        
+  thick_alu         = 2.0 * half_thick_alu; 
+  half_thick_qua1   = fThickness1/2.0; 
+  half_thick_qua2   = half_thick_qua1  - 0.25;
+  half_thick_qua3   = half_thick_qua2  - 0.25;
+  half_thick_qua4   = half_thick_qua3  - 0.25;
+  half_thick_qua5   = half_thick_qua4  - 0.25;
+  
+  zdet              =    86.9 +fThickness/2.0;   
+  r0                =    3.4;         
+  height            =    height1 + height2 + height3 + height4 + height5;
+  r5                =    r0 + height;
+
+  Float_t   partube[3];
+
+  partube[0] =  r0 - 0.2;
+  partube[1] = (r5 + 1.0) / TMath::Cos(theta);
+  partube[2] = fThickness/2.0;   
+  
+  TTUBE *V0RI = new TTUBE("V0RI", "V0RI", "void", partube[0], partube[1], partube[2]);
+               
+  Top->cd();
+  
+  V0Rnode = new TNode("V0RI","V0RI",V0RI,0.0,0.0,+zdet,0);
+  
+  V0Rnode->SetLineColor(kBlue);
+  fNodes->Add(V0Rnode);
+  
+  V0Rnode->SetVisibility(2);
+        
+// Rondelles de carbone (epaisseur 1 mm) de maintien des cellules ...
+
+  Float_t   parbox[10];
+  parbox[0] =    0.;
+  parbox[1] =  360.;
+  parbox[2] =    24;
+  parbox[3] =     2;
+  parbox[4] =  -0.1/2.0;
+  parbox[5] =  r0;
+  parbox[6] =  r5;     
+  parbox[7] =  +0.1/2.0;
+  parbox[8] =  r0;
+  parbox[9] =  r5;  
+  
+  
+  TPGON *V0CA = new TPGON("V0CA", "V0CA", "void",parbox[0], parbox[1],
+                            parbox[2],parbox[3]);
+                           
+  V0CA->DefineSection( 0, parbox[4], parbox[5], parbox[6] );
+  V0CA->DefineSection( 1, parbox[7], parbox[8], parbox[9] ); 
+   
+  V0Rnode->cd();
+  V0Rnode6 = new TNode("V0CA", "V0CA",V0CA,0.0,0.0, fThickness/2.0-parbox[7],0);        
+  V0Rnode6->SetLineColor(kYellow);
+  fNodes->Add(V0Rnode6); 
+  V0Rnode->cd();
+  V0Rnode7 = new TNode("V0CA", "V0CA",V0CA,0.0,0.0,-fThickness/2.0+parbox[7],0);        
+  V0Rnode7->SetLineColor(kYellow);
+  fNodes->Add(V0Rnode7);
+  
+  parbox[4] =  -fThickness/2.0;
+  parbox[5] =  r0 - 0.2;
+  parbox[6] =  r0;     
+  parbox[7] =  +fThickness/2.0;
+  parbox[8] =  r0 - 0.2;
+  parbox[9] =  r0; 
+
+  TPGON  *V0IR = new TPGON("V0IR","V0IR","void",  parbox[0], parbox[1],
+                            parbox[2],parbox[3]);
+  V0IR->DefineSection( 0, parbox[4], parbox[5], parbox[6] );
+  V0IR->DefineSection( 1, parbox[7], parbox[8], parbox[9] );
+  
+  V0Rnode->cd();
+  V0Rnode8 = new TNode("V0IR", "V0IR",V0IR,0.0,0.0,0.0,0);
+  V0Rnode8->SetLineColor(kYellow);
+  fNodes->Add(V0Rnode8);
+  parbox[4] =  -fThickness/2.0;
+  parbox[5] =  r5;
+  parbox[6] =  r5 + 1.0;     
+  parbox[7] =  +fThickness/2.0;
+  parbox[8] =  r5;
+  parbox[9] =  r5 + 1.0; 
+
+  TPGON  *V0ER = new TPGON("V0ER","V0ER","void",  parbox[0], parbox[1],
+                            parbox[2],parbox[3]);
+  V0ER->DefineSection( 0, parbox[4], parbox[5], parbox[6] );
+  V0ER->DefineSection( 1, parbox[7], parbox[8], parbox[9] );
+  
+  V0Rnode->cd();
+  V0Rnode9 = new TNode("V0ER", "V0ER",V0ER,0.0,0.0,0.0,0);
+  V0Rnode9->SetLineColor(kYellow);
+  fNodes->Add(V0Rnode9);
+
+  Float_t   dist0; 
+  Float_t   par[11];   
+    
+  dist0     =  r0 + height / 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 / 2.0 ;
+  par[4]    =  TMath::Tan(theta) * r0;
+  par[5]    =  TMath::Tan(theta) * r5;
+  par[6]    =  0.0;
+  par[7]    =  height / 2.0 ;
+  par[8]    =  TMath::Tan(theta) * r0;
+  par[9]    =  TMath::Tan(theta) * r5;
+  par[10]   =  0.0;
+    
+  TTRAP *V0R0 = new TTRAP("V0R0", "V0R0", "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;
+  Float_t   r1;
+  Float_t   offset; 
+    
+  dist1     =  (- height + height1) /2.0; 
+  r1        =  r0 + height1;
+  offset    = - fThickness/2.0 + 0.1; 
+   
+  par[0]    =  half_thick_qua1 - thick_alu;
+  par[3]    =  height1 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r0 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r1- thick_alu;
+  par[7]    =  height1 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r0 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r1 - thick_alu;
+  
+  TTRAP *V0R1 = new TTRAP("V0R1", "V0R1", "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   dist2;
+  Float_t   r2; 
+    
+  dist2     =    (- height + height2) /2.0 + height1;
+  r2        =       r1 + height2; 
+  
+  par[0]    =  half_thick_qua2 - thick_alu;   
+  par[3]    =  height2 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r1 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[7]    =  height2 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r1 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r2 - thick_alu;
+
+
+  TTRAP *V0R2 = new TTRAP("V0R2", "V0R2", "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   dist3;
+  Float_t   r3; 
+    
+  dist3     =    (- height + height3) /2.0 + height1 + height2;
+  r3        =       r2 + height3; 
+   
+  par[0]    =  half_thick_qua3 - thick_alu;   
+  par[3]    =  height3 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[7]    =  height3 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r2 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r3 - thick_alu;
+
+
+  TTRAP *V0R3 = new TTRAP("V0R3", "V0R3", "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;
+  Float_t   r4; 
+    
+  dist4     =    (- height + height4) /2.0 + height1 + height2 + height3;
+  r4        =       r3 + height4; 
+   
+  par[0]    =  half_thick_qua4 - thick_alu;   
+  par[3]    =  height4 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[7]    =  height4 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r3 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r4 - thick_alu;
+
+
+  TTRAP *V0R4 = new TTRAP("V0R4", "V0R4", "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   dist5;
+    
+  dist5     =    (- height + height5) /2.0 + height1 + height2 + height3 + height4;
+  
+  par[0]    =  half_thick_qua5 - thick_alu;      
+  par[3]    =  height5 / 2.0 - thick_alu;
+  par[4]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[5]    =  TMath::Tan(theta) * r5 - thick_alu;
+  par[7]    =  height5 / 2.0 - thick_alu;
+  par[8]    =  TMath::Tan(theta) * r4 - thick_alu;
+  par[9]    =  TMath::Tan(theta) * r5 - thick_alu;
+
+
+  TTRAP *V0R5 = new TTRAP("V0R5", "V0R5", "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  phi;
+  Float_t  phi_deg= 180./12.;
+  Float_t  phi_rad;
+  Float_t  xdet,ydet;
+  Int_t    n_detec = 1; 
+  char     NameNode[12];  
+
+  for (phi = 7.5; phi < 360.0; phi = phi + phi_deg) 
+  {
+     
+    TRotMatrix* mat920 = new TRotMatrix("rot920","rot920", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );        
+    
+    phi_rad = phi*pi/180.;
+    xdet = dist0*TMath::Sin(phi_rad);
+    ydet = dist0*TMath::Cos(phi_rad);
+    
+  
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    
+    V0Rnode->cd();
+    V0Rnode0 = new TNode(NameNode,NameNode,V0R0,-xdet,ydet, offset + half_thick_qua1,mat920);   
+    V0Rnode0->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Rnode0);
+    n_detec++;
+    
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    V0Rnode0->cd();    
+    V0Rnode1 = new TNode(NameNode,NameNode,V0R1,0.0,dist1, 0.0,0);      
+    V0Rnode1->SetLineColor(kColorVZERO);
+    fNodes->Add(V0Rnode1);
+    n_detec++;
+    
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    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++;
+
+
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    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++;
+
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    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++;
+     
+    sprintf(NameNode,"SUBDET%d",n_detec);
+    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++;
+       
+    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();
+  
+    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;    
+
+    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();
+  
+    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()  :
+
+    Float_t parp[36];
+    
+//  Mother Volume QBPM :
+
+    parp[0]  =    0;
+    parp[1]  =  360;
+    parp[2]  =   11;
+    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;
+
+    parp[21] =   28.00;
+    parp[22] =    0;
+    parp[23] =    3.2;
+
+    parp[24] =   28.00;
+    parp[25] =    0;
+    parp[26] =    4.22;
+
+    parp[27] =  250;
+    parp[28] =    0;
+    parp[29] =   4.22;
+
+    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]);
+     
+    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; 
+    
+    TTUBE *pip1 = new TTUBE("pip1", "pip1", "void", ptube[0], ptube[1], ptube[2]);  
+     
+    Node3->cd();
+       
+    
+    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;
+
+  printf("\n");
+  for(i=0;i<35;i++) printf("*");
+  printf(" VZERO create materials ");
+  for(i=0;i<35;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 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 };
+                                
+    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 };  
+                                                                                       
+    Float_t effic_all[14]   = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. };
+    
+        
+    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;
+    
+    TGeant3 *geant3 = (TGeant3*) gMC;
+    
+//  Parameters related to Quarz (SiO2) :
+    Float_t aqua[2], zqua[2], densqua, wmatqua[2];
+    Int_t nlmatqua;
+    
+    aqua[0]    = 28.09;
+    aqua[1]    = 16.;
+    zqua[0]    = 14.;
+    zqua[1]    = 8.;
+    densqua    = 2.64;
+    nlmatqua   = -2;
+    wmatqua[0] = 1.;
+    wmatqua[1] = 2.;
+
+// Parameters  related to aluminum sheets :
+    
+    Float_t  aal   = 26.98;
+    Float_t  zal   = 13.00; 
+    Float_t  densal=   2.7; 
+    Float_t  radlal=   8.9;
+       
+// Parameters  related to scintillator CH :
+    
+    Float_t ascin[2] = {1.01,12.01};
+    Float_t zscin[2] = {1,6};
+    Float_t wscin[2] = {1,1};
+    Float_t denscin  = 1.03;
+    
+//  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);
+    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);
+    
+    
+    AliMixture( 6, "Scintillator$",ascin,zscin,denscin,-2,wscin);
+    
+     
+    Int_t   ISXFLD = gAlice->Field()->Integ();
+    Float_t SXMGMX = gAlice->Field()->Max();
+    
+    Float_t tmaxfd, stemax, deemax, epsil, stmin;
+    
+    tmaxfd = -10.;
+    stemax = -0.1;
+    deemax = -0.1;
+    epsil  = -0.01;
+    stmin  = -0.001;
+    
+
+//  Active Air :    
+    AliMedium(1, "ACTIVE AIR$", 1, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
+
+//  Inactive air : 
+  
+    AliMedium(11, "INACTIVE AIR$", 11, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
+    
+    AliMedium(2, "CARBON$ ", 2,  1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);   
+
+    AliMedium(3, "QUARZ$", 3, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepQua, fMaxDestepQua, epsil, stmin);
+    
+    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);
+
+    gMC->Gstpar(idtmed[3000], "LOSS", 1.);  //  [3000] = air ACTIF  [3010] = air INACTIF
+    gMC->Gstpar(idtmed[3000], "HADR", 1.);
+    gMC->Gstpar(idtmed[3000], "DCAY", 1.);
+    gMC->Gstpar(idtmed[3000], "DRAY", 1.);
+    
+    gMC->Gstpar(idtmed[3001], "LOSS", 1.);  //  [3001] = carbon
+    gMC->Gstpar(idtmed[3001], "HADR", 1.);
+    gMC->Gstpar(idtmed[3001], "DCAY", 1.);
+    gMC->Gstpar(idtmed[3001], "DRAY", 1.);
+
+    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[3003], "LOSS", 1.);  //  [3003] = normal aluminum
+    gMC->Gstpar(idtmed[3003], "HADR", 1.);
+    gMC->Gstpar(idtmed[3003], "DCAY", 1.);
+    gMC->Gstpar(idtmed[3003], "DRAY", 1.);
+    
+    gMC->Gstpar(idtmed[3004], "LOSS", 1.);  //  [3004] = reflecting aluminum
+    gMC->Gstpar(idtmed[3004], "HADR", 1.);
+    gMC->Gstpar(idtmed[3004], "DCAY", 1.);
+    gMC->Gstpar(idtmed[3004], "DRAY", 1.);
+    
+    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);
+
+}
+//---------------------------------------------------------------------
+void AliVZEROv0::DrawModule()
+{
+
+//  Drawing is done in DrawVZERO.C
+
+   Int_t i;
+
+   printf("\n");
+   for(i=0;i<35;i++) printf("*");
+   printf(" VZERO DrawModule ");
+   for(i=0;i<35;i++) printf("*");
+   printf("\n");
+
+
+}
+
+//-------------------------------------------------------------------
+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();
+   
+}
+
+//-------------------------------------------------------------------
+
+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...
+     
+     TLorentzVector pos;
+     Float_t        global[3];
+     Float_t        local[3];
+     
+     TLorentzVector momentum;
+     Float_t        theta;
+     Float_t        phi;
+     Float_t        mom[4];
+     Float_t        kRaddeg = 180/TMath::Pi();
+     
+     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);
+     
+     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;  
+     
+     hits[16]  = theta;
+     hits[17]  = phi; 
+   
+     vol[0]    = gMC->CurrentVolOffID(1, vol[1]);
+     vol[2]    = gMC->CurrentVolID(copy);
+     vol[3]    = copy;
+
+
+     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);
+
+}
+
+//---------------------------------------------------------------------
+void AliVZEROv0::FinishEvent()
+{
+   
+   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); 
+
+     fMulti       = 0;
+     fNCerenkovs  = 0;
+     fNGCerenkovs = 0;
+     fNdead       = 0;
+     
+}
+
+//---------------------------------------------------------------------
+void AliVZEROv0::AddDigit(Int_t *tracks, Int_t* digits) 
+{
+
+   TClonesArray  &ldigits = *fDigits;
+
+   new(ldigits[fNdigits++]) AliVZEROdigit(tracks, digits);
+
+}
+
+
+//---------------------------------------------------------------------
+void AliVZEROv0::MakeBranch(Option_t *option)
+{
+  
+  // Creates new branches in the current Root Tree
+  
+  
+  char branchname[10];
+  sprintf(branchname,"%s",GetName());
+  
+  
+  char *H = strstr(option,"H");
+  
+  if (fHits   && gAlice->TreeH() && H) {
+    gAlice->TreeH()->Branch(branchname,&fHits, fBufferSize);
+    printf("* AliDetector::MakeBranch * Making Branch %s for hits\n",branchname);
+  }     
+
+  char *D = strstr(option,"D");
+  //
+  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();   
+}
diff --git a/VZERO/AliVZEROv0.h b/VZERO/AliVZEROv0.h
new file mode 100755 (executable)
index 0000000..bb12f34
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef VZEROv0_H
+#define VZEROv0_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+///////////////////////////////////////////////////
+//  Manager and hits classes for set : VZERO     //
+///////////////////////////////////////////////////
+#include "AliVZERO.h"
+#include "TFile.h"
+#include "TH1.h"
+
+class AliVZEROv0 : public AliVZERO {
+  
+public:
+  AliVZEROv0();
+  AliVZEROv0(const char *name, const char *title);
+  virtual       ~AliVZEROv0() {}
+  virtual void   AddHit(Int_t, Int_t*, Float_t*);
+  virtual void   AddDigit(Int_t*, Int_t*);
+  virtual void   FinishEvent();
+  virtual void   CreateGeometry();
+  virtual void   BuildGeometry();
+  virtual void   CreateMaterials();
+  virtual void   DrawModule();
+  virtual void   Init();
+  virtual Int_t  IsVersion() const {return 7;}
+  virtual void   StepManager();
+  virtual void   MakeBranch(Option_t* option);
+  virtual void   BookingHistograms();
+  virtual void   SavingHistograms();
+  virtual void   FinishRun();
+public:
+   Int_t         fIdSens1;      // Sensitive volume  in VZERO
+   Int_t         digits[3];  
+   Int_t         tracks[5];   
+   Int_t         fNdead; 
+   
+private:
+    TFile*       fRootFile; 
+    TH1F *       fhMultiplicity;   // Histo of charged particle multiplicity
+    TH1F *       fhGEANTcode;      // Histo of particle GEANT code
+    TH1F *       fhCerenkov;       // Histo of Cerenkov photons        
+    TH1F *       fhToF;            // Histo of charged particles ToF 
+     
+  ClassDef(AliVZEROv0,1)  //Class for VZERO version 0
+};
+
+#endif
+
+
diff --git a/VZERO/DrawVZERO.C b/VZERO/DrawVZERO.C
new file mode 100755 (executable)
index 0000000..64e094d
--- /dev/null
@@ -0,0 +1,21 @@
+void DrawVZERO()
+
+{
+   gMC->Gsatt("*", "seen", -1);
+   gMC->Gsatt("alic", "seen", 0);
+   gROOT->LoadMacro("ViewVZERO.C");
+   gInterpreter->ProcessLine("ViewVZERO()");
+   gMC->Gdopt("hide", "off");
+   gMC->Gdopt("shad", "off");
+   gMC->Gsatt("*", "fill", 7);
+   gMC->SetClipBox(".");
+   gMC->DefaultRange();
+
+   gMC->Gdraw("alic", 0, 0, 0, 10, 10, 0.2, 0.2);
+
+//    gMC->Gdraw("alic", 90, 0, 0, 90, 9, 0.92, 0.2 );
+   
+    gMC->Gdhead(1111, "VZERO Detector");
+
+
+}
diff --git a/VZERO/Fileout b/VZERO/Fileout
new file mode 100644 (file)
index 0000000..957834f
Binary files /dev/null and b/VZERO/Fileout differ
diff --git a/VZERO/Makefile b/VZERO/Makefile
new file mode 100644 (file)
index 0000000..1aa3519
--- /dev/null
@@ -0,0 +1,81 @@
+###############################VZERO Makefile##################################
+
+# Include machine specific definitions
+
+include $(ALICE_ROOT)/conf/GeneralDef
+include $(ALICE_ROOT)/conf/MachineDef.$(ALICE_TARGET)
+
+PACKAGE = VZERO
+
+# C++ sources
+
+SRCS          = AliVZERO.cxx AliVZEROv0.cxx AliVZEROhit.cxx AliVZEROdigit.cxx
+
+# C++ Headers
+
+HDRS          = $(SRCS:.cxx=.h) VZEROLinkDef.h
+
+# Library dictionary
+
+DICT          = VZEROCint.cxx
+DICTH         = $(DICT:.cxx=.h)
+DICTO         = $(patsubst %.cxx,tgt_$(ALICE_TARGET)/%.o,$(DICT))
+
+# FORTRAN Objectrs
+
+FOBJS         = $(patsubst %.F,tgt_$(ALICE_TARGET)/%.o,$(FSRCS))
+
+# C Objects
+
+COBJS         = $(patsubst %.c,tgt_$(ALICE_TARGET)/%.o,$(CSRCS))
+
+# C++ Objects
+
+OBJS          = $(patsubst %.cxx,tgt_$(ALICE_TARGET)/%.o,$(SRCS)) $(DICTO)
+
+# C++ compilation flags
+
+CXXFLAGS      = $(CXXOPTS) -I$(ROOTSYS)/include -I. -I$(ALICE_ROOT)/include
+
+CXXFLAGS      += -I$(ALICE_ROOT)/TGeant3 -I$(ALICE_ROOT)/STRUCT
+DEPINC        += -I$(ALICE_ROOT)/TGeant3
+# FORTRAN compilation flags
+
+FFLAGS      = $(FOPT)
+
+##### TARGETS #####
+# Target
+
+SLIBRARY       = $(LIBDIR)/libVZERO.$(SL)
+ALIBRARY       = $(LIBDIR)/libVZERO.a
+
+default:       $(SLIBRARY)
+
+$(LIBDIR)/libVZERO.$(SL):      $(OBJS)
+
+$(DICT):                       $(HDRS)
+
+depend:                                $(SRCS)
+
+TOCLEAN                 = $(OBJS) *Cint.cxx *Cint.h
+
+############################### General Macros ################################
+
+include $(ALICE_ROOT)/conf/GeneralMacros
+
+############################ Dependencies #####################################
+
+-include tgt_$(ALICE_TARGET)/Make-depend 
+
+### Target check creates violation reports (.viol), which depend on
+### stripped files (.ii), which in turn depend on preprocessed
+### files (.i). Dependences are in conf/GeneralDef.
+
+CHECKS        = $(patsubst %.cxx,check/%.viol,$(SRCS))
+
+check:          $(CHECKS)
+
+# DO NOT DELETE
diff --git a/VZERO/VZEROLinkDef.h b/VZERO/VZEROLinkDef.h
new file mode 100755 (executable)
index 0000000..ff0dbd9
--- /dev/null
@@ -0,0 +1,14 @@
+#ifdef __CINT__
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+#pragma link C++ class  AliVZERO;
+#pragma link C++ class  AliVZEROv0;
+#pragma link C++ class  AliVZEROhit;
+#pragma link C++ class  AliVZEROdigit;
+
+#endif
diff --git a/VZERO/ViewVZERO.C b/VZERO/ViewVZERO.C
new file mode 100755 (executable)
index 0000000..99f1460
--- /dev/null
@@ -0,0 +1,45 @@
+void ViewVZERO()
+{
+    gMC->Gsatt("V0RI","seen",0);
+    
+    gMC->Gsatt("V0CA","seen",1);
+    gMC->Gsatt("V0IR","seen",1);
+    gMC->Gsatt("V0ER","seen",1);
+    
+    gMC->Gsatt("V0R0","seen",0);
+    
+    gMC->Gsatt("V0R1","seen",1);
+    gMC->Gsatt("V0R2","seen",1);
+    gMC->Gsatt("V0R3","seen",1);
+    gMC->Gsatt("V0R4","seen",1);
+    gMC->Gsatt("V0R5","seen",1);
+    
+    gMC->Gsatt("V0A1","seen",1);
+    gMC->Gsatt("V0A2","seen",1);
+    gMC->Gsatt("V0A3","seen",1);
+    gMC->Gsatt("V0A4","seen",1);
+    gMC->Gsatt("V0B1","seen",1);
+    gMC->Gsatt("V0B2","seen",1);     
+    gMC->Gsatt("V0B3","seen",1);
+    gMC->Gsatt("V0B4","seen",1);
+     
+    gMC->Gsatt("V0C1","seen",1);
+    gMC->Gsatt("V0C2","seen",1);     
+    gMC->Gsatt("V0C3","seen",1);
+    gMC->Gsatt("V0C4","seen",1); 
+    
+    gMC->Gsatt("V0D1","seen",1);
+    gMC->Gsatt("V0D2","seen",1);     
+    gMC->Gsatt("V0D3","seen",1);
+    gMC->Gsatt("V0D4","seen",1); 
+     
+    gMC->Gsatt("V0E1","seen",1);
+    gMC->Gsatt("V0E2","seen",1);     
+    gMC->Gsatt("V0E3","seen",1);
+    gMC->Gsatt("V0E4","seen",1); 
+
+    
+}
+
+