ROOT logo
#include "hedhelpers.h"

#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hmdcdetector.h"
#include "hgeantdef.h"


#include "hmdcsizescells.h"
#include "hmdcgetcontainers.h"
#include "hmdckickplane.h"

#include "hrecevent.h"
#include "heventheader.h"
#include "hcategory.h"

#include "hmdccal1.h"
#include "hmdcseg.h"
#include "hwallhit.h"
#include "htofhit.h"
#include "hshowerhit.h"
#include "hemccluster.h"
#include "hrichhit.h"
#include "hrpccluster.h"
#include "hrichcal.h"
#include "hgeantkine.h"
#include "hgeantmdc.h"
#include "hgeanttof.h"
#include "hgeantrpc.h"
#include "hgeantshower.h"
#include "hgeantrich.h"
#include "hgeantwall.h"
#include "hparticlecand.h"

#include "hgeomtransform.h"
#include "hgeomvector.h"
#include "hgeomvector2.h"
#include "hgeomcompositevolume.h"

#include "hrich700digipar.h"
#include "hrichgeometrypar.h"
#include "hrichpadtab.h"
#include "hrichpad.h"
#include "hrichpadcorner.h"
#include "hrichframe.h"
#include "hrichframecorner.h"

#include "htofgeompar.h"
#include "hrpcgeompar.h"
#include "hwallgeompar.h"
#include "hshowergeometry.h"



#include "hcategorymanager.h"

#include "TMath.h"
#include "TEveFrameBox.h"
#include "TEveTrackPropagator.h"
#include "TEveTrack.h"
#include "TEveVSDStructs.h"
#include "TGeoSphere.h"

#include <iostream>
using namespace std;



ClassImp(HEDTransform)
ClassImp(HEDMakeContainers)
ClassImp(HEDMdcWireManager)


HGeomTransform* HEDTransform::richSecTrans    = 0;
HGeomTransform* HEDTransform::richMirrorTrans = 0;
TGeoSphere*     HEDTransform::richMirror      = 0;
Bool_t          HEDTransform::fisNewRich      = kFALSE;
Bool_t          HEDTransform::fisEmc          = kFALSE;

Float_t  HEDTransform::calcPhiToLab(Int_t sec)
{
    // returns the lower phi bound of the sector
    // in LAB [Deg].
    Float_t phi = 0.;
    if(sec < 5) { phi = (sec == 0)? 0. : sec * 60.; }
    else        { phi = -60.;   }

    return phi;
}

void HEDTransform::setRichSecTrans(Double_t x,Double_t y,Double_t z,Double_t rot1,Double_t rot2,Double_t rot3){
    // offset xyz + rotation in deg
    Double_t par[6] = {x,y,z,rot1,rot2,rot3};
    if(richSecTrans == 0) richSecTrans = new HGeomTransform();
    HMdcSizesCells::setTransform(par,*richSecTrans);
}
void HEDTransform::setRichMirrorTrans(Double_t x,Double_t y,Double_t z,Double_t rot1,Double_t rot2,Double_t rot3){
    // offset xyz + rotation in deg
    Double_t par[6] = {x,y,z,rot1,rot2,rot3};
    if(richMirrorTrans == 0) richMirrorTrans = new HGeomTransform();
    HMdcSizesCells::setTransform(par,*richMirrorTrans);
}

HGeomTransform* HEDTransform::getRichSecTrans(){
    // get Rich sector trans. If the trans has not been initialized
    // before a default transformation of -20 deg theta rotation
    // will be set.

    if(richSecTrans == 0){
	::Warning("getRichSecTrans()","Rich Sector trans was not initialized before! Use default....");
	HEDTransform::setRichSecTrans(0.,0.,0.,-20.,0.,0.); // padplane tilt is 20 Deg in theta
    }
    return richSecTrans;
}

HGeomTransform* HEDTransform::getRichMirrorTrans(){
    // get Rich Mirror trans. If the trans has not been initialized
    // before a default transformation 0 will be set.

    if(richMirrorTrans == 0){
	::Warning("getRichMirrorTrans()","Rich Mirror trans was not initialized before! Use default....");
	HEDTransform::setRichMirrorTrans(0.,0.,0.,0.,0.,0.); // padplane tilt is 20 Deg in theta
    }
    return richMirrorTrans;
}

Bool_t HEDTransform::calcSegPointsLab(HMdcSeg* seg ,HGeomVector& p1,HGeomVector& p2)
{
    // takes HMdcSeg object and calculates hits points on both
    // modules in Lab cordinates (in cm !)
    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();
    if(sizes){
	if(seg){
	    Int_t sec = seg->getSec();
	    Int_t first = 0;
	    Double_t x,y,z;
	    if(seg->getIOSeg() == 1 ) first = 2;


            HMdcDetector* mdcDet = (HMdcDetector*) gHades->getSetup()->getDetector("Mdc");
	    if(!mdcDet) { cerr<<"helpers::calcSegPointsLab() : No Mdc Detector defined!"<<endl;
		exit(1);
	    }

	    if(!mdcDet->getModule(sec,first) || !mdcDet->getModule(sec,first+1) ){
		cerr<<"helpers::calcSegPointsLab() : At least one module in segment not defined in detector! Need Geometry!"<<endl;
                exit(1);
	    }


	    HMdcSizesCellsMod* module = &((*sizes)[sec][first]);
	    if(!module){
		cerr<<"helpers::calcSegPointsLab() : Received NULL pointer for HMdcSizesMod s = "<<sec<<" m = "<<first<<"!"<<endl;
		return kFALSE;
	    }
	    module->calcSegIntersec(seg->getZ(),seg->getR(),seg->getTheta(),seg->getPhi(),x,y,z);
            p1.setXYZ(x,y,z);
	    HGeomTransform trans;
	    containers->getLabTransSec(trans,sec,first);
	    p1 = trans.transFrom(p1);    // Mod to Lab coordinate system
            p1 *= TO_CM;                    // mm -> cm

	    module = &((*sizes)[sec][first+1]);
	    if(!module){
		cerr<<"helpers::calcSegPointsLab() : Received NULL pointer for HMdcSizesMod s = "<<sec<<" m = "<<first+1<<"!"<<endl;
		return kFALSE;
	    }
	    module->calcSegIntersec(seg->getZ(),seg->getR(),seg->getTheta(),seg->getPhi(),x,y,z);
            p2.setXYZ(x,y,z);
	    containers->getLabTransSec(trans,sec,first+1);
	    p2 = trans.transFrom(p2);    // Mod to Lab coordinate system
            p2 *= TO_CM;                  // mm -> cm

	} else {
	    cerr<<"helpers::calcSegPointsLab() : Received NULL pointer for HMdcSeg!"<<endl;
	    return kFALSE;
	}

    } else {
	cerr<<"helpers::calcSegPointsLab() : Received NULL pointer for HMdcSizesCells!"<<endl;
	exit(1);
    }
    return kTRUE;
}

Bool_t HEDTransform::calcWirePointsLab (Int_t s,Int_t m,Int_t l,Int_t c,HGeomVector& p1,HGeomVector& p2)
{
    // calculates end points of a wire in Lab cordinates (in cm !)

    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();
    if(sizes){
	HMdcDetector* mdcDet = (HMdcDetector*) gHades->getSetup()->getDetector("Mdc");
	if(!mdcDet) { cerr<<"helpers::calcWirePointsLab() : No Mdc Detector defined!"<<endl;
	    exit(1);
	}

	if(!mdcDet->getModule(s,m) ){
	    cerr<<"helpers::calcWirePointsLab() : module in segment not defined in detector! Need Geometry!"<<endl;
	    exit(1);
	}

	HMdcSizesCellsMod* module = &((*sizes)[s][m]);
	if(!module){
	    cerr<<"helpers::calcWirePointsLab() : Received NULL pointer for HMdcSizesMod s = "<<s<<" m = "<<m<<"!"<<endl;
	    return kFALSE;
	}
	HMdcSizesCellsLayer& layer = (*sizes)[s][m][l];

	Int_t ncell = layer.getNCells();
	if (c >= ncell ) {
	    p1.setXYZ(0,0,0);
            p2.setXYZ(0,0,0);
            return kFALSE;
	}
        const HGeomVector& p3 = *(layer[c].getWirePoint(0));
	const HGeomVector& p4 = *(layer[c].getWirePoint(1));
	p1 = p3;
        p2 = p4;

	HGeomTransform trans;
	containers->getLabTransSec(trans,s,m);
	p1 = trans.transFrom(p1);    // Mod to Lab coordinate system
	p1 *= TO_CM;                    // mm -> cm
	p2 = trans.transFrom(p2);    // Mod to Lab coordinate system
	p2 *= TO_CM;                  // mm -> cm


    } else {
	cerr<<"helpers::calcWirePointsLab() : Received NULL pointer for HMdcSizesCells!"<<endl;
	exit(1);
    }
    return kTRUE;
}


