]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCv3.cxx
Coverity + warning
[u/mrichter/AliRoot.git] / ZDC / AliZDCv3.cxx
index c39b7f5cefc2ebccca0bd406075e27438fd8b347..68e483c88d822c3d355b4dd932e6c8e0a6555a81 100644 (file)
 #include <TVirtualMC.h>
 #include <TGeoManager.h>
 #include <TGeoMatrix.h>
+#include <TGeoTube.h>
 #include <TGeoCone.h>
 #include <TGeoShape.h>
+#include <TGeoScaledShape.h>
 #include <TGeoCompositeShape.h>
 #include <TParticle.h>
 
@@ -81,14 +83,26 @@ AliZDCv3::AliZDCv3() :
   fpcVCollA(0),
   fpDetectedA(0),
   fnDetectedA(0),
-  fVCollAperture(7./2.),
-  fVCollCentreY(0.),
+  fVCollSideCAperture(7./2.),
+  fVCollSideCApertureNeg(7./2.),
+  fVCollSideCCentreY(0.),
+  fVCollSideAAperture(7./2.),
+  fVCollSideAApertureNeg(7./2.),
+  fVCollSideACentreY(0.),
+  fTCDDAperturePos(2.0),
+  fTCDDApertureNeg(2.2),
+  fTDIAperturePos(5.5),
+  fTDIApertureNeg(5.5),
   fLumiLength(15.)
 {
   //
   // Default constructor for Zero Degree Calorimeter
   //
-  
+  for(Int_t i=0; i<3; i++){
+     fDimZN[i] = fDimZP[i] = 0.;
+     fPosZNC[i] = fPosZNA[i] = fPosZPC[i]= fPosZPA[i] = fPosZEM[i] = 0.;
+     fFibZN[i] = fFibZP[i] = 0.;
+  }
 }
  
 //_____________________________________________________________________________
@@ -120,8 +134,16 @@ AliZDCv3::AliZDCv3(const char *name, const char *title) :
   fpcVCollA(0),
   fpDetectedA(0),
   fnDetectedA(0),
