#include "hshowerpaddigitizer.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hshowerdetector.h"
#include "hcategory.h"
#include "hmatrixcategory.h"
#include "hlinearcategory.h"
#include "hlocation.h"
#include "hshowergeantwire.h"
#include "hshowercal.h"
#include "hshowertrack.h"
#include "hshowerdigipar.h"
#include "hshowergeometry.h"
#include "hdebug.h"
#include "hades.h"
#include "hgeantshower.h"
#include "hgeanttof.h"
#include "hgeantrpc.h"
#include "hgeantkine.h"
#include "showerdef.h"
#include "TMath.h"
#include <algorithm>
#define MIN(A,B) (((A) <= (B)) ? (A) : (B))
#define MAX(A,B) (((A) >= (B)) ? (A) : (B))
#define TABLE_SIZE 10
ClassImp(HShowerPadDigitizer)
Int_t HShowerPadDigitizer::modeTrack = 4;
HShowerPadDigitizer::HShowerPadDigitizer(const Text_t *name,const Text_t *title) :
  HShowerDigitizer(name,title)
{
  fTrackIter = NULL;
  fChannelCoeff = 256.0 / 60.0; 
  fShowerRawMatrIter = NULL;
  isRpc = kFALSE;
}
HShowerPadDigitizer::HShowerPadDigitizer()
{
  fTrackIter = NULL;
  fShowerRawMatrIter = NULL;
  isRpc = kFALSE;
}
HShowerPadDigitizer::~HShowerPadDigitizer(void) {
  if (fTrackIter) delete fTrackIter;
  if (fShowerRawMatrIter) delete fShowerRawMatrIter;
}
Bool_t HShowerPadDigitizer::init()
{
    
    
    
    printf("initialization of shower pad digitizer \n");
    HCategory *pCat;
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()->getDetector("Shower");
    pCat=gHades->getCurrentEvent()->getCategory(catShowerGeantWire);
    if (!pCat) {
	pCat=pShowerDet->buildCategory(catShowerGeantWire);
	if (!pCat) return kFALSE;
	else gHades->getCurrentEvent()->addCategory(catShowerGeantWire, pCat, "Shower");
    }
    setInCat(pCat);
    pCat=gHades->getCurrentEvent()->getCategory(catShowerRawMatr);
    if (!pCat) {
	pCat=pShowerDet->buildCategory(catShowerRawMatr);
	if (!pCat) return kFALSE;
	else {
	    gHades->getCurrentEvent()->addCategory(catShowerRawMatr, pCat, "Shower");
	}
    }
    setOutCat(pCat);
	if(pCat) fShowerRawMatrIter=(HIterator*)pCat->MakeIterator("native");
    if(gHades->getEmbeddingMode()>0)
    {   
        
	pCat=gHades->getCurrentEvent()->getCategory(catShowerCal);
	if (!pCat) {
            Error("init()","No catShowerCal in input ... needed for embedding!");
	    return kFALSE;
	}
	if(pCat) fShowerCalIter= (HIterator*)pCat->MakeIterator("native");
    }
    pCat=gHades->getCurrentEvent()->getCategory(catShowerTrack);
    if (!pCat) {
	pCat=pShowerDet->buildCategory(catShowerTrack);
	if (!pCat) return kFALSE;
	else gHades->getCurrentEvent()->addCategory(catShowerTrack, pCat, "Shower");
    }
    setTrackCat(pCat);
    fTrackIter = (HIterator*)getTrackCat()->MakeIterator("native");
    
    
    fGeantKineCat = (HLinearCategory*)gHades->getCurrentEvent()->getCategory(catGeantKine);
    if(!fGeantKineCat){
	Error("init()","Received Zero pointer for catGeantKine!");
        return kFALSE;
    }
    fGeantShowerCat = (HLinearCategory*)gHades->getCurrentEvent()->getCategory(catShowerGeantRaw);
    if(!fGeantShowerCat){
	Error("init()","Received Zero pointer for catShowerGeantRaw!");
        return kFALSE;
    }
    fGeantTofCat = (HLinearCategory*)gHades->getCurrentEvent()->getCategory(catTofGeantRaw);
    if(!fGeantTofCat){
	Warning("init()","Received Zero pointer for catTofGeantRaw!");
    }
    fGeantRpcCat = (HLinearCategory*)gHades->getCurrentEvent()->getCategory(catRpcGeantRaw);
    if(!fGeantRpcCat){
	Warning("init()","Received Zero pointer for catRpcGeantRaw!");
    }
    if (!fGeantRpcCat && !fGeantTofCat) return kFALSE;
    if (fGeantRpcCat) isRpc = kTRUE;
    
    return HShowerDigitizer::init();
}
HShowerPadDigitizer& HShowerPadDigitizer::operator=(HShowerPadDigitizer &c) {
  return c;
}
Int_t HShowerPadDigitizer::execute()
{
    trackMap.clear();    
    if(gHades->getEmbeddingMode() > 0 && gHades->getEmbeddingDebug()!=1)
    {
	
	
	
	HLocation loc;
	loc.set(4,0,0,0);
	HShowerCal *pCal;
	fShowerCalIter->Reset();
        HShowerRaw pRaw;
	while ((pCal = (HShowerCal *)fShowerCalIter->Next()) != 0)
	{
	    loc[0] = pCal->getSector();
	    loc[1] = pCal->getModule();
	    loc[2] = pCal->getRow();
	    loc[3] = pCal->getCol();
	    pRaw.setSector(loc[0]);
            pRaw.setModule(loc[1]);
            pRaw.setRow(loc[2]);
            pRaw.setCol(loc[3]);
	    
            
	    Int_t addTr = pCal->getAddress();
	    vector<Int_t> v;
	    v.push_back(gHades->getEmbeddingRealTrackId());
	    trackMap.insert( make_pair( addTr, v ) );
            
	}
    }
    
    
    TObject *pHit;
    lNrEvent++;
    fIter->Reset();
    while((pHit = fIter->Next()))
    {
	   digitize(pHit);
    }
    
    
    
    HShowerTrack*  pShowerTrack;
    HLocation loc;
    Int_t s,m,row,col;
    vector<Int_t> check;
    for( map<Int_t, vector<Int_t> >::iterator iter = trackMap.begin(); iter != trackMap.end(); ++iter)
    {
	vector<Int_t>& list = iter ->second;
	Int_t nAddress      = iter ->first;
	s   =  nAddress                       /100000;
	m   = (nAddress - 100000*s)           / 10000;
	row = (nAddress - 100000*s - 10000*m) /   100;
	col = (nAddress - 100000*s - 10000*m - 100*row);
	loc.set(4,s,m,row,col);
        Int_t n = list.size();
	std::sort( list.begin(), list.end() ); 
	check.clear();
	for( Int_t i = 0; i < n; ++ i ) {
	    Int_t nTrack  = list[i];
	    if(     nTrack > 100000000) { nTrack -= 100000000; }     
	    else if(nTrack >     10000) { nTrack -=     10000; }     
            else if(nTrack >         0) {                      }     
	    else if(nTrack < 0)         {                      }     
	    if (i > 0 && find( check.begin(), check.end(), nTrack ) != check.end() ){
		
	    } else {
                
		check.push_back(nTrack);
		pShowerTrack = (HShowerTrack*)((HLinearCategory*)getTrackCat())->getNewSlot(loc);
		if (pShowerTrack) {
		    pShowerTrack = new(pShowerTrack) HShowerTrack;
		    pShowerTrack->setAddress(nAddress);
		    pShowerTrack->setTrack(nTrack);
		}
	    }
	}
    }
    
    
    
    Double_t fQ;
    HShowerRawMatr *pRawMatr;
    fShowerRawMatrIter->Reset();
    while((pRawMatr = (HShowerRawMatr*)fShowerRawMatrIter->Next()))
    {
	   
	   fQ = gainCharge(pRawMatr);
	   pRawMatr->setCharge(fQ);
	   
	   if(!checkEfficiency(pRawMatr)) {
	      pRawMatr->setCharge(0.0);
	   }
	}
    
    sort();   
    return 0;
}
Bool_t HShowerPadDigitizer::digitize(TObject *pHit) {
#if DEBUG_LEVEL>2
  gDebuger->enterFunc("HShowerPadDigitizer::execute");
  gDebuger->message("Hit  cat points to %p",pHit);
#endif
  HShowerGeantWire *pGeantWire = (HShowerGeantWire*) pHit;
  if (pGeantWire) {
    digiPads(pGeantWire);
  }
#if DEBUG_LEVEL>2
  gDebuger->leaveFunc("HShowerPadDigitizer::execute");
#endif
  return (pGeantWire) ? kTRUE : kFALSE;
}
Int_t HShowerPadDigitizer::sort() {
    ((HLinearCategory*)getTrackCat())->sort();
    return 0;
}
Int_t HShowerPadDigitizer::findFirstHitInShower(Int_t trackID)
{
    
    
    
    
    
    
    
    
    
    
    Int_t numTrack = trackID;
    if(numTrack <= 0) return numTrack; 
    
    
    if(modeTrack == 0) { return numTrack; }
    HGeantShower *poldShower;
    Int_t first = 0;
    Int_t parent= 0;
    HGeantKine* kine = (HGeantKine*)fGeantKineCat->getObject(numTrack - 1);
    if(kine){
        parent = kine->getParentTrack();
	if( parent == 0) {  return numTrack; } 
	first = kine->getFirstShowerHit();
	if(first != -1){
	    poldShower = (HGeantShower*)fGeantShowerCat->getObject(first);
	} else {
	    Error("findFirstHitInShower()","No first shower hit!");
	    return numTrack;
	}
    } else {
	Error("findFirstHitInShower()","Received Zero pointer for kine!");
	return numTrack;
    }
    if(numTrack != poldShower->getTrack()){
	Error("findFirstHitInShower()","First shower hit not same trackID!");
	return numTrack;
    }
    
    
    
    Int_t s = poldShower->getSector();
    
    
    if(modeTrack == 1)
    {   
	
	kine = HGeantKine::getPrimary(numTrack,fGeantKineCat);
	return kine->getTrack();
    }
    
    
    Int_t tempTrack = numTrack;
    first           = 0;
    
    
    if(modeTrack == 2)
    {
	while((kine = kine->getParent(tempTrack,fGeantKineCat)) != 0)
	{
	    first = kine->getFirstShowerHit();
	    if(first != -1)
	    {
		
		HGeantShower* gshower = (HGeantShower*)fGeantShowerCat->getObject(first);
		Int_t s1 = gshower->getSector();
		if(s == s1)
		{   
		    tempTrack = kine->getTrack();
		} else {
		    
		    
		    break;
		}
	    } else {
		
		
		
		break;
	    }
	}
        return tempTrack;
    }
    
    
    
    if(modeTrack >= 3)
    {
	Bool_t foundTof  = kFALSE;
	Int_t tempTrack2 = tempTrack;
	do {
	    first = kine->getFirstTofHit();
	    if(first != -1)
	    { 
		HGeantTof* gtof = (HGeantTof*)fGeantTofCat->getObject(first);
		Int_t s1 = gtof->getSector();
		Int_t m  = gtof->getModule();
		if(s == s1 && m > 21 )
		{   
		    foundTof  = kTRUE;
		    tempTrack = tempTrack2;
		}
	    }
	    tempTrack2 = kine->getParentTrack();
	} while( tempTrack2 > 0 && (kine = (HGeantKine*)fGeantKineCat->getObject(tempTrack2 - 1)) != 0);
	if(foundTof) { tempTrack += 10000; }
        else {
	    kine = (HGeantKine*)fGeantKineCat->getObject(numTrack - 1);
	    if( modeTrack == 3 ){
		
		kine = HGeantKine::getPrimary(numTrack,fGeantKineCat);
		tempTrack = kine->getTrack() + 100000000;
	    } else if (modeTrack == 4){
        	
                
		while((kine = kine->getParent(tempTrack,fGeantKineCat)) != 0)
		{
		    first = kine->getFirstShowerHit();
		    if(first != -1)
		    {
			
			HGeantShower* gshower = (HGeantShower*)fGeantShowerCat->getObject(first);
			Int_t s1 = gshower->getSector();
			if(s == s1)
			{   
			    tempTrack = kine->getTrack();
			} else {
			    
			    
			    break;
			}
		    } else {
			
			
			
			break;
		    }
		}
		tempTrack += 100000000;
		
	    }
	}
    }
    
    return tempTrack;
}
Int_t HShowerPadDigitizer::findFirstHitInRpc(Int_t trackID)
{
    
    
    
    
    
    
    
    
    
    
    Int_t numTrack = trackID;
    if(numTrack <= 0) return numTrack; 
    
    
    if(modeTrack == 0) { return numTrack; }
    HGeantShower *poldShower;
    Int_t first = 0;
    Int_t parent= 0;
    HGeantKine* kine = (HGeantKine*)fGeantKineCat->getObject(numTrack - 1);
    if(kine){
        parent = kine->getParentTrack();
	if( parent == 0) {  return numTrack; } 
	first = kine->getFirstShowerHit();
	if(first != -1){
	    poldShower = (HGeantShower*)fGeantShowerCat->getObject(first);
	} else {
	    Error("findFirstHitInRpc()","No first shower hit!");
	    return numTrack;
	}
    } else {
	Error("findFirstHitInRpc()","Received Zero pointer for kine!");
	return numTrack;
    }
    if(numTrack != poldShower->getTrack()){
	Error("findFirstHitInRpc()","First shower hit not same trackID!");
	return numTrack;
    }
    
    
    
    Int_t s = poldShower->getSector();
    
    
    if(modeTrack == 1)
    {   
	
	kine = HGeantKine::getPrimary(numTrack,fGeantKineCat);
	return kine->getTrack();
    }
    
    
    Int_t tempTrack = numTrack;
    first           = 0;
    
    
    if(modeTrack == 2)
    {
	while((kine = kine->getParent(tempTrack,fGeantKineCat)) != 0)
	{
	    first = kine->getFirstShowerHit();
	    if(first != -1)
	    {
		
		HGeantShower* gshower = (HGeantShower*)fGeantShowerCat->getObject(first);
		Int_t s1 = gshower->getSector();
		if(s == s1)
		{   
		    tempTrack = kine->getTrack();
		} else {
		    
		    
		    break;
		}
	    } else {
		
		
		
		break;
	    }
	}
        return tempTrack;
    }
    
    
    
    if(modeTrack >= 3)
    {
	Bool_t foundRPC  = kFALSE;
	Int_t tempTrack2 = tempTrack;
	do {
	    first = kine->getFirstRpcHit();
	    if(first != -1)
	    { 
		HGeantRpc* grpc = (HGeantRpc*)fGeantRpcCat->getObject(first);
		Int_t s1 = grpc->getSector();
		if(s == s1)
		{   
		    foundRPC  = kTRUE;
		    tempTrack = tempTrack2;
		}
	    }
	    tempTrack2 = kine->getParentTrack();
	} while( tempTrack2 > 0 && (kine = (HGeantKine*)fGeantKineCat->getObject(tempTrack2 - 1)) != 0);
	if(foundRPC) { tempTrack += 10000; }
        else {
	    kine = (HGeantKine*)fGeantKineCat->getObject(numTrack - 1);
	    if( modeTrack == 3 ){
		
		kine = HGeantKine::getPrimary(numTrack,fGeantKineCat);
		tempTrack = kine->getTrack() + 100000000;
	    } else if (modeTrack == 4){
        	
                
		while((kine = kine->getParent(tempTrack,fGeantKineCat)) != 0)
		{
		    first = kine->getFirstShowerHit();
		    if(first != -1)
		    {
			
			HGeantShower* gshower = (HGeantShower*)fGeantShowerCat->getObject(first);
			Int_t s1 = gshower->getSector();
			if(s == s1)
			{   
			    tempTrack = kine->getTrack();
			} else {
			    
			    
			    break;
			}
		    } else {
			
			
			
			break;
		    }
		}
		tempTrack += 100000000;
		
	    }
	}
    }
    
    return tempTrack;
}
Int_t HShowerPadDigitizer::findFirstHit(Int_t trackID)
{
    if(isRpc) {return findFirstHitInRpc   (trackID);}
    else      {return findFirstHitInShower(trackID);}
}
void HShowerPadDigitizer::updatePad(HShowerPad *pPad, Float_t fIndQ, Int_t nSect, Int_t nMod, Int_t nTrack)
{
   Int_t nRow, nCol;
   HShowerRaw *pShowerRaw=NULL;
   HLocation loc;
   Float_t fUpdateThreshold = pDigiPar->getUpdatePadThreshold();
   pPad->getPadPos(&nRow, &nCol);
   loc.set(4, nSect, nMod, nRow, nCol);
   pShowerRaw = (HShowerRaw*)((HMatrixCategory*)getOutCat())->getObject(loc);
   if (!pShowerRaw)
   {
      pShowerRaw = (HShowerRaw*)((HMatrixCategory*)getOutCat())->getSlot(loc);
      if (pShowerRaw != NULL)
      {
        pShowerRaw = new(pShowerRaw) HShowerRaw;
        pShowerRaw->setSector(loc[0]);
        pShowerRaw->setModule(loc[1]);
        pShowerRaw->setRow(loc[2]);
        pShowerRaw->setCol(loc[3]);
      }
   }
    if(pShowerRaw)
    {
        pShowerRaw->addCharge(fIndQ);
	if(pShowerRaw->getCharge() >= fUpdateThreshold) {
	    Int_t tempTrack = findFirstHit(nTrack);
	    
	    Int_t addTr   = pShowerRaw->getAddress();
	    map<Int_t,vector<Int_t> >::iterator pos  = trackMap.find(addTr);
	    if( pos == trackMap.end() ) {  
		vector<Int_t> v;
		v.push_back(tempTrack);
		trackMap.insert( make_pair( addTr, v ) );
	    } else {                       
		(pos->second).push_back(tempTrack);
	    }
	    
	}
    }
}
Float_t HShowerPadDigitizer::calcCharge(Float_t charge, Float_t dist,
                Float_t Xd, Float_t Yd, Float_t Xu, Float_t Yu) {
const Float_t twoPI = 6.28318530718;
return ((charge/twoPI)*(
                      atan(Xd*Yd/(dist*sqrt(dist*dist+Xd*Xd+Yd*Yd))) -
                      atan(Xd*Yu/(dist*sqrt(dist*dist+Xd*Xd+Yu*Yu))) +
                      atan(Xu*Yu/(dist*sqrt(dist*dist+Xu*Xu+Yu*Yu))) -
                      atan(Xu*Yd/(dist*sqrt(dist*dist+Xu*Xu+Yd*Yd)))));
}
void HShowerPadDigitizer::digiPads(HShowerGeantWire* pWireHit)
{
Float_t fX, fY, fQ;
Float_t factor;
Float_t sum;
Int_t   nPadX, nPadY, nPadRange;
Float_t pChargeTable[MAX_PADS_DIST];
Int_t     iMaxInArray, m;
HShowerPad *pTmpPad;
HShowerPad *pCPad;
Float_t fPadThreshold    = pDigiPar->getPadThreshold();
Float_t fUpdateThreshold = pDigiPar->getUpdatePadThreshold();
HShowerPadTab *pPadParam = pGeometry->getPadParam(pWireHit->getModule());
    
    if((fQ = pWireHit->getCharge()) < fUpdateThreshold)
        return;
        
    pWireHit->getXY(&fX, &fY);
            
    if((pCPad = pPadParam->getPad(fX, fY)) == NULL)
        return;
    pCPad->getPadPos(&nPadY, &nPadX);  
    iMaxInArray = MAX_PADS_DIST;
    nPadRange   = (MAX_PADS_DIST - 1) / 2;
    if(numericalCalc(pCPad, pWireHit, pChargeTable) != 0)
        return;
        
    sum = 0.0f;
    for(m = 0; m < iMaxInArray; m++)
        sum += pChargeTable[m];
    if(sum <= 0.0f)
        return;
    factor = fQ / sum;
    for(m = 0; m < iMaxInArray; m++)
    {
        pChargeTable[m] *= factor;
    }
        
    sum = 0.0f;
    for(m = 0; m < iMaxInArray; m++)
    {
        if(pChargeTable[m] >= fPadThreshold)
            sum += pChargeTable[m];
        else
            pChargeTable[m] = 0.0f;
    }
        
    if(sum < fPadThreshold)
    {
        for(m = 0; m < iMaxInArray; m++)
            pChargeTable[m] = 0.0f;
        pChargeTable[nPadRange] = fQ;
    }
    else
    {
            
            
        factor = fQ / sum;
        for(m = 0; m < iMaxInArray; m++)
        {
            if(pChargeTable[m] > 0.0f)
                pChargeTable[m] *= factor;
        }
    }
    for(m = 0; m < iMaxInArray; m++)
    {
        pTmpPad = pPadParam->getPad(nPadY, nPadX + m - nPadRange);
        if(((m == nPadRange) || (pChargeTable[m] >= fPadThreshold))
                && (pTmpPad != NULL) && (pTmpPad->getPadFlag()))
        {
            updatePad(pTmpPad, pChargeTable[m], pWireHit->getSector(),
                        pWireHit->getModule(), pWireHit->getTrack());
        }
    }
}
Double_t HShowerPadDigitizer::gainCharge(HShowerRawMatr *pRawMatr) 
{
  return pRawMatr->getCharge()*pDigiPar->getGain(pRawMatr->getSector(),
                                                 pRawMatr->getModule());
}
Bool_t HShowerPadDigitizer::checkEfficiency(HShowerRawMatr *pRawMatr) 
{
if(pRawMatr->getModule() == 0) return kTRUE;
Double_t threshold = pDigiPar->getThreshold(pRawMatr->getSector(),pRawMatr->getModule());
   if(pRawMatr->getCharge() > threshold) return kTRUE;
   else return kFALSE;
}
Int_t HShowerPadDigitizer::calcLimit(Float_t fCor, Int_t nMatrixRange,
                                                            Float_t fBoxSize)
{
  Int_t k, nLimit;
  k = (Int_t)((fabs(fCor) + 0.5*fBoxSize)/fBoxSize);
  if (fCor < 0 )
     nLimit = (k>nMatrixRange) ? 0 : nMatrixRange - k;
  else
     nLimit = (k>nMatrixRange) ? 2*nMatrixRange : nMatrixRange + k;
  return nLimit;
}
void HShowerPadDigitizer::moveCoord(HShowerPad *pPad,Float_t distWire, Float_t fDx, Float_t fDy,
          Float_t *corXld, Float_t *corYld, Float_t *corXlu, Float_t *corYlu,
          Float_t *corXrd, Float_t *corYrd, Float_t *corXru, Float_t *corYru) {
  *corXld = pPad->getXld() - fDx;
  *corYld =  fDy - fDy - distWire;
  *corXlu = pPad->getXlu() - fDx;
  *corYlu = fDy - fDy + distWire;
  *corXrd = pPad->getXrd() - fDx;
  *corYrd = fDy - fDy - distWire;
  *corXru = pPad->getXru() - fDx;
  *corYru = fDy - fDy + distWire;
}
void HShowerPadDigitizer::analyticCalc(HShowerPad *pPad, HShowerGeantWire* pWireHit)
{
  Float_t fX, fY;
  Float_t fIndQ;
  Float_t corXld, corYld, corXlu, corYlu;
  Float_t corXrd, corYrd, corXru, corYru;
  pWireHit->getXY(&fX, &fY);
  Int_t nModule = pWireHit->getModule();
  HShowerWireTab *pfWire = pGeometry->getWireTab(nModule);
  Float_t distWire  = pfWire->getDistWire();
  moveCoord(pPad, distWire, fX, fY, &corXld, &corYld, &corXlu, &corYlu,
                                &corXrd, &corYrd, &corXru, &corYru);
  fIndQ =  calcCharge(pWireHit->getCharge(),
     pDigiPar->getPlaneDist(),
     corXld, corYld, corXru, corYru);
  updatePad(pPad, fIndQ, pWireHit->getSector(),
                         pWireHit->getModule(), pWireHit->getTrack());
}
Int_t HShowerPadDigitizer::numericalCalc(HShowerPad *pPad,
            HShowerGeantWire* pWireHit, Float_t pfValues[MAX_PADS_DIST])
{
Float_t       fAl, fAr, fBl, fBr;
Float_t       fXd, fXu, fYd, fYu;
Float_t       fXmin, fXmax;
Float_t       fYmin, fYmax;
Float_t       fWireX, fWireY;
Float_t       fY, fX, fQ;
Int_t         i;
HShowerFrameCorner *pCorner;
    if((pPad == NULL) || (pPad->getPadFlag() == 0))
        return -1;
  Int_t iModule                 = pWireHit->getModule();
  HShowerFrame *pFrame          = pGeometry->getFrame(iModule);
  Float_t fDistWire             = pGeometry->getWireTab(iModule)->getDistWire();
  Int_t iMatrixRange            = pDigiPar->getMatrixRange();
  Float_t fBoxSize              = pDigiPar->getBoxSize();
  const Float_t* pfChargeMatrix = pDigiPar->getChargeMatrix();
        
    if((pPad->getPadFlag() == 2) && (pPad->getXld() < 0.0))
    {
        pCorner = pFrame->getCorner(0);
        fXd = pCorner->getX();
        fYd = pCorner->getY();
        pCorner = pFrame->getCorner(1);
        fXu = pCorner->getX();
        fYu = pCorner->getY();
    }
    else
    {
        fXd = pPad->getXld();
        fYd = pPad->getYld();
        fXu = pPad->getXlu();
        fYu = pPad->getYlu();
    }
    fAl = (fXu - fXd) / (fYu - fYd);
    fBl = fXu - fAl * fYu;
        
    if((pPad->getPadFlag() == 2) && (pPad->getXld() >= 0.0))
    {
        pCorner = pFrame->getCorner(3);
        fXd = pCorner->getX();
        fYd = pCorner->getY();
        pCorner = pFrame->getCorner(2);
        fXu = pCorner->getX();
        fYu = pCorner->getY();
    }
    else
    {
        fXd = pPad->getXrd();
        fYd = pPad->getYrd();
        fXu = pPad->getXru();
        fYu = pPad->getYru();
    }
    fAr = (fXu - fXd) / (fYu - fYd);
    fBr = fXu - fAr * fYu;
        
    pWireHit->getXY(&fWireX, &fWireY);
    fXmin = fWireX - iMatrixRange * fBoxSize;
    fXmax = fWireX + iMatrixRange * fBoxSize;
    fYmin = fWireY - fDistWire + 0.5 * fBoxSize;
    fYmax = fWireY + fDistWire - 0.5 * fBoxSize;
    memset(pfValues, 0, MAX_PADS_DIST * sizeof(Float_t));
    for(fY = fYmin; fY <= fYmax; fY += fBoxSize)
    {
            
        if((fX = fAl * fY + fBl) >= fXmin && (fWireX-fX) >= 0.0)
        {
            i = (int)((fX - fXmin) / fBoxSize);
	    if(i>2*iMatrixRange||i<0)
	    {
			cout << " left border fWireX-fX " << fWireX-fX <<  endl;
			cout << " fXd,fYd,fXu,fYu " << pPad->getXld() <<","<< pPad->getYld() << ","<< pPad->getXlu() << ","<< pPad->getYlu() <<  endl;
		Error("numericalCalc()","left border matrix : max %i, ind %i, fX %7.4f, fXmin %7.4f, fWireX %7.4f,fBoxSize %5.3f, PadNr %i",2*iMatrixRange,i,fX,fXmin,fWireX,fBoxSize,pPad->getPadNr());
		continue;
	    }
	    pfValues[0] += pfChargeMatrix[i];
            fQ = pfChargeMatrix[i];
        }
        else
            fQ = 0.0f;
            
        if((fX = fAr * fY + fBr) <= fXmax && (fWireX-fX) <= 0.0)
        {
            i = (int)((fX - fXmin) / fBoxSize);
 	    if(i>2*iMatrixRange||i<0)
	    {
		cout << " right border fWireX-fX " << fWireX-fX <<  endl;
		cout << " fXd,fYd,fXu,fYu " << pPad->getXrd() <<","<< pPad->getYrd() << ","<< pPad->getXru() << ","<< pPad->getYru() <<  endl;
		Error("numericalCalc()","right border matrix : max %i, ind %i, fX %7.4f, fXmin %7.4f, fWireX %7.4f, fBoxSize %5.3f, PadNr %i",2*iMatrixRange,i,fX,fXmin,fWireX,fBoxSize,pPad->getPadNr());
		continue;
	    }
	    	pfValues[1] += pfChargeMatrix[i] - fQ;
            pfValues[2] += pfChargeMatrix[2 * iMatrixRange] - pfChargeMatrix[i];
        }
        else
            pfValues[1] += pfChargeMatrix[2 * iMatrixRange] - fQ;
    }
    return 0;
}
 hshowerpaddigitizer.cc:10  hshowerpaddigitizer.cc:11  hshowerpaddigitizer.cc:12  hshowerpaddigitizer.cc:13  hshowerpaddigitizer.cc:14  hshowerpaddigitizer.cc:15  hshowerpaddigitizer.cc:16  hshowerpaddigitizer.cc:17  hshowerpaddigitizer.cc:18  hshowerpaddigitizer.cc:19  hshowerpaddigitizer.cc:20  hshowerpaddigitizer.cc:21  hshowerpaddigitizer.cc:22  hshowerpaddigitizer.cc:23  hshowerpaddigitizer.cc:24  hshowerpaddigitizer.cc:25  hshowerpaddigitizer.cc:26  hshowerpaddigitizer.cc:27  hshowerpaddigitizer.cc:28  hshowerpaddigitizer.cc:29  hshowerpaddigitizer.cc:30  hshowerpaddigitizer.cc:31  hshowerpaddigitizer.cc:32  hshowerpaddigitizer.cc:33  hshowerpaddigitizer.cc:34  hshowerpaddigitizer.cc:35  hshowerpaddigitizer.cc:36  hshowerpaddigitizer.cc:37  hshowerpaddigitizer.cc:38  hshowerpaddigitizer.cc:39  hshowerpaddigitizer.cc:40  hshowerpaddigitizer.cc:41  hshowerpaddigitizer.cc:42  hshowerpaddigitizer.cc:43  hshowerpaddigitizer.cc:44  hshowerpaddigitizer.cc:45  hshowerpaddigitizer.cc:46  hshowerpaddigitizer.cc:47  hshowerpaddigitizer.cc:48  hshowerpaddigitizer.cc:49  hshowerpaddigitizer.cc:50  hshowerpaddigitizer.cc:51  hshowerpaddigitizer.cc:52  hshowerpaddigitizer.cc:53  hshowerpaddigitizer.cc:54  hshowerpaddigitizer.cc:55  hshowerpaddigitizer.cc:56  hshowerpaddigitizer.cc:57  hshowerpaddigitizer.cc:58  hshowerpaddigitizer.cc:59  hshowerpaddigitizer.cc:60  hshowerpaddigitizer.cc:61  hshowerpaddigitizer.cc:62  hshowerpaddigitizer.cc:63  hshowerpaddigitizer.cc:64  hshowerpaddigitizer.cc:65  hshowerpaddigitizer.cc:66  hshowerpaddigitizer.cc:67  hshowerpaddigitizer.cc:68  hshowerpaddigitizer.cc:69  hshowerpaddigitizer.cc:70  hshowerpaddigitizer.cc:71  hshowerpaddigitizer.cc:72  hshowerpaddigitizer.cc:73  hshowerpaddigitizer.cc:74  hshowerpaddigitizer.cc:75  hshowerpaddigitizer.cc:76  hshowerpaddigitizer.cc:77  hshowerpaddigitizer.cc:78  hshowerpaddigitizer.cc:79  hshowerpaddigitizer.cc:80  hshowerpaddigitizer.cc:81  hshowerpaddigitizer.cc:82  hshowerpaddigitizer.cc:83  hshowerpaddigitizer.cc:84  hshowerpaddigitizer.cc:85  hshowerpaddigitizer.cc:86  hshowerpaddigitizer.cc:87  hshowerpaddigitizer.cc:88  hshowerpaddigitizer.cc:89  hshowerpaddigitizer.cc:90  hshowerpaddigitizer.cc:91  hshowerpaddigitizer.cc:92  hshowerpaddigitizer.cc:93  hshowerpaddigitizer.cc:94  hshowerpaddigitizer.cc:95  hshowerpaddigitizer.cc:96  hshowerpaddigitizer.cc:97  hshowerpaddigitizer.cc:98  hshowerpaddigitizer.cc:99  hshowerpaddigitizer.cc:100  hshowerpaddigitizer.cc:101  hshowerpaddigitizer.cc:102  hshowerpaddigitizer.cc:103  hshowerpaddigitizer.cc:104  hshowerpaddigitizer.cc:105  hshowerpaddigitizer.cc:106  hshowerpaddigitizer.cc:107  hshowerpaddigitizer.cc:108  hshowerpaddigitizer.cc:109  hshowerpaddigitizer.cc:110  hshowerpaddigitizer.cc:111  hshowerpaddigitizer.cc:112  hshowerpaddigitizer.cc:113  hshowerpaddigitizer.cc:114  hshowerpaddigitizer.cc:115  hshowerpaddigitizer.cc:116  hshowerpaddigitizer.cc:117  hshowerpaddigitizer.cc:118  hshowerpaddigitizer.cc:119  hshowerpaddigitizer.cc:120  hshowerpaddigitizer.cc:121  hshowerpaddigitizer.cc:122  hshowerpaddigitizer.cc:123  hshowerpaddigitizer.cc:124  hshowerpaddigitizer.cc:125  hshowerpaddigitizer.cc:126  hshowerpaddigitizer.cc:127  hshowerpaddigitizer.cc:128  hshowerpaddigitizer.cc:129  hshowerpaddigitizer.cc:130  hshowerpaddigitizer.cc:131  hshowerpaddigitizer.cc:132  hshowerpaddigitizer.cc:133  hshowerpaddigitizer.cc:134  hshowerpaddigitizer.cc:135  hshowerpaddigitizer.cc:136  hshowerpaddigitizer.cc:137  hshowerpaddigitizer.cc:138  hshowerpaddigitizer.cc:139  hshowerpaddigitizer.cc:140  hshowerpaddigitizer.cc:141  hshowerpaddigitizer.cc:142  hshowerpaddigitizer.cc:143  hshowerpaddigitizer.cc:144  hshowerpaddigitizer.cc:145  hshowerpaddigitizer.cc:146  hshowerpaddigitizer.cc:147  hshowerpaddigitizer.cc:148  hshowerpaddigitizer.cc:149  hshowerpaddigitizer.cc:150  hshowerpaddigitizer.cc:151  hshowerpaddigitizer.cc:152  hshowerpaddigitizer.cc:153  hshowerpaddigitizer.cc:154  hshowerpaddigitizer.cc:155  hshowerpaddigitizer.cc:156  hshowerpaddigitizer.cc:157  hshowerpaddigitizer.cc:158  hshowerpaddigitizer.cc:159  hshowerpaddigitizer.cc:160  hshowerpaddigitizer.cc:161  hshowerpaddigitizer.cc:162  hshowerpaddigitizer.cc:163  hshowerpaddigitizer.cc:164  hshowerpaddigitizer.cc:165  hshowerpaddigitizer.cc:166  hshowerpaddigitizer.cc:167  hshowerpaddigitizer.cc:168  hshowerpaddigitizer.cc:169  hshowerpaddigitizer.cc:170  hshowerpaddigitizer.cc:171  hshowerpaddigitizer.cc:172  hshowerpaddigitizer.cc:173  hshowerpaddigitizer.cc:174  hshowerpaddigitizer.cc:175  hshowerpaddigitizer.cc:176  hshowerpaddigitizer.cc:177  hshowerpaddigitizer.cc:178  hshowerpaddigitizer.cc:179  hshowerpaddigitizer.cc:180  hshowerpaddigitizer.cc:181  hshowerpaddigitizer.cc:182  hshowerpaddigitizer.cc:183  hshowerpaddigitizer.cc:184  hshowerpaddigitizer.cc:185  hshowerpaddigitizer.cc:186  hshowerpaddigitizer.cc:187  hshowerpaddigitizer.cc:188  hshowerpaddigitizer.cc:189  hshowerpaddigitizer.cc:190  hshowerpaddigitizer.cc:191  hshowerpaddigitizer.cc:192  hshowerpaddigitizer.cc:193  hshowerpaddigitizer.cc:194  hshowerpaddigitizer.cc:195  hshowerpaddigitizer.cc:196  hshowerpaddigitizer.cc:197  hshowerpaddigitizer.cc:198  hshowerpaddigitizer.cc:199  hshowerpaddigitizer.cc:200  hshowerpaddigitizer.cc:201  hshowerpaddigitizer.cc:202  hshowerpaddigitizer.cc:203  hshowerpaddigitizer.cc:204  hshowerpaddigitizer.cc:205  hshowerpaddigitizer.cc:206  hshowerpaddigitizer.cc:207  hshowerpaddigitizer.cc:208  hshowerpaddigitizer.cc:209  hshowerpaddigitizer.cc:210  hshowerpaddigitizer.cc:211  hshowerpaddigitizer.cc:212  hshowerpaddigitizer.cc:213  hshowerpaddigitizer.cc:214  hshowerpaddigitizer.cc:215  hshowerpaddigitizer.cc:216  hshowerpaddigitizer.cc:217  hshowerpaddigitizer.cc:218  hshowerpaddigitizer.cc:219  hshowerpaddigitizer.cc:220  hshowerpaddigitizer.cc:221  hshowerpaddigitizer.cc:222  hshowerpaddigitizer.cc:223  hshowerpaddigitizer.cc:224  hshowerpaddigitizer.cc:225  hshowerpaddigitizer.cc:226  hshowerpaddigitizer.cc:227  hshowerpaddigitizer.cc:228  hshowerpaddigitizer.cc:229  hshowerpaddigitizer.cc:230  hshowerpaddigitizer.cc:231  hshowerpaddigitizer.cc:232  hshowerpaddigitizer.cc:233  hshowerpaddigitizer.cc:234  hshowerpaddigitizer.cc:235  hshowerpaddigitizer.cc:236  hshowerpaddigitizer.cc:237  hshowerpaddigitizer.cc:238  hshowerpaddigitizer.cc:239  hshowerpaddigitizer.cc:240  hshowerpaddigitizer.cc:241  hshowerpaddigitizer.cc:242  hshowerpaddigitizer.cc:243  hshowerpaddigitizer.cc:244  hshowerpaddigitizer.cc:245  hshowerpaddigitizer.cc:246  hshowerpaddigitizer.cc:247  hshowerpaddigitizer.cc:248  hshowerpaddigitizer.cc:249  hshowerpaddigitizer.cc:250  hshowerpaddigitizer.cc:251  hshowerpaddigitizer.cc:252  hshowerpaddigitizer.cc:253  hshowerpaddigitizer.cc:254  hshowerpaddigitizer.cc:255  hshowerpaddigitizer.cc:256  hshowerpaddigitizer.cc:257  hshowerpaddigitizer.cc:258  hshowerpaddigitizer.cc:259  hshowerpaddigitizer.cc:260  hshowerpaddigitizer.cc:261  hshowerpaddigitizer.cc:262  hshowerpaddigitizer.cc:263  hshowerpaddigitizer.cc:264  hshowerpaddigitizer.cc:265  hshowerpaddigitizer.cc:266  hshowerpaddigitizer.cc:267  hshowerpaddigitizer.cc:268  hshowerpaddigitizer.cc:269  hshowerpaddigitizer.cc:270  hshowerpaddigitizer.cc:271  hshowerpaddigitizer.cc:272  hshowerpaddigitizer.cc:273  hshowerpaddigitizer.cc:274  hshowerpaddigitizer.cc:275  hshowerpaddigitizer.cc:276  hshowerpaddigitizer.cc:277  hshowerpaddigitizer.cc:278  hshowerpaddigitizer.cc:279  hshowerpaddigitizer.cc:280  hshowerpaddigitizer.cc:281  hshowerpaddigitizer.cc:282  hshowerpaddigitizer.cc:283  hshowerpaddigitizer.cc:284  hshowerpaddigitizer.cc:285  hshowerpaddigitizer.cc:286  hshowerpaddigitizer.cc:287  hshowerpaddigitizer.cc:288  hshowerpaddigitizer.cc:289  hshowerpaddigitizer.cc:290  hshowerpaddigitizer.cc:291  hshowerpaddigitizer.cc:292  hshowerpaddigitizer.cc:293  hshowerpaddigitizer.cc:294  hshowerpaddigitizer.cc:295  hshowerpaddigitizer.cc:296  hshowerpaddigitizer.cc:297  hshowerpaddigitizer.cc:298  hshowerpaddigitizer.cc:299  hshowerpaddigitizer.cc:300  hshowerpaddigitizer.cc:301  hshowerpaddigitizer.cc:302  hshowerpaddigitizer.cc:303  hshowerpaddigitizer.cc:304  hshowerpaddigitizer.cc:305  hshowerpaddigitizer.cc:306  hshowerpaddigitizer.cc:307  hshowerpaddigitizer.cc:308  hshowerpaddigitizer.cc:309  hshowerpaddigitizer.cc:310  hshowerpaddigitizer.cc:311  hshowerpaddigitizer.cc:312  hshowerpaddigitizer.cc:313  hshowerpaddigitizer.cc:314  hshowerpaddigitizer.cc:315  hshowerpaddigitizer.cc:316  hshowerpaddigitizer.cc:317  hshowerpaddigitizer.cc:318  hshowerpaddigitizer.cc:319  hshowerpaddigitizer.cc:320  hshowerpaddigitizer.cc:321  hshowerpaddigitizer.cc:322  hshowerpaddigitizer.cc:323  hshowerpaddigitizer.cc:324  hshowerpaddigitizer.cc:325  hshowerpaddigitizer.cc:326  hshowerpaddigitizer.cc:327  hshowerpaddigitizer.cc:328  hshowerpaddigitizer.cc:329  hshowerpaddigitizer.cc:330  hshowerpaddigitizer.cc:331  hshowerpaddigitizer.cc:332  hshowerpaddigitizer.cc:333  hshowerpaddigitizer.cc:334  hshowerpaddigitizer.cc:335  hshowerpaddigitizer.cc:336  hshowerpaddigitizer.cc:337  hshowerpaddigitizer.cc:338  hshowerpaddigitizer.cc:339  hshowerpaddigitizer.cc:340  hshowerpaddigitizer.cc:341  hshowerpaddigitizer.cc:342  hshowerpaddigitizer.cc:343  hshowerpaddigitizer.cc:344  hshowerpaddigitizer.cc:345  hshowerpaddigitizer.cc:346  hshowerpaddigitizer.cc:347  hshowerpaddigitizer.cc:348  hshowerpaddigitizer.cc:349  hshowerpaddigitizer.cc:350  hshowerpaddigitizer.cc:351  hshowerpaddigitizer.cc:352  hshowerpaddigitizer.cc:353  hshowerpaddigitizer.cc:354  hshowerpaddigitizer.cc:355  hshowerpaddigitizer.cc:356  hshowerpaddigitizer.cc:357  hshowerpaddigitizer.cc:358  hshowerpaddigitizer.cc:359  hshowerpaddigitizer.cc:360  hshowerpaddigitizer.cc:361  hshowerpaddigitizer.cc:362  hshowerpaddigitizer.cc:363  hshowerpaddigitizer.cc:364  hshowerpaddigitizer.cc:365  hshowerpaddigitizer.cc:366  hshowerpaddigitizer.cc:367  hshowerpaddigitizer.cc:368  hshowerpaddigitizer.cc:369  hshowerpaddigitizer.cc:370  hshowerpaddigitizer.cc:371  hshowerpaddigitizer.cc:372  hshowerpaddigitizer.cc:373  hshowerpaddigitizer.cc:374  hshowerpaddigitizer.cc:375  hshowerpaddigitizer.cc:376  hshowerpaddigitizer.cc:377  hshowerpaddigitizer.cc:378  hshowerpaddigitizer.cc:379  hshowerpaddigitizer.cc:380  hshowerpaddigitizer.cc:381  hshowerpaddigitizer.cc:382  hshowerpaddigitizer.cc:383  hshowerpaddigitizer.cc:384  hshowerpaddigitizer.cc:385  hshowerpaddigitizer.cc:386  hshowerpaddigitizer.cc:387  hshowerpaddigitizer.cc:388  hshowerpaddigitizer.cc:389  hshowerpaddigitizer.cc:390  hshowerpaddigitizer.cc:391  hshowerpaddigitizer.cc:392  hshowerpaddigitizer.cc:393  hshowerpaddigitizer.cc:394  hshowerpaddigitizer.cc:395  hshowerpaddigitizer.cc:396  hshowerpaddigitizer.cc:397  hshowerpaddigitizer.cc:398  hshowerpaddigitizer.cc:399  hshowerpaddigitizer.cc:400  hshowerpaddigitizer.cc:401  hshowerpaddigitizer.cc:402  hshowerpaddigitizer.cc:403  hshowerpaddigitizer.cc:404  hshowerpaddigitizer.cc:405  hshowerpaddigitizer.cc:406  hshowerpaddigitizer.cc:407  hshowerpaddigitizer.cc:408  hshowerpaddigitizer.cc:409  hshowerpaddigitizer.cc:410  hshowerpaddigitizer.cc:411  hshowerpaddigitizer.cc:412  hshowerpaddigitizer.cc:413  hshowerpaddigitizer.cc:414  hshowerpaddigitizer.cc:415  hshowerpaddigitizer.cc:416  hshowerpaddigitizer.cc:417  hshowerpaddigitizer.cc:418  hshowerpaddigitizer.cc:419  hshowerpaddigitizer.cc:420  hshowerpaddigitizer.cc:421  hshowerpaddigitizer.cc:422  hshowerpaddigitizer.cc:423  hshowerpaddigitizer.cc:424  hshowerpaddigitizer.cc:425  hshowerpaddigitizer.cc:426  hshowerpaddigitizer.cc:427  hshowerpaddigitizer.cc:428  hshowerpaddigitizer.cc:429  hshowerpaddigitizer.cc:430  hshowerpaddigitizer.cc:431  hshowerpaddigitizer.cc:432  hshowerpaddigitizer.cc:433  hshowerpaddigitizer.cc:434  hshowerpaddigitizer.cc:435  hshowerpaddigitizer.cc:436  hshowerpaddigitizer.cc:437  hshowerpaddigitizer.cc:438  hshowerpaddigitizer.cc:439  hshowerpaddigitizer.cc:440  hshowerpaddigitizer.cc:441  hshowerpaddigitizer.cc:442  hshowerpaddigitizer.cc:443  hshowerpaddigitizer.cc:444  hshowerpaddigitizer.cc:445  hshowerpaddigitizer.cc:446  hshowerpaddigitizer.cc:447  hshowerpaddigitizer.cc:448  hshowerpaddigitizer.cc:449  hshowerpaddigitizer.cc:450  hshowerpaddigitizer.cc:451  hshowerpaddigitizer.cc:452  hshowerpaddigitizer.cc:453  hshowerpaddigitizer.cc:454  hshowerpaddigitizer.cc:455  hshowerpaddigitizer.cc:456  hshowerpaddigitizer.cc:457  hshowerpaddigitizer.cc:458  hshowerpaddigitizer.cc:459  hshowerpaddigitizer.cc:460  hshowerpaddigitizer.cc:461  hshowerpaddigitizer.cc:462  hshowerpaddigitizer.cc:463  hshowerpaddigitizer.cc:464  hshowerpaddigitizer.cc:465  hshowerpaddigitizer.cc:466  hshowerpaddigitizer.cc:467  hshowerpaddigitizer.cc:468  hshowerpaddigitizer.cc:469  hshowerpaddigitizer.cc:470  hshowerpaddigitizer.cc:471  hshowerpaddigitizer.cc:472  hshowerpaddigitizer.cc:473  hshowerpaddigitizer.cc:474  hshowerpaddigitizer.cc:475  hshowerpaddigitizer.cc:476  hshowerpaddigitizer.cc:477  hshowerpaddigitizer.cc:478  hshowerpaddigitizer.cc:479  hshowerpaddigitizer.cc:480  hshowerpaddigitizer.cc:481  hshowerpaddigitizer.cc:482  hshowerpaddigitizer.cc:483  hshowerpaddigitizer.cc:484  hshowerpaddigitizer.cc:485  hshowerpaddigitizer.cc:486  hshowerpaddigitizer.cc:487  hshowerpaddigitizer.cc:488  hshowerpaddigitizer.cc:489  hshowerpaddigitizer.cc:490  hshowerpaddigitizer.cc:491  hshowerpaddigitizer.cc:492  hshowerpaddigitizer.cc:493  hshowerpaddigitizer.cc:494  hshowerpaddigitizer.cc:495  hshowerpaddigitizer.cc:496  hshowerpaddigitizer.cc:497  hshowerpaddigitizer.cc:498  hshowerpaddigitizer.cc:499  hshowerpaddigitizer.cc:500  hshowerpaddigitizer.cc:501  hshowerpaddigitizer.cc:502  hshowerpaddigitizer.cc:503  hshowerpaddigitizer.cc:504  hshowerpaddigitizer.cc:505  hshowerpaddigitizer.cc:506  hshowerpaddigitizer.cc:507  hshowerpaddigitizer.cc:508  hshowerpaddigitizer.cc:509  hshowerpaddigitizer.cc:510  hshowerpaddigitizer.cc:511  hshowerpaddigitizer.cc:512  hshowerpaddigitizer.cc:513  hshowerpaddigitizer.cc:514  hshowerpaddigitizer.cc:515  hshowerpaddigitizer.cc:516  hshowerpaddigitizer.cc:517  hshowerpaddigitizer.cc:518  hshowerpaddigitizer.cc:519  hshowerpaddigitizer.cc:520  hshowerpaddigitizer.cc:521  hshowerpaddigitizer.cc:522  hshowerpaddigitizer.cc:523  hshowerpaddigitizer.cc:524  hshowerpaddigitizer.cc:525  hshowerpaddigitizer.cc:526  hshowerpaddigitizer.cc:527  hshowerpaddigitizer.cc:528  hshowerpaddigitizer.cc:529  hshowerpaddigitizer.cc:530  hshowerpaddigitizer.cc:531  hshowerpaddigitizer.cc:532  hshowerpaddigitizer.cc:533  hshowerpaddigitizer.cc:534  hshowerpaddigitizer.cc:535  hshowerpaddigitizer.cc:536  hshowerpaddigitizer.cc:537  hshowerpaddigitizer.cc:538  hshowerpaddigitizer.cc:539  hshowerpaddigitizer.cc:540  hshowerpaddigitizer.cc:541  hshowerpaddigitizer.cc:542  hshowerpaddigitizer.cc:543  hshowerpaddigitizer.cc:544  hshowerpaddigitizer.cc:545  hshowerpaddigitizer.cc:546  hshowerpaddigitizer.cc:547  hshowerpaddigitizer.cc:548  hshowerpaddigitizer.cc:549  hshowerpaddigitizer.cc:550  hshowerpaddigitizer.cc:551  hshowerpaddigitizer.cc:552  hshowerpaddigitizer.cc:553  hshowerpaddigitizer.cc:554  hshowerpaddigitizer.cc:555  hshowerpaddigitizer.cc:556  hshowerpaddigitizer.cc:557  hshowerpaddigitizer.cc:558  hshowerpaddigitizer.cc:559  hshowerpaddigitizer.cc:560  hshowerpaddigitizer.cc:561  hshowerpaddigitizer.cc:562  hshowerpaddigitizer.cc:563  hshowerpaddigitizer.cc:564  hshowerpaddigitizer.cc:565  hshowerpaddigitizer.cc:566  hshowerpaddigitizer.cc:567  hshowerpaddigitizer.cc:568  hshowerpaddigitizer.cc:569  hshowerpaddigitizer.cc:570  hshowerpaddigitizer.cc:571  hshowerpaddigitizer.cc:572  hshowerpaddigitizer.cc:573  hshowerpaddigitizer.cc:574  hshowerpaddigitizer.cc:575  hshowerpaddigitizer.cc:576  hshowerpaddigitizer.cc:577  hshowerpaddigitizer.cc:578  hshowerpaddigitizer.cc:579  hshowerpaddigitizer.cc:580  hshowerpaddigitizer.cc:581  hshowerpaddigitizer.cc:582  hshowerpaddigitizer.cc:583  hshowerpaddigitizer.cc:584  hshowerpaddigitizer.cc:585  hshowerpaddigitizer.cc:586  hshowerpaddigitizer.cc:587  hshowerpaddigitizer.cc:588  hshowerpaddigitizer.cc:589  hshowerpaddigitizer.cc:590  hshowerpaddigitizer.cc:591  hshowerpaddigitizer.cc:592  hshowerpaddigitizer.cc:593  hshowerpaddigitizer.cc:594  hshowerpaddigitizer.cc:595  hshowerpaddigitizer.cc:596  hshowerpaddigitizer.cc:597  hshowerpaddigitizer.cc:598  hshowerpaddigitizer.cc:599  hshowerpaddigitizer.cc:600  hshowerpaddigitizer.cc:601  hshowerpaddigitizer.cc:602  hshowerpaddigitizer.cc:603  hshowerpaddigitizer.cc:604  hshowerpaddigitizer.cc:605  hshowerpaddigitizer.cc:606  hshowerpaddigitizer.cc:607  hshowerpaddigitizer.cc:608  hshowerpaddigitizer.cc:609  hshowerpaddigitizer.cc:610  hshowerpaddigitizer.cc:611  hshowerpaddigitizer.cc:612  hshowerpaddigitizer.cc:613  hshowerpaddigitizer.cc:614  hshowerpaddigitizer.cc:615  hshowerpaddigitizer.cc:616  hshowerpaddigitizer.cc:617  hshowerpaddigitizer.cc:618  hshowerpaddigitizer.cc:619  hshowerpaddigitizer.cc:620  hshowerpaddigitizer.cc:621  hshowerpaddigitizer.cc:622  hshowerpaddigitizer.cc:623  hshowerpaddigitizer.cc:624  hshowerpaddigitizer.cc:625  hshowerpaddigitizer.cc:626  hshowerpaddigitizer.cc:627  hshowerpaddigitizer.cc:628  hshowerpaddigitizer.cc:629  hshowerpaddigitizer.cc:630  hshowerpaddigitizer.cc:631  hshowerpaddigitizer.cc:632  hshowerpaddigitizer.cc:633  hshowerpaddigitizer.cc:634  hshowerpaddigitizer.cc:635  hshowerpaddigitizer.cc:636  hshowerpaddigitizer.cc:637  hshowerpaddigitizer.cc:638  hshowerpaddigitizer.cc:639  hshowerpaddigitizer.cc:640  hshowerpaddigitizer.cc:641  hshowerpaddigitizer.cc:642  hshowerpaddigitizer.cc:643  hshowerpaddigitizer.cc:644  hshowerpaddigitizer.cc:645  hshowerpaddigitizer.cc:646  hshowerpaddigitizer.cc:647  hshowerpaddigitizer.cc:648  hshowerpaddigitizer.cc:649  hshowerpaddigitizer.cc:650  hshowerpaddigitizer.cc:651  hshowerpaddigitizer.cc:652  hshowerpaddigitizer.cc:653  hshowerpaddigitizer.cc:654  hshowerpaddigitizer.cc:655  hshowerpaddigitizer.cc:656  hshowerpaddigitizer.cc:657  hshowerpaddigitizer.cc:658  hshowerpaddigitizer.cc:659  hshowerpaddigitizer.cc:660  hshowerpaddigitizer.cc:661  hshowerpaddigitizer.cc:662  hshowerpaddigitizer.cc:663  hshowerpaddigitizer.cc:664  hshowerpaddigitizer.cc:665  hshowerpaddigitizer.cc:666  hshowerpaddigitizer.cc:667  hshowerpaddigitizer.cc:668  hshowerpaddigitizer.cc:669  hshowerpaddigitizer.cc:670  hshowerpaddigitizer.cc:671  hshowerpaddigitizer.cc:672  hshowerpaddigitizer.cc:673  hshowerpaddigitizer.cc:674  hshowerpaddigitizer.cc:675  hshowerpaddigitizer.cc:676  hshowerpaddigitizer.cc:677  hshowerpaddigitizer.cc:678  hshowerpaddigitizer.cc:679  hshowerpaddigitizer.cc:680  hshowerpaddigitizer.cc:681  hshowerpaddigitizer.cc:682  hshowerpaddigitizer.cc:683  hshowerpaddigitizer.cc:684  hshowerpaddigitizer.cc:685  hshowerpaddigitizer.cc:686  hshowerpaddigitizer.cc:687  hshowerpaddigitizer.cc:688  hshowerpaddigitizer.cc:689  hshowerpaddigitizer.cc:690  hshowerpaddigitizer.cc:691  hshowerpaddigitizer.cc:692  hshowerpaddigitizer.cc:693  hshowerpaddigitizer.cc:694  hshowerpaddigitizer.cc:695  hshowerpaddigitizer.cc:696  hshowerpaddigitizer.cc:697  hshowerpaddigitizer.cc:698  hshowerpaddigitizer.cc:699  hshowerpaddigitizer.cc:700  hshowerpaddigitizer.cc:701  hshowerpaddigitizer.cc:702  hshowerpaddigitizer.cc:703  hshowerpaddigitizer.cc:704  hshowerpaddigitizer.cc:705  hshowerpaddigitizer.cc:706  hshowerpaddigitizer.cc:707  hshowerpaddigitizer.cc:708  hshowerpaddigitizer.cc:709  hshowerpaddigitizer.cc:710  hshowerpaddigitizer.cc:711  hshowerpaddigitizer.cc:712  hshowerpaddigitizer.cc:713  hshowerpaddigitizer.cc:714  hshowerpaddigitizer.cc:715  hshowerpaddigitizer.cc:716  hshowerpaddigitizer.cc:717  hshowerpaddigitizer.cc:718  hshowerpaddigitizer.cc:719  hshowerpaddigitizer.cc:720  hshowerpaddigitizer.cc:721  hshowerpaddigitizer.cc:722  hshowerpaddigitizer.cc:723  hshowerpaddigitizer.cc:724  hshowerpaddigitizer.cc:725  hshowerpaddigitizer.cc:726  hshowerpaddigitizer.cc:727  hshowerpaddigitizer.cc:728  hshowerpaddigitizer.cc:729  hshowerpaddigitizer.cc:730  hshowerpaddigitizer.cc:731  hshowerpaddigitizer.cc:732  hshowerpaddigitizer.cc:733  hshowerpaddigitizer.cc:734  hshowerpaddigitizer.cc:735  hshowerpaddigitizer.cc:736  hshowerpaddigitizer.cc:737  hshowerpaddigitizer.cc:738  hshowerpaddigitizer.cc:739  hshowerpaddigitizer.cc:740  hshowerpaddigitizer.cc:741  hshowerpaddigitizer.cc:742  hshowerpaddigitizer.cc:743  hshowerpaddigitizer.cc:744  hshowerpaddigitizer.cc:745  hshowerpaddigitizer.cc:746  hshowerpaddigitizer.cc:747  hshowerpaddigitizer.cc:748  hshowerpaddigitizer.cc:749  hshowerpaddigitizer.cc:750  hshowerpaddigitizer.cc:751  hshowerpaddigitizer.cc:752  hshowerpaddigitizer.cc:753  hshowerpaddigitizer.cc:754  hshowerpaddigitizer.cc:755  hshowerpaddigitizer.cc:756  hshowerpaddigitizer.cc:757  hshowerpaddigitizer.cc:758  hshowerpaddigitizer.cc:759  hshowerpaddigitizer.cc:760  hshowerpaddigitizer.cc:761  hshowerpaddigitizer.cc:762  hshowerpaddigitizer.cc:763  hshowerpaddigitizer.cc:764  hshowerpaddigitizer.cc:765  hshowerpaddigitizer.cc:766  hshowerpaddigitizer.cc:767  hshowerpaddigitizer.cc:768  hshowerpaddigitizer.cc:769  hshowerpaddigitizer.cc:770  hshowerpaddigitizer.cc:771  hshowerpaddigitizer.cc:772  hshowerpaddigitizer.cc:773  hshowerpaddigitizer.cc:774  hshowerpaddigitizer.cc:775  hshowerpaddigitizer.cc:776  hshowerpaddigitizer.cc:777  hshowerpaddigitizer.cc:778  hshowerpaddigitizer.cc:779  hshowerpaddigitizer.cc:780  hshowerpaddigitizer.cc:781  hshowerpaddigitizer.cc:782  hshowerpaddigitizer.cc:783  hshowerpaddigitizer.cc:784  hshowerpaddigitizer.cc:785  hshowerpaddigitizer.cc:786  hshowerpaddigitizer.cc:787  hshowerpaddigitizer.cc:788  hshowerpaddigitizer.cc:789  hshowerpaddigitizer.cc:790  hshowerpaddigitizer.cc:791  hshowerpaddigitizer.cc:792  hshowerpaddigitizer.cc:793  hshowerpaddigitizer.cc:794  hshowerpaddigitizer.cc:795  hshowerpaddigitizer.cc:796  hshowerpaddigitizer.cc:797  hshowerpaddigitizer.cc:798  hshowerpaddigitizer.cc:799  hshowerpaddigitizer.cc:800  hshowerpaddigitizer.cc:801  hshowerpaddigitizer.cc:802  hshowerpaddigitizer.cc:803  hshowerpaddigitizer.cc:804  hshowerpaddigitizer.cc:805  hshowerpaddigitizer.cc:806  hshowerpaddigitizer.cc:807  hshowerpaddigitizer.cc:808  hshowerpaddigitizer.cc:809  hshowerpaddigitizer.cc:810  hshowerpaddigitizer.cc:811  hshowerpaddigitizer.cc:812  hshowerpaddigitizer.cc:813  hshowerpaddigitizer.cc:814  hshowerpaddigitizer.cc:815  hshowerpaddigitizer.cc:816  hshowerpaddigitizer.cc:817  hshowerpaddigitizer.cc:818  hshowerpaddigitizer.cc:819  hshowerpaddigitizer.cc:820  hshowerpaddigitizer.cc:821  hshowerpaddigitizer.cc:822  hshowerpaddigitizer.cc:823  hshowerpaddigitizer.cc:824  hshowerpaddigitizer.cc:825  hshowerpaddigitizer.cc:826  hshowerpaddigitizer.cc:827  hshowerpaddigitizer.cc:828  hshowerpaddigitizer.cc:829  hshowerpaddigitizer.cc:830  hshowerpaddigitizer.cc:831  hshowerpaddigitizer.cc:832  hshowerpaddigitizer.cc:833  hshowerpaddigitizer.cc:834  hshowerpaddigitizer.cc:835  hshowerpaddigitizer.cc:836  hshowerpaddigitizer.cc:837  hshowerpaddigitizer.cc:838  hshowerpaddigitizer.cc:839  hshowerpaddigitizer.cc:840  hshowerpaddigitizer.cc:841  hshowerpaddigitizer.cc:842  hshowerpaddigitizer.cc:843  hshowerpaddigitizer.cc:844  hshowerpaddigitizer.cc:845  hshowerpaddigitizer.cc:846  hshowerpaddigitizer.cc:847  hshowerpaddigitizer.cc:848  hshowerpaddigitizer.cc:849  hshowerpaddigitizer.cc:850  hshowerpaddigitizer.cc:851  hshowerpaddigitizer.cc:852  hshowerpaddigitizer.cc:853  hshowerpaddigitizer.cc:854  hshowerpaddigitizer.cc:855  hshowerpaddigitizer.cc:856  hshowerpaddigitizer.cc:857  hshowerpaddigitizer.cc:858  hshowerpaddigitizer.cc:859  hshowerpaddigitizer.cc:860  hshowerpaddigitizer.cc:861  hshowerpaddigitizer.cc:862  hshowerpaddigitizer.cc:863  hshowerpaddigitizer.cc:864  hshowerpaddigitizer.cc:865  hshowerpaddigitizer.cc:866  hshowerpaddigitizer.cc:867  hshowerpaddigitizer.cc:868  hshowerpaddigitizer.cc:869  hshowerpaddigitizer.cc:870  hshowerpaddigitizer.cc:871  hshowerpaddigitizer.cc:872  hshowerpaddigitizer.cc:873  hshowerpaddigitizer.cc:874  hshowerpaddigitizer.cc:875  hshowerpaddigitizer.cc:876  hshowerpaddigitizer.cc:877  hshowerpaddigitizer.cc:878  hshowerpaddigitizer.cc:879  hshowerpaddigitizer.cc:880  hshowerpaddigitizer.cc:881  hshowerpaddigitizer.cc:882  hshowerpaddigitizer.cc:883  hshowerpaddigitizer.cc:884  hshowerpaddigitizer.cc:885  hshowerpaddigitizer.cc:886  hshowerpaddigitizer.cc:887  hshowerpaddigitizer.cc:888  hshowerpaddigitizer.cc:889  hshowerpaddigitizer.cc:890  hshowerpaddigitizer.cc:891  hshowerpaddigitizer.cc:892  hshowerpaddigitizer.cc:893  hshowerpaddigitizer.cc:894  hshowerpaddigitizer.cc:895  hshowerpaddigitizer.cc:896  hshowerpaddigitizer.cc:897  hshowerpaddigitizer.cc:898  hshowerpaddigitizer.cc:899  hshowerpaddigitizer.cc:900  hshowerpaddigitizer.cc:901  hshowerpaddigitizer.cc:902  hshowerpaddigitizer.cc:903  hshowerpaddigitizer.cc:904  hshowerpaddigitizer.cc:905  hshowerpaddigitizer.cc:906  hshowerpaddigitizer.cc:907  hshowerpaddigitizer.cc:908  hshowerpaddigitizer.cc:909  hshowerpaddigitizer.cc:910  hshowerpaddigitizer.cc:911  hshowerpaddigitizer.cc:912  hshowerpaddigitizer.cc:913  hshowerpaddigitizer.cc:914  hshowerpaddigitizer.cc:915  hshowerpaddigitizer.cc:916  hshowerpaddigitizer.cc:917  hshowerpaddigitizer.cc:918  hshowerpaddigitizer.cc:919  hshowerpaddigitizer.cc:920  hshowerpaddigitizer.cc:921  hshowerpaddigitizer.cc:922  hshowerpaddigitizer.cc:923  hshowerpaddigitizer.cc:924  hshowerpaddigitizer.cc:925  hshowerpaddigitizer.cc:926  hshowerpaddigitizer.cc:927  hshowerpaddigitizer.cc:928  hshowerpaddigitizer.cc:929  hshowerpaddigitizer.cc:930  hshowerpaddigitizer.cc:931  hshowerpaddigitizer.cc:932  hshowerpaddigitizer.cc:933  hshowerpaddigitizer.cc:934  hshowerpaddigitizer.cc:935  hshowerpaddigitizer.cc:936  hshowerpaddigitizer.cc:937  hshowerpaddigitizer.cc:938  hshowerpaddigitizer.cc:939  hshowerpaddigitizer.cc:940  hshowerpaddigitizer.cc:941  hshowerpaddigitizer.cc:942  hshowerpaddigitizer.cc:943  hshowerpaddigitizer.cc:944  hshowerpaddigitizer.cc:945  hshowerpaddigitizer.cc:946  hshowerpaddigitizer.cc:947  hshowerpaddigitizer.cc:948  hshowerpaddigitizer.cc:949  hshowerpaddigitizer.cc:950  hshowerpaddigitizer.cc:951  hshowerpaddigitizer.cc:952  hshowerpaddigitizer.cc:953  hshowerpaddigitizer.cc:954  hshowerpaddigitizer.cc:955  hshowerpaddigitizer.cc:956  hshowerpaddigitizer.cc:957  hshowerpaddigitizer.cc:958  hshowerpaddigitizer.cc:959  hshowerpaddigitizer.cc:960  hshowerpaddigitizer.cc:961  hshowerpaddigitizer.cc:962  hshowerpaddigitizer.cc:963  hshowerpaddigitizer.cc:964  hshowerpaddigitizer.cc:965  hshowerpaddigitizer.cc:966  hshowerpaddigitizer.cc:967  hshowerpaddigitizer.cc:968  hshowerpaddigitizer.cc:969  hshowerpaddigitizer.cc:970  hshowerpaddigitizer.cc:971  hshowerpaddigitizer.cc:972  hshowerpaddigitizer.cc:973  hshowerpaddigitizer.cc:974  hshowerpaddigitizer.cc:975  hshowerpaddigitizer.cc:976  hshowerpaddigitizer.cc:977  hshowerpaddigitizer.cc:978  hshowerpaddigitizer.cc:979  hshowerpaddigitizer.cc:980  hshowerpaddigitizer.cc:981  hshowerpaddigitizer.cc:982  hshowerpaddigitizer.cc:983  hshowerpaddigitizer.cc:984  hshowerpaddigitizer.cc:985  hshowerpaddigitizer.cc:986  hshowerpaddigitizer.cc:987  hshowerpaddigitizer.cc:988  hshowerpaddigitizer.cc:989  hshowerpaddigitizer.cc:990  hshowerpaddigitizer.cc:991  hshowerpaddigitizer.cc:992  hshowerpaddigitizer.cc:993  hshowerpaddigitizer.cc:994  hshowerpaddigitizer.cc:995  hshowerpaddigitizer.cc:996  hshowerpaddigitizer.cc:997  hshowerpaddigitizer.cc:998  hshowerpaddigitizer.cc:999  hshowerpaddigitizer.cc:1000  hshowerpaddigitizer.cc:1001  hshowerpaddigitizer.cc:1002  hshowerpaddigitizer.cc:1003  hshowerpaddigitizer.cc:1004  hshowerpaddigitizer.cc:1005  hshowerpaddigitizer.cc:1006  hshowerpaddigitizer.cc:1007  hshowerpaddigitizer.cc:1008  hshowerpaddigitizer.cc:1009  hshowerpaddigitizer.cc:1010  hshowerpaddigitizer.cc:1011  hshowerpaddigitizer.cc:1012  hshowerpaddigitizer.cc:1013  hshowerpaddigitizer.cc:1014  hshowerpaddigitizer.cc:1015  hshowerpaddigitizer.cc:1016  hshowerpaddigitizer.cc:1017  hshowerpaddigitizer.cc:1018  hshowerpaddigitizer.cc:1019  hshowerpaddigitizer.cc:1020  hshowerpaddigitizer.cc:1021  hshowerpaddigitizer.cc:1022  hshowerpaddigitizer.cc:1023  hshowerpaddigitizer.cc:1024  hshowerpaddigitizer.cc:1025  hshowerpaddigitizer.cc:1026  hshowerpaddigitizer.cc:1027  hshowerpaddigitizer.cc:1028  hshowerpaddigitizer.cc:1029  hshowerpaddigitizer.cc:1030  hshowerpaddigitizer.cc:1031  hshowerpaddigitizer.cc:1032  hshowerpaddigitizer.cc:1033  hshowerpaddigitizer.cc:1034  hshowerpaddigitizer.cc:1035  hshowerpaddigitizer.cc:1036  hshowerpaddigitizer.cc:1037  hshowerpaddigitizer.cc:1038  hshowerpaddigitizer.cc:1039  hshowerpaddigitizer.cc:1040  hshowerpaddigitizer.cc:1041  hshowerpaddigitizer.cc:1042  hshowerpaddigitizer.cc:1043  hshowerpaddigitizer.cc:1044  hshowerpaddigitizer.cc:1045  hshowerpaddigitizer.cc:1046  hshowerpaddigitizer.cc:1047  hshowerpaddigitizer.cc:1048  hshowerpaddigitizer.cc:1049  hshowerpaddigitizer.cc:1050  hshowerpaddigitizer.cc:1051  hshowerpaddigitizer.cc:1052  hshowerpaddigitizer.cc:1053  hshowerpaddigitizer.cc:1054  hshowerpaddigitizer.cc:1055  hshowerpaddigitizer.cc:1056  hshowerpaddigitizer.cc:1057  hshowerpaddigitizer.cc:1058  hshowerpaddigitizer.cc:1059  hshowerpaddigitizer.cc:1060  hshowerpaddigitizer.cc:1061  hshowerpaddigitizer.cc:1062  hshowerpaddigitizer.cc:1063  hshowerpaddigitizer.cc:1064  hshowerpaddigitizer.cc:1065  hshowerpaddigitizer.cc:1066  hshowerpaddigitizer.cc:1067  hshowerpaddigitizer.cc:1068  hshowerpaddigitizer.cc:1069  hshowerpaddigitizer.cc:1070  hshowerpaddigitizer.cc:1071  hshowerpaddigitizer.cc:1072  hshowerpaddigitizer.cc:1073  hshowerpaddigitizer.cc:1074  hshowerpaddigitizer.cc:1075  hshowerpaddigitizer.cc:1076  hshowerpaddigitizer.cc:1077  hshowerpaddigitizer.cc:1078  hshowerpaddigitizer.cc:1079  hshowerpaddigitizer.cc:1080  hshowerpaddigitizer.cc:1081  hshowerpaddigitizer.cc:1082  hshowerpaddigitizer.cc:1083  hshowerpaddigitizer.cc:1084  hshowerpaddigitizer.cc:1085  hshowerpaddigitizer.cc:1086  hshowerpaddigitizer.cc:1087  hshowerpaddigitizer.cc:1088  hshowerpaddigitizer.cc:1089  hshowerpaddigitizer.cc:1090  hshowerpaddigitizer.cc:1091  hshowerpaddigitizer.cc:1092  hshowerpaddigitizer.cc:1093  hshowerpaddigitizer.cc:1094  hshowerpaddigitizer.cc:1095  hshowerpaddigitizer.cc:1096  hshowerpaddigitizer.cc:1097  hshowerpaddigitizer.cc:1098  hshowerpaddigitizer.cc:1099  hshowerpaddigitizer.cc:1100  hshowerpaddigitizer.cc:1101  hshowerpaddigitizer.cc:1102  hshowerpaddigitizer.cc:1103