]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALv0.cxx
Correcting compiler warnings
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALv0.cxx
index 01b4dae262b363a202738256b421f9a9ca415498..55aabb782990642d20c09e5bcd280206b8222aa9 100644 (file)
@@ -24,6 +24,7 @@
 //          : Aleksei Pavlinov (WSU)     SHASHLYK
 
 // --- ROOT system ---
+#include <cassert>
 
 #include <TNode.h>
 #include <TBRIK.h>
@@ -63,11 +64,33 @@ enum
   kIdSC    = 1601, 
   kIdSTEEL = 1603
  };
+
+
+//______________________________________________________________________
+AliEMCALv0::AliEMCALv0()
+  : AliEMCAL(),
+    fShishKebabModules(),fEnvelop1(0),fIdRotm(0),fIdTmedArr(0),
+    fSampleWidth(0),fSmodPar0(0),fSmodPar1(0),fSmodPar2(0)
+{
+  //default ctor
+}
+
 //______________________________________________________________________
-AliEMCALv0::AliEMCALv0(const char *name, const char *title):
-  AliEMCAL(name,title)
+AliEMCALv0::AliEMCALv0(const char *name, const char *title)
+  : AliEMCAL(name,title),
+    fShishKebabModules(),fEnvelop1(0),fIdRotm(0),fIdTmedArr(0),
+    fSampleWidth(0),fSmodPar0(0),fSmodPar1(0),fSmodPar2(0)
 {
   // ctor : title is used to identify the layout
+  // Apr 25, 2006
+  // Nov 22, 2006 - case of 1X1  
+  TString ntmp(GetTitle());
+  ntmp.ToUpper();
+  if(ntmp == "TRD1") { // TRD1 is alias for SHISH_77_TRD1_2X2_FINAL_110DEG NL=69
+    ntmp = "SHISH_77_TRD1_2X2_FINAL_110DEG NL=69";
+    SetTitle(ntmp.Data());
+  }
+
   AliEMCALGeometry *geom = GetGeometry() ; 
   //geom->CreateListOfTrd1Modules(); 
   fShishKebabModules = geom->GetShishKebabTrd1Modules(); 
@@ -107,6 +130,22 @@ void AliEMCALv0::BuildGeometry()
         TPGON *pgon = new TPGON(envn, "PGON that contains arm 1", "void", 
         geom->GetArm1PhiMin(),geom->GetArm1PhiMax()-geom->GetArm1PhiMin(),geom->GetNPhiSuperModule(), 2);
       // define section
+       if (fEnvelop1.GetSize()<8) {
+         fEnvelop1.Set(10);
+         fEnvelop1[0] = geom->GetArm1PhiMin(); // minimum phi angle
+         fEnvelop1[1] = geom->GetArm1PhiMax() - geom->GetArm1PhiMin(); // angular range in phi
+         fEnvelop1[2] = geom->GetNPhi(); // number of sections in phi
+         fEnvelop1[3] = 2; // 2 z coordinates
+         fEnvelop1[4] = -350.;
+         fEnvelop1[5] = geom->GetEnvelop(0) ; // rmin at z1
+         fEnvelop1[6] = geom->GetEnvelop(1) ; // rmax at z1
+         fEnvelop1[7] = 350.;
+         fEnvelop1[8] = fEnvelop1[5] ;        // radii are the same.
+         fEnvelop1[9] = fEnvelop1[6] ;        // radii are the same.
+         
+         if(gn.Contains("SHISH"))
+           fEnvelop1[2] = geom->GetNPhiSuperModule();
+       }
         pgon->DefineSection(0, fEnvelop1[4],  fEnvelop1[5], fEnvelop1[6]);
         pgon->DefineSection(1, fEnvelop1[7],  fEnvelop1[5], fEnvelop1[6]);
         top->cd();
@@ -304,13 +343,17 @@ void AliEMCALv0::CreateGeometry()
       envelopA[1] = geom->GetArm1PhiMax() - geom->GetArm1PhiMin(); // angular range in phi
       envelopA[2] = geom->GetNPhi();                               // number of sections in phi
       envelopA[3] = 2;                                             // 2 z coordinates
-      envelopA[4] = geom->ZFromEtaR(geom->GetEnvelop(1),
-                                  geom->GetArm1EtaMin());       // z coordinate 1
+      // envelopA[4] = geom->ZFromEtaR(geom->GetEnvelop(1),
+//geom->GetArm1EtaMin());       // z coordinate 1
+      envelopA[4] = -350.; // AM 30/5/2006
+      
     //add some padding for mother volume
       envelopA[5] = geom->GetEnvelop(0) ;                          // rmin at z1
       envelopA[6] = geom->GetEnvelop(1) ;                          // rmax at z1
-      envelopA[7] = geom->ZFromEtaR(geom->GetEnvelop(1),
-                                 geom->GetArm1EtaMax());        // z coordinate 2
+//      envelopA[7] = geom->ZFromEtaR(geom->GetEnvelop(1),
+//                               geom->GetArm1EtaMax());        // z coordinate 2
+      envelopA[7] = 350.; // AM 30/5/2006
+      
       envelopA[8] = envelopA[5] ;                                  // radii are the same.
       envelopA[9] = envelopA[6] ;                                  // radii are the same.
 
@@ -328,6 +371,7 @@ void AliEMCALv0::CreateGeometry()
 
     if(gn.Contains("SHISH")){
       // COMPACT, TWIST, TRD2 or TRD1
+      AliDebug(2,Form("Shish-Kebab geometry : %s", GetTitle())); 
       CreateShishKebabGeometry();
     }
 }