-  fVCollAperture(7./2.),
-  fVCollCentreY(0.),
+  fVCollSideCAperture(7./2.),
+  fVCollSideCApertureNeg(7./2.),
+  fVCollSideCCentreY(0.),
+  fVCollSideAAperture(7./2.),
+  fVCollSideAApertureNeg(7./2.),
+  fVCollSideACentreY(0.),
+  fTCDDAperturePos(2.0),
+  fTCDDApertureNeg(2.2),
+  fTDIAperturePos(5.5),
+  fTDIApertureNeg(5.5),
   fLumiLength(15.)  
 {
   //
@@ -307,28 +329,39 @@ void AliZDCv3::CreateBeamLine()
   tubpar[0] = 18.6/2.;
   tubpar[1] = 7.6/2.;
   tubpar[2] = totLength1/2.;
-  gMC->Gsvolu("QE01", "ELTU", idtmed[7], tubpar, 3);  
+//  gMC->Gsvolu("QE01", "ELTU", idtmed[7], tubpar, 3);  
+  // temporary replace with a scaled tube (AG)
+  TGeoTube *tubeQE01 = new TGeoTube(0.,tubpar[0],tubpar[2]);
+  TGeoScale *scaleQE01 = new TGeoScale(1., tubpar[1]/tubpar[0], 1.);
+  TGeoScaledShape *sshapeQE01 = new TGeoScaledShape(tubeQE01, scaleQE01);
+  new TGeoVolume("QE01", sshapeQE01, gGeoManager->GetMedium(idtmed[7]));
 
   tubpar[0] = 18.0/2.;
   tubpar[1] = 7.0/2.;
   tubpar[2] = totLength1/2.;
-  gMC->Gsvolu("QE02", "ELTU", idtmed[10], tubpar, 3);  
+//  gMC->Gsvolu("QE02", "ELTU", idtmed[10], tubpar, 3);  
+  // temporary replace with a scaled tube (AG)
+  TGeoTube *tubeQE02 = new TGeoTube(0.,tubpar[0],tubpar[2]);
+  TGeoScale *scaleQE02 = new TGeoScale(1., tubpar[1]/tubpar[0], 1.);
+  TGeoScaledShape *sshapeQE02 = new TGeoScaledShape(tubeQE02, scaleQE02);
+  new TGeoVolume("QE02", sshapeQE02, gGeoManager->GetMedium(idtmed[10]));
+
   gMC->Gspos("QE01", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY"); 
   gMC->Gspos("QE02", 1, "QE01", 0., 0., 0., 0, "ONLY");  
   // Ch.debug
   //printf("   QE01 ELTU from z = %1.2f to z= %1.2f\n",-zd1,-2*tubpar[2]-zd1);
   
   // Vertical collimator jaws (defined ONLY if fVCollAperture<3.5!)
-  if(fVCollAperture<3.5){
+  if(fVCollSideCAperture<3.5){
     boxpar[0] = 5.4/2.;
-    boxpar[1] = (3.5-fVCollAperture-fVCollCentreY-0.7)/2.;
+    boxpar[1] = (3.5-fVCollSideCAperture-fVCollSideCCentreY-0.7)/2.;
     if(boxpar[1]<0.) boxpar[1]=0.;
     boxpar[2] = 124.4/2.;
-    printf("\n  AliZDCv3 -> Setting VCollimator jaw: aperture %1.2f center %1.2f mod.thickness %1.3f\n\n", 
-       2*fVCollAperture,fVCollCentreY,2*boxpar[1]);
+    printf("  AliZDCv3 -> sideC VCollimator jaws: apertures +%1.2f/-%1.2f center %1.2f [cm]\n", 
+       fVCollSideCAperture, fVCollSideCApertureNeg,fVCollSideCCentreY);
     gMC->Gsvolu("QCVC" , "BOX ", idtmed[13], boxpar, 3); 
-    gMC->Gspos("QCVC", 1, "QE02", -boxpar[0],  fVCollAperture+fVCollCentreY+boxpar[1], -totLength1/2.+160.8+78.+148./2., 0, "ONLY");  
-    gMC->Gspos("QCVC", 2, "QE02", -boxpar[0], -fVCollAperture+fVCollCentreY-boxpar[1], -totLength1/2.+160.8+78.+148./2., 0, "ONLY");  
+    gMC->Gspos("QCVC", 1, "QE02", -boxpar[0],  fVCollSideCAperture+fVCollSideCCentreY+boxpar[1], -totLength1/2.+160.8+78.+148./2., 0, "ONLY");  
+    gMC->Gspos("QCVC", 2, "QE02", -boxpar[0], -fVCollSideCApertureNeg+fVCollSideCCentreY-boxpar[1], -totLength1/2.+160.8+78.+148./2., 0, "ONLY");  
   }
   
   zd1 += tubpar[2] * 2.;
@@ -911,8 +944,10 @@ void AliZDCv3::CreateBeamLine()
   gMC->Gspos("Q11T", 1, "Q10T", 0., -1.1,  0., 0, "ONLY");  
   
   // positioning  TCDD elements in ZDCA, (inside TCDD volume)
-  gMC->Gspos("Q08T", 1, "ZDCA", 0., 2., -100.+zd2, 0, "ONLY");  
-  gMC->Gspos("Q10T", 1, "ZDCA", 0., -2., -100.+zd2, 0, "ONLY");  
+  gMC->Gspos("Q08T", 1, "ZDCA", 0., fTCDDAperturePos, -100.+zd2, 0, "ONLY");  
+  gMC->Gspos("Q10T", 1, "ZDCA", 0., -fTCDDApertureNeg, -100.+zd2, 0, "ONLY");  
+  printf("  AliZDCv3 -> TCDD apertures +%1.2f/-%1.2f cm\n", 
+       fTCDDAperturePos, fTCDDApertureNeg);
     
   // RF screen 
   boxpar[0] = 0.2/2.;
@@ -932,26 +967,38 @@ void AliZDCv3::CreateBeamLine()
   tubpar[0] = 18.4/2.;
   tubpar[1] = 7.4/2.;
   tubpar[2] = 313.3/2.;
-  gMC->Gsvolu("QA06", "ELTU", idtmed[7], tubpar, 3);  
+//  gMC->Gsvolu("QA06", "ELTU", idtmed[7], tubpar, 3);  
+  // temporary replace with a scaled tube (AG)
+  TGeoTube *tubeQA06 = new TGeoTube(0.,tubpar[0],tubpar[2]);
+  TGeoScale *scaleQA06 = new TGeoScale(1., tubpar[1]/tubpar[0], 1.);
+  TGeoScaledShape *sshapeQA06 = new TGeoScaledShape(tubeQA06, scaleQA06);
+  new TGeoVolume("QA06", sshapeQA06, gGeoManager->GetMedium(idtmed[7]));
   //printf("   QA06 TUBE from z = %1.2f to z= %1.2f\n",zd2,2*tubpar[2]+zd2);
 
   tubpar[0] = 18.0/2.;
   tubpar[1] = 7.0/2.;
   tubpar[2] = 313.3/2.;
-  gMC->Gsvolu("QA07", "ELTU", idtmed[10], tubpar, 3);  
+//  gMC->Gsvolu("QA07", "ELTU", idtmed[10], tubpar, 3);  
+  // temporary replace with a scaled tube (AG)
+  TGeoTube *tubeQA07 = new TGeoTube(0.,tubpar[0],tubpar[2]);
+  TGeoScale *scaleQA07 = new TGeoScale(1., tubpar[1]/tubpar[0], 1.);
+  TGeoScaledShape *sshapeQA07 = new TGeoScaledShape(tubeQA07, scaleQA07);
+  new TGeoVolume("QA07", sshapeQA07, gGeoManager->GetMedium(idtmed[10]));
   //printf("   QA07 TUBE from z = %1.2f to z= %1.2f\n",zd2,2*tubpar[2]+zd2);
   gMC->Gspos("QA06", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY"); 
   gMC->Gspos("QA07", 1, "QA06", 0., 0., 0., 0, "ONLY");  
   
   // Vertical collimator jaws (defined ONLY if fVCollAperture<3.5!)
-  if(fVCollAperture<3.5){
+  if(fVCollSideAAperture<3.5){
     boxpar[0] = 5.4/2.;
-    boxpar[1] = (3.5-fVCollAperture-fVCollCentreY-0.7)/2.;
+    boxpar[1] = (3.5-fVCollSideAAperture-fVCollSideACentreY-0.7)/2.;
     if(boxpar[1]<0.) boxpar[1]=0.;
     boxpar[2] = 124.4/2.;
     gMC->Gsvolu("QCVA" , "BOX ", idtmed[13], boxpar, 3); 
-    gMC->Gspos("QCVA", 1, "QA07", -boxpar[0], fVCollAperture+fVCollCentreY+boxpar[1], -313.3/2.+78.+148./2., 0, "ONLY");  
-    gMC->Gspos("QCVA", 2, "QA07", -boxpar[0], -fVCollAperture+fVCollCentreY-boxpar[1], -313.3/2.+78.+148./2., 0, "ONLY");  
+    gMC->Gspos("QCVA", 1, "QA07", -boxpar[0], fVCollSideAAperture+fVCollSideACentreY+boxpar[1], -313.3/2.+78.+148./2., 0, "ONLY");  
+    gMC->Gspos("QCVA", 2, "QA07", -boxpar[0], -fVCollSideAApertureNeg+fVCollSideACentreY-boxpar[1], -313.3/2.+78.+148./2., 0, "ONLY");  
+    printf("  AliZDCv3 -> sideA VCollimator jaws: apertures +%1.2f/-%1.2f center %1.2f [cm]\n", 
+       fVCollSideAAperture, fVCollSideAApertureNeg,fVCollSideACentreY);
   }
   
   zd2 += 2.*tubpar[2];
@@ -1015,20 +1062,22 @@ void AliZDCv3::CreateBeamLine()
   boxpar[1] = 9.0/2.;
   boxpar[2] = 540.0/2.;
   gMC->Gsvolu("QTD1", "BOX ", idtmed[7], boxpar, 3);
-  gMC->Gspos("QTD1", 1, "Q13TM", -3.8, 10.5,  0., 0, "ONLY");
+  gMC->Gspos("QTD1", 1, "Q13TM", -3.8, boxpar[1]+fTDIAperturePos,  0., 0, "ONLY");
   boxpar[0] = 11.0/2.;
   boxpar[1] = 9.0/2.;
   boxpar[2] = 540.0/2.;
   gMC->Gsvolu("QTD2", "BOX ", idtmed[7], boxpar, 3);
-  gMC->Gspos("QTD2", 1, "Q13TM", -3.8, -10.5,  0., 0, "ONLY");  
+  gMC->Gspos("QTD2", 1, "Q13TM", -3.8, -boxpar[1]-fTDIApertureNeg,  0., 0, "ONLY");  
   boxpar[0] = 5.1/2.;
   boxpar[1] = 0.2/2.;
   boxpar[2] = 540.0/2.;
   gMC->Gsvolu("QTD3", "BOX ", idtmed[7], boxpar, 3);
-  gMC->Gspos("QTD3", 1, "Q13TM", -3.8+5.5+boxpar[0], 6.1,  0., 0, "ONLY");  
-  gMC->Gspos("QTD3", 2, "Q13TM", -3.8+5.5+boxpar[0], -6.1,  0., 0, "ONLY"); 
-  gMC->Gspos("QTD3", 3, "Q13TM", -3.8-5.5-boxpar[0], 6.1,  0., 0, "ONLY");  
-  gMC->Gspos("QTD3", 4, "Q13TM", -3.8-5.5-boxpar[0], -6.1,  0., 0, "ONLY");  
+  gMC->Gspos("QTD3", 1, "Q13TM", -3.8+5.5+boxpar[0], fTDIAperturePos,  0., 0, "ONLY");  
+  gMC->Gspos("QTD3", 2, "Q13TM", -3.8+5.5+boxpar[0], -fTDIApertureNeg,  0., 0, "ONLY"); 
+  gMC->Gspos("QTD3", 3, "Q13TM", -3.8-5.5-boxpar[0], fTDIAperturePos,  0., 0, "ONLY");  
+  gMC->Gspos("QTD3", 4, "Q13TM", -3.8-5.5-boxpar[0], -fTDIApertureNeg,  0., 0, "ONLY");  
+  printf("  AliZDCv3 -> TDI apertures +%1.2f/-%1.2f cm\n\n", 
+       fTDIAperturePos, fTDIApertureNeg);
   //
   tubspar[0] = 12.0/2.;
   tubspar[1] = 12.4/2.;
@@ -1876,105 +1925,6 @@ void AliZDCv3::CreateZDC()
   
 }
  
-//_____________________________________________________________________________
-void AliZDCv3::DrawModule() const
-{
-  //
-  // Draw a shaded view of the Zero Degree Calorimeter version 1
-  //
-
-  // Set everything unseen
-  gMC->Gsatt("*", "seen", -1);
-  // 
-  // Set ALIC mother transparent
-  gMC->Gsatt("ALIC","SEEN",0);
-  //
-  // Set the volumes visible
-  gMC->Gsatt("ZDCC","SEEN",0);
-  gMC->Gsatt("QT01","SEEN",1);
-  gMC->Gsatt("QT02","SEEN",1);
-  gMC->Gsatt("QT03","SEEN",1);
-  gMC->Gsatt("QT04","SEEN",1);
-  gMC->Gsatt("QT05","SEEN",1);
-  gMC->Gsatt("QT06","SEEN",1);
-  gMC->Gsatt("QT07","SEEN",1);
-  gMC->Gsatt("QT08","SEEN",1);
-  gMC->Gsatt("QT09","SEEN",1);
-  gMC->Gsatt("QT10","SEEN",1);
-  gMC->Gsatt("QT11","SEEN",1);
-  gMC->Gsatt("QT12","SEEN",1);
-  gMC->Gsatt("QT13","SEEN",1);
-  gMC->Gsatt("QC01","SEEN",1);
-  gMC->Gsatt("QC02","SEEN",1);
-  gMC->Gsatt("QC03","SEEN",1);
-  gMC->Gsatt("QC04","SEEN",1);
-  gMC->Gsatt("QC05","SEEN",1);
-  gMC->Gsatt("QC06","SEEN",1);
-  gMC->Gsatt("QC07","SEEN",1);
-  gMC->Gsatt("QC08","SEEN",1);
-  gMC->Gsatt("QC09","SEEN",1);
-  gMC->Gsatt("QC10","SEEN",1);
-  gMC->Gsatt("MQXL","SEEN",1);
-  gMC->Gsatt("YMQL","SEEN",1);
-  gMC->Gsatt("MQX ","SEEN",1);
-  gMC->Gsatt("YMQ ","SEEN",1);
-  gMC->Gsatt("ZQYX","SEEN",1);
-  gMC->Gsatt("MD1 ","SEEN",1);
-  gMC->Gsatt("MD1V","SEEN",1);
-  gMC->Gsatt("YD1 ","SEEN",1);
-  gMC->Gsatt("MD2 ","SEEN",1);
-  gMC->Gsatt("YD2 ","SEEN",1);
-  gMC->Gsatt("ZNEU","SEEN",0);
-  gMC->Gsatt("ZNF1","SEEN",0);
-  gMC->Gsatt("ZNF2","SEEN",0);
-  gMC->Gsatt("ZNF3","SEEN",0);
-  gMC->Gsatt("ZNF4","SEEN",0);
-  gMC->Gsatt("ZNG1","SEEN",0);
-  gMC->Gsatt("ZNG2","SEEN",0);
-  gMC->Gsatt("ZNG3","SEEN",0);
-  gMC->Gsatt("ZNG4","SEEN",0);
-  gMC->Gsatt("ZNTX","SEEN",0);
-  gMC->Gsatt("ZN1 ","COLO",4); 
-  gMC->Gsatt("ZN1 ","SEEN",1);
-  gMC->Gsatt("ZNSL","SEEN",0);
-  gMC->Gsatt("ZNST","SEEN",0);
-  gMC->Gsatt("ZPRO","SEEN",0);
-  gMC->Gsatt("ZPF1","SEEN",0);
-  gMC->Gsatt("ZPF2","SEEN",0);
-  gMC->Gsatt("ZPF3","SEEN",0);
-  gMC->Gsatt("ZPF4","SEEN",0);
-  gMC->Gsatt("ZPG1","SEEN",0);
-  gMC->Gsatt("ZPG2","SEEN",0);
-  gMC->Gsatt("ZPG3","SEEN",0);
-  gMC->Gsatt("ZPG4","SEEN",0);
-  gMC->Gsatt("ZPTX","SEEN",0);
-  gMC->Gsatt("ZP1 ","COLO",6); 
-  gMC->Gsatt("ZP1 ","SEEN",1);
-  gMC->Gsatt("ZPSL","SEEN",0);
-  gMC->Gsatt("ZPST","SEEN",0);
-  gMC->Gsatt("ZEM ","COLO",7); 
-  gMC->Gsatt("ZEM ","SEEN",1);
-  gMC->Gsatt("ZEMF","SEEN",0);
-  gMC->Gsatt("ZETR","SEEN",0);
-  gMC->Gsatt("ZEL0","SEEN",0);
-  gMC->Gsatt("ZEL1","SEEN",0);
-  gMC->Gsatt("ZEL2","SEEN",0);
-  gMC->Gsatt("ZEV0","SEEN",0);
-  gMC->Gsatt("ZEV1","SEEN",0);
-  gMC->Gsatt("ZES0","SEEN",0);
-  gMC->Gsatt("ZES1","SEEN",0);
-  //
-  gMC->Gdopt("hide", "on");
-  gMC->Gdopt("shad", "on");
-  gMC->Gsatt("*", "fill", 7);
-  gMC->SetClipBox(".");
-  gMC->SetClipBox("*", 0, 100, -100, 100, 12000, 16000);
-  gMC->DefaultRange();
-  gMC->Gdraw("alic", 40, 30, 0, 488, 220, .07, .07);
-  gMC->Gdhead(1111, "Zero Degree Calorimeter Version 3");
-  gMC->Gdman(18, 4, "MAN");
-}
-
 //_____________________________________________________________________________
 void AliZDCv3::CreateMaterials()
 {
@@ -2082,6 +2032,7 @@ void AliZDCv3::CreateMaterials()
   Float_t stmin  = 0.01;   // Min. value 4 max. step (cm)
   Float_t stemax = 1.;     // Max. step permitted (cm) 
   Float_t tmaxfd = 0.;     // Maximum angle due to field (degrees) 
+  Float_t tmaxfdv = 0.1;   // Maximum angle due to field (degrees) 
   Float_t deemax = -1.;    // Maximum fractional energy loss
   Float_t nofieldm = 0.;   // Max. field value (no field)
   Float_t fieldm = 45.;    // Max. field value (with field)
@@ -2101,7 +2052,7 @@ void AliZDCv3::CreateMaterials()
   AliMedium(8, "ZIRONN",8, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
   AliMedium(9, "ZCOPL", 6, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
   AliMedium(10,"ZVOID",10, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
-  AliMedium(11,"ZVOIM",11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
+  AliMedium(11,"ZVOIM",11, isvol, ifield, fieldm, tmaxfdv, stemax, deemax, epsil, stmin);
   AliMedium(12,"ZAIR", 12, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
   AliMedium(13,"ZTANT",13, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
   AliMedium(14, "ZIRONT", 7, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
@@ -2167,89 +2118,132 @@ void AliZDCv3::InitTables()
  //
 
   Int_t k, j;
-
-  char *lightfName1,*lightfName2,*lightfName3,*lightfName4,
-       *lightfName5,*lightfName6,*lightfName7,*lightfName8;
-  FILE *fp1, *fp2, *fp3, *fp4, *fp5, *fp6, *fp7, *fp8;
+  int read=1;
 
   //  --- Reading light tables for ZN 
-  lightfName1 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362207s");
-  if((fp1 = fopen(lightfName1,"r")) == NULL){
+  char *lightfName1 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362207s");
+  FILE *fp1 = fopen(lightfName1,"r");
+  if(fp1 == NULL){
      printf("Cannot open file fp1 \n");
      return;
   }
-  lightfName2 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362208s");
-  if((fp2 = fopen(lightfName2,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfan; k++){
+      for(j=0; j<fNben; j++){
+       read = fscanf(fp1,"%f",&fTablen[0][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 1");
+      }
+    }
+    fclose(fp1);
+  }
+  char *lightfName2 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362208s");
+  FILE *fp2 = fopen(lightfName2,"r");
+  if(fp2 == NULL){
      printf("Cannot open file fp2 \n");
      return;
   }  
-  lightfName3 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362209s");
-  if((fp3 = fopen(lightfName3,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfan; k++){
+      for(j=0; j<fNben; j++){
+       read = fscanf(fp2,"%f",&fTablen[1][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 2");
+      }
+    }
+    fclose(fp2);
+  }
+  char *lightfName3 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362209s");
+  FILE *fp3 = fopen(lightfName3,"r");
+  if(fp3 == NULL){
      printf("Cannot open file fp3 \n");
      return;
   }
-  lightfName4 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362210s");
-  if((fp4 = fopen(lightfName4,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfan; k++){
+      for(j=0; j<fNben; j++){
+       read = fscanf(fp3,"%f",&fTablen[2][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 3");
+      }
+    }
+    fclose(fp3);
+  }
+  char *lightfName4 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362210s");
+  FILE *fp4 = fopen(lightfName4,"r");
+  if(fp4 == NULL){
      printf("Cannot open file fp4 \n");
      return;
   }
-  
-  int read=1;
-  for(k=0; k<fNalfan; k++){
-     for(j=0; j<fNben; j++){
-       read = fscanf(fp1,"%f",&fTablen[0][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 1");
-       read = fscanf(fp2,"%f",&fTablen[1][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 2");
-       read = fscanf(fp3,"%f",&fTablen[2][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 3");
+  else{
+    for(k=0; k<fNalfan; k++){
+      for(j=0; j<fNben; j++){
        read = fscanf(fp4,"%f",&fTablen[3][k][j]);
        if(read==0) AliDebug(3, " Error in reading light table 4");
-     } 
+      }
+    }
+    fclose(fp4);
   }
-  fclose(fp1);
-  fclose(fp2);
-  fclose(fp3);
-  fclose(fp4);
-  
+    
   //  --- Reading light tables for ZP and ZEM
-  lightfName5 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552207s");
-  if((fp5 = fopen(lightfName5,"r")) == NULL){
+  char *lightfName5 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552207s");
+  FILE *fp5 = fopen(lightfName5,"r");
+  if(fp5 == NULL){
      printf("Cannot open file fp5 \n");
      return;
   }
-  lightfName6 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552208s");
-  if((fp6 = fopen(lightfName6,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfap; k++){
+      for(j=0; j<fNbep; j++){
+       read = fscanf(fp5,"%f",&fTablep[0][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 5");
+      }
+    }
+    fclose(fp5);
+  }
+  char *lightfName6 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552208s");
+  FILE *fp6 = fopen(lightfName6,"r");
+  if(fp6 == NULL){
      printf("Cannot open file fp6 \n");
      return;
   }
-  lightfName7 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552209s");
-  if((fp7 = fopen(lightfName7,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfap; k++){
+      for(j=0; j<fNbep; j++){
+       read = fscanf(fp6,"%f",&fTablep[1][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 6");
+      }
+    }
+    fclose(fp6);
+  }
+  char *lightfName7 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552209s");
+  FILE *fp7 = fopen(lightfName7,"r");
+  if(fp7 == NULL){
      printf("Cannot open file fp7 \n");
      return;
   }
-  lightfName8 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552210s");
-  if((fp8 = fopen(lightfName8,"r")) == NULL){
+  else{
+    for(k=0; k<fNalfap; k++){
+      for(j=0; j<fNbep; j++){
+       read = fscanf(fp7,"%f",&fTablep[2][k][j]);
+       if(read==0) AliDebug(3, " Error in reading light table 7");
+      }
+    }
+   fclose(fp7);
+  }
+  char *lightfName8 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552210s");
+  FILE *fp8 = fopen(lightfName8,"r");
+  if(fp8 == NULL){
      printf("Cannot open file fp8 \n");
      return;
   }
-  
-  for(k=0; k<fNalfap; k++){
-     for(j=0; j<fNbep; j++){
-       read = fscanf(fp5,"%f",&fTablep[0][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 5");
-       read = fscanf(fp6,"%f",&fTablep[1][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 6");
-       read = fscanf(fp7,"%f",&fTablep[2][k][j]);
-       if(read==0) AliDebug(3, " Error in reading light table 7");
+  else{
+    for(k=0; k<fNalfap; k++){
+      for(j=0; j<fNbep; j++){
        read = fscanf(fp8,"%f",&fTablep[3][k][j]);
        if(read==0) AliDebug(3, " Error in reading light table 8");
-     } 
+      }
+    }
+   fclose(fp8);
   }
-  fclose(fp5);
-  fclose(fp6);
-  fclose(fp7);
-  fclose(fp8);
+
 }
 //_____________________________________________________________________________
 void AliZDCv3::StepManager()
@@ -2258,7 +2252,7 @@ void AliZDCv3::StepManager()
   // Routine called at every step in the Zero Degree Calorimeters
   //
   Int_t   j, vol[2]={0,0}, ibeta=0, ialfa=0, ibe=0, nphe=0;
-  Float_t hits[13], x[3], xdet[3], um[3], ud[3];
+  Float_t hits[13], x[3], xdet[3]={999.,999.,999.}, um[3], ud[3];
   Float_t destep=0., be=0., out=0.;
   Double_t s[3], p[4];
   const char *knamed;
@@ -2596,7 +2590,7 @@ void AliZDCv3::StepManager()
           AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
         }
        } 
-       else if((vol[0]==3)) {  // (3) ZEM fibres
+       else if(vol[0]==3) {    // (3) ZEM fibres
          if(ibe>fNbep) ibe=fNbep;
          out =  charge*charge*fTablep[ibeta][ialfa][ibe];
         gMC->TrackPosition(s[0],s[1],s[2]);