ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $

//
//*-- Author  : Laura Fabbietti <Laura.Fabbietti@ph.tum.de>
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichDigitizer
//
// For each digitized pad the corresponding track numbers of the
// direct hits and photons are stored in a linear category
// (catRichTrack<-HRichTrack) that is made sortable by the pad address.
// Each pad object of the HRichCalSim class has 2 members, nTrack1, nTrack2,
// that give the indexes of the first and the last track numbers in the linear
// category (catRichTrack) corresponding to a pad.
// This method allows to store as many particle track numbers as the pad
// " sees ".
//  here are listed the values of some useful variables
//  # means non costant value.
//  Each value refers to the 1 fired pad.
//
//  realID=gHades->getEmbeddingRealTrackId()
//
//                        track Number      Flag     energy
//  Cheren. Phot.            #               0        #
//  Feedback Phot.          -5               0        0
//  Direct Hits              #               1        0
//  Noise Hits              -1               0        0
//  REAL Hits (embedding)    realID          0        0
//---------------------------------------------------------
//
//
//  -----------------------                                -------------
//  |     HRichUnpacker    |                               | HGeantRich |
//  |   (embedding mode)   | \                             -------------
//  |                      |  \                                 ||
//  -----------------------    \                                || input to digitizer
//                              \                               \/
//                          -------------    read real    ------------------
//                         | HRichCalSim | ------------>  |                 |
//                          -------------  <-----------   |                 |
//                                                        | HRichDigitizer  |
//                          -------------                 |                 |
//                         | HRichTrack  | <-----------   |                 |
//                          -------------                 ------------------
//                                         write output
//
//  In the case of TRACK EMBEDDING of simulated tracks into
//  experimental data the real data are written by the HRichUnpacker into
//  HRichCalSim category. The real hits are taken into
//  account by the digitizer (adding of charges, adding track numbers to HRichTrack).
//  The embedding mode is recognized automatically by analyzing the
//  gHades->getEmbeddingMode() flag.
//            Mode ==0 means no embedding
//                 ==1 realistic embedding (first real or sim hit makes the game)
//                 ==2 keep GEANT tracks   (as 1, but GEANT track numbers will always
//                     win against real data. besides the tracknumber the output will
//                     be the same as in 1)
//
// Needed parameter containers:
//   - HRichCalPar (used for noise/threshold calculation)
//   - HRichGeometryPar
//   - HRichDigitisationPar
////////////////////////////////////////////////////////////////////////////
//
// SIMULATION OD DELTA ELECTRONS
//
//  void   setDeltaElectronUse(Bool_t use, Bool_t useDeltaMomSel=kFALSE, Int_t ionId=109,Float_t t1min=-950.,Float_t t1max=400.,Float_t momCut=20. Float_t prob)
//  void   setDeltaElectronMinMomCut(Float_t s0=0.,Float_t s1=0.,Float_t s2=0.,Float_t s3=0.,Float_t s4=0.,Float_t s5=0.)
//
//  Delta electrons can simulated by 3 different ways
//
// 1. Shooting electrons by kine generator ( primary electrons, momentun < momMaxDeltaElecCut) useDeltaMomSel=kTRUE
// 2. Shooting beam ions by kine generator of evt file input (primary ionID)
// 3. Shooting delta electrons by evt file (primary electron, generator info -3)               useDeltaMomSel=kFALSE
//
// The delta electrons source are identified in the input by the methodes above.
// To take care for the different material budgets an additional low momentum
// cut off per sector (default 0 MeV) can be applied. The accepted deltas can be adjusted by
// probability (default 2 : do not use prob). By default delta electrons in
// the input are suppressed (use=kFALSE).
//
////////////////////////////////////////////////////////////////////////////

#include "TF1.h"
#include "TMath.h"
#include "TRandom.h"
#include "TVector.h"

#include "hades.h"
#include "hcategory.h"
#include "hdebug.h"
#include "hevent.h"
#include "heventheader.h"
#include "hgeantrich.h"
#include "hlinearcatiter.h"
#include "hmatrixcatiter.h"
#include "hparset.h"
#include "hrichcalpar.h"
#include "hrichcalparcell.h"
#include "hrichcalsim.h"
#include "hrichdetector.h"
#include "hrichdigitisationpar.h"
#include "hrichdigitizer.h"
#include "hrichgeometrypar.h"
#include "hrichpad.h"
#include "hrichpadcorner.h"
#include "hrichpadfilter.h"
#include "hrichtrack.h"
#include "hgeantkine.h"
#include "hrichwiresignal.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "richdef.h"

#include <iomanip>
#include <iostream>
#include <stdlib.h>

using namespace std;

ClassImp(HRichDigitizer)
 HRichDigitizer* HRichDigitizer::fDigitizer = 0;
//----------------------------------------------------------------------------
HRichDigitizer::HRichDigitizer(const Text_t* name,
                               const Text_t* title,
                               Bool_t  kNoise,
                               Float_t slope,
                               Bool_t  oem)    : HReconstructor(name, title)
{

   setDefaults();

   isOEM             = oem;
   isActiveNoise     = kNoise;
   fSlopeCorrection  = slope;
   fDigitizer =this;
}
//============================================================================

//----------------------------------------------------------------------------
HRichDigitizer::HRichDigitizer()
{

   setDefaults();
   fDigitizer =this;

}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::setDefaults()
{
   catRichPhoton    = NULL;
   catRichDirect    = NULL;
   catTrack         = NULL;
   catCal           = NULL;

   iterRichPhoton   = NULL;
   iterRichDirect   = NULL;
   iterRichTrack    = NULL;
   iterRichCal      = NULL;

   pDigitisationPar = NULL;
   pGeometryPar     = NULL;
   pCalPar          = NULL;

   ga               = NULL;

   isOEM             = kFALSE;
   isActiveNoise     = kFALSE;

   countFBphot       = 0;
   countNoisePad     = 0;

   fWiresNr          = 0;
   fWiresDist        = 0.0;
   distWirePads      = 0.0;
   fYShift           = 0.0;

   binsQE            = 0;
   fChargePerChannel = 0.0;
   fChargeScaling    = 1.0;
   fElectronsNr      = 0.0;
   fFactor1          = 0.0;
   fFactor1Sig       = 0.0;
   fFactor2          = 0.0;
   fFactor2Sig       = 0.0;
   fIncreaseNoise    = 1.0;
   fParam1           = 0.0;
   fParam2           = 0.0;
   fQupper           = 0.0;
   fSigmaValue       = 0.0;
   fExpSlope         .Set(6);
   fExpSlope         .Reset(0.0);
   fSlopeCorrection  = 1.0;
   photlength        .Set(18);
   photlength        .Reset(0.0);
   photeffic         .Set(18);
   photeffic         .Reset(0.0);
   for (Int_t sec = 0; sec < 6; ++sec) {
      correction[sec].Set(18);
      correction[sec].Reset(0.0);
   }

   noiseProb         = 0.0;
   for (Int_t i = 0; i < 9; ++i)
      fDigitPadMatrix[i] = 0.0;


   for (Int_t i = 0; i < 9; ++i)
      fDigitPadMatrix[i] = 0.0;

   loc1 .set(1, 0);
   locat.set(3, 0, 0, 0);
   loc  .set(3, 0, 0, 0);

   setDeltaElectronUse(kFALSE,kFALSE,109,20.,2.);
   setDeltaElectronMinMomCut(0.,0.,0.,0.,0.,0.);


}
//============================================================================

//----------------------------------------------------------------------------
HRichDigitizer::~HRichDigitizer()
{

   if (iterRichPhoton) {
      delete iterRichPhoton;
      iterRichPhoton = NULL;
   }
   if (iterRichDirect) {
      delete iterRichDirect;
      iterRichDirect = NULL;
   }
   if (iterRichTrack) {
      delete iterRichTrack;
      iterRichTrack = NULL;
   }
   if (iterRichCal) {
      delete iterRichCal;
      iterRichCal = NULL;
   }

   fChargeOnWireList.Delete();
   fTrackNumberList.Delete();

   if (ga) {
      delete ga;
      ga = NULL;
   }

}
//============================================================================

//----------------------------------------------------------------------------
Bool_t
HRichDigitizer::init()
{

   HRichDetector* pRichDet = static_cast<HRichDetector*>(gHades->getSetup()
                                                         ->getDetector("Rich"));
   HRuntimeDb* rtdb = gHades->getRuntimeDb();


   if (kTRUE == isActiveNoise) {
      Info("init", "------------------------------------------------------");
      Info("init", "RICH digitizer NOISE MODE is ON");
      Info("init", "------------------------------------------------------");
   } else {
      Info("init", "------------------------------------------------------");
      Info("init", "RICH digitizer NOISE is OFF");
      Info("init", "------------------------------------------------------");
   }


   // Set pointer to RICH calibration parameters
   pCalPar = static_cast<HRichCalPar*>(rtdb->getContainer("RichCalPar"));
   if (NULL == pCalPar) {
      Error("init", "Initialization of calibration parameters failed, returning...");
      return kFALSE;
   }

   // Set pointer to RICH geometry parameters
   pGeometryPar = static_cast<HRichGeometryPar*>(rtdb->getContainer("RichGeometryParameters"));
   if (NULL == pGeometryPar) {
      pGeometryPar = new HRichGeometryPar;
      rtdb->addContainer(pGeometryPar);
   }
   if (NULL == pGeometryPar) {
      Error("init", "Initialization of geometry parameters failed, returning...");
      return kFALSE;
   }


   // Set pointer to RICH digitization parameters
   pDigitisationPar = static_cast<HRichDigitisationPar*>(rtdb->getContainer("RichDigitisationParameters"));
   if (NULL == pDigitisationPar) {
      pDigitisationPar = new HRichDigitisationPar;
      rtdb->addContainer(pDigitisationPar);
   }
   if (NULL == pDigitisationPar) {
      Error("init", "Initialization of digitization parameters failed, returning...");
      return kFALSE;
   }
   catKine = gHades->getCurrentEvent()->getCategory(catGeantKine);
   if (NULL == catKine) {
      Error("init", "Initializatin of kine category failed, returning...");
      return kFALSE;
   }

   // Initialize geant rich cherenkov photon category and set appropriate iterator
   catRichPhoton = gHades->getCurrentEvent()->getCategory(catRichGeantRaw);
   if (NULL == catRichPhoton) {
      Error("init", "Initializatin of Cherenkov photon category failed, returning...");
      return kFALSE;
   }
   iterRichPhoton = static_cast<HIterator*>(catRichPhoton->MakeIterator());
   if (NULL == iterRichPhoton) {
      Error("init", "Can not create catRichPhoton iterator, returning...");
      return kFALSE;
   }


   // Initialize geant category for direct hits and set appropriate iterator
   catRichDirect = gHades->getCurrentEvent()->getCategory(catRichGeantRaw + 1);
   if (NULL == catRichDirect) {
      Error("init", "Initialization of geant category for direct hits failed, returning...");
      return kFALSE;
   }
   iterRichDirect = static_cast<HIterator*>(catRichDirect->MakeIterator());
   if (NULL == iterRichDirect) {
      Error("init", "Can not create catRichDirect iterator, returning...");
      return kFALSE;
   }


   // Initialize output category for RICH HGeant tracks and its appropriate iterator
   catTrack = gHades->getCurrentEvent()->getCategory(catRichTrack);
   if (NULL == catTrack) {
      catTrack = pRichDet->buildCategory(catRichTrack);
      if (NULL == catTrack) {
         Error("init", "Can not build output category catRichTrack, returning...");
         return kFALSE;
      } else
         gHades->getCurrentEvent()->addCategory(catRichTrack, catTrack, "Rich");
   }
   iterRichTrack = static_cast<HIterator*>(catTrack->MakeIterator());
   if (NULL == iterRichTrack) {
      Error("init", "Can not create catRichTrack iterator, returning...");
      return kFALSE;
   }


   // Initialize output category catRichCalSim and its appropriate iterator
   catCal = gHades->getCurrentEvent()->getCategory(catRichCal);
   if (NULL == catCal) {
      catCal = pRichDet->buildMatrixCat("HRichCalSim", 1);
      if (NULL == catCal) {
         Error("init", "Can not build output category catRichCalSim, returning...");
         return kFALSE;
      } else gHades->getCurrentEvent()->addCategory(catRichCal, catCal, "Rich");
   }
   iterRichCal = static_cast<HIterator*>(catCal->MakeIterator());
   if (NULL == iterRichCal) {
      Error("init", "Can not create catRichCalSim iterator, returning...");
      return kFALSE;
   }

   ga = new TF1("ga", "[0]*exp([1]*(x-[2])*(x-[2]))", -10, 10);

   return kTRUE;

}
//============================================================================

//----------------------------------------------------------------------------
Bool_t
HRichDigitizer::reinit()
{

   if (NULL == pDigitisationPar || NULL == pGeometryPar) {
      Error("reinit", "One of the needed pointers is NULL, returning...");
      return kFALSE;
   }

   // Get geometry parameters
   fWiresNr     = pGeometryPar->getWiresPar()->getNrWires();
   fWiresDist   = pGeometryPar->getWiresPar()->getDistWire();
   distWirePads = pGeometryPar->getDistanceWiresPads();
   fYShift      = pGeometryPar->getSectorShift();
   fYShift      = fYShift / cos(20. * TMath::DegToRad());

   // Get digitization parameters
   fChargePerChannel = pDigitisationPar->getChargePerChannel();
   fChargeScaling    = pDigitisationPar->getChargeScaling();
   fElectronsNr      = pDigitisationPar->getElectronsNr();
   fFactor1          = pDigitisationPar->getFactor1();
   fFactor1Sig       = pDigitisationPar->getFactor1Sig();
   fFactor2          = pDigitisationPar->getFactor2();
   fFactor2Sig       = pDigitisationPar->getFactor2Sig();
   fIncreaseNoise    = pDigitisationPar->getIncreaseNoise();
   fParam1           = pDigitisationPar->getParameter1();
   fParam2           = pDigitisationPar->getParameter2();
   fQupper           = pDigitisationPar->getQupper();
   fSigmaValue       = pDigitisationPar->getSigmaValue();
   binsQE            = pDigitisationPar->getQEBinsNr();

   photlength.Set(binsQE, pDigitisationPar->getPhotonLenArray());
   photeffic .Set(binsQE, pDigitisationPar->getPhotonEffArray());
   fExpSlope .Set(6,      pDigitisationPar->getExpSlope());

   for (Int_t sec = 0; sec < 6; ++sec)
      correction[sec].Set(binsQE, pDigitisationPar->getCorrectionParams(sec));


   // this variable is the probability that a given pad will have
   // a signal induced by the electronic noise above threshold
   ga->SetRange(-10.0, 10.0);
   ga->SetParameters(1.0 / ((TMath::Sqrt(2. * TMath::Pi())) * fIncreaseNoise),
                     -1.0 / (2. * fIncreaseNoise * fIncreaseNoise));
   noiseProb = 0.5 -  ga->Integral(0.0, fSigmaValue);


   return kTRUE;
}
//============================================================================