@@ -336,7 +380,7 @@ void AliEMCALv0::CreateGeometry()
 void AliEMCALv0::Init(void)
 {
     // Just prints an information message
-  
+  AliEMCAL::Init();
   if(AliLog::GetGlobalDebugLevel()>0) { 
     TString message("\n") ; 
     message += "*****************************************\n" ;
@@ -377,10 +421,10 @@ void AliEMCALv0::CreateShishKebabGeometry()
 
   CreateEmod("SMOD","EMOD"); // 18-may-05
 
-  if(gn.Contains("110DEG")) CreateEmod("SM10","EMOD"); // 12-oct-05
+  if(g->GetKey110DEG()) CreateEmod("SM10","EMOD"); // Nov 1,2006 
 
   // Sensitive SC  (2x2 tiles)
-  double parSCM0[5], *dummy = 0, parTRAP[11];
+  double parSCM0[5]={0,0,0,0}, *dummy = 0, parTRAP[11];
   Double_t trd1Angle = g->GetTrd1Angle()*TMath::DegToRad(), tanTmp = TMath::Tan(trd1Angle/2.);
    if(!gn.Contains("TRD")) { // standard module
     par[0] = (g->GetECPbRadThick()+g->GetECScintThick())*g->GetNECLayers()/2.;
@@ -417,7 +461,8 @@ void AliEMCALv0::CreateShishKebabGeometry()
       gMC->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
       gMC->Gspos("SCM0", 1, "EMOD", 0., 0., dzTmp/2., 0, "ONLY") ;
     } else { // before MAY 2005
-      double wallThickness = g->GetPhiModuleSize()/2. -  g->GetPhiTileSize(); // Need check
+      //      double wallThickness = g->GetPhiModuleSize()/2. -  g->GetPhiTileSize(); // Need check
+      double wallThickness = g->GetPhiModuleSize()/g->GetNPHIdiv() -  g->GetPhiTileSize();
       for(int i=0; i<3; i++) parSCM0[i] = fParEMOD[i] - wallThickness;
       parSCM0[3] = fParEMOD[3];
       gMC->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
@@ -426,7 +471,7 @@ void AliEMCALv0::CreateShishKebabGeometry()
 
     if(g->GetNPHIdiv()==2 && g->GetNETAdiv()==2) {
     // Division to tile size - 1-oct-04
-      printf("<I> Divide SCM0 on y-axis %i\n", g->GetNETAdiv());
+      AliDebug(2,Form(" Divide SCM0 on y-axis %i\n", g->GetNETAdiv()));
       gMC->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
     // Trapesoid 2x2
       parTRAP[0] = parSCM0[3];    // dz
@@ -442,7 +487,7 @@ void AliEMCALv0::CreateShishKebabGeometry()
       parTRAP[8] = parSCM0[1]/2.; // BL2
       parTRAP[9] = parTRAP[8];    // TL2
       parTRAP[10]= 0.0;           // ALP2
-      printf(" ** TRAP ** \n");
+      AliDebug(2,Form(" ** TRAP ** \n"));
       for(int i=0; i<11; i++) AliDebug(3, Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
 
       gMC->Gsvolu("SCMX", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
@@ -465,7 +510,7 @@ void AliEMCALv0::CreateShishKebabGeometry()
       zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
       double xCenterSCMX =  (parTRAP[4] +  parTRAP[8])/2.;
       if(!gn.Contains("NOPB")) { // for testing - 11-jul-05
-        printf(" Pb tiles \n");
+        AliDebug(2,Form(" Pb tiles \n"));
         for(int iz=0; iz<g->GetNECLayers(); iz++){
           par[0] = (parSCM0[0] + mod->GetTanBetta()*fSampleWidth*iz)/2.;
           xpos   = par[0] - xCenterSCMX;
@@ -473,16 +518,22 @@ void AliEMCALv0::CreateShishKebabGeometry()
           AliDebug(3,Form(" %i xpos %f zpos %f par[0] %f \n", iz+1, xpos, zpos, par[0]));
           zpos += fSampleWidth;
         } 
-        printf(" Number of Pb tiles in SCMX %i \n", nr);
+        AliDebug(2,Form(" Number of Pb tiles in SCMX %i \n", nr));
       }
     } else if(g->GetNPHIdiv()==3 && g->GetNETAdiv()==3) {
+      printf(" before AliEMCALv0::Trd1Tower3X3() : parSCM0");
+      for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+      printf("\n"); 
       Trd1Tower3X3(parSCM0);
+    } else if(g->GetNPHIdiv()==1 && g->GetNETAdiv()==1) {
+      // no division in SCM0
+      Trd1Tower1X1(parSCM0);
     } else if(g->GetNPHIdiv()==4 && g->GetNETAdiv()==4) {
       Trd1Tower4X4();
     }
   } else if(gn.Contains("TRD2")) {    // TRD2 - 14-jan-05
     //    Scm0InTrd2(g, fParEMOD, parSCM0); // First dessin 
-    PbmoInTrd2(g, fParEMOD, parSCM0); // Second dessi
+    PbmoInTrd2(g, fParEMOD, parSCM0); // Second desig
   }
 }
 
@@ -498,7 +549,7 @@ void AliEMCALv0::CreateSmod(const char* mother)
   Double_t par1C = 0.;
   //  ===== define Super Module from air - 14x30 module ==== ;
   fSampleWidth = double(g->GetECPbRadThick()+g->GetECScintThick());
-  printf("\n ## Super Module | fSampleWidth %5.3f ## %s \n", fSampleWidth, gn.Data());
+  AliDebug(2,Form("\n ## Super Module | fSampleWidth %5.3f ## %s \n", fSampleWidth, gn.Data()));
   par[0] = g->GetShellThickness()/2.;
   par[1] = g->GetPhiModuleSize()*g->GetNPhi()/2.; 
   par[2] = g->GetEtaModuleSize()*15.; 
@@ -506,9 +557,9 @@ void AliEMCALv0::CreateSmod(const char* mother)
   int nphism = g->GetNumberOfSuperModules()/2; // 20-may-05
   if(nphism>0) {
     dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/nphism;
-    //    if(gn.Contains("110DEG")) dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/(nphism-1);
+    //    if(g->GetKey110DEG()) dphi = (g->GetArm1PhiMax() - g->GetArm1PhiMin())/(nphism-1);
     rpos = (g->GetEnvelop(0) + g->GetEnvelop(1))/2.;
-    printf(" rpos %8.2f : dphi %6.1f degree \n", rpos, dphi);
+    AliDebug(2,Form(" rpos %8.2f : dphi %6.1f degree \n", rpos, dphi));
   }
 
   if (gn.Contains("TRD2")) { // tubs - 27-jan-05
@@ -521,9 +572,9 @@ void AliEMCALv0::CreateSmod(const char* mother)
     gMC->Gsvolu("SMOP", "TUBS", fIdTmedArr[kIdAIR], parTubs, 5); // pozitive Z
     gMC->Gsvolu("SMON", "TUBS", fIdTmedArr[kIdAIR], parTubs, 5); // negative Z
 
-    printf(" SMOP,N ** TUBS **\n"); 
-    printf("tmed %i | Rmin %7.2f Rmax %7.2f dz %7.2f phi1,2 (%7.2f,%7.2f)\n", 
-    fIdTmedArr[kIdAIR], parTubs[0],parTubs[1],parTubs[2], parTubs[3],parTubs[4]);
+    AliDebug(2,Form(" SMOP,N ** TUBS **\n")); 
+    AliDebug(2,Form("tmed %i | Rmin %7.2f Rmax %7.2f dz %7.2f phi1,2 (%7.2f,%7.2f)\n", 
+                   fIdTmedArr[kIdAIR], parTubs[0],parTubs[1],parTubs[2], parTubs[3],parTubs[4]));
     // have to add 1 cm plastic before EMOD - time solution 
   } else if(gn.Contains("WSUC")) {
     par[0] = g->GetPhiModuleSize()*g->GetNPhi()/2.; 
@@ -532,8 +583,8 @@ void AliEMCALv0::CreateSmod(const char* mother)
 
     gMC->Gsvolu("SMOD", "BOX", fIdTmedArr[kIdAIR], par, 3);
 
-    printf("SMOD in WSUC : tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n", 
-    fIdTmedArr[kIdAIR], par[0],par[1],par[2]);
+    AliDebug(2,Form("SMOD in WSUC : tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n", 
+                   fIdTmedArr[kIdAIR], par[0],par[1],par[2]));
     fSmodPar0 = par[0]; 
     fSmodPar1 = par[1];
     fSmodPar2 = par[2];
@@ -544,21 +595,21 @@ void AliEMCALv0::CreateSmod(const char* mother)
     } else if(gn.Contains("TRD")) {
       par[2]  = 350./2.; // 11-oct-04 - for 26 division
       if(gn.Contains("TRD1")) {
-        printf(" par[0] %7.2f (old) \n",  par[0]);  
+        AliDebug(2,Form(" par[0] %7.2f (old) \n",  par[0]));
         Float_t *parSM = g->GetSuperModulesPars(); 
         for(int i=0; i<3; i++) par[i] = parSM[i];
       }
     }
     gMC->Gsvolu("SMOD", "BOX", fIdTmedArr[kIdAIR], par, 3);
-    printf("tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n", 
-    fIdTmedArr[kIdAIR], par[0],par[1],par[2]);
+    AliDebug(2,Form("tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n", 
+                   fIdTmedArr[kIdAIR], par[0],par[1],par[2]));
     fSmodPar0 = par[0]; 
     fSmodPar2 = par[2];
-    if(gn.Contains("110DEG")) { // 12-oct-05
+    if(g->GetKey110DEG()) { // 12-oct-05
       par1C = par[1];
       par[1] /= 2.;
       gMC->Gsvolu("SM10", "BOX", fIdTmedArr[kIdAIR], par, 3);
-      printf(" Super module with name \"SM10\" was created too par[1] = %f\n", par[1]);
+      AliDebug(2,Form(" Super module with name \"SM10\" was created too par[1] = %f\n", par[1]));
       par[1] = par1C;
     }
   // Steel plate
@@ -627,7 +678,7 @@ void AliEMCALv0::CreateSmod(const char* mother)
       nr++;
     } else { // TRD1 
       TString smName("SMOD"); // 12-oct-05
-      if(i==5 && gn.Contains("110DEG")) {
+      if(i==5 && g->GetKey110DEG()) {
         smName = "SM10";
         nrsmod = nr;
         nr     = 0;
@@ -640,7 +691,7 @@ void AliEMCALv0::CreateSmod(const char* mother)
       xpos = rpos * TMath::Cos(phiRad);
       ypos = rpos * TMath::Sin(phiRad);
       zpos = fSmodPar2; // 21-sep-04
-      if(i==5 && gn.Contains("110DEG")) {
+      if(i==5 && g->GetKey110DEG()) {
         xpos += (par1C/2. * TMath::Sin(phiRad)); 
         ypos -= (par1C/2. * TMath::Cos(phiRad)); 
       }
@@ -664,7 +715,7 @@ void AliEMCALv0::CreateSmod(const char* mother)
       }
     }
   }
-  printf(" Number of Super Modules %i \n", nr+nrsmod);
+  AliDebug(2,Form(" Number of Super Modules %i \n", nr+nrsmod));
 }
 
 void AliEMCALv0::CreateEmod(const char* mother, const char* child)
@@ -754,7 +805,7 @@ void AliEMCALv0::CreateEmod(const char* mother, const char* child)
           zpos = mod->GetPosZ() - fSmodPar2;
 
           int iyMax = g->GetNPhi();
-          if(strcmp(mother,"SMOD") && gn.Contains("110DEG")) {
+          if(strcmp(mother,"SMOD") && g->GetKey110DEG()) {
             iyMax /= 2;
           }
           for(int iy=0; iy<iyMax; iy++) { // flat in phi
@@ -763,7 +814,7 @@ void AliEMCALv0::CreateEmod(const char* mother, const char* child)
         //printf(" %2i xpos %7.2f ypos %7.2f zpos %7.2f fIdRotm %i\n", nr, xpos, ypos, zpos, fIdRotm);
             AliDebug(3,Form("%3.3i(%2.2i,%2.2i) ", nr,iy+1,iz+1));
           }
-          printf("\n");
+         //PH          printf("\n");
        } else {
           if(iz==0) AliMatrix(fIdRotm, 0.,0., 90.,0., 90.,90.); // (x')z; y'(x); z'(y)
           else      AliMatrix(fIdRotm, 90-angle,270., 90.0,0.0, angle,90.);
@@ -794,7 +845,7 @@ void AliEMCALv0::CreateEmod(const char* mother, const char* child)
 
         fShishKebabModules->Add(mod);
         phiOK = mod->GetCenterOfModule().Phi()*180./TMath::Pi(); 
-        printf(" %i | theta | %6.3f - %6.3f = %6.3f\n", iz+1, angle, phiOK, angle-phiOK);
+       AliDebug(2,Form(" %i | theta | %6.3f - %6.3f = %6.3f\n", iz+1, angle, phiOK, angle-phiOK));
 
         zpos = mod->GetPosZ() - parTubs[2];
         rpos = parTubs[0] + mod->GetPosXfromR();
@@ -818,7 +869,7 @@ void AliEMCALv0::CreateEmod(const char* mother, const char* child)
          theta3  = 180.-theta3;  phi3 = angEtaRow;
           AliMatrix(fIdRotm, theta1,phi1, theta2,phi2, theta3,phi3);
           gMC->Gspos(child,  nr, "SMON", xpos, ypos, -zpos, fIdRotm, "ONLY") ;
-          if(0) {
+          if(AliDebugLevel()>=2) {
            printf(" angEtaRow(phi) %7.2f |  angle(eta) %7.2f \n",  angEtaRow, angle);
            printf("iy=%2i xpos %7.2f ypos %7.2f zpos %7.2f fIdRotm %i\n", iy, xpos, ypos, zpos, fIdRotm);
           }
@@ -836,34 +887,35 @@ void AliEMCALv0::CreateEmod(const char* mother, const char* child)
       }
     }
   }
-  printf(" Number of modules in Super Module %i \n", nr);
+  AliDebug(2,Form(" Number of modules in Super Module(%s) %i \n", mother, nr));
 }
 
-// 8-dec-04 by PAI
-void AliEMCALv0::Trd1Tower3X3(const double parSCM0[4])
+void AliEMCALv0::Trd1Tower3X3(const double *parSCM0)
 {
-  // PB should be for whole SCM0 - ?
+  // Started Dec 8,2004 by PAI
+  // Fixed Nov 13,2006
+  printf(" AliEMCALv0::Trd1Tower3X3() : parSCM0");
+  for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+  printf("\n"); 
+  // Nov 10, 2006 - different name of SCMX
   double parTRAP[11], *dummy=0;
   AliEMCALGeometry * g = GetGeometry(); 
   TString gn(g->GetName()), scmx; 
   gn.ToUpper(); 
  // Division to tile size 
-  Info("Trd1Tower3X3()","<I> Divide SCM0 on y-axis %i", g->GetNETAdiv());
+  AliDebug(2,Form("Trd1Tower3X3() : Divide SCM0 on y-axis %i", g->GetNETAdiv()));
   gMC->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
   double dx1=parSCM0[0], dx2=parSCM0[1], dy=parSCM0[2], dz=parSCM0[3];
   double ndiv=3., xpos=0.0;
   // should be defined once
   gMC->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
-  if(gn.Contains("TEST")==0) { // one name for all trapesoid
-    scmx = "SCMX"; 
-    gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], dummy, 0);
-  }
-
-  
   for(int ix=1; ix<=3; ix++) { // 3X3
+    scmx = "SCX"; // Nov 10,2006 
     // ix=1
     parTRAP[0] = dz;
-    parTRAP[1] = TMath::ATan2((dx2-dx1)/2.,2.*dz)*TMath::RadToDeg(); // theta
+    double xCentBot = 2.*dx1/3.;
+    double xCentTop = 2.*(dx2/4. + dx1/12.);
+    parTRAP[1] = TMath::ATan2((xCentTop-xCentBot),2.*dz)*TMath::RadToDeg(); // theta
     parTRAP[2] = 0.;           // phi
     // bottom
     parTRAP[3] = dy/ndiv;      // H1
@@ -872,10 +924,10 @@ void AliEMCALv0::Trd1Tower3X3(const double parSCM0[4])
     parTRAP[6] = 0.0;          // ALP1
     // top
     parTRAP[7] = dy/ndiv;      // H2
-    parTRAP[8] = dx2/ndiv;     // BL2
+    parTRAP[8] = dx2/2 - dx1/6.;// BL2
     parTRAP[9] = parTRAP[8];   // TL2
     parTRAP[10]= 0.0;          // ALP2
-    xpos = +(dx1+dx2)/3.;      // 6 or 3
+    xpos = (xCentBot+xCentTop)/2.;
 
     if      (ix==3) {
       parTRAP[1] = -parTRAP[1];
@@ -886,19 +938,16 @@ void AliEMCALv0::Trd1Tower3X3(const double parSCM0[4])
       parTRAP[9] = parTRAP[8];   // TL2
       xpos = 0.0;
     }
-    printf(" ** TRAP ** xpos %9.3f\n", xpos);
-    for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
-    if(gn.Contains("TEST")){
-      scmx = "SCX"; scmx += ix;
-      gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
-      gMC->Gspos(scmx.Data(), 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
-    } else {
-      gMC->Gsposp(scmx.Data(), ix, "SCMY", xpos, 0.0, 0.0, 0, "ONLY", parTRAP, 11) ;
-    }
+    AliDebug(2,Form(" ** TRAP ** xpos %9.3f\n", xpos));
+    for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
+
+    scmx += ix;
+    gMC->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
+    gMC->Gspos(scmx.Data(), 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
+
     PbInTrap(parTRAP, scmx);
   }
-
-  Info("Trd1Tower3X3()", "Ver. 1.0 : was tested.");
+  AliDebug(2,Form("Trd1Tower3X3()", "Ver. 1.0 : was tested."));
 }
 
 // 8-dec-04 by PAI
@@ -906,7 +955,7 @@ void AliEMCALv0::PbInTrap(const double parTRAP[11], TString n)
 {
  // see for example CreateShishKebabGeometry(); just for case TRD1
   static int nr=0;
-  printf(" Pb tiles : nrstart %i\n", nr);
+  AliDebug(2,Form(" Pb tiles : nrstart %i\n", nr));
   AliEMCALGeometry * g = GetGeometry(); 
 
   double par[3];
@@ -925,13 +974,13 @@ void AliEMCALv0::PbInTrap(const double parTRAP[11], TString n)
     xpos   = par[0] - xCenterSCMX;
     if(parTRAP[1] < 0.) xpos = -xpos;
     gMC->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
-    printf(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]);
+    AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
     zpos += fSampleWidth;
     if(iz%2>0) printf("\n");
   } 
