]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RICH/AliRICHv3.cxx
ResetSDigits added in Hits2SDigits
[u/mrichter/AliRoot.git] / RICH / AliRICHv3.cxx
index 5f051c2ec4441b5f30bb2d8778cabeb5ffa4ae39..bf171d1dc398885f628ef4578f298f616ff1c2fa 100644 (file)
@@ -13,7 +13,6 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
 
 #include <Riostream.h>
 
 #include <TVector3.h>
 #include <TVirtualMC.h>
 #include <TPDGCode.h> //for kNuetron
+#include <TCanvas.h>
+#include <TF1.h>
+#include <TH1.h>
+#include <TH2.h>
+#include <TStyle.h>
 
 #include "AliConst.h"
 #include "AliMagF.h"
 #include "AliPDG.h"
 #include "AliRICHGeometry.h"
-#include "AliRICHResponseV0.h"
+#include "AliRICHResponse.h"
 #include "AliRICHSegmentationV1.h"
 #include "AliRICHv3.h"
 #include "AliRun.h"
+#include "AliMC.h"
 
 ClassImp(AliRICHv3)
 
@@ -45,7 +50,7 @@ AliRICHv3::AliRICHv3(const char *sName, const char *sTitle)
          :AliRICH(sName,sTitle)
 {
 // The named ctor currently creates a single copy of 
-// AliRICHGeometry AliRICHSegmentationV1 AliRICHResponseV0
+// AliRICHGeometry AliRICHSegmentationV1 AliRICHResponse
 // and initialises the corresponding models of all 7 chambers with these stuctures.
 // Note: all chambers share the single copy of models. MUST be changed later (???).
   if(GetDebug())Info("named ctor","Start.");
@@ -54,15 +59,13 @@ AliRICHv3::AliRICHv3(const char *sName, const char *sTitle)
    
    AliRICHGeometry       *pRICHGeometry    =new AliRICHGeometry;           // ??? to be moved to AlRICHChamber::named ctor
    AliRICHSegmentationV1 *pRICHSegmentation=new AliRICHSegmentationV1;     // ??? to be moved to AlRICHChamber::named ctor
-   AliRICHResponseV0     *pRICHResponse    =new AliRICHResponseV0;         // ??? to be moved to AlRICHChamber::named ctor
+   AliRICHResponse       *pRICHResponse    =new AliRICHResponse;           // ??? to be moved to AlRICHChamber::named ctor
      
-   fChambers = new TObjArray(kNCH);
-   for (Int_t i=0; i<kNCH; i++){    
-      fChambers->AddAt(new AliRICHChamber,i); // ??? to be changed to named ctor of AliRICHChamber
+   for (Int_t i=1; i<=kNCH; i++){    
       SetGeometryModel(i,pRICHGeometry);
       SetSegmentationModel(i,pRICHSegmentation);
       SetResponseModel(i,pRICHResponse);
-      ((AliRICHChamber*)fChambers->At(i))->Init(i); // ??? to be removed     
+      C(i)->Init(i); // ??? to be removed     
    }
   if(GetDebug())Info("named ctor","Stop.");
 }//AliRICHv3::ctor(const char *pcName, const char *pcTitle)
@@ -72,714 +75,15 @@ AliRICHv3::~AliRICHv3()
 // Dtor deletes RICH models. In future (???) AliRICHChamber will be responsible for that.
    if(GetDebug()) cout<<ClassName()<<"::dtor()>\n";
       
-   delete GetChamber(0)->GetGeometryModel();
-   delete GetChamber(0)->GetResponseModel();
-   delete GetChamber(0)->GetSegmentationModel();
+   if(fChambers) {
+     AliRICHChamber *ch =C(1); 
+     if(ch) {
+       delete ch->GetGeometryModel();
+       delete ch->GetResponseModel();
+       delete ch->GetSegmentationModel();
+     }
+   }
 }//AliRICHv3::dtor()