Bool_t HEDTransform::calcSegKickPlanePointLab(HMdcSeg* seg,HGeomVector& p)
{
    // takes HMdcSeg object and calculates hit point on
    // kickplane in Lab cordinates (in cm !)
    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();
    if(sizes){
	if(seg){
	    Int_t sec = seg->getSec();
	    Int_t first = 0;
	    Double_t x1,y1,z1;
	    Double_t x2,y2,z2;
	    if(seg->getIOSeg() == 1 ) first = 2;

	    HMdcDetector* mdcDet = (HMdcDetector*) gHades->getSetup()->getDetector("Mdc");
	    if(!mdcDet) { cerr<<"helpers::calcSegKickPlanePointLab() : No Mdc Detector defined!"<<endl;
		exit(1);
	    }

	    if(!mdcDet->getModule(sec,first) || !mdcDet->getModule(sec,first+1) ){
		cerr<<"helpers::calcSegKickPlanePointLab() : At least one module in segment not defined in detector! Need Geometry!"<<endl;
		exit(1);
	    }

	    HMdcSizesCellsMod* module = &((*sizes)[sec][first]);
	    if(!module){
		cerr<<"helpers::calcSegKickPlanePointLab() : Received NULL pointer for HMdcSizesMod s = "<<sec<<" m = "<<first<<"!"<<endl;
		return kFALSE;
	    }
	    module->calcSegIntersec(seg->getZ(),seg->getR(),seg->getTheta(),seg->getPhi(),x1,y1,z1);

	    module = &((*sizes)[sec][first+1]);
	    if(!module){
		cerr<<"helpers::calcSegKickPlanePointLab() : Received NULL pointer for HMdcSizesMod s = "<<sec<<" m = "<<first+1<<"!"<<endl;
		return kFALSE;
	    }
	    module->calcSegIntersec(seg->getZ(),seg->getR(),seg->getTheta(),seg->getPhi(),x2,y2,z2);

            HMdcKickPlane plane;
	    Double_t x,y,z;
            plane.calcIntersection(x1,y1,z1,x2,y2,z2,x,y,z);

	    p.setXYZ(x,y,z);
	    HGeomTransform trans;
	    containers->getLabTransSec(trans,sec);
	    p = trans.transFrom(p);    // Mod to Lab coordinate system
            p *= TO_CM;               // mm -> cm

	} else {
	    cerr<<"helpers::calcSegKickPlanePointLab() : Received NULL pointer for HMdcSeg!"<<endl;
	    return kFALSE;
	}

    } else {
	cerr<<"helpers::calcSegKickPlanePointLab() : Received NULL pointer for HMdcSizesCells!"<<endl;
	exit(1);
    }
    return kTRUE;
}
Bool_t HEDTransform::calcWallHitPointLab(HWallHit* hit ,HGeomVector& p)
{
    // calc WALL hit point in LAB ccordinate sys (cm!)
    if(hit) {
	Float_t x,y,z;
	hit->getXYZLab(x,y,z);
	p.setXYZ(x,y,z);
	p *= TO_CM;
    } else {
	return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcTofHitPointLab(HTofHit* hit ,HGeomVector& p)
{
    // calc TOF hit point in LAB ccordinate sys (cm!)
    if(hit) {
	Float_t x,y,z;
	hit->getXYZLab(x,y,z);
	p.setXYZ(x,y,z);
	p *= TO_CM;
    } else {
	return kFALSE;
    }
    return kTRUE;
}


Bool_t HEDTransform::calcShowerHitPointLab(HShowerHit* hit ,HGeomVector& p)
{
    // calc SHOWER hit point in LAB ccordinate sys (cm!)
    if(hit) {
	Float_t x,y,z;
	hit->getLabXYZ(&x,&y,&z);
	p.setXYZ(x,y,z);
	p *= TO_CM;
    } else {
	return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcEmcClusterPointLab(HEmcCluster* hit ,HGeomVector& p)
{
    // calc EMC Cluster point in LAB ccordinate sys (cm!)
    if(hit) {
	Float_t x,y,z;
	hit->getXYZLab(x,y,z);
	p.setXYZ(x,y,z);
	p *= TO_CM;
    } else {
	return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcRpcClustPointLab(HRpcCluster* hit ,HGeomVector& p)
{
    // calc RPC cluster point in LAB ccordinate sys (cm!)
    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();

    if(sizes&&hit) {
        p.setXYZ(hit->getXSec(),hit->getYSec(),hit->getZSec());
	HGeomTransform trans;
	containers->getLabTransSec(trans,hit->getSector());

	p = trans.transFrom(p);  // Sec to Lab coordinate system
	p *= TO_CM;            // mm -> cm

    } else {
	return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcRichGeantPadplanePointLab(Int_t s,HGeomVector& p)
{
    // calc RICH geant point (on Pad plane) in LAB ccordinate sys (cm!)
    HRichGeometryPar* fRichGeometryPar = (HRichGeometryPar*) gHades->getRuntimeDb()->getContainer("RichGeometryParameters");
    if(fRichGeometryPar){

	p *= TO_CM;
        p.setY(p.getY() + fRichGeometryPar->getSectorShift() / cos(20*TMath::DegToRad()) );

	//--------------------------------------------------------------------
	// get transformation RICH padplane -> sector sys
	HGeomTransform& trans = *HEDTransform::getRichSecTrans();
	//--------------------------------------------------------------------

	//Lab system: all sectors in Lab
	HEDTransform::calcRichPadPlaneToLab(s,p,trans);

    } else {
	return kFALSE;
    }
    return kTRUE;
}


Bool_t HEDTransform::calcMdcGeantLayerPointLab (Int_t s,Int_t m,Int_t l,HGeomVector& p)
{
    // calculates points on MDC layer to Lab cordinates (in cm !)

    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();
    if(sizes){

	HMdcDetector* mdcDet = (HMdcDetector*) gHades->getSetup()->getDetector("Mdc");
	if(!mdcDet) { cerr<<"helpers::calcMdcGeantLayerPointLab() : No Mdc Detector defined!"<<endl;
	    exit(1);
	}

	if(!mdcDet->getModule(s,m) ){
	    cerr<<"helpers::calcMdcGeantLayerPointLab() : module in segment not defined in detector! Need Geometry!"<<endl;
	    exit(1);
	}

	HMdcSizesCellsMod* module = &((*sizes)[s][m]);
	if(!module){
	    cerr<<"helpers::calcLayerPointLab() : Received NULL pointer for HMdcSizesMod s = "<<s<<" m = "<<m<<"!"<<endl;
	    return kFALSE;
	}

	HGeomTransform trans;
	containers->getLabTransGeantLayer(trans,s,m,l);
	p = trans.transFrom(p);    // Layer to Lab coordinate system
	p *= TO_CM;                // mm -> cm

    } else {
	cerr<<"helpers::calcLayerPointLab() : Received NULL pointer for HMdcSizesCells!"<<endl;
	exit(1);
    }
    return kTRUE;
}


Bool_t HEDTransform::calcWallGeantPointLab(Int_t c,HGeomVector& p)
{
    // calc WALL geant point (Module system) in LAB ccordinate sys (cm!)

    HWallGeomPar* fWallGeometry=(HWallGeomPar *)(gHades->getRuntimeDb()->getContainer("WallGeomPar"));


    if(fWallGeometry) {

	HModGeomPar*    module   = fWallGeometry->getModule(0);
	HGeomTransform &trans    = module->getLabTransform();
	HGeomVolume*    rodVol   = module->getRefVolume()->getComponent(c);
	HGeomTransform &rodTrans = rodVol->getTransform();

	p = rodTrans.transFrom(p);  // transform to module coordinate system
	p = trans.transFrom(p);     // transform from module to LAB system

	p *= TO_CM;    // mm -> cm

    } else {
	return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcTofGeantPointLab(Int_t s,Int_t m,Int_t c,HGeomVector& p)
{
    // calc RPC geant point (Module system) in LAB ccordinate sys (cm!)

    HTofGeomPar* fTofGeometry=(HTofGeomPar *)(gHades->getRuntimeDb()->getContainer("TofGeomPar"));


    if(fTofGeometry) {

	HModGeomPar*    module   = fTofGeometry->getModule(s,m);
	HGeomTransform &trans    = module->getLabTransform();
	HGeomVolume*    rodVol   = module->getRefVolume()->getComponent(c);
	HGeomTransform &rodTrans = rodVol->getTransform();

	p = rodTrans.transFrom(p);  // transform to module coordinate system
	p = trans.transFrom(p);     // transform from module to LAB system

	p *= TO_CM;    // mm -> cm

    } else {
	return kFALSE;
    }
    return kTRUE;
}


Bool_t HEDTransform::calcShowerGeantPointLab(Int_t s,Int_t m,HGeomVector& p)
{
    // calc SHOWER geant point (Module system) in LAB ccordinate sys (cm!)

    HShowerGeometry* fShowerGeometry=(HShowerGeometry *)(gHades->getRuntimeDb()->getContainer("ShowerGeometry"));


    if(fShowerGeometry) {
	HLocation loc;
	loc.set(2,0,0);
	loc[0] = s;
        loc[1] = m;

	HGeomVector local  = p;
	HGeomVector2 lab   = p;
	fShowerGeometry->transVectToLab(loc,local,lab);
        p  = lab;
	p *= TO_CM;    // mm -> cm

    } else {
	return kFALSE;
    }
    return kTRUE;
}



Bool_t HEDTransform::calcRpcGeantPointLab(Int_t s,HGeomVector& p)
{
    // calc RPC geant point (Module system) in LAB ccordinate sys (cm!)
    HRpcGeomPar* pRpcGeometry   = (HRpcGeomPar*)(gHades->getRuntimeDb()->getContainer("RpcGeomPar"));
    if(pRpcGeometry) {

	//Lab system: all sectors in Lab
	HGeomTransform& TransRpc2Lab = pRpcGeometry->getModule(s,0)->getLabTransform();
	p = TransRpc2Lab.transFrom(p);
	p *= TO_CM;    // mm -> cm

    } else {
	return kFALSE;
    }
    return kTRUE;
}


Bool_t HEDTransform::calcVertexPoint(HGeomVector& p)
{
    // calc vertex point in LAB coordinate sys (cm!)
    if(gHades){
	HVertex& vertex=gHades->getCurrentEvent()->getHeader()->getVertex();
	p = vertex.getPos();
        if(p.getZ() == -1000.) p.setXYZ(0.,0.,0); // no vertex calulated !
	p *= TO_CM;            // mm -> cm
    } else {
     return kFALSE;
    }
    return kTRUE;
}

Bool_t HEDTransform::calcRichLinePointLab(HRichHit* hit,HGeomVector& p1,HGeomVector& p2,HParticleCand* cand){
    // calculates Line from event vertex to MDCI
    // with theta, phi from richhit. The points
    // of the line are in LAB coordiante sys (cm!)

    HMdcSizesCells* sizes         =  HMdcSizesCells::getExObject();
    HMdcGetContainers* containers =  HMdcGetContainers::getObject();
    if(sizes&&containers){
	if(hit){
	    HVertex& vertex = gHades->getCurrentEvent()->getHeader()->getVertex();
	    p1              = vertex.getPos();
	    if(p1.getZ() == -1000.) p1.setXYZ(0.,0.,0); // no vertex calulated !

	    Double_t theta =-1, phi =-1;

	    Int_t sec      = hit->getSector();
	    if(!cand){
		theta = hit->getTheta()*TMath::DegToRad();
		phi   = hit->getPhi();
	    } else {
		theta = cand->getTheta()*TMath::DegToRad();
		phi   = cand->getPhi();
	    }
	     if(sec < 5) {
                   phi -= (sec*60.);
	    } else {
                   phi +=60.;
	    }
	    phi *= TMath::DegToRad();

	    HMdcDetector* mdcDet = (HMdcDetector*) gHades->getSetup()->getDetector("Mdc");
	    if(!mdcDet) { cerr<<"helpers::calcRichLinePointLab() : No Mdc Detector defined!"<<endl;
		exit(1);
	    }

	    if(!mdcDet->getModule(sec,0) ){
		cerr<<"helpers::calcRichLinePointLab() : module in segment not defined in detector! Need Geometry!"<<endl;
		exit(1);
	    }

	    HGeomTransform transSec;
	    containers->getLabTransSec(transSec,sec);
            p1 = transSec.transTo(p1);    // Lab to sec coordinate system

	    p2.setX(p1.X() + cos(phi)*sin(theta));
	    p2.setY(p1.Y() + sin(phi)*sin(theta));
	    p2.setZ(p1.Z() + cos(theta));

	    Int_t first = 0;


	    HMdcSizesCellsMod* module = &((*sizes)[sec][first]);
	    if(!module){
		cerr<<"helpers::calcRichLinePointLab() : Received NULL pointer for HMdcSizesMod s = "<<sec<<" m = "<<first<<"!"<<endl;
		return kFALSE;
	    }
	    Double_t x,y,z;
	    module->calcIntersection(p1.X(),p1.Y(),p1.Z(),p2.X(),p2.Y(),p2.Z(),x,y,z);
	    p2.setXYZ(x,y,z);

	    HGeomTransform trans;
	    containers->getLabTransSec(trans,sec,first);

	    p2 = trans.transFrom(p2);   // Sec to Lab coordinate system
	    p2 *= TO_CM;              // mm -> cm
	    p1  = vertex.getPos();
	    if(p1.getZ() == -1000.) p1.setXYZ(0.,0.,0); // no vertex calulated !
	    p1 *= TO_CM;

	} else {
	    cerr<<"helpers::calcRichLinePointLab() : Received NULL pointer for HMdcSeg!"<<endl;
	    return kFALSE;
	}

    } else {
	cerr<<"helpers::calcRichLinePointLab() : Received NULL pointer for HMdcSizesCells!"<<endl;
	exit(1);
    }
    return kTRUE;

}

TEveFrameBox* HEDTransform::calcRichSectorFrame(Int_t sec,HGeomTransform& trans)
{
    // calc the RICH frame of sector sec in LAB coordinate sys (cm!)
    // transformation trans provides the theta rotation and offset to
    // go to sector system. Phi rotation by sector gives LAB sys.
    HRichGeometryPar* fRichGeometryPar = (HRichGeometryPar*) gHades->getRuntimeDb()->getContainer("RichGeometryParameters");
    if(fRichGeometryPar)
    {
	HRichFrame  &fFrame = *fRichGeometryPar->getFramePar();
        Float_t secphi = HEDTransform::calcPhiToLab(sec)*TMath::DegToRad();

	Float_t cosPhi = cos(secphi);
        Float_t sinPhi = sin(secphi);

	//--------------------------------------------------------------------
	HRichFrameCorner* frcorner;
	Float_t coordCorner[7*3];

	HGeomVector p;
 	for(Int_t i = 0; i < 7; i ++){
	    frcorner = fFrame.getCorner(i);
	    p.setXYZ( frcorner->getX(),frcorner->getY(),0);
	    p = trans.transFrom(p); // to sector sys
            // to LAB sys
	    coordCorner[i*3+0] =  p.X() * cosPhi + p.Y() * -sinPhi;
	    coordCorner[i*3+1] =  p.X() * sinPhi + p.Y() *  cosPhi;
	    coordCorner[i*3+2] =  p.Z();
	}
	//--------------------------------------------------------------------

	TEveFrameBox* box = new TEveFrameBox();
	box->SetQuadByPoints(coordCorner,7);
	box->SetFrameColor(kGray);
	return box;
    }
    return 0;
}

TEveFrameBox* HEDTransform::calcWallFrame()
{
    // calc the WALL frame in LAB coordinate sys (cm!)

    HWallGeomPar* fWallGeomPar = (HWallGeomPar*) gHades->getRuntimeDb()->getContainer("WallGeomPar");
    if(fWallGeomPar)
    {
	//--------------------------------------------------------------------
	HModGeomPar*    module   = fWallGeomPar->getModule(0);
	HGeomTransform &trans    = module->getLabTransform();

        HGeomVector p(-880,-880,0)  ; // lower right
        p = trans.transFrom(p);
        p *= TO_CM;    // mm -> cm

	TEveFrameBox* box = new TEveFrameBox();
	box->SetAAQuadXY(p.X(), p.Y(), p.Z(), 2*88., 2*88.);
	box->SetFrameColor(kGray);
	return box;
    }
    return 0;
}

Bool_t HEDTransform::calcWallCell(HWallHit* hit,Float_t* coord /* [12], xyz 4 corners*/)
{

    // calc 4 front corner points of a given WALL cell

    HWallGeomPar* fWallGeomPar = (HWallGeomPar*) gHades->getRuntimeDb()->getContainer("WallGeomPar");
    if(fWallGeomPar)
    {
	Int_t c = hit->getCell();

	HModGeomPar*    module   = fWallGeomPar->getModule(0);
	HGeomTransform &trans    = module->getLabTransform();
	HGeomVolume*    rodVol   = module->getRefVolume()->getComponent(c);
	HGeomTransform &rodTrans = rodVol->getTransform();

	for(Int_t i = 0; i < 4; i ++){
            HGeomVector p(*rodVol->getPoint(i));
	    p = rodTrans.transFrom(p);  // transform to module coordinate system
	    p = trans.transFrom(p);     // transform from module to LAB system
	    p *= TO_CM;    // mm -> cm

	    coord[i*3+0] =  p.X();
	    coord[i*3+1] =  p.Y();
	    coord[i*3+2] =  p.Z();
	}

	return kTRUE;
    }

    return kFALSE;
}

Bool_t HEDTransform::calcRichPadPlaneToLab(Int_t sec,HGeomVector& p, HGeomTransform& trans)
{
    // calc space coordinates of a RichPad in LAB coordinate sys
    // transformation trans provides the theta rotation and offset to
    // go to sector system. Phi rotation by sector gives LAB sys.

    HRichGeometryPar* fRichGeometryPar = (HRichGeometryPar*) gHades->getRuntimeDb()->getContainer("RichGeometryParameters");
    if(fRichGeometryPar)
    {
        Float_t secphi = HEDTransform::calcPhiToLab(sec)*TMath::DegToRad();
        Float_t cosPhi = cos(secphi);
        Float_t sinPhi = sin(secphi);

	//--------------------------------------------------------------------
	p = trans.transFrom(p); // to sector sys

	// to LAB sys
	p.setXYZ( p.X() * cosPhi + p.Y() * -sinPhi,
		  p.X() * sinPhi + p.Y() *  cosPhi,
		  p.Z());
	return kTRUE;
    }
    return kFALSE;
}

Bool_t HEDTransform::calcRichPadSector(HRichCal* cal, HGeomTransform& trans, Float_t* coord /* [12], xyz 4 corners*/)
{
    // calc space coordinates of a RichPad in LAB coordinate sys (!cm)
    // transformation trans provides the theta rotation and offset to
    // go to sector system. Phi rotation by sector gives LAB sys.


    HRichGeometryPar* fRichGeometryPar = (HRichGeometryPar*) gHades->getRuntimeDb()->getContainer("RichGeometryParameters");
    if(fRichGeometryPar)
    {
        Int_t sec = cal->getSector();
	HRichPadTab &fPads  = *fRichGeometryPar->getPadsPar();
        Float_t secphi = HEDTransform::calcPhiToLab(sec)*TMath::DegToRad();
        Float_t cosPhi = cos(secphi);
        Float_t sinPhi = sin(secphi);

	//--------------------------------------------------------------------
        HRichPad* pad = fPads.getPad((UInt_t)cal->getCol(),(UInt_t)cal->getRow());
	if(pad && pad->getCornersNr() == 4)
	{
            HGeomVector p;
	    HRichPadCorner*   padcorner;
	    for(Int_t i = 0; i < 4; i ++){
		padcorner       =  pad->getCorner(i);
		p.setXYZ(-padcorner->getX(),padcorner->getY(),0);
		p = trans.transFrom(p); // to sector sys

                // to LAB sys
		coord[i*3+0] =  p.X() * cosPhi + p.Y() * -sinPhi;
		coord[i*3+1] =  p.X() * sinPhi + p.Y() *  cosPhi;
		coord[i*3+2] =  p.Z();
	    }
	    return kTRUE;
	}
    }
    return kFALSE;
}

Bool_t HEDTransform::calcRichMirrorHit(const HGeomVector& p1, const HGeomVector& p2, HGeomVector& pout)
{
    // calculates hit point of a line (represented by p1,p2, LAB [cm])
    // with the RICH mirror. Result is returned in pout (LAB [cm])
    //
    // To calculate a line-sphere intersection  we need:
    //    * A ray with a known point of origin offset, and
    //      direction vector dir.
    //    * a sphere with a known centre at a point c and a
    //      known radius r
    // Given the above mentioned sphere, a point p lies on the surface
    // of the sphere if
    // (p-c)*(p-c) = r^2
    // Given a line with a point of origin offset, and a direction vector dir:
    // line(t) = offset + t*dir  t > 0
    // setting both equal
    // (offset + t*dir - c)*(offset + t*dir - c) = r^2
    // (dir*dir)*t^2 + 2*(offset-c)*dir*t + (offset-c)*(offset-c) - r^2 = 0
    //  == > At2 + Bt + C = 0
    // where
    //   A = dir*dir
    //   B = 2(offset-c)*dir
    //   C =  (offset-c)*(offset-c) - r^2
    // solve using quadratic formular
    // no positive real root mean no intersection
    //
    // Simplification:
    // If a sphere is centred at origin, a point p lies on a sphere
    // of radius r2 if
    // p * p = r^2
    // we can find the t at which the (transformed) line
    // (shifted by center vector c) intersects the sphere by
    // (offset1 + t*dir) * (offset1 + t*dir) = r^2
    // quadratic form :
    // At2 + Bt + C = 0
    // which now has coefficients:
    //    A = dir*dir
    //    B = 2(dir*offset1)
    //    C = offset1*offset1 - r^2
    //
    // There are two possible solutions to the quadratic equation:
    // t_0 = (-B -\sqrt(B^2 - 4AC)) / 2A
    // t_1 = (-B +\sqrt(B^2 - 4AC)) / 2A
    //
    // if the discriminant is negative, i.e. (B2 - 4AC) < 0,
    // line has missed the sphere.
    // To avoid poor numeric precision when B ~ \sqrt(B^2 - 4AC)
    // t0 and t1 can be rewritten:
    // t_0 = q/A
    // t_1 = C/q
    // where
    // q = (-B + \sqrt(B^2 - 4AC)) / 2       B < 0
    //     (-B - \sqrt(B^2 - 4AC)) / 2       otherwise.
    //
    // The calculated hit point has to shifted back finally


    HGeomVector center, centerReal;
    center    .setXYZ(0,0,0); // system of sphere
    centerReal.setXYZ(0,0,0);

    //--------------------------------------------------
    // get Mirror parameters
    if(richMirrorTrans){
	centerReal = richMirrorTrans->transFrom(center); // LAB
    } else {
	::Error("calcRichMirrorHit()","richMirrorTrans == 0!");
	return kFALSE;
    }
    Float_t r = 0;

    if(richMirror){
        r = richMirror->GetRmin(); // min radius of sphere
    } else {
	::Error("calcRichMirrorHit()","richMirror == 0!");
	return kFALSE;
    }
    //--------------------------------------------------



    //--------------------------------------------------
    // line equation
    // line (t) = offset + t*dir
    HGeomVector dir,offset;
    Float_t t;
    dir    = p1 - p2;
    offset = p1 - dir; // make sure we are behind the sphere
    offset = offset - centerReal; // now line in sphere system
    //--------------------------------------------------


    //Compute A, B and C coefficients
    Float_t a = dir.scalarProduct(dir);
    Float_t b = 2 * dir.scalarProduct(offset);
    Float_t c = offset.scalarProduct(offset) - (r * r);
    //Find discriminant
    Float_t disc = b * b - 4 * a * c;

    // if discriminant is negative there are no
    // real roots, so return false as line misses sphere
    if (disc < 0) {
	::Warning("calcRichMirrorHit()","disc<0!");
	return kFALSE;
    }

    // compute q as described above
    Float_t distSqrt = sqrt(disc);
    Float_t q;
    if (b < 0) { q = (-b - distSqrt)/2.0; }
    else       { q = (-b + distSqrt)/2.0; }

    // compute t0 and t1
    Float_t t0 = q / a;
    Float_t t1 = c / q;

    // make sure t0 is smaller than t1
    if (t0 > t1) {
        // if t0 is bigger than t1 swap them around
        Float_t temp = t0;
        t0 = t1;
        t1 = temp;
    }

    // if t1 is less than zero, the object is
    // in the line's negative direction and
    // consequently the line misses the sphere
    if (t1 < 0) {
        ::Warning("calcRichMirrorHit()","t1 < 0, missed the sphere!");
	return kFALSE; }

    // if t0 is less than zero, the intersection
    // point is at t1
    if (t0 < 0)  {
        t = t1;
    } else {
	// else the intersection point is at t0
	t = t0;
    }

    // calculate hit point on sphere
    dir *= t;
    pout  = offset + dir;
    pout += centerReal;  // sphere to LAB

    return kTRUE;
}

//----------------------------------------------------------------


//----------------------------------------------------------------
TEveTrack* HEDTransform::createParticle(Int_t pid,
					Double_t vx,Double_t vy,Double_t vz,
					Double_t px,Double_t py,Double_t pz,
					TEveTrackPropagator* prop)
{
    Int_t sign       = HPhysicsConstants::charge(pid);
    TEveRecTrack *rc = new TEveRecTrack();

    Double_t scaleX = 0.1;   // [mm->cm  ]
    Double_t scaleP = 0.001; // [MeV->GeV]
    rc->fV.Set(vx*scaleX,vy*scaleX,vz*scaleX);
    rc->fP.Set(px*scaleP,py*scaleP,pz*scaleP);
    rc->fSign = sign;

    TEveTrack* track = new TEveTrack(rc, prop);
    track->SetName(HPhysicsConstants::pid(pid) ? Form("ID %s", HPhysicsConstants::pid(pid)) : "unknown");

    TString title="";
    title +="-------------------------------\n";
    TString cname;
    if(HPhysicsConstants::pid(pid) && pid >= 0){ cname = HPhysicsConstants::pid(pid);}
    else                                       { cname = "unknown"; }


    title += Form(" %s (momentum %5.3f : (%5.3f %5.3f %5.3f) MeV/c, vertex : %5.3f %5.3f %5.3f mm )\n"
		  ,track->GetName()
		  ,px
		  ,py
		  ,pz
		  ,sqrt(px*px+py*py+pz*pz)
		  ,px
		  ,py
		  ,pz );
    track->SetTitle(title);
    return track;

}
//----------------------------------------------------------------

//----------------------------------------------------------------
TEveTrack* HEDTransform::createKineParticle(HGeantKine* kine,TEveTrackPropagator* prop)
{
    if(kine)
    {
	Float_t vx,vy,vz;
	Float_t px,py,pz;
	Int_t  id =  kine->getID();

	kine->getVertex(vx,vy,vz);
	kine->getMomentum(px,py,pz);

	Int_t sign       = HPhysicsConstants::charge(id);
	TEveRecTrack *rc = new TEveRecTrack();

	Double_t scaleX = 0.1;   // [mm->cm  ]
	Double_t scaleP = 0.001; // [MeV->GeV]
	rc->fV.Set(vx*scaleX,vy*scaleX,vz*scaleX);
	rc->fP.Set(px*scaleP,py*scaleP,pz*scaleP);
	rc->fSign = sign;

	TEveTrack* track = new TEveTrack(rc, prop);
	track->SetName(HPhysicsConstants::pid(id) ? Form("ID %s", HPhysicsConstants::pid(id)) : "unknown");
        Int_t hitInd = -1;


	//----------------------------------------------------------------
	hitInd = kine->getFirstMdcHit();

	if(hitInd >= 0)
	{
	    HCategory* catMdc = (HCategory*)gHades->getCurrentEvent()->getCategory(catMdcGeantRaw);
	    if(catMdc)
	    {
		HGeomVector p;
		HGeantMdc* mdc = 0;
		while ( (mdc = HCategoryManager::getObject(mdc,catMdc,hitInd)) ){

		    Int_t l  = mdc->getLayer();
		    hitInd   = mdc->getNextHitIndex();
		    if(l != 6) {
			Float_t x,y,tof,mom;
			mdc->getHit(x,y,tof,mom);
			p.setX(x);
			p.setY(y);
			p.setZ(0);

			if(HEDTransform::calcMdcGeantLayerPointLab(mdc->getSector(),mdc->getModule(),mdc->getLayer(),p))
			{
			    TEvePathMark* pm = new TEvePathMark(TEvePathMark::kDaughter);    // 5.22
			    pm->fV.Set(p.getX(),p.getY(),p.getZ());
			    pm->fTime = tof;
			    track->AddPathMark((TEvePathMark&)*pm);
			}
		    }
		}
	    }
	} // end loop over mdc
	//----------------------------------------------------------------

	//----------------------------------------------------------------
	hitInd = kine->getFirstRpcHit();
	if(hitInd >= 0)
	{

	    HCategory* catRpc = (HCategory*)gHades->getCurrentEvent()->getCategory(catRpcGeantRaw);

	    if(catRpc)
	    {
		Float_t geaTof    = 0.;
		Float_t geaX      = 0.;
		Float_t geaY      = 0.;
		Float_t geaZ      = 0.;
		HGeomVector p;

		HGeantRpc* rpc = 0;
		while ( (rpc = HCategoryManager::getObject(rpc,catRpc,hitInd)) ){

		    hitInd = rpc->getNextHitIndex();
		    if(rpc->getDetectorID() < 0) continue; //Hit in virtual volume EBOX
		    Int_t s = rpc->getSector();
                    rpc->getCellAverage(geaX, geaY, geaZ, geaTof); // [mm], [ns], [MeV] in module ref system
		    p.setXYZ(geaX, geaY, geaZ);

		    if(HEDTransform::calcRpcGeantPointLab(s,p)){

			TEvePathMark* pm = new TEvePathMark(TEvePathMark::kDaughter);    // 5.22
			pm->fV.Set(p.getX(),p.getY(),p.getZ());
			pm->fTime = geaTof;
			track->AddPathMark((TEvePathMark&)*pm);
		    }
		}
	    }
	}
	//----------------------------------------------------------------

	//----------------------------------------------------------------
	hitInd = kine->getFirstShowerHit();
	if(hitInd >= 0)
	{

	    HCategory* catShower = (HCategory*)gHades->getCurrentEvent()->getCategory(catShowerGeantRaw);

	    if(catShower)
	    {
		Float_t geaEner   = 0.;
		Float_t geaX      = 0.;
		Float_t geaY      = 0.;
		Float_t geaBeta   = 0.;
		HGeomVector p;

		HGeantShower* shower = 0;
		while ( (shower = HCategoryManager::getObject(shower,catShower,hitInd)) ){

		    hitInd = shower->getNextHitIndex();
		    Int_t s = shower->getSector();
                    Int_t m = shower->getModule();

                    shower->getHit(geaEner, geaX, geaY, geaBeta);

		    p.setXYZ(geaX, geaY,0.);

		    if(HEDTransform::calcShowerGeantPointLab(s,m,p)){

			TEvePathMark* pm = new TEvePathMark(TEvePathMark::kDaughter);    // 5.22
			pm->fV.Set(p.getX(),p.getY(),p.getZ());
			//pm->fTime = geaTof;   // does not exist
			track->AddPathMark((TEvePathMark&)*pm);
		    }
		}
	    }
	}
	//----------------------------------------------------------------

	//----------------------------------------------------------------
	hitInd = kine->getFirstTofHit();
	if(hitInd >= 0)
	{

	    HCategory* catTof = (HCategory*)gHades->getCurrentEvent()->getCategory(catTofGeantRaw);

	    if(catTof){
		HGeomVector p;
		Float_t geaTof  = 0.;
		Float_t geaEner = 0.;
		Float_t geaX    = 0.;
		Float_t geaY    = 0.;     // used by Tofino only
		Float_t geaMom  = 0.;
                Float_t trackLen= 0.;

		HGeantTof* tof = 0;
		while ( (tof = HCategoryManager::getObject(tof,catTof,hitInd)) )
		{
		    hitInd = tof->getNextHitIndex();

		    Int_t m = tof->getModule();
		    if (m > 21 || m < 14) continue;   // this is a Tofino, skip it!
		    m = 21 - m;                       // Tof modules in HGeant: (0->21) = (in->out)

		    Int_t s = tof->getSector();
		    Int_t c = tof->getCell();
		    c = 7 - c;                       // reverse also order of rods in Tof module

                    tof->getHit(geaEner,geaX,geaY,geaTof,geaMom,trackLen);


		    p.setXYZ(geaX, 0., 0.);

		    if(HEDTransform::calcTofGeantPointLab(s,m,c,p)){

			TEvePathMark* pm = new TEvePathMark(TEvePathMark::kDaughter);    // 5.22
			pm->fV.Set(p.getX(),p.getY(),p.getZ());
			pm->fTime = geaTof;
			track->AddPathMark((TEvePathMark&)*pm);
		    }
		}
	    }
	}
	//----------------------------------------------------------------


	//----------------------------------------------------------------
	hitInd = kine->getFirstWallHit();
	if(hitInd >= 0)
	{

	    HCategory* catWall = (HCategory*)gHades->getCurrentEvent()->getCategory(catWallGeantRaw);

	    if(catWall){
		HGeomVector p;
		Float_t geaTof  = 0.;
		Float_t geaEner = 0.;
		Float_t geaX    = 0.;
		Float_t geaY    = 0.;     // used by Tofino only
		Float_t geaMom  = 0.;
                Float_t trackLen= 0.;

		HGeantWall* wall = 0;
		while ( (wall = HCategoryManager::getObject(wall,catWall,hitInd)) )
		{
		    hitInd = wall->getNextHitIndex();

                    wall->getHit(geaEner,geaX,geaY,geaTof,geaMom,trackLen);


		    p.setXYZ(geaX,geaY, 0.);
                    Int_t c = wall->getCell();
		    if(HEDTransform::calcWallGeantPointLab(c,p)){

			TEvePathMark* pm = new TEvePathMark(TEvePathMark::kDaughter);    // 5.22
			pm->fV.Set(p.getX(),p.getY(),p.getZ());
			pm->fTime = geaTof;
			track->AddPathMark((TEvePathMark&)*pm);
		    }
		}
	    }
	}
	//----------------------------------------------------------------





	TString title="";
	title +="-------------------------------\n";
	TString cname;
	if(HPhysicsConstants::pid(id) && id >= 0){ cname = HPhysicsConstants::pid(id);}
	else                                     { cname = "unknown"; }


	title += Form(" tr = %i (%s , %5.3f MeV/c, parent %i grandparent %i)\n"
		      ,kine->getTrack()
		      ,cname.Data()
		      ,kine->getTotalMomentum()
		      ,kine->getParentTrack()
		      ,kine->getParentTrack() );
	track->SetTitle(title);
        return track;
    }

    return 0;

}
//----------------------------------------------------------------

//----------------------------------------------------------------
HEDMdcWireManager::HEDMdcWireManager()
{
    // Helpers class to collect statistics
    // about Mdc wires in the event.
    // Usage:
    //
    // HEDMdcWireManager manager;
    // manager.fill(); // for each event
    // manager.isUsedNtimes(sec,mod,lay,cell)
    // returns usage count of the wire
    // (-1 if nothing filled,
    //   0 for existing cal object
    //  >0 used by segment (after fit)
    // )
}
HEDMdcWireManager::~HEDMdcWireManager()
{
}

void HEDMdcWireManager::clear(){

    // clear the count table per wire
    for(Int_t s = 0; s < 6; s ++){
	for(Int_t m = 0; m < 4; m ++){
	    for(Int_t l = 0; l < 6; l ++){
		for(Int_t c = 0; c < 220; c ++){
		    wires[s][m][l][c] = -1;
		}
	    }
	}
    }

}
Int_t HEDMdcWireManager::fill(){

    // fill the count table per wire
    // Loops over cal1 and segment category
    // to get the list of all wires and
    // how often a wires has been used in
    // the event. Needs to be called one time
    // per event before one can use
    // isUsedNtimes(s,m,l,c)
    clear();
    Int_t n = fillAllWires();
    fillSegmentWires();
    return n;
}
Int_t HEDMdcWireManager::fillAllWires()
{
    // loop over Mdc Cal1 cat and make a list of all
    // wires in the current event. the initial count
    // of the wire is set to 0

    HCategory* mdcCal1Cat = (HCategory*) gHades->getCurrentEvent()->getCategory(catMdcCal1);
    Int_t nwires = 0;
    if(mdcCal1Cat){
	HMdcCal1* cal;
        Int_t s,m,l,c;
	Int_t size = mdcCal1Cat->getEntries();
	for(Int_t i = 0; i < size; i ++){
	    cal = HCategoryManager::getObject(cal,mdcCal1Cat,i);
	    if(cal){
		cal->getAddress(s,m,l,c);
		wires[s][m][l][c] ++;
                nwires ++;
	    }
	}
    }
    return nwires;
}

Int_t HEDMdcWireManager::fillSegmentWires()
{
    // loop over MdcSegment cat and count up
    // each wire which has been used in segments.
    // Non fitted wires are ignored.

    HCategory* mdcSegCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catMdcSeg);
    Int_t nwires = 0;
    if(mdcSegCat){
	HMdcSeg* seg;
        Int_t s,m=0,l,c,io,ncell;
	Int_t size = mdcSegCat->getEntries();
	for(Int_t i = 0; i < size; i ++){
	    seg = HCategoryManager::getObject(seg,mdcSegCat,i);
	    if(seg){
		s  = seg->getSec();
                io = seg->getIOSeg();
		for(Int_t lay = 0; lay < 12; lay ++)
		{
		    if(io == 0 ){ m = ( lay < 6 ) ? 0 : 1;}
		    if(io == 1 ){ m = ( lay < 6 ) ? 2 : 3;}

		    if(lay >= 6 ) l = lay - 6;
                    else          l = lay;

		    ncell = seg->getNCells(lay);

		    for(Int_t n = 0; n < ncell; n ++){
			c = seg->getCell(lay,n);
			wires[s][m][l][c] ++;
                        nwires ++;
		    }
		}
	    }
	}
    }
    return nwires;
}
Int_t HEDMdcWireManager::isUsedNtimes(Int_t s,Int_t m,Int_t l,Int_t c)
{
    // return how often a wire has been used
    // in the event (by segment)
    // fill() should be called before.
    // returns usage count of the wire
    // (-1 if nothing filled,
    //   0 for existing cal object
    //  >0 used by segment (after fit)
    // )
    return wires[s][m][l][c];
}
//----------------------------------------------------------------


//----------------------------------------------------------------
Bool_t HEDMakeContainers::init(void){

    HRuntimeDb* rtdb = gHades->getRuntimeDb();

    rtdb->getContainer("MdcTrackGFieldPar");
    rtdb->getContainer("MagnetPar");

    rtdb->getContainer("MdcRawStruct");
    rtdb->getContainer("MdcGeomStruct");
    rtdb->getContainer("MdcLookupRaw");
    rtdb->getContainer("MdcLookupGeom");
    rtdb->getContainer("MdcLayerCorrPar");
    rtdb->getContainer("MdcLayerGeomPar");
    rtdb->getContainer("MdcGeomPar");
    rtdb->getContainer("SpecGeomPar");
    if(HEDTransform::isNewRich()){
        rtdb->getContainer("Rich700DigiMapPar");
    } else {
	rtdb->getContainer("RichGeometryParameters");
    }
    rtdb->getContainer("RpcGeomPar");
    if(!HEDTransform::isEmc())rtdb->getContainer("ShowerGeometry");
    rtdb->getContainer("TofGeomPar");
    rtdb->getContainer("WallGeomPar");

    return kTRUE;
}
Bool_t HEDMakeContainers::reinit(void){

    HMdcSizesCells* fSizesCells = HMdcSizesCells::getObject();
    Bool_t retval = fSizesCells->initContainer();
    if(!retval) {
	Error("reinit()","EVENT DISPLAY : createHades() INIT OF HMdcSizesCells FAILED ! ###########");
	return kFALSE;
    }
    HMdcGetContainers::getObject();


    return kTRUE;
}
//----------------------------------------------------------------
 hedhelpers.cc:1
 hedhelpers.cc:2
 hedhelpers.cc:3
 hedhelpers.cc:4
 hedhelpers.cc:5
 hedhelpers.cc:6
 hedhelpers.cc:7
 hedhelpers.cc:8
 hedhelpers.cc:9
 hedhelpers.cc:10
 hedhelpers.cc:11
 hedhelpers.cc:12
 hedhelpers.cc:13
 hedhelpers.cc:14
 hedhelpers.cc:15
 hedhelpers.cc:16
 hedhelpers.cc:17
 hedhelpers.cc:18
 hedhelpers.cc:19
 hedhelpers.cc:20
 hedhelpers.cc:21
 hedhelpers.cc:22
 hedhelpers.cc:23
 hedhelpers.cc:24
 hedhelpers.cc:25
 hedhelpers.cc:26
 hedhelpers.cc:27
 hedhelpers.cc:28
 hedhelpers.cc:29
 hedhelpers.cc:30
 hedhelpers.cc:31
 hedhelpers.cc:32
 hedhelpers.cc:33
 hedhelpers.cc:34
 hedhelpers.cc:35
 hedhelpers.cc:36
 hedhelpers.cc:37
 hedhelpers.cc:38
 hedhelpers.cc:39
 hedhelpers.cc:40
 hedhelpers.cc:41
 hedhelpers.cc:42
 hedhelpers.cc:43
 hedhelpers.cc:44
 hedhelpers.cc:45
 hedhelpers.cc:46
 hedhelpers.cc:47
 hedhelpers.cc:48
 hedhelpers.cc:49
 hedhelpers.cc:50
 hedhelpers.cc:51
 hedhelpers.cc:52
 hedhelpers.cc:53
 hedhelpers.cc:54
 hedhelpers.cc:55
 hedhelpers.cc:56
 hedhelpers.cc:57
 hedhelpers.cc:58
 hedhelpers.cc:59
 hedhelpers.cc:60
 hedhelpers.cc:61
 hedhelpers.cc:62
 hedhelpers.cc:63
 hedhelpers.cc:64
 hedhelpers.cc:65
 hedhelpers.cc:66
 hedhelpers.cc:67
 hedhelpers.cc:68
 hedhelpers.cc:69
 hedhelpers.cc:70
 hedhelpers.cc:71
 hedhelpers.cc:72
 hedhelpers.cc:73
 hedhelpers.cc:74
 hedhelpers.cc:75
 hedhelpers.cc:76
 hedhelpers.cc:77
 hedhelpers.cc:78
 hedhelpers.cc:79
 hedhelpers.cc:80
 hedhelpers.cc:81
 hedhelpers.cc:82
 hedhelpers.cc:83
 hedhelpers.cc:84
 hedhelpers.cc:85
 hedhelpers.cc:86
 hedhelpers.cc:87
 hedhelpers.cc:88
 hedhelpers.cc:89
 hedhelpers.cc:90
 hedhelpers.cc:91
 hedhelpers.cc:92
 hedhelpers.cc:93
 hedhelpers.cc:94
 hedhelpers.cc:95
 hedhelpers.cc:96
 hedhelpers.cc:97
 hedhelpers.cc:98
 hedhelpers.cc:99
 hedhelpers.cc:100
 hedhelpers.cc:101
 hedhelpers.cc:102
 hedhelpers.cc:103
 hedhelpers.cc:104
 hedhelpers.cc:105
 hedhelpers.cc:106
 hedhelpers.cc:107
 hedhelpers.cc:108
 hedhelpers.cc:109
 hedhelpers.cc:110
 hedhelpers.cc:111
 hedhelpers.cc:112
 hedhelpers.cc:113
 hedhelpers.cc:114
 hedhelpers.cc:115
 hedhelpers.cc:116
 hedhelpers.cc:117
 hedhelpers.cc:118
 hedhelpers.cc:119
 hedhelpers.cc:120
 hedhelpers.cc:121
 hedhelpers.cc:122
 hedhelpers.cc:123
 hedhelpers.cc:124
 hedhelpers.cc:125
 hedhelpers.cc:126
 hedhelpers.cc:127
 hedhelpers.cc:128
 hedhelpers.cc:129
 hedhelpers.cc:130
 hedhelpers.cc:131
 hedhelpers.cc:132
 hedhelpers.cc:133
 hedhelpers.cc:134
 hedhelpers.cc:135
 hedhelpers.cc:136
 hedhelpers.cc:137
 hedhelpers.cc:138
 hedhelpers.cc:139
 hedhelpers.cc:140
 hedhelpers.cc:141
 hedhelpers.cc:142
 hedhelpers.cc:143
 hedhelpers.cc:144
 hedhelpers.cc:145
 hedhelpers.cc:146
 hedhelpers.cc:147
 hedhelpers.cc:148
 hedhelpers.cc:149
 hedhelpers.cc:150
 hedhelpers.cc:151
 hedhelpers.cc:152
 hedhelpers.cc:153
 hedhelpers.cc:154
 hedhelpers.cc:155
 hedhelpers.cc:156
 hedhelpers.cc:157
 hedhelpers.cc:158
 hedhelpers.cc:159
 hedhelpers.cc:160
 hedhelpers.cc:161
 hedhelpers.cc:162
 hedhelpers.cc:163
 hedhelpers.cc:164
 hedhelpers.cc:165
 hedhelpers.cc:166
 hedhelpers.cc:167
 hedhelpers.cc:168
 hedhelpers.cc:169
 hedhelpers.cc:170
 hedhelpers.cc:171
 hedhelpers.cc:172
 hedhelpers.cc:173
 hedhelpers.cc:174
 hedhelpers.cc:175
 hedhelpers.cc:176
 hedhelpers.cc:177
 hedhelpers.cc:178
 hedhelpers.cc:179
 hedhelpers.cc:180
 hedhelpers.cc:181
 hedhelpers.cc:182
 hedhelpers.cc:183
 hedhelpers.cc:184
 hedhelpers.cc:185
 hedhelpers.cc:186
 hedhelpers.cc:187
 hedhelpers.cc:188
 hedhelpers.cc:189
 hedhelpers.cc:190
 hedhelpers.cc:191
 hedhelpers.cc:192
 hedhelpers.cc:193
 hedhelpers.cc:194
 hedhelpers.cc:195
 hedhelpers.cc:196
 hedhelpers.cc:197
 hedhelpers.cc:198
 hedhelpers.cc:199
 hedhelpers.cc:200
 hedhelpers.cc:201
 hedhelpers.cc:202
 hedhelpers.cc:203
 hedhelpers.cc:204
 hedhelpers.cc:205
 hedhelpers.cc:206
 hedhelpers.cc:207
 hedhelpers.cc:208
 hedhelpers.cc:209
 hedhelpers.cc:210
 hedhelpers.cc:211
 hedhelpers.cc:212
 hedhelpers.cc:213
 hedhelpers.cc:214
 hedhelpers.cc:215
 hedhelpers.cc:216
 hedhelpers.cc:217
 hedhelpers.cc:218
 hedhelpers.cc:219
 hedhelpers.cc:220
 hedhelpers.cc:221
 hedhelpers.cc:222
 hedhelpers.cc:223
 hedhelpers.cc:224
 hedhelpers.cc:225
 hedhelpers.cc:226
 hedhelpers.cc:227
 hedhelpers.cc:228
 hedhelpers.cc:229
 hedhelpers.cc:230
 hedhelpers.cc:231
 hedhelpers.cc:232
 hedhelpers.cc:233
 hedhelpers.cc:234
 hedhelpers.cc:235
 hedhelpers.cc:236
 hedhelpers.cc:237
 hedhelpers.cc:238
 hedhelpers.cc:239
 hedhelpers.cc:240
 hedhelpers.cc:241
 hedhelpers.cc:242
 hedhelpers.cc:243
 hedhelpers.cc:244
 hedhelpers.cc:245
 hedhelpers.cc:246
 hedhelpers.cc:247
 hedhelpers.cc:248
 hedhelpers.cc:249
 hedhelpers.cc:250
 hedhelpers.cc:251
 hedhelpers.cc:252
 hedhelpers.cc:253
 hedhelpers.cc:254
 hedhelpers.cc:255
 hedhelpers.cc:256
 hedhelpers.cc:257
 hedhelpers.cc:258
 hedhelpers.cc:259
 hedhelpers.cc:260
 hedhelpers.cc:261
 hedhelpers.cc:262
 hedhelpers.cc:263
 hedhelpers.cc:264
 hedhelpers.cc:265
 hedhelpers.cc:266
 hedhelpers.cc:267
 hedhelpers.cc:268
 hedhelpers.cc:269
 hedhelpers.cc:270
 hedhelpers.cc:271
 hedhelpers.cc:272
 hedhelpers.cc:273
 hedhelpers.cc:274
 hedhelpers.cc:275
 hedhelpers.cc:276
 hedhelpers.cc:277
 hedhelpers.cc:278
 hedhelpers.cc:279
 hedhelpers.cc:280
 hedhelpers.cc:281
 hedhelpers.cc:282
 hedhelpers.cc:283
 hedhelpers.cc:284
 hedhelpers.cc:285
 hedhelpers.cc:286
 hedhelpers.cc:287
 hedhelpers.cc:288
 hedhelpers.cc:289
 hedhelpers.cc:290
 hedhelpers.cc:291
 hedhelpers.cc:292
 hedhelpers.cc:293
 hedhelpers.cc:294
 hedhelpers.cc:295
 hedhelpers.cc:296
 hedhelpers.cc:297
 hedhelpers.cc:298
 hedhelpers.cc:299
 hedhelpers.cc:300
 hedhelpers.cc:301
 hedhelpers.cc:302
 hedhelpers.cc:303
 hedhelpers.cc:304
 hedhelpers.cc:305
 hedhelpers.cc:306
 hedhelpers.cc:307
 hedhelpers.cc:308
 hedhelpers.cc:309
 hedhelpers.cc:310
 hedhelpers.cc:311
 hedhelpers.cc:312
 hedhelpers.cc:313
 hedhelpers.cc:314
 hedhelpers.cc:315
 hedhelpers.cc:316
 hedhelpers.cc:317
 hedhelpers.cc:318
 hedhelpers.cc:319
 hedhelpers.cc:320
 hedhelpers.cc:321
 hedhelpers.cc:322
 hedhelpers.cc:323
 hedhelpers.cc:324
 hedhelpers.cc:325
 hedhelpers.cc:326
 hedhelpers.cc:327
 hedhelpers.cc:328
 hedhelpers.cc:329
 hedhelpers.cc:330
 hedhelpers.cc:331
 hedhelpers.cc:332
 hedhelpers.cc:333
 hedhelpers.cc:334
 hedhelpers.cc:335
 hedhelpers.cc:336
 hedhelpers.cc:337
 hedhelpers.cc:338
 hedhelpers.cc:339
 hedhelpers.cc:340
 hedhelpers.cc:341
 hedhelpers.cc:342
 hedhelpers.cc:343
 hedhelpers.cc:344
 hedhelpers.cc:345
 hedhelpers.cc:346
 hedhelpers.cc:347
 hedhelpers.cc:348
 hedhelpers.cc:349
 hedhelpers.cc:350
 hedhelpers.cc:351
 hedhelpers.cc:352
 hedhelpers.cc:353
 hedhelpers.cc:354
 hedhelpers.cc:355
 hedhelpers.cc:356
 hedhelpers.cc:357
 hedhelpers.cc:358
 hedhelpers.cc:359
 hedhelpers.cc:360
 hedhelpers.cc:361
 hedhelpers.cc:362
 hedhelpers.cc:363
 hedhelpers.cc:364
 hedhelpers.cc:365
 hedhelpers.cc:366
 hedhelpers.cc:367
 hedhelpers.cc:368
 hedhelpers.cc:369
 hedhelpers.cc:370
 hedhelpers.cc:371
 hedhelpers.cc:372
 hedhelpers.cc:373
 hedhelpers.cc:374
 hedhelpers.cc:375
 hedhelpers.cc:376
 hedhelpers.cc:377
 hedhelpers.cc:378
 hedhelpers.cc:379
 hedhelpers.cc:380
 hedhelpers.cc:381
 hedhelpers.cc:382
 hedhelpers.cc:383
 hedhelpers.cc:384
 hedhelpers.cc:385
 hedhelpers.cc:386
 hedhelpers.cc:387
 hedhelpers.cc:388
 hedhelpers.cc:389
 hedhelpers.cc:390
 hedhelpers.cc:391
 hedhelpers.cc:392
 hedhelpers.cc:393
 hedhelpers.cc:394
 hedhelpers.cc:395
 hedhelpers.cc:396
 hedhelpers.cc:397
 hedhelpers.cc:398
 hedhelpers.cc:399
 hedhelpers.cc:400
 hedhelpers.cc:401
 hedhelpers.cc:402
 hedhelpers.cc:403
 hedhelpers.cc:404
 hedhelpers.cc:405
 hedhelpers.cc:406
 hedhelpers.cc:407
 hedhelpers.cc:408
 hedhelpers.cc:409
 hedhelpers.cc:410
 hedhelpers.cc:411
 hedhelpers.cc:412
 hedhelpers.cc:413
 hedhelpers.cc:414
 hedhelpers.cc:415
 hedhelpers.cc:416
 hedhelpers.cc:417
 hedhelpers.cc:418
 hedhelpers.cc:419
 hedhelpers.cc:420
 hedhelpers.cc:421
 hedhelpers.cc:422
 hedhelpers.cc:423
 hedhelpers.cc:424
 hedhelpers.cc:425
 hedhelpers.cc:426
 hedhelpers.cc:427
 hedhelpers.cc:428
 hedhelpers.cc:429
 hedhelpers.cc:430
 hedhelpers.cc:431
 hedhelpers.cc:432
 hedhelpers.cc:433
 hedhelpers.cc:434
 hedhelpers.cc:435
 hedhelpers.cc:436
 hedhelpers.cc:437
 hedhelpers.cc:438
 hedhelpers.cc:439
 hedhelpers.cc:440
 hedhelpers.cc:441
 hedhelpers.cc:442
 hedhelpers.cc:443
 hedhelpers.cc:444
 hedhelpers.cc:445
 hedhelpers.cc:446
 hedhelpers.cc:447
 hedhelpers.cc:448
 hedhelpers.cc:449
 hedhelpers.cc:450
 hedhelpers.cc:451
 hedhelpers.cc:452
 hedhelpers.cc:453
 hedhelpers.cc:454
 hedhelpers.cc:455
 hedhelpers.cc:456
 hedhelpers.cc:457
 hedhelpers.cc:458
 hedhelpers.cc:459
 hedhelpers.cc:460
 hedhelpers.cc:461
 hedhelpers.cc:462
 hedhelpers.cc:463
 hedhelpers.cc:464
 hedhelpers.cc:465
 hedhelpers.cc:466
 hedhelpers.cc:467
 hedhelpers.cc:468
 hedhelpers.cc:469
 hedhelpers.cc:470
 hedhelpers.cc:471
 hedhelpers.cc:472
 hedhelpers.cc:473
 hedhelpers.cc:474
 hedhelpers.cc:475
 hedhelpers.cc:476
 hedhelpers.cc:477
 hedhelpers.cc:478
 hedhelpers.cc:479
 hedhelpers.cc:480
 hedhelpers.cc:481
 hedhelpers.cc:482
 hedhelpers.cc:483
 hedhelpers.cc:484
 hedhelpers.cc:485
 hedhelpers.cc:486
 hedhelpers.cc:487
 hedhelpers.cc:488
 hedhelpers.cc:489
 hedhelpers.cc:490
 hedhelpers.cc:491
 hedhelpers.cc:492
 hedhelpers.cc:493
 hedhelpers.cc:494
 hedhelpers.cc:495
 hedhelpers.cc:496
 hedhelpers.cc:497
 hedhelpers.cc:498
 hedhelpers.cc:499
 hedhelpers.cc:500
 hedhelpers.cc:501
 hedhelpers.cc:502
 hedhelpers.cc:503
 hedhelpers.cc:504
 hedhelpers.cc:505
 hedhelpers.cc:506
 hedhelpers.cc:507
 hedhelpers.cc:508
 hedhelpers.cc:509
 hedhelpers.cc:510
 hedhelpers.cc:511
 hedhelpers.cc:512
 hedhelpers.cc:513
 hedhelpers.cc:514
 hedhelpers.cc:515
 hedhelpers.cc:516
 hedhelpers.cc:517
 hedhelpers.cc:518
 hedhelpers.cc:519
 hedhelpers.cc:520
 hedhelpers.cc:521
 hedhelpers.cc:522
 hedhelpers.cc:523
 hedhelpers.cc:524
 hedhelpers.cc:525
 hedhelpers.cc:526
 hedhelpers.cc:527
 hedhelpers.cc:528
 hedhelpers.cc:529
 hedhelpers.cc:530
 hedhelpers.cc:531
 hedhelpers.cc:532
 hedhelpers.cc:533
 hedhelpers.cc:534
 hedhelpers.cc:535
 hedhelpers.cc:536
 hedhelpers.cc:537
 hedhelpers.cc:538
 hedhelpers.cc:539
 hedhelpers.cc:540
 hedhelpers.cc:541
 hedhelpers.cc:542
 hedhelpers.cc:543
 hedhelpers.cc:544
 hedhelpers.cc:545
 hedhelpers.cc:546
 hedhelpers.cc:547
 hedhelpers.cc:548
 hedhelpers.cc:549
 hedhelpers.cc:550
 hedhelpers.cc:551
 hedhelpers.cc:552
 hedhelpers.cc:553
 hedhelpers.cc:554
 hedhelpers.cc:555
 hedhelpers.cc:556
 hedhelpers.cc:557
 hedhelpers.cc:558
 hedhelpers.cc:559
 hedhelpers.cc:560
 hedhelpers.cc:561
 hedhelpers.cc:562
 hedhelpers.cc:563
 hedhelpers.cc:564
 hedhelpers.cc:565
 hedhelpers.cc:566
 hedhelpers.cc:567
 hedhelpers.cc:568
 hedhelpers.cc:569
 hedhelpers.cc:570
 hedhelpers.cc:571
 hedhelpers.cc:572
 hedhelpers.cc:573
 hedhelpers.cc:574
 hedhelpers.cc:575
 hedhelpers.cc:576
 hedhelpers.cc:577
 hedhelpers.cc:578
 hedhelpers.cc:579
 hedhelpers.cc:580
 hedhelpers.cc:581
 hedhelpers.cc:582
 hedhelpers.cc:583
 hedhelpers.cc:584
 hedhelpers.cc:585
 hedhelpers.cc:586
 hedhelpers.cc:587
 hedhelpers.cc:588
 hedhelpers.cc:589
 hedhelpers.cc:590
 hedhelpers.cc:591
 hedhelpers.cc:592
 hedhelpers.cc:593
 hedhelpers.cc:594
 hedhelpers.cc:595
 hedhelpers.cc:596
 hedhelpers.cc:597
 hedhelpers.cc:598
 hedhelpers.cc:599
 hedhelpers.cc:600
 hedhelpers.cc:601
 hedhelpers.cc:602
 hedhelpers.cc:603
 hedhelpers.cc:604
 hedhelpers.cc:605
 hedhelpers.cc:606
 hedhelpers.cc:607
 hedhelpers.cc:608
 hedhelpers.cc:609
 hedhelpers.cc:610
 hedhelpers.cc:611
 hedhelpers.cc:612
 hedhelpers.cc:613
 hedhelpers.cc:614
 hedhelpers.cc:615
 hedhelpers.cc:616
 hedhelpers.cc:617
 hedhelpers.cc:618
 hedhelpers.cc:619
 hedhelpers.cc:620
 hedhelpers.cc:621
 hedhelpers.cc:622
 hedhelpers.cc:623
 hedhelpers.cc:624
 hedhelpers.cc:625
 hedhelpers.cc:626
 hedhelpers.cc:627
 hedhelpers.cc:628
 hedhelpers.cc:629
 hedhelpers.cc:630
 hedhelpers.cc:631
 hedhelpers.cc:632
 hedhelpers.cc:633
 hedhelpers.cc:634
 hedhelpers.cc:635
 hedhelpers.cc:636
 hedhelpers.cc:637
 hedhelpers.cc:638
 hedhelpers.cc:639
 hedhelpers.cc:640
 hedhelpers.cc:641
 hedhelpers.cc:642
 hedhelpers.cc:643
 hedhelpers.cc:644
 hedhelpers.cc:645
 hedhelpers.cc:646
 hedhelpers.cc:647
 hedhelpers.cc:648
 hedhelpers.cc:649
 hedhelpers.cc:650
 hedhelpers.cc:651
 hedhelpers.cc:652
 hedhelpers.cc:653
 hedhelpers.cc:654
 hedhelpers.cc:655
 hedhelpers.cc:656
 hedhelpers.cc:657
 hedhelpers.cc:658
 hedhelpers.cc:659
 hedhelpers.cc:660
 hedhelpers.cc:661
 hedhelpers.cc:662
 hedhelpers.cc:663
 hedhelpers.cc:664
 hedhelpers.cc:665
 hedhelpers.cc:666
 hedhelpers.cc:667
 hedhelpers.cc:668
 hedhelpers.cc:669
 hedhelpers.cc:670
 hedhelpers.cc:671
 hedhelpers.cc:672
 hedhelpers.cc:673
 hedhelpers.cc:674
 hedhelpers.cc:675
 hedhelpers.cc:676
 hedhelpers.cc:677
 hedhelpers.cc:678
 hedhelpers.cc:679
 hedhelpers.cc:680
 hedhelpers.cc:681
 hedhelpers.cc:682
 hedhelpers.cc:683
 hedhelpers.cc:684
 hedhelpers.cc:685
 hedhelpers.cc:686
 hedhelpers.cc:687
 hedhelpers.cc:688
 hedhelpers.cc:689
 hedhelpers.cc:690
 hedhelpers.cc:691
 hedhelpers.cc:692
 hedhelpers.cc:693
 hedhelpers.cc:694
 hedhelpers.cc:695
 hedhelpers.cc:696
 hedhelpers.cc:697
 hedhelpers.cc:698
 hedhelpers.cc:699
 hedhelpers.cc:700
 hedhelpers.cc:701
 hedhelpers.cc:702
 hedhelpers.cc:703
 hedhelpers.cc:704
 hedhelpers.cc:705
 hedhelpers.cc:706
 hedhelpers.cc:707
 hedhelpers.cc:708
 hedhelpers.cc:709
 hedhelpers.cc:710
 hedhelpers.cc:711
 hedhelpers.cc:712
 hedhelpers.cc:713
 hedhelpers.cc:714
 hedhelpers.cc:715
 hedhelpers.cc:716
 hedhelpers.cc:717
 hedhelpers.cc:718
 hedhelpers.cc:719
 hedhelpers.cc:720
 hedhelpers.cc:721
 hedhelpers.cc:722
 hedhelpers.cc:723
 hedhelpers.cc:724
 hedhelpers.cc:725
 hedhelpers.cc:726
 hedhelpers.cc:727
 hedhelpers.cc:728
 hedhelpers.cc:729
 hedhelpers.cc:730
 hedhelpers.cc:731
 hedhelpers.cc:732
 hedhelpers.cc:733
 hedhelpers.cc:734
 hedhelpers.cc:735
 hedhelpers.cc:736
 hedhelpers.cc:737
 hedhelpers.cc:738
 hedhelpers.cc:739
 hedhelpers.cc:740
 hedhelpers.cc:741
 hedhelpers.cc:742
 hedhelpers.cc:743
 hedhelpers.cc:744
 hedhelpers.cc:745
 hedhelpers.cc:746
 hedhelpers.cc:747
 hedhelpers.cc:748
 hedhelpers.cc:749
 hedhelpers.cc:750
 hedhelpers.cc:751
 hedhelpers.cc:752
 hedhelpers.cc:753
 hedhelpers.cc:754
 hedhelpers.cc:755
 hedhelpers.cc:756
 hedhelpers.cc:757
 hedhelpers.cc:758
 hedhelpers.cc:759
 hedhelpers.cc:760
 hedhelpers.cc:761
 hedhelpers.cc:762
 hedhelpers.cc:763
 hedhelpers.cc:764
 hedhelpers.cc:765
 hedhelpers.cc:766
 hedhelpers.cc:767
 hedhelpers.cc:768
 hedhelpers.cc:769
 hedhelpers.cc:770
 hedhelpers.cc:771
 hedhelpers.cc:772
 hedhelpers.cc:773
 hedhelpers.cc:774
 hedhelpers.cc:775
 hedhelpers.cc:776
 hedhelpers.cc:777
 hedhelpers.cc:778
 hedhelpers.cc:779
 hedhelpers.cc:780
 hedhelpers.cc:781
 hedhelpers.cc:782
 hedhelpers.cc:783
 hedhelpers.cc:784
 hedhelpers.cc:785
 hedhelpers.cc:786
 hedhelpers.cc:787
 hedhelpers.cc:788
 hedhelpers.cc:789
 hedhelpers.cc:790
 hedhelpers.cc:791
 hedhelpers.cc:792
 hedhelpers.cc:793
 hedhelpers.cc:794
 hedhelpers.cc:795
 hedhelpers.cc:796
 hedhelpers.cc:797
 hedhelpers.cc:798
 hedhelpers.cc:799
 hedhelpers.cc:800
 hedhelpers.cc:801
 hedhelpers.cc:802
 hedhelpers.cc:803
 hedhelpers.cc:804
 hedhelpers.cc:805
 hedhelpers.cc:806
 hedhelpers.cc:807
 hedhelpers.cc:808
 hedhelpers.cc:809
 hedhelpers.cc:810
 hedhelpers.cc:811
 hedhelpers.cc:812
 hedhelpers.cc:813
 hedhelpers.cc:814
 hedhelpers.cc:815
 hedhelpers.cc:816
 hedhelpers.cc:817
 hedhelpers.cc:818
 hedhelpers.cc:819
 hedhelpers.cc:820
 hedhelpers.cc:821
 hedhelpers.cc:822
 hedhelpers.cc:823
 hedhelpers.cc:824
 hedhelpers.cc:825
 hedhelpers.cc:826
 hedhelpers.cc:827
 hedhelpers.cc:828
 hedhelpers.cc:829
 hedhelpers.cc:830
 hedhelpers.cc:831
 hedhelpers.cc:832
 hedhelpers.cc:833
 hedhelpers.cc:834
 hedhelpers.cc:835
 hedhelpers.cc:836
 hedhelpers.cc:837
 hedhelpers.cc:838
 hedhelpers.cc:839
 hedhelpers.cc:840
 hedhelpers.cc:841
 hedhelpers.cc:842
 hedhelpers.cc:843
 hedhelpers.cc:844
 hedhelpers.cc:845
 hedhelpers.cc:846
 hedhelpers.cc:847
 hedhelpers.cc:848
 hedhelpers.cc:849
 hedhelpers.cc:850
 hedhelpers.cc:851
 hedhelpers.cc:852
 hedhelpers.cc:853
 hedhelpers.cc:854
 hedhelpers.cc:855
 hedhelpers.cc:856
 hedhelpers.cc:857
 hedhelpers.cc:858
 hedhelpers.cc:859
 hedhelpers.cc:860
 hedhelpers.cc:861
 hedhelpers.cc:862
 hedhelpers.cc:863
 hedhelpers.cc:864
 hedhelpers.cc:865
 hedhelpers.cc:866
 hedhelpers.cc:867
 hedhelpers.cc:868
 hedhelpers.cc:869
 hedhelpers.cc:870
 hedhelpers.cc:871
 hedhelpers.cc:872
 hedhelpers.cc:873
 hedhelpers.cc:874
 hedhelpers.cc:875
 hedhelpers.cc:876
 hedhelpers.cc:877
 hedhelpers.cc:878
 hedhelpers.cc:879
 hedhelpers.cc:880
 hedhelpers.cc:881
 hedhelpers.cc:882
 hedhelpers.cc:883
 hedhelpers.cc:884
 hedhelpers.cc:885
 hedhelpers.cc:886
 hedhelpers.cc:887
 hedhelpers.cc:888
 hedhelpers.cc:889
 hedhelpers.cc:890
 hedhelpers.cc:891
 hedhelpers.cc:892
 hedhelpers.cc:893
 hedhelpers.cc:894
 hedhelpers.cc:895
 hedhelpers.cc:896
 hedhelpers.cc:897
 hedhelpers.cc:898
 hedhelpers.cc:899
 hedhelpers.cc:900
 hedhelpers.cc:901
 hedhelpers.cc:902
 hedhelpers.cc:903
 hedhelpers.cc:904
 hedhelpers.cc:905
 hedhelpers.cc:906
 hedhelpers.cc:907
 hedhelpers.cc:908
 hedhelpers.cc:909
 hedhelpers.cc:910
 hedhelpers.cc:911
 hedhelpers.cc:912
 hedhelpers.cc:913
 hedhelpers.cc:914
 hedhelpers.cc:915
 hedhelpers.cc:916
 hedhelpers.cc:917
 hedhelpers.cc:918
 hedhelpers.cc:919
 hedhelpers.cc:920
 hedhelpers.cc:921
 hedhelpers.cc:922
 hedhelpers.cc:923
 hedhelpers.cc:924
 hedhelpers.cc:925
 hedhelpers.cc:926
 hedhelpers.cc:927
 hedhelpers.cc:928
 hedhelpers.cc:929
 hedhelpers.cc:930
 hedhelpers.cc:931
 hedhelpers.cc:932
 hedhelpers.cc:933
 hedhelpers.cc:934
 hedhelpers.cc:935
 hedhelpers.cc:936
 hedhelpers.cc:937
 hedhelpers.cc:938
 hedhelpers.cc:939
 hedhelpers.cc:940
 hedhelpers.cc:941
 hedhelpers.cc:942
 hedhelpers.cc:943
 hedhelpers.cc:944
 hedhelpers.cc:945
 hedhelpers.cc:946
 hedhelpers.cc:947
 hedhelpers.cc:948
 hedhelpers.cc:949
 hedhelpers.cc:950
 hedhelpers.cc:951
 hedhelpers.cc:952
 hedhelpers.cc:953
 hedhelpers.cc:954
 hedhelpers.cc:955
 hedhelpers.cc:956
 hedhelpers.cc:957
 hedhelpers.cc:958
 hedhelpers.cc:959
 hedhelpers.cc:960
 hedhelpers.cc:961
 hedhelpers.cc:962
 hedhelpers.cc:963
 hedhelpers.cc:964
 hedhelpers.cc:965
 hedhelpers.cc:966
 hedhelpers.cc:967
 hedhelpers.cc:968
 hedhelpers.cc:969
 hedhelpers.cc:970
 hedhelpers.cc:971
 hedhelpers.cc:972
 hedhelpers.cc:973
 hedhelpers.cc:974
 hedhelpers.cc:975
 hedhelpers.cc:976
 hedhelpers.cc:977
 hedhelpers.cc:978
 hedhelpers.cc:979
 hedhelpers.cc:980
 hedhelpers.cc:981
 hedhelpers.cc:982
 hedhelpers.cc:983
 hedhelpers.cc:984
 hedhelpers.cc:985
 hedhelpers.cc:986
 hedhelpers.cc:987
 hedhelpers.cc:988
 hedhelpers.cc:989
 hedhelpers.cc:990
 hedhelpers.cc:991
 hedhelpers.cc:992
 hedhelpers.cc:993
 hedhelpers.cc:994
 hedhelpers.cc:995
 hedhelpers.cc:996
 hedhelpers.cc:997
 hedhelpers.cc:998
 hedhelpers.cc:999
 hedhelpers.cc:1000
 hedhelpers.cc:1001
 hedhelpers.cc:1002
 hedhelpers.cc:1003
 hedhelpers.cc:1004
 hedhelpers.cc:1005
 hedhelpers.cc:1006
 hedhelpers.cc:1007
 hedhelpers.cc:1008
 hedhelpers.cc:1009
 hedhelpers.cc:1010
 hedhelpers.cc:1011
 hedhelpers.cc:1012
 hedhelpers.cc:1013
 hedhelpers.cc:1014
 hedhelpers.cc:1015
 hedhelpers.cc:1016
 hedhelpers.cc:1017
 hedhelpers.cc:1018
 hedhelpers.cc:1019
 hedhelpers.cc:1020
 hedhelpers.cc:1021
 hedhelpers.cc:1022
 hedhelpers.cc:1023
 hedhelpers.cc:1024
 hedhelpers.cc:1025
 hedhelpers.cc:1026
 hedhelpers.cc:1027
 hedhelpers.cc:1028
 hedhelpers.cc:1029
 hedhelpers.cc:1030
 hedhelpers.cc:1031
 hedhelpers.cc:1032
 hedhelpers.cc:1033
 hedhelpers.cc:1034
 hedhelpers.cc:1035
 hedhelpers.cc:1036
 hedhelpers.cc:1037
 hedhelpers.cc:1038
 hedhelpers.cc:1039
 hedhelpers.cc:1040
 hedhelpers.cc:1041
 hedhelpers.cc:1042
 hedhelpers.cc:1043
 hedhelpers.cc:1044
 hedhelpers.cc:1045
 hedhelpers.cc:1046
 hedhelpers.cc:1047
 hedhelpers.cc:1048
 hedhelpers.cc:1049
 hedhelpers.cc:1050
 hedhelpers.cc:1051
 hedhelpers.cc:1052
 hedhelpers.cc:1053
 hedhelpers.cc:1054
 hedhelpers.cc:1055
 hedhelpers.cc:1056
 hedhelpers.cc:1057
 hedhelpers.cc:1058
 hedhelpers.cc:1059
 hedhelpers.cc:1060
 hedhelpers.cc:1061
 hedhelpers.cc:1062
 hedhelpers.cc:1063
 hedhelpers.cc:1064
 hedhelpers.cc:1065
 hedhelpers.cc:1066
 hedhelpers.cc:1067
 hedhelpers.cc:1068
 hedhelpers.cc:1069
 hedhelpers.cc:1070
 hedhelpers.cc:1071
 hedhelpers.cc:1072
 hedhelpers.cc:1073
 hedhelpers.cc:1074
 hedhelpers.cc:1075
 hedhelpers.cc:1076
 hedhelpers.cc:1077
 hedhelpers.cc:1078
 hedhelpers.cc:1079
 hedhelpers.cc:1080
 hedhelpers.cc:1081
 hedhelpers.cc:1082
 hedhelpers.cc:1083
 hedhelpers.cc:1084
 hedhelpers.cc:1085
 hedhelpers.cc:1086
 hedhelpers.cc:1087
 hedhelpers.cc:1088
 hedhelpers.cc:1089
 hedhelpers.cc:1090
 hedhelpers.cc:1091
 hedhelpers.cc:1092
 hedhelpers.cc:1093
 hedhelpers.cc:1094
 hedhelpers.cc:1095
 hedhelpers.cc:1096
 hedhelpers.cc:1097
 hedhelpers.cc:1098
 hedhelpers.cc:1099
 hedhelpers.cc:1100
 hedhelpers.cc:1101
 hedhelpers.cc:1102
 hedhelpers.cc:1103
 hedhelpers.cc:1104
 hedhelpers.cc:1105
 hedhelpers.cc:1106
 hedhelpers.cc:1107
 hedhelpers.cc:1108
 hedhelpers.cc:1109
 hedhelpers.cc:1110
 hedhelpers.cc:1111
 hedhelpers.cc:1112
 hedhelpers.cc:1113
 hedhelpers.cc:1114
 hedhelpers.cc:1115
 hedhelpers.cc:1116
 hedhelpers.cc:1117
 hedhelpers.cc:1118
 hedhelpers.cc:1119
 hedhelpers.cc:1120
 hedhelpers.cc:1121
 hedhelpers.cc:1122
 hedhelpers.cc:1123
 hedhelpers.cc:1124
 hedhelpers.cc:1125
 hedhelpers.cc:1126
 hedhelpers.cc:1127
 hedhelpers.cc:1128
 hedhelpers.cc:1129
 hedhelpers.cc:1130
 hedhelpers.cc:1131
 hedhelpers.cc:1132
 hedhelpers.cc:1133
 hedhelpers.cc:1134
 hedhelpers.cc:1135
 hedhelpers.cc:1136
 hedhelpers.cc:1137
 hedhelpers.cc:1138
 hedhelpers.cc:1139
 hedhelpers.cc:1140
 hedhelpers.cc:1141
 hedhelpers.cc:1142
 hedhelpers.cc:1143
 hedhelpers.cc:1144
 hedhelpers.cc:1145
 hedhelpers.cc:1146
 hedhelpers.cc:1147
 hedhelpers.cc:1148
 hedhelpers.cc:1149
 hedhelpers.cc:1150
 hedhelpers.cc:1151
 hedhelpers.cc:1152
 hedhelpers.cc:1153
 hedhelpers.cc:1154
 hedhelpers.cc:1155
 hedhelpers.cc:1156
 hedhelpers.cc:1157
 hedhelpers.cc:1158
 hedhelpers.cc:1159
 hedhelpers.cc:1160
 hedhelpers.cc:1161
 hedhelpers.cc:1162
 hedhelpers.cc:1163
 hedhelpers.cc:1164
 hedhelpers.cc:1165
 hedhelpers.cc:1166
 hedhelpers.cc:1167
 hedhelpers.cc:1168
 hedhelpers.cc:1169
 hedhelpers.cc:1170
 hedhelpers.cc:1171
 hedhelpers.cc:1172
 hedhelpers.cc:1173
 hedhelpers.cc:1174
 hedhelpers.cc:1175
 hedhelpers.cc:1176
 hedhelpers.cc:1177
 hedhelpers.cc:1178
 hedhelpers.cc:1179
 hedhelpers.cc:1180
 hedhelpers.cc:1181
 hedhelpers.cc:1182
 hedhelpers.cc:1183
 hedhelpers.cc:1184
 hedhelpers.cc:1185
 hedhelpers.cc:1186
 hedhelpers.cc:1187
 hedhelpers.cc:1188
 hedhelpers.cc:1189
 hedhelpers.cc:1190
 hedhelpers.cc:1191
 hedhelpers.cc:1192
 hedhelpers.cc:1193
 hedhelpers.cc:1194
 hedhelpers.cc:1195
 hedhelpers.cc:1196
 hedhelpers.cc:1197
 hedhelpers.cc:1198
 hedhelpers.cc:1199
 hedhelpers.cc:1200
 hedhelpers.cc:1201
 hedhelpers.cc:1202
 hedhelpers.cc:1203
 hedhelpers.cc:1204
 hedhelpers.cc:1205
 hedhelpers.cc:1206
 hedhelpers.cc:1207
 hedhelpers.cc:1208
 hedhelpers.cc:1209
 hedhelpers.cc:1210
 hedhelpers.cc:1211
 hedhelpers.cc:1212
 hedhelpers.cc:1213
 hedhelpers.cc:1214
 hedhelpers.cc:1215
 hedhelpers.cc:1216
 hedhelpers.cc:1217
 hedhelpers.cc:1218
 hedhelpers.cc:1219
 hedhelpers.cc:1220
 hedhelpers.cc:1221
 hedhelpers.cc:1222
 hedhelpers.cc:1223
 hedhelpers.cc:1224
 hedhelpers.cc:1225
 hedhelpers.cc:1226
 hedhelpers.cc:1227
 hedhelpers.cc:1228
 hedhelpers.cc:1229
 hedhelpers.cc:1230
 hedhelpers.cc:1231
 hedhelpers.cc:1232
 hedhelpers.cc:1233
 hedhelpers.cc:1234
 hedhelpers.cc:1235
 hedhelpers.cc:1236
 hedhelpers.cc:1237
 hedhelpers.cc:1238
 hedhelpers.cc:1239
 hedhelpers.cc:1240
 hedhelpers.cc:1241
 hedhelpers.cc:1242
 hedhelpers.cc:1243
 hedhelpers.cc:1244
 hedhelpers.cc:1245
 hedhelpers.cc:1246
 hedhelpers.cc:1247
 hedhelpers.cc:1248
 hedhelpers.cc:1249
 hedhelpers.cc:1250
 hedhelpers.cc:1251
 hedhelpers.cc:1252
 hedhelpers.cc:1253
 hedhelpers.cc:1254
 hedhelpers.cc:1255
 hedhelpers.cc:1256
 hedhelpers.cc:1257
 hedhelpers.cc:1258
 hedhelpers.cc:1259
 hedhelpers.cc:1260
 hedhelpers.cc:1261
 hedhelpers.cc:1262
 hedhelpers.cc:1263
 hedhelpers.cc:1264
 hedhelpers.cc:1265
 hedhelpers.cc:1266
 hedhelpers.cc:1267
 hedhelpers.cc:1268
 hedhelpers.cc:1269
 hedhelpers.cc:1270
 hedhelpers.cc:1271
 hedhelpers.cc:1272
 hedhelpers.cc:1273
 hedhelpers.cc:1274
 hedhelpers.cc:1275
 hedhelpers.cc:1276
 hedhelpers.cc:1277
 hedhelpers.cc:1278
 hedhelpers.cc:1279
 hedhelpers.cc:1280
 hedhelpers.cc:1281
 hedhelpers.cc:1282
 hedhelpers.cc:1283
 hedhelpers.cc:1284
 hedhelpers.cc:1285
 hedhelpers.cc:1286
 hedhelpers.cc:1287
 hedhelpers.cc:1288
 hedhelpers.cc:1289
 hedhelpers.cc:1290
 hedhelpers.cc:1291
 hedhelpers.cc:1292
 hedhelpers.cc:1293
 hedhelpers.cc:1294
 hedhelpers.cc:1295
 hedhelpers.cc:1296
 hedhelpers.cc:1297
 hedhelpers.cc:1298
 hedhelpers.cc:1299
 hedhelpers.cc:1300
 hedhelpers.cc:1301
 hedhelpers.cc:1302
 hedhelpers.cc:1303
 hedhelpers.cc:1304
 hedhelpers.cc:1305
 hedhelpers.cc:1306
 hedhelpers.cc:1307
 hedhelpers.cc:1308
 hedhelpers.cc:1309
 hedhelpers.cc:1310
 hedhelpers.cc:1311
 hedhelpers.cc:1312
 hedhelpers.cc:1313
 hedhelpers.cc:1314
 hedhelpers.cc:1315
 hedhelpers.cc:1316
 hedhelpers.cc:1317
 hedhelpers.cc:1318
 hedhelpers.cc:1319
 hedhelpers.cc:1320
 hedhelpers.cc:1321
 hedhelpers.cc:1322
 hedhelpers.cc:1323
 hedhelpers.cc:1324
 hedhelpers.cc:1325
 hedhelpers.cc:1326
 hedhelpers.cc:1327
 hedhelpers.cc:1328
 hedhelpers.cc:1329
 hedhelpers.cc:1330
 hedhelpers.cc:1331
 hedhelpers.cc:1332
 hedhelpers.cc:1333
 hedhelpers.cc:1334
 hedhelpers.cc:1335
 hedhelpers.cc:1336
 hedhelpers.cc:1337
 hedhelpers.cc:1338
 hedhelpers.cc:1339
 hedhelpers.cc:1340
 hedhelpers.cc:1341
 hedhelpers.cc:1342
 hedhelpers.cc:1343
 hedhelpers.cc:1344
 hedhelpers.cc:1345
 hedhelpers.cc:1346
 hedhelpers.cc:1347
 hedhelpers.cc:1348
 hedhelpers.cc:1349
 hedhelpers.cc:1350
 hedhelpers.cc:1351
 hedhelpers.cc:1352
 hedhelpers.cc:1353
 hedhelpers.cc:1354
 hedhelpers.cc:1355
 hedhelpers.cc:1356
 hedhelpers.cc:1357
 hedhelpers.cc:1358
 hedhelpers.cc:1359
 hedhelpers.cc:1360
 hedhelpers.cc:1361
 hedhelpers.cc:1362
 hedhelpers.cc:1363
 hedhelpers.cc:1364
 hedhelpers.cc:1365
 hedhelpers.cc:1366
 hedhelpers.cc:1367
 hedhelpers.cc:1368
 hedhelpers.cc:1369
 hedhelpers.cc:1370
 hedhelpers.cc:1371
 hedhelpers.cc:1372
 hedhelpers.cc:1373
 hedhelpers.cc:1374
 hedhelpers.cc:1375
 hedhelpers.cc:1376
 hedhelpers.cc:1377
 hedhelpers.cc:1378
 hedhelpers.cc:1379
 hedhelpers.cc:1380
 hedhelpers.cc:1381
 hedhelpers.cc:1382
 hedhelpers.cc:1383
 hedhelpers.cc:1384
 hedhelpers.cc:1385
 hedhelpers.cc:1386