-  printf(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef);
-  printf(" par[1] %9.3f  par[2] %9.3f ypos %9.3f \n", par[1], par[2], ypos); 
-  Info("PbInTrap", "Ver. 1.0 : was tested.");
+  AliDebug(2,Form(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef));
+  AliDebug(2,Form(" par[1] %9.3f  par[2] %9.3f ypos %9.3f \n", par[1], par[2], ypos)); 
+  AliDebug(2,Form(" PbInTrap Ver. 1.0 : was tested."));
 }
 
 // 8-dec-04 by PAI
@@ -939,15 +988,69 @@ void AliEMCALv0::Trd1Tower4X4()
 {
  // Not ready yet
 }
+
+void AliEMCALv0::Trd1Tower1X1(double *parSCM0)
+{
+  // Started Nov 22,2006 by PAI
+  AliDebug(1," AliEMCALv0::Trd1Tower1X1() : parSCM0");
+  for(int i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
+  printf("\n"); 
+
+  // No division - keeping the same volume logic 
+  // and as consequence the same abs is scheme
+  AliDebug(2,"Trd1Tower1X1() : Create SCMX(SCMY) as SCM0");
+
+  gMC->Gsvolu("SCMY", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
+  gMC->Gspos("SCMY", 1, "SCM0", 0.0, 0.0, 0.0, 0, "ONLY");
+  gMC->Gsvolu("SCMX", "TRD1", fIdTmedArr[kIdSC], parSCM0, 4);
+  gMC->Gspos("SCMX", 1, "SCMY", 0.0, 0.0, 0.0, 0, "ONLY");
+
+  // should be defined once
+  double *dummy=0;
+  gMC->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
+
+  PbInTrd1(parSCM0, "SCMX");
+
+  AliDebug(1,"Trd1Tower1X1() : Ver. 0.1 : was tested.");
+}
+
+void AliEMCALv0::PbInTrd1(double *parTrd1, TString n)
+{
+ // see PbInTrap(const double parTrd1[11], TString n)
+  static int nr=0, ndeb=2;
+  AliDebug(ndeb,Form(" Pb tiles : nrstart %i\n", nr));
+  AliEMCALGeometry * g = GetGeometry(); 
+
+  double par[3];
+  //  double fSampleWidth = double(g->GetECPbRadThick()+g->GetECScintThick());
+  double xpos = 0.0, ypos = 0.0;
+  double zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
+  double coef = (parTrd1[1] -  parTrd1[0]) / (2.*parTrd1[3]);
+
+  par[1] = parTrd1[2];              // y 
+  par[2] = g->GetECPbRadThick()/2.; // z
+
+  for(int iz=0; iz<g->GetNECLayers(); iz++){
+    par[0] = parTrd1[0] + coef*fSampleWidth*iz;
+    gMC->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
+    AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
+    zpos += fSampleWidth;
+    if(iz%2>0) printf("\n");
+  } 
+  AliDebug(ndeb,Form(" Number of Pb tiles in SCMX %i coef %9.7f ", nr, coef));
+  AliDebug(ndeb,Form(" PbInTrd1 Ver. 0.1 : was tested."));
+}
+
 // 3-feb-05
 void AliEMCALv0::Scm0InTrd2(const AliEMCALGeometry * g, const Double_t emodPar[5], Double_t parSCM0[5])
 {
   // Passive material inside the detector
   double wallThickness = g->GetPhiModuleSize()/2. -  g->GetPhiTileSize(); //Need check
-  printf(" wall thickness %7.5f \n", wallThickness);
+  AliDebug(2,Form(" wall thickness %7.5f \n", wallThickness));
   for(int i=0; i<4; i++) { // on pictures sometimes I can not see 0 -> be carefull!!
     parSCM0[i] = emodPar[i] - wallThickness;
-    printf(" %i parSCMO %7.3f emodPar %7.3f : dif %7.3f \n", i, parSCM0[i],emodPar[i], parSCM0[i]-emodPar[i]);
+    AliDebug(2,Form(" %i parSCMO %7.3f emodPar %7.3f : dif %7.3f \n", 
+                   i, parSCM0[i],emodPar[i], parSCM0[i]-emodPar[i]));
   }
   parSCM0[4] = emodPar[4];
   gMC->Gsvolu("SCM0", "TRD2", fIdTmedArr[kIdSC], parSCM0, 5); // kIdAIR -> kIdSC
@@ -992,13 +1095,13 @@ void AliEMCALv0::Division2X2InScm0(const AliEMCALGeometry * g, const Double_t pa
   parTRAP[8] = parSCM0[1];    // BL2
   parTRAP[9] = parTRAP[8];    // TL2
   parTRAP[10]= 0.0;           // ALP2
-  printf(" ** SCMY ** \n");
-  for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
+  AliDebug(2,Form(" ** SCMY ** \n"));
+          for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
 
   fIdRotm=0;
   gMC->Gsvolu("SCMY", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11); // kIdAIR -> kIdSC
   ypos = +(parTRAP[3]+parTRAP[7])/2.; //
-  printf(" Y shift SCMY inside SCM0 : %7.3f : opt %s\n", ypos, overLapFlagSCMY.Data()); 
+  AliDebug(2,Form(" Y shift SCMY inside SCM0 : %7.3f : opt %s\n", ypos, overLapFlagSCMY.Data())); 
   gMC->Gspos("SCMY", 1, "SCM0", 0.0, ypos, 0.0, fIdRotm,  overLapFlagSCMY.Data()) ;
   // Rotation SCMY around z-axis on 180 degree; x'=-x; y'=-y and z=z
   AliMatrix(fIdRotm, 90.0,180., 90.0, 270.0, 0.0,0.0) ;
@@ -1024,13 +1127,13 @@ void AliEMCALv0::Division2X2InScm0(const AliEMCALGeometry * g, const Double_t pa
   parTRAP[8] = parSCM0[1]/2;  // BL2
   parTRAP[9] = parTRAP[8];    // TL2
   parTRAP[10]= 0.0;           // ALP2
-  printf(" ** SCMX ** \n");
-  for(int i=0; i<11; i++) printf(" par[%2.2i] %9.4f\n", i, parTRAP[i]);
+  AliDebug(2,Form(" ** SCMX ** \n"));
+  for(int i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
 
   fIdRotm=0;
   gMC->Gsvolu("SCMX", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
   xpos = (parTRAP[4]+parTRAP[8])/2.;
-  printf(" X shift SCMX inside SCMX : %7.3f : opt %s\n", xpos, overLapFlagSCMX.Data()); 
+  AliDebug(2,Form(" X shift SCMX inside SCMX : %7.3f : opt %s\n", xpos, overLapFlagSCMX.Data())); 
   gMC->Gspos("SCMX", 1, "SCMY", xpos, 0.0, 0.0, fIdRotm,  overLapFlagSCMX.Data()) ;
   //  AliMatrix(fIdRotm, 90.0,270., 90.0, 0.0, 0.0,0.0); // x'=-y; y'=x; z'=z
   AliMatrix(fIdRotm, 90.0,90., 90.0, -180.0, 0.0,0.0);     // x'=y;  y'=-x; z'=z
@@ -1065,7 +1168,7 @@ void AliEMCALv0::PbInTrapForTrd2(const double *parTRAP, TString name)
   if(name == "SCMX") { // common trapezoid - 11 parameters
     double coef = (parTRAP[8] -  parTRAP[4]) / (2.*parTRAP[0]);
     double xCenterSCMX =  (parTRAP[4] +  parTRAP[8])/2.; // the same for y
-    printf(" xCenterSCMX %8.5f : coef %8.7f \n", xCenterSCMX, coef);
+    AliDebug(2,Form(" xCenterSCMX %8.5f : coef %8.7f \n", xCenterSCMX, coef));
 
     par[2] = g->GetECPbRadThick()/2.; // z
     for(int iz=0; iz<g->GetNECLayers(); iz++){
@@ -1074,16 +1177,16 @@ void AliEMCALv0::PbInTrapForTrd2(const double *parTRAP, TString name)
       xpos   = ypos = par[0] - xCenterSCMX;
     //if(parTRAP[1] < 0.) xpos = -xpos;
       gMC->Gsposp("PBTI", ++nr, name.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
-      printf(" %2.2i xpos %8.5f zpos %6.3f par[0,1] %6.3f |", iz+1, xpos, zpos, par[0]);
-      if(iz%2>0) printf("\n");
+      AliDebug(2,Form(" %2.2i xpos %8.5f zpos %6.3f par[0,1] %6.3f |", iz+1, xpos, zpos, par[0]));
+      if(iz%2>0) AliDebug(2,Form("\n"));
       zpos += fSampleWidth;
     } 
-    printf(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef);
-    printf(" par[1] %9.5f  par[2] %9.5f ypos %9.5f \n", par[1], par[2], ypos); 
+    AliDebug(2,Form(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef));
+    AliDebug(2,Form(" par[1] %9.5f  par[2] %9.5f ypos %9.5f \n", par[1], par[2], ypos)); 
   } else if(name == "SCM0") { // 1-mar-05 ; TRD2 - 5 parameters
-    printf(" SCM0 par = ");
-    for(int i=0; i<5; i++) printf(" %9.5f ", parTRAP[i]);
-    printf("\n zpos %f \n",zpos);
+    AliDebug(2,Form(" SCM0 par = "));
+    for(int i=0; i<5; i++) AliDebug(2,Form(" %9.5f ", parTRAP[i]));
+    AliDebug(2,Form("\n zpos %f \n",zpos));
 
     double tanx = (parTRAP[1] -  parTRAP[0]) / (2.*parTRAP[4]); //  tanx =  tany now
     double tany = (parTRAP[3] -  parTRAP[2]) / (2.*parTRAP[4]), ztmp=0.;
@@ -1096,7 +1199,7 @@ void AliEMCALv0::PbInTrapForTrd2(const double *parTRAP, TString name)
       parPB[2] = parTRAP[2] + tany*ztmp;
       parPB[3] = parPB[2]   + tany*g->GetECPbRadThick();
       gMC->Gsposp("PBTI", ++nr, name.Data(), xpos, ypos, zpos, 0, pbtiChonly.Data(), parPB, 5) ;
-      printf("\n PBTI %2i | zpos %6.3f | par = ", nr, zpos);
+      AliDebug(2,Form("\n PBTI %2i | zpos %6.3f | par = ", nr, zpos));
       /*
       for(int i=0; i<5; i++) printf(" %9.5f ", parPB[i]);
       // individual SC tile
@@ -1109,7 +1212,7 @@ void AliEMCALv0::PbInTrapForTrd2(const double *parTRAP, TString name)
       */
       zpos  += fSampleWidth;
     }
-    printf("\n");
+    AliDebug(2,Form("\n"));
   }
   Info("PbInTrapForTrd2", "Ver. 0.03 : was tested.");
 }
@@ -1120,11 +1223,11 @@ void AliEMCALv0::PbmoInTrd2(const AliEMCALGeometry * g, const Double_t emodPar[5
   // Pb inside Trd2
   Info("PbmoInTrd2"," started : geometry %s ", g->GetName());
   double wallThickness = g->GetPhiModuleSize()/2. -  g->GetPhiTileSize();
-  printf(" wall thickness %7.5f \n", wallThickness);
+  AliDebug(2,Form(" wall thickness %7.5f \n", wallThickness));
   for(int i=0; i<4; i++) {
     parPBMO[i] = emodPar[i] - wallThickness;
-    printf(" %i parPBMO %7.3f emodPar %7.3f : dif %7.3f \n", 
-    i, parPBMO[i],emodPar[i], parPBMO[i]-emodPar[i]);
+    AliDebug(2,Form(" %i parPBMO %7.3f emodPar %7.3f : dif %7.3f \n", 
+                   i, parPBMO[i],emodPar[i], parPBMO[i]-emodPar[i]));
   }
   parPBMO[4] = emodPar[4];
   gMC->Gsvolu("PBMO", "TRD2", fIdTmedArr[kIdPB], parPBMO, 5);
@@ -1132,9 +1235,9 @@ void AliEMCALv0::PbmoInTrd2(const AliEMCALGeometry * g, const Double_t emodPar[5
   // Division 
   if(g->GetNPHIdiv()==2 && g->GetNETAdiv()==2) {
     Division2X2InPbmo(g, parPBMO);
-    printf(" PBMO, division 2X2 | geometry |%s|\n", g->GetName());
+    AliDebug(2,Form(" PBMO, division 2X2 | geometry |%s|\n", g->GetName()));
   } else {
-    printf(" no division PBMO in this geometry |%s|\n", g->GetName());
+    AliDebug(2,Form(" no division PBMO in this geometry |%s|\n", g->GetName()));
     assert(0);
   }
 }
@@ -1153,13 +1256,13 @@ void AliEMCALv0::Division2X2InPbmo(const AliEMCALGeometry * g, const Double_t pa
   double tany = (parPBMO[3] -  parPBMO[2]) / (2.*parPBMO[4]);
   char name[10], named[10], named2[10];
 
-  printf(" PBMO par = ");
-  for(int i=0; i<5; i++) printf(" %9.5f ", parPBMO[i]);
-  printf("\n");
+  AliDebug(2,Form(" PBMO par = "));
+  for(int i=0; i<5; i++) AliDebug(2,Form(" %9.5f ", parPBMO[i]));
+  AliDebug(2,Form("\n"));
 
   parSC[2] = g->GetECScintThick()/2.;
   zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick() + g->GetECScintThick()/2.;
-  printf(" parSC[2] %9.5f \n", parSC[2]);
+  AliDebug(2,Form(" parSC[2] %9.5f \n", parSC[2]));
   for(int iz=0; iz<g->GetNECLayers(); iz++){
     ztmp     = g->GetECPbRadThick() + fSampleWidth*double(iz); // Z for previous PB
     parSC[0] =  parPBMO[0] + tanx*ztmp;
@@ -1168,8 +1271,8 @@ void AliEMCALv0::Division2X2InPbmo(const AliEMCALGeometry * g, const Double_t pa
     sprintf(name,"SC%2.2i", iz+1);
     gMC->Gsvolu(name, "BOX", fIdTmedArr[kIdSC], parSC, 3);
     gMC->Gspos(name, 1, "PBMO", xpos, ypos, zpos, 0, "ONLY") ;
-    printf("%s | zpos %6.3f | parSC[0,1]=(%7.5f,%7.5f) -> ", 
-    name, zpos, parSC[0], parSC[1]);
+    AliDebug(2,Form("%s | zpos %6.3f | parSC[0,1]=(%7.5f,%7.5f) -> ", 
+                   name, zpos, parSC[0], parSC[1]));
     
     sprintf(named,"SY%2.2i", iz+1);
     printf(" %s -> ", named);
@@ -1192,3 +1295,44 @@ AliEMCALShishKebabTrd1Module* AliEMCALv0::GetShishKebabModule(Int_t neta)
   }
   return trd1;
 }
+
+//_____________________________________________________________________________
+void AliEMCALv0::AddAlignableVolumes() const
+{
+  //
+  // Create entries for alignable volumes associating the symbolic volume
+  // name with the corresponding volume path. Needs to be synchronized with
+  // eventual changes in the geometry.
+  //
+
+  TString vpstr1 = "ALIC_1/XEN1_1/SMOD_";
+  TString snstr1 = "EMCAL/FullSupermodule";
+  TString volpath, symname;
+
+  //Int_t nSMod = ((AliEMCALGeometry*)GetGeometry())->GetNumberOfSuperModules();
+  //could use this, but what happens if it is > 10?
+  for (Int_t smodnum=0; smodnum < 10; smodnum++) {
+    symname = snstr1;
+    symname += (smodnum+1);
+    volpath = vpstr1;
+    volpath += (smodnum+1);
+    if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+      AliFatal("Unable to set alignable entry!!");
+  }
+
+  if(GetGeometry()->GetKey110DEG()) {
+    TString vpstr2 = "ALIC_1/XEN1_1/SM10_";
+    TString snstr2 = "EMCAL/HalfSupermodule";    
+    for (Int_t smodnum=0; smodnum < 2; smodnum++) {
+      symname = snstr2;
+      symname += (smodnum+1);
+      volpath = vpstr2;
+      volpath += (smodnum+1);
+      if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
+       AliFatal("Unable to set alignable entry!!");
+    }
+  }
+
+}
+