-
-
-void AliRICHv3::CreateGeometry()
-{
-// Provides geometry structure for simulation (currently GEANT volumes tree)         
-   if(GetDebug()) cout<<ClassName()<<"::CreateGeometry()>\n";
-
-  AliRICH *pRICH = (AliRICH *) gAlice->GetDetector("RICH"); 
-  AliRICHSegmentationV0*  segmentation;
-  AliRICHGeometry*  geometry;
-  AliRICHChamber*       iChamber;
-
-  iChamber = &(pRICH->Chamber(0));
-  segmentation=(AliRICHSegmentationV0*) iChamber->GetSegmentationModel(0);
-  geometry=iChamber->GetGeometryModel();
-
-  Float_t distance;
-  distance = geometry->GetFreonThickness()/2 + geometry->GetQuartzThickness() + geometry->GetGapThickness();
-  geometry->SetRadiatorToPads(distance);
-    
-  //Opaque quartz thickness
-  Float_t oqua_thickness = .5;
-  //CsI dimensions
-
-
-  Float_t csi_width = segmentation->Npx()*segmentation->Dpx() + segmentation->DeadZone();
-  Float_t csi_length = segmentation->Npy()*segmentation->Dpy() + 2*segmentation->DeadZone();
-  
-  
-  Int_t *idtmed = fIdtmed->GetArray()-999;
-    
-    Int_t i;
-    Float_t zs;
-    Int_t idrotm[1099];
-    Float_t par[3];
-    
-    // --- Define the RICH detector 
-    //     External aluminium box 
-    par[0] = 68.8;
-    par[1] = 13;                 //Original Settings
-    par[2] = 70.86;
-    gMC->Gsvolu("RICH", "BOX ", idtmed[1009], par, 3);
-    
-    //     Air 
-    par[0] = 66.3;
-    par[1] = 13;                 //Original Settings
-    par[2] = 68.35;
-    gMC->Gsvolu("SRIC", "BOX ", idtmed[1000], par, 3);
-    
-    //    Air 2 (cutting the lower part of the box)
-    
-    par[0] = 1.25;
-    par[1] = 3;                 //Original Settings
-    par[2] = 70.86;
-    gMC->Gsvolu("AIR2", "BOX ", idtmed[1000], par, 3);
-
-    //    Air 3 (cutting the lower part of the box)
-    
-    par[0] = 66.3;
-    par[1] = 3;                 //Original Settings
-    par[2] = 1.2505;
-    gMC->Gsvolu("AIR3", "BOX ", idtmed[1000], par, 3);
-    
-    //     Honeycomb 
-    par[0] = 66.3;
-    par[1] = .188;                 //Original Settings
-    par[2] = 68.35;
-    gMC->Gsvolu("HONE", "BOX ", idtmed[1001], par, 3);
-    
-    //     Aluminium sheet 
-    par[0] = 66.3;
-    par[1] = .025;                 //Original Settings
-    par[2] = 68.35;
-    /*par[0] = 66.5;
-    par[1] = .025;
-    par[2] = 63.1;*/
-    gMC->Gsvolu("ALUM", "BOX ", idtmed[1009], par, 3);
-    
-    //     Quartz 
-    par[0] = geometry->GetQuartzWidth()/2;
-    par[1] = geometry->GetQuartzThickness()/2;
-    par[2] = geometry->GetQuartzLength()/2;
-    gMC->Gsvolu("QUAR", "BOX ", idtmed[1002], par, 3);
-    
-    //     Spacers (cylinders) 
-    par[0] = 0.;
-    par[1] = .5;
-    par[2] = geometry->GetFreonThickness()/2;
-    gMC->Gsvolu("SPAC", "TUBE", idtmed[1002], par, 3);
-    
-    //     Feet (freon slabs supports)
-
-    par[0] = .7;
-    par[1] = .3;
-    par[2] = 1.9;
-    gMC->Gsvolu("FOOT", "BOX", idtmed[1009], par, 3);
-
-    //     Opaque quartz 
-    par[0] = geometry->GetQuartzWidth()/2;
-    par[1] = .2;
-    par[2] = geometry->GetQuartzLength()/2;
-    gMC->Gsvolu("OQUA", "BOX ", idtmed[1007], par, 3);
-  
-    //     Frame of opaque quartz
-    par[0] = geometry->GetOuterFreonWidth()/2;
-    par[1] = geometry->GetFreonThickness()/2;
-    par[2] = geometry->GetOuterFreonLength()/2; 
-    gMC->Gsvolu("OQF1", "BOX ", idtmed[1007], par, 3);
-
-    par[0] = geometry->GetInnerFreonWidth()/2;
-    par[1] = geometry->GetFreonThickness()/2;
-    par[2] = geometry->GetInnerFreonLength()/2; 
-    gMC->Gsvolu("OQF2", "BOX ", idtmed[1007], par, 3);
-    
-    
-    //     Freon 
-    par[0] = geometry->GetOuterFreonWidth()/2 - oqua_thickness;
-    par[1] = geometry->GetFreonThickness()/2;
-    par[2] = geometry->GetOuterFreonLength()/2 - 2*oqua_thickness; 
-    gMC->Gsvolu("FRE1", "BOX ", idtmed[1003], par, 3);
-
-    par[0] = geometry->GetInnerFreonWidth()/2 - oqua_thickness;
-    par[1] = geometry->GetFreonThickness()/2;
-    par[2] = geometry->GetInnerFreonLength()/2 - 2*oqua_thickness; 
-    gMC->Gsvolu("FRE2", "BOX ", idtmed[1003], par, 3);
-    
-    //     Methane 
-    par[0] = csi_width/2;
-    par[1] = geometry->GetGapThickness()/2;
-    par[2] = csi_length/2;
-    gMC->Gsvolu("META", "BOX ", idtmed[1004], par, 3);
-    
-    //     Methane gap 
-    par[0] = csi_width/2;
-    par[1] = geometry->GetProximityGapThickness()/2;
-    par[2] = csi_length/2;
-    gMC->Gsvolu("GAP ", "BOX ", idtmed[1008], par, 3);
-    
-    //     CsI photocathode 
-    par[0] = csi_width/2;
-    par[1] = .25;
-    par[2] = csi_length/2;
-    gMC->Gsvolu("CSI ", "BOX ", idtmed[1005], par, 3);
-    
-    //     Anode grid 
-    par[0] = 0.;
-    par[1] = .001;
-    par[2] = 20.;
-    gMC->Gsvolu("GRID", "TUBE", idtmed[1006], par, 3);
-
-    // Wire supports
-    // Bar of metal
-    
-    par[0] = csi_width/2;
-    par[1] = 1.05;
-    par[2] = 1.05;
-    gMC->Gsvolu("WSMe", "BOX ", idtmed[1009], par, 3);
-
-    // Ceramic pick up (base)
-    
-    par[0] =  csi_width/2;
-    par[1] = .25;
-    par[2] = 1.05;
-    gMC->Gsvolu("WSG1", "BOX ", idtmed[1010], par, 3);
-
-    // Ceramic pick up (head)
-
-    par[0] = csi_width/2;
-    par[1] = .1;
-    par[2] = .1;
-    gMC->Gsvolu("WSG2", "BOX ", idtmed[1010], par, 3);
-
-    // Aluminium supports for methane and CsI
-    // Short bar
-
-    par[0] = csi_width/2;
-    par[1] = geometry->GetGapThickness()/2 + .25;
-    par[2] = (68.35 - csi_length/2)/2;
-    gMC->Gsvolu("SMSH", "BOX", idtmed[1009], par, 3);
-    
-    // Long bar
-
-    par[0] = (66.3 - csi_width/2)/2;
-    par[1] = geometry->GetGapThickness()/2 + .25;
-    par[2] = csi_length/2 + 68.35 - csi_length/2;
-    gMC->Gsvolu("SMLG", "BOX", idtmed[1009], par, 3);
-    
-    // Aluminium supports for freon
-    // Short bar
-
-    par[0] = geometry->GetQuartzWidth()/2;
-    par[1] = .3;
-    par[2] = (68.35 - geometry->GetQuartzLength()/2)/2;
-    gMC->Gsvolu("SFSH", "BOX", idtmed[1009], par, 3);
-    
-    // Long bar
-
-    par[0] = (66.3 - geometry->GetQuartzWidth()/2)/2;
-    par[1] = .3;
-    par[2] = geometry->GetQuartzLength()/2 + 68.35 - geometry->GetQuartzLength()/2;
-    gMC->Gsvolu("SFLG", "BOX", idtmed[1009], par, 3);
-    
-    // PCB backplane
-    
-    par[0] = csi_width/2;
-    par[1] = .25;
-    par[2] = csi_length/4 -.5025;
-    gMC->Gsvolu("PCB ", "BOX", idtmed[1011], par, 3);
-
-    
-    // Backplane supports
-
-    // Aluminium slab
-    
-    par[0] = 33.15;
-    par[1] = 2;
-    par[2] = 21.65;
-    gMC->Gsvolu("BACK", "BOX", idtmed[1009], par, 3);
-    
-    // Big hole
-    
-    par[0] = 9.05;
-    par[1] = 2;
-    par[2] = 4.4625;
-    gMC->Gsvolu("BKHL", "BOX", idtmed[1000], par, 3);
-
-    // Small hole
-    
-    par[0] = 5.7;
-    par[1] = 2;
-    par[2] = 4.4625;
-    gMC->Gsvolu("BKHS", "BOX", idtmed[1000], par, 3);
-
-    // Place holes inside backplane support
-
-    gMC->Gspos("BKHS", 1, "BACK", .8 + 5.7,0., .6 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 2, "BACK", -.8 - 5.7,0., .6 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 3, "BACK", .8 + 5.7,0., -.6 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 4, "BACK", -.8 - 5.7,0., -.6 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 5, "BACK", .8 + 5.7,0., .6 + 8.925 + 1.2 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 6, "BACK", -.8 - 5.7,0., .6 + 8.925 + 1.2 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 7, "BACK", .8 + 5.7,0., -.6 - 8.925 - 1.2 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHS", 8, "BACK", -.8 - 5.7,0., -.6 - 8.925 - 1.2 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 1, "BACK", .8 + 11.4 + 1.6 + 9.05, 0., .6 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 2, "BACK", -.8 - 11.4 - 1.6 - 9.05, 0., .6 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 3, "BACK", .8 + 11.4 + 1.6 + 9.05, 0., -.6 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 4, "BACK", -.8 - 11.4 - 1.6 - 9.05, 0., -.6 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 5, "BACK", .8 + 11.4+ 1.6 + 9.05, 0., .6 + 8.925 + 1.2 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 6, "BACK", -.8 - 11.4 - 1.6 - 9.05, 0., .6 + 8.925 + 1.2 + 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 7, "BACK", .8 + 11.4 + 1.6 + 9.05, 0., -.6 - 8.925 - 1.2 - 4.4625, 0, "ONLY");
-    gMC->Gspos("BKHL", 8, "BACK", -.8 - 11.4 - 1.6 - 9.05, 0., -.6 - 8.925 - 1.2 - 4.4625, 0, "ONLY");
-
-    
-  
-    // --- Places the detectors defined with GSVOLU 
-    //     Place material inside RICH 
-    gMC->Gspos("SRIC", 1, "RICH", 0.,0., 0., 0, "ONLY");
-    gMC->Gspos("AIR2", 1, "RICH", 66.3 + 1.2505, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .376 -.5 - 3.35, 0., 0, "ONLY");
-    gMC->Gspos("AIR2", 2, "RICH", -66.3 - 1.2505, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .376 -.5 - 3.35, 0., 0, "ONLY");
-    gMC->Gspos("AIR3", 1, "RICH", 0.,  1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .376 -.5 - 3.35, -68.35 - 1.25, 0, "ONLY");
-    gMC->Gspos("AIR3", 2, "RICH", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .376 -.5 - 3.35,  68.35 + 1.25, 0, "ONLY");
-    
-      
-    gMC->Gspos("ALUM", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .376 -.025, 0., 0, "ONLY");
-    gMC->Gspos("HONE", 1, "SRIC", 0., 1.276- geometry->GetGapThickness()/2  - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .05 - .188, 0., 0, "ONLY");
-    gMC->Gspos("ALUM", 2, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .6 - .025, 0., 0, "ONLY");
-    gMC->Gspos("FOOT", 1, "SRIC", 64.95, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, 36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 2, "SRIC", 21.65, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3 , 36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 3, "SRIC", -21.65, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, 36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 4, "SRIC", -64.95, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, 36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 5, "SRIC", 64.95, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, -36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 6, "SRIC", 21.65, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, -36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 7, "SRIC", -21.65, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, -36.9, 0, "ONLY");
-    gMC->Gspos("FOOT", 8, "SRIC", -64.95, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .3, -36.9, 0, "ONLY");
-    gMC->Gspos("OQUA", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .2, 0., 0, "ONLY");
-    
-    // Supports placing
-
-    // Methane supports
-    gMC->Gspos("SMLG", 1, "SRIC", csi_width/2 + (66.3 - csi_width/2)/2, 1.276 + .25, 0., 0, "ONLY");
-    gMC->Gspos("SMLG", 2, "SRIC", - csi_width/2 - (66.3 - csi_width/2)/2, 1.276 + .25, 0., 0, "ONLY");
-    gMC->Gspos("SMSH", 1, "SRIC", 0., 1.276 + .25, csi_length/2 + (68.35 - csi_length/2)/2, 0, "ONLY");
-    gMC->Gspos("SMSH", 2, "SRIC", 0., 1.276 + .25, - csi_length/2 - (68.35 - csi_length/2)/2, 0, "ONLY");
-
-    //Freon supports
-
-    Float_t supp_y = 1.276 - geometry->GetGapThickness()/2- geometry->GetQuartzThickness() -geometry->GetFreonThickness() - .2 + .3; //y position of freon supports
-
-    gMC->Gspos("SFLG", 1, "SRIC", geometry->GetQuartzWidth()/2 + (66.3 - geometry->GetQuartzWidth()/2)/2, supp_y, 0., 0, "ONLY");
-    gMC->Gspos("SFLG", 2, "SRIC", - geometry->GetQuartzWidth()/2 - (66.3 - geometry->GetQuartzWidth()/2)/2, supp_y, 0., 0, "ONLY");
-    gMC->Gspos("SFSH", 1, "SRIC", 0., supp_y, geometry->GetQuartzLength()/2 + (68.35 - geometry->GetQuartzLength()/2)/2, 0, "ONLY");
-    gMC->Gspos("SFSH", 2, "SRIC", 0., supp_y, - geometry->GetQuartzLength()/2 - (68.35 - geometry->GetQuartzLength()/2)/2, 0, "ONLY");
-    
-    AliMatrix(idrotm[1019], 0., 0., 90., 0., 90., 90.);
-    
-
-    Int_t nspacers = 30;
-    
-    for (i = 0; i < nspacers/3; i++) {
-       zs = -11.6/2 + (TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE1", 10.5, 0., zs, idrotm[1019], "ONLY");  //Original settings 
-    }
-    
-    for (i = nspacers/3; i < (nspacers*2)/3; i++) {
-       zs = -11.6/2 + (nspacers/3 + TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE1", 0, 0., zs, idrotm[1019], "ONLY");  //Original settings 
-    }
-    
-    for (i = (nspacers*2)/3; i < nspacers; ++i) {
-       zs = -11.6/2 + ((nspacers*2)/3 + TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE1", -10.5, 0., zs, idrotm[1019], "ONLY"); //Original settings  
-    }
-
-    for (i = 0; i < nspacers/3; i++) {
-       zs = -11.6/2 + (TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE2", 10.5, 0., zs, idrotm[1019], "ONLY");  //Original settings 
-    }
-    
-    for (i = nspacers/3; i < (nspacers*2)/3; i++) {
-       zs = -11.6/2 + (nspacers/3 + TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE2", 0, 0., zs, idrotm[1019], "ONLY");  //Original settings 
-    }
-    
-    for (i = (nspacers*2)/3; i < nspacers; ++i) {
-       zs = -11.6/2 + ((nspacers*2)/3 + TMath::Abs(nspacers/6) - i) * 12.2;
-       gMC->Gspos("SPAC", i, "FRE2", -10.5, 0., zs, idrotm[1019], "ONLY"); //Original settings  
-    }
-
-    
-    gMC->Gspos("FRE1", 1, "OQF1", 0., 0., 0., 0, "ONLY");
-    gMC->Gspos("FRE2", 1, "OQF2", 0., 0., 0., 0, "ONLY");
-    gMC->Gspos("OQF1", 1, "SRIC", geometry->GetOuterFreonWidth()/2 + geometry->GetInnerFreonWidth()/2 + 2, 1.276 - geometry->GetGapThickness()/2- geometry->GetQuartzThickness() -geometry->GetFreonThickness()/2, 0., 0, "ONLY"); //Original settings (31.3)
-    gMC->Gspos("OQF2", 2, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()/2, 0., 0, "ONLY");          //Original settings 
-    gMC->Gspos("OQF1", 3, "SRIC", - (geometry->GetOuterFreonWidth()/2 + geometry->GetInnerFreonWidth()/2) - 2, 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()/2, 0., 0, "ONLY");       //Original settings (-31.3)
-    gMC->Gspos("QUAR", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness()/2, 0., 0, "ONLY");
-    gMC->Gspos("GAP ", 1, "META", 0., geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 - 0.0001, 0., 0, "ONLY");
-    gMC->Gspos("META", 1, "SRIC", 0., 1.276, 0., 0, "ONLY");
-    gMC->Gspos("CSI ", 1, "SRIC", 0., 1.276 + geometry->GetGapThickness()/2 + .25, 0., 0, "ONLY");
-    printf("CSI pos: %f\n",1.276 + geometry->GetGapThickness()/2 + .25);
-   
-    // Wire support placing
-
-    gMC->Gspos("WSG2", 1, "GAP ", 0., geometry->GetProximityGapThickness()/2 - .1, 0., 0, "ONLY");
-    gMC->Gspos("WSG1", 1, "CSI ", 0., 0., 0., 0, "ONLY");
-    gMC->Gspos("WSMe", 1, "SRIC ", 0., 1.276 + geometry->GetGapThickness()/2 + .5 + 1.05, 0., 0, "ONLY");
-
-    // Backplane placing
-    
-    gMC->Gspos("BACK", 1, "SRIC ", -33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2, 43.3, 0, "ONLY");
-    gMC->Gspos("BACK", 2, "SRIC ", 33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2 , 43.3, 0, "ONLY");
-    gMC->Gspos("BACK", 3, "SRIC ", -33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2, 0., 0, "ONLY");
-    gMC->Gspos("BACK", 4, "SRIC ", 33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2, 0., 0, "ONLY");
-    gMC->Gspos("BACK", 5, "SRIC ", 33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2, -43.3, 0, "ONLY");
-    gMC->Gspos("BACK", 6, "SRIC ", -33.15, 1.276 + geometry->GetGapThickness()/2 + .5 + 2.1 + 2, -43.3, 0, "ONLY");
-
-    // PCB placing
-    
-    gMC->Gspos("PCB ", 1, "SRIC ", 0.,  1.276 + geometry->GetGapThickness()/2 + .5 + 1.05, csi_width/4 + .5025 + 2.5, 0, "ONLY");
-    gMC->Gspos("PCB ", 2, "SRIC ", 0.,  1.276 + geometry->GetGapThickness()/2 + .5 + 1.05, -csi_width/4 - .5025 - 2.5, 0, "ONLY");
-
-// Place chambers into mother volume ALIC
-           
-   Double_t dOffset        = geometry->GetOffset() - geometry->GetGapThickness()/2;  // distance from center of mother volume ALIC to methane
-   
-   Double_t dAlpha         = geometry->GetAlphaAngle(); // angle between centers of chambers - y-z plane
-   Double_t dAlphaRad      = dAlpha*kDegrad;
-   
-   Double_t dBeta          = geometry->GetBetaAngle();   // angle between center of chambers - y-x plane
-   Double_t dBetaRad       = dBeta*kDegrad;
-   
-   Double_t dRotAngle      = geometry->GetRotationAngle();     // the whole RICH is to be rotated in x-y plane + means clockwise rotation 
-   Double_t dRotAngleRad   = dRotAngle*kDegrad;
-    
-   
-   TRotMatrix *pRotMatrix; // tmp pointer
-   
-   TVector3 vector(0,dOffset,0); // Position of chamber 2 without rotation
-    
-// Chamber 0  standalone (no other chambers in this row) 
-   pRotMatrix = new TRotMatrix("rot993","rot993", 0., 0., 0.,0.,0.,0.);
-   const Double_t* r   = pRotMatrix->SetAngles(90., 0., 90.-dAlpha , 90.,  dAlpha, -90.);
-   Double_t* rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1000], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-
-   vector.SetXYZ(0,dOffset,0);  vector.RotateX(dAlphaRad); 
-   vector.RotateZ(-dRotAngleRad);
-   
-   gMC->Gspos("RICH",1,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1000], "ONLY");           
-   Chamber(0).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 0","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 0","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());   
-// Chamber 1   
-   pRotMatrix = new TRotMatrix("rot994","rot994", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., -dBeta, 90., 90.-dBeta,  0., 0.);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1001], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   vector.SetXYZ(0,dOffset,0);  vector.RotateZ(-dBetaRad); 
-   vector.RotateZ(-dRotAngleRad);
-   
-   gMC->Gspos("RICH",2,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1001], "ONLY");           
-   Chamber(1).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 1","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 1","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());
-// Chamber 2   the top one with no Alpha-Beta rotation
-   pRotMatrix = new TRotMatrix("rot995","rot995", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., 0., 90., 90.,  0., 0.);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1002], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   vector.SetXYZ(0,dOffset,0);
-   vector.RotateZ(-dRotAngleRad);
-   gMC->Gspos("RICH",3,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1002], "ONLY");           
-   Chamber(2).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 2","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 2","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());   
-// Chamber 3
-   pRotMatrix = new TRotMatrix("rot996","rot996", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., dBeta, 90., 90.+dBeta,  0., 0.);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1003], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   vector.SetXYZ(0,dOffset,0);  vector.RotateZ(dBetaRad); 
-   vector.RotateZ(-dRotAngleRad);
-   
-   gMC->Gspos("RICH",4,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1003], "ONLY");           
-   Chamber(3).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 3","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 3","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());
-// Chamber 4   
-   pRotMatrix = new TRotMatrix("rot997","rot997", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., 360.-dBeta, 108.2, 90.-dBeta,  18.2, 90.-dBeta);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1004], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   vector.SetXYZ(0,dOffset,0);  vector.RotateZ(-dBetaRad); vector.RotateX(-dAlphaRad); 
-   vector.RotateZ(-dRotAngleRad);
-   
-   gMC->Gspos("RICH",5,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1004], "ONLY");
-   Chamber(4).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 4","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 4","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());
-// Chamber 5   
-   pRotMatrix = new TRotMatrix("rot998","rot998", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., 0., 90.+dAlpha, 90.,  dAlpha, 90.);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1005], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);   
-   vector.SetXYZ(0,dOffset,0); vector.RotateX(-dAlphaRad); 
-   vector.RotateZ(-dRotAngleRad);
-      
-   gMC->Gspos("RICH",6,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1005], "ONLY");           
-   Chamber(5).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 5","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 5","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());
-// Chamber 6          
-   pRotMatrix = new TRotMatrix("rot999","rot999", 0., 0., 0.,0.,0.,0.);
-   r   = pRotMatrix->SetAngles(90., dBeta, 108.2, 90.+dBeta,  18.2, 90.+dBeta);
-   rr  = RotateXY(r, -dRotAngleRad);
-   AliMatrix(idrotm[1006], rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   pRotMatrix->SetAngles(rr[0], rr[1], rr[2], rr[3], rr[4], rr[5]);
-   vector.SetXYZ(0,dOffset,0);  vector.RotateZ(dBetaRad); vector.RotateX(-dAlphaRad); 
-   vector.RotateZ(-dRotAngleRad);
-      
-   gMC->Gspos("RICH",7,"ALIC",vector.X(),vector.Y(),vector.Z(),idrotm[1006], "ONLY");
-   Chamber(6).SetChamberTransform(vector.X(),vector.Y(),vector.Z(),pRotMatrix);
-  if(GetDebug()) Info("CreateGeometry 6","%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",rr[0],rr[1],rr[2],rr[3],rr[4],rr[5]);
-  if(GetDebug()) Info("CreateGeometry 6","x=%8.3f y=%8.3f z=%8.3f",vector.X(),vector.Y(),vector.Z());
-      
-}//void AliRICHv3::CreateGeometry()
-//______________________________________________________________________________
-void AliRICHv3::Init()
-{//Makes nothing for a while   
-  if(GetDebug())Info("Init","Start.");
-  if(GetDebug())Info("Init","Stop.");    
-}
-//______________________________________________________________________________
-void AliRICHv3::BuildGeometry()    
-{//Provides geometry structure for event display (ROOT TNode tree)
-  if(GetDebug())Info("BuildGeometry","Start.");
-  
-    TNode *node, *subnode, *top;
-    
-    const int kColorRICH = kRed;
-    //
-    top=gAlice->GetGeometry()->GetNode("alice");
-
-    AliRICH *pRICH = (AliRICH *) gAlice->GetDetector("RICH"); 
-    AliRICHChamber*       iChamber;
-    AliRICHGeometry*  geometry;
-    iChamber = &(pRICH->Chamber(0));
-    AliRICHSegmentationV1* segmentation=(AliRICHSegmentationV1*) iChamber->GetSegmentationModel(0);
-    geometry=iChamber->GetGeometryModel();
-    
-    new TBRIK("S_RICH","S_RICH","void",71.09999,11.5,73.15);
-
-    Float_t padplane_width = segmentation->GetPadPlaneWidth();
-    Float_t padplane_length = segmentation->GetPadPlaneLength();
-
-
-    new TBRIK("PHOTO","PHOTO","void", padplane_width/2,.1,padplane_length/2);
-
-// Chamber 0             
-    top->cd();
-    node = new TNode("RICH1","RICH1","S_RICH",Chamber(0).GetX(),Chamber(0).GetY(),Chamber(0).GetZ(),"rot993");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node);
-
-// Chamber 1
-    top->cd(); 
-    node = new TNode("RICH2","RICH2","S_RICH",Chamber(1).GetX(),Chamber(1).GetY(),Chamber(1).GetZ(),"rot994");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node);
-
-// Chamber 2
-    top->cd();
-    node = new TNode("RICH3","RICH3","S_RICH",Chamber(2).GetX(),Chamber(2).GetY(),Chamber(2).GetZ(),"rot995");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node);
-    
-// Chamber 3
-    top->cd();
-    node = new TNode("RICH4","RICH4","S_RICH",Chamber(3).GetX(),Chamber(3).GetY(),Chamber(3).GetZ(),"rot996");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node);
-
-// Chamber 4
-    top->cd();
-    node = new TNode("RICH5","RICH5","S_RICH",Chamber(4).GetX(),Chamber(4).GetY(),Chamber(4).GetZ(),"rot997");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node);
-
-// Chamber 5
-    top->cd();
-    node = new TNode("RICH6","RICH6","S_RICH",Chamber(5).GetX(),Chamber(5).GetY(),Chamber(5).GetZ(),"rot998");
-    node->SetLineColor(kColorRICH);
-    fNodes->Add(node);node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-
-// Chamber 6
-    top->cd();
-    node = new TNode("RICH7","RICH7","S_RICH",Chamber(6).GetX(),Chamber(6).GetY(),Chamber(6).GetZ(),"rot999");
-    node->SetLineColor(kColorRICH);
-    node->cd();
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,padplane_length/2 + segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",padplane_width + segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",0,5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    subnode = new TNode("PHOTO1","PHOTO1","PHOTO",-padplane_width - segmentation->DeadZone(),5,-padplane_length/2 - segmentation->DeadZone()/2,"");
-    subnode->SetLineColor(kGreen);
-    fNodes->Add(subnode);
-    fNodes->Add(node); 
-  if(GetDebug())Info("BuildGeometry","Stop.");    
-}//AliRICHv3::BuildGeometry()
-//______________________________________________________________________________
-Double_t* AliRICHv3::RotateXY(const Double_t* r, Double_t a)
-{
-    // Rotatation in xy-plane
-    // by angle a
-    // The resulting rotation matrix is given back in the G3 notation. 
-    Double_t* rr = new Double_t[6];
-    Double_t m[9];
-    Int_t i,j,k;
-    
-    for (i = 0; i < 3; i++) {
-       j = 3*i;
-       m[j]   = r[j] * TMath::Cos(a) - r[j+1] * TMath::Sin(a);
-       m[j+1] = r[j] * TMath::Sin(a) + r[j+1] * TMath::Cos(a);
-       m[j+2] = r[j+2];
-    }
-    
-    for (i = 0; i < 3; i++) {
-           j = 3*i;
-           k = 2*i;
-           rr[k]    = TMath::ACos(m[j+2])        * kRaddeg;
-           rr[k+1]  = TMath::ATan2(m[j+1], m[j]) * kRaddeg;
-    }
-    return rr;
-}//Double_t* AliRICHv3::RotateXY(const Double_t* r, Double_t a)
 //______________________________________________________________________________
 void AliRICHv3::StepManager()
 {//Full Step Manager
@@ -800,13 +104,12 @@ void AliRICHv3::StepManager()
     Float_t        theta,phi;
     Float_t        destep, step;
     Double_t        ranf[2];
-    Int_t          nPads=1;
     Float_t        coscerenkov;
     static Float_t eloss, xhit, yhit, tlength;
     const  Float_t kBig=1.e10;
        
     TClonesArray &lhits = *fHits;
-    TParticle *current = (TParticle*)(*gAlice->Particles())[gAlice->GetCurrentTrackNumber()];
+    TParticle *current = (TParticle*)(*gAlice->GetMCApp()->Particles())[gAlice->GetMCApp()->GetCurrentTrackNumber()];
 
  //if (current->Energy()>1)
    //{
@@ -857,7 +160,7 @@ void AliRICHv3::StepManager()
                      //printf("Second Mother:%d\n",current->GetSecondMother());
                      
                      ckovData[10] = mother;
-                     ckovData[11] = gAlice->GetCurrentTrackNumber();
+                     ckovData[11] = gAlice->GetMCApp()->GetCurrentTrackNumber();
                      ckovData[12] = 1;             //Media where photon was produced 1->Freon, 2->Quarz
                      //printf("Produced in FREO\n");
                      fCkovNumber++;
@@ -901,7 +204,7 @@ void AliRICHv3::StepManager()
                        if (ranf[0] > t) {
                          gMC->StopTrack();
                          ckovData[13] = 5;
-                         AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
+                         AddCerenkov(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
                          //printf("Added One (1)!\n");
                          //printf("Lost one in grid\n");
                        }
@@ -931,7 +234,7 @@ void AliRICHv3::StepManager()
                            if (ranf[0] < t) {
                              gMC->StopTrack();
                              ckovData[13] = 6;
-                             AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
+                             AddCerenkov(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
                                
                              //printf("Added One (2)!\n");
                              //printf("Lost by Fresnel\n");
@@ -979,7 +282,7 @@ void AliRICHv3::StepManager()
                        ckovData[13]=16;
                      }
                      gMC->StopTrack();
-                     AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
+                     AddCerenkov(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
                      //printf("Added One (3)!\n");
                      //printf("Added cerenkov %d\n",fCkovNumber);
                    } //absorption question 
@@ -989,7 +292,7 @@ void AliRICHv3::StepManager()
                    else if (procs[i] == kPStop) {                 //is it below energy treshold?
                      ckovData[13]=21;
                      gMC->StopTrack();
-                     AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
+                     AddCerenkov(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
                      //printf("Added One (4)!\n");
                    }   // energy treshold question         
                  }  //number of mechanisms cycle
@@ -1079,17 +382,13 @@ void AliRICHv3::StepManager()
                    cherenkovLoss  += destep;
                    ckovData[7]=cherenkovLoss;
                    
-                   //nPads = Hits2SDigits(localPos[0],localPos[2],cherenkovLoss,idvol,kCerenkov);//for photons in CsI kir
+                   ckovData[17] = Hits2SDigits(localPos[0],localPos[2],cherenkovLoss,idvol,kPhoton);//for photons in CsI 
                                    
                    if (fNsdigits > (Int_t)ckovData[8]) {
                        ckovData[8]= ckovData[8]+1;
                        ckovData[9]= (Float_t) fNsdigits;
                    }
 
-                   //printf("Cerenkov loss: %f\n", cherenkovLoss);
-
-                   ckovData[17] = nPads;
-                   //printf("nPads:%d",nPads);
                    
                    //TClonesArray *Hits = RICH->Hits();
                    AliRICHhit *mipHit =  (AliRICHhit*) (fHits->UncheckedAt(0));
@@ -1119,8 +418,8 @@ void AliRICHv3::StepManager()
                      }
                    //if (sector != -1)
                    //{
-                   AddHit(gAlice->GetCurrentTrackNumber(),vol,ckovData);
-                   AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
+                   AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
+                   AddCerenkov(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);
                    //printf("Added One (5)!\n");
                    //}
                }
@@ -1133,9 +432,7 @@ void AliRICHv3::StepManager()
 
     /**********************************************Charged particles treatment*************************************/
 
-    else if (gMC->TrackCharge())
-    //else if (1 == 1)
-      {
+    else if (gMC->TrackCharge()){
 //If MIP
        /*if (gMC->IsTrackEntering())
          {                
@@ -1154,7 +451,7 @@ void AliRICHv3::StepManager()
            fFreonProd=1;
          }
 
-       if (gMC->VolId("GAP ")== gMC->CurrentVolID(copy)) {
+       if (gMC->VolId("GAP ")== gMC->CurrentVolID(copy)) {//is in GAP?
 // Get current particle id (ipart), track position (pos)  and momentum (mom)
            
            gMC->CurrentVolOffID(3,copy);
@@ -1254,9 +551,7 @@ void AliRICHv3::StepManager()
                    {
                      if(gMC->TrackPid() == kNeutron)
                        printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n");
-                     //nPads = Hits2SDigits(xhit,yhit,eloss,idvol,kMip); //for MIP kir
-                     hits[17] = nPads;
-                     //printf("nPads:%d",nPads);
+                     hits[17] = Hits2SDigits(xhit,yhit,eloss,idvol,kMip); //for MIP 
                    }
                }
                
@@ -1268,27 +563,19 @@ void AliRICHv3::StepManager()
                }
                
                //if(sector !=-1)
-               new(lhits[fNhits++]) AliRICHhit(fIshunt,gAlice->GetCurrentTrackNumber(),vol,hits);
+               new(lhits[fNhits++]) AliRICHhit(fIshunt,gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,hits);
                eloss = 0; 
                //
                // Check additional signal generation conditions 
                // defined by the segmentation
                // model (boundary crossing conditions) 
-           } else if 
-          //PH         (((AliRICHChamber*) (*fChambers)[idvol])
-               (((AliRICHChamber*)fChambers->At(idvol))
-                ->SigGenCond(localPos[0], localPos[2], localPos[1]))
-           {
-          //PH         ((AliRICHChamber*) (*fChambers)[idvol])
-               ((AliRICHChamber*)fChambers->At(idvol))
-                   ->SigGenInit(localPos[0], localPos[2], localPos[1]);
+           }else if(((AliRICHChamber*)fChambers->At(idvol))->SigGenCond(localPos[0], localPos[2], localPos[1])){
+               ((AliRICHChamber*)fChambers->At(idvol))->SigGenInit(localPos[0], localPos[2], localPos[1]);
                if (eloss > 0) 
                  {
                    if(gMC->TrackPid() == kNeutron)
                      printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n");
-                   //nPads = Hits2SDigits(xhit,yhit,eloss,idvol,kMip);//for N kir
-                   hits[17] = nPads;
-                   //printf("Npads:%d",NPads);
+                   hits[17] = Hits2SDigits(xhit,yhit,eloss,idvol,kMip);//for n
                  }
                xhit     = localPos[0];
                yhit     = localPos[2]; 
@@ -1300,7 +587,30 @@ void AliRICHv3::StepManager()
                eloss   += destep;
                tlength += step ;
            }
-       }
-      }
+       }//is in GAP?
+      }//is MIP?
     /*************************************************End of MIP treatment**************************************/
 }//void AliRICHv3::StepManager()
+//__________________________________________________________________________________________________
+Int_t AliRICHv3::Hits2SDigits(Float_t xhit,Float_t yhit,Float_t eloss, Int_t idvol, ResponseType res)
+{//calls the charge disintegration method of the current chamber and adds all generated sdigits to the list of digits
+   
+   Float_t newclust[4][500];
+   Int_t clhits[5];
+   Int_t iNdigits;
+   clhits[0]=fNhits+1;
+   
+  ((AliRICHChamber*)fChambers->At(idvol))->DisIntegration(eloss, xhit, yhit, iNdigits,newclust, res);
+    
+  for (Int_t i=0; i<iNdigits; i++) {
+    if (Int_t(newclust[0][i]) > 0) {
+            clhits[1] = Int_t(newclust[0][i]);//  Cluster Charge
+            clhits[2] = Int_t(newclust[1][i]);//  Pad: ix
+            clhits[3] = Int_t(newclust[2][i]);//  Pad: iy
+            clhits[4] = Int_t(newclust[3][i]);//  Pad: chamber sector
+            AddSpecialOld(clhits);
+        }
+    }
+  return iNdigits;
+}//Int_t AliRICHv3::Hits2SDigits(Float_t xhit,Float_t yhit,Float_t eloss, Int_t idvol, ResponseType res)
+//__________________________________________________________________________________________________