//----------------------------------------------------------------------------
Int_t
HRichDigitizer::execute()
{
   // At the end of the execute() the TClonesArray that contains
   // the track numbers is sorted by the pad addreses. Then
   // every CalSim object is retrieved from the catRichCal
   // container to assign to each pad the corresponding nTrack1, nTrack2.
   // These 2 numbers are the indexes of the track nbs. in the TClonesArray
   // HRichTrack. Finally the noise is calculated.

   vector<Int_t> index;
   mapTracks.clear();

   HGeantRichPhoton* pCherenkovHit = NULL;
   HGeantRichDirect* pDirectHit    = NULL;
   HRichCalSim*      calsimobj     = NULL;
   HRichPadFilter    padFilter;


   Bool_t wasReal    = kFALSE;
   Int_t fCerNr      = 0;
   Int_t fDirNr      = 0;

   countNoisePad = 0;
   fChargeOnWireList.Delete();
   fTrackNumberList.Delete();


   if (NULL == pCalPar) {
      Error("execute", "Pointer to HRichCalPar is NULL, needed for THR, noise,... simulation!!!");
      return kSkipEvent;
   }


   //---------------------------------------------------------------------
   // In embedding mode the trackNumber of the
   // real data has to be set

   // remember the address of pads fired by real data
   // for later
   vector < Int_t > addr_Real(200, 0); // alocate for 200
   addr_Real.clear();                 // actual size = 0

   if (gHades->getEmbeddingMode() > 0 && gHades->getEmbeddingDebug()==1)  catCal->Clear();

   if (gHades->getEmbeddingMode() > 0) {

      HRichCalSim* cal = NULL;
      iterRichCal->Reset();
      while ((cal = static_cast<HRichCalSim*>(iterRichCal->Next()))) {
         addr_Real.push_back(cal->getAddress());  // remember which objects came from real data
         cal->setEventNr(gHades->getCurrentEvent()->getHeader()->getEventSeqNumber());
         cal->setEnergy(0); // realID
         Float_t dummy[2];
         dummy[0] = gHades->getEmbeddingRealTrackId();
         dummy[1] = 0; // flag: realID==0
         TVector rTrack(1, 2, dummy);
         loc[0] = cal->getSector();
         loc[1] = cal->getRow();
         loc[2] = cal->getCol();
         updateTrack(cal, loc, &rTrack);
      }
   }
   //---------------------------------------------------------------------

   //-------------------------------------------------------------------
   // digitization of GEANT data starts here

   // if one wants to have pure simulation in embedding mode, HRichCalSim
   // category has to be cleared (filled with real data in unpacker task)
   // catCal->Clear();

   //---------------------------------------------------------------------
   // prob selection for delta electrons
   if(useDeltaElectrons && probDeltaAccepted<1)
   {
       mDeltaTrackProb.clear();

       if(catKine){
	   Int_t nKine = catKine->getEntries();
	   for(Int_t i=0;i<nKine;i++){
	       HGeantKine* kine =  (HGeantKine*)catKine-> getObject(i);
	       Float_t mom = kine->getTotalMomentum() ;
	       Int_t generator = kine->getGeneratorInfo();
	       if(kine->getParentTrack() == 0 &&
		  (kine->getID() == ionID ||                                                    // beam ions simulated
		   ( useDeltaMomSelection && kine->getID() == 3 && mom < momMaxDeltaElecCut) || // any electron < momCut (shooting with kine generator)
		   (!useDeltaMomSelection && kine->getID() == 3 && generator ==-3 )             // delta electrons input file source id ==-3
		 )
		 )
	      {
		  mDeltaTrackProb[kine] = gRandom->Rndm();
	      }
	   }
       }
   }
   //---------------------------------------------------------------------

   iterRichPhoton->Reset();
   while ((pCherenkovHit = static_cast<HGeantRichPhoton*>(iterRichPhoton->Next()))) {

       //-------------------------------------------------------------------
       // work on delta electrons
       Int_t trkNum        = pCherenkovHit->getTrack();
       HGeantKine* primary = HGeantKine::getPrimary(trkNum,(HLinearCategory*)catKine);

       //---------------------------------------------------------------------
       // identify delta electrons
       Bool_t isDelta      = kFALSE;
       Float_t mom         = 0;
       Int_t   generator   = 0;
       if(primary) { // primary
	   mom       = primary->getTotalMomentum() ;
	   generator = primary->getGeneratorInfo();
	   if( primary->getID() == ionID ||                                                    // beam ions simulated
	      ( useDeltaMomSelection && primary->getID() == 3 && mom <momMaxDeltaElecCut)  ||  // any electron < momCut (shooting with kine generator)
	      (!useDeltaMomSelection && primary->getID() == 3 && generator ==-3 )              // delta electrons input file source id ==-3
	     ) isDelta = kTRUE;
       }
       //---------------------------------------------------------------------

       if(useDeltaElectrons)
       {
	   if(isDelta)
	   {
	       Int_t s = pCherenkovHit->getSector();
	       if(mom < momMinDeltaCut[s]) continue;  // skipp all delta lower than cutmom

	       //-------------------------------------------------------------------
	       if(probDeltaAccepted<1)
	       {
		   Float_t prob = 2;
		   itDelta = mDeltaTrackProb.find(primary);
		   if(itDelta != mDeltaTrackProb.end()) prob = itDelta->second;
		   else {
		       Error("execute()","No primary in delta map for trk = %i found! Should not happen!",trkNum);
		       primary->print();
		   }
		   if(prob < probDeltaAccepted ) continue;
	       }
	       //-------------------------------------------------------------------
	   }
       } else { // skipp all deltaelectrons (generatorinfo ==-3)
	   if(isDelta) continue;
       }
       //-------------------------------------------------------------------


      ++fCerNr;
      // for the oem measurement I have to increase the track number
      // of each produced photon by myself (fCerNr). This number
      // will be the track number od the photon.
      if (kTRUE == isOEM)
         digitiseCherenkovHits(pCherenkovHit, fCerNr);
      else digitiseCherenkovHits(pCherenkovHit, 0);
   }

   iterRichDirect->Reset();
   while ((pDirectHit = static_cast<HGeantRichDirect*>(iterRichDirect->Next()))) {

       //-------------------------------------------------------------------
       // work on delta electrons
       Int_t trkNum        = pDirectHit->getTrack();
       HGeantKine* primary = HGeantKine::getPrimary(trkNum,(HLinearCategory*)catKine);
       if(primary) { // primary
	   Float_t mom     = primary->getTotalMomentum() ;
	   Int_t generator = primary->getGeneratorInfo();
	   if( primary->getID() == ionID ||                                                    // beam ions simulated
	      ( useDeltaMomSelection && primary->getID() == 3 && mom <momMaxDeltaElecCut)  ||  // any electron < momCut (shooting with kine generator)
	      (!useDeltaMomSelection && primary->getID() == 3 && generator ==-3 )              // delta electrons input file source id ==-3
	     )
	   {
	       if(useDeltaElectrons)
	       {
		   Int_t s = pDirectHit->getSector();
		   if(mom < momMinDeltaCut[s]) continue;  // skipp all delta lower than cutmom

		   //-------------------------------------------------------------------
		   if(probDeltaAccepted<1)
		   {
		       Float_t prob = 2;
		       itDelta = mDeltaTrackProb.find(primary);
		       if(itDelta != mDeltaTrackProb.end()) prob = itDelta->second;
		       else {
			   Error("execute()","No primary in delta map for trk = %i found! Should not happen!",trkNum);
			   primary->print();
		       }
		       if(prob < probDeltaAccepted ) continue;
		   }
		   //-------------------------------------------------------------------

	       } else {
		   continue; // skipp all delta electrons and daughter hits
	       }
	   }
       }
       //-------------------------------------------------------------------

       digitiseDirectHits(pDirectHit);
      fDirNr++;
   }

   digitisePads();
   //-------------------------------------------------------------------



   //-------------------------------------------------------------------
   // generate noise and add the charge to the already fired pads
   iterRichCal->Reset();
   while ((calsimobj = static_cast<HRichCalSim*>(iterRichCal->Next()))) {
      //loop on cal sim objects. First the calsim container
      // contains only those pads fired by the photons.
      // if the electronic noise is switched a charge fluctuation
      // dues to the noise is added to the pad charge
      // and then all those pads that are below threshold
      // get a 0 charge

      wasReal = kFALSE;
      if (find(addr_Real.begin(), addr_Real.end(), calsimobj->getAddress()) != addr_Real.end()) {
         wasReal = kTRUE;
      }

      //do not add correlated noise to real data
      if (kTRUE == isActiveNoise && kFALSE == wasReal && NULL != pCalPar) {
         addNoiseToCharge(calsimobj);
      }

      if (NULL != pCalPar) {
         if (0 == checkPad(calsimobj) && kFALSE == wasReal) {
            // if charge is below threshold and
            // pad does not contain real data
            calsimobj->setCharge(0.);//LF
         }
      }

      // in the updateCharge member for each fired pad the energy of
      // the "hitting" photon is added. At the same time the number
      // of the photons hits is stored, so that after having digizited
      // all pads the average photon energy for each pad can be calculated
      // as follows.

      if (0 != calsimobj->getNHits())
         calsimobj->setEnergy(calsimobj->getEnergy() / calsimobj->getNHits());
      //-------------------------------------------------------------------
      // set index range

   } // end of loop on calsim object, pads fired by photons
   //-------------------------------------------------------------------


   //-------------------------------------------------------------------
   // after the charge propagation due tot he photons is completed
   // the electronic noise is produced. This part is skipped in embedding.
   if (kTRUE == isActiveNoise && gHades->getEmbeddingMode() == 0 && NULL != pCalPar) {
       makeNoiseOnPads();
   }
   //-------------------------------------------------------------------





   //-------------------------------------------------------------------
   // last action: sort track category and fill
   // the index range to the cal object

   catTrack->sort();   // sort track objects


   iterRichCal->Reset();
   while ((calsimobj = static_cast<HRichCalSim*>(iterRichCal->Next()))) {

       Int_t addPad = calsimobj->getAddress();
       //calsimobj->setNTrack1(0);
       map<Int_t, vector <HRichTrack*> >::iterator iter = mapTracks.find(addPad);  // pad addr -> list of HRichTrack
       if (iter != mapTracks.end()) { // found address
	   vector <HRichTrack*> & list = iter->second;
	   UInt_t n = list.size();
	   if (n > 1) {  // more than 1 track hit the pad
	       index.clear();
	       for (UInt_t i = 0; i < n; i ++) {
		   // store the indices in HRichTrack cat for each HRichTrack
		   index.push_back(catTrack->getIndex(list[i]));
	       }
	       std::sort(index.begin(), index.end()); // sort indices in ascending order
	       calsimobj->addTrackId(index[0]);
	       calsimobj->addTrackId(index[n - 1]);
	   } else { // only 1 track hit the pad
	       calsimobj->addTrackId(catTrack->getIndex(list[0]));   // both values are the same
	       calsimobj->addTrackId(catTrack->getIndex(list[0]));
	   }
       } else {
	   Error("execute()", "address of pad =%i not found in map!",addPad);
       }
   }
   //-------------------------------------------------------------------




   //-------------------------------------------------------------------
   // all the pads with charge 0 are removed from the calsim container
   catCal->filter(padFilter);
   //-------------------------------------------------------------------

   return 0;
}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::GaussFun(const Float_t mean,
                         const Float_t sigma)
{

   Double_t x = 0.0;
   Double_t y = 0.0;
   Double_t z = 0.0;

   do {
      y = gRandom->Rndm();
   } while (!y);
   z = gRandom->Rndm();

   x = z * 2 * TMath::Pi();
   return mean + sigma * static_cast<Float_t>(sin(x) * sqrt(-2.0 * log(y)));
}
//============================================================================

//----------------------------------------------------------------------------
Bool_t
HRichDigitizer::calcQE(const Float_t photlen,
                       const Int_t sec)
{

   Int_t   i     = 0;
   Float_t fDraw = 0.0;

   if (100 == photlen)
      return kTRUE;

   fDraw = gRandom->Rndm();

   for (i = 0; i < binsQE; ++i) {
      if (i == 0) {
         if (photlen < ((photlength[i] + photlength[i+1]) / 2)) {
            if (fSlopeCorrection * fDraw > photeffic[i] * correction[sec][i]) {
               return kFALSE;
            } else {
               return kTRUE;
            }
         }
      } else if (i == binsQE - 1) {
         if (photlen >= ((photlength[i-1] + photlength[i]) / 2)) {
            if (fSlopeCorrection * fDraw > photeffic[i] * correction[sec][i]) {
               return kFALSE;
            } else {
               return kTRUE;
            }
         }
      } else if (((photlength[i-1] + photlength[i]) / 2) <= photlen &&
                 ((photlength[i] + photlength[i+1]) / 2) > photlen) {
         if (fSlopeCorrection * fDraw > photeffic[i] * correction[sec][i]) {
            return kFALSE;
         } else {
            return kTRUE;
         }
      }
   }
   return kTRUE;
}
//============================================================================

//----------------------------------------------------------------------------
Int_t
HRichDigitizer::getWireNr(const Float_t xhit)
{

   Int_t   i       = 0;
   Int_t   nWireNr = -1;
   Float_t Xwir    = 0.0;

   for (i = 0; i < fWiresNr; ++i) {
      Xwir = pGeometryPar->getWiresPar()->getWire(i)->getWireX();
      if ((xhit >= Xwir - fWiresDist) && (xhit < Xwir + fWiresDist)) {
         nWireNr = i;
         break;
      }
   }

   return nWireNr;

}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::calcChargeOnWire(const Int_t   sector,
                                 const Float_t xhit,
                                 const Float_t yhit,
                                 const Float_t nTrack,
                                 const Float_t nFlag,
                                 Float_t ene)
{
// this function calculates the charge on each wire and saves it in a TList
// moreover, it saves the track number and the corresponding flag
// (cf HRichTrack) in a second TList.
// The charge is calculated according to one exponential function
// obtained fitting the total charge distribution of the photon candidates
// belonging to class one ( OEM data).
// That means that the so calculated charge isn't in reality the
// original charge deposited on the wire but the total amount of the charge
// coupled to the pads. Therefore it isn't any longer necessary to
// use an additional coupling factor. ( 75%)


   Bool_t      endLoop      = kFALSE;
   Int_t       fHitedWireNr = 0;
   Float_t     fX           = 0.0;
   Float_t     fY           = 0.0;
   Float_t     fQ           = 0.0;
   Float_t     charge       = 0.0;
   HRichFrame* pFrame       = NULL;
   TVector*    gTrack1      = NULL;
   Float_t     dummy[2];

   if (NULL == (pFrame = pGeometryPar->getFramePar())) {
      Error("calcChargeOnWire", "Can not get RICH frame parameters");
      return -1;
   }

   if (-1 == (fHitedWireNr = getWireNr(xhit))) return -1;

   dummy[0] = nTrack;
   dummy[1] = nFlag;
   gTrack1  = new  TVector(1, 2, dummy);

   fX = pGeometryPar->getWiresPar()->getWire(fHitedWireNr)->getWireX();
   fY  = yhit;

   while (kFALSE == endLoop) {
      charge = 1.0 / fExpSlope[sector] * log(gRandom->Rndm()  * (exp(fExpSlope[sector] * fQupper) - 1.0) + 1.0);
      if (charge <= fQupper) endLoop = kTRUE;
   }

   fQ = charge * fChargePerChannel;

   if (ene == 100) {
      ene = 0.;
   }

   if (fQ > 0. && kFALSE == pFrame->isOut(fX, fY)) {
      fChargeOnWireList.Add(new HRichWireSignal(sector, fHitedWireNr,
                                                fQ, fX, fY, ene));
      fTrackNumberList.Add(gTrack1);
   } else {
      delete gTrack1;
   }

   return fQ;

}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::digitiseCherenkovHits(HGeantRichPhoton *pCerHit,
                                      const Int_t count)
{
// for every photon hit on a pad the resulting charge on a wire
// is calculated and the track number of the photon parent is stored.
// (cf. calcChargeOnWire).

   Float_t xHitcm = (pCerHit->getX() / 10.0);           //HGeant output is in mm!!!
   Float_t yHitcm = (pCerHit->getY() / 10.0 + fYShift); //HGeant output is in mm!!!

   countFBphot = 0;

   if (0 == count)
      processPhoton(pCerHit->getEnergy(), xHitcm, yHitcm,
                    pCerHit->getTrack(), pCerHit->getSector());
   else processPhoton(pCerHit->getEnergy(), xHitcm, yHitcm,
                         count, pCerHit->getSector());

}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::processPhoton(const Float_t ene,
                              const Float_t xPos,
                              const Float_t yPos,
                              const Int_t   track,
                              const Int_t   sector)
{

   Float_t eneFeedBack  = 0.0;
   Float_t xHitcmFB     = 0.0;
   Float_t yHitcmFB     = 0.0;
   Float_t chargeOnWire = 0.0;
   HRichFrame* pFrame   = NULL;

   if (NULL == (pFrame = pGeometryPar->getFramePar())) {
      Error("processPhoton", "Can not get RICH frame parameters");
      return;
   }

   if (kTRUE  == calcQE(ene, sector) &&
       kFALSE == pFrame->isOut(xPos, yPos)) {
      chargeOnWire = calcChargeOnWire(sector, xPos, yPos, track, 0, ene);
      if (calcFeedBack(sector, xPos, yPos, eneFeedBack,
                       xHitcmFB, yHitcmFB, chargeOnWire) && countFBphot < 7) {
         // -5 is the tracknumber assigned to all the feedback photons.
         processPhoton(eneFeedBack, xHitcmFB, yHitcmFB, -5, sector);
      }
   }
}
//============================================================================

//----------------------------------------------------------------------------
Bool_t
HRichDigitizer::calcFeedBack(const Int_t   sec,
                             const Float_t xhit,
                             const Float_t yhit,
                             Float_t &ene,
                             Float_t &xhittFB,
                             Float_t &yhittFB,
                             const Float_t charge)
{
// We assume that the feed back photon is produced on the anodic wire,
// the number of the feed back photon is proportional to the value A0.

   countFBphot++;

   Float_t thetaDir = 0.0;
   Float_t phiDir   = 0.0;
   Float_t r        = 0.0;
   Float_t fDraw1   = 0.0;
   Float_t fDraw2   = 0.0;

   if (gRandom->Rndm() < (charge * 7.8e-6)) {
      fDraw1   = gRandom->Rndm();
      fDraw2   = gRandom->Rndm();

      thetaDir = fDraw1 * 90;
      phiDir   = fDraw1 * 360;
      r        = distWirePads * TMath::Tan(thetaDir * TMath::DegToRad());
      xhittFB  = xhit + r * TMath::Cos(phiDir * TMath::DegToRad());
      yhittFB  = yhit + r * TMath::Sin(phiDir * TMath::DegToRad());

      // the Alice TRD gives as VUV photon energies the following
      // values : 156nm,166nm,193nm with weights 30%,57%,13%
      // they correspond to :7.94 eV,7.46 eV,6.42eV.

      if (fDraw2 < 0.13) ene = 6.42;
      else if (fDraw2 < 0.43) ene = 7.94;
      else                      ene = 7.46;

      return kTRUE;
   } else {
      ene     = 0;
      xhittFB = 0;
      yhittFB = 0;
      return kFALSE;

   }
}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::digitiseDirectHits(HGeantRichDirect *pDirHit)
{
// for every direct hit (charge particle hitting the RICH or ionizing
// the gas near the surface of the photon detector)  the
// resulting charge on the wires is calculated and the track number
// of the charged particle hitting the pad is stored.
// (cf. calcChargeOnWire)

   Int_t       i           = 0;
   Int_t       fStepsNr    = 0;
   Int_t       dTrack      = -1;
   Int_t       dId         = -1;
   Float_t     fStepLength = 0.0;
   Float_t     fNewX       = 0.0;
   Float_t     fNewY       = 0.0;
   HRichFrame* pFrame      = NULL;

   Float_t     xHitcm      = pDirHit->getX() / 10.0F;             //HGeant output is in mm!!!
   Float_t     yHitcm      = pDirHit->getY() / 10.0F + fYShift ;  //HGeant output is in mm!!!

   if (NULL == (pFrame = pGeometryPar->getFramePar())) {
      Error("digitiseDirectHits", "Can not get RICH frame parameters");
      return;
   }

   if (pDirHit->getEnergyLoss() > 0.0F &&
       // one day it will be additional condition if it is mirror or detector
       kFALSE == pFrame->isOut(xHitcm, yHitcm)) {
      // Number of electrons is given in keV while the energy loss is given
      // in MeV, therefore a factor 1000 is needed to calculate the correct
      // number of steps

      fStepsNr = static_cast<Int_t>(1 + fElectronsNr * 1000 * pDirHit->getEnergyLoss());
      if (fStepsNr > 5000) {
#ifdef HRICH_DEBUGMODE
         Warning("digitiseDirectHits",
                 "Evt %d: number of maximum steps (5000) exceeded by %d!",
                 gHades->getCurrentEvent()->getHeader()->getEventSeqNumber(), fStepsNr);
#endif
         fStepsNr = 5000;
      }

      // units: trackLength is in mm and coordinates in cm!
      fStepLength = 0.1 * pDirHit->getTrackLengthInPhotDet() / static_cast<Float_t>(fStepsNr);

      for (i = 0; i < fStepsNr; ++i) {
         fNewX = xHitcm + (i + 1) * fStepLength *
                 sin(TMath::DegToRad() * pDirHit->getTheta()) * cos(TMath::DegToRad() * pDirHit->getPhi());
         fNewY = yHitcm + (i + 1) * fStepLength *
                 sin(TMath::DegToRad() * pDirHit->getTheta()) * sin(TMath::DegToRad() * pDirHit->getPhi());
         pDirHit->getTrack(dTrack, dId);
         // the energy of the direct hits is set to 0
         // not to modify the average energy deposited by one or more
         // photons on one pad. (this is very important for the OEM
         // analysis).
         calcChargeOnWire(pDirHit->getSector(), fNewX, fNewY, dTrack, 1, 0);
      }
   }
}
//============================================================================

