]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibraFillHisto.cxx
The present commit corresponds to an important change in the way the
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibraFillHisto.cxx
index 70e77b400195e5153955b3a8c38c7f2e12544d90..645d2bc53b81e451858f3f799a48f3cf7afc8106 100644 (file)
@@ -1,17 +1,17 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
+//**************************************************************************
+// * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+// *                                                                        *
+// * Author: The ALICE Off-line Project.                                    *
+// * Contributors are mentioned in the code where appropriate.              *
+//   *                                                                        *
+//   * Permission to use, copy, modify and distribute this software and its   *
+//  * documentation strictly for non-commercial purposes is hereby granted   *
+//    * without fee, provided that the above copyright notice appears in all   *
+//    * copies and that both the copyright notice and this permission notice   *
+//* appear in the supporting documentation. The authors make no claims     *
+//* about the suitability of this software for any purpose. It is          *
+//* provided "as is" without express or implied warranty.                  *
+//**************************************************************************/
 
 /* $Id$ */
 
@@ -62,6 +62,7 @@
 #include "AliTRDtrigParam.h"
 #include "AliTRDpadPlane.h"
 #include "AliTRDcluster.h"
+#include "AliTRDtrack.h"
 #include "AliTRDtrackV1.h"
 #include "AliTRDrawStreamBase.h"
 #include "AliRawReader.h"
@@ -120,6 +121,7 @@ void AliTRDCalibraFillHisto::Terminate()
 AliTRDCalibraFillHisto::AliTRDCalibraFillHisto()
   :TObject()
   ,fGeo(0)
+  ,fIsHLT(kFALSE)
   ,fMcmCorrectAngle(kFALSE)
   ,fCH2dOn(kFALSE)
   ,fPH2dOn(kFALSE)
@@ -131,13 +133,17 @@ AliTRDCalibraFillHisto::AliTRDCalibraFillHisto()
   ,fRelativeScale(0)
   ,fThresholdClusterPRF2(15.0)
   ,fLimitChargeIntegration(kFALSE)
+  ,fFillWithZero(kFALSE)
+  ,fNormalizeNbOfCluster(kFALSE)
+  ,fMaxCluster(0)
+  ,fNbMaxCluster(0)
   ,fCalibraMode(new AliTRDCalibraMode())
   ,fDebugStreamer(0)
   ,fDebugLevel(0)
   ,fDetectorPreviousTrack(-1)
   ,fMCMPrevious(-1)
   ,fROBPrevious(-1)
-  ,fNumberClusters(18)
+  ,fNumberClusters(1)
   ,fNumberClustersf(30)
   ,fProcent(6.0)
   ,fDifference(17)
@@ -151,6 +157,7 @@ AliTRDCalibraFillHisto::AliTRDCalibraFillHisto()
   ,fPHPlace(0x0)
   ,fPHValue(0x0)
   ,fGoodTracklet(kTRUE)
+  ,fLinearFitterTracklet(0x0)
   ,fEntriesCH(0x0)
   ,fEntriesLinearFitter(0x0)
   ,fCalibraVector(0x0)
@@ -183,6 +190,7 @@ AliTRDCalibraFillHisto::AliTRDCalibraFillHisto()
 AliTRDCalibraFillHisto::AliTRDCalibraFillHisto(const AliTRDCalibraFillHisto &c)
   :TObject(c)
   ,fGeo(0)
+  ,fIsHLT(c.fIsHLT)
   ,fMcmCorrectAngle(c.fMcmCorrectAngle)
   ,fCH2dOn(c.fCH2dOn)
   ,fPH2dOn(c.fPH2dOn)
@@ -194,6 +202,10 @@ AliTRDCalibraFillHisto::AliTRDCalibraFillHisto(const AliTRDCalibraFillHisto &c)
   ,fRelativeScale(c.fRelativeScale)
   ,fThresholdClusterPRF2(c.fThresholdClusterPRF2)
   ,fLimitChargeIntegration(c.fLimitChargeIntegration)
+  ,fFillWithZero(c.fFillWithZero)
+  ,fNormalizeNbOfCluster(c.fNormalizeNbOfCluster)
+  ,fMaxCluster(c.fMaxCluster)
+  ,fNbMaxCluster(c.fNbMaxCluster)
   ,fCalibraMode(0x0)
   ,fDebugStreamer(0)
   ,fDebugLevel(c.fDebugLevel)
@@ -214,6 +226,7 @@ AliTRDCalibraFillHisto::AliTRDCalibraFillHisto(const AliTRDCalibraFillHisto &c)
   ,fPHPlace(0x0)
   ,fPHValue(0x0)
   ,fGoodTracklet(c.fGoodTracklet)
+  ,fLinearFitterTracklet(0x0)
   ,fEntriesCH(0x0)
   ,fEntriesLinearFitter(0x0)
   ,fCalibraVector(0x0)
@@ -268,6 +281,18 @@ AliTRDCalibraFillHisto::~AliTRDCalibraFillHisto()
   if ( fCalDetGain )  delete fCalDetGain;
   if ( fCalROCGain )  delete fCalROCGain;
 
+  if( fLinearFitterTracklet ) { delete fLinearFitterTracklet; }
+  
+  delete [] fPHPlace;
+  delete [] fPHValue;
+  delete [] fEntriesCH;
+  delete [] fEntriesLinearFitter;
+  delete [] fAmpTotal;
+  
+  for(Int_t idet=0; idet<AliTRDgeometry::kNdet; idet++){ 
+    TLinearFitter *f = (TLinearFitter*)fLinearFitterArray.At(idet);
+    if(f) { delete f;}
+  }
   if (fGeo) {
     delete fGeo;
   }
@@ -293,6 +318,7 @@ void AliTRDCalibraFillHisto::DestroyDebugStreamer()
   //
 
   if ( fDebugStreamer ) delete fDebugStreamer;
+  fDebugStreamer = 0x0;
  
 }
 //_____________________________________________________________________________
@@ -340,14 +366,25 @@ Bool_t AliTRDCalibraFillHisto::Init2Dhistos()
   }
 
   // Some parameters
-  fTimeMax = cal->GetNumberOfTimeBins();
-  fSf      = parCom->GetSamplingFrequency();
-  fRelativeScale = 20;
+  fTimeMax            = cal->GetNumberOfTimeBins();
+  fSf                 = parCom->GetSamplingFrequency();
+  if(!fNormalizeNbOfCluster) fRelativeScale = 20.0;
+  else fRelativeScale = 1.18;
+  fNumberClustersf    = fTimeMax;
+  fNumberClusters     = (Int_t)(0.5*fTimeMax);
  
-  //calib object from database used for reconstruction
-  if(fCalDetGain) delete fCalDetGain;
-  fCalDetGain  = new AliTRDCalDet(*(cal->GetGainFactorDet()));
+  // Init linear fitter
+  if(!fLinearFitterTracklet) {
+    fLinearFitterTracklet = new TLinearFitter(2,"pol1");
+    fLinearFitterTracklet->StoreData(kTRUE);
+  }
 
+  //calib object from database used for reconstruction
+  if( fCalDetGain ){ 
+    fCalDetGain->~AliTRDCalDet();
+    new(fCalDetGain) AliTRDCalDet(*(cal->GetGainFactorDet()));
+  }else fCalDetGain = new AliTRDCalDet(*(cal->GetGainFactorDet()));
+  
   // Calcul Xbins Chambd0, Chamb2
   Int_t ntotal0 = CalculateTotalNumberOfBins(0);
   Int_t ntotal1 = CalculateTotalNumberOfBins(1);
@@ -484,7 +521,7 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistograms(AliTRDtrack *t)
          
       //If the same track, then look if the previous detector is in
       //the same plane, if yes: not a good track
-      if ((GetPlane(detector) == GetPlane(fDetectorPreviousTrack))) {
+      if ((GetLayer(detector) == GetLayer(fDetectorPreviousTrack))) {
        return kFALSE;
       }
       
@@ -532,9 +569,13 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistograms(AliTRDtrack *t)
       }
       
       // Get calib objects
-      if( fCalROCGain ) delete fCalROCGain;
-      fCalROCGain = new AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
-       
+      if( fCalROCGain ){ 
+       if(!fIsHLT){
+         fCalROCGain->~AliTRDCalROC();
+         new(fCalROCGain) AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
+       }
+      }else fCalROCGain = new AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
+      
     }
     
     // Reset the detectbjobsor
@@ -545,7 +586,7 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistograms(AliTRDtrack *t)
     ///////////////////////////////////////
     Int_t row = cl->GetPadRow();
     Int_t col = cl->GetPadCol();
-    CheckGoodTracklet(detector,row,col);
+    CheckGoodTrackletV1(cl);
     Int_t     group[2] = {0,0};
     if(fCH2dOn)  group[0]  = CalculateCalibrationGroup(0,row,col);
     if(fPH2dOn)  group[1]  = CalculateCalibrationGroup(1,row,col);
@@ -598,8 +639,15 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistogramsV1(AliTRDtrackV1 *t)
 
   
   const AliTRDseedV1 *tracklet = 0x0;          // tracklet per plane
-  AliTRDcluster *cl      = 0x0;          // cluster attached now to the tracklet
+  AliTRDcluster *cl      = 0x0;                // cluster attached now to the tracklet
+  Bool_t         newtr   = kTRUE;              // new track
   
+  // Get cal
+  AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
+  if (!cal) {
+    AliInfo("Could not get calibDB");
+    return kFALSE;
+  }
   
   ///////////////////////////
   // loop over the tracklet
@@ -614,47 +662,50 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistogramsV1(AliTRDtrackV1 *t)
     //////////////////////////////////////////
     // localisation of the tracklet and dqdl
     //////////////////////////////////////////
-    Int_t plane    = tracklet->GetPlane();
+    Int_t layer    = tracklet->GetPlane();
     Int_t ic = 0;
     while(!(cl = tracklet->GetClusters(ic++))) continue;
     Int_t detector = cl->GetDetector();
     if (detector != fDetectorPreviousTrack) {
-      // don't use the rest of this track if in the same plane
-      if ((plane == GetPlane(fDetectorPreviousTrack))) {
-       break;
+      // if not a new track
+      if(!newtr){
+       // don't use the rest of this track if in the same plane
+       if (layer == GetLayer(fDetectorPreviousTrack)) {
+         //printf("bad tracklet, same layer for detector %d\n",detector);
+         break;
+       }
       }
       //Localise the detector bin
       LocalisationDetectorXbins(detector);
-      // Get cal
-      AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
-      if (!cal) {
-       AliInfo("Could not get calibDB");
-       return kFALSE;
-      }
       // Get calib objects
-      if( fCalROCGain ) delete fCalROCGain;
-      fCalROCGain = new AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
+      if( fCalROCGain ){ 
+       if(!fIsHLT){    
+         fCalROCGain->~AliTRDCalROC();
+         new(fCalROCGain) AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
+       }
+      }else fCalROCGain = new AliTRDCalROC(*(cal->GetGainFactorROC(detector)));
+      
       // reset
       fDetectorPreviousTrack = detector;
     }
-
+    newtr = kFALSE;
 
     ////////////////////////////
     // loop over the clusters
     ////////////////////////////
     Int_t nbclusters = 0;
-    for(int ic=0; ic<AliTRDseed::knTimebins; ic++){
-      if(!(cl = tracklet->GetClusters(ic))) continue;
+    for(int jc=0; jc<AliTRDseed::knTimebins; jc++){
+      if(!(cl = tracklet->GetClusters(jc))) continue;
       nbclusters++;
       
       // Store the info bis of the tracklet
       Int_t row = cl->GetPadRow();
       Int_t col = cl->GetPadCol();
-      CheckGoodTracklet(detector,row,col);
+      CheckGoodTrackletV1(cl);
       Int_t     group[2] = {0,0};
       if(fCH2dOn)  group[0]  = CalculateCalibrationGroup(0,row,col);
       if(fPH2dOn)  group[1]  = CalculateCalibrationGroup(1,row,col);
-      StoreInfoCHPHtrack(cl, tracklet->GetdQdl(ic),group,row,col);
+      StoreInfoCHPHtrack(cl, tracklet->GetdQdl(jc),group,row,col);
     }
     
     ////////////////////////////////////////
@@ -678,10 +729,8 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistogramsV1(AliTRDtrackV1 *t)
       if(pass && fPRF2dOn) HandlePRFtrackletV1(tracklet,nbclusters);
                
     } // if a good tracklet
   }
-
-
+  
   return kTRUE;
   
 }