//----------------------------------------------------------------------------
HRichPad*
HRichDigitizer::translateCorners(HRichPad *pPad,
                                 const Float_t dx,
                                 const Float_t dy)
{
// check what you want to translate - probably real corners

   Int_t     i;
   HRichPad* fpTranslatedPad = new HRichPad(*pPad);

   if (NULL == fpTranslatedPad) {
      Error("translateCorners", "Can not get pointer to HRichPad");
      return NULL;
   }

   for (i = 0; i < fpTranslatedPad->getCornersNr(); ++i) {
      fpTranslatedPad->getCorner(i)->setX(fpTranslatedPad->getCorner(i)->getX() - dx);
      fpTranslatedPad->getCorner(i)->setY(fpTranslatedPad->getCorner(i)->getY() - dy);
   }
   fpTranslatedPad->setXmin(fpTranslatedPad->getXmin() - dx);
   fpTranslatedPad->setYmin(fpTranslatedPad->getYmin() - dy);
   fpTranslatedPad->setXmax(fpTranslatedPad->getXmax() - dx);
   fpTranslatedPad->setYmax(fpTranslatedPad->getYmax() - dy);

   // the ownership of this pointer is passed to outer variable-pointer
   return fpTranslatedPad;
}
//===========================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::makeNoiseOnPads()
{
// nbNoisePads is the number of pads on which the electronic noise
// will produce a non zero signal. This number is extimated taken
// into account the threshold taht has been used for the pedestals.

   HRichCalSim*     pCalSim   = NULL;
   HRichCalParCell* pCell     = NULL;
   const Int_t    maxCols     = pGeometryPar->getColumns();
   const Int_t    maxPads     = pGeometryPar->getPadsNr();
   Int_t          nbNoisePads = 0;
   Int_t          padNr       = 0;
   Int_t          iCol        = 0;
   Int_t          iRow        = 0;
   Float_t        fCharge     = 0.0;
   Float_t        fSigmaPad   = 0.0;
   Float_t        fMeanPad    = 0.0;
   Float_t        fFloatMean  = 0.0;

   // here the number of pads that will have a noise induced signal above
   // threshold is calculated. The number countNoisePad/6 represents
   // the number of pads that had already a noise signal above threshold
   // in each sector.

   nbNoisePads = static_cast<Int_t>(TMath::Floor(4800 * noiseProb));
   nbNoisePads = gRandom->Poisson(nbNoisePads) - static_cast<Int_t>(countNoisePad / 6.);

   if (nbNoisePads < 0) {
      nbNoisePads = 0;
   }

   // a Gauss distributed signal is induced on nbNoisePads pads
   // for each sector.
   for (Int_t sec = 0; sec < 6; ++sec) {
      if (pGeometryPar->getSectorActive(sec) > 0) {
         for (Int_t j = 0; j < nbNoisePads; ++j) {
            do {
               padNr     = static_cast<Int_t>(TMath::Floor(maxPads * gRandom->Rndm()));
               iRow      = pGeometryPar->calcRow(padNr);
               iCol      = pGeometryPar->calcCol(padNr);

               // the following condition is necessary to test that the pad
               // exists and is connected to the electronic

               if (padNr >= maxPads) {
                  Error("makeNoiseOnPads", "Index %d out of bounds...", maxPads);
                  continue;
               }

            } while (!pGeometryPar->getPadsPar()->getPad(padNr)->getPadActive() && iCol < maxCols);

            loc[0] = sec;
            loc[1] = iRow;
            loc[2] = iCol;

            pCell = static_cast<HRichCalParCell*>(pCalPar->getObject(loc));
            if (NULL != pCell) {
               fSigmaPad = pCell->getSigma();
            } else {
               Error("makeNoiseOnPads", "Did not get any valid HRichCalParCell...");
               fSigmaPad = 0.0;
            }

            if (fSigmaPad > 0.4) {
               fMeanPad   = pCell->getOffset();
               fFloatMean = fMeanPad - (TMath::Floor(fMeanPad));
               fCharge    = calcNoiseOnPad(fSigmaPad, fFloatMean);

               // the noise contribution is calculated with a gauss dist.
               // centred in 0, hence we have to add the float part of the
               // mean. Hence we cast the charge to an integer, then we
               // subtract the float part of the mean value and finally
               // we add a random number between 0 and 1 to have a float.

               pCalSim = static_cast<HRichCalSim*>(catCal->getObject(loc));
               // if the pad has already been fired no additional
               // charge is added and a new pad is drawn.

               if (NULL == pCalSim && fCharge > 0) {
                  pCalSim = static_cast<HRichCalSim*>(catCal->getSlot(loc));
                  if (NULL != pCalSim) {
                     pCalSim = new(pCalSim) HRichCalSim;
                     pCalSim->setEventNr(gHades->getCurrentEvent()->getHeader()->getEventSeqNumber());
                     pCalSim->setSector(loc[0]);
                     pCalSim->setCol(loc[2]);
                     pCalSim->setRow(loc[1]);
                     pCalSim->setCharge(fCharge);

		     // Now update HRichTrack
                     Float_t dummy[2];
                     dummy[0] = -1; // noise pads have tracknumber == -1
                     dummy[1] = 0;  // flag == 0
                     TVector rTrack(1, 2, dummy);
                     updateTrack(pCalSim, loc, &rTrack);
                  }
               } else j--;
            } else j--;
         }
      }
   }
}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::calcNoiseOnPad(const Float_t fSigmaPad,
                               const Float_t fFloatMean)
{
// the charge induced on the pad by the electronic noise
// is calculated according to a gauss function with
// sigma = fSigmaPad*fIncreaseNoise and mean 0.
// Anyway only values above threshold
// (fSigmaValue * fSigmaPad)
// are drawn

   const Int_t    cutLoop     = 10;
   const Int_t    iThreshold  = static_cast<Int_t>(fFloatMean + fSigmaValue * fSigmaPad);
   Int_t          count       = 0;
   Int_t          chan        = 0;
   Float_t        fCharge     = 0.0;



   if (fSigmaValue < 2.0)
      return static_cast<Int_t>(TMath::Sqrt(2.) * fSigmaPad * fIncreaseNoise
                                * noiseCharge[0] + fFloatMean) - fFloatMean + gRandom->Rndm();

   do {
      // the InverseErf function is defined in the array noiseCharge
      // with 1000 bin in the range (0.95,1). This range should be enough
      // to calculate the noise contribution up to a 2 sigma cut if the
      // variable fIncreaseNoise is 1. If the noise is increased ( e.g.
      // fSigmaNoise=1.9) the values are consistent with a cut of 3.9 sigma.

      chan = static_cast<Int_t>(((1. - 2. * noiseProb * gRandom->Rndm()) - 0.95) / (0.05 / 1000.));
      if (chan >= 0 && chan < 1000) {
         fCharge = TMath::Sqrt(2.) * fSigmaPad * fIncreaseNoise * noiseCharge[chan] + fFloatMean;
      } else fCharge = 0.;
      count++;
   } while ((static_cast<Int_t>(fCharge) <= iThreshold || fCharge > 1000.) && count < cutLoop);
   // the value of sigma can be either too big or too small
   // we try to avoid extreme cases.
   // If the sigma of the pad is too big (>10) or too small(<0.4)
   // then the array used to calculate the value of the charge
   // has not the required granularity and the previous loop
   // is neverending. Therefore we allow only 10 tries, that
   // should be sufficient for a reasonable sigma.

   if ((static_cast<Int_t>(fCharge) <= iThreshold || fCharge > 1000.) && count == cutLoop)
      return 0.;

   return static_cast<Int_t>(fCharge) - fFloatMean + gRandom->Rndm();

}
//===========================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::addNoiseToCharge(HRichCalSim* calSim)
{
// An additional charge is added on pads that have already
// been "fired" by a photon.
// This charge is drawn according to a Gauss distribution
// with sigma = fSigmaPad*fIncreaseNoise and mean = 0.

   HRichCalParCell* pCell     = NULL;
   Float_t          fCharge   = 0.0;
   Float_t          fSigmaPad = 0.0;


   loc[0] = calSim->getSector();
   loc[1] = calSim->getRow();
   loc[2] = calSim->getCol();

   pCell = static_cast<HRichCalParCell*>(pCalPar->getObject(loc));
   if (NULL != pCell) {
      fSigmaPad = pCell->getSigma();
   } else {
      Error("addNoiseToCharge", "Did not get any valid HRichCalParCell...");
      fSigmaPad = 1.0;
   }

   fCharge = GaussFun(0, fSigmaPad * fIncreaseNoise);
   if (fCharge > fSigmaPad * fSigmaValue) {
      countNoisePad++;
   }

   calSim->addCharge(fCharge);
}
//============================================================================

//----------------------------------------------------------------------------
Int_t
HRichDigitizer::checkPad(HRichCalSim *calSim)
{
// this function checks if the pads fired by the photons
// are above threshold.
// The procedure used to calculate the threshols is the
// same used for real data.  The charge on the pad is composed
// of the signal induced by the photon plus the noise fluctuation.
// The float part of the mean value of the noise distribution
// is added to the charge then
// the charge value is casted to an integer and is
// compared to the threshold.
// If the charge is above threshold, the float part of the mean is
// subtracted from the total charge and a random number between 0 and 1
// is added to the integer produce a float.

   HRichCalParCell* pCell = NULL;

   Float_t fCharge    = calSim->getCharge();
   Int_t   iRow       = calSim->getRow();
   Int_t   iCol       = calSim->getCol();
   Int_t   iSec       = calSim->getSector();
   Int_t   padNr      = iCol + iRow * pGeometryPar->getColumns();
   Int_t   iCharge    = 0;
   Int_t   iThreshold = 0;
   Float_t fSigmaPad  = 0.0;
   Float_t fMeanPad   = 0.0;
   Float_t fFloatMean = 0.0;

   loc[0] = iSec;
   loc[1] = iRow;
   loc[2] = iCol;

   pCell = static_cast<HRichCalParCell*>(pCalPar->getObject(loc));
   if (NULL != pCell) {
      fSigmaPad = pCell->getSigma();
      fMeanPad  = pCell->getOffset();
   } else {
      Error("checkPad", "Did not get any valid HRichCalParCell...");
      Error("checkPad", "Is pad active??? %d", pGeometryPar->getPadsPar()->getPad(padNr)->getPadActive());
      fSigmaPad = 1.0;
   }

   // check, if current pad has valid calibration parameters
   if (0 == fSigmaPad && 0 == fMeanPad) {
      return 0;
   }

   fFloatMean = fMeanPad - static_cast<Int_t>(fMeanPad);
   fCharge    += fFloatMean;
   iCharge    = static_cast<Int_t>(fCharge);
   iThreshold = static_cast<Int_t>(fFloatMean + fSigmaValue * fSigmaPad);

   if (iCharge > iThreshold) {
      fCharge = iCharge - fFloatMean + gRandom->Rndm();
      calSim->setCharge(fCharge);
      return iCharge;
   } else return 0;
}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::digitisePads()
{
// for each wire on which some charge has been deposited
// the corresponding coupled pads are calculated.
// The function updateCharge creates a HRichCalSim obj if
// the charge on the pad is greater than zero.
// A cut off threshold is applied to each pad in the execute func.
// after the digitilasation of all the hits.
// If the pad is hit twice in the same event, the charges
// corresponding to the 2 different hits are added.
// The particle track number is passed to the function
// updateCharge, too.

   UInt_t            xcenter    = 0;
   UInt_t            ycenter    = 0;
   Int_t             sector     = -1;
   Int_t             iPadInd    = 0;
   Float_t           energyPhot = 0.0;
   Float_t           yRel       = 0.0;
   Float_t           charge4    = 0.0;
   Float_t           param11    = 0.0;
   Float_t           param21    = 0.0;
   HRichPadTab*      pPadsPar   = NULL;
   HRichPad*         pPad       = NULL;
   HRichPad*         pTmpPad    = NULL;
   TVector*          nTrackTemp = NULL;
   HRichWireSignal*  pCharge    = NULL;

   if (NULL == (pPadsPar = pGeometryPar->getPadsPar())) {
      Error("digitisePads", "Can not get RICH pad parameters");
      return;
   }

   for (Int_t i = 0; i < fChargeOnWireList.GetSize(); ++i) {
      for (Int_t j = 0; j < 9; ++j)
         fDigitPadMatrix[j] = 0.;

      pCharge    = static_cast<HRichWireSignal*>(fChargeOnWireList.At(i));
      nTrackTemp = static_cast<TVector*>(fTrackNumberList.At(i));
      energyPhot = pCharge->getEnergy();
      sector     = pCharge->getSector();
      pPad       = pPadsPar->getPad(pCharge->getX(), pCharge->getY());
      xcenter    = pPad->getPadX();
      ycenter    = pPad->getPadY();

      // the position of the photon hit on the central pad is calculated.
      yRel    = TMath::Abs((pCharge->getY() - pPad->getYmin()) / (pPad->getYmax() - pPad->getYmin()));
      pTmpPad = translateCorners(pPad, pCharge->getX(), pCharge->getY());


      // do not forget to delete it at the end of loop
      // ------------------------ central pad (0,0)

      charge4 = 0.;
      if (2 == pTmpPad->getPadFlag()) {
         // First we calculate the charge on the central pad taking as
         // contributions on the side pads, 0 for the weak coupling and t
         // he mean for the strong one.
         // Then we recalculate the coupling parameter for the
         // strong coupling drawing a number on the landau
         // distribution centered in the mean value.

         param11 = gRandom->Landau(fFactor1, fFactor1Sig);
         param21 = GaussFun(fFactor2, fFactor2Sig);
         if (param21 < 0.)
            param21 = 0.;
         charge4 = q4Calc(pCharge->getCharge(), yRel, param11, param21);
         if (charge4 < 0.) fDigitPadMatrix[4] = 0.;
         else {
            updateCharge(sector, pPad, charge4, nTrackTemp, energyPhot);
            fDigitPadMatrix[4] = charge4;
         }
      }

      //------------------------ loop on other pads
      iPadInd = 0;
      for (Int_t n = -1; n < 2; ++n) {
         for (Int_t m = -1; m < 2; ++m) {

            if ((m != 0 || n != 0) &&
                (static_cast<Int_t>(xcenter) + m) >= 0 &&
                (static_cast<Int_t>(ycenter) + n) >= 0) {
               if (pPadsPar->getPad(xcenter + m, ycenter + n) &&
                   pPadsPar->getPad(xcenter + m, ycenter + n)->getPadActive()) {
                  delete pTmpPad;
                  pTmpPad = translateCorners(pPadsPar->getPad(xcenter + m, ycenter + n),
                                             pCharge->getX(), pCharge->getY());
                  if (2 == pTmpPad->getPadFlag()) {
                     fDigitPadMatrix[iPadInd] = calcIndCharge(yRel, fDigitPadMatrix[4],
                                                              iPadInd, pCharge->getWireNr(),
                                                              param11, param21);
                     if (fDigitPadMatrix[iPadInd] <= 0.)
                        fDigitPadMatrix[iPadInd] = 0.;
                     else
                        updateCharge(sector, pTmpPad, fDigitPadMatrix[iPadInd], nTrackTemp, energyPhot);
                  }
               }
            }
            iPadInd ++;
         }
      }
      delete pTmpPad;
   }
}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::calcIndCharge(const Float_t yCharge,
                              const Float_t q4,
                              const Int_t   iPdaIndex,
                              const Int_t   iWireNr,
                              const Float_t param11,
                              const Float_t param21)
{
// iWireNr is used to determine whether the wire is
// the left or the right one.
// Even wire numbers correspond to right.
// for the side pads a coupling costant is multiplied
// by the charge on the central pad, the upper an lower
// pad get an amount of charge that is position dependent.

   switch (iPdaIndex) {
      case 1:
         return (qX(1 - yCharge) * q4);
      case 7:
         return (qX(yCharge) * q4);
      case 3: {
         if (iWireNr % 2 == 0) return (param21 * q4);
         else return (param11 * q4);
      }
      case 5: {
         if (iWireNr % 2 == 0) return (param11 * q4);
         else return (param21 * q4);
      }
      case 2: {
         if (iWireNr % 2 == 0) return (1.37 * param11 * q4 * qX(1 - yCharge));
         else return (1.37 * param21 * q4 * qX(1 - yCharge));
      }
      case 8: {
         if (iWireNr % 2 == 0) return (1.37 * param11 * q4 * qX(yCharge));
         else return (1.37 * param21 * q4 * qX(yCharge));
      }
      case 6: {
         if (iWireNr % 2 == 0) return (1.37 * param21 * q4 * qX(yCharge));
         else return (1.37 * param11 * q4 * qX(yCharge));
      }
      case 0: {
         if (iWireNr % 2 == 0) return (1.37 * param21 * q4 * qX(1 - yCharge));
         else return (1.37 * param11 * q4 * qX(1 - yCharge));
      }
   }
   return 0;
}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::qX(const Float_t pos)
{
// This function calculate the charge ratio between the upper/lower
// pad and the central one

   Float_t charge   =  0.0;
   Float_t q0       = -0.03;
   Float_t integral =  0.0;

   integral =  1.0 / (fParam1 * fParam1 * q0 + fParam1 * fParam2) -
               1.0 / (fParam1 * fParam1 + fParam1 * fParam2);
   charge   = ((q0 + fParam2 / fParam1) / (1.0 - (q0 + fParam2 / fParam1)
                                           * fParam1 * fParam1 * integral * pos))
              - fParam2 / fParam1;

   if (charge < 0.) charge = 0.;
   return charge;
}
//============================================================================

//----------------------------------------------------------------------------
Float_t
HRichDigitizer::q4Calc(const Float_t charge,
                       const Float_t pos,
                       const Float_t par1,
                       const Float_t par2)
{
// This function calculate the charge induced on the central pad.
// the coupling factor (75%) from the wire to the pad has
// been discarded since the charge distribution on the wire
// has been calculated fitting pads responses.

   Float_t gX  = 1 + qX(pos) + qX(1 - pos);
   Float_t gX1 = 1 + 1.37 * qX(pos) + 1.37 * qX(1 - pos);
   if (0 != gX)
      return  charge / ((par1 + par2) * gX1 + gX);
   else return 0.0;
}
//============================================================================

//----------------------------------------------------------------------------
void
HRichDigitizer::updateCharge(const Int_t     sector,
                             HRichPad* pPad,
                             const Float_t   charge,
                             TVector*  rTrack,
                             const Float_t   ene)
{
// This function creates an HRichCalSim obj that corresponds
// to a fired pad, it calls the function updateTrack,
// that stores the corresponding track numbers.


   Int_t        fCol    = 0;
   Int_t        fRow    = 0;
   HRichCalSim* pCalSim = NULL;

   pPad->getPadXY(&fCol, &fRow);

   locat[0] = sector;
   locat[1] = fRow;
   locat[2] = fCol;

   pCalSim = static_cast<HRichCalSim*>(catCal->getObject(locat));
   if (NULL == pCalSim) {
      pCalSim = static_cast<HRichCalSim*>(catCal->getSlot(locat));
      if (NULL != pCalSim) {
         pCalSim = new(pCalSim) HRichCalSim;
         pCalSim->setEventNr(gHades->getCurrentEvent()->getHeader()->getEventSeqNumber());
         pCalSim->setSector(locat[0]);
         pCalSim->setCol(locat[2]);
         pCalSim->setRow(locat[1]);
         updateTrack(pCalSim, locat, rTrack);
      }
   }
   if (NULL != pCalSim) {
      pCalSim->addCharge(charge * fChargeScaling / fChargePerChannel);
      // the feed back photon and the direct hits are assigned energy
      // equal to 0. Infact the energy of the other photons emitted in the
      // oem experiment depends on the polar emission angle theta
      // (dispersion in the solid radiators) and this is not true
      // for the feed back photons and for the direct hits.
      // There fore their energy isnt added to the pad they fire
      // and isnt taken into account in the calculation theta->Energy
      // because it would falsify the distribution.

      // cut-off in ADC
      if (pCalSim->getCharge() > fQupper)
         pCalSim->setCharge(8192);

      if (ene > 0) {
         pCalSim->addHit();
         pCalSim->addEnergy(ene);
      }
      // the track object is created for all the photon and direct hits
      // the feedback photons have track number -5 and flag 0.
      // Only the pad fired just because of electronic noise
      // dont correspond to any track objects.
      updateTrack(pCalSim, locat, rTrack);
   }
}
//============================================================================

//---------------------------------------------------------------------------
void
HRichDigitizer::updateTrack(HRichCalSim* pCal,
                            HLocation&   loc,
                            TVector*     rTrack)
{
// this function stores the track numbers of parent
// particles of photons and of direct hits in a linear
// category (HRichTrack). This category is set sortable.

   HRichTrack *pRichTrack = NULL;
   Int_t Ad = pCal->getAddress();

   map<Int_t, vector <HRichTrack*> >::iterator iter = mapTracks.find(Ad);
   if (iter != mapTracks.end()) { // found address
      vector <HRichTrack*> & list = iter->second;
      UInt_t n = list.size();
      for (UInt_t i = 0; i < n; i++) {
         pRichTrack = list[i];
         if (pRichTrack->getTrack()   == (*rTrack)(1) &&
             pRichTrack->getFlag()    == (*rTrack)(2)
            ) return; // already registered
      }
   }

   pRichTrack = static_cast<HRichTrack*>(catTrack->getNewSlot(loc1));
   if (NULL != pRichTrack) {
      pRichTrack = new(pRichTrack) HRichTrack;
      pRichTrack->setEventNr(pCal->getEventNr());
      //usage of TVector because of used in TList, explicit cast to integer is needed since TVector converts all arguments into double.
      pRichTrack->setTrack((Int_t)((*rTrack)(1)));
      pRichTrack->setFlag((Int_t)((*rTrack)(2)));
      pRichTrack->setAddress(Ad);

      if (iter != mapTracks.end()) { // old address
         vector <HRichTrack*> & list = iter->second;
         list.push_back(pRichTrack);
      } else {                    // new address
         vector<HRichTrack*> list;
         list.push_back(pRichTrack);
         mapTracks[Ad] = list;
      }
   }
}
//============================================================================

//---------------------------------------------------------------------------
Bool_t
HRichDigitizer::finalize()
{
   return kTRUE;
}
//============================================================================