@@ -706,8 +755,8 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtracklet(AliTRDtrack *t, Int_t index
   ////////////////
   Int_t    detector                   = ((AliTRDcluster *) t->GetCluster(index0))->GetDetector(); //detector
   // parameters of the track
-  Double_t snp                        = t->GetSnpPlane(GetPlane(detector)); // sin angle in the plan yx track
-  Double_t tgl                        = t->GetTglPlane(GetPlane(detector)); // dz/dl and not dz/dx!  
+  Double_t snp                        = t->GetSnpPlane(GetLayer(detector)); // sin angle in the plan yx track
+  Double_t tgl                        = t->GetTglPlane(GetLayer(detector)); // dz/dl and not dz/dx!  
   Double_t tnp                        = 0.0;                                // tan angle in the plan xy track
   if( TMath::Abs(snp) <  1.){
     tnp = snp / (TMath::Sqrt(1-(snp*snp)));
@@ -716,17 +765,15 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtracklet(AliTRDtrack *t, Int_t index
   // tilting pad and cross row
   Int_t    crossrow                   = 0;                                  // if it crosses a pad row
   Int_t    rowp                       = -1;                                 // if it crosses a pad row
-  AliTRDpadPlane *padplane            = fGeo->GetPadPlane(GetPlane(detector),GetChamber(detector));
+  AliTRDpadPlane *padplane            = fGeo->GetPadPlane(GetLayer(detector),GetStack(detector));
   Double_t tiltingangle               = padplane->GetTiltingAngle();        // tiltingangle of the pad      
   Float_t  tnt                        = TMath::Tan(tiltingangle/180.*TMath::Pi()); // tan tiltingangle
   // linear fit
-  TLinearFitter linearFitterTracklet  = TLinearFitter(2,"pol1");            // TLinearFitter per tracklet
+  fLinearFitterTracklet->ClearPoints();  
   Double_t dydt                       = 0.0;                                // dydt tracklet after straight line fit
   Double_t errorpar                   = 0.0;                                // error after straight line fit on dy/dt
   Double_t pointError                 = 0.0;                                // error after straight line fit 
   Int_t     nbli                      = 0;                                  // number linear fitter points
-  linearFitterTracklet.StoreData(kFALSE);
-  linearFitterTracklet.ClearPoints();
   
   //////////////////////////////
   // loop over clusters
@@ -744,7 +791,7 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtracklet(AliTRDtrack *t, Int_t index
     if(k==0) rowp                     = row;
     if(row != rowp) crossrow          = 1;
 
-    linearFitterTracklet.AddPoint(&timeis,ycluster,1);
+    fLinearFitterTracklet->AddPoint(&timeis,ycluster,1);
     nbli++;
 
   }
@@ -752,14 +799,18 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtracklet(AliTRDtrack *t, Int_t index
   //////////////////////////////
   // linear fit
   //////////////////////////////
-  if(nbli <= 2) return kFALSE; 
+  if(nbli <= 2){ 
+    fLinearFitterTracklet->ClearPoints();  
+    return kFALSE; 
+  }
   TVectorD pars;
-  linearFitterTracklet.Eval();
-  linearFitterTracklet.GetParameters(pars);
-  pointError  =  TMath::Sqrt(linearFitterTracklet.GetChisquare()/nbli);
-  errorpar    =  linearFitterTracklet.GetParError(1)*pointError;
+  fLinearFitterTracklet->Eval();
+  fLinearFitterTracklet->GetParameters(pars);
+  pointError  =  TMath::Sqrt(fLinearFitterTracklet->GetChisquare()/(nbli-2));
+  errorpar    =  fLinearFitterTracklet->GetParError(1)*pointError;
   dydt        = pars[1]; 
-
+  fLinearFitterTracklet->ClearPoints();  
+    
   /////////////////////////////
   // debug
   ////////////////////////////
@@ -790,13 +841,13 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtracklet(AliTRDtrack *t, Int_t index
 
 
     Int_t nbclusters = index1-index0;
-    Int_t plane      = GetPlane(fDetectorPreviousTrack);
+    Int_t layer      = GetLayer(fDetectorPreviousTrack);
 
     (* fDebugStreamer) << "FindP1TrackPHtracklet1"<<
       //"snpright="<<snpright<<
       "nbclusters="<<nbclusters<<
       "detector="<<fDetectorPreviousTrack<<
-      "plane="<<plane<<
+      "layer="<<layer<<
       "\n";     
 
   }
@@ -843,7 +894,6 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
   ////////////
   //Variables
   ////////////
-  TLinearFitter linearFitterTracklet  = TLinearFitter(2,"pol1");            // TLinearFitter per tracklet
   // results of the linear fit
   Double_t dydt                       = 0.0;                                // dydt tracklet after straight line fit
   Double_t errorpar                   = 0.0;                                // error after straight line fit on dy/dt
@@ -852,9 +902,8 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
   Int_t    crossrow                   = 0;                                  // if it crosses a pad row
   Int_t    rowp                       = -1;                                 // if it crosses a pad row
   Float_t  tnt                        = tracklet->GetTilt();                // tan tiltingangle
-
-  linearFitterTracklet.StoreData(kFALSE);
-  linearFitterTracklet.ClearPoints();
+  fLinearFitterTracklet->ClearPoints();  
   
   ///////////////////////////////////////////
   // Take the parameters of the track
@@ -893,7 +942,7 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
     if(rowp==-1) rowp                 = row;
     if(row != rowp) crossrow          = 1;
 
-    linearFitterTracklet.AddPoint(&timeis,ycluster,1);
+    fLinearFitterTracklet->AddPoint(&timeis,ycluster,1);
     nbli++;  
 
   }
@@ -901,12 +950,18 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
   ////////////////////////////////////
   // Do the straight line fit now
   ///////////////////////////////////
+  if(nbli <= 2){ 
+    fLinearFitterTracklet->ClearPoints();  
+    return kFALSE; 
+  }
   TVectorD pars;
-  linearFitterTracklet.Eval();
-  linearFitterTracklet.GetParameters(pars);
-  pointError  =  TMath::Sqrt(linearFitterTracklet.GetChisquare()/nbli);
-  errorpar    =  linearFitterTracklet.GetParError(1)*pointError;
+  fLinearFitterTracklet->Eval();
+  fLinearFitterTracklet->GetParameters(pars);
+  pointError  =  TMath::Sqrt(fLinearFitterTracklet->GetChisquare()/(nbli-2));
+  errorpar    =  fLinearFitterTracklet->GetParError(1)*pointError;
   dydt        = pars[1]; 
+  //printf("chis %f, nbli %d, pointError %f, parError %f, errorpar %f\n",fLinearFitterTracklet->GetChisquare(),nbli,pointError,fLinearFitterTracklet->GetParError(1),errorpar);
+  fLinearFitterTracklet->ClearPoints();  
  
   ////////////////////////////////
   // Debug stuff
@@ -922,13 +977,14 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
     } 
     
 
-    Int_t plane = GetPlane(fDetectorPreviousTrack);
-        
+    Int_t layer = GetLayer(fDetectorPreviousTrack);
+           
     (* fDebugStreamer) << "FindP1TrackPHtrackletV1"<<
       //"snpright="<<snpright<<
+      "nbli="<<nbli<<
       "nbclusters="<<nbclusters<<
       "detector="<<fDetectorPreviousTrack<<
-      "plane="<<plane<<
+      "layer="<<layer<<
       "snp="<<snp<<
       "tnp="<<tnp<<
       "tgl="<<tgl<<
@@ -948,7 +1004,7 @@ Bool_t AliTRDCalibraFillHisto::FindP1TrackPHtrackletV1(const AliTRDseedV1 *track
 
   if(nbclusters < fNumberClusters) return kFALSE;
   if(nbclusters > fNumberClustersf) return kFALSE;
-  if(pointError >= 0.1) return kFALSE;
+  if(pointError >= 0.3) return kFALSE;
   if(crossrow == 1) return kFALSE;
   
   ///////////////////////
@@ -995,8 +1051,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     padPositions[k] = 0.0;
   } 
   // Take the tgl and snp with the track t now
-  Double_t  tgl = t->GetTglPlane(GetPlane(detector)); //dz/dl and not dz/dx
-  Double_t  snp = t->GetSnpPlane(GetPlane(detector)); // sin angle in xy plan
+  Double_t  tgl = t->GetTglPlane(GetLayer(detector)); //dz/dl and not dz/dx
+  Double_t  snp = t->GetSnpPlane(GetLayer(detector)); // sin angle in xy plan
   Float_t  dzdx = 0.0;                                // dzdx
   Float_t  tnp  = 0.0;
   if(TMath::Abs(snp) < 1.0){
@@ -1004,10 +1060,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     dzdx = tgl*TMath::Sqrt(1+tnp*tnp);
   }
   // linear fitter
-  TLinearFitter fitter(2,"pol1");
-  fitter.StoreData(kFALSE);
-  fitter.ClearPoints();
-
+  fLinearFitterTracklet->ClearPoints();
 
   ///////////////////////////
   // calcul the tnp group
@@ -1026,8 +1079,10 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
       }
     }
   }
-  if(echec) return kFALSE;
-  
+  if(echec) {
+    delete [] padPositions;
+    return kFALSE;
+  }
 
   //////////////////////
   // loop clusters
@@ -1036,16 +1091,16 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     //Take the cluster
     AliTRDcluster *cl  = (AliTRDcluster *) t->GetCluster(k+index0);
     Short_t  *signals  = cl->GetSignals();
-    Double_t     time  = cl->GetPadTime();
+    Double_t     time  = cl->GetLocalTimeBin();
     //Calculate x if possible 
     Float_t xcenter    = 0.0;    
-    Bool_t  echec      = kTRUE;   
+    Bool_t  echec1      = kTRUE;   
     if((time<=7) || (time>=21)) continue; 
     // Center 3 balanced: position with the center of the pad
     if ((((Float_t) signals[3]) > 0.0) && 
        (((Float_t) signals[2]) > 0.0) && 
        (((Float_t) signals[4]) > 0.0)) {
-      echec = kFALSE;
+      echec1 = kFALSE;
       // Security if the denomiateur is 0 
       if ((((Float_t) (((Float_t) signals[3]) * ((Float_t) signals[3]))) / 
           ((Float_t) (((Float_t) signals[2]) * ((Float_t) signals[4])))) != 1.0) {
@@ -1054,7 +1109,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
                        / ((Float_t) (((Float_t) signals[2]) * ((Float_t) signals[4])))));
       }
       else {
-       echec = kTRUE;
+       echec1 = kTRUE;
       }
     }
     if(TMath::Abs(xcenter) > 0.5) echec = kTRUE;
@@ -1064,19 +1119,26 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     Double_t       padPosition = xcenter +  cl->GetPadCol();
     padPositions[k]            = padPosition;
     nb3pc++;
-    fitter.AddPoint(&time, padPosition,1);
+    fLinearFitterTracklet->AddPoint(&time, padPosition,1);
   }//clusters loop
 
 
   /////////////////////////////
   // fit
   ////////////////////////////
-  if(nb3pc < 3) return kFALSE;
-  fitter.Eval();
+  if(nb3pc < 3) {
+    delete [] padPositions;
+    fLinearFitterTracklet->ClearPoints();  
+    return kFALSE;
+  }
+  fLinearFitterTracklet->Eval();
   TVectorD line(2);
-  fitter.GetParameters(line);
+  fLinearFitterTracklet->GetParameters(line);
   Float_t  pointError  = -1.0;
-  pointError  =  TMath::Sqrt(fitter.GetChisquare()/nb3pc);
+  if( fLinearFitterTracklet->GetChisquare()>=0.0) {
+    pointError  =  TMath::Sqrt( fLinearFitterTracklet->GetChisquare()/(nb3pc-2));
+  }
+  fLinearFitterTracklet->ClearPoints();  
   
   /////////////////////////////////////////////////////
   // Now fill the PRF: second loop over clusters
@@ -1085,7 +1147,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     //Take the cluster
     AliTRDcluster *cl      = (AliTRDcluster *) t->GetCluster(k+index0);
     Short_t  *signals      = cl->GetSignals();              // signal
-    Double_t     time      = cl->GetPadTime();              // time bin
+    Double_t     time      = cl->GetLocalTimeBin();              // time bin
     Float_t padPosTracklet = line[0]+line[1]*time;          // reconstruct position from fit
     Float_t padPos         = cl->GetPadCol();               // middle pad
     Double_t dpad          = padPosTracklet - padPos;       // reconstruct position relative to middle pad from fit 
@@ -1109,8 +1171,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
     Int_t     caligroup    = fCalibraMode->GetXbins(2)+ grouplocal;     // calcul the corresponding group
     Float_t   xcl          = cl->GetY();                                // y cluster
     Float_t   qcl          = cl->GetQ();                                // charge cluster 
-    Int_t     plane        = GetPlane(detector);                        // plane 
-    Int_t     chamber      = GetChamber(detector);                      // chamber  
+    Int_t     layer        = GetLayer(detector);                        // layer 
+    Int_t     stack        = GetStack(detector);                        // stack
     Double_t  xdiff        = dpad;                                      // reconstructed position constant
     Double_t  x            = dpad;                                      // reconstructed position moved
     Float_t   ep           = pointError;                                // error of fit
@@ -1138,8 +1200,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
       (* fDebugStreamer) << "HandlePRFtracklet"<<
        "caligroup="<<caligroup<<
        "detector="<<detector<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<< stack <<
        "npoints="<<npoints<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1168,8 +1230,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
       (* fDebugStreamer) << "HandlePRFtracklet"<<
        "caligroup="<<caligroup<<
        "detector="<<detector<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<<stack<<
        "npoints="<<npoints<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1198,8 +1260,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
       (* fDebugStreamer) << "HandlePRFtracklet"<<
        "caligroup="<<caligroup<<
        "detector="<<detector<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<<stack<<
        "npoints="<<npoints<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1267,6 +1329,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtracklet(AliTRDtrack *t, Int_t index0, I
       }
     }
   }
+  delete [] padPositions;
   return kTRUE;
   
 }
@@ -1282,6 +1345,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
   //
   //
 
+  //printf("begin\n");
   ///////////////////////////////////////////
   // Take the parameters of the track
   //////////////////////////////////////////
@@ -1319,6 +1383,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
     }
   }
   // do nothing if out of tnp range
+  //printf("echec %d\n",(Int_t)echec);
   if(echec) return kFALSE;
 
   ///////////////////////
@@ -1331,10 +1396,9 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
   for(Int_t k = 0; k < AliTRDseed::knTimebins; k++){
     padPositions[k] = 0.0;
   } 
-  TLinearFitter fitter(2,"pol1");  // TLinearFitter for the linear fit in the drift region
-  fitter.StoreData(kFALSE);
-  fitter.ClearPoints();
-
+  fLinearFitterTracklet->ClearPoints();  
+  
+  //printf("loop clusters \n");
   ////////////////////////////
   // loop over the clusters
   ////////////////////////////
@@ -1342,11 +1406,11 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
   for(int ic=0; ic<AliTRDseed::knTimebins; ic++){
     if(!(cl = tracklet->GetClusters(ic))) continue;
     
-    Double_t     time  = cl->GetPadTime();
+    Double_t     time  = cl->GetLocalTimeBin();
     if((time<=7) || (time>=21)) continue;
     Short_t  *signals  = cl->GetSignals(); 
     Float_t xcenter    = 0.0;    
-    Bool_t  echec      = kTRUE;   
+    Bool_t  echec1      = kTRUE;   
 
     /////////////////////////////////////////////////////////////
     // Center 3 balanced: position with the center of the pad
@@ -1354,7 +1418,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
     if ((((Float_t) signals[3]) > 0.0) && 
        (((Float_t) signals[2]) > 0.0) && 
        (((Float_t) signals[4]) > 0.0)) {
-      echec = kFALSE;
+      echec1 = kFALSE;
       // Security if the denomiateur is 0 
       if ((((Float_t) (((Float_t) signals[3]) * ((Float_t) signals[3]))) / 
           ((Float_t) (((Float_t) signals[2]) * ((Float_t) signals[4])))) != 1.0) {
@@ -1363,36 +1427,45 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
                        / ((Float_t) (((Float_t) signals[2]) * ((Float_t) signals[4])))));
       }
       else {
-       echec = kTRUE;
+       echec1 = kTRUE;
       }
     }
-    if(TMath::Abs(xcenter) > 0.5) echec = kTRUE;
-    if(echec) continue;
+    if(TMath::Abs(xcenter) > 0.5) echec1 = kTRUE;
+    if(echec1) continue;
 
     ////////////////////////////////////////////////////////
-    //if no echec: calculate with the position of the pad
+    //if no echec1: calculate with the position of the pad
     // Position of the cluster
     // fill the linear fitter
     ///////////////////////////////////////////////////////
     Double_t       padPosition = xcenter +  cl->GetPadCol();
     padPositions[ic]            = padPosition;
     nb3pc++;
-    fitter.AddPoint(&time, padPosition,1);
+    fLinearFitterTracklet->AddPoint(&time, padPosition,1);
 
 
   }//clusters loop
 
-
+  //printf("Fin loop clusters \n");
   //////////////////////////////
   // fit with a straight line
   /////////////////////////////
-  if(nb3pc < 3) return kFALSE;
-  fitter.Eval();
+  if(nb3pc < 3){ 
+    delete [] padPositions;
+    fLinearFitterTracklet->ClearPoints();  
+    delete [] padPositions;
+    return kFALSE;
+  }
+  fLinearFitterTracklet->Eval();
   TVectorD line(2);
-  fitter.GetParameters(line);
+  fLinearFitterTracklet->GetParameters(line);
   Float_t  pointError  = -1.0;
-  pointError  =  TMath::Sqrt(fitter.GetChisquare()/nb3pc);
-  
+  if( fLinearFitterTracklet->GetChisquare()>=0.0) {
+  pointError  =  TMath::Sqrt( fLinearFitterTracklet->GetChisquare()/(nb3pc-2));
+  }
+  fLinearFitterTracklet->ClearPoints();  
+  //printf("PRF second loop \n");
   ////////////////////////////////////////////////
   // Fill the PRF: Second loop over clusters
   //////////////////////////////////////////////
@@ -1400,7 +1473,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
     if(!(cl = tracklet->GetClusters(ic))) continue;
 
     Short_t  *signals      = cl->GetSignals();              // signal
-    Double_t     time      = cl->GetPadTime();              // time bin
+    Double_t     time      = cl->GetLocalTimeBin();         // time bin
     Float_t padPosTracklet = line[0]+line[1]*time;          // reconstruct position from fit
     Float_t padPos         = cl->GetPadCol();               // middle pad
     Double_t dpad          = padPosTracklet - padPos;       // reconstruct position relative to middle pad from fit 
@@ -1428,8 +1501,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
     Int_t     caligroup    = fCalibraMode->GetXbins(2)+ grouplocal;     // calcul the corresponding group
     Float_t   xcl          = cl->GetY();                                // y cluster
     Float_t   qcl          = cl->GetQ();                                // charge cluster 
-    Int_t     plane        = GetPlane(fDetectorPreviousTrack);          // plane 
-    Int_t     chamber      = GetChamber(fDetectorPreviousTrack);        // chamber  
+    Int_t     layer        = GetLayer(fDetectorPreviousTrack);          // layer 
+    Int_t     stack        = GetStack(fDetectorPreviousTrack);          // stack  
     Double_t  xdiff        = dpad;                                      // reconstructed position constant
     Double_t  x            = dpad;                                      // reconstructed position moved
     Float_t   ep           = pointError;                                // error of fit
@@ -1439,6 +1512,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
     Float_t   signal4      = (Float_t)signals[4];                       // signal
     Float_t   signal5      = (Float_t)signals[5];                       // signal at the border
    
+
+
     /////////////////////
     // Debug stuff
     ////////////////////
@@ -1457,8 +1532,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
       (* fDebugStreamer) << "HandlePRFtrackletV1"<<
        "caligroup="<<caligroup<<
        "detector="<<fDetectorPreviousTrack<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<<stack<<
        "npoints="<<nbclusters<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1487,8 +1562,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
       (* fDebugStreamer) << "HandlePRFtrackletV1"<<
        "caligroup="<<caligroup<<
        "detector="<<fDetectorPreviousTrack<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<<stack<<
        "npoints="<<nbclusters<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1517,8 +1592,8 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
       (* fDebugStreamer) << "HandlePRFtrackletV1"<<
        "caligroup="<<caligroup<<
        "detector="<<fDetectorPreviousTrack<<
-       "plane="<<plane<<
-       "chamber="<<chamber<<
+       "layer="<<layer<<
+       "stack="<<stack<<
        "npoints="<<nbclusters<<
        "Np="<<nb3pc<<
        "ep="<<ep<<
@@ -1591,6 +1666,7 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
   } // second loop over clusters
 
 
+  delete [] padPositions;
   return kTRUE;
   
 }
@@ -1598,7 +1674,18 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
 // Pad row col stuff: see if masked or not
 ///////////////////////////////////////////////////////////////////////////////////////
 //_____________________________________________________________________________
-void AliTRDCalibraFillHisto::CheckGoodTracklet(Int_t detector, Int_t row, Int_t col)
+void AliTRDCalibraFillHisto::CheckGoodTrackletV1(AliTRDcluster *cl)
+{
+  //
+  // See if we are not near a masked pad
+  //
+
+  if(cl->IsMasked()) fGoodTracklet = kFALSE;
+
+  
+}
+//_____________________________________________________________________________
+void AliTRDCalibraFillHisto::CheckGoodTrackletV0(Int_t detector, Int_t row, Int_t col)
 {
   //
   // See if we are not near a masked pad
@@ -1680,6 +1767,22 @@ Int_t AliTRDCalibraFillHisto::CalculateTotalNumberOfBins(Int_t i)
   //
   
   Int_t ntotal = 0;
+
+  // All together
+  if((fCalibraMode->GetNz(i)==100) && (fCalibraMode->GetNrphi(i)==100)){
+    ntotal = 1;
+    AliInfo(Form("Total number of Xbins: %d for i %d",ntotal,i));
+    return ntotal;
+  }
+
+  // Per Supermodule
+  if((fCalibraMode->GetNz(i)==10) && (fCalibraMode->GetNrphi(i)==10)){
+    ntotal = 18;
+    AliInfo(Form("Total number of Xbins: %d for i %d",ntotal,i));
+    return ntotal;
+  }
+
+  // More
   fCalibraMode->ModePadCalibration(2,i);
   fCalibraMode->ModePadFragmentation(0,2,0,i);
   fCalibraMode->SetDetChamb2(i);
@@ -1724,6 +1827,35 @@ void AliTRDCalibraFillHisto::SetNrphi(Int_t i, Short_t Nrphi)
   }
 
 }
+
+//_____________________________________________________________________________
+void AliTRDCalibraFillHisto::SetAllTogether(Int_t i)
+{
+  //
+  // Set the mode of calibration group all together
+  //
+  if(fVector2d == kTRUE) {
+    AliInfo("Can not work with the vector method");
+    return;
+  }
+  fCalibraMode->SetAllTogether(i);
+  
+}
+
+//_____________________________________________________________________________
+void AliTRDCalibraFillHisto::SetPerSuperModule(Int_t i)
+{
+  //
+  // Set the mode of calibration group per supermodule
+  //
+  if(fVector2d == kTRUE) {
+    AliInfo("Can not work with the vector method");
+    return;
+  }
+  fCalibraMode->SetPerSuperModule(i);
+  
+}
+
 //____________Set the pad calibration variables for the detector_______________
 Bool_t AliTRDCalibraFillHisto::LocalisationDetectorXbins(Int_t detector)
 {
@@ -1746,9 +1878,9 @@ Bool_t AliTRDCalibraFillHisto::LocalisationDetectorXbins(Int_t detector)
 
   // fragmentation of idect
   for (Int_t i = 0; i < 3; i++) {
-    fCalibraMode->ModePadCalibration((Int_t) GetChamber(detector),i);
-    fCalibraMode->ModePadFragmentation((Int_t) GetPlane(detector)
-                       , (Int_t) GetChamber(detector)
+    fCalibraMode->ModePadCalibration((Int_t) GetStack(detector),i);
+    fCalibraMode->ModePadFragmentation((Int_t) GetLayer(detector)
+                       , (Int_t) GetStack(detector)
                        , (Int_t) GetSector(detector),i);
   }
   
@@ -1785,7 +1917,9 @@ void AliTRDCalibraFillHisto::StoreInfoCHPHtrack(AliTRDcluster *cl, Double_t dqdl
   Int_t    time     = cl->GetPadTime();
    
   //Correct for the gain coefficient used in the database for reconstruction
-  Float_t correctthegain = fCalDetGain->GetValue(fDetectorPreviousTrack)*fCalROCGain->GetValue(col,row);
+  Float_t correctthegain = 1.0;
+  if(fIsHLT) correctthegain = fCalDetGain->GetValue(fDetectorPreviousTrack);
+  else correctthegain = fCalDetGain->GetValue(fDetectorPreviousTrack)*fCalROCGain->GetValue(col,row);
   Float_t correction    = 1.0;
   Float_t normalisation = 6.67;
   // we divide with gain in AliTRDclusterizer::Transform...
@@ -1849,7 +1983,11 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackCH(Int_t nbclusters)
 
   if(nbclusters < fNumberClusters) return;
   if(nbclusters > fNumberClustersf) return;
-  
+
+
+  // Normalize with the number of clusters
+  Double_t normalizeCst = fRelativeScale;
+  if(fNormalizeNbOfCluster) normalizeCst = normalizeCst*nbclusters;
   
   // See if the track goes through different zones
   for (Int_t k = 0; k < fCalibraMode->GetNfragZ(0)*fCalibraMode->GetNfragRphi(0); k++) {
@@ -1869,11 +2007,11 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackCH(Int_t nbclusters)
       fNumberUsedCh[0]++;
       fEntriesCH[fCalibraMode->GetXbins(0)+fd]++;
       if (fHisto2d) {
-       FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/fRelativeScale);
-       //fCH2d->Fill(fAmpTotal[fd]/fRelativeScale,fCalibraMode->GetXbins(0)+fd+0.5);
+       FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/normalizeCst);
+       //fCH2d->Fill(fAmpTotal[fd]/normalizeCst,fCalibraMode->GetXbins(0)+fd+0.5);
       }
       if (fVector2d) {
-       fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/fRelativeScale);
+       fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/normalizeCst);
       }
       break;
     case 2:
@@ -1882,22 +2020,22 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackCH(Int_t nbclusters)
        // One of the two very big
        if (fAmpTotal[fd] > fProcent*fAmpTotal[fd+1]) {
          if (fHisto2d) {
-           FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/fRelativeScale);
-           //fCH2d->Fill(fAmpTotal[fd]/fRelativeScale,fCalibraMode->GetXbins(0)+fd+0.5);
+           FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/normalizeCst);
+           //fCH2d->Fill(fAmpTotal[fd]/normalizeCst,fCalibraMode->GetXbins(0)+fd+0.5);
          }
          if (fVector2d) {
-           fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/fRelativeScale);
+           fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/normalizeCst);
          }
          fNumberUsedCh[1]++;
          fEntriesCH[fCalibraMode->GetXbins(0)+fd]++;
        }
        if (fAmpTotal[fd+1] > fProcent*fAmpTotal[fd]) {
          if (fHisto2d) {
-           FillCH2d(fCalibraMode->GetXbins(0)+fd+1,fAmpTotal[fd+1]/fRelativeScale);
-           //fCH2d->Fill(fAmpTotal[fd+1]/fRelativeScale,fCalibraMode->GetXbins(0)+fd+1.5);
+           FillCH2d(fCalibraMode->GetXbins(0)+fd+1,fAmpTotal[fd+1]/normalizeCst);
+           //fCH2d->Fill(fAmpTotal[fd+1]/normalizeCst,fCalibraMode->GetXbins(0)+fd+1.5);
          }
          if (fVector2d) {
-           fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd+1,fAmpTotal[fd+1]/fRelativeScale);
+           fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd+1,fAmpTotal[fd+1]/normalizeCst);
          }
          fNumberUsedCh[1]++;
          fEntriesCH[fCalibraMode->GetXbins(0)+fd+1]++;
@@ -1910,24 +2048,24 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackCH(Int_t nbclusters)
              // One of the two very big
              if (fAmpTotal[fd] > fProcent*fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]) {
                if (fHisto2d) {
-                 FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/fRelativeScale);
-                 //fCH2d->Fill(fAmpTotal[fd]/fRelativeScale,fCalibraMode->GetXbins(0)+fd+0.5);
+                 FillCH2d(fCalibraMode->GetXbins(0)+fd,fAmpTotal[fd]/normalizeCst);
+                 //fCH2d->Fill(fAmpTotal[fd]/normalizeCst,fCalibraMode->GetXbins(0)+fd+0.5);
                }
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/fRelativeScale);
+                 fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd,fAmpTotal[fd]/normalizeCst);
                }
                fNumberUsedCh[1]++;
                fEntriesCH[fCalibraMode->GetXbins(0)+fd]++;
              }
              if (fAmpTotal[fd+fCalibraMode->GetNfragZ(0)] > fProcent*fAmpTotal[fd]) {
                if (fHisto2d) {
-                 FillCH2d(fCalibraMode->GetXbins(0)+fd+fCalibraMode->GetNfragZ(0),fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/fRelativeScale);
-                 //fCH2d->Fill(fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/fRelativeScale,fCalibraMode->GetXbins(0)+fd+fCalibraMode->GetNfragZ(0)+0.5);
+                 FillCH2d(fCalibraMode->GetXbins(0)+fd+fCalibraMode->GetNfragZ(0),fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/normalizeCst);
+                 //fCH2d->Fill(fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/normalizeCst,fCalibraMode->GetXbins(0)+fd+fCalibraMode->GetNfragZ(0)+0.5);
                }
                fNumberUsedCh[1]++;
                fEntriesCH[fCalibraMode->GetXbins(0)+fd+fCalibraMode->GetNfragZ(0)]++;
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd+fCalibraMode->GetNfragZ(0),fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/fRelativeScale);
+                 fCalibraVector->UpdateVectorCH(fDetectorPreviousTrack,fd+fCalibraMode->GetNfragZ(0),fAmpTotal[fd+fCalibraMode->GetNfragZ(0)]/normalizeCst);
                }
              }
            }
@@ -1977,6 +2115,18 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
     }
   }
 
+  // See if noise before and after
+  if(fMaxCluster > 0) {
+    if(fPHValue[0] > fMaxCluster) return;
+    if(fTimeMax > fNbMaxCluster) {
+      for(Int_t k = (fTimeMax-fNbMaxCluster); k < fTimeMax; k++){
+       if(fPHValue[k] > fMaxCluster) return;
+      }
+    }
+  }
+
+  //printf("nbclusters %d, low limit %d, high limit %d\n",nbclusters,fNumberClusters,fNumberClustersf);
+
   if(nbclusters < fNumberClusters) return;
   if(nbclusters > fNumberClustersf) return;
   
@@ -1986,11 +2136,17 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
       fNumberUsedPh[0]++;
       for (Int_t i = 0; i < fTimeMax; i++) {
        if (fHisto2d) {
-         fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+         if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+         else {
+           if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+             }
          //printf("Fill the time bin %d with %f\n",i,fPHValue[i]);
        }
        if (fVector2d) {
-         fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+         if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+         else {
+           if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);  
+         }
        }
       }
       break;
@@ -2003,10 +2159,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
          fNumberUsedPh[1]++;
          for (Int_t i = 0; i < fTimeMax; i++) {
            if (fHisto2d) {
-             fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+             if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+             else {
+               if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 }
            }
            if (fVector2d) {
-             fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+             if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+             else {
+               if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 }
            }
          }
        }
@@ -2015,10 +2177,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
          fNumberUsedPh[1]++;
          for (Int_t i = 0; i < fTimeMax; i++) {
            if (fHisto2d) {
-             fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+             if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+             else {
+               if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+             }
            }
          if (fVector2d) {
-           fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+           if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+           else {
+             if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+           }
          }
          }
        }
@@ -2034,10 +2202,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
              fNumberUsedPh[1]++;
              for (Int_t i = 0; i < fTimeMax; i++) {
                if (fHisto2d) {
-                 fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 }
                }
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 }
                }
              }
            }
@@ -2046,10 +2220,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
              fNumberUsedPh[1]++;
              for (Int_t i = 0; i < fTimeMax; i++) {
                if (fHisto2d) {
-                 fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 }
                }
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 }
                }
              }
            }
@@ -2065,10 +2245,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
              fNumberUsedPh[1]++;
              for (Int_t i = 0; i < fTimeMax; i++) {
                if (fHisto2d) {
-                 fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd1)+0.5,(Float_t) fPHValue[i]);
+                 }
                }
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd1,i,fPHValue[i]);
+                 }
                }
              }
            }
@@ -2077,10 +2263,16 @@ void AliTRDCalibraFillHisto::FillTheInfoOfTheTrackPH()
              fNumberUsedPh[1]++;
              for (Int_t i = 0; i < fTimeMax; i++) {
                if (fHisto2d) {
-                 fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 if(fFillWithZero) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fPH2d->Fill((Float_t) i/fSf,(fCalibraMode->GetXbins(1)+fd2)+0.5,(Float_t) fPHValue[i]);
+                 }
                }
                if (fVector2d) {
-                 fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 if(fFillWithZero) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 else {
+                   if(((Float_t) fPHValue[i] > 0.0)) fCalibraVector->UpdateVectorPH(fDetectorPreviousTrack,fd2,i,fPHValue[i]);
+                 }
                }
              }
            }
@@ -2122,7 +2314,7 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
   fMCMPrevious           = -1;
   fROBPrevious           = -1;
   Int_t nbtimebin = 0;                                        
-  Int_t baseline  = 0;  
+  Int_t baseline  = 10;  
 
 
   if(!nocheck){
@@ -2134,7 +2326,9 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       Int_t idetector = rawStream->GetDet();                            //  current detector
       Int_t imcm      = rawStream->GetMCM();                            //  current MCM
       Int_t irob      = rawStream->GetROB();                            //  current ROB
-      
+
+      //printf("Detector %d\n",idetector);
+
       if((fDetectorPreviousTrack != idetector) && (fDetectorPreviousTrack != -1)){
        
        // Fill
@@ -2160,9 +2354,11 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       if((fTimeMax != 0) && (nbtimebin != fTimeMax)) return 0;
       fTimeMax          = nbtimebin;
 
-      baseline          = rawStream->GetCommonAdditive();                // common additive baseline
-     
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
+      //baseline          = rawStream->GetCommonAdditive();                // common additive baseline
+      fNumberClustersf    = fTimeMax;
+      fNumberClusters     = (Int_t)(0.6*fTimeMax);
+
+
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t  col        = rawStream->GetCol();
       Int_t row         = rawStream->GetRow();    
@@ -2171,11 +2367,8 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
      
                 
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       phvalue[row][col][itime] = signal[n]-baseline;
-       n++;
+      for(Int_t itime = 0; itime < nbtimebin; itime++){
+       phvalue[row][col][itime] = signal[itime]-baseline;
       }
     }
     
@@ -2204,6 +2397,8 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       Int_t imcm      = rawStream->GetMCM();                            //  current MCM
       Int_t irob      = rawStream->GetROB();                            //  current ROB
 
+      //printf("Detector %d\n",idetector);
+
       if((fDetectorPreviousTrack != idetector) && (fDetectorPreviousTrack != -1)){
 
        // Fill
@@ -2223,22 +2418,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       fMCMPrevious           = imcm;
       fROBPrevious           = irob;
 
-      baseline          = rawStream->GetCommonAdditive();                //  common baseline
+      //baseline          = rawStream->GetCommonAdditive();                //  common baseline
       
       fTimeMax          = rawStream->GetNumberOfTimeBins();              //  number of time bins read from data
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
+      fNumberClustersf    = fTimeMax;
+      fNumberClusters     = (Int_t)(0.6*fTimeMax);
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t col         = rawStream->GetCol();
       Int_t row         = rawStream->GetRow();   
 
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-    
+       
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
       
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       phvalue[row][col][itime] = signal[n]-baseline;
-       n++;
+      for(Int_t itime = 0; itime < fTimeMax; itime++){
+       phvalue[row][col][itime] = signal[itime]-baseline;
       }
     }
     
@@ -2286,7 +2479,7 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
   fROBPrevious           = -1;
   Int_t row              = -1;
   Int_t nbtimebin = 0;                                        
-  Int_t baseline  = 0;  
+  Int_t baseline  = 10;  
 
 
   if(!nocheck){
@@ -2332,23 +2525,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
       if(nbtimebin == 0) return 0;
       if((fTimeMax != 0) && (nbtimebin != fTimeMax)) return 0;
       fTimeMax          = nbtimebin;
+      fNumberClustersf  = fTimeMax;
+      fNumberClusters   = (Int_t)(0.6*fTimeMax);
       param->SetTimeRange(0,fTimeMax);
 
-      baseline          = rawStream->GetCommonAdditive();                // common additive baseline
+      //baseline          = rawStream->GetCommonAdditive();                // common additive baseline
      
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t  adc        = rawStream->GetADC();
     
       
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
      
-                
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       mcm.SetADC(adc,itime,(signal[n]-baseline));
-       n++;
+      for(Int_t itime = 0; itime < nbtimebin; itime++){
+       mcm.SetADC(adc,itime,(signal[itime]-baseline));
       }
     }
     
@@ -2397,23 +2587,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
       fMCMPrevious           = imcm;
       fROBPrevious           = irob;
 
-      baseline          = rawStream->GetCommonAdditive();                //  common baseline
+      //baseline          = rawStream->GetCommonAdditive();                //  common baseline
       
       fTimeMax          = rawStream->GetNumberOfTimeBins();              //  number of time bins read from data
+      fNumberClustersf  = fTimeMax;
+      fNumberClusters   = (Int_t)(0.6*fTimeMax);
       param->SetTimeRange(0,fTimeMax);
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t adc         = rawStream->GetADC();
        
-
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-    
+      
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
       
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       mcm.SetADC(adc,itime,(signal[n]-baseline));
-       n++;
+      for(Int_t itime = 0; itime < fTimeMax; itime++){
+       mcm.SetADC(adc,itime,(signal[itime]-baseline));
       }
     }
     
@@ -2612,12 +2799,12 @@ Int_t AliTRDCalibraFillHisto::UpdateHistogramcm(AliTRDmcmTracklet *trk)
   
   Int_t used = 1;
 
-  fGoodTracklet = kTRUE;
+  //fGoodTracklet = kTRUE;
 
   // Localisation of the Xbins involved
   Int_t idect = trk->GetDetector();
   Int_t idectrue = trk->GetDetector();
-  idect = 0;
+  //idect = 0;
 
   Int_t nbclusters = trk->GetNclusters();
   
@@ -2646,7 +2833,7 @@ Int_t AliTRDCalibraFillHisto::UpdateHistogramcm(AliTRDmcmTracklet *trk)
     Int_t   time   = trk->GetClusterTime(icl);
     Int_t   col    = trk->GetClusterCol(icl);
     
-    CheckGoodTracklet(idect,row,col);
+    //CheckGoodTrackletV0(idect,row,col);
     
     amp[0] = trk->GetClusterADC(icl)[0] * correction;
     amp[1] = trk->GetClusterADC(icl)[1] * correction;
@@ -2729,13 +2916,14 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
 
 
   Int_t idect = fDetectorPreviousTrack;      
+  //printf("Enter Detector %d\n",fDetectorPreviousTrack);
   Double_t sum[36];
   for(Int_t tb = 0; tb < 36; tb++){
     sum[tb] = 0.0;
   }
 
-  fGoodTracklet = kTRUE;
-  fDetectorPreviousTrack = 0;
+  //fGoodTracklet = kTRUE;
+  //fDetectorPreviousTrack = 0;  
 
 
   ///////////////////////////
@@ -2777,9 +2965,12 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
 
   //printf("imaxRow %d, imaxCol %d, fTimeMax %d, integralMax %f\n",imaxRow,imaxCol,fTimeMax, integralMax);
 
-  if((imaxRow == 0) || (imaxCol == 0)) used=1;
-  CheckGoodTracklet(fDetectorPreviousTrack,imaxRow,imaxCol);
-  if(!fGoodTracklet) used = 1;;
+  if((imaxRow == 0) || (imaxCol == 0)) {
+    used=1;
+    return used;
+  }
+  //CheckGoodTrackletV0(fDetectorPreviousTrack,imaxRow,imaxCol);
+  //if(!fGoodTracklet) used = 1;;
   
   //  /////////////////////////////////////////////////////
   // sum ober 2 row and 4 pad cols for each time bins
@@ -2850,12 +3041,17 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
   //if((TMath::RMS(fTimeMax,sum) <= 10.0) && (sum[0] > 200.0)) return 1;
   if(used == 0){
     for(Int_t it = 0; it < fTimeMax; it++){
-      UpdateDAQ(fDetectorPreviousTrack,0,0,it,sum[it],fTimeMax);  
+      if(fFillWithZero) UpdateDAQ(fDetectorPreviousTrack,0,0,it,sum[it],fTimeMax); 
+      else{
+       if(sum[it] > 0.0) UpdateDAQ(fDetectorPreviousTrack,0,0,it,sum[it],fTimeMax); 
+      } 
     }
     
    
     //((TH2I *)GetCH2d()->Fill(sumcharge/30.0,fDetectorPreviousTrack));
     used = 2;
+    //printf("Pass Detector %d\n",fDetectorPreviousTrack);
+
   }
  
   return used;
@@ -3274,10 +3470,10 @@ void  AliTRDCalibraFillHisto::FillCH2d(Int_t x, Float_t y)
 // Geometrical functions
 ///////////////////////////////////////////////////////////////////////////////////
 //_____________________________________________________________________________
-Int_t AliTRDCalibraFillHisto::GetPlane(Int_t d) const
+Int_t AliTRDCalibraFillHisto::GetLayer(Int_t d) const
 {
   //
-  // Reconstruct the plane number from the detector number
+  // Reconstruct the layer number from the detector number
   //
 
   return ((Int_t) (d % 6));
@@ -3285,14 +3481,14 @@ Int_t AliTRDCalibraFillHisto::GetPlane(Int_t d) const
 }
 
 //_____________________________________________________________________________
-Int_t AliTRDCalibraFillHisto::GetChamber(Int_t d) const
+Int_t AliTRDCalibraFillHisto::GetStack(Int_t d) const
 {
   //
-  // Reconstruct the chamber number from the detector number
+  // Reconstruct the stack number from the detector number
   //
-  Int_t fgkNplan = 6;
+  const Int_t kNlayer = 6;
 
-  return ((Int_t) (d % 30) / fgkNplan);
+  return ((Int_t) (d % 30) / kNlayer);
 
 }