//---------------------------------------------------------------------------
// This table contains values of the inverse error function in the range
// [0.95;1.] needed to create a set of random numbers following this
// funcion, used in makeNoiseOnPads
const Float_t HRichDigitizer::noiseCharge[] = {1.3859, 1.38621, 1.38651, 1.38681, 1.38712, 1.38742,
                                               1.38772, 1.38803, 1.38833, 1.38864, 1.38894, 1.38925, 1.38955, 1.38986, 1.39016,
                                               1.39047, 1.39078, 1.39108, 1.39139, 1.3917, 1.392, 1.39231, 1.39262, 1.39293,
                                               1.39324, 1.39355, 1.39386, 1.39416, 1.39447, 1.39478, 1.39509, 1.3954, 1.39572,
                                               1.39603, 1.39634, 1.39665, 1.39696, 1.39727, 1.39759, 1.3979, 1.39821, 1.39852,
                                               1.39884, 1.39915, 1.39946, 1.39978, 1.40009, 1.40041, 1.40072, 1.40104, 1.40135,
                                               1.40167, 1.40199, 1.4023, 1.40262, 1.40294, 1.40325, 1.40357, 1.40389, 1.40421,
                                               1.40453, 1.40485, 1.40516, 1.40548, 1.4058, 1.40612, 1.40644, 1.40676, 1.40708,
                                               1.40741, 1.40773, 1.40805, 1.40837, 1.40869, 1.40901, 1.40934, 1.40966, 1.40998,
                                               1.41031, 1.41063, 1.41096, 1.41128, 1.41161, 1.41193, 1.41226, 1.41258, 1.41291,
                                               1.41323, 1.41356, 1.41389, 1.41422, 1.41454, 1.41487, 1.4152, 1.41553, 1.41586,
                                               1.41619, 1.41651, 1.41684, 1.41717, 1.4175, 1.41784, 1.41817, 1.4185, 1.41883,
                                               1.41916, 1.41949, 1.41983, 1.42016, 1.42049, 1.42083, 1.42116, 1.42149, 1.42183,
                                               1.42216, 1.4225, 1.42283, 1.42317, 1.4235, 1.42384, 1.42418, 1.42451, 1.42485,
                                               1.42519, 1.42553, 1.42587, 1.4262, 1.42654, 1.42688, 1.42722, 1.42756, 1.4279,
                                               1.42824, 1.42858, 1.42892, 1.42927, 1.42961, 1.42995, 1.43029, 1.43064, 1.43098,
                                               1.43132, 1.43167, 1.43201, 1.43236, 1.4327, 1.43305, 1.43339, 1.43374, 1.43408,
                                               1.43443, 1.43478, 1.43512, 1.43547, 1.43582, 1.43617, 1.43652, 1.43687, 1.43722,
                                               1.43757, 1.43792, 1.43827, 1.43862, 1.43897, 1.43932, 1.43967, 1.44002, 1.44038,
                                               1.44073, 1.44108, 1.44144, 1.44179, 1.44215, 1.4425, 1.44286, 1.44321, 1.44357,
                                               1.44392, 1.44428, 1.44464, 1.44499, 1.44535, 1.44571, 1.44607, 1.44643, 1.44679,
                                               1.44715, 1.44751, 1.44787, 1.44823, 1.44859, 1.44895, 1.44931, 1.44967, 1.45004,
                                               1.4504, 1.45076, 1.45113, 1.45149, 1.45185, 1.45222, 1.45259, 1.45295, 1.45332,
                                               1.45368, 1.45405, 1.45442, 1.45479, 1.45515, 1.45552, 1.45589, 1.45626, 1.45663,
                                               1.457, 1.45737, 1.45774, 1.45811, 1.45848, 1.45886, 1.45923, 1.4596, 1.45997,
                                               1.46035, 1.46072, 1.4611, 1.46147, 1.46185, 1.46222, 1.4626, 1.46297, 1.46335,
                                               1.46373, 1.46411, 1.46448, 1.46486, 1.46524, 1.46562, 1.466, 1.46638, 1.46676,
                                               1.46714, 1.46753, 1.46791, 1.46829, 1.46867, 1.46906, 1.46944, 1.46982, 1.47021,
                                               1.47059, 1.47098, 1.47136, 1.47175, 1.47214, 1.47253, 1.47291, 1.4733, 1.47369,
                                               1.47408, 1.47447, 1.47486, 1.47525, 1.47564, 1.47603, 1.47642, 1.47681, 1.47721,
                                               1.4776, 1.47799, 1.47839, 1.47878, 1.47918, 1.47957, 1.47997, 1.48036, 1.48076,
                                               1.48116, 1.48156, 1.48195, 1.48235, 1.48275, 1.48315, 1.48355, 1.48395, 1.48435,
                                               1.48475, 1.48516, 1.48556, 1.48596, 1.48636, 1.48677, 1.48717, 1.48758, 1.48798,
                                               1.48839, 1.4888, 1.4892, 1.48961, 1.49002, 1.49043, 1.49083, 1.49124, 1.49165,
                                               1.49206, 1.49247, 1.49289, 1.4933, 1.49371, 1.49412, 1.49454, 1.49495, 1.49536,
                                               1.49578, 1.49619, 1.49661, 1.49703, 1.49744, 1.49786, 1.49828, 1.4987, 1.49912,
                                               1.49954, 1.49996, 1.50038, 1.5008, 1.50122, 1.50164, 1.50207, 1.50249, 1.50291,
                                               1.50334, 1.50376, 1.50419, 1.50461, 1.50504, 1.50547, 1.50589, 1.50632, 1.50675,
                                               1.50718, 1.50761, 1.50804, 1.50847, 1.5089, 1.50934, 1.50977, 1.5102, 1.51064,
                                               1.51107, 1.5115, 1.51194, 1.51238, 1.51281, 1.51325, 1.51369, 1.51413, 1.51457,
                                               1.51501, 1.51545, 1.51589, 1.51633, 1.51677, 1.51721, 1.51765, 1.5181, 1.51854,
                                               1.51899, 1.51943, 1.51988, 1.52033, 1.52077, 1.52122, 1.52167, 1.52212, 1.52257,
                                               1.52302, 1.52347, 1.52392, 1.52437, 1.52483, 1.52528, 1.52573, 1.52619, 1.52665,
                                               1.5271, 1.52756, 1.52802, 1.52847, 1.52893, 1.52939, 1.52985, 1.53031, 1.53077,
                                               1.53123, 1.5317, 1.53216, 1.53262, 1.53309, 1.53355, 1.53402, 1.53449, 1.53495,
                                               1.53542, 1.53589, 1.53636, 1.53683, 1.5373, 1.53777, 1.53824, 1.53871, 1.53919,
                                               1.53966, 1.54014, 1.54061, 1.54109, 1.54156, 1.54204, 1.54252, 1.543, 1.54348,
                                               1.54396, 1.54444, 1.54492, 1.5454, 1.54589, 1.54637, 1.54685, 1.54734, 1.54783,
                                               1.54831, 1.5488, 1.54929, 1.54978, 1.55027, 1.55076, 1.55125, 1.55174, 1.55223,
                                               1.55273, 1.55322, 1.55372, 1.55421, 1.55471, 1.55521, 1.5557, 1.5562, 1.5567,
                                               1.5572, 1.5577, 1.55821, 1.55871, 1.55921, 1.55972, 1.56022, 1.56073, 1.56123,
                                               1.56174, 1.56225, 1.56276, 1.56327, 1.56378, 1.56429, 1.5648, 1.56532, 1.56583,
                                               1.56635, 1.56686, 1.56738, 1.56789, 1.56841, 1.56893, 1.56945, 1.56997, 1.57049,
                                               1.57102, 1.57154, 1.57206, 1.57259, 1.57312, 1.57364, 1.57417, 1.5747, 1.57523,
                                               1.57576, 1.57629, 1.57682, 1.57735, 1.57789, 1.57842, 1.57896, 1.57949, 1.58003,
                                               1.58057, 1.58111, 1.58165, 1.58219, 1.58273, 1.58328, 1.58382, 1.58437, 1.58491,
                                               1.58546, 1.58601, 1.58655, 1.5871, 1.58765, 1.58821, 1.58876, 1.58931, 1.58987,
                                               1.59042, 1.59098, 1.59154, 1.59209, 1.59265, 1.59321, 1.59378, 1.59434, 1.5949,
                                               1.59547, 1.59603, 1.5966, 1.59717, 1.59773, 1.5983, 1.59887, 1.59945, 1.60002,
                                               1.60059, 1.60117, 1.60174, 1.60232, 1.6029, 1.60348, 1.60406, 1.60464, 1.60522,
                                               1.6058, 1.60639, 1.60697, 1.60756, 1.60815, 1.60874, 1.60933, 1.60992, 1.61051,
                                               1.6111, 1.6117, 1.6123, 1.61289, 1.61349, 1.61409, 1.61469, 1.61529, 1.61589,
                                               1.6165, 1.6171, 1.61771, 1.61832, 1.61892, 1.61953, 1.62015, 1.62076, 1.62137,
                                               1.62199, 1.6226, 1.62322, 1.62384, 1.62446, 1.62508, 1.6257, 1.62632, 1.62695,
                                               1.62757, 1.6282, 1.62883, 1.62946, 1.63009, 1.63072, 1.63136, 1.63199, 1.63263,
                                               1.63327, 1.6339, 1.63454, 1.63519, 1.63583, 1.63647, 1.63712, 1.63777, 1.63841,
                                               1.63906, 1.63972, 1.64037, 1.64102, 1.64168, 1.64233, 1.64299, 1.64365, 1.64431,
                                               1.64498, 1.64564, 1.64631, 1.64697, 1.64764, 1.64831, 1.64898, 1.64966, 1.65033,
                                               1.65101, 1.65168, 1.65236, 1.65304, 1.65372, 1.65441, 1.65509, 1.65578, 1.65647,
                                               1.65716, 1.65785, 1.65854, 1.65924, 1.65993, 1.66063, 1.66133, 1.66203, 1.66273,
                                               1.66344, 1.66414, 1.66485, 1.66556, 1.66627, 1.66698, 1.6677, 1.66841, 1.66913,
                                               1.66985, 1.67057, 1.67129, 1.67202, 1.67274, 1.67347, 1.6742, 1.67493, 1.67567,
                                               1.6764, 1.67714, 1.67788, 1.67862, 1.67936, 1.68011, 1.68085, 1.6816, 1.68235,
                                               1.6831, 1.68386, 1.68461, 1.68537, 1.68613, 1.68689, 1.68766, 1.68842, 1.68919,
                                               1.68996, 1.69073, 1.69151, 1.69228, 1.69306, 1.69384, 1.69462, 1.6954, 1.69619,
                                               1.69698, 1.69777, 1.69856, 1.69936, 1.70015, 1.70095, 1.70175, 1.70256, 1.70336,
                                               1.70417, 1.70498, 1.70579, 1.7066, 1.70742, 1.70824, 1.70906, 1.70988, 1.71071,
                                               1.71154, 1.71237, 1.7132, 1.71404, 1.71487, 1.71571, 1.71656, 1.7174, 1.71825,
                                               1.7191, 1.71995, 1.72081, 1.72166, 1.72252, 1.72339, 1.72425, 1.72512, 1.72599,
                                               1.72686, 1.72774, 1.72862, 1.7295, 1.73038, 1.73127, 1.73216, 1.73305, 1.73394,
                                               1.73484, 1.73574, 1.73664, 1.73755, 1.73846, 1.73937, 1.74028, 1.7412, 1.74212,
                                               1.74304, 1.74397, 1.7449, 1.74583, 1.74677, 1.7477, 1.74865, 1.74959, 1.75054,
                                               1.75149, 1.75244, 1.7534, 1.75436, 1.75532, 1.75629, 1.75726, 1.75823, 1.75921,
                                               1.76019, 1.76117, 1.76216, 1.76315, 1.76415, 1.76514, 1.76614, 1.76715, 1.76816,
                                               1.76917, 1.77018, 1.7712, 1.77223, 1.77325, 1.77428, 1.77532, 1.77635, 1.7774,
                                               1.77844, 1.77949, 1.78054, 1.7816, 1.78266, 1.78373, 1.7848, 1.78587, 1.78695,
                                               1.78803, 1.78912, 1.79021, 1.7913, 1.7924, 1.7935, 1.79461, 1.79572, 1.79684,
                                               1.79796, 1.79909, 1.80022, 1.80135, 1.80249, 1.80363, 1.80478, 1.80594, 1.80709,
                                               1.80826, 1.80942, 1.8106, 1.81178, 1.81296, 1.81415, 1.81534, 1.81654, 1.81774,
                                               1.81895, 1.82017, 1.82139, 1.82261, 1.82384, 1.82508, 1.82632, 1.82757, 1.82882,
                                               1.83008, 1.83135, 1.83262, 1.83389, 1.83518, 1.83646, 1.83776, 1.83906, 1.84037,
                                               1.84168, 1.843, 1.84433, 1.84566, 1.847, 1.84835, 1.8497, 1.85106, 1.85243,
                                               1.8538, 1.85518, 1.85657, 1.85796, 1.85937, 1.86078, 1.86219, 1.86362, 1.86505,
                                               1.86649, 1.86794, 1.86939, 1.87086, 1.87233, 1.87381, 1.8753, 1.87679, 1.8783,
                                               1.87981, 1.88133, 1.88286, 1.8844, 1.88595, 1.88751, 1.88908, 1.89065, 1.89224,
                                               1.89383, 1.89544, 1.89705, 1.89868, 1.90031, 1.90196, 1.90361, 1.90528, 1.90696,
                                               1.90864, 1.91034, 1.91205, 1.91377, 1.9155, 1.91725, 1.919, 1.92077, 1.92255,
                                               1.92434, 1.92615, 1.92796, 1.92979, 1.93163, 1.93349, 1.93536, 1.93724, 1.93914,
                                               1.94105, 1.94297, 1.94491, 1.94687, 1.94884, 1.95082, 1.95282, 1.95484, 1.95687,
                                               1.95892, 1.96098, 1.96306, 1.96516, 1.96728, 1.96941, 1.97156, 1.97373, 1.97592,
                                               1.97813, 1.98036, 1.98261, 1.98487, 1.98716, 1.98947, 1.9918, 1.99415, 1.99653,
                                               1.99892, 2.00135, 2.00379, 2.00626, 2.00875, 2.01127, 2.01381, 2.01638, 2.01898,
                                               2.02161, 2.02426, 2.02694, 2.02965, 2.0324, 2.03517, 2.03797, 2.04081, 2.04368,
                                               2.04658, 2.04952, 2.0525, 2.05551, 2.05856, 2.06164, 2.06477, 2.06794, 2.07115,
                                               2.0744, 2.0777, 2.08105, 2.08444, 2.08788, 2.09137, 2.09491, 2.09851, 2.10216,
                                               2.10587, 2.10963, 2.11346, 2.11735, 2.1213, 2.12533, 2.12942, 2.13358, 2.13783,
                                               2.14214, 2.14654, 2.15103, 2.1556, 2.16027, 2.16503, 2.16989, 2.17486, 2.17993,
                                               2.18512, 2.19044, 2.19587, 2.20144, 2.20716, 2.21301, 2.21903, 2.22521, 2.23156,
                                               2.2381, 2.24484, 2.25179, 2.25896, 2.26637, 2.27404, 2.28199, 2.29023, 2.2988,
                                               2.30773, 2.31703, 2.32675, 2.33694, 2.34763, 2.35889, 2.37078, 2.38339, 2.39679,
                                               2.41112, 2.42652, 2.44316, 2.46127, 2.48115, 2.50322, 2.52803, 2.5564, 2.58961,
                                               2.62974, 2.68069, 2.75106, 2.86776
                                              };

















 hrichdigitizer.cc:1
 hrichdigitizer.cc:2
 hrichdigitizer.cc:3
 hrichdigitizer.cc:4
 hrichdigitizer.cc:5
 hrichdigitizer.cc:6
 hrichdigitizer.cc:7
 hrichdigitizer.cc:8
 hrichdigitizer.cc:9
 hrichdigitizer.cc:10
 hrichdigitizer.cc:11
 hrichdigitizer.cc:12
 hrichdigitizer.cc:13
 hrichdigitizer.cc:14
 hrichdigitizer.cc:15
 hrichdigitizer.cc:16
 hrichdigitizer.cc:17
 hrichdigitizer.cc:18
 hrichdigitizer.cc:19
 hrichdigitizer.cc:20
 hrichdigitizer.cc:21
 hrichdigitizer.cc:22
 hrichdigitizer.cc:23
 hrichdigitizer.cc:24
 hrichdigitizer.cc:25
 hrichdigitizer.cc:26
 hrichdigitizer.cc:27
 hrichdigitizer.cc:28
 hrichdigitizer.cc:29
 hrichdigitizer.cc:30
 hrichdigitizer.cc:31
 hrichdigitizer.cc:32
 hrichdigitizer.cc:33
 hrichdigitizer.cc:34
 hrichdigitizer.cc:35
 hrichdigitizer.cc:36
 hrichdigitizer.cc:37
 hrichdigitizer.cc:38
 hrichdigitizer.cc:39
 hrichdigitizer.cc:40
 hrichdigitizer.cc:41
 hrichdigitizer.cc:42
 hrichdigitizer.cc:43
 hrichdigitizer.cc:44
 hrichdigitizer.cc:45
 hrichdigitizer.cc:46
 hrichdigitizer.cc:47
 hrichdigitizer.cc:48
 hrichdigitizer.cc:49
 hrichdigitizer.cc:50
 hrichdigitizer.cc:51
 hrichdigitizer.cc:52
 hrichdigitizer.cc:53
 hrichdigitizer.cc:54
 hrichdigitizer.cc:55
 hrichdigitizer.cc:56
 hrichdigitizer.cc:57
 hrichdigitizer.cc:58
 hrichdigitizer.cc:59
 hrichdigitizer.cc:60
 hrichdigitizer.cc:61
 hrichdigitizer.cc:62
 hrichdigitizer.cc:63
 hrichdigitizer.cc:64
 hrichdigitizer.cc:65
 hrichdigitizer.cc:66
 hrichdigitizer.cc:67
 hrichdigitizer.cc:68
 hrichdigitizer.cc:69
 hrichdigitizer.cc:70
 hrichdigitizer.cc:71
 hrichdigitizer.cc:72
 hrichdigitizer.cc:73
 hrichdigitizer.cc:74
 hrichdigitizer.cc:75
 hrichdigitizer.cc:76
 hrichdigitizer.cc:77
 hrichdigitizer.cc:78
 hrichdigitizer.cc:79
 hrichdigitizer.cc:80
 hrichdigitizer.cc:81
 hrichdigitizer.cc:82
 hrichdigitizer.cc:83
 hrichdigitizer.cc:84
 hrichdigitizer.cc:85
 hrichdigitizer.cc:86
 hrichdigitizer.cc:87
 hrichdigitizer.cc:88
 hrichdigitizer.cc:89
 hrichdigitizer.cc:90
 hrichdigitizer.cc:91
 hrichdigitizer.cc:92
 hrichdigitizer.cc:93
 hrichdigitizer.cc:94
 hrichdigitizer.cc:95
 hrichdigitizer.cc:96
 hrichdigitizer.cc:97
 hrichdigitizer.cc:98
 hrichdigitizer.cc:99
 hrichdigitizer.cc:100
 hrichdigitizer.cc:101
 hrichdigitizer.cc:102
 hrichdigitizer.cc:103
 hrichdigitizer.cc:104
 hrichdigitizer.cc:105
 hrichdigitizer.cc:106
 hrichdigitizer.cc:107
 hrichdigitizer.cc:108
 hrichdigitizer.cc:109
 hrichdigitizer.cc:110
 hrichdigitizer.cc:111
 hrichdigitizer.cc:112
 hrichdigitizer.cc:113
 hrichdigitizer.cc:114
 hrichdigitizer.cc:115
 hrichdigitizer.cc:116
 hrichdigitizer.cc:117
 hrichdigitizer.cc:118
 hrichdigitizer.cc:119
 hrichdigitizer.cc:120
 hrichdigitizer.cc:121
 hrichdigitizer.cc:122
 hrichdigitizer.cc:123
 hrichdigitizer.cc:124
 hrichdigitizer.cc:125
 hrichdigitizer.cc:126
 hrichdigitizer.cc:127
 hrichdigitizer.cc:128
 hrichdigitizer.cc:129
 hrichdigitizer.cc:130
 hrichdigitizer.cc:131
 hrichdigitizer.cc:132
 hrichdigitizer.cc:133
 hrichdigitizer.cc:134
 hrichdigitizer.cc:135
 hrichdigitizer.cc:136
 hrichdigitizer.cc:137
 hrichdigitizer.cc:138
 hrichdigitizer.cc:139
 hrichdigitizer.cc:140
 hrichdigitizer.cc:141
 hrichdigitizer.cc:142
 hrichdigitizer.cc:143
 hrichdigitizer.cc:144
 hrichdigitizer.cc:145
 hrichdigitizer.cc:146
 hrichdigitizer.cc:147
 hrichdigitizer.cc:148
 hrichdigitizer.cc:149
 hrichdigitizer.cc:150
 hrichdigitizer.cc:151
 hrichdigitizer.cc:152
 hrichdigitizer.cc:153
 hrichdigitizer.cc:154
 hrichdigitizer.cc:155
 hrichdigitizer.cc:156
 hrichdigitizer.cc:157
 hrichdigitizer.cc:158
 hrichdigitizer.cc:159
 hrichdigitizer.cc:160
 hrichdigitizer.cc:161
 hrichdigitizer.cc:162
 hrichdigitizer.cc:163
 hrichdigitizer.cc:164
 hrichdigitizer.cc:165
 hrichdigitizer.cc:166
 hrichdigitizer.cc:167
 hrichdigitizer.cc:168
 hrichdigitizer.cc:169
 hrichdigitizer.cc:170
 hrichdigitizer.cc:171
 hrichdigitizer.cc:172
 hrichdigitizer.cc:173
 hrichdigitizer.cc:174
 hrichdigitizer.cc:175
 hrichdigitizer.cc:176
 hrichdigitizer.cc:177
 hrichdigitizer.cc:178
 hrichdigitizer.cc:179
 hrichdigitizer.cc:180
 hrichdigitizer.cc:181
 hrichdigitizer.cc:182
 hrichdigitizer.cc:183
 hrichdigitizer.cc:184
 hrichdigitizer.cc:185
 hrichdigitizer.cc:186
 hrichdigitizer.cc:187
 hrichdigitizer.cc:188
 hrichdigitizer.cc:189
 hrichdigitizer.cc:190
 hrichdigitizer.cc:191
 hrichdigitizer.cc:192
 hrichdigitizer.cc:193
 hrichdigitizer.cc:194
 hrichdigitizer.cc:195
 hrichdigitizer.cc:196
 hrichdigitizer.cc:197
 hrichdigitizer.cc:198
 hrichdigitizer.cc:199
 hrichdigitizer.cc:200
 hrichdigitizer.cc:201
 hrichdigitizer.cc:202
 hrichdigitizer.cc:203
 hrichdigitizer.cc:204
 hrichdigitizer.cc:205
 hrichdigitizer.cc:206
 hrichdigitizer.cc:207
 hrichdigitizer.cc:208
 hrichdigitizer.cc:209
 hrichdigitizer.cc:210
 hrichdigitizer.cc:211
 hrichdigitizer.cc:212
 hrichdigitizer.cc:213
 hrichdigitizer.cc:214
 hrichdigitizer.cc:215
 hrichdigitizer.cc:216
 hrichdigitizer.cc:217
 hrichdigitizer.cc:218
 hrichdigitizer.cc:219
 hrichdigitizer.cc:220
 hrichdigitizer.cc:221
 hrichdigitizer.cc:222
 hrichdigitizer.cc:223
 hrichdigitizer.cc:224
 hrichdigitizer.cc:225
 hrichdigitizer.cc:226
 hrichdigitizer.cc:227
 hrichdigitizer.cc:228
 hrichdigitizer.cc:229
 hrichdigitizer.cc:230
 hrichdigitizer.cc:231
 hrichdigitizer.cc:232
 hrichdigitizer.cc:233
 hrichdigitizer.cc:234
 hrichdigitizer.cc:235
 hrichdigitizer.cc:236
 hrichdigitizer.cc:237
 hrichdigitizer.cc:238
 hrichdigitizer.cc:239
 hrichdigitizer.cc:240
 hrichdigitizer.cc:241
 hrichdigitizer.cc:242
 hrichdigitizer.cc:243
 hrichdigitizer.cc:244
 hrichdigitizer.cc:245
 hrichdigitizer.cc:246
 hrichdigitizer.cc:247
 hrichdigitizer.cc:248
 hrichdigitizer.cc:249
 hrichdigitizer.cc:250
 hrichdigitizer.cc:251
 hrichdigitizer.cc:252
 hrichdigitizer.cc:253
 hrichdigitizer.cc:254
 hrichdigitizer.cc:255
 hrichdigitizer.cc:256
 hrichdigitizer.cc:257
 hrichdigitizer.cc:258
 hrichdigitizer.cc:259
 hrichdigitizer.cc:260
 hrichdigitizer.cc:261
 hrichdigitizer.cc:262
 hrichdigitizer.cc:263
 hrichdigitizer.cc:264
 hrichdigitizer.cc:265
 hrichdigitizer.cc:266
 hrichdigitizer.cc:267
 hrichdigitizer.cc:268
 hrichdigitizer.cc:269
 hrichdigitizer.cc:270
 hrichdigitizer.cc:271
 hrichdigitizer.cc:272
 hrichdigitizer.cc:273
 hrichdigitizer.cc:274
 hrichdigitizer.cc:275
 hrichdigitizer.cc:276
 hrichdigitizer.cc:277
 hrichdigitizer.cc:278
 hrichdigitizer.cc:279
 hrichdigitizer.cc:280
 hrichdigitizer.cc:281
 hrichdigitizer.cc:282
 hrichdigitizer.cc:283
 hrichdigitizer.cc:284
 hrichdigitizer.cc:285
 hrichdigitizer.cc:286
 hrichdigitizer.cc:287
 hrichdigitizer.cc:288
 hrichdigitizer.cc:289
 hrichdigitizer.cc:290
 hrichdigitizer.cc:291
 hrichdigitizer.cc:292
 hrichdigitizer.cc:293
 hrichdigitizer.cc:294
 hrichdigitizer.cc:295
 hrichdigitizer.cc:296
 hrichdigitizer.cc:297
 hrichdigitizer.cc:298
 hrichdigitizer.cc:299
 hrichdigitizer.cc:300
 hrichdigitizer.cc:301
 hrichdigitizer.cc:302
 hrichdigitizer.cc:303
 hrichdigitizer.cc:304
 hrichdigitizer.cc:305
 hrichdigitizer.cc:306
 hrichdigitizer.cc:307
 hrichdigitizer.cc:308
 hrichdigitizer.cc:309
 hrichdigitizer.cc:310
 hrichdigitizer.cc:311
 hrichdigitizer.cc:312
 hrichdigitizer.cc:313
 hrichdigitizer.cc:314
 hrichdigitizer.cc:315
 hrichdigitizer.cc:316
 hrichdigitizer.cc:317
 hrichdigitizer.cc:318
 hrichdigitizer.cc:319
 hrichdigitizer.cc:320
 hrichdigitizer.cc:321
 hrichdigitizer.cc:322
 hrichdigitizer.cc:323
 hrichdigitizer.cc:324
 hrichdigitizer.cc:325
 hrichdigitizer.cc:326
 hrichdigitizer.cc:327
 hrichdigitizer.cc:328
 hrichdigitizer.cc:329
 hrichdigitizer.cc:330
 hrichdigitizer.cc:331
 hrichdigitizer.cc:332
 hrichdigitizer.cc:333
 hrichdigitizer.cc:334
 hrichdigitizer.cc:335
 hrichdigitizer.cc:336
 hrichdigitizer.cc:337
 hrichdigitizer.cc:338
 hrichdigitizer.cc:339
 hrichdigitizer.cc:340
 hrichdigitizer.cc:341
 hrichdigitizer.cc:342
 hrichdigitizer.cc:343
 hrichdigitizer.cc:344
 hrichdigitizer.cc:345
 hrichdigitizer.cc:346
 hrichdigitizer.cc:347
 hrichdigitizer.cc:348
 hrichdigitizer.cc:349
 hrichdigitizer.cc:350
 hrichdigitizer.cc:351
 hrichdigitizer.cc:352
 hrichdigitizer.cc:353
 hrichdigitizer.cc:354
 hrichdigitizer.cc:355
 hrichdigitizer.cc:356
 hrichdigitizer.cc:357
 hrichdigitizer.cc:358
 hrichdigitizer.cc:359
 hrichdigitizer.cc:360
 hrichdigitizer.cc:361
 hrichdigitizer.cc:362
 hrichdigitizer.cc:363
 hrichdigitizer.cc:364
 hrichdigitizer.cc:365
 hrichdigitizer.cc:366
 hrichdigitizer.cc:367
 hrichdigitizer.cc:368
 hrichdigitizer.cc:369
 hrichdigitizer.cc:370
 hrichdigitizer.cc:371
 hrichdigitizer.cc:372
 hrichdigitizer.cc:373
 hrichdigitizer.cc:374
 hrichdigitizer.cc:375
 hrichdigitizer.cc:376
 hrichdigitizer.cc:377
 hrichdigitizer.cc:378
 hrichdigitizer.cc:379
 hrichdigitizer.cc:380
 hrichdigitizer.cc:381
 hrichdigitizer.cc:382
 hrichdigitizer.cc:383
 hrichdigitizer.cc:384
 hrichdigitizer.cc:385
 hrichdigitizer.cc:386
 hrichdigitizer.cc:387
 hrichdigitizer.cc:388
 hrichdigitizer.cc:389
 hrichdigitizer.cc:390
 hrichdigitizer.cc:391
 hrichdigitizer.cc:392
 hrichdigitizer.cc:393
 hrichdigitizer.cc:394
 hrichdigitizer.cc:395
 hrichdigitizer.cc:396
 hrichdigitizer.cc:397
 hrichdigitizer.cc:398
 hrichdigitizer.cc:399
 hrichdigitizer.cc:400
 hrichdigitizer.cc:401
 hrichdigitizer.cc:402
 hrichdigitizer.cc:403
 hrichdigitizer.cc:404
 hrichdigitizer.cc:405
 hrichdigitizer.cc:406
 hrichdigitizer.cc:407
 hrichdigitizer.cc:408
 hrichdigitizer.cc:409
 hrichdigitizer.cc:410
 hrichdigitizer.cc:411
 hrichdigitizer.cc:412
 hrichdigitizer.cc:413
 hrichdigitizer.cc:414
 hrichdigitizer.cc:415
 hrichdigitizer.cc:416
 hrichdigitizer.cc:417
 hrichdigitizer.cc:418
 hrichdigitizer.cc:419
 hrichdigitizer.cc:420
 hrichdigitizer.cc:421
 hrichdigitizer.cc:422
 hrichdigitizer.cc:423
 hrichdigitizer.cc:424
 hrichdigitizer.cc:425
 hrichdigitizer.cc:426
 hrichdigitizer.cc:427
 hrichdigitizer.cc:428
 hrichdigitizer.cc:429
 hrichdigitizer.cc:430
 hrichdigitizer.cc:431
 hrichdigitizer.cc:432
 hrichdigitizer.cc:433
 hrichdigitizer.cc:434
 hrichdigitizer.cc:435
 hrichdigitizer.cc:436
 hrichdigitizer.cc:437
 hrichdigitizer.cc:438
 hrichdigitizer.cc:439
 hrichdigitizer.cc:440
 hrichdigitizer.cc:441
 hrichdigitizer.cc:442
 hrichdigitizer.cc:443
 hrichdigitizer.cc:444
 hrichdigitizer.cc:445
 hrichdigitizer.cc:446
 hrichdigitizer.cc:447
 hrichdigitizer.cc:448
 hrichdigitizer.cc:449
 hrichdigitizer.cc:450
 hrichdigitizer.cc:451
 hrichdigitizer.cc:452
 hrichdigitizer.cc:453
 hrichdigitizer.cc:454
 hrichdigitizer.cc:455
 hrichdigitizer.cc:456
 hrichdigitizer.cc:457
 hrichdigitizer.cc:458
 hrichdigitizer.cc:459
 hrichdigitizer.cc:460
 hrichdigitizer.cc:461
 hrichdigitizer.cc:462
 hrichdigitizer.cc:463
 hrichdigitizer.cc:464
 hrichdigitizer.cc:465
 hrichdigitizer.cc:466
 hrichdigitizer.cc:467
 hrichdigitizer.cc:468
 hrichdigitizer.cc:469
 hrichdigitizer.cc:470
 hrichdigitizer.cc:471
 hrichdigitizer.cc:472
 hrichdigitizer.cc:473
 hrichdigitizer.cc:474
 hrichdigitizer.cc:475
 hrichdigitizer.cc:476
 hrichdigitizer.cc:477
 hrichdigitizer.cc:478
 hrichdigitizer.cc:479
 hrichdigitizer.cc:480
 hrichdigitizer.cc:481
 hrichdigitizer.cc:482
 hrichdigitizer.cc:483
 hrichdigitizer.cc:484
 hrichdigitizer.cc:485
 hrichdigitizer.cc:486
 hrichdigitizer.cc:487
 hrichdigitizer.cc:488
 hrichdigitizer.cc:489
 hrichdigitizer.cc:490
 hrichdigitizer.cc:491
 hrichdigitizer.cc:492
 hrichdigitizer.cc:493
 hrichdigitizer.cc:494
 hrichdigitizer.cc:495
 hrichdigitizer.cc:496
 hrichdigitizer.cc:497
 hrichdigitizer.cc:498
 hrichdigitizer.cc:499
 hrichdigitizer.cc:500
 hrichdigitizer.cc:501
 hrichdigitizer.cc:502
 hrichdigitizer.cc:503
 hrichdigitizer.cc:504
 hrichdigitizer.cc:505
 hrichdigitizer.cc:506
 hrichdigitizer.cc:507
 hrichdigitizer.cc:508
 hrichdigitizer.cc:509
 hrichdigitizer.cc:510
 hrichdigitizer.cc:511
 hrichdigitizer.cc:512
 hrichdigitizer.cc:513
 hrichdigitizer.cc:514
 hrichdigitizer.cc:515
 hrichdigitizer.cc:516
 hrichdigitizer.cc:517
 hrichdigitizer.cc:518
 hrichdigitizer.cc:519
 hrichdigitizer.cc:520
 hrichdigitizer.cc:521
 hrichdigitizer.cc:522
 hrichdigitizer.cc:523
 hrichdigitizer.cc:524
 hrichdigitizer.cc:525
 hrichdigitizer.cc:526
 hrichdigitizer.cc:527
 hrichdigitizer.cc:528
 hrichdigitizer.cc:529
 hrichdigitizer.cc:530
 hrichdigitizer.cc:531
 hrichdigitizer.cc:532
 hrichdigitizer.cc:533
 hrichdigitizer.cc:534
 hrichdigitizer.cc:535
 hrichdigitizer.cc:536
 hrichdigitizer.cc:537
 hrichdigitizer.cc:538
 hrichdigitizer.cc:539
 hrichdigitizer.cc:540
 hrichdigitizer.cc:541
 hrichdigitizer.cc:542
 hrichdigitizer.cc:543
 hrichdigitizer.cc:544
 hrichdigitizer.cc:545
 hrichdigitizer.cc:546
 hrichdigitizer.cc:547
 hrichdigitizer.cc:548
 hrichdigitizer.cc:549
 hrichdigitizer.cc:550
 hrichdigitizer.cc:551
 hrichdigitizer.cc:552
 hrichdigitizer.cc:553
 hrichdigitizer.cc:554
 hrichdigitizer.cc:555
 hrichdigitizer.cc:556
 hrichdigitizer.cc:557
 hrichdigitizer.cc:558
 hrichdigitizer.cc:559
 hrichdigitizer.cc:560
 hrichdigitizer.cc:561
 hrichdigitizer.cc:562
 hrichdigitizer.cc:563
 hrichdigitizer.cc:564
 hrichdigitizer.cc:565
 hrichdigitizer.cc:566
 hrichdigitizer.cc:567
 hrichdigitizer.cc:568
 hrichdigitizer.cc:569
 hrichdigitizer.cc:570
 hrichdigitizer.cc:571
 hrichdigitizer.cc:572
 hrichdigitizer.cc:573
 hrichdigitizer.cc:574
 hrichdigitizer.cc:575
 hrichdigitizer.cc:576
 hrichdigitizer.cc:577
 hrichdigitizer.cc:578
 hrichdigitizer.cc:579
 hrichdigitizer.cc:580
 hrichdigitizer.cc:581
 hrichdigitizer.cc:582
 hrichdigitizer.cc:583
 hrichdigitizer.cc:584
 hrichdigitizer.cc:585
 hrichdigitizer.cc:586
 hrichdigitizer.cc:587
 hrichdigitizer.cc:588
 hrichdigitizer.cc:589
 hrichdigitizer.cc:590
 hrichdigitizer.cc:591
 hrichdigitizer.cc:592
 hrichdigitizer.cc:593
 hrichdigitizer.cc:594
 hrichdigitizer.cc:595
 hrichdigitizer.cc:596
 hrichdigitizer.cc:597
 hrichdigitizer.cc:598
 hrichdigitizer.cc:599
 hrichdigitizer.cc:600
 hrichdigitizer.cc:601
 hrichdigitizer.cc:602
 hrichdigitizer.cc:603
 hrichdigitizer.cc:604
 hrichdigitizer.cc:605
 hrichdigitizer.cc:606
 hrichdigitizer.cc:607
 hrichdigitizer.cc:608
 hrichdigitizer.cc:609
 hrichdigitizer.cc:610
 hrichdigitizer.cc:611
 hrichdigitizer.cc:612
 hrichdigitizer.cc:613
 hrichdigitizer.cc:614
 hrichdigitizer.cc:615
 hrichdigitizer.cc:616
 hrichdigitizer.cc:617
 hrichdigitizer.cc:618
 hrichdigitizer.cc:619
 hrichdigitizer.cc:620
 hrichdigitizer.cc:621
 hrichdigitizer.cc:622
 hrichdigitizer.cc:623
 hrichdigitizer.cc:624
 hrichdigitizer.cc:625
 hrichdigitizer.cc:626
 hrichdigitizer.cc:627
 hrichdigitizer.cc:628
 hrichdigitizer.cc:629
 hrichdigitizer.cc:630
 hrichdigitizer.cc:631
 hrichdigitizer.cc:632
 hrichdigitizer.cc:633
 hrichdigitizer.cc:634
 hrichdigitizer.cc:635
 hrichdigitizer.cc:636
 hrichdigitizer.cc:637
 hrichdigitizer.cc:638
 hrichdigitizer.cc:639
 hrichdigitizer.cc:640
 hrichdigitizer.cc:641
 hrichdigitizer.cc:642
 hrichdigitizer.cc:643
 hrichdigitizer.cc:644
 hrichdigitizer.cc:645
 hrichdigitizer.cc:646
 hrichdigitizer.cc:647
 hrichdigitizer.cc:648
 hrichdigitizer.cc:649
 hrichdigitizer.cc:650
 hrichdigitizer.cc:651
 hrichdigitizer.cc:652
 hrichdigitizer.cc:653
 hrichdigitizer.cc:654
 hrichdigitizer.cc:655
 hrichdigitizer.cc:656
 hrichdigitizer.cc:657
 hrichdigitizer.cc:658
 hrichdigitizer.cc:659
 hrichdigitizer.cc:660
 hrichdigitizer.cc:661
 hrichdigitizer.cc:662
 hrichdigitizer.cc:663
 hrichdigitizer.cc:664
 hrichdigitizer.cc:665
 hrichdigitizer.cc:666
 hrichdigitizer.cc:667
 hrichdigitizer.cc:668
 hrichdigitizer.cc:669
 hrichdigitizer.cc:670
 hrichdigitizer.cc:671
 hrichdigitizer.cc:672
 hrichdigitizer.cc:673
 hrichdigitizer.cc:674
 hrichdigitizer.cc:675
 hrichdigitizer.cc:676
 hrichdigitizer.cc:677
 hrichdigitizer.cc:678
 hrichdigitizer.cc:679
 hrichdigitizer.cc:680
 hrichdigitizer.cc:681
 hrichdigitizer.cc:682
 hrichdigitizer.cc:683
 hrichdigitizer.cc:684
 hrichdigitizer.cc:685
 hrichdigitizer.cc:686
 hrichdigitizer.cc:687
 hrichdigitizer.cc:688
 hrichdigitizer.cc:689
 hrichdigitizer.cc:690
 hrichdigitizer.cc:691
 hrichdigitizer.cc:692
 hrichdigitizer.cc:693
 hrichdigitizer.cc:694
 hrichdigitizer.cc:695
 hrichdigitizer.cc:696
 hrichdigitizer.cc:697
 hrichdigitizer.cc:698
 hrichdigitizer.cc:699
 hrichdigitizer.cc:700
 hrichdigitizer.cc:701
 hrichdigitizer.cc:702
 hrichdigitizer.cc:703
 hrichdigitizer.cc:704
 hrichdigitizer.cc:705
 hrichdigitizer.cc:706
 hrichdigitizer.cc:707
 hrichdigitizer.cc:708
 hrichdigitizer.cc:709
 hrichdigitizer.cc:710
 hrichdigitizer.cc:711
 hrichdigitizer.cc:712
 hrichdigitizer.cc:713
 hrichdigitizer.cc:714
 hrichdigitizer.cc:715
 hrichdigitizer.cc:716
 hrichdigitizer.cc:717
 hrichdigitizer.cc:718
 hrichdigitizer.cc:719
 hrichdigitizer.cc:720
 hrichdigitizer.cc:721
 hrichdigitizer.cc:722
 hrichdigitizer.cc:723
 hrichdigitizer.cc:724
 hrichdigitizer.cc:725
 hrichdigitizer.cc:726
 hrichdigitizer.cc:727
 hrichdigitizer.cc:728
 hrichdigitizer.cc:729
 hrichdigitizer.cc:730
 hrichdigitizer.cc:731
 hrichdigitizer.cc:732
 hrichdigitizer.cc:733
 hrichdigitizer.cc:734
 hrichdigitizer.cc:735
 hrichdigitizer.cc:736
 hrichdigitizer.cc:737
 hrichdigitizer.cc:738
 hrichdigitizer.cc:739
 hrichdigitizer.cc:740
 hrichdigitizer.cc:741
 hrichdigitizer.cc:742
 hrichdigitizer.cc:743
 hrichdigitizer.cc:744
 hrichdigitizer.cc:745
 hrichdigitizer.cc:746
 hrichdigitizer.cc:747
 hrichdigitizer.cc:748
 hrichdigitizer.cc:749
 hrichdigitizer.cc:750
 hrichdigitizer.cc:751
 hrichdigitizer.cc:752
 hrichdigitizer.cc:753
 hrichdigitizer.cc:754
 hrichdigitizer.cc:755
 hrichdigitizer.cc:756
 hrichdigitizer.cc:757
 hrichdigitizer.cc:758
 hrichdigitizer.cc:759
 hrichdigitizer.cc:760
 hrichdigitizer.cc:761
 hrichdigitizer.cc:762
 hrichdigitizer.cc:763
 hrichdigitizer.cc:764
 hrichdigitizer.cc:765
 hrichdigitizer.cc:766
 hrichdigitizer.cc:767
 hrichdigitizer.cc:768
 hrichdigitizer.cc:769
 hrichdigitizer.cc:770
 hrichdigitizer.cc:771
 hrichdigitizer.cc:772
 hrichdigitizer.cc:773
 hrichdigitizer.cc:774
 hrichdigitizer.cc:775
 hrichdigitizer.cc:776
 hrichdigitizer.cc:777
 hrichdigitizer.cc:778
 hrichdigitizer.cc:779
 hrichdigitizer.cc:780
 hrichdigitizer.cc:781
 hrichdigitizer.cc:782
 hrichdigitizer.cc:783
 hrichdigitizer.cc:784
 hrichdigitizer.cc:785
 hrichdigitizer.cc:786
 hrichdigitizer.cc:787
 hrichdigitizer.cc:788
 hrichdigitizer.cc:789
 hrichdigitizer.cc:790
 hrichdigitizer.cc:791
 hrichdigitizer.cc:792
 hrichdigitizer.cc:793
 hrichdigitizer.cc:794
 hrichdigitizer.cc:795
 hrichdigitizer.cc:796
 hrichdigitizer.cc:797
 hrichdigitizer.cc:798
 hrichdigitizer.cc:799
 hrichdigitizer.cc:800
 hrichdigitizer.cc:801
 hrichdigitizer.cc:802
 hrichdigitizer.cc:803
 hrichdigitizer.cc:804
 hrichdigitizer.cc:805
 hrichdigitizer.cc:806
 hrichdigitizer.cc:807
 hrichdigitizer.cc:808
 hrichdigitizer.cc:809
 hrichdigitizer.cc:810
 hrichdigitizer.cc:811
 hrichdigitizer.cc:812
 hrichdigitizer.cc:813
 hrichdigitizer.cc:814
 hrichdigitizer.cc:815
 hrichdigitizer.cc:816
 hrichdigitizer.cc:817
 hrichdigitizer.cc:818
 hrichdigitizer.cc:819
 hrichdigitizer.cc:820
 hrichdigitizer.cc:821
 hrichdigitizer.cc:822
 hrichdigitizer.cc:823
 hrichdigitizer.cc:824
 hrichdigitizer.cc:825
 hrichdigitizer.cc:826
 hrichdigitizer.cc:827
 hrichdigitizer.cc:828
 hrichdigitizer.cc:829
 hrichdigitizer.cc:830
 hrichdigitizer.cc:831
 hrichdigitizer.cc:832
 hrichdigitizer.cc:833
 hrichdigitizer.cc:834
 hrichdigitizer.cc:835
 hrichdigitizer.cc:836
 hrichdigitizer.cc:837
 hrichdigitizer.cc:838
 hrichdigitizer.cc:839
 hrichdigitizer.cc:840
 hrichdigitizer.cc:841
 hrichdigitizer.cc:842
 hrichdigitizer.cc:843
 hrichdigitizer.cc:844
 hrichdigitizer.cc:845
 hrichdigitizer.cc:846
 hrichdigitizer.cc:847
 hrichdigitizer.cc:848
 hrichdigitizer.cc:849
 hrichdigitizer.cc:850
 hrichdigitizer.cc:851
 hrichdigitizer.cc:852
 hrichdigitizer.cc:853
 hrichdigitizer.cc:854
 hrichdigitizer.cc:855
 hrichdigitizer.cc:856
 hrichdigitizer.cc:857
 hrichdigitizer.cc:858
 hrichdigitizer.cc:859
 hrichdigitizer.cc:860
 hrichdigitizer.cc:861
 hrichdigitizer.cc:862
 hrichdigitizer.cc:863
 hrichdigitizer.cc:864
 hrichdigitizer.cc:865
 hrichdigitizer.cc:866
 hrichdigitizer.cc:867
 hrichdigitizer.cc:868
 hrichdigitizer.cc:869
 hrichdigitizer.cc:870
 hrichdigitizer.cc:871
 hrichdigitizer.cc:872
 hrichdigitizer.cc:873
 hrichdigitizer.cc:874
 hrichdigitizer.cc:875
 hrichdigitizer.cc:876
 hrichdigitizer.cc:877
 hrichdigitizer.cc:878
 hrichdigitizer.cc:879
 hrichdigitizer.cc:880
 hrichdigitizer.cc:881
 hrichdigitizer.cc:882
 hrichdigitizer.cc:883
 hrichdigitizer.cc:884
 hrichdigitizer.cc:885
 hrichdigitizer.cc:886
 hrichdigitizer.cc:887
 hrichdigitizer.cc:888
 hrichdigitizer.cc:889
 hrichdigitizer.cc:890
 hrichdigitizer.cc:891
 hrichdigitizer.cc:892
 hrichdigitizer.cc:893
 hrichdigitizer.cc:894
 hrichdigitizer.cc:895
 hrichdigitizer.cc:896
 hrichdigitizer.cc:897
 hrichdigitizer.cc:898
 hrichdigitizer.cc:899
 hrichdigitizer.cc:900
 hrichdigitizer.cc:901
 hrichdigitizer.cc:902
 hrichdigitizer.cc:903
 hrichdigitizer.cc:904
 hrichdigitizer.cc:905
 hrichdigitizer.cc:906
 hrichdigitizer.cc:907
 hrichdigitizer.cc:908
 hrichdigitizer.cc:909
 hrichdigitizer.cc:910
 hrichdigitizer.cc:911
 hrichdigitizer.cc:912
 hrichdigitizer.cc:913
 hrichdigitizer.cc:914
 hrichdigitizer.cc:915
 hrichdigitizer.cc:916
 hrichdigitizer.cc:917
 hrichdigitizer.cc:918
 hrichdigitizer.cc:919
 hrichdigitizer.cc:920
 hrichdigitizer.cc:921
 hrichdigitizer.cc:922
 hrichdigitizer.cc:923
 hrichdigitizer.cc:924
 hrichdigitizer.cc:925
 hrichdigitizer.cc:926
 hrichdigitizer.cc:927
 hrichdigitizer.cc:928
 hrichdigitizer.cc:929
 hrichdigitizer.cc:930
 hrichdigitizer.cc:931
 hrichdigitizer.cc:932
 hrichdigitizer.cc:933
 hrichdigitizer.cc:934
 hrichdigitizer.cc:935
 hrichdigitizer.cc:936
 hrichdigitizer.cc:937
 hrichdigitizer.cc:938
 hrichdigitizer.cc:939
 hrichdigitizer.cc:940
 hrichdigitizer.cc:941
 hrichdigitizer.cc:942
 hrichdigitizer.cc:943
 hrichdigitizer.cc:944
 hrichdigitizer.cc:945
 hrichdigitizer.cc:946
 hrichdigitizer.cc:947
 hrichdigitizer.cc:948
 hrichdigitizer.cc:949
 hrichdigitizer.cc:950
 hrichdigitizer.cc:951
 hrichdigitizer.cc:952
 hrichdigitizer.cc:953
 hrichdigitizer.cc:954
 hrichdigitizer.cc:955
 hrichdigitizer.cc:956
 hrichdigitizer.cc:957
 hrichdigitizer.cc:958
 hrichdigitizer.cc:959
 hrichdigitizer.cc:960
 hrichdigitizer.cc:961
 hrichdigitizer.cc:962
 hrichdigitizer.cc:963
 hrichdigitizer.cc:964
 hrichdigitizer.cc:965
 hrichdigitizer.cc:966
 hrichdigitizer.cc:967
 hrichdigitizer.cc:968
 hrichdigitizer.cc:969
 hrichdigitizer.cc:970
 hrichdigitizer.cc:971
 hrichdigitizer.cc:972
 hrichdigitizer.cc:973
 hrichdigitizer.cc:974
 hrichdigitizer.cc:975
 hrichdigitizer.cc:976
 hrichdigitizer.cc:977
 hrichdigitizer.cc:978
 hrichdigitizer.cc:979
 hrichdigitizer.cc:980
 hrichdigitizer.cc:981
 hrichdigitizer.cc:982
 hrichdigitizer.cc:983
 hrichdigitizer.cc:984
 hrichdigitizer.cc:985
 hrichdigitizer.cc:986
 hrichdigitizer.cc:987
 hrichdigitizer.cc:988
 hrichdigitizer.cc:989
 hrichdigitizer.cc:990
 hrichdigitizer.cc:991
 hrichdigitizer.cc:992
 hrichdigitizer.cc:993
 hrichdigitizer.cc:994
 hrichdigitizer.cc:995
 hrichdigitizer.cc:996
 hrichdigitizer.cc:997
 hrichdigitizer.cc:998
 hrichdigitizer.cc:999
 hrichdigitizer.cc:1000
 hrichdigitizer.cc:1001
 hrichdigitizer.cc:1002
 hrichdigitizer.cc:1003
 hrichdigitizer.cc:1004
 hrichdigitizer.cc:1005
 hrichdigitizer.cc:1006
 hrichdigitizer.cc:1007
 hrichdigitizer.cc:1008
 hrichdigitizer.cc:1009
 hrichdigitizer.cc:1010
 hrichdigitizer.cc:1011
 hrichdigitizer.cc:1012
 hrichdigitizer.cc:1013
 hrichdigitizer.cc:1014
 hrichdigitizer.cc:1015
 hrichdigitizer.cc:1016
 hrichdigitizer.cc:1017
 hrichdigitizer.cc:1018
 hrichdigitizer.cc:1019
 hrichdigitizer.cc:1020
 hrichdigitizer.cc:1021
 hrichdigitizer.cc:1022
 hrichdigitizer.cc:1023
 hrichdigitizer.cc:1024
 hrichdigitizer.cc:1025
 hrichdigitizer.cc:1026
 hrichdigitizer.cc:1027
 hrichdigitizer.cc:1028
 hrichdigitizer.cc:1029
 hrichdigitizer.cc:1030
 hrichdigitizer.cc:1031
 hrichdigitizer.cc:1032
 hrichdigitizer.cc:1033
 hrichdigitizer.cc:1034
 hrichdigitizer.cc:1035
 hrichdigitizer.cc:1036
 hrichdigitizer.cc:1037
 hrichdigitizer.cc:1038
 hrichdigitizer.cc:1039
 hrichdigitizer.cc:1040
 hrichdigitizer.cc:1041
 hrichdigitizer.cc:1042
 hrichdigitizer.cc:1043
 hrichdigitizer.cc:1044
 hrichdigitizer.cc:1045
 hrichdigitizer.cc:1046
 hrichdigitizer.cc:1047
 hrichdigitizer.cc:1048
 hrichdigitizer.cc:1049
 hrichdigitizer.cc:1050
 hrichdigitizer.cc:1051
 hrichdigitizer.cc:1052
 hrichdigitizer.cc:1053
 hrichdigitizer.cc:1054
 hrichdigitizer.cc:1055
 hrichdigitizer.cc:1056
 hrichdigitizer.cc:1057
 hrichdigitizer.cc:1058
 hrichdigitizer.cc:1059
 hrichdigitizer.cc:1060
 hrichdigitizer.cc:1061
 hrichdigitizer.cc:1062
 hrichdigitizer.cc:1063
 hrichdigitizer.cc:1064
 hrichdigitizer.cc:1065
 hrichdigitizer.cc:1066
 hrichdigitizer.cc:1067
 hrichdigitizer.cc:1068
 hrichdigitizer.cc:1069
 hrichdigitizer.cc:1070
 hrichdigitizer.cc:1071
 hrichdigitizer.cc:1072
 hrichdigitizer.cc:1073
 hrichdigitizer.cc:1074
 hrichdigitizer.cc:1075
 hrichdigitizer.cc:1076
 hrichdigitizer.cc:1077
 hrichdigitizer.cc:1078
 hrichdigitizer.cc:1079
 hrichdigitizer.cc:1080
 hrichdigitizer.cc:1081
 hrichdigitizer.cc:1082
 hrichdigitizer.cc:1083
 hrichdigitizer.cc:1084
 hrichdigitizer.cc:1085
 hrichdigitizer.cc:1086
 hrichdigitizer.cc:1087
 hrichdigitizer.cc:1088
 hrichdigitizer.cc:1089
 hrichdigitizer.cc:1090
 hrichdigitizer.cc:1091
 hrichdigitizer.cc:1092
 hrichdigitizer.cc:1093
 hrichdigitizer.cc:1094
 hrichdigitizer.cc:1095
 hrichdigitizer.cc:1096
 hrichdigitizer.cc:1097
 hrichdigitizer.cc:1098
 hrichdigitizer.cc:1099
 hrichdigitizer.cc:1100
 hrichdigitizer.cc:1101
 hrichdigitizer.cc:1102
 hrichdigitizer.cc:1103
 hrichdigitizer.cc:1104
 hrichdigitizer.cc:1105
 hrichdigitizer.cc:1106
 hrichdigitizer.cc:1107
 hrichdigitizer.cc:1108
 hrichdigitizer.cc:1109
 hrichdigitizer.cc:1110
 hrichdigitizer.cc:1111
 hrichdigitizer.cc:1112
 hrichdigitizer.cc:1113
 hrichdigitizer.cc:1114
 hrichdigitizer.cc:1115
 hrichdigitizer.cc:1116
 hrichdigitizer.cc:1117
 hrichdigitizer.cc:1118
 hrichdigitizer.cc:1119
 hrichdigitizer.cc:1120
 hrichdigitizer.cc:1121
 hrichdigitizer.cc:1122
 hrichdigitizer.cc:1123
 hrichdigitizer.cc:1124
 hrichdigitizer.cc:1125
 hrichdigitizer.cc:1126
 hrichdigitizer.cc:1127
 hrichdigitizer.cc:1128
 hrichdigitizer.cc:1129
 hrichdigitizer.cc:1130
 hrichdigitizer.cc:1131
 hrichdigitizer.cc:1132
 hrichdigitizer.cc:1133
 hrichdigitizer.cc:1134
 hrichdigitizer.cc:1135
 hrichdigitizer.cc:1136
 hrichdigitizer.cc:1137
 hrichdigitizer.cc:1138
 hrichdigitizer.cc:1139
 hrichdigitizer.cc:1140
 hrichdigitizer.cc:1141
 hrichdigitizer.cc:1142
 hrichdigitizer.cc:1143
 hrichdigitizer.cc:1144
 hrichdigitizer.cc:1145
 hrichdigitizer.cc:1146
 hrichdigitizer.cc:1147
 hrichdigitizer.cc:1148
 hrichdigitizer.cc:1149
 hrichdigitizer.cc:1150
 hrichdigitizer.cc:1151
 hrichdigitizer.cc:1152
 hrichdigitizer.cc:1153
 hrichdigitizer.cc:1154
 hrichdigitizer.cc:1155
 hrichdigitizer.cc:1156
 hrichdigitizer.cc:1157
 hrichdigitizer.cc:1158
 hrichdigitizer.cc:1159
 hrichdigitizer.cc:1160
 hrichdigitizer.cc:1161
 hrichdigitizer.cc:1162
 hrichdigitizer.cc:1163
 hrichdigitizer.cc:1164
 hrichdigitizer.cc:1165
 hrichdigitizer.cc:1166
 hrichdigitizer.cc:1167
 hrichdigitizer.cc:1168
 hrichdigitizer.cc:1169
 hrichdigitizer.cc:1170
 hrichdigitizer.cc:1171
 hrichdigitizer.cc:1172
 hrichdigitizer.cc:1173
 hrichdigitizer.cc:1174
 hrichdigitizer.cc:1175
 hrichdigitizer.cc:1176
 hrichdigitizer.cc:1177
 hrichdigitizer.cc:1178
 hrichdigitizer.cc:1179
 hrichdigitizer.cc:1180
 hrichdigitizer.cc:1181
 hrichdigitizer.cc:1182
 hrichdigitizer.cc:1183
 hrichdigitizer.cc:1184
 hrichdigitizer.cc:1185
 hrichdigitizer.cc:1186
 hrichdigitizer.cc:1187
 hrichdigitizer.cc:1188
 hrichdigitizer.cc:1189
 hrichdigitizer.cc:1190
 hrichdigitizer.cc:1191
 hrichdigitizer.cc:1192
 hrichdigitizer.cc:1193
 hrichdigitizer.cc:1194
 hrichdigitizer.cc:1195
 hrichdigitizer.cc:1196
 hrichdigitizer.cc:1197
 hrichdigitizer.cc:1198
 hrichdigitizer.cc:1199
 hrichdigitizer.cc:1200
 hrichdigitizer.cc:1201
 hrichdigitizer.cc:1202
 hrichdigitizer.cc:1203
 hrichdigitizer.cc:1204
 hrichdigitizer.cc:1205
 hrichdigitizer.cc:1206
 hrichdigitizer.cc:1207
 hrichdigitizer.cc:1208
 hrichdigitizer.cc:1209
 hrichdigitizer.cc:1210
 hrichdigitizer.cc:1211
 hrichdigitizer.cc:1212
 hrichdigitizer.cc:1213
 hrichdigitizer.cc:1214
 hrichdigitizer.cc:1215
 hrichdigitizer.cc:1216
 hrichdigitizer.cc:1217
 hrichdigitizer.cc:1218
 hrichdigitizer.cc:1219
 hrichdigitizer.cc:1220
 hrichdigitizer.cc:1221
 hrichdigitizer.cc:1222
 hrichdigitizer.cc:1223
 hrichdigitizer.cc:1224
 hrichdigitizer.cc:1225
 hrichdigitizer.cc:1226
 hrichdigitizer.cc:1227
 hrichdigitizer.cc:1228
 hrichdigitizer.cc:1229
 hrichdigitizer.cc:1230
 hrichdigitizer.cc:1231
 hrichdigitizer.cc:1232
 hrichdigitizer.cc:1233
 hrichdigitizer.cc:1234
 hrichdigitizer.cc:1235
 hrichdigitizer.cc:1236
 hrichdigitizer.cc:1237
 hrichdigitizer.cc:1238
 hrichdigitizer.cc:1239
 hrichdigitizer.cc:1240
 hrichdigitizer.cc:1241
 hrichdigitizer.cc:1242
 hrichdigitizer.cc:1243
 hrichdigitizer.cc:1244
 hrichdigitizer.cc:1245
 hrichdigitizer.cc:1246
 hrichdigitizer.cc:1247
 hrichdigitizer.cc:1248
 hrichdigitizer.cc:1249
 hrichdigitizer.cc:1250
 hrichdigitizer.cc:1251
 hrichdigitizer.cc:1252
 hrichdigitizer.cc:1253
 hrichdigitizer.cc:1254
 hrichdigitizer.cc:1255
 hrichdigitizer.cc:1256
 hrichdigitizer.cc:1257
 hrichdigitizer.cc:1258
 hrichdigitizer.cc:1259
 hrichdigitizer.cc:1260
 hrichdigitizer.cc:1261
 hrichdigitizer.cc:1262
 hrichdigitizer.cc:1263
 hrichdigitizer.cc:1264
 hrichdigitizer.cc:1265
 hrichdigitizer.cc:1266
 hrichdigitizer.cc:1267
 hrichdigitizer.cc:1268
 hrichdigitizer.cc:1269
 hrichdigitizer.cc:1270
 hrichdigitizer.cc:1271
 hrichdigitizer.cc:1272
 hrichdigitizer.cc:1273
 hrichdigitizer.cc:1274
 hrichdigitizer.cc:1275
 hrichdigitizer.cc:1276
 hrichdigitizer.cc:1277
 hrichdigitizer.cc:1278
 hrichdigitizer.cc:1279
 hrichdigitizer.cc:1280
 hrichdigitizer.cc:1281
 hrichdigitizer.cc:1282
 hrichdigitizer.cc:1283
 hrichdigitizer.cc:1284
 hrichdigitizer.cc:1285
 hrichdigitizer.cc:1286
 hrichdigitizer.cc:1287
 hrichdigitizer.cc:1288
 hrichdigitizer.cc:1289
 hrichdigitizer.cc:1290
 hrichdigitizer.cc:1291
 hrichdigitizer.cc:1292
 hrichdigitizer.cc:1293
 hrichdigitizer.cc:1294
 hrichdigitizer.cc:1295
 hrichdigitizer.cc:1296
 hrichdigitizer.cc:1297
 hrichdigitizer.cc:1298
 hrichdigitizer.cc:1299
 hrichdigitizer.cc:1300
 hrichdigitizer.cc:1301
 hrichdigitizer.cc:1302
 hrichdigitizer.cc:1303
 hrichdigitizer.cc:1304
 hrichdigitizer.cc:1305
 hrichdigitizer.cc:1306
 hrichdigitizer.cc:1307
 hrichdigitizer.cc:1308
 hrichdigitizer.cc:1309
 hrichdigitizer.cc:1310
 hrichdigitizer.cc:1311
 hrichdigitizer.cc:1312
 hrichdigitizer.cc:1313
 hrichdigitizer.cc:1314
 hrichdigitizer.cc:1315
 hrichdigitizer.cc:1316
 hrichdigitizer.cc:1317
 hrichdigitizer.cc:1318
 hrichdigitizer.cc:1319
 hrichdigitizer.cc:1320
 hrichdigitizer.cc:1321
 hrichdigitizer.cc:1322
 hrichdigitizer.cc:1323
 hrichdigitizer.cc:1324
 hrichdigitizer.cc:1325
 hrichdigitizer.cc:1326
 hrichdigitizer.cc:1327
 hrichdigitizer.cc:1328
 hrichdigitizer.cc:1329
 hrichdigitizer.cc:1330
 hrichdigitizer.cc:1331
 hrichdigitizer.cc:1332
 hrichdigitizer.cc:1333
 hrichdigitizer.cc:1334
 hrichdigitizer.cc:1335
 hrichdigitizer.cc:1336
 hrichdigitizer.cc:1337
 hrichdigitizer.cc:1338
 hrichdigitizer.cc:1339
 hrichdigitizer.cc:1340
 hrichdigitizer.cc:1341
 hrichdigitizer.cc:1342
 hrichdigitizer.cc:1343
 hrichdigitizer.cc:1344
 hrichdigitizer.cc:1345
 hrichdigitizer.cc:1346
 hrichdigitizer.cc:1347
 hrichdigitizer.cc:1348
 hrichdigitizer.cc:1349
 hrichdigitizer.cc:1350
 hrichdigitizer.cc:1351
 hrichdigitizer.cc:1352
 hrichdigitizer.cc:1353
 hrichdigitizer.cc:1354
 hrichdigitizer.cc:1355
 hrichdigitizer.cc:1356
 hrichdigitizer.cc:1357
 hrichdigitizer.cc:1358
 hrichdigitizer.cc:1359
 hrichdigitizer.cc:1360
 hrichdigitizer.cc:1361
 hrichdigitizer.cc:1362
 hrichdigitizer.cc:1363
 hrichdigitizer.cc:1364
 hrichdigitizer.cc:1365
 hrichdigitizer.cc:1366
 hrichdigitizer.cc:1367
 hrichdigitizer.cc:1368
 hrichdigitizer.cc:1369
 hrichdigitizer.cc:1370
 hrichdigitizer.cc:1371
 hrichdigitizer.cc:1372
 hrichdigitizer.cc:1373
 hrichdigitizer.cc:1374
 hrichdigitizer.cc:1375
 hrichdigitizer.cc:1376
 hrichdigitizer.cc:1377
 hrichdigitizer.cc:1378
 hrichdigitizer.cc:1379
 hrichdigitizer.cc:1380
 hrichdigitizer.cc:1381
 hrichdigitizer.cc:1382
 hrichdigitizer.cc:1383
 hrichdigitizer.cc:1384
 hrichdigitizer.cc:1385
 hrichdigitizer.cc:1386
 hrichdigitizer.cc:1387
 hrichdigitizer.cc:1388
 hrichdigitizer.cc:1389
 hrichdigitizer.cc:1390
 hrichdigitizer.cc:1391
 hrichdigitizer.cc:1392
 hrichdigitizer.cc:1393
 hrichdigitizer.cc:1394
 hrichdigitizer.cc:1395
 hrichdigitizer.cc:1396
 hrichdigitizer.cc:1397
 hrichdigitizer.cc:1398
 hrichdigitizer.cc:1399
 hrichdigitizer.cc:1400
 hrichdigitizer.cc:1401
 hrichdigitizer.cc:1402
 hrichdigitizer.cc:1403
 hrichdigitizer.cc:1404
 hrichdigitizer.cc:1405
 hrichdigitizer.cc:1406
 hrichdigitizer.cc:1407
 hrichdigitizer.cc:1408
 hrichdigitizer.cc:1409
 hrichdigitizer.cc:1410
 hrichdigitizer.cc:1411
 hrichdigitizer.cc:1412
 hrichdigitizer.cc:1413
 hrichdigitizer.cc:1414
 hrichdigitizer.cc:1415
 hrichdigitizer.cc:1416
 hrichdigitizer.cc:1417
 hrichdigitizer.cc:1418
 hrichdigitizer.cc:1419
 hrichdigitizer.cc:1420
 hrichdigitizer.cc:1421
 hrichdigitizer.cc:1422
 hrichdigitizer.cc:1423
 hrichdigitizer.cc:1424
 hrichdigitizer.cc:1425
 hrichdigitizer.cc:1426
 hrichdigitizer.cc:1427
 hrichdigitizer.cc:1428
 hrichdigitizer.cc:1429
 hrichdigitizer.cc:1430
 hrichdigitizer.cc:1431
 hrichdigitizer.cc:1432
 hrichdigitizer.cc:1433
 hrichdigitizer.cc:1434
 hrichdigitizer.cc:1435
 hrichdigitizer.cc:1436
 hrichdigitizer.cc:1437
 hrichdigitizer.cc:1438
 hrichdigitizer.cc:1439
 hrichdigitizer.cc:1440
 hrichdigitizer.cc:1441
 hrichdigitizer.cc:1442
 hrichdigitizer.cc:1443
 hrichdigitizer.cc:1444
 hrichdigitizer.cc:1445
 hrichdigitizer.cc:1446
 hrichdigitizer.cc:1447
 hrichdigitizer.cc:1448
 hrichdigitizer.cc:1449
 hrichdigitizer.cc:1450
 hrichdigitizer.cc:1451
 hrichdigitizer.cc:1452
 hrichdigitizer.cc:1453
 hrichdigitizer.cc:1454
 hrichdigitizer.cc:1455
 hrichdigitizer.cc:1456
 hrichdigitizer.cc:1457
 hrichdigitizer.cc:1458
 hrichdigitizer.cc:1459
 hrichdigitizer.cc:1460
 hrichdigitizer.cc:1461
 hrichdigitizer.cc:1462
 hrichdigitizer.cc:1463
 hrichdigitizer.cc:1464
 hrichdigitizer.cc:1465
 hrichdigitizer.cc:1466
 hrichdigitizer.cc:1467
 hrichdigitizer.cc:1468
 hrichdigitizer.cc:1469
 hrichdigitizer.cc:1470
 hrichdigitizer.cc:1471
 hrichdigitizer.cc:1472
 hrichdigitizer.cc:1473
 hrichdigitizer.cc:1474
 hrichdigitizer.cc:1475
 hrichdigitizer.cc:1476
 hrichdigitizer.cc:1477
 hrichdigitizer.cc:1478
 hrichdigitizer.cc:1479
 hrichdigitizer.cc:1480
 hrichdigitizer.cc:1481
 hrichdigitizer.cc:1482
 hrichdigitizer.cc:1483
 hrichdigitizer.cc:1484
 hrichdigitizer.cc:1485
 hrichdigitizer.cc:1486
 hrichdigitizer.cc:1487
 hrichdigitizer.cc:1488
 hrichdigitizer.cc:1489
 hrichdigitizer.cc:1490
 hrichdigitizer.cc:1491
 hrichdigitizer.cc:1492
 hrichdigitizer.cc:1493
 hrichdigitizer.cc:1494
 hrichdigitizer.cc:1495
 hrichdigitizer.cc:1496
 hrichdigitizer.cc:1497
 hrichdigitizer.cc:1498
 hrichdigitizer.cc:1499
 hrichdigitizer.cc:1500
 hrichdigitizer.cc:1501
 hrichdigitizer.cc:1502
 hrichdigitizer.cc:1503
 hrichdigitizer.cc:1504
 hrichdigitizer.cc:1505
 hrichdigitizer.cc:1506
 hrichdigitizer.cc:1507
 hrichdigitizer.cc:1508
 hrichdigitizer.cc:1509
 hrichdigitizer.cc:1510
 hrichdigitizer.cc:1511
 hrichdigitizer.cc:1512
 hrichdigitizer.cc:1513
 hrichdigitizer.cc:1514
 hrichdigitizer.cc:1515
 hrichdigitizer.cc:1516
 hrichdigitizer.cc:1517
 hrichdigitizer.cc:1518
 hrichdigitizer.cc:1519
 hrichdigitizer.cc:1520
 hrichdigitizer.cc:1521
 hrichdigitizer.cc:1522
 hrichdigitizer.cc:1523
 hrichdigitizer.cc:1524
 hrichdigitizer.cc:1525
 hrichdigitizer.cc:1526
 hrichdigitizer.cc:1527
 hrichdigitizer.cc:1528
 hrichdigitizer.cc:1529
 hrichdigitizer.cc:1530
 hrichdigitizer.cc:1531
 hrichdigitizer.cc:1532
 hrichdigitizer.cc:1533
 hrichdigitizer.cc:1534
 hrichdigitizer.cc:1535
 hrichdigitizer.cc:1536
 hrichdigitizer.cc:1537
 hrichdigitizer.cc:1538
 hrichdigitizer.cc:1539
 hrichdigitizer.cc:1540
 hrichdigitizer.cc:1541
 hrichdigitizer.cc:1542
 hrichdigitizer.cc:1543
 hrichdigitizer.cc:1544
 hrichdigitizer.cc:1545
 hrichdigitizer.cc:1546
 hrichdigitizer.cc:1547
 hrichdigitizer.cc:1548
 hrichdigitizer.cc:1549
 hrichdigitizer.cc:1550
 hrichdigitizer.cc:1551
 hrichdigitizer.cc:1552
 hrichdigitizer.cc:1553
 hrichdigitizer.cc:1554
 hrichdigitizer.cc:1555
 hrichdigitizer.cc:1556
 hrichdigitizer.cc:1557
 hrichdigitizer.cc:1558
 hrichdigitizer.cc:1559
 hrichdigitizer.cc:1560
 hrichdigitizer.cc:1561
 hrichdigitizer.cc:1562
 hrichdigitizer.cc:1563
 hrichdigitizer.cc:1564
 hrichdigitizer.cc:1565
 hrichdigitizer.cc:1566
 hrichdigitizer.cc:1567
 hrichdigitizer.cc:1568
 hrichdigitizer.cc:1569
 hrichdigitizer.cc:1570
 hrichdigitizer.cc:1571
 hrichdigitizer.cc:1572
 hrichdigitizer.cc:1573
 hrichdigitizer.cc:1574
 hrichdigitizer.cc:1575
 hrichdigitizer.cc:1576
 hrichdigitizer.cc:1577
 hrichdigitizer.cc:1578
 hrichdigitizer.cc:1579
 hrichdigitizer.cc:1580
 hrichdigitizer.cc:1581
 hrichdigitizer.cc:1582
 hrichdigitizer.cc:1583
 hrichdigitizer.cc:1584
 hrichdigitizer.cc:1585
 hrichdigitizer.cc:1586
 hrichdigitizer.cc:1587
 hrichdigitizer.cc:1588
 hrichdigitizer.cc:1589
 hrichdigitizer.cc:1590
 hrichdigitizer.cc:1591
 hrichdigitizer.cc:1592
 hrichdigitizer.cc:1593
 hrichdigitizer.cc:1594
 hrichdigitizer.cc:1595
 hrichdigitizer.cc:1596
 hrichdigitizer.cc:1597
 hrichdigitizer.cc:1598
 hrichdigitizer.cc:1599
 hrichdigitizer.cc:1600
 hrichdigitizer.cc:1601
 hrichdigitizer.cc:1602
 hrichdigitizer.cc:1603
 hrichdigitizer.cc:1604
 hrichdigitizer.cc:1605
 hrichdigitizer.cc:1606
 hrichdigitizer.cc:1607
 hrichdigitizer.cc:1608
 hrichdigitizer.cc:1609
 hrichdigitizer.cc:1610
 hrichdigitizer.cc:1611
 hrichdigitizer.cc:1612
 hrichdigitizer.cc:1613
 hrichdigitizer.cc:1614
 hrichdigitizer.cc:1615
 hrichdigitizer.cc:1616
 hrichdigitizer.cc:1617
 hrichdigitizer.cc:1618
 hrichdigitizer.cc:1619
 hrichdigitizer.cc:1620
 hrichdigitizer.cc:1621
 hrichdigitizer.cc:1622
 hrichdigitizer.cc:1623
 hrichdigitizer.cc:1624
 hrichdigitizer.cc:1625
 hrichdigitizer.cc:1626
 hrichdigitizer.cc:1627
 hrichdigitizer.cc:1628
 hrichdigitizer.cc:1629
 hrichdigitizer.cc:1630
 hrichdigitizer.cc:1631
 hrichdigitizer.cc:1632
 hrichdigitizer.cc:1633
 hrichdigitizer.cc:1634
 hrichdigitizer.cc:1635
 hrichdigitizer.cc:1636
 hrichdigitizer.cc:1637
 hrichdigitizer.cc:1638
 hrichdigitizer.cc:1639
 hrichdigitizer.cc:1640
 hrichdigitizer.cc:1641
 hrichdigitizer.cc:1642
 hrichdigitizer.cc:1643
 hrichdigitizer.cc:1644
 hrichdigitizer.cc:1645
 hrichdigitizer.cc:1646
 hrichdigitizer.cc:1647
 hrichdigitizer.cc:1648
 hrichdigitizer.cc:1649
 hrichdigitizer.cc:1650
 hrichdigitizer.cc:1651
 hrichdigitizer.cc:1652
 hrichdigitizer.cc:1653
 hrichdigitizer.cc:1654
 hrichdigitizer.cc:1655
 hrichdigitizer.cc:1656
 hrichdigitizer.cc:1657
 hrichdigitizer.cc:1658
 hrichdigitizer.cc:1659
 hrichdigitizer.cc:1660
 hrichdigitizer.cc:1661
 hrichdigitizer.cc:1662
 hrichdigitizer.cc:1663
 hrichdigitizer.cc:1664
 hrichdigitizer.cc:1665
 hrichdigitizer.cc:1666
 hrichdigitizer.cc:1667
 hrichdigitizer.cc:1668
 hrichdigitizer.cc:1669
 hrichdigitizer.cc:1670
 hrichdigitizer.cc:1671
 hrichdigitizer.cc:1672
 hrichdigitizer.cc:1673
 hrichdigitizer.cc:1674
 hrichdigitizer.cc:1675
 hrichdigitizer.cc:1676
 hrichdigitizer.cc:1677
 hrichdigitizer.cc:1678
 hrichdigitizer.cc:1679
 hrichdigitizer.cc:1680
 hrichdigitizer.cc:1681
 hrichdigitizer.cc:1682
 hrichdigitizer.cc:1683
 hrichdigitizer.cc:1684
 hrichdigitizer.cc:1685
 hrichdigitizer.cc:1686
 hrichdigitizer.cc:1687
 hrichdigitizer.cc:1688
 hrichdigitizer.cc:1689
 hrichdigitizer.cc:1690
 hrichdigitizer.cc:1691
 hrichdigitizer.cc:1692
 hrichdigitizer.cc:1693
 hrichdigitizer.cc:1694
 hrichdigitizer.cc:1695
 hrichdigitizer.cc:1696
 hrichdigitizer.cc:1697
 hrichdigitizer.cc:1698
 hrichdigitizer.cc:1699
 hrichdigitizer.cc:1700
 hrichdigitizer.cc:1701
 hrichdigitizer.cc:1702
 hrichdigitizer.cc:1703
 hrichdigitizer.cc:1704
 hrichdigitizer.cc:1705
 hrichdigitizer.cc:1706
 hrichdigitizer.cc:1707
 hrichdigitizer.cc:1708
 hrichdigitizer.cc:1709
 hrichdigitizer.cc:1710
 hrichdigitizer.cc:1711
 hrichdigitizer.cc:1712
 hrichdigitizer.cc:1713
 hrichdigitizer.cc:1714
 hrichdigitizer.cc:1715
 hrichdigitizer.cc:1716
 hrichdigitizer.cc:1717
 hrichdigitizer.cc:1718
 hrichdigitizer.cc:1719
 hrichdigitizer.cc:1720
 hrichdigitizer.cc:1721
 hrichdigitizer.cc:1722
 hrichdigitizer.cc:1723
 hrichdigitizer.cc:1724
 hrichdigitizer.cc:1725
 hrichdigitizer.cc:1726
 hrichdigitizer.cc:1727
 hrichdigitizer.cc:1728
 hrichdigitizer.cc:1729
 hrichdigitizer.cc:1730
 hrichdigitizer.cc:1731
 hrichdigitizer.cc:1732
 hrichdigitizer.cc:1733
 hrichdigitizer.cc:1734
 hrichdigitizer.cc:1735
 hrichdigitizer.cc:1736
 hrichdigitizer.cc:1737
 hrichdigitizer.cc:1738
 hrichdigitizer.cc:1739
 hrichdigitizer.cc:1740
 hrichdigitizer.cc:1741
 hrichdigitizer.cc:1742
 hrichdigitizer.cc:1743
 hrichdigitizer.cc:1744
 hrichdigitizer.cc:1745
 hrichdigitizer.cc:1746
 hrichdigitizer.cc:1747
 hrichdigitizer.cc:1748
 hrichdigitizer.cc:1749
 hrichdigitizer.cc:1750
 hrichdigitizer.cc:1751
 hrichdigitizer.cc:1752
 hrichdigitizer.cc:1753
 hrichdigitizer.cc:1754
 hrichdigitizer.cc:1755
 hrichdigitizer.cc:1756
 hrichdigitizer.cc:1757
 hrichdigitizer.cc:1758
 hrichdigitizer.cc:1759
 hrichdigitizer.cc:1760
 hrichdigitizer.cc:1761
 hrichdigitizer.cc:1762
 hrichdigitizer.cc:1763
 hrichdigitizer.cc:1764
 hrichdigitizer.cc:1765
 hrichdigitizer.cc:1766
 hrichdigitizer.cc:1767
 hrichdigitizer.cc:1768
 hrichdigitizer.cc:1769
 hrichdigitizer.cc:1770
 hrichdigitizer.cc:1771
 hrichdigitizer.cc:1772
 hrichdigitizer.cc:1773
 hrichdigitizer.cc:1774
 hrichdigitizer.cc:1775
 hrichdigitizer.cc:1776
 hrichdigitizer.cc:1777
 hrichdigitizer.cc:1778
 hrichdigitizer.cc:1779
 hrichdigitizer.cc:1780
 hrichdigitizer.cc:1781
 hrichdigitizer.cc:1782
 hrichdigitizer.cc:1783
 hrichdigitizer.cc:1784
 hrichdigitizer.cc:1785
 hrichdigitizer.cc:1786
 hrichdigitizer.cc:1787
 hrichdigitizer.cc:1788
 hrichdigitizer.cc:1789
 hrichdigitizer.cc:1790
 hrichdigitizer.cc:1791
 hrichdigitizer.cc:1792
 hrichdigitizer.cc:1793
 hrichdigitizer.cc:1794
 hrichdigitizer.cc:1795
 hrichdigitizer.cc:1796
 hrichdigitizer.cc:1797
 hrichdigitizer.cc:1798
 hrichdigitizer.cc:1799
 hrichdigitizer.cc:1800
 hrichdigitizer.cc:1801
 hrichdigitizer.cc:1802
 hrichdigitizer.cc:1803
 hrichdigitizer.cc:1804