ROOT logo
#include "hparticletree.h"
#include "hades.h"
#include "hdatasource.h"
#include "hrecevent.h"
#include "hpartialevent.h"
#include "hcategory.h"
#include "hlinearcategory.h"
#include "hmatrixcategory.h"
#include "hcategorymanager.h"
#include "hparticletool.h"
#include "hsrckeeper.h"
#include "hgeantmedia.h"
#include "hmdclayer.h"

//-----------------------
#include "haddef.h"
#include "hstartdef.h"
#include "richdef.h"
#include "hmdcdef.h"
#include "hmdctrackddef.h"
#include "hmdctrackgdef.h"
#include "rpcdef.h"
#include "tofdef.h"
#include "emcdef.h"
#include "showerdef.h"
#include "walldef.h"
#include "hpiontrackerdef.h"
#include "hgeantdef.h"


//-----------------------
#include "hparticlecand.h"
#include "hparticlecandsim.h"
#include "hparticleevtinfo.h"
#include "hparticlemdc.h"
#include "hmetamatch2.h"

#include "hstart2hit.h"
#include "hstart2cal.h"
#include "htboxchan.h"
#include "hrichhit.h"
#include "hrichhitsim.h"
#include "hrichdirclus.h"
#include "hrichcal.h"
#include "hrichcalsim.h"
#include "htofhit.h"
#include "htofhitsim.h"
#include "htofcluster.h"
#include "htofclustersim.h"
#include "hrpccluster.h"
#include "hrpcclustersim.h"
#include "hshowerhit.h"
#include "hshowerhitsim.h"
#include "hemccluster.h"
#include "hemcclustersim.h"
#include "hemccal.h"
#include "hwallhit.h"
#include "hwallhitsim.h"
#include "hwalleventplane.h"

#include "hpiontrackertrack.h"
#include "hpiontrackerhit.h"
#include "hpiontrackercal.h"
#include "hpiontrackerraw.h"

#include "hmdctrkcand.h"
#include "hmdcseg.h"
#include "hmdcsegsim.h"
#include "hmdchit.h"
#include "hmdchitsim.h"
#include "hmdcclus.h"
#include "hmdcclussim.h"
#include "hmdcclusinf.h"
#include "hmdcclusinfsim.h"
#include "hmdcclusfit.h"
#include "hmdcclusfitsim.h"
#include "hmdcwirefit.h"
#include "hmdcwirefitsim.h"
#include "hmdccal1.h"
#include "hmdccal1sim.h"

#include "hgeantkine.h"
#include "hgeantrich.h"
#include "hgeantmdc.h"
#include "hgeanttof.h"
#include "hgeantrpc.h"
#include "hgeantshower.h"
#include "hgeantwall.h"
#include "hgeantstart.h"
#include "hgeantemc.h"

//-----------------------
#include "TBranch.h"
#include "TSystem.h"
#include "TObjArray.h"

//-----------------------
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;

// ROOT's IO and RTTI stuff is added here
ClassImp(HParticleTree)

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////////
//
//
// HParticleTree
//
// Reconstructor to create an filtered root output.
// The output is generated independend for each HParticleTree
// reconstructor and das not affect Hades. The purpose
// is to create different output files with different event
// structure in parallel and allow to reduce the data volume
// for special analysis tasks (for example rare dilepton decays
// in Au+Au collisions).
// The filtering starts from HParticleCand. Only objects
// which are flagged kIsUsed are copied to the output.
// The user can specify selectLeptons() and selectHadrons()
// functions. By default the functions of HParticleTracksorter
// are used (for the documentation of the selection functions see
// HParticleTrackSorter). In addition the user can specify a selectEvent()
// function function which allows to check the full event.
//
// The program works the following way:
//
// I.    The original flags of the HParticleCand objects and HParticleSorter
//       are backupted. This alows to run the task without affecting other tasks.
// II.   In the input HParticleCand objects are flagged using the user specified
//       selection functions or default functions.
// III.  If the user provides a Bool_t selectEvent(TObjArray*) function the
//       properties of the full event can be evaluated. If the function returns
//       kFALSE an empty event ist stored to preserve the 1 to 1 correlation
//       with the dst file.
//       With setSkipEmptyEvents (kTRUE) skipping of not selected events can be forced
// III.  From HParticleCand objects which are flagged kIsUsed the selection
//       procedure starts. Only flagged objects are considered and the detector
//       hits belonging to the candidates are stored in the output too if enabled.
//       With setSkipTracks(kFALSE) all tracks will forced to the output.
//       HParticleEvtInfo, HStart2Cal, HStartHit and HWallHit are fully copied
//       if enabled (see list below).
//       Alternatively (not at the same time!) to using flagged candidates as
//       selection the user can provide a function to select the kept particles by
//       setUserkeepTrack(Bool_t (*function)(HParticleCand* )). The function
//       has to return kTRUE for selected candidates.
//       All indices are resorted. The new event will look like the old one,
//       but containing only "good" candidates. The full features of the analysis
//       of the DSTs are preserved.
//
//       SUPPORTED CATEGORIES:
//
//       catParticleCand
//       catParticleMdc           (extracted from HParticleCand only)
//       catParticleEvtInfo       (fullcopy only)
//       catStart2Hit             (fullcopy only)
//       catStart2Cal             (fullcopy only)
//       catTBoxChan              (fullcopy only)
//       catWallHit               (fullcopy only)
//       catWallEventPlane        (fullcopy only)
//       catPionTrackerRaw        (fullcopy only)
//       catPionTrackerCal        (fullcopy only)
//       catPionTrackerHit        (fullcopy only)
//       catPionTrackerTrack      (fullcopy only)
//       catTofHit                (fullcopy or extracted from HParticleCand)
//       catTofCluster            (fullcopy or extracted from HParticleCand)
//       catRpcCluster            (fullcopy or extracted from HParticleCand)
//       catShowerHit             (fullcopy or extracted from HParticleCand)
//       catEmcCluster            (fullcopy only)
//       catEmcCal                (fullcopy only)
//       catRichHit               (fullcopy or extracted from HParticleCand)
//       catRichDirClus           (fullcopy only)
//       catRichCal               (fullcopy only)
//       catMdcSeg                (extracted from HParticleCand only)
//       catMdcHit                (extracted from HParticleCand only)
//       catMdcCal1               (extracted from HParticleCand only)
//       catMdcClus               (extracted from HParticleCand only)
//       catMdcClusInf            (extracted from HParticleCand only)
//       catMdcClusFit            (extracted from HParticleCand only)
//       catMdcWireFit            (extracted from HParticleCand only)
//       catGeantKine             (fullcopy only)
//       catMdcGeantRaw           (fullcopy only)
//       catTofGeantRaw           (fullcopy only)
//       catRpcGeantRaw           (fullcopy only)
//       catShowerGeantRaw        (fullcopy only)
//       catEmcGeantRaw           (fullcopy only)
//       catWallGeantRaw          (fullcopy only)
//       catRichGeantRaw (+1,+2)  (fullcopy only)
//
//
// create output:
// by
// 1. set outputfilename       ( full name including path, dir or suffix not used)
// 2. by hades output name     ( dir / file stem + suffix + _cyclecount.root)
// 3. by datasource input name ( dir / file stem + suffix + _cyclecount.root)
//
// Example: Filter dilepton events :
//
// I.   use the standard selectLeptons() from HParticleTrackSorter
// II.  ignore hadrons : take simple user defined function below
// III. select events which have at least 1 positron and 1 electron candidate
// IV.  create the event structure you need
//
//  //------------------------------------------------------
//  Bool_t selectLeptons(HParticleCand* pcand){
//
//    //  selection function for lepton candidates.
//    Bool_t select = kFALSE;
//    if(pcand->isFlagAND(5,
//			Particle::kIsAcceptedHitRICH,
//			Particle::kIsAcceptedHitInnerMDC,
//			Particle::kIsAcceptedHitOuterMDC,
//			Particle::kIsAcceptedHitMETA,
//			Particle::kIsAcceptedRK)
//       &&
//       pcand->getInnerSegmentChi2() > 0
//       &&
//       pcand->getChi2() < 1000
//       &&
//       pcand->getBeta() > 0.9
//    ) select = kTRUE;
//
//   return select;
//  }
//  //------------------------------------------------------
//  //------------------------------------------------------
//  Bool_t selectNoHadron(HParticleCand*){
//      // do not use this selection
//      return kFALSE;
//  }
//
//  //------------------------------------------------------
//  Bool_t selectEvent(TObjArray* ar){
//    // select events which have at least
//    // one lepton canddate pair . TObjArray* can
//    // be used to pas parameters into the function
//
//    HCategory* catCand = gHades->getCurrentEvent()->getCategory(catParticleCand);
//    if(catCand){
//    Int_t n=catCand->getEntries();
//    HParticleCand* cand=0;
//    Int_t nEle = 0;
//    Int_t nPos = 0;
//        for(Int_t i = 0; i < n; i ++){
//    	cand = HCategoryManager::getObject(cand,catCand,i);
//    	if(cand){
//    	    if(cand->isFlagBit(kIsLepton)){
//    		if      (cand->getCharge() == -1 ) nEle++;
//    		else if (cand->getCharge() ==  1 ) nPos++;
//    	    }
//    	}
//        }
//        if( (nPos < 1 && nEle < 2) || (nPos < 2 && nEle < 1) ) return kFALSE; // accept 2likesign or 1 unlikesign pair
//     } else return kFALSE;
//     return kTRUE;
//  }
//  //------------------------------------------------------
//
//  HParticleTree* parttree = new HParticleTree("leptontree","leptontree");
//  // 1. set outputfilename       ( full name including path, dir or suffix not used)
//  // 2. by hades output name     ( dir / file stem + suffix + _cyclecount.root)
//  // 3. by datasource input name ( dir / file stem + suffix + _cyclecount.root)
//
//  // case 1:
//  // parttree->setOutputFile ("/lustre/hades/filter_tree.root","Filter","RECREATE",2 ); // set outfile by hand
//  // case 2+3:
//  partree->setOutputFileSuffix("filter_tree"); // take outfile name from Hades output or data input and add _filter_tree at the end
//  parttree->setOutputDir("/lustre/hades");     // take outfile name from Hades output or data input and change the dir
//
//  parttree->setSkipEmptyEvents(kTRUE);   (default kFALSE)
//  parttree->setSkipTracks(kTRUE);        (default kTRUE)
//
//  //-------CONFIGURE HParticleTrackSorter-----------------
//  parttree->setIgnoreRICH         (kTRUE);
//  parttree->setIgnoreInnerMDC     (kTRUE);
//  parttree->setIgnoreOuterMDC     (kTRUE);
//  parttree->setIgnoreMETA         (kTRUE);
//  parttree->setIgnorePreviousIndex(kTRUE);
//  parttree->setRICHMatching(Particle::kUseRKRICHWindowSorter, 4.); // matching type and window
//  //------------------------------------------------------
//
//  //-------CONFIGURE EventStructure-----------------------
//  Cat_t PersistentCat[] = {
//    catParticleCand,
//    catParticleMdc,
//    catParticleEvtInfo,
//    catStart2Hit,
//    catStart2Cal,
//    catTBoxChan,
//    catWallHit,
//    catPionTrackerTrack,
//    //catPionTrackerRaw,
//    //catPionTrackerCal,
//    //catPionTrackerHit,
//    //-----------------------------
//    // NO OPTION FULL COPY : ONLY OBJECTS USED BY HParticleCand WILL BE COPIED!
//    // IF YOU WANT A FULL COPY SET THE FULL COPY IN ADDIION!
//    //catTofHit,
//    //catTofCluster,
//    //catRpcCluster,
//    //catEmcCluster,
//    //catShowerHit,
//    //catRichHit,
//    //-----------------------------
//    catEmcCluster,
//    //catRichDirClus,
//    //catRichCal,
//    //catMdcSeg,
//    //catMdcHit,
//    //catMdcCal1,
//    //catMdcClus,
//    //catMdcClusInf,
//    //catMdcClusFit,
//    //catMdcWireFit
//    //-----------------------------
//    // GEANT
//    //catGeantKine,
//    //catMdcGeantRaw,
//    //catTofGeantRaw,
//    //catRpcGeantRaw,
//    //catShowerGeantRaw,
//    //catEmcGeantRaw,
//    //catWallGeantRaw,
//    //catRichGeantRaw,
//    //catRichGeantRaw+1,
//    //catRichGeantRaw+2,
//    //catEmcGeantRaw,
//    //catStartGeantRaw
//    //-----------------------------
//   };
//
//  // list of categories which should be fully copied
//  // (only these contained in HParticleCand as Hit Index)
//
//    //-----------------------------
//    // OPTION FULL COPY : ONLY FOR OBJECTS USED BY HParticleCand!
//    // IF THE CAT IS SELECTED ALREADY, YOU CAN SWITCH IT TO FULL COPY HERE!
//    Cat_t PersistentCatFullCopy[] = {
//    //catTofHit,
//    //catTofCluster,
//    //catRpcCluster,
//    //catShowerHit,
//    //catRichHit
//   };
//    //-----------------------------
//
//  parttree->setEventStructure(sizeof(PersistentCat)        /sizeof(Cat_t),PersistentCat,kFALSE); // filter these cats
//  parttree->setEventStructure(sizeof(PersistentCatFullCopy)/sizeof(Cat_t),PersistentCat,kTRUE);  // copy these cats witt all entries
//  //------------------------------------------------------
//  //-------CONFIGURE SELECTIONS-----------------------
//  parttree->setUserSelectionLeptons(selectLeptons);   // use own lepton selector
//  parttree->setUserSelectionHadrons(selectNoHadron); // use only standard leptons from HParticlesorter
//  parttree->setUserSelectionEvent(selectEvent,NULL); // no params used
//  //------------------------------------------------------
//
////////////////////////////////////////////////////////////////////////////////




    HParticleTree::HParticleTree(const Text_t *name,const Text_t *title)
    : HReconstructor(name,title)
{
    fCurrentEvent      = 0;
    fOutputFile        = 0;
    fTree              = 0;
    fCycleNumber       = 0;
    fOutputFileName    = "";
    fOutputTitle       = "";
    fOutputOption      = "RECREATE";
    fOutputCompression = 0;
    fOutputFileSuffix  = "_filter_tree";
    fOutputDir         = "";
    fOutFound          = kFALSE;

    kSkipEmptyEvents   = kFALSE;
    kSkipTracks        = kTRUE;
    kDoSorter          = kTRUE;
    sortType           = Particle::kIsBestRKSorter;

    keeper             = 0;
    media              = 0;
    mdclayer           = 0;

    Cat_t supported [] = {
	catParticleCand,
	catParticleMdc,
	catParticleEvtInfo,
	catStart2Hit,
	catStart2Cal,
        catTBoxChan,
	catWallHit,
	catWallEventPlane,
	catPionTrackerRaw,
	catPionTrackerCal,
	catPionTrackerHit,
	catPionTrackerTrack,
	catTofHit,
	catTofCluster,
	catRpcCluster,
	catShowerHit,
	catEmcCluster,
	catEmcCal,
	catRichHit,
	catRichDirClus,
	catRichCal,
	catMdcSeg,
	catMdcHit,
	catMdcCal1,
	catMdcClus,
	catMdcClusInf,
	catMdcClusFit,
	catMdcWireFit,
	catGeantKine,
	catMdcGeantRaw,
	catTofGeantRaw,
	catRpcGeantRaw,
	catShowerGeantRaw,
	catEmcGeantRaw,
	catWallGeantRaw,
	catRichGeantRaw,
	catRichGeantRaw+1,
	catRichGeantRaw+2,
	catEmcGeantRaw,
        catStartGeantRaw
    };


    for(UInt_t i = 0 ; i < sizeof(supported) / sizeof(Cat_t); i++){
	fmCatNumSupport.push_back(supported[i]);
    }
    sort(fmCatNumSupport.begin(),fmCatNumSupport.end());


    Cat_t supportFullCopy [] ={
        catRichHit,
	catShowerHit,
	catTofHit,
	catTofCluster,
	catRpcCluster
    };

    for(UInt_t i = 0 ; i < sizeof(supportFullCopy) / sizeof(Cat_t); i++){
	fmCatNumFullCopySupport.push_back(supportFullCopy[i]);
    }
    sort(fmCatNumFullCopySupport.begin(),fmCatNumFullCopySupport.end());

    pUserSelectEvent   = NULL;
    pUserSelectLeptons = NULL;
    pUserSelectHadrons = NULL;
    pUserKeepTrack     = NULL;
    fParamSelectEvent  = NULL;

}

HParticleTree::~HParticleTree()
{
    //closeOutput();
    //if (fTree)             delete fTree;
    //if (fCurrentEvent)     delete fCurrentEvent;
}

Bool_t HParticleTree::init()
{
   sorter.init();

   return kTRUE;
}

Int_t  HParticleTree::execute()
{
    //-------------------------------------------
    // create output:
    // by
    // 1. set outputfilename       ( full name including path, dir or suffix not used)
    // 2. by hades output name     ( dir / file stem + suffix + _cyclecount.root)
    // 3. by datasource input name ( dir / file stem + suffix + _cyclecount.root)
    //
    //

    memset(ctMdcSeg ,0,6*2*sizeof(Int_t));
    memset(ctMdcClus,0,6*2*sizeof(Int_t));
    memset(ctMdcHit ,0,6*4*sizeof(Int_t));
    memset(ctRpcClus,0,6*sizeof(Int_t));

    if(!fOutFound)
    {   //  only once!

	const HRecEvent& event = *((HRecEvent*)gHades->getCurrentEvent());

	if(fOutputFileName != ""){ // output file name has been set by hand

            Info("execute()","CREATING OUTPUT FILE FROM SPECIFIED FILENAME= %s !",fOutputFileName.Data());
	    fOutputFile = new TFile(fOutputFileName.Data(),"RECREATE",fOutputTitle.Data(),fOutputCompression);
	    fOutFound = kTRUE;
	    setEvent();
	    makeTree();
	} else {
            if( fOutputDir == "" )         fOutputDir = gSystem->WorkingDirectory();        // -> absolute path
            if( fOutputDir.EndsWith("/") ) fOutputDir.Replace(fOutputDir.Length() -1,1,""); // remove trailing "/"


	    TFile* f  = gHades->getOutputFile();

	    if(f){  // derive filename from hades output file

		fOutputOption      = f->GetOption();
		fOutputTitle       = f->GetTitle();
		fOutputCompression = f->GetCompressionLevel();


		TString fname = f->GetName();
		fname = gSystem->BaseName(fname.Data());  // remove path
                fname.ReplaceAll(".root","");

                fOutputFileName = Form("%s/%s%s.root",fOutputDir.Data(),fname.Data(),fOutputFileSuffix.Data());

		Info("execute()","CREATING OUTPUT FILE FROM HADES OUTPUT= %s !",fOutputFileName.Data());
		fOutputFile = new TFile(fOutputFileName.Data(),"RECREATE",fOutputTitle.Data(),fOutputCompression);
		fOutFound = kTRUE;

		fCurrentEvent = new HRecEvent(event);
		setEvent();
		makeTree();

	    } else { // derive filename from datasource input file

		HDataSource* source = gHades->getDataSource();
		if(source){

		    TString fname = source->getCurrentFileName();

		    if(fname.EndsWith(".root"))
		    { // root file input

			fOutputOption      = "RECREATE";
			fOutputTitle       = "Filter";
			fOutputCompression = 2;

			fname = gSystem->BaseName(fname.Data());  // remove path
			fname.ReplaceAll(".root","");

			fOutputFileName = Form("%s/%s%s.root",fOutputDir.Data(),fname.Data(),fOutputFileSuffix.Data());

			Info("","CREATING OUTPUT FILE FROM ROOT INPUT = %s !",fOutputFileName.Data());
			fOutputFile = new TFile(fOutputFileName.Data(),"RECREATE",fOutputTitle.Data(),fOutputCompression);
			fOutFound = kTRUE;
			setEvent();
		        makeTree();
		    } else { // hld input

			fOutputOption      = "RECREATE";
			fOutputTitle       = "Filter";
			fOutputCompression = 2;


			fname = gSystem->BaseName(fname.Data());  // remove path
			fname.ReplaceAll(".hld","");

			fOutputFileName = Form("%s/%s%s.root",fOutputDir.Data(),fname.Data(),fOutputFileSuffix.Data());

			Info("","CREATING OUTPUT FILE FROM HLD INPUT = %s !",fOutputFileName.Data());
			fOutputFile = new TFile(fOutputFileName.Data(),fOutputOption.Data(),fOutputTitle.Data(),fOutputCompression);
			fOutFound = kTRUE;

			setEvent();
			makeTree();
		    } // hld input
		} // data source
	    } // from input
	} // from input or output

	//-------------------------------------------------------
	// copy Hades meta objects
	if(gHades->getSrcKeeper()){
	    HSrcKeeper& sk = *gHades->getSrcKeeper();
	    keeper = new HSrcKeeper(sk);
	} else {
	    Info("execute()","Could not retrieve HSrcKeeper from gHades!");
	}
	if(gHades->getGeantMedia()){
	    HGeantMedia& m = *gHades->getGeantMedia();
	    media = new HGeantMedia(m);
	} else {
	    Info("execute()","Could not retrieve HGeantMedia from gHades!");
	}

	const TObjArray* objects =   gHades->getObjectsAddedToOutput();
	HMdcLayer* ml = (HMdcLayer*)objects ->FindObject("HMdcLayer");

	if(ml){
	    mdclayer = new HMdcLayer(*ml);
	} else {
	    Info("execute()","Could not retrieve HMdcLayer from gHades!");
	}
	//-------------------------------------------------------



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


    //-------------------------------------------
    // save output if file is too big and open a new one
    if (fOutputFile) {
	if (fOutputFile->GetBytesWritten() > gHades->getOutputSizeLimit()) {
	    recreateOutput();
	}
    }
    //-------------------------------------------



    if(fTree)
    {
	Bool_t goodEvent = kTRUE;

	fCurrentEvent->Clear();

	HEventHeader* header      = fCurrentEvent->getHeader();
	HEventHeader* hadesheader = gHades->getCurrentEvent()->getHeader(); // copy full event header

	new (header) HEventHeader(*hadesheader);

	if(fCurrentEvent->getCategory(catParticleCand))
	{

	    if(kDoSorter)
	    {
		//-------------------------------------------
                sorter.backupSetup();
		sorter.backupFlags(kTRUE); // backup only flags of HParticleCand, not setup of HParticleSorter

		sorter.getSetup().copyToStatic();

		sorter.cleanUp();  // clear vector of candidates + indices of hits

		// clean all flags !
		sorter.resetFlags(kTRUE,kTRUE,kTRUE,kTRUE);     // flags,reject,used,lepton

		//-------LEPTONS---------------------------
		if(pUserSelectLeptons){
		    sorter.fill(pUserSelectLeptons);                  // fill only good leptons (user provided)
		} else {
		    sorter.fill(HParticleTrackSorter::selectLeptons); // fill only good leptons
		}
		sorter.selectBest(sortType,Particle::kIsLeptonSorter);
		//-------HADRONS---------------------------
		if(pUserSelectHadrons){
		    sorter.fill(pUserSelectHadrons);                  // fill only good hadrons (user provided) (already marked good leptons will be skipped)
		} else {
		    sorter.fill(HParticleTrackSorter::selectHadrons); // fill only good hadrons (already marked good leptons will be skipped)
		}
		sorter.selectBest(sortType,Particle::kIsHadronSorter);
		//-------------------------------------------
	    }

	    goodEvent = kTRUE;
	    if(pUserSelectEvent){
		goodEvent = (*pUserSelectEvent)(fParamSelectEvent);
	    }

	    if(goodEvent)
	    {
		Bool_t isSim = fmCatNumToName[catParticleCand] == "HParticleCandSim" ? kTRUE : kFALSE;

		//-------------------------------------------
		// First copy all categories which are not connected
		// with HParticleCand. Full categories are copied if
		// set in the event layout


		//###########################################
		//###########################################
		//  GEANT
		//-------------------------------------------
		if(fCurrentEvent->getCategory(catGeantKine))  // linear
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catGeantKine);
		    HCategory* catOut = fCurrentEvent->getCategory(catGeantKine);
		    Int_t n = catIn->getEntries();
		    HGeantKine* kine1 = 0;
		    HGeantKine* kine2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			kine1 = HCategoryManager::getObject    (kine1,catIn,i);
			kine2 = HCategoryManager::newObjectCopy(kine2,kine1,catOut,index);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catMdcGeantRaw)) // matrix
		{

		    HCategory* catIn  = HCategoryManager::getCategory(catMdcGeantRaw);
		    HLocation loc;
		    loc.set(4,0,0,0,0); // 6,4,7,195


		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catMdcGeantRaw);

		    Int_t n = catIn->getEntries();
		    HGeantMdc* hit1 = 0;
		    HGeantMdc* hit2 = 0;

		    Int_t ind[6][4][7] ;
		    for(Int_t s=0;s<6;s++){
			for(Int_t m=0;m<4;m++){
			    for(Int_t l=0;l<7;l++){
                              ind[s][m][l]=0;
			    }
			}
		    }


		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
			    loc[1] = hit1->getModule();
			    loc[2] = hit1->getLayer();
                            loc[3] = ind[loc[0]][loc[1]][loc[2]];

			    hit2 =(HGeantMdc*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantMdc(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());
                            ind[loc[0]][loc[1]][loc[2]]++;
			}
		    }

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

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catTofGeantRaw)) // matrix
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catTofGeantRaw);
		    HLocation loc;
		    loc.set(2,0,0); // 6,200

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catTofGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantTof* hit1 = 0;
		    HGeantTof* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantTof*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantTof(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRpcGeantRaw))  // matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catRpcGeantRaw);
		    HLocation loc;
		    loc.set(2,0,0); // 6,2500

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRpcGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantRpc* hit1 = 0;
		    HGeantRpc* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantRpc*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantRpc(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catShowerGeantRaw)) // matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catShowerGeantRaw);
		    HLocation loc;
		    loc.set(2,0,0); // 6,600

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catShowerGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantShower* hit1 = 0;
		    HGeantShower* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantShower*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantShower(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------


		//-------------------------------------------
		if(fCurrentEvent->getCategory(catEmcGeantRaw)) // matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catEmcGeantRaw);
		    HLocation loc;
		    loc.set(2,0,0); // 6,600

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catEmcGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantEmc* hit1 = 0;
		    HGeantEmc* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantEmc*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantEmc(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catWallGeantRaw))  // linear
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catWallGeantRaw);
		    HCategory* catOut = fCurrentEvent->getCategory(catWallGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantWall* wall1 = 0;
		    HGeantWall* wall2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			wall1 = HCategoryManager::getObject    (wall1,catIn,i);
			wall2 = HCategoryManager::newObjectCopy(wall2,wall1,catOut,index);
			wall2->setNextHitIndex(wall1->getNextHitIndex());

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

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catStartGeantRaw))  // linear
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catStartGeantRaw);
		    HCategory* catOut = fCurrentEvent->getCategory(catStartGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantStart* start1 = 0;
		    HGeantStart* start2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			start1 = HCategoryManager::getObject    (start1,catIn,i);
			start2 = HCategoryManager::newObjectCopy(start2,start1,catOut,index);
			start2->setNextHitIndex(start1->getNextHitIndex());

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

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichGeantRaw)) // matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catRichGeantRaw);
		    HLocation loc;
		    loc.set(2,0,0); // 6,4000

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRichGeantRaw);
		    Int_t n = catIn->getEntries();
		    HGeantRichPhoton* hit1 = 0;
		    HGeantRichPhoton* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantRichPhoton*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantRichPhoton(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichGeantRaw+1)) //matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catRichGeantRaw+1);
		    HLocation loc;
		    loc.set(2,0,0); // 6,4000

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRichGeantRaw+1);
		    Int_t n = catIn->getEntries();
		    HGeantRichDirect* hit1 = 0;
		    HGeantRichDirect* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantRichDirect*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantRichDirect(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichGeantRaw+2)) // matrix
		{
	            HCategory* catIn  = HCategoryManager::getCategory(catRichGeantRaw+2);
		    HLocation loc;
		    loc.set(2,0,0); // 6,4000

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRichGeantRaw+2);
		    Int_t n = catIn->getEntries();
		    HGeantRichMirror* hit1 = 0;
		    HGeantRichMirror* hit2 = 0;

		    Int_t ind[6] ;
		    for(Int_t s=0;s<6;s++){
			ind[s]=0;
		    }

		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			if(hit1){

			    loc[0] = hit1->getSector();
                            loc[1] = ind[loc[0]];

			    hit2 =(HGeantRichMirror*) catOut->getSlot(loc,&index);
			    new (hit2) HGeantRichMirror(*hit1);
			    hit2->setNextHitIndex(hit1->getNextHitIndex());

                            ind[loc[0]]++;
			}
		    }
		}
		//-------------------------------------------
 		//###########################################
		//###########################################

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catParticleEvtInfo))
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catParticleEvtInfo);
		    HCategory* catOut = fCurrentEvent->getCategory(catParticleEvtInfo);
		    Int_t n = catIn->getEntries();
		    HParticleEvtInfo* info1 = 0;
		    HParticleEvtInfo* info2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			info1 = HCategoryManager::getObject    (info1,catIn,i);
			info2 = HCategoryManager::newObjectCopy(info2,info1,catOut,index);
		    }
		}
		//-------------------------------------------


		//-------------------------------------------
		if(fCurrentEvent->getCategory(catStart2Hit))
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catStart2Hit);
		    HCategory* catOut = fCurrentEvent->getCategory(catStart2Hit);
		    Int_t n = catIn->getEntries();
		    HStart2Hit* hit1 = 0;
		    HStart2Hit* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catStart2Cal))
		{   // MatrixCat!
		    HCategory* catIn  = HCategoryManager::getCategory(catStart2Cal);

		    HLocation loc;
		    loc.set(2,0,0);

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catStart2Cal);
		    Int_t n = catIn->getEntries();
		    HStart2Cal* hit1 = 0;
		    HStart2Cal* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			loc[0] = hit1->getModule();
			loc[1] = hit1->getStrip();
			hit2 =(HStart2Cal*) catOut->getSlot(loc,&index);
			new (hit2) HStart2Cal(*hit1);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catTBoxChan))
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catTBoxChan);
		    HCategory* catOut = fCurrentEvent->getCategory(catTBoxChan);
		    Int_t n = catIn->getEntries();
		    HTBoxChan* hit1 = 0;
		    HTBoxChan* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catWallHit))
		{   // Matrixcat!
		    HCategory* catIn  = HCategoryManager::getCategory(catWallHit);
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catWallHit);

		    HLocation loc;
		    loc.set(1,0);

		    Int_t n = catIn->getEntries();
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){

			if(isSim){
			    HWallHitSim* hit1 = 0;
			    HWallHitSim* hit2 = 0;

			    hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			    loc[0] = hit1->getCell();
			    hit2 =(HWallHitSim*) catOut->getSlot(loc,&index);
			    new (hit2) HWallHitSim(*hit1);

			} else {
			    HWallHit* hit1 = 0;
			    HWallHit* hit2 = 0;

			    hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			    loc[0] = hit1->getCell();
			    hit2 =(HWallHit*) catOut->getSlot(loc,&index);
			    new (hit2) HWallHit(*hit1);
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catWallEventPlane))
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catWallEventPlane);
		    HCategory* catOut = fCurrentEvent->getCategory(catWallEventPlane);
		    Int_t n = catIn->getEntries();
		    HWallEventPlane* info1 = 0;
		    HWallEventPlane* info2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			info1 = HCategoryManager::getObject    (info1,catIn,i);
			info2 = HCategoryManager::newObjectCopy(info2,info1,catOut,index);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichCal))
		{   // Matrixcat!
		    HCategory* catIn  = HCategoryManager::getCategory(catRichCal);
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRichCal);

		    HLocation loc;
		    loc.set(3,0,0,0);   // matrix cat ,  but used as linearcat ???

		    Int_t n = catIn->getEntries();
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			if(isSim){
			    HRichCalSim* hit1 = 0;
			    HRichCalSim* hit2 = 0;

			    hit1 = HCategoryManager::getObject(hit1,catIn,i);
                            loc[0] = hit1->getSector();
			    loc[1] = hit1->getRow();
			    loc[2] = hit1->getCol();

			    hit2 =(HRichCalSim*) catOut->getSlot(loc,&index);
			    new (hit2) HRichCalSim(*hit1);

			} else {

			    HRichCal* hit1 = 0;
			    HRichCal* hit2 = 0;

			    hit1 = HCategoryManager::getObject(hit1,catIn,i);
                            loc[0] = hit1->getSector();
			    loc[1] = hit1->getRow();
			    loc[2] = hit1->getCol();

			    hit2 =(HRichCal*) catOut->getSlot(loc,&index);
			    new (hit2) HRichCal(*hit1);
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichDirClus))
		{   // Matrixcat!
		    HCategory* catIn  = HCategoryManager::getCategory(catRichDirClus);
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRichDirClus);

		    HLocation loc;
		    loc.set(1,0);   // matrix cat ,  but used as linearcat ???

		    Int_t n = catIn->getEntries();
		    HRichDirClus* hit1 = 0;
		    HRichDirClus* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 =(HRichDirClus*) catOut->getNewSlot(loc,&index);
			new (hit2) HRichDirClus(*hit1);
		    }
		}
		//-------------------------------------------


		//-------------------------------------------
		if(fCurrentEvent->getCategory(catPionTrackerTrack))
		{
		    HCategory* catIn  = HCategoryManager::getCategory(catPionTrackerTrack);
		    HCategory* catOut = fCurrentEvent->getCategory(catPionTrackerTrack);
		    Int_t n = catIn->getEntries();
		    HPionTrackerTrack* hit1 = 0;
		    HPionTrackerTrack* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catPionTrackerCal))
		{   // Matrixcat!
		    HCategory* catIn  = HCategoryManager::getCategory(catPionTrackerCal);
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catPionTrackerCal);

		    HLocation loc;
		    loc.set(2,0,0);   // matrix cat ,  but used as linearcat ???

		    Int_t n = catIn->getEntries();
		    HPionTrackerCal* hit1 = 0;
		    HPionTrackerCal* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 =(HPionTrackerCal*) catOut->getNewSlot(loc,&index);
			new (hit2) HPionTrackerCal(*hit1);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catPionTrackerHit))
		{   // Matrixcat!
		    HCategory* catIn  = HCategoryManager::getCategory(catPionTrackerHit);
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catPionTrackerHit);

		    HLocation loc;
		    loc.set(2,0,0);   // matrix cat ,  but used as linearcat ???

		    Int_t n = catIn->getEntries();
		    HPionTrackerHit* hit1 = 0;
		    HPionTrackerHit* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject    (hit1,catIn,i);
			hit2 =(HPionTrackerHit*) catOut->getNewSlot(loc,&index);
			new (hit2) HPionTrackerHit(*hit1);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catEmcCluster))
		{   // MatrixCat!
		    HCategory* catIn  = HCategoryManager::getCategory(catEmcCluster);

		    HLocation loc;
		    loc.set(2,0,0);

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catEmcCluster);
		    Int_t n = catIn->getEntries();
		    HEmcCluster* hit1 = 0;
		    HEmcCluster* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			loc[0] = hit1->getSector();
			loc[1] = hit1->getCell();
			hit2 =(HEmcCluster*) catOut->getSlot(loc,&index);
			new (hit2) HEmcCluster(*hit1);
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catEmcCal))
		{   // MatrixCat!
		    HCategory* catIn  = HCategoryManager::getCategory(catEmcCal);

		    HLocation loc;
		    loc.set(2,0,0);

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catEmcCal);
		    Int_t n = catIn->getEntries();
		    HEmcCal* hit1 = 0;
		    HEmcCal* hit2 = 0;
		    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			hit1 = HCategoryManager::getObject(hit1,catIn,i);
			loc[0] = hit1->getSector();
			loc[1] = hit1->getCell();
			hit2 =(HEmcCal*) catOut->getSlot(loc,&index);
			new (hit2) HEmcCal(*hit1);
		    }
		}
		//-------------------------------------------


		//-------------------------------------------
                // now the categories with option to full copy
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRichHit) && doFullCopy(catRichHit)){

		    HLinearCategory* catOut = (HLinearCategory*)fCurrentEvent->getCategory(catRichHit);
                    HCategory* catIn  = HCategoryManager::getCategory(catRichHit);

		    Int_t n = catIn->getEntries();
                    Int_t index;
		    for(Int_t i = 0; i < n; i++){
			if(isSim)
			{
			    HRichHitSim* hit1 = 0;
			    HRichHitSim* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catIn,i);
			    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);

			} else {

			    HRichHit* hit1 = 0;
			    HRichHit* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catIn,i);
			    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);
			}
		    }
		}
		//-------------------------------------------

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catTofHit) && doFullCopy(catTofHit)){
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catTofHit);
                    HCategory* catIn  = HCategoryManager::getCategory(catTofHit);

		    HLocation loc;
		    loc.set(3,0,0,0);

		    Int_t n = catIn->getEntries();
                    Int_t index;

		    for(Int_t i = 0; i < n; i++){

			if(isSim)
			{
			    HTofHitSim* hit1 = 0;
			    HTofHitSim* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catTofHit,i);

			    loc[0] = hit1->getSector();
			    loc[1] = hit1->getModule();
			    loc[2] = hit1->getCell();

			    hit2 =(HTofHitSim*) catOut->getSlot(loc,&index);
			    new (hit2) HTofHitSim(*hit1);

			} else {

			    HTofHit* hit1 = 0;
			    HTofHit* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catTofHit,i);

			    loc[0] = hit1->getSector();
			    loc[1] = hit1->getModule();
			    loc[2] = hit1->getCell();

			    hit2 =(HTofHit*) catOut->getSlot(loc,&index);
			    new (hit2) HTofHit(*hit1);

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

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catTofCluster) && doFullCopy(catTofCluster)){
		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catTofCluster);
                    HCategory* catIn  = HCategoryManager::getCategory(catTofCluster);

		    HLocation loc;
		    loc.set(3,0,0,0);

		    Int_t n = catIn->getEntries();
                    Int_t index;

		    for(Int_t i = 0; i < n; i++){

			if(isSim)
			{
			    HTofClusterSim* hit1 = 0;
			    HTofClusterSim* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catTofCluster,i);

			    loc[0] = hit1->getSector();
			    loc[1] = hit1->getModule();
			    loc[2] = hit1->getCell();

			    hit2 =(HTofClusterSim*) catOut->getSlot(loc,&index);
			    new (hit2) HTofClusterSim(*hit1);

			} else {

			    HTofCluster* hit1 = 0;
			    HTofCluster* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catTofCluster,i);

			    loc[0] = hit1->getSector();
			    loc[1] = hit1->getModule();
			    loc[2] = hit1->getCell();

			    hit2 =(HTofCluster*) catOut->getSlot(loc,&index);
			    new (hit2) HTofCluster(*hit1);

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


		//-------------------------------------------
		if(fCurrentEvent->getCategory(catRpcCluster) && doFullCopy(catRpcCluster)){


		    HLocation loc;
		    loc.set(2,0,0);

		    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRpcCluster);
		    HCategory* catIn  = HCategoryManager::getCategory(catRpcCluster);

		    Int_t n = catIn->getEntries();
                    Int_t index;

		    for(Int_t i = 0; i < n; i++){
			if(isSim)
			{
			    HRpcClusterSim* hit1 = 0;
			    HRpcClusterSim* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catRpcCluster,i);

			    loc[0] = hit1->getSector();
			    loc[1] = ctRpcClus[hit1->getSector()];

			    hit2 =(HRpcClusterSim*) catOut->getSlot(loc,&index);
			    new (hit2) HRpcClusterSim(*hit1);
			    hit2->setAddress(loc[0],index);

			    ctRpcClus[hit1->getSector()] ++;

			} else {

			    HRpcCluster* hit1 = 0;
			    HRpcCluster* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catRpcCluster,i);

			    loc[0] = hit1->getSector();
			    loc[1] = ctRpcClus[hit1->getSector()];

			    hit2 =(HRpcCluster*) catOut->getSlot(loc,&index);
			    new (hit2) HRpcCluster(*hit1);
			    hit2->setAddress(loc[0],index);

			    ctRpcClus[hit1->getSector()] ++;

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

		//-------------------------------------------
		if(fCurrentEvent->getCategory(catShowerHit) && doFullCopy(catShowerHit)){

		    HCategory* catOut = fCurrentEvent->getCategory(catShowerHit);
		    HCategory* catIn  = HCategoryManager::getCategory(catShowerHit);

		    Int_t n = catIn->getEntries();
                    Int_t index;

		    for(Int_t i = 0; i < n; i++){
			if(isSim)
			{
			    HShowerHitSim* hit1 = 0;
			    HShowerHitSim* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catShowerHit,i);
			    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);

			} else {

			    HShowerHit* hit1 = 0;
			    HShowerHit* hit2 = 0;
			    hit1 = HCategoryManager::getObject(hit1,catShowerHit,i);
			    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,index);
			}
		    }
		}
		//-------------------------------------------
        	//-------------------------------------------






		//-------------------------------------------
		// now fill all categeories which can be reached
		// form HParticleCand. Only objects which are inside
		// candidates which are flagged kIsUsed are taken into
		// account

		HCategory* catIn  = HCategoryManager::getCategory(catParticleCand);
		HCategory* catOut = fCurrentEvent->getCategory(catParticleCand);

		Int_t n = catIn->getEntries();
		HParticleCand *cand, *cand1, *cand2;  cand=cand1=cand2=0;
		HParticleCandSim* cands1, *cands2;    cands1=cands2=0;
		Int_t indexCand2; // use this for all objects stored parallel to candidate2

                Int_t particleMdcInd1;
		Int_t richInd1;
		Int_t seg0Ind1;
		Int_t seg1Ind1;
		Int_t rpcInd1;
		Int_t showerInd1;
		Int_t tofInd1;
		Int_t tofClstInd1;

                Int_t particleMdcInd2;
		Int_t richInd2;
		Int_t seg0Ind2;
		Int_t seg1Ind2;
		Int_t rpcInd2;
		Int_t showerInd2;
		Int_t tofInd2;
		Int_t tofClstInd2;


                // remember already copied hits
		map<Int_t,Int_t>mPartMdc;
		map<Int_t,Int_t>mSeg;
                map<Int_t,Int_t>mRich;
                map<Int_t,Int_t>mTofHit;
                map<Int_t,Int_t>mTofClst;
                map<Int_t,Int_t>mRpcClst;
                map<Int_t,Int_t>mShrHit;



		for(Int_t i = 0; i < n; i++){

		    //-------------------------------------------
		    // take only candidates which are marked as used
		    // from those objects retieve the corresponding hit
		    // objects. Indices have to be adopted in the
		    // output object.

		    if(isSim){
			cands1 = HCategoryManager::getObject    (cands1,catIn,i);
			if(kSkipTracks ){

			    if(pUserKeepTrack){
				if(!(*pUserKeepTrack)(cands1)) continue;
			    } else {
				if(!cands1->isFlagBit(Particle::kIsUsed)) continue;
			    }
			}
			cands2 = HCategoryManager::newObjectCopy(cands2,cands1,catOut,indexCand2);
			cands2->setIndex(indexCand2);

			cand = cands2;

                        particleMdcInd1 = cands1->getIndex();
			richInd1        = cands1->getRichInd();
			seg0Ind1        = cands1->getInnerSegInd();
			seg1Ind1        = cands1->getOuterSegInd();
			rpcInd1         = cands1->getRpcInd();
			showerInd1      = cands1->getShowerInd();
			tofInd1         = cands1->getTofHitInd();
			tofClstInd1     = cands1->getTofClstInd();

		    } else {
			cand1 = HCategoryManager::getObject    (cand1,catIn,i);
			if(kSkipTracks){
			    if(pUserKeepTrack){
				if(!(*pUserKeepTrack)(cand1)) continue;
			    } else {
				if(!cand1->isFlagBit(Particle::kIsUsed)) continue;
			    }
			}
			cand2 = HCategoryManager::newObjectCopy(cand2,cand1,catOut,indexCand2);
			cand2->setIndex(indexCand2);

			cand = cand2;

                        particleMdcInd1 = cand1->getIndex();
			richInd1        = cand1->getRichInd();
			seg0Ind1        = cand1->getInnerSegInd();
			seg1Ind1        = cand1->getOuterSegInd();
			rpcInd1         = cand1->getRpcInd();
			showerInd1      = cand1->getShowerInd();
			tofInd1         = cand1->getTofHitInd();
			tofClstInd1     = cand1->getTofClstInd();

		    }




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

                    particleMdcInd2 = -1;
		    richInd2        = -1;
		    seg0Ind2        = -1;
		    seg1Ind2        = -1;
		    rpcInd2         = -1;
		    showerInd2      = -1;
		    tofInd2         = -1;
		    tofClstInd2     = -1;

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

		    if(catParticleMdc)
		    {
			if(particleMdcInd1 !=-1 && fCurrentEvent->getCategory(catParticleMdc))
			{
			    if(mPartMdc.find(particleMdcInd1) == mPartMdc.end())
			    { // new object
                                HLinearCategory* catOut = (HLinearCategory*)fCurrentEvent->getCategory(catParticleMdc);


                                HParticleMdc* particleMdc1 = 0;
                                HParticleMdc* particleMdc2 = 0;
                                particleMdc1 = HCategoryManager::getObject(particleMdc1,catParticleMdc,particleMdcInd1);
                                particleMdc2 = HCategoryManager::newObjectCopy(particleMdc2,particleMdc1,catOut,particleMdcInd2);

                                particleMdcInd2 = indexCand2;
                                particleMdc2->setIndex(particleMdcInd2);

                                mPartMdc[particleMdcInd1] = particleMdcInd2;

			    }

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

		    //-------------------------------------------
		    if(!doFullCopy(catRichHit))
		    {
			if(richInd1 !=-1 && fCurrentEvent->getCategory(catRichHit))
			{
			    if(mRich.find(richInd1) == mRich.end())
			    { // new object
				HLinearCategory* catOut = (HLinearCategory*)fCurrentEvent->getCategory(catRichHit);

				if(isSim)
				{
				    HRichHitSim* hit1 = 0;
				    HRichHitSim* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catRichHit,richInd1);
				    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,richInd2);

				} else {

				    HRichHit* hit1 = 0;
				    HRichHit* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catRichHit,richInd1);
				    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,richInd2);
				}

				mRich[richInd1] = richInd2;

			    } else {  // object was already copied
				richInd2 = mRich[richInd1];
			    }

			    cand->setRichInd(richInd2);
			}
		    } else { cand->setRichInd(richInd1); }
		    //-------------------------------------------

		    //-------------------------------------------
		    if(!doFullCopy(catTofHit))
		    {
			if(tofInd1 !=-1 && fCurrentEvent->getCategory(catTofHit))
			{

			    if(mTofHit.find(tofInd1) == mTofHit.end())
			    { // new object
				HLocation loc;
				loc.set(3,0,0,0);

				HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catTofHit);

				if(isSim)
				{
				    HTofHitSim* hit1 = 0;
				    HTofHitSim* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catTofHit,tofInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = hit1->getModule();
				    loc[2] = hit1->getCell();

				    hit2 =(HTofHitSim*) catOut->getSlot(loc,&tofInd2);
				    new (hit2) HTofHitSim(*hit1);

				} else {

				    HTofHit* hit1 = 0;
				    HTofHit* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catTofHit,tofInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = hit1->getModule();
				    loc[2] = hit1->getCell();

				    hit2 =(HTofHit*) catOut->getSlot(loc,&tofInd2);
				    new (hit2) HTofHit(*hit1);

				}
				mTofHit[tofInd1] = tofInd2;

			    } else {
				// object already copied
				tofInd2 = mTofHit[tofInd1];
			    }
			    cand->setTofHitInd(tofInd2);
			}
		    } else { cand->setTofHitInd(tofInd1); }

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

		    //-------------------------------------------
		    if(!doFullCopy(catTofCluster))
		    {
			if(tofClstInd1 !=-1 && fCurrentEvent->getCategory(catTofCluster))
			{
			    if(mTofClst.find(tofClstInd1) == mTofClst.end())
			    {

				HLocation loc;
				loc.set(3,0,0,0);

				HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catTofCluster);

				if(isSim)
				{
				    HTofClusterSim* hit1 = 0;
				    HTofClusterSim* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catTofCluster,tofClstInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = hit1->getModule();
				    loc[2] = hit1->getCell();

				    hit2 =(HTofClusterSim*) catOut->getSlot(loc,&tofClstInd2);
				    new (hit2) HTofClusterSim(*hit1);

				} else {

				    HTofCluster* hit1 = 0;
				    HTofCluster* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catTofCluster,tofClstInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = hit1->getModule();
				    loc[2] = hit1->getCell();

				    hit2 =(HTofCluster*) catOut->getSlot(loc,&tofClstInd2);
				    new (hit2) HTofCluster(*hit1);

				}

				mTofClst[tofClstInd1] = tofClstInd2;

			    } else {
				// object already copied
				tofClstInd2 = mTofClst[tofClstInd1];
			    }
			    cand->setTofClstInd(tofClstInd2);
			}
		    } else { cand->setTofClstInd(tofClstInd1); }
		    //-------------------------------------------

		    //-------------------------------------------
		    if(!doFullCopy(catRpcCluster))
		    {
			if(rpcInd1 !=-1 && fCurrentEvent->getCategory(catRpcCluster))
			{
			    if(mRpcClst.find(rpcInd1) == mRpcClst.end())
			    {  // new object

				HLocation loc;
				loc.set(2,0,0);

				HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catRpcCluster);

				if(isSim)
				{
				    HRpcClusterSim* hit1 = 0;
				    HRpcClusterSim* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catRpcCluster,rpcInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = ctRpcClus[hit1->getSector()];

				    hit2 =(HRpcClusterSim*) catOut->getSlot(loc,&rpcInd2);
				    new (hit2) HRpcClusterSim(*hit1);
				    hit2->setAddress(loc[0],rpcInd2);

				    ctRpcClus[hit1->getSector()] ++;

				} else {

				    HRpcCluster* hit1 = 0;
				    HRpcCluster* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catRpcCluster,rpcInd1);

				    loc[0] = hit1->getSector();
				    loc[1] = ctRpcClus[hit1->getSector()];

				    hit2 =(HRpcCluster*) catOut->getSlot(loc,&rpcInd2);
				    new (hit2) HRpcCluster(*hit1);
				    hit2->setAddress(loc[0],rpcInd2);

				    ctRpcClus[hit1->getSector()] ++;

				}

				mRpcClst[rpcInd1] = rpcInd2;

			    } else {
				// object already copied
				rpcInd2 = mRpcClst[rpcInd1];
			    }

			    cand->setRpcInd(rpcInd2);
			}
		    } else { cand->setRpcInd(rpcInd1); }

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

		    //-------------------------------------------
		    if(!doFullCopy(catShowerHit))
		    {
			if(showerInd1 !=-1 && fCurrentEvent->getCategory(catShowerHit))
			{
			    if(mShrHit.find(showerInd1) == mShrHit.end())
			    { // new object

				HCategory* catOut = fCurrentEvent->getCategory(catShowerHit);

				if(isSim)
				{

				    HShowerHitSim* hit1 = 0;
				    HShowerHitSim* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catShowerHit,showerInd1);
				    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,showerInd2);

				} else {

				    HShowerHit* hit1 = 0;
				    HShowerHit* hit2 = 0;
				    hit1 = HCategoryManager::getObject(hit1,catShowerHit,showerInd1);
				    hit2 = HCategoryManager::newObjectCopy(hit2,hit1,catOut,showerInd2);
				}

				mShrHit[showerInd1] = showerInd2;

			    } else {
				// object already copied
				showerInd2 = mShrHit[showerInd1];
			    }

			    cand->setShowerInd(showerInd2);
			}
		    } else { cand->setShowerInd(showerInd1); }
		    //-------------------------------------------

		    //-------------------------------------------
		    if(seg0Ind1 !=-1 && fCurrentEvent->getCategory(catMdcSeg))
		    {
			if(mSeg.find(seg0Ind1) == mSeg.end()){
                            // new object
			    extractMdcSeg(cand,isSim,seg0Ind1,seg0Ind2);
			    mSeg[seg0Ind1] = seg0Ind2;
			} else {
			    //object already copied
			    cand->setInnerSegInd(mSeg[seg0Ind1]);
			}
		    }
		    //-------------------------------------------

		    //-------------------------------------------
		    if(seg1Ind1 !=-1 && fCurrentEvent->getCategory(catMdcSeg))
		    {
			if(mSeg.find(seg1Ind1) == mSeg.end()){
			    // new object
			    extractMdcSeg(cand,isSim,seg1Ind1,seg1Ind2);
                            mSeg[seg1Ind1] = seg1Ind2;
			} else {
			    //object already copied
			    cand->setOuterSegInd(mSeg[seg1Ind1]);
			}
		    }
		    //-------------------------------------------

		} // loop particlecand


	    } // good event
	    if(kDoSorter){
		sorter.restoreFlags(kTRUE); // restore only flags of HParticleCand, not setup of HParticleSorter
		sorter.restoreSetup();

	    }
	} // cat particle cand

	if( (goodEvent && kSkipEmptyEvents) || !kSkipEmptyEvents ) fTree->Fill();
    } // fTree

    return 0;
}

Bool_t HParticleTree::finalize()
{
    closeOutput();
    return kTRUE;

}
void HParticleTree::setEventStructure(Int_t n,Cat_t PersistentCat[],Bool_t fullCopy)
{

    // user definition of the event structure by an array
    // of category numbers. The categories will be created
    // only if they are already present in the input

    for(Int_t i = 0; i < n; i++){

	if(find(fmCatNumSupport.begin(),fmCatNumSupport.end(),PersistentCat[i]) != fmCatNumSupport.end()){ // supported ?

	    if(find(fCatNums.begin(),fCatNums.end(),PersistentCat[i]) == fCatNums.end()){ // not yet added ?
		fCatNums.push_back(PersistentCat[i]); //fmCatNumToFullCopy;
	    } else {
		Warning("setEventStructure()","Cat %i already in event structure ! Skipped second time.",PersistentCat[i]);
                continue;
	    }
	    if(fullCopy ){
		if(find(fmCatNumFullCopySupport.begin(),fmCatNumFullCopySupport.end(),PersistentCat[i]) != fmCatNumFullCopySupport.end() ){
                   fmCatNumToFullCopy [PersistentCat[i]] = 1;
		} else {
                   Warning("setEventStructure()","Cat %i not supported for fullCopy ! added in filtered copy mode.",PersistentCat[i]);
                   fmCatNumToFullCopy [PersistentCat[i]] = 0;
		}
	    } else {
		fmCatNumToFullCopy [PersistentCat[i]] = 0;
	    }
	} else {
	    Warning("setEventStructure()","Cat %i not supported, will be skipped!",PersistentCat[i]);
	}
    }
    sort(fCatNums.begin(),fCatNums.end());

}

void HParticleTree::setEvent()
{
    // analyzes the current event of Hades and
    // sets the own event structure arccording
    // to the selected categories.



    HRecEvent* event = ((HRecEvent*) gHades->getCurrentEvent());


    fCurrentEvent = new HRecEvent();
    TObjArray* pevts = event->getPartialEvents();

    map<TString , Int_t> mpOut;

    cout<<"#########################################################"<<endl;
    cout<<"From task : name = "<< this->GetName()<<", title = "<<this->GetTitle()<<endl;
    cout<<"Partial events found in input = "<<pevts->GetEntries()<<endl;
    cout<<"Creating output event structure :"<<endl;
    Bool_t doAll = fCatNums.size() == 0 ? kTRUE : kFALSE;

    //------------------------------------------------------
    // find all active partial events in output
    for(Int_t i = 0;i < pevts->GetSize(); i++ ) {

	HPartialEvent* p = (HPartialEvent*)pevts->At(i);
	if(p){
	    if(mpOut.find(p->GetName()) == mpOut.end()){

		TObjArray* cats = p->getCategories( );
                //------------------------------------------------------
		// loop categories of partial event
		Int_t catnum;
		for(Int_t j = 0;j < cats->GetSize(); j++ ) {
                    HCategory* cat = (HCategory*)cats->At(j);
		    if(cat) catnum = cat->getCategory( );
		    if(cat  &&
		       ( doAll || find(fCatNums.begin(),fCatNums.end(),catnum) != fCatNums.end() ) &&
		       mpOut.find(p->GetName()) == mpOut.end())
		    {
			mpOut[p->GetName()] = i;
		    } // cat in list
		} // for cat
	    } // new p
	} // p
    }
    //------------------------------------------------------




    map<TString , Int_t> mp;

    for(Int_t i = 0;i < pevts->GetSize(); i++ ) {

	HPartialEvent* p = (HPartialEvent*)pevts->At(i);
	if(p ){

	    Cat_t catbasenum = p->getBaseCat();

	    if(mp   .find(p->GetName()) == mp   .end() &&
               mpOut.find(p->GetName()) != mpOut.end()
	      ){

		cout<<setw(2)<<i<<" partial "<<setw(15)<<p->GetName()<<" title "<<setw(15)<<p->GetTitle()<<" catbase = "<<setw(5)<<catbasenum<<endl;
		fCurrentEvent->addPartialEvent(new HPartialEvent(p->GetName(),p->GetTitle(),p->getBaseCat()));

		TObjArray* cats = p->getCategories( );

		//------------------------------------------------------
                // loop categories of partial event
                Int_t catnum = 0;
		for(Int_t j = 0;j < cats->GetSize(); j++ ) {
		    HCategory* cat = (HCategory*) cats->At(j);
		    if(cat) catnum = cat->getCategory( );
		    if(cat && (doAll || find(fCatNums.begin(),fCatNums.end(),catnum) != fCatNums.end() ) )
		    {
                        TString type = cat->GetName() ;

			fmCatNameToNum[cat->getClassName()] = catnum;
			fmCatNumToName[catnum] = cat->getClassName();


			if        (type == "HLinearCategory"){
			    cout<<"\t"<<setw(2)<<j<<" cat "<<setw(15)<<cat->GetName()<<" "<<setw(20)<<cat->getClassName()<<" catnum "<<setw(5)<<catnum<<endl;

                            HLinearCategory* catL = ((HLinearCategory*)cat);
			    const TObjArray* ar = catL->getData();
			    Int_t size = ar->GetSize();
                            HLinearCategory* catNew = new HLinearCategory(cat->getClassName(),size);
			    catNew->setDynamicObjects(catL->getDynamicObjects());
			    fCurrentEvent->addCategory(cat->getCategory( ),catNew,p->GetName());

			    fmCatNumToPointer [catnum] = catNew ;
                            fmCatNameToPointer[cat->getClassName()] = catNew ;

			} else if (type == "HMatrixCategory"){
                            HMatrixCategory* catM = ((HMatrixCategory*)cat);
			    TArrayI* ar = catM->getSizes();

			    cout<<"\t"<<setw(2)<<j<<" cat "<<setw(15)<<cat->GetName()<<" "<<setw(20)<<cat->getClassName()<<" catnum "<<setw(5)<<catnum
				<<" sizes: "<<ar->GetSize()<<" : "<<flush;
			    for(Int_t l=0; l < ar->GetSize(); l ++){
				cout<<ar->At(l)<<" "<<flush;
			    }
			    cout<<endl;



			    HMatrixCategory* catNew = new HMatrixCategory(cat->getClassName(),ar->GetSize(),ar->GetArray(),1.);
                            fCurrentEvent->addCategory(cat->getCategory( ),catNew,p->GetName());
 			    fmCatNumToPointer [catnum] = catNew ;
                            fmCatNameToPointer[cat->getClassName()] = catNew ;
			}
		    } // cat
		}
                //------------------------------------------------------
		mp[p->GetName()]=i;
	    } // new partial event
	} // p
    }
    //------------------------------------------------------
    cout<<"#########################################################"<<endl;

}


void HParticleTree::setOutputFile (TString fname,TString ftitle,TString fopt,Int_t fcomp)
{
    // fname = filename (including path)
    // if this function is called the output filename
    // will not be derived from Hades output (if exists)
    // or the data input

    fOutputFileName    = fname;
    fOutputTitle       = ftitle;
    fOutputOption      = fopt;
    fOutputCompression = fcomp;
}

Bool_t HParticleTree::makeTree(void)
{
    // Creates an output tree from the information in the event structure
    // and according to the splitLevel (see setSplitLevel() )
    TBranch *b = NULL;
    Bool_t r   = kFALSE;
    Text_t treeTitle[255];

    if (fTree) delete fTree;

    sprintf(treeTitle,"T.%i",gHades->getSplitLevel());

    if (fOutputFile) { fOutputFile->cd(); } // Make sure output file is current file

    fTree = new HTree("T",treeTitle);
    //gTree = fTree;    //???
    if (fCurrentEvent && fTree)
    {
	if (gHades->getSplitLevel() == 0) {
	    b = fTree->Branch("Event",
			      fCurrentEvent->ClassName(),
			      &fCurrentEvent,64000,0);
	} else {
	    b = fTree->Branch("Event.",
			      fCurrentEvent->ClassName(),
			      &fCurrentEvent,gHades->getTreeBufferSize(),99);
	    fCurrentEvent->makeBranch(b,fTree);
	}
	if (b) {
	    r = kTRUE;
	}
    }
    return r;
}

void HParticleTree::closeOutput()
{
    // close the output file and write
    // the Hades event structure
    if (fOutputFile)
    {
	fOutputFile->cd();

	if (fCurrentEvent)
	{
	    if (fCurrentEvent->InheritsFrom("HRecEvent")) { //!!!!
		Bool_t expand = ((HRecEvent *)fCurrentEvent)->hasExpandedStreamer();
		( (HRecEvent *)fCurrentEvent)->setExpandedStreamer(kTRUE);
		fCurrentEvent->Clear();
		fCurrentEvent->Write("Event");
		( (HRecEvent *)fCurrentEvent)->setExpandedStreamer(expand);
	    } else {
		fCurrentEvent->Clear();
		fCurrentEvent->Write("Event");
	    }
	}
	if(keeper) keeper ->Write();
	if(media)  media  ->Write();
	if(mdclayer)mdclayer->Write();

	Bool_t w = gHades->getWriteEvent();
        gHades->setWriteEvent(kFALSE);
        gHades->Write();
        gHades->setWriteEvent(w);

	fOutputFile->Write();
	delete fOutputFile;
        fOutputFile = NULL;
	fTree       = 0;
    }
}

void HParticleTree::recreateOutput(void)
{
    // Create new output file in case a split file is
    // needed. Takes care of the special Hades tree
    // features

    fCycleNumber ++;
    Bool_t createTree = (fTree != 0);

    closeOutput();

    TString fname = fOutputFileName;
    fname.ReplaceAll(".root","");

    fOutputFileName = Form("%s_%i.root",fname.Data(),fCycleNumber);

    fOutputFile = new TFile(fOutputFileName.Data(),fOutputOption.Data(),fOutputTitle.Data(),fOutputCompression);

    if(keeper) keeper ->Write();
    if(media)  media  ->Write();
    if(mdclayer)mdclayer->Write();

    if (createTree) { makeTree(); }

}

void HParticleTree::extractMdcSeg(HParticleCand* cand, Bool_t isSim,Int_t segInd1,Int_t& segInd2)
{
    // extract HMdcSeg. HMdcHit,HMdcCal1,HMdcClus,HMdcClusInf,
    // HMdcClusFit,HMdcWireFit are extracted for this segment
    // it enabled.


    HLocation loc;
    loc.set(3,0,0,0);

    HMatrixCategory* catOut = (HMatrixCategory*)fCurrentEvent->getCategory(catMdcSeg);
    HMdcSeg* seg = 0;
    if(isSim)
    {
	HMdcSegSim* hit1 = 0;
	HMdcSegSim* hit2 = 0;
	hit1 = HCategoryManager::getObject(hit1,catMdcSeg,segInd1);

	loc[0] = hit1->getSec();
	loc[1] = hit1->getIOSeg();
	loc[2] = ctMdcSeg[hit1->getSec()][hit1->getIOSeg()];

	hit2 =(HMdcSegSim*) catOut->getSlot(loc,&segInd2);
	new (hit2) HMdcSegSim(*hit1);

        seg = hit2;

    } else {

	HMdcSeg* hit1 = 0;
	HMdcSeg* hit2 = 0;
	hit1 = HCategoryManager::getObject(hit1,catMdcSeg,segInd1);

	loc[0] = hit1->getSec();
	loc[1] = hit1->getIOSeg();
	loc[2] = ctMdcSeg[hit1->getSec()][hit1->getIOSeg()];

	hit2 =(HMdcSeg*) catOut->getSlot(loc,&segInd2);
	new (hit2) HMdcSeg(*hit1);

	seg = hit2;
    }

    if(seg->getIOSeg()==0) cand->setInnerSegInd(segInd2);
    else                   cand->setOuterSegInd(segInd2);

    ctMdcSeg[seg->getSec()][seg->getIOSeg()]++;

    extractMdcCal1        (isSim,segInd1);
    extractMdcCal1FromClus(isSim,segInd1);


    //--------------------------------------------------------
    // input objects
    HMdcClus* clus         = HParticleTool::getMdcClus(segInd1);
    HMdcHit* mdchit0       = HParticleTool::getMdcHit(segInd1,0);
    HMdcHit* mdchit1       = HParticleTool::getMdcHit(segInd1,1);
    HMdcClusInf* clusinf0  = HParticleTool::getMdcClusInf(segInd1,0);
    HMdcClusInf* clusinf1  = HParticleTool::getMdcClusInf(segInd1,1);
    HMdcClusFit* clusfit   = HParticleTool::getMdcClusFit(segInd1);
    //--------------------------------------------------------

    //--------------------------------------------------------
    // output objects
    HCategory* wireFitCat = fCurrentEvent->getCategory(catMdcWireFit);
    HCategory* clusFitCat = fCurrentEvent->getCategory(catMdcClusFit);
    HCategory* clusInfCat = fCurrentEvent->getCategory(catMdcClusInf);
    HMatrixCategory* hitCat  = (HMatrixCategory*) fCurrentEvent->getCategory(catMdcHit);
    HMatrixCategory* clusCat = (HMatrixCategory*) fCurrentEvent->getCategory(catMdcClus);


    HMdcClus*    clus2      = 0;
    HMdcClusFit* clusfit2   = 0;
    HMdcClusInf* clusinf0_2 = 0;
    HMdcClusInf* clusinf1_2 = 0;
    HMdcHit* mdchit0_2      = 0;
    HMdcHit* mdchit1_2      = 0;
    Int_t clusInd2     = -1;
    Int_t clusfitInd2  = -1;
    Int_t clusinf0Ind2 = -1;
    Int_t clusinf1Ind2 = -1;
    Int_t mdchit0Ind2  = -1;
    Int_t mdchit1Ind2  = -1;
    //--------------------------------------------------------

    //--------------------------------------------------------
    // copy HMdcClus  (ownindex: need in HMdcClusFit and HMdcClus)
    if(clus && clusCat){
	HLocation loc;
        loc.set(3,0,0,0);
        loc[0] = clus->getSec();
        loc[1] = clus->getIOSeg();
        loc[2] = ctMdcClus[clus->getSec()][clus->getIOSeg()];

	clus2 =(HMdcClusSim*) clusCat->getSlot(loc,&clusInd2);
	if(isSim){
	    new (clus2) HMdcClusSim(*((HMdcClusSim*)clus));
	} else {
	    new (clus2) HMdcClus(*clus);
	}
	clus2->setOwnIndex(clusInd2);
        clus2->setSegIndex(segInd2);

	ctMdcClus[clus->getSec()][clus->getIOSeg()]++;
    }
    //--------------------------------------------------------

    //--------------------------------------------------------
    // copy HMdcClusFit  (need in HMdcClus index and first+last HMdcWireFit)
    // ownindex needed by HMdcClusInf
    if(clusfit && clusFitCat){
	if(isSim){
	    HMdcClusFitSim* clusfits2 = 0;
	    clusfits2 = HCategoryManager::newObjectCopy(clusfits2,(HMdcClusFitSim*)clusfit,clusFitCat,clusfitInd2);
            clusfit2  = clusfits2;
	} else {
	    clusfit2 = HCategoryManager::newObjectCopy(clusfit2,clusfit,clusFitCat,clusfitInd2);
	}
	clusfit2->setClustCatIndex(clusInd2);
    }
    //--------------------------------------------------------

    //--------------------------------------------------------
    // copy HMdcClusInf  (need in HMdcClus index and HMdcClusFit)
    // ownindex needed by HMdcHit
    if(clusinf0 && clusInfCat){
	if(isSim){
	    HMdcClusInfSim* clusinfs2 = 0;
	    clusinfs2 = HCategoryManager::newObjectCopy(clusinfs2,(HMdcClusInfSim*)clusinf0,clusInfCat,clusinf0Ind2);
	    clusinf0_2 = clusinfs2;
	} else {
	    clusinf0_2 = HCategoryManager::newObjectCopy(clusinf0_2,clusinf0,clusInfCat,clusinf0Ind2);
	}
	clusinf0_2->setClusIndex(clusInd2);
        clusinf0_2->setClusFitIndex(clusfitInd2);
    }
    if(clusinf1 && clusInfCat){
	if(isSim){
	    HMdcClusInfSim* clusinfs2 = 0;
	    clusinfs2 = HCategoryManager::newObjectCopy(clusinfs2,(HMdcClusInfSim*)clusinf1,clusInfCat,clusinf1Ind2);
	    clusinf1_2 = clusinfs2;
	} else {
	    clusinf1_2 = HCategoryManager::newObjectCopy(clusinf1_2,clusinf1,clusInfCat,clusinf1Ind2);
	}
	clusinf1_2->setClusIndex(clusInd2);
        clusinf1_2->setClusFitIndex(clusfitInd2);
    }
    //--------------------------------------------------------

    //--------------------------------------------------------
    // copy HMdcHit  (need in HMdcClusInf index)
    if( mdchit0 && hitCat){
	HLocation loc;
        loc.set(3,0,0,0);
        loc[0] = mdchit0->getSector();
        loc[1] = mdchit0->getModule();
        loc[2] = ctMdcHit[mdchit0->getSector()][mdchit0->getModule()];

	mdchit0_2 =(HMdcHit*) hitCat->getSlot(loc,&mdchit0Ind2);
	if(isSim){
	    new (mdchit0_2) HMdcHitSim(*((HMdcHitSim*)mdchit0));
	} else {
	    new (mdchit0_2) HMdcHit(*mdchit0);
	}

	mdchit0_2->setClusInfIndex(clusinf0Ind2);

	ctMdcHit[mdchit0->getSector()][mdchit0->getModule()]++;
    }
    if( mdchit1 && hitCat){
	HLocation loc;
        loc.set(3,0,0,0);
        loc[0] = mdchit1->getSector();
        loc[1] = mdchit1->getModule();
        loc[2] = ctMdcHit[mdchit1->getSector()][mdchit1->getModule()];

	mdchit1_2 =(HMdcHit*) hitCat->getSlot(loc,&mdchit1Ind2);
	if(isSim){
	    new (mdchit1_2) HMdcHitSim(*((HMdcHitSim*)mdchit1));
	} else {
	    new (mdchit1_2) HMdcHit(*mdchit1);
	}

	mdchit1_2->setClusInfIndex(clusinf1Ind2);

	ctMdcHit[mdchit1->getSector()][mdchit1->getModule()]++;
    }

    if(seg) {
        seg->setHitInd(0,mdchit0Ind2);
        seg->setHitInd(1,mdchit1Ind2);
    }
    //--------------------------------------------------------




    if(wireFitCat)
    {
	Int_t first = -1;
	Int_t last  = -1;

	if(clusfit) {
	    first = clusfit->getFirstWireFitInd();
	    last  = clusfit->getLastWireFitInd();
	}

	//--------------------------------------------------------
	// copy wirefit objects (indices : first and last needed by HMdcClusFit )
	TObjArray* awire = HParticleTool::getMdcWireFitSeg(segInd1);
        Int_t ind2   =  0;

	Int_t first2 = -1;
        Int_t last2  = -1;

	for(Int_t i = first; i <= last; i ++){

	    if(isSim){
		HMdcWireFitSim* hit1 = 0;
		HMdcWireFitSim* hit2 = 0;
		hit1 = HCategoryManager::getObject(hit1,catMdcWireFit,i);
		hit2 = HCategoryManager::newObjectCopy(hit2,hit1,wireFitCat,ind2);

	    } else {

		HMdcWireFit* hit1 = 0;
		HMdcWireFit* hit2 = 0;
		hit1 = HCategoryManager::getObject(hit1,catMdcWireFit,i);
		hit2 = HCategoryManager::newObjectCopy(hit2,hit1,wireFitCat,ind2);
	    }

	    if(i == first) first2 = ind2;
            last2 = ind2;
	}
        //--------------------------------------------------------

	if(clusfit2) {
	    clusfit2->setFirstWireFitInd(first2);
	    clusfit2->setLastWireFitInd(last2);
	}

	delete awire;
    }
}

void HParticleTree::extractMdcCal1(Bool_t isSim,Int_t segInd)
{
    // extract all HMdcCal1 objects for a given HMdcSeg

    HMatrixCategory* catOut = (HMatrixCategory*) fCurrentEvent->getCategory(catMdcCal1) ;
    if(catOut){

	TObjArray* ar = HParticleTool::getMdcCal1Seg(segInd);

	if(ar){

	    HLocation loc;
            loc.set(4,0,0,0,0);
	    Int_t n = ar->GetSize();
	    for(Int_t i = 0; i < n ; i++){
		HMdcCal1* hit1 = (HMdcCal1*)ar->At(i);
		if(hit1){
		    loc[0] = hit1 ->getSector();
                    loc[1] = hit1 ->getModule();
                    loc[2] = hit1 ->getLayer();
                    loc[3] = hit1 ->getCell();

		    if(!catOut->getObject(loc)){ // object does not exist
                        Int_t index=0;
			if(isSim){
			    HMdcCal1Sim* hit2 = 0;
			    hit2 =(HMdcCal1Sim*) catOut->getSlot(loc,&index);
			    new (hit2) HMdcCal1Sim(*((HMdcCal1Sim*)hit1));
			} else {
			    HMdcCal1* hit2 = 0;
			    hit2 =(HMdcCal1*) catOut->getSlot(loc,&index);
			    new (hit2) HMdcCal1(*hit1);
			}
		    }
		}
	    }
	}

        delete ar;
    }
}
void HParticleTree::extractMdcCal1FromClus(Bool_t isSim,Int_t segInd)
{
    // extract all HMdcCal1 objects for a given HMdcClus

    HMatrixCategory* catOut = (HMatrixCategory*) fCurrentEvent->getCategory(catMdcCal1) ;
    if(catOut){

	TObjArray* ar = HParticleTool::getMdcCal1Cluster(segInd);

	if(ar){

	    HLocation loc;
            loc.set(4,0,0,0,0);
	    Int_t n = ar->GetSize();
	    for(Int_t i = 0; i < n ; i++){
		HMdcCal1* hit1 = (HMdcCal1*)ar->At(i);
		if(hit1){
		    loc[0] = hit1 ->getSector();
                    loc[1] = hit1 ->getModule();
                    loc[2] = hit1 ->getLayer();
                    loc[3] = hit1 ->getCell();

		    if(!catOut->getObject(loc)){ // object does not exist
                        Int_t index=0;
			if(isSim){
			    HMdcCal1Sim* hit2 = 0;
			    hit2 =(HMdcCal1Sim*) catOut->getSlot(loc,&index);
			    new (hit2) HMdcCal1Sim(*((HMdcCal1Sim*)hit1));
			} else {
			    HMdcCal1* hit2 = 0;
			    hit2 =(HMdcCal1*) catOut->getSlot(loc,&index);
			    new (hit2) HMdcCal1(*hit1);
			}
		    }
		}
	    }
	}

        delete ar;
    }
}

Bool_t HParticleTree::doFullCopy(Cat_t cat)
{
    // returns kTRUE if the catgeory is set to full copy
    // else or if the catgeory is not known kFALSE.
    map<Int_t,Int_t>::iterator iter = fmCatNumToFullCopy.find(cat);
    if(iter != fmCatNumToFullCopy.end() ) {
	return (Bool_t)iter->second;
    }

    return kFALSE;
}

 hparticletree.cc:1
 hparticletree.cc:2
 hparticletree.cc:3
 hparticletree.cc:4
 hparticletree.cc:5
 hparticletree.cc:6
 hparticletree.cc:7
 hparticletree.cc:8
 hparticletree.cc:9
 hparticletree.cc:10
 hparticletree.cc:11
 hparticletree.cc:12
 hparticletree.cc:13
 hparticletree.cc:14
 hparticletree.cc:15
 hparticletree.cc:16
 hparticletree.cc:17
 hparticletree.cc:18
 hparticletree.cc:19
 hparticletree.cc:20
 hparticletree.cc:21
 hparticletree.cc:22
 hparticletree.cc:23
 hparticletree.cc:24
 hparticletree.cc:25
 hparticletree.cc:26
 hparticletree.cc:27
 hparticletree.cc:28
 hparticletree.cc:29
 hparticletree.cc:30
 hparticletree.cc:31
 hparticletree.cc:32
 hparticletree.cc:33
 hparticletree.cc:34
 hparticletree.cc:35
 hparticletree.cc:36
 hparticletree.cc:37
 hparticletree.cc:38
 hparticletree.cc:39
 hparticletree.cc:40
 hparticletree.cc:41
 hparticletree.cc:42
 hparticletree.cc:43
 hparticletree.cc:44
 hparticletree.cc:45
 hparticletree.cc:46
 hparticletree.cc:47
 hparticletree.cc:48
 hparticletree.cc:49
 hparticletree.cc:50
 hparticletree.cc:51
 hparticletree.cc:52
 hparticletree.cc:53
 hparticletree.cc:54
 hparticletree.cc:55
 hparticletree.cc:56
 hparticletree.cc:57
 hparticletree.cc:58
 hparticletree.cc:59
 hparticletree.cc:60
 hparticletree.cc:61
 hparticletree.cc:62
 hparticletree.cc:63
 hparticletree.cc:64
 hparticletree.cc:65
 hparticletree.cc:66
 hparticletree.cc:67
 hparticletree.cc:68
 hparticletree.cc:69
 hparticletree.cc:70
 hparticletree.cc:71
 hparticletree.cc:72
 hparticletree.cc:73
 hparticletree.cc:74
 hparticletree.cc:75
 hparticletree.cc:76
 hparticletree.cc:77
 hparticletree.cc:78
 hparticletree.cc:79
 hparticletree.cc:80
 hparticletree.cc:81
 hparticletree.cc:82
 hparticletree.cc:83
 hparticletree.cc:84
 hparticletree.cc:85
 hparticletree.cc:86
 hparticletree.cc:87
 hparticletree.cc:88
 hparticletree.cc:89
 hparticletree.cc:90
 hparticletree.cc:91
 hparticletree.cc:92
 hparticletree.cc:93
 hparticletree.cc:94
 hparticletree.cc:95
 hparticletree.cc:96
 hparticletree.cc:97
 hparticletree.cc:98
 hparticletree.cc:99
 hparticletree.cc:100
 hparticletree.cc:101
 hparticletree.cc:102
 hparticletree.cc:103
 hparticletree.cc:104
 hparticletree.cc:105
 hparticletree.cc:106
 hparticletree.cc:107
 hparticletree.cc:108
 hparticletree.cc:109
 hparticletree.cc:110
 hparticletree.cc:111
 hparticletree.cc:112
 hparticletree.cc:113
 hparticletree.cc:114
 hparticletree.cc:115
 hparticletree.cc:116
 hparticletree.cc:117
 hparticletree.cc:118
 hparticletree.cc:119
 hparticletree.cc:120
 hparticletree.cc:121
 hparticletree.cc:122
 hparticletree.cc:123
 hparticletree.cc:124
 hparticletree.cc:125
 hparticletree.cc:126
 hparticletree.cc:127
 hparticletree.cc:128
 hparticletree.cc:129
 hparticletree.cc:130
 hparticletree.cc:131
 hparticletree.cc:132
 hparticletree.cc:133
 hparticletree.cc:134
 hparticletree.cc:135
 hparticletree.cc:136
 hparticletree.cc:137
 hparticletree.cc:138
 hparticletree.cc:139
 hparticletree.cc:140
 hparticletree.cc:141
 hparticletree.cc:142
 hparticletree.cc:143
 hparticletree.cc:144
 hparticletree.cc:145
 hparticletree.cc:146
 hparticletree.cc:147
 hparticletree.cc:148
 hparticletree.cc:149
 hparticletree.cc:150
 hparticletree.cc:151
 hparticletree.cc:152
 hparticletree.cc:153
 hparticletree.cc:154
 hparticletree.cc:155
 hparticletree.cc:156
 hparticletree.cc:157
 hparticletree.cc:158
 hparticletree.cc:159
 hparticletree.cc:160
 hparticletree.cc:161
 hparticletree.cc:162
 hparticletree.cc:163
 hparticletree.cc:164
 hparticletree.cc:165
 hparticletree.cc:166
 hparticletree.cc:167
 hparticletree.cc:168
 hparticletree.cc:169
 hparticletree.cc:170
 hparticletree.cc:171
 hparticletree.cc:172
 hparticletree.cc:173
 hparticletree.cc:174
 hparticletree.cc:175
 hparticletree.cc:176
 hparticletree.cc:177
 hparticletree.cc:178
 hparticletree.cc:179
 hparticletree.cc:180
 hparticletree.cc:181
 hparticletree.cc:182
 hparticletree.cc:183
 hparticletree.cc:184
 hparticletree.cc:185
 hparticletree.cc:186
 hparticletree.cc:187
 hparticletree.cc:188
 hparticletree.cc:189
 hparticletree.cc:190
 hparticletree.cc:191
 hparticletree.cc:192
 hparticletree.cc:193
 hparticletree.cc:194
 hparticletree.cc:195
 hparticletree.cc:196
 hparticletree.cc:197
 hparticletree.cc:198
 hparticletree.cc:199
 hparticletree.cc:200
 hparticletree.cc:201
 hparticletree.cc:202
 hparticletree.cc:203
 hparticletree.cc:204
 hparticletree.cc:205
 hparticletree.cc:206
 hparticletree.cc:207
 hparticletree.cc:208
 hparticletree.cc:209
 hparticletree.cc:210
 hparticletree.cc:211
 hparticletree.cc:212
 hparticletree.cc:213
 hparticletree.cc:214
 hparticletree.cc:215
 hparticletree.cc:216
 hparticletree.cc:217
 hparticletree.cc:218
 hparticletree.cc:219
 hparticletree.cc:220
 hparticletree.cc:221
 hparticletree.cc:222
 hparticletree.cc:223
 hparticletree.cc:224
 hparticletree.cc:225
 hparticletree.cc:226
 hparticletree.cc:227
 hparticletree.cc:228
 hparticletree.cc:229
 hparticletree.cc:230
 hparticletree.cc:231
 hparticletree.cc:232
 hparticletree.cc:233
 hparticletree.cc:234
 hparticletree.cc:235
 hparticletree.cc:236
 hparticletree.cc:237
 hparticletree.cc:238
 hparticletree.cc:239
 hparticletree.cc:240
 hparticletree.cc:241
 hparticletree.cc:242
 hparticletree.cc:243
 hparticletree.cc:244
 hparticletree.cc:245
 hparticletree.cc:246
 hparticletree.cc:247
 hparticletree.cc:248
 hparticletree.cc:249
 hparticletree.cc:250
 hparticletree.cc:251
 hparticletree.cc:252
 hparticletree.cc:253
 hparticletree.cc:254
 hparticletree.cc:255
 hparticletree.cc:256
 hparticletree.cc:257
 hparticletree.cc:258
 hparticletree.cc:259
 hparticletree.cc:260
 hparticletree.cc:261
 hparticletree.cc:262
 hparticletree.cc:263
 hparticletree.cc:264
 hparticletree.cc:265
 hparticletree.cc:266
 hparticletree.cc:267
 hparticletree.cc:268
 hparticletree.cc:269
 hparticletree.cc:270
 hparticletree.cc:271
 hparticletree.cc:272
 hparticletree.cc:273
 hparticletree.cc:274
 hparticletree.cc:275
 hparticletree.cc:276
 hparticletree.cc:277
 hparticletree.cc:278
 hparticletree.cc:279
 hparticletree.cc:280
 hparticletree.cc:281
 hparticletree.cc:282
 hparticletree.cc:283
 hparticletree.cc:284
 hparticletree.cc:285
 hparticletree.cc:286
 hparticletree.cc:287
 hparticletree.cc:288
 hparticletree.cc:289
 hparticletree.cc:290
 hparticletree.cc:291
 hparticletree.cc:292
 hparticletree.cc:293
 hparticletree.cc:294
 hparticletree.cc:295
 hparticletree.cc:296
 hparticletree.cc:297
 hparticletree.cc:298
 hparticletree.cc:299
 hparticletree.cc:300
 hparticletree.cc:301
 hparticletree.cc:302
 hparticletree.cc:303
 hparticletree.cc:304
 hparticletree.cc:305
 hparticletree.cc:306
 hparticletree.cc:307
 hparticletree.cc:308
 hparticletree.cc:309
 hparticletree.cc:310
 hparticletree.cc:311
 hparticletree.cc:312
 hparticletree.cc:313
 hparticletree.cc:314
 hparticletree.cc:315
 hparticletree.cc:316
 hparticletree.cc:317
 hparticletree.cc:318
 hparticletree.cc:319
 hparticletree.cc:320
 hparticletree.cc:321
 hparticletree.cc:322
 hparticletree.cc:323
 hparticletree.cc:324
 hparticletree.cc:325
 hparticletree.cc:326
 hparticletree.cc:327
 hparticletree.cc:328
 hparticletree.cc:329
 hparticletree.cc:330
 hparticletree.cc:331
 hparticletree.cc:332
 hparticletree.cc:333
 hparticletree.cc:334
 hparticletree.cc:335
 hparticletree.cc:336
 hparticletree.cc:337
 hparticletree.cc:338
 hparticletree.cc:339
 hparticletree.cc:340
 hparticletree.cc:341
 hparticletree.cc:342
 hparticletree.cc:343
 hparticletree.cc:344
 hparticletree.cc:345
 hparticletree.cc:346
 hparticletree.cc:347
 hparticletree.cc:348
 hparticletree.cc:349
 hparticletree.cc:350
 hparticletree.cc:351
 hparticletree.cc:352
 hparticletree.cc:353
 hparticletree.cc:354
 hparticletree.cc:355
 hparticletree.cc:356
 hparticletree.cc:357
 hparticletree.cc:358
 hparticletree.cc:359
 hparticletree.cc:360
 hparticletree.cc:361
 hparticletree.cc:362
 hparticletree.cc:363
 hparticletree.cc:364
 hparticletree.cc:365
 hparticletree.cc:366
 hparticletree.cc:367
 hparticletree.cc:368
 hparticletree.cc:369
 hparticletree.cc:370
 hparticletree.cc:371
 hparticletree.cc:372
 hparticletree.cc:373
 hparticletree.cc:374
 hparticletree.cc:375
 hparticletree.cc:376
 hparticletree.cc:377
 hparticletree.cc:378
 hparticletree.cc:379
 hparticletree.cc:380
 hparticletree.cc:381
 hparticletree.cc:382
 hparticletree.cc:383
 hparticletree.cc:384
 hparticletree.cc:385
 hparticletree.cc:386
 hparticletree.cc:387
 hparticletree.cc:388
 hparticletree.cc:389
 hparticletree.cc:390
 hparticletree.cc:391
 hparticletree.cc:392
 hparticletree.cc:393
 hparticletree.cc:394
 hparticletree.cc:395
 hparticletree.cc:396
 hparticletree.cc:397
 hparticletree.cc:398
 hparticletree.cc:399
 hparticletree.cc:400
 hparticletree.cc:401
 hparticletree.cc:402
 hparticletree.cc:403
 hparticletree.cc:404
 hparticletree.cc:405
 hparticletree.cc:406
 hparticletree.cc:407
 hparticletree.cc:408
 hparticletree.cc:409
 hparticletree.cc:410
 hparticletree.cc:411
 hparticletree.cc:412
 hparticletree.cc:413
 hparticletree.cc:414
 hparticletree.cc:415
 hparticletree.cc:416
 hparticletree.cc:417
 hparticletree.cc:418
 hparticletree.cc:419
 hparticletree.cc:420
 hparticletree.cc:421
 hparticletree.cc:422
 hparticletree.cc:423
 hparticletree.cc:424
 hparticletree.cc:425
 hparticletree.cc:426
 hparticletree.cc:427
 hparticletree.cc:428
 hparticletree.cc:429
 hparticletree.cc:430
 hparticletree.cc:431
 hparticletree.cc:432
 hparticletree.cc:433
 hparticletree.cc:434
 hparticletree.cc:435
 hparticletree.cc:436
 hparticletree.cc:437
 hparticletree.cc:438
 hparticletree.cc:439
 hparticletree.cc:440
 hparticletree.cc:441
 hparticletree.cc:442
 hparticletree.cc:443
 hparticletree.cc:444
 hparticletree.cc:445
 hparticletree.cc:446
 hparticletree.cc:447
 hparticletree.cc:448
 hparticletree.cc:449
 hparticletree.cc:450
 hparticletree.cc:451
 hparticletree.cc:452
 hparticletree.cc:453
 hparticletree.cc:454
 hparticletree.cc:455
 hparticletree.cc:456
 hparticletree.cc:457
 hparticletree.cc:458
 hparticletree.cc:459
 hparticletree.cc:460
 hparticletree.cc:461
 hparticletree.cc:462
 hparticletree.cc:463
 hparticletree.cc:464
 hparticletree.cc:465
 hparticletree.cc:466
 hparticletree.cc:467
 hparticletree.cc:468
 hparticletree.cc:469
 hparticletree.cc:470
 hparticletree.cc:471
 hparticletree.cc:472
 hparticletree.cc:473
 hparticletree.cc:474
 hparticletree.cc:475
 hparticletree.cc:476
 hparticletree.cc:477
 hparticletree.cc:478
 hparticletree.cc:479
 hparticletree.cc:480
 hparticletree.cc:481
 hparticletree.cc:482
 hparticletree.cc:483
 hparticletree.cc:484
 hparticletree.cc:485
 hparticletree.cc:486
 hparticletree.cc:487
 hparticletree.cc:488
 hparticletree.cc:489
 hparticletree.cc:490
 hparticletree.cc:491
 hparticletree.cc:492
 hparticletree.cc:493
 hparticletree.cc:494
 hparticletree.cc:495
 hparticletree.cc:496
 hparticletree.cc:497
 hparticletree.cc:498
 hparticletree.cc:499
 hparticletree.cc:500
 hparticletree.cc:501
 hparticletree.cc:502
 hparticletree.cc:503
 hparticletree.cc:504
 hparticletree.cc:505
 hparticletree.cc:506
 hparticletree.cc:507
 hparticletree.cc:508
 hparticletree.cc:509
 hparticletree.cc:510
 hparticletree.cc:511
 hparticletree.cc:512
 hparticletree.cc:513
 hparticletree.cc:514
 hparticletree.cc:515
 hparticletree.cc:516
 hparticletree.cc:517
 hparticletree.cc:518
 hparticletree.cc:519
 hparticletree.cc:520
 hparticletree.cc:521
 hparticletree.cc:522
 hparticletree.cc:523
 hparticletree.cc:524
 hparticletree.cc:525
 hparticletree.cc:526
 hparticletree.cc:527
 hparticletree.cc:528
 hparticletree.cc:529
 hparticletree.cc:530
 hparticletree.cc:531
 hparticletree.cc:532
 hparticletree.cc:533
 hparticletree.cc:534
 hparticletree.cc:535
 hparticletree.cc:536
 hparticletree.cc:537
 hparticletree.cc:538
 hparticletree.cc:539
 hparticletree.cc:540
 hparticletree.cc:541
 hparticletree.cc:542
 hparticletree.cc:543
 hparticletree.cc:544
 hparticletree.cc:545
 hparticletree.cc:546
 hparticletree.cc:547
 hparticletree.cc:548
 hparticletree.cc:549
 hparticletree.cc:550
 hparticletree.cc:551
 hparticletree.cc:552
 hparticletree.cc:553
 hparticletree.cc:554
 hparticletree.cc:555
 hparticletree.cc:556
 hparticletree.cc:557
 hparticletree.cc:558
 hparticletree.cc:559
 hparticletree.cc:560
 hparticletree.cc:561
 hparticletree.cc:562
 hparticletree.cc:563
 hparticletree.cc:564
 hparticletree.cc:565
 hparticletree.cc:566
 hparticletree.cc:567
 hparticletree.cc:568
 hparticletree.cc:569
 hparticletree.cc:570
 hparticletree.cc:571
 hparticletree.cc:572
 hparticletree.cc:573
 hparticletree.cc:574
 hparticletree.cc:575
 hparticletree.cc:576
 hparticletree.cc:577
 hparticletree.cc:578
 hparticletree.cc:579
 hparticletree.cc:580
 hparticletree.cc:581
 hparticletree.cc:582
 hparticletree.cc:583
 hparticletree.cc:584
 hparticletree.cc:585
 hparticletree.cc:586
 hparticletree.cc:587
 hparticletree.cc:588
 hparticletree.cc:589
 hparticletree.cc:590
 hparticletree.cc:591
 hparticletree.cc:592
 hparticletree.cc:593
 hparticletree.cc:594
 hparticletree.cc:595
 hparticletree.cc:596
 hparticletree.cc:597
 hparticletree.cc:598
 hparticletree.cc:599
 hparticletree.cc:600
 hparticletree.cc:601
 hparticletree.cc:602
 hparticletree.cc:603
 hparticletree.cc:604
 hparticletree.cc:605
 hparticletree.cc:606
 hparticletree.cc:607
 hparticletree.cc:608
 hparticletree.cc:609
 hparticletree.cc:610
 hparticletree.cc:611
 hparticletree.cc:612
 hparticletree.cc:613
 hparticletree.cc:614
 hparticletree.cc:615
 hparticletree.cc:616
 hparticletree.cc:617
 hparticletree.cc:618
 hparticletree.cc:619
 hparticletree.cc:620
 hparticletree.cc:621
 hparticletree.cc:622
 hparticletree.cc:623
 hparticletree.cc:624
 hparticletree.cc:625
 hparticletree.cc:626
 hparticletree.cc:627
 hparticletree.cc:628
 hparticletree.cc:629
 hparticletree.cc:630
 hparticletree.cc:631
 hparticletree.cc:632
 hparticletree.cc:633
 hparticletree.cc:634
 hparticletree.cc:635
 hparticletree.cc:636
 hparticletree.cc:637
 hparticletree.cc:638
 hparticletree.cc:639
 hparticletree.cc:640
 hparticletree.cc:641
 hparticletree.cc:642
 hparticletree.cc:643
 hparticletree.cc:644
 hparticletree.cc:645
 hparticletree.cc:646
 hparticletree.cc:647
 hparticletree.cc:648
 hparticletree.cc:649
 hparticletree.cc:650
 hparticletree.cc:651
 hparticletree.cc:652
 hparticletree.cc:653
 hparticletree.cc:654
 hparticletree.cc:655
 hparticletree.cc:656
 hparticletree.cc:657
 hparticletree.cc:658
 hparticletree.cc:659
 hparticletree.cc:660
 hparticletree.cc:661
 hparticletree.cc:662
 hparticletree.cc:663
 hparticletree.cc:664
 hparticletree.cc:665
 hparticletree.cc:666
 hparticletree.cc:667
 hparticletree.cc:668
 hparticletree.cc:669
 hparticletree.cc:670
 hparticletree.cc:671
 hparticletree.cc:672
 hparticletree.cc:673
 hparticletree.cc:674
 hparticletree.cc:675
 hparticletree.cc:676
 hparticletree.cc:677
 hparticletree.cc:678
 hparticletree.cc:679
 hparticletree.cc:680
 hparticletree.cc:681
 hparticletree.cc:682
 hparticletree.cc:683
 hparticletree.cc:684
 hparticletree.cc:685
 hparticletree.cc:686
 hparticletree.cc:687
 hparticletree.cc:688
 hparticletree.cc:689
 hparticletree.cc:690
 hparticletree.cc:691
 hparticletree.cc:692
 hparticletree.cc:693
 hparticletree.cc:694
 hparticletree.cc:695
 hparticletree.cc:696
 hparticletree.cc:697
 hparticletree.cc:698
 hparticletree.cc:699
 hparticletree.cc:700
 hparticletree.cc:701
 hparticletree.cc:702
 hparticletree.cc:703
 hparticletree.cc:704
 hparticletree.cc:705
 hparticletree.cc:706
 hparticletree.cc:707
 hparticletree.cc:708
 hparticletree.cc:709
 hparticletree.cc:710
 hparticletree.cc:711
 hparticletree.cc:712
 hparticletree.cc:713
 hparticletree.cc:714
 hparticletree.cc:715
 hparticletree.cc:716
 hparticletree.cc:717
 hparticletree.cc:718
 hparticletree.cc:719
 hparticletree.cc:720
 hparticletree.cc:721
 hparticletree.cc:722
 hparticletree.cc:723
 hparticletree.cc:724
 hparticletree.cc:725
 hparticletree.cc:726
 hparticletree.cc:727
 hparticletree.cc:728
 hparticletree.cc:729
 hparticletree.cc:730
 hparticletree.cc:731
 hparticletree.cc:732
 hparticletree.cc:733
 hparticletree.cc:734
 hparticletree.cc:735
 hparticletree.cc:736
 hparticletree.cc:737
 hparticletree.cc:738
 hparticletree.cc:739
 hparticletree.cc:740
 hparticletree.cc:741
 hparticletree.cc:742
 hparticletree.cc:743
 hparticletree.cc:744
 hparticletree.cc:745
 hparticletree.cc:746
 hparticletree.cc:747
 hparticletree.cc:748
 hparticletree.cc:749
 hparticletree.cc:750
 hparticletree.cc:751
 hparticletree.cc:752
 hparticletree.cc:753
 hparticletree.cc:754
 hparticletree.cc:755
 hparticletree.cc:756
 hparticletree.cc:757
 hparticletree.cc:758
 hparticletree.cc:759
 hparticletree.cc:760
 hparticletree.cc:761
 hparticletree.cc:762
 hparticletree.cc:763
 hparticletree.cc:764
 hparticletree.cc:765
 hparticletree.cc:766
 hparticletree.cc:767
 hparticletree.cc:768
 hparticletree.cc:769
 hparticletree.cc:770
 hparticletree.cc:771
 hparticletree.cc:772
 hparticletree.cc:773
 hparticletree.cc:774
 hparticletree.cc:775
 hparticletree.cc:776
 hparticletree.cc:777
 hparticletree.cc:778
 hparticletree.cc:779
 hparticletree.cc:780
 hparticletree.cc:781
 hparticletree.cc:782
 hparticletree.cc:783
 hparticletree.cc:784
 hparticletree.cc:785
 hparticletree.cc:786
 hparticletree.cc:787
 hparticletree.cc:788
 hparticletree.cc:789
 hparticletree.cc:790
 hparticletree.cc:791
 hparticletree.cc:792
 hparticletree.cc:793
 hparticletree.cc:794
 hparticletree.cc:795
 hparticletree.cc:796
 hparticletree.cc:797
 hparticletree.cc:798
 hparticletree.cc:799
 hparticletree.cc:800
 hparticletree.cc:801
 hparticletree.cc:802
 hparticletree.cc:803
 hparticletree.cc:804
 hparticletree.cc:805
 hparticletree.cc:806
 hparticletree.cc:807
 hparticletree.cc:808
 hparticletree.cc:809
 hparticletree.cc:810
 hparticletree.cc:811
 hparticletree.cc:812
 hparticletree.cc:813
 hparticletree.cc:814
 hparticletree.cc:815
 hparticletree.cc:816
 hparticletree.cc:817
 hparticletree.cc:818
 hparticletree.cc:819
 hparticletree.cc:820
 hparticletree.cc:821
 hparticletree.cc:822
 hparticletree.cc:823
 hparticletree.cc:824
 hparticletree.cc:825
 hparticletree.cc:826
 hparticletree.cc:827
 hparticletree.cc:828
 hparticletree.cc:829
 hparticletree.cc:830
 hparticletree.cc:831
 hparticletree.cc:832
 hparticletree.cc:833
 hparticletree.cc:834
 hparticletree.cc:835
 hparticletree.cc:836
 hparticletree.cc:837
 hparticletree.cc:838
 hparticletree.cc:839
 hparticletree.cc:840
 hparticletree.cc:841
 hparticletree.cc:842
 hparticletree.cc:843
 hparticletree.cc:844
 hparticletree.cc:845
 hparticletree.cc:846
 hparticletree.cc:847
 hparticletree.cc:848
 hparticletree.cc:849
 hparticletree.cc:850
 hparticletree.cc:851
 hparticletree.cc:852
 hparticletree.cc:853
 hparticletree.cc:854
 hparticletree.cc:855
 hparticletree.cc:856
 hparticletree.cc:857
 hparticletree.cc:858
 hparticletree.cc:859
 hparticletree.cc:860
 hparticletree.cc:861
 hparticletree.cc:862
 hparticletree.cc:863
 hparticletree.cc:864
 hparticletree.cc:865
 hparticletree.cc:866
 hparticletree.cc:867
 hparticletree.cc:868
 hparticletree.cc:869
 hparticletree.cc:870
 hparticletree.cc:871
 hparticletree.cc:872
 hparticletree.cc:873
 hparticletree.cc:874
 hparticletree.cc:875
 hparticletree.cc:876
 hparticletree.cc:877
 hparticletree.cc:878
 hparticletree.cc:879
 hparticletree.cc:880
 hparticletree.cc:881
 hparticletree.cc:882
 hparticletree.cc:883
 hparticletree.cc:884
 hparticletree.cc:885
 hparticletree.cc:886
 hparticletree.cc:887
 hparticletree.cc:888
 hparticletree.cc:889
 hparticletree.cc:890
 hparticletree.cc:891
 hparticletree.cc:892
 hparticletree.cc:893
 hparticletree.cc:894
 hparticletree.cc:895
 hparticletree.cc:896
 hparticletree.cc:897
 hparticletree.cc:898
 hparticletree.cc:899
 hparticletree.cc:900
 hparticletree.cc:901
 hparticletree.cc:902
 hparticletree.cc:903
 hparticletree.cc:904
 hparticletree.cc:905
 hparticletree.cc:906
 hparticletree.cc:907
 hparticletree.cc:908
 hparticletree.cc:909
 hparticletree.cc:910
 hparticletree.cc:911
 hparticletree.cc:912
 hparticletree.cc:913
 hparticletree.cc:914
 hparticletree.cc:915
 hparticletree.cc:916
 hparticletree.cc:917
 hparticletree.cc:918
 hparticletree.cc:919
 hparticletree.cc:920
 hparticletree.cc:921
 hparticletree.cc:922
 hparticletree.cc:923
 hparticletree.cc:924
 hparticletree.cc:925
 hparticletree.cc:926
 hparticletree.cc:927
 hparticletree.cc:928
 hparticletree.cc:929
 hparticletree.cc:930
 hparticletree.cc:931
 hparticletree.cc:932
 hparticletree.cc:933
 hparticletree.cc:934
 hparticletree.cc:935
 hparticletree.cc:936
 hparticletree.cc:937
 hparticletree.cc:938
 hparticletree.cc:939
 hparticletree.cc:940
 hparticletree.cc:941
 hparticletree.cc:942
 hparticletree.cc:943
 hparticletree.cc:944
 hparticletree.cc:945
 hparticletree.cc:946
 hparticletree.cc:947
 hparticletree.cc:948
 hparticletree.cc:949
 hparticletree.cc:950
 hparticletree.cc:951
 hparticletree.cc:952
 hparticletree.cc:953
 hparticletree.cc:954
 hparticletree.cc:955
 hparticletree.cc:956
 hparticletree.cc:957
 hparticletree.cc:958
 hparticletree.cc:959
 hparticletree.cc:960
 hparticletree.cc:961
 hparticletree.cc:962
 hparticletree.cc:963
 hparticletree.cc:964
 hparticletree.cc:965
 hparticletree.cc:966
 hparticletree.cc:967
 hparticletree.cc:968
 hparticletree.cc:969
 hparticletree.cc:970
 hparticletree.cc:971
 hparticletree.cc:972
 hparticletree.cc:973
 hparticletree.cc:974
 hparticletree.cc:975
 hparticletree.cc:976
 hparticletree.cc:977
 hparticletree.cc:978
 hparticletree.cc:979
 hparticletree.cc:980
 hparticletree.cc:981
 hparticletree.cc:982
 hparticletree.cc:983
 hparticletree.cc:984
 hparticletree.cc:985
 hparticletree.cc:986
 hparticletree.cc:987
 hparticletree.cc:988
 hparticletree.cc:989
 hparticletree.cc:990
 hparticletree.cc:991
 hparticletree.cc:992
 hparticletree.cc:993
 hparticletree.cc:994
 hparticletree.cc:995
 hparticletree.cc:996
 hparticletree.cc:997
 hparticletree.cc:998
 hparticletree.cc:999
 hparticletree.cc:1000
 hparticletree.cc:1001
 hparticletree.cc:1002
 hparticletree.cc:1003
 hparticletree.cc:1004
 hparticletree.cc:1005
 hparticletree.cc:1006
 hparticletree.cc:1007
 hparticletree.cc:1008
 hparticletree.cc:1009
 hparticletree.cc:1010
 hparticletree.cc:1011
 hparticletree.cc:1012
 hparticletree.cc:1013
 hparticletree.cc:1014
 hparticletree.cc:1015
 hparticletree.cc:1016
 hparticletree.cc:1017
 hparticletree.cc:1018
 hparticletree.cc:1019
 hparticletree.cc:1020
 hparticletree.cc:1021
 hparticletree.cc:1022
 hparticletree.cc:1023
 hparticletree.cc:1024
 hparticletree.cc:1025
 hparticletree.cc:1026
 hparticletree.cc:1027
 hparticletree.cc:1028
 hparticletree.cc:1029
 hparticletree.cc:1030
 hparticletree.cc:1031
 hparticletree.cc:1032
 hparticletree.cc:1033
 hparticletree.cc:1034
 hparticletree.cc:1035
 hparticletree.cc:1036
 hparticletree.cc:1037
 hparticletree.cc:1038
 hparticletree.cc:1039
 hparticletree.cc:1040
 hparticletree.cc:1041
 hparticletree.cc:1042
 hparticletree.cc:1043
 hparticletree.cc:1044
 hparticletree.cc:1045
 hparticletree.cc:1046
 hparticletree.cc:1047
 hparticletree.cc:1048
 hparticletree.cc:1049
 hparticletree.cc:1050
 hparticletree.cc:1051
 hparticletree.cc:1052
 hparticletree.cc:1053
 hparticletree.cc:1054
 hparticletree.cc:1055
 hparticletree.cc:1056
 hparticletree.cc:1057
 hparticletree.cc:1058
 hparticletree.cc:1059
 hparticletree.cc:1060
 hparticletree.cc:1061
 hparticletree.cc:1062
 hparticletree.cc:1063
 hparticletree.cc:1064
 hparticletree.cc:1065
 hparticletree.cc:1066
 hparticletree.cc:1067
 hparticletree.cc:1068
 hparticletree.cc:1069
 hparticletree.cc:1070
 hparticletree.cc:1071
 hparticletree.cc:1072
 hparticletree.cc:1073
 hparticletree.cc:1074
 hparticletree.cc:1075
 hparticletree.cc:1076
 hparticletree.cc:1077
 hparticletree.cc:1078
 hparticletree.cc:1079
 hparticletree.cc:1080
 hparticletree.cc:1081
 hparticletree.cc:1082
 hparticletree.cc:1083
 hparticletree.cc:1084
 hparticletree.cc:1085
 hparticletree.cc:1086
 hparticletree.cc:1087
 hparticletree.cc:1088
 hparticletree.cc:1089
 hparticletree.cc:1090
 hparticletree.cc:1091
 hparticletree.cc:1092
 hparticletree.cc:1093
 hparticletree.cc:1094
 hparticletree.cc:1095
 hparticletree.cc:1096
 hparticletree.cc:1097
 hparticletree.cc:1098
 hparticletree.cc:1099
 hparticletree.cc:1100
 hparticletree.cc:1101
 hparticletree.cc:1102
 hparticletree.cc:1103
 hparticletree.cc:1104
 hparticletree.cc:1105
 hparticletree.cc:1106
 hparticletree.cc:1107
 hparticletree.cc:1108
 hparticletree.cc:1109
 hparticletree.cc:1110
 hparticletree.cc:1111
 hparticletree.cc:1112
 hparticletree.cc:1113
 hparticletree.cc:1114
 hparticletree.cc:1115
 hparticletree.cc:1116
 hparticletree.cc:1117
 hparticletree.cc:1118
 hparticletree.cc:1119
 hparticletree.cc:1120
 hparticletree.cc:1121
 hparticletree.cc:1122
 hparticletree.cc:1123
 hparticletree.cc:1124
 hparticletree.cc:1125
 hparticletree.cc:1126
 hparticletree.cc:1127
 hparticletree.cc:1128
 hparticletree.cc:1129
 hparticletree.cc:1130
 hparticletree.cc:1131
 hparticletree.cc:1132
 hparticletree.cc:1133
 hparticletree.cc:1134
 hparticletree.cc:1135
 hparticletree.cc:1136
 hparticletree.cc:1137
 hparticletree.cc:1138
 hparticletree.cc:1139
 hparticletree.cc:1140
 hparticletree.cc:1141
 hparticletree.cc:1142
 hparticletree.cc:1143
 hparticletree.cc:1144
 hparticletree.cc:1145
 hparticletree.cc:1146
 hparticletree.cc:1147
 hparticletree.cc:1148
 hparticletree.cc:1149
 hparticletree.cc:1150
 hparticletree.cc:1151
 hparticletree.cc:1152
 hparticletree.cc:1153
 hparticletree.cc:1154
 hparticletree.cc:1155
 hparticletree.cc:1156
 hparticletree.cc:1157
 hparticletree.cc:1158
 hparticletree.cc:1159
 hparticletree.cc:1160
 hparticletree.cc:1161
 hparticletree.cc:1162
 hparticletree.cc:1163
 hparticletree.cc:1164
 hparticletree.cc:1165
 hparticletree.cc:1166
 hparticletree.cc:1167
 hparticletree.cc:1168
 hparticletree.cc:1169
 hparticletree.cc:1170
 hparticletree.cc:1171
 hparticletree.cc:1172
 hparticletree.cc:1173
 hparticletree.cc:1174
 hparticletree.cc:1175
 hparticletree.cc:1176
 hparticletree.cc:1177
 hparticletree.cc:1178
 hparticletree.cc:1179
 hparticletree.cc:1180
 hparticletree.cc:1181
 hparticletree.cc:1182
 hparticletree.cc:1183
 hparticletree.cc:1184
 hparticletree.cc:1185
 hparticletree.cc:1186
 hparticletree.cc:1187
 hparticletree.cc:1188
 hparticletree.cc:1189
 hparticletree.cc:1190
 hparticletree.cc:1191
 hparticletree.cc:1192
 hparticletree.cc:1193
 hparticletree.cc:1194
 hparticletree.cc:1195
 hparticletree.cc:1196
 hparticletree.cc:1197
 hparticletree.cc:1198
 hparticletree.cc:1199
 hparticletree.cc:1200
 hparticletree.cc:1201
 hparticletree.cc:1202
 hparticletree.cc:1203
 hparticletree.cc:1204
 hparticletree.cc:1205
 hparticletree.cc:1206
 hparticletree.cc:1207
 hparticletree.cc:1208
 hparticletree.cc:1209
 hparticletree.cc:1210
 hparticletree.cc:1211
 hparticletree.cc:1212
 hparticletree.cc:1213
 hparticletree.cc:1214
 hparticletree.cc:1215
 hparticletree.cc:1216
 hparticletree.cc:1217
 hparticletree.cc:1218
 hparticletree.cc:1219
 hparticletree.cc:1220
 hparticletree.cc:1221
 hparticletree.cc:1222
 hparticletree.cc:1223
 hparticletree.cc:1224
 hparticletree.cc:1225
 hparticletree.cc:1226
 hparticletree.cc:1227
 hparticletree.cc:1228
 hparticletree.cc:1229
 hparticletree.cc:1230
 hparticletree.cc:1231
 hparticletree.cc:1232
 hparticletree.cc:1233
 hparticletree.cc:1234
 hparticletree.cc:1235
 hparticletree.cc:1236
 hparticletree.cc:1237
 hparticletree.cc:1238
 hparticletree.cc:1239
 hparticletree.cc:1240
 hparticletree.cc:1241
 hparticletree.cc:1242
 hparticletree.cc:1243
 hparticletree.cc:1244
 hparticletree.cc:1245
 hparticletree.cc:1246
 hparticletree.cc:1247
 hparticletree.cc:1248
 hparticletree.cc:1249
 hparticletree.cc:1250
 hparticletree.cc:1251
 hparticletree.cc:1252
 hparticletree.cc:1253
 hparticletree.cc:1254
 hparticletree.cc:1255
 hparticletree.cc:1256
 hparticletree.cc:1257
 hparticletree.cc:1258
 hparticletree.cc:1259
 hparticletree.cc:1260
 hparticletree.cc:1261
 hparticletree.cc:1262
 hparticletree.cc:1263
 hparticletree.cc:1264
 hparticletree.cc:1265
 hparticletree.cc:1266
 hparticletree.cc:1267
 hparticletree.cc:1268
 hparticletree.cc:1269
 hparticletree.cc:1270
 hparticletree.cc:1271
 hparticletree.cc:1272
 hparticletree.cc:1273
 hparticletree.cc:1274
 hparticletree.cc:1275
 hparticletree.cc:1276
 hparticletree.cc:1277
 hparticletree.cc:1278
 hparticletree.cc:1279
 hparticletree.cc:1280
 hparticletree.cc:1281
 hparticletree.cc:1282
 hparticletree.cc:1283
 hparticletree.cc:1284
 hparticletree.cc:1285
 hparticletree.cc:1286
 hparticletree.cc:1287
 hparticletree.cc:1288
 hparticletree.cc:1289
 hparticletree.cc:1290
 hparticletree.cc:1291
 hparticletree.cc:1292
 hparticletree.cc:1293
 hparticletree.cc:1294
 hparticletree.cc:1295
 hparticletree.cc:1296
 hparticletree.cc:1297
 hparticletree.cc:1298
 hparticletree.cc:1299
 hparticletree.cc:1300
 hparticletree.cc:1301
 hparticletree.cc:1302
 hparticletree.cc:1303
 hparticletree.cc:1304
 hparticletree.cc:1305
 hparticletree.cc:1306
 hparticletree.cc:1307
 hparticletree.cc:1308
 hparticletree.cc:1309
 hparticletree.cc:1310
 hparticletree.cc:1311
 hparticletree.cc:1312
 hparticletree.cc:1313
 hparticletree.cc:1314
 hparticletree.cc:1315
 hparticletree.cc:1316
 hparticletree.cc:1317
 hparticletree.cc:1318
 hparticletree.cc:1319
 hparticletree.cc:1320
 hparticletree.cc:1321
 hparticletree.cc:1322
 hparticletree.cc:1323
 hparticletree.cc:1324
 hparticletree.cc:1325
 hparticletree.cc:1326
 hparticletree.cc:1327
 hparticletree.cc:1328
 hparticletree.cc:1329
 hparticletree.cc:1330
 hparticletree.cc:1331
 hparticletree.cc:1332
 hparticletree.cc:1333
 hparticletree.cc:1334
 hparticletree.cc:1335
 hparticletree.cc:1336
 hparticletree.cc:1337
 hparticletree.cc:1338
 hparticletree.cc:1339
 hparticletree.cc:1340
 hparticletree.cc:1341
 hparticletree.cc:1342
 hparticletree.cc:1343
 hparticletree.cc:1344
 hparticletree.cc:1345
 hparticletree.cc:1346
 hparticletree.cc:1347
 hparticletree.cc:1348
 hparticletree.cc:1349
 hparticletree.cc:1350
 hparticletree.cc:1351
 hparticletree.cc:1352
 hparticletree.cc:1353
 hparticletree.cc:1354
 hparticletree.cc:1355
 hparticletree.cc:1356
 hparticletree.cc:1357
 hparticletree.cc:1358
 hparticletree.cc:1359
 hparticletree.cc:1360
 hparticletree.cc:1361
 hparticletree.cc:1362
 hparticletree.cc:1363
 hparticletree.cc:1364
 hparticletree.cc:1365
 hparticletree.cc:1366
 hparticletree.cc:1367
 hparticletree.cc:1368
 hparticletree.cc:1369
 hparticletree.cc:1370
 hparticletree.cc:1371
 hparticletree.cc:1372
 hparticletree.cc:1373
 hparticletree.cc:1374
 hparticletree.cc:1375
 hparticletree.cc:1376
 hparticletree.cc:1377
 hparticletree.cc:1378
 hparticletree.cc:1379
 hparticletree.cc:1380
 hparticletree.cc:1381
 hparticletree.cc:1382
 hparticletree.cc:1383
 hparticletree.cc:1384
 hparticletree.cc:1385
 hparticletree.cc:1386
 hparticletree.cc:1387
 hparticletree.cc:1388
 hparticletree.cc:1389
 hparticletree.cc:1390
 hparticletree.cc:1391
 hparticletree.cc:1392
 hparticletree.cc:1393
 hparticletree.cc:1394
 hparticletree.cc:1395
 hparticletree.cc:1396
 hparticletree.cc:1397
 hparticletree.cc:1398
 hparticletree.cc:1399
 hparticletree.cc:1400
 hparticletree.cc:1401
 hparticletree.cc:1402
 hparticletree.cc:1403
 hparticletree.cc:1404
 hparticletree.cc:1405
 hparticletree.cc:1406
 hparticletree.cc:1407
 hparticletree.cc:1408
 hparticletree.cc:1409
 hparticletree.cc:1410
 hparticletree.cc:1411
 hparticletree.cc:1412
 hparticletree.cc:1413
 hparticletree.cc:1414
 hparticletree.cc:1415
 hparticletree.cc:1416
 hparticletree.cc:1417
 hparticletree.cc:1418
 hparticletree.cc:1419
 hparticletree.cc:1420
 hparticletree.cc:1421
 hparticletree.cc:1422
 hparticletree.cc:1423
 hparticletree.cc:1424
 hparticletree.cc:1425
 hparticletree.cc:1426
 hparticletree.cc:1427
 hparticletree.cc:1428
 hparticletree.cc:1429
 hparticletree.cc:1430
 hparticletree.cc:1431
 hparticletree.cc:1432
 hparticletree.cc:1433
 hparticletree.cc:1434
 hparticletree.cc:1435
 hparticletree.cc:1436
 hparticletree.cc:1437
 hparticletree.cc:1438
 hparticletree.cc:1439
 hparticletree.cc:1440
 hparticletree.cc:1441
 hparticletree.cc:1442
 hparticletree.cc:1443
 hparticletree.cc:1444
 hparticletree.cc:1445
 hparticletree.cc:1446
 hparticletree.cc:1447
 hparticletree.cc:1448
 hparticletree.cc:1449
 hparticletree.cc:1450
 hparticletree.cc:1451
 hparticletree.cc:1452
 hparticletree.cc:1453
 hparticletree.cc:1454
 hparticletree.cc:1455
 hparticletree.cc:1456
 hparticletree.cc:1457
 hparticletree.cc:1458
 hparticletree.cc:1459
 hparticletree.cc:1460
 hparticletree.cc:1461
 hparticletree.cc:1462
 hparticletree.cc:1463
 hparticletree.cc:1464
 hparticletree.cc:1465
 hparticletree.cc:1466
 hparticletree.cc:1467
 hparticletree.cc:1468
 hparticletree.cc:1469
 hparticletree.cc:1470
 hparticletree.cc:1471
 hparticletree.cc:1472
 hparticletree.cc:1473
 hparticletree.cc:1474
 hparticletree.cc:1475
 hparticletree.cc:1476
 hparticletree.cc:1477
 hparticletree.cc:1478
 hparticletree.cc:1479
 hparticletree.cc:1480
 hparticletree.cc:1481
 hparticletree.cc:1482
 hparticletree.cc:1483
 hparticletree.cc:1484
 hparticletree.cc:1485
 hparticletree.cc:1486
 hparticletree.cc:1487
 hparticletree.cc:1488
 hparticletree.cc:1489
 hparticletree.cc:1490
 hparticletree.cc:1491
 hparticletree.cc:1492
 hparticletree.cc:1493
 hparticletree.cc:1494
 hparticletree.cc:1495
 hparticletree.cc:1496
 hparticletree.cc:1497
 hparticletree.cc:1498
 hparticletree.cc:1499
 hparticletree.cc:1500
 hparticletree.cc:1501
 hparticletree.cc:1502
 hparticletree.cc:1503
 hparticletree.cc:1504
 hparticletree.cc:1505
 hparticletree.cc:1506
 hparticletree.cc:1507
 hparticletree.cc:1508
 hparticletree.cc:1509
 hparticletree.cc:1510
 hparticletree.cc:1511
 hparticletree.cc:1512
 hparticletree.cc:1513
 hparticletree.cc:1514
 hparticletree.cc:1515
 hparticletree.cc:1516
 hparticletree.cc:1517
 hparticletree.cc:1518
 hparticletree.cc:1519
 hparticletree.cc:1520
 hparticletree.cc:1521
 hparticletree.cc:1522
 hparticletree.cc:1523
 hparticletree.cc:1524
 hparticletree.cc:1525
 hparticletree.cc:1526
 hparticletree.cc:1527
 hparticletree.cc:1528
 hparticletree.cc:1529
 hparticletree.cc:1530
 hparticletree.cc:1531
 hparticletree.cc:1532
 hparticletree.cc:1533
 hparticletree.cc:1534
 hparticletree.cc:1535
 hparticletree.cc:1536
 hparticletree.cc:1537
 hparticletree.cc:1538
 hparticletree.cc:1539
 hparticletree.cc:1540
 hparticletree.cc:1541
 hparticletree.cc:1542
 hparticletree.cc:1543
 hparticletree.cc:1544
 hparticletree.cc:1545
 hparticletree.cc:1546
 hparticletree.cc:1547
 hparticletree.cc:1548
 hparticletree.cc:1549
 hparticletree.cc:1550
 hparticletree.cc:1551
 hparticletree.cc:1552
 hparticletree.cc:1553
 hparticletree.cc:1554
 hparticletree.cc:1555
 hparticletree.cc:1556
 hparticletree.cc:1557
 hparticletree.cc:1558
 hparticletree.cc:1559
 hparticletree.cc:1560
 hparticletree.cc:1561
 hparticletree.cc:1562
 hparticletree.cc:1563
 hparticletree.cc:1564
 hparticletree.cc:1565
 hparticletree.cc:1566
 hparticletree.cc:1567
 hparticletree.cc:1568
 hparticletree.cc:1569
 hparticletree.cc:1570
 hparticletree.cc:1571
 hparticletree.cc:1572
 hparticletree.cc:1573
 hparticletree.cc:1574
 hparticletree.cc:1575
 hparticletree.cc:1576
 hparticletree.cc:1577
 hparticletree.cc:1578
 hparticletree.cc:1579
 hparticletree.cc:1580
 hparticletree.cc:1581
 hparticletree.cc:1582
 hparticletree.cc:1583
 hparticletree.cc:1584
 hparticletree.cc:1585
 hparticletree.cc:1586
 hparticletree.cc:1587
 hparticletree.cc:1588
 hparticletree.cc:1589
 hparticletree.cc:1590
 hparticletree.cc:1591
 hparticletree.cc:1592
 hparticletree.cc:1593
 hparticletree.cc:1594
 hparticletree.cc:1595
 hparticletree.cc:1596
 hparticletree.cc:1597
 hparticletree.cc:1598
 hparticletree.cc:1599
 hparticletree.cc:1600
 hparticletree.cc:1601
 hparticletree.cc:1602
 hparticletree.cc:1603
 hparticletree.cc:1604
 hparticletree.cc:1605
 hparticletree.cc:1606
 hparticletree.cc:1607
 hparticletree.cc:1608
 hparticletree.cc:1609
 hparticletree.cc:1610
 hparticletree.cc:1611
 hparticletree.cc:1612
 hparticletree.cc:1613
 hparticletree.cc:1614
 hparticletree.cc:1615
 hparticletree.cc:1616
 hparticletree.cc:1617
 hparticletree.cc:1618
 hparticletree.cc:1619
 hparticletree.cc:1620
 hparticletree.cc:1621
 hparticletree.cc:1622
 hparticletree.cc:1623
 hparticletree.cc:1624
 hparticletree.cc:1625
 hparticletree.cc:1626
 hparticletree.cc:1627
 hparticletree.cc:1628
 hparticletree.cc:1629
 hparticletree.cc:1630
 hparticletree.cc:1631
 hparticletree.cc:1632
 hparticletree.cc:1633
 hparticletree.cc:1634
 hparticletree.cc:1635
 hparticletree.cc:1636
 hparticletree.cc:1637
 hparticletree.cc:1638
 hparticletree.cc:1639
 hparticletree.cc:1640
 hparticletree.cc:1641
 hparticletree.cc:1642
 hparticletree.cc:1643
 hparticletree.cc:1644
 hparticletree.cc:1645
 hparticletree.cc:1646
 hparticletree.cc:1647
 hparticletree.cc:1648
 hparticletree.cc:1649
 hparticletree.cc:1650
 hparticletree.cc:1651
 hparticletree.cc:1652
 hparticletree.cc:1653
 hparticletree.cc:1654
 hparticletree.cc:1655
 hparticletree.cc:1656
 hparticletree.cc:1657
 hparticletree.cc:1658
 hparticletree.cc:1659
 hparticletree.cc:1660
 hparticletree.cc:1661
 hparticletree.cc:1662
 hparticletree.cc:1663
 hparticletree.cc:1664
 hparticletree.cc:1665
 hparticletree.cc:1666
 hparticletree.cc:1667
 hparticletree.cc:1668
 hparticletree.cc:1669
 hparticletree.cc:1670
 hparticletree.cc:1671
 hparticletree.cc:1672
 hparticletree.cc:1673
 hparticletree.cc:1674
 hparticletree.cc:1675
 hparticletree.cc:1676
 hparticletree.cc:1677
 hparticletree.cc:1678
 hparticletree.cc:1679
 hparticletree.cc:1680
 hparticletree.cc:1681
 hparticletree.cc:1682
 hparticletree.cc:1683
 hparticletree.cc:1684
 hparticletree.cc:1685
 hparticletree.cc:1686
 hparticletree.cc:1687
 hparticletree.cc:1688
 hparticletree.cc:1689
 hparticletree.cc:1690
 hparticletree.cc:1691
 hparticletree.cc:1692
 hparticletree.cc:1693
 hparticletree.cc:1694
 hparticletree.cc:1695
 hparticletree.cc:1696
 hparticletree.cc:1697
 hparticletree.cc:1698
 hparticletree.cc:1699
 hparticletree.cc:1700
 hparticletree.cc:1701
 hparticletree.cc:1702
 hparticletree.cc:1703
 hparticletree.cc:1704
 hparticletree.cc:1705
 hparticletree.cc:1706
 hparticletree.cc:1707
 hparticletree.cc:1708
 hparticletree.cc:1709
 hparticletree.cc:1710
 hparticletree.cc:1711
 hparticletree.cc:1712
 hparticletree.cc:1713
 hparticletree.cc:1714
 hparticletree.cc:1715
 hparticletree.cc:1716
 hparticletree.cc:1717
 hparticletree.cc:1718
 hparticletree.cc:1719
 hparticletree.cc:1720
 hparticletree.cc:1721
 hparticletree.cc:1722
 hparticletree.cc:1723
 hparticletree.cc:1724
 hparticletree.cc:1725
 hparticletree.cc:1726
 hparticletree.cc:1727
 hparticletree.cc:1728
 hparticletree.cc:1729
 hparticletree.cc:1730
 hparticletree.cc:1731
 hparticletree.cc:1732
 hparticletree.cc:1733
 hparticletree.cc:1734
 hparticletree.cc:1735
 hparticletree.cc:1736
 hparticletree.cc:1737
 hparticletree.cc:1738
 hparticletree.cc:1739
 hparticletree.cc:1740
 hparticletree.cc:1741
 hparticletree.cc:1742
 hparticletree.cc:1743
 hparticletree.cc:1744
 hparticletree.cc:1745
 hparticletree.cc:1746
 hparticletree.cc:1747
 hparticletree.cc:1748
 hparticletree.cc:1749
 hparticletree.cc:1750
 hparticletree.cc:1751
 hparticletree.cc:1752
 hparticletree.cc:1753
 hparticletree.cc:1754
 hparticletree.cc:1755
 hparticletree.cc:1756
 hparticletree.cc:1757
 hparticletree.cc:1758
 hparticletree.cc:1759
 hparticletree.cc:1760
 hparticletree.cc:1761
 hparticletree.cc:1762
 hparticletree.cc:1763
 hparticletree.cc:1764
 hparticletree.cc:1765
 hparticletree.cc:1766
 hparticletree.cc:1767
 hparticletree.cc:1768
 hparticletree.cc:1769
 hparticletree.cc:1770
 hparticletree.cc:1771
 hparticletree.cc:1772
 hparticletree.cc:1773
 hparticletree.cc:1774
 hparticletree.cc:1775
 hparticletree.cc:1776
 hparticletree.cc:1777
 hparticletree.cc:1778
 hparticletree.cc:1779
 hparticletree.cc:1780
 hparticletree.cc:1781
 hparticletree.cc:1782
 hparticletree.cc:1783
 hparticletree.cc:1784
 hparticletree.cc:1785
 hparticletree.cc:1786
 hparticletree.cc:1787
 hparticletree.cc:1788
 hparticletree.cc:1789
 hparticletree.cc:1790
 hparticletree.cc:1791
 hparticletree.cc:1792
 hparticletree.cc:1793
 hparticletree.cc:1794
 hparticletree.cc:1795
 hparticletree.cc:1796
 hparticletree.cc:1797
 hparticletree.cc:1798
 hparticletree.cc:1799
 hparticletree.cc:1800
 hparticletree.cc:1801
 hparticletree.cc:1802
 hparticletree.cc:1803
 hparticletree.cc:1804
 hparticletree.cc:1805
 hparticletree.cc:1806
 hparticletree.cc:1807
 hparticletree.cc:1808
 hparticletree.cc:1809
 hparticletree.cc:1810
 hparticletree.cc:1811
 hparticletree.cc:1812
 hparticletree.cc:1813
 hparticletree.cc:1814
 hparticletree.cc:1815
 hparticletree.cc:1816
 hparticletree.cc:1817
 hparticletree.cc:1818
 hparticletree.cc:1819
 hparticletree.cc:1820
 hparticletree.cc:1821
 hparticletree.cc:1822
 hparticletree.cc:1823
 hparticletree.cc:1824
 hparticletree.cc:1825
 hparticletree.cc:1826
 hparticletree.cc:1827
 hparticletree.cc:1828
 hparticletree.cc:1829
 hparticletree.cc:1830
 hparticletree.cc:1831
 hparticletree.cc:1832
 hparticletree.cc:1833
 hparticletree.cc:1834
 hparticletree.cc:1835
 hparticletree.cc:1836
 hparticletree.cc:1837
 hparticletree.cc:1838
 hparticletree.cc:1839
 hparticletree.cc:1840
 hparticletree.cc:1841
 hparticletree.cc:1842
 hparticletree.cc:1843
 hparticletree.cc:1844
 hparticletree.cc:1845
 hparticletree.cc:1846
 hparticletree.cc:1847
 hparticletree.cc:1848
 hparticletree.cc:1849
 hparticletree.cc:1850
 hparticletree.cc:1851
 hparticletree.cc:1852
 hparticletree.cc:1853
 hparticletree.cc:1854
 hparticletree.cc:1855
 hparticletree.cc:1856
 hparticletree.cc:1857
 hparticletree.cc:1858
 hparticletree.cc:1859
 hparticletree.cc:1860
 hparticletree.cc:1861
 hparticletree.cc:1862
 hparticletree.cc:1863
 hparticletree.cc:1864
 hparticletree.cc:1865
 hparticletree.cc:1866
 hparticletree.cc:1867
 hparticletree.cc:1868
 hparticletree.cc:1869
 hparticletree.cc:1870
 hparticletree.cc:1871
 hparticletree.cc:1872
 hparticletree.cc:1873
 hparticletree.cc:1874
 hparticletree.cc:1875
 hparticletree.cc:1876
 hparticletree.cc:1877
 hparticletree.cc:1878
 hparticletree.cc:1879
 hparticletree.cc:1880
 hparticletree.cc:1881
 hparticletree.cc:1882
 hparticletree.cc:1883
 hparticletree.cc:1884
 hparticletree.cc:1885
 hparticletree.cc:1886
 hparticletree.cc:1887
 hparticletree.cc:1888
 hparticletree.cc:1889
 hparticletree.cc:1890
 hparticletree.cc:1891
 hparticletree.cc:1892
 hparticletree.cc:1893
 hparticletree.cc:1894
 hparticletree.cc:1895
 hparticletree.cc:1896
 hparticletree.cc:1897
 hparticletree.cc:1898
 hparticletree.cc:1899
 hparticletree.cc:1900
 hparticletree.cc:1901
 hparticletree.cc:1902
 hparticletree.cc:1903
 hparticletree.cc:1904
 hparticletree.cc:1905
 hparticletree.cc:1906
 hparticletree.cc:1907
 hparticletree.cc:1908
 hparticletree.cc:1909
 hparticletree.cc:1910
 hparticletree.cc:1911
 hparticletree.cc:1912
 hparticletree.cc:1913
 hparticletree.cc:1914
 hparticletree.cc:1915
 hparticletree.cc:1916
 hparticletree.cc:1917
 hparticletree.cc:1918
 hparticletree.cc:1919
 hparticletree.cc:1920
 hparticletree.cc:1921
 hparticletree.cc:1922
 hparticletree.cc:1923
 hparticletree.cc:1924
 hparticletree.cc:1925
 hparticletree.cc:1926
 hparticletree.cc:1927
 hparticletree.cc:1928
 hparticletree.cc:1929
 hparticletree.cc:1930
 hparticletree.cc:1931
 hparticletree.cc:1932
 hparticletree.cc:1933
 hparticletree.cc:1934
 hparticletree.cc:1935
 hparticletree.cc:1936
 hparticletree.cc:1937
 hparticletree.cc:1938
 hparticletree.cc:1939
 hparticletree.cc:1940
 hparticletree.cc:1941
 hparticletree.cc:1942
 hparticletree.cc:1943
 hparticletree.cc:1944
 hparticletree.cc:1945
 hparticletree.cc:1946
 hparticletree.cc:1947
 hparticletree.cc:1948
 hparticletree.cc:1949
 hparticletree.cc:1950
 hparticletree.cc:1951
 hparticletree.cc:1952
 hparticletree.cc:1953
 hparticletree.cc:1954
 hparticletree.cc:1955
 hparticletree.cc:1956
 hparticletree.cc:1957
 hparticletree.cc:1958
 hparticletree.cc:1959
 hparticletree.cc:1960
 hparticletree.cc:1961
 hparticletree.cc:1962
 hparticletree.cc:1963
 hparticletree.cc:1964
 hparticletree.cc:1965
 hparticletree.cc:1966
 hparticletree.cc:1967
 hparticletree.cc:1968
 hparticletree.cc:1969
 hparticletree.cc:1970
 hparticletree.cc:1971
 hparticletree.cc:1972
 hparticletree.cc:1973
 hparticletree.cc:1974
 hparticletree.cc:1975
 hparticletree.cc:1976
 hparticletree.cc:1977
 hparticletree.cc:1978
 hparticletree.cc:1979
 hparticletree.cc:1980
 hparticletree.cc:1981
 hparticletree.cc:1982
 hparticletree.cc:1983
 hparticletree.cc:1984
 hparticletree.cc:1985
 hparticletree.cc:1986
 hparticletree.cc:1987
 hparticletree.cc:1988
 hparticletree.cc:1989
 hparticletree.cc:1990
 hparticletree.cc:1991
 hparticletree.cc:1992
 hparticletree.cc:1993
 hparticletree.cc:1994
 hparticletree.cc:1995
 hparticletree.cc:1996
 hparticletree.cc:1997
 hparticletree.cc:1998
 hparticletree.cc:1999
 hparticletree.cc:2000
 hparticletree.cc:2001
 hparticletree.cc:2002
 hparticletree.cc:2003
 hparticletree.cc:2004
 hparticletree.cc:2005
 hparticletree.cc:2006
 hparticletree.cc:2007
 hparticletree.cc:2008
 hparticletree.cc:2009
 hparticletree.cc:2010
 hparticletree.cc:2011
 hparticletree.cc:2012
 hparticletree.cc:2013
 hparticletree.cc:2014
 hparticletree.cc:2015
 hparticletree.cc:2016
 hparticletree.cc:2017
 hparticletree.cc:2018
 hparticletree.cc:2019
 hparticletree.cc:2020
 hparticletree.cc:2021
 hparticletree.cc:2022
 hparticletree.cc:2023
 hparticletree.cc:2024
 hparticletree.cc:2025
 hparticletree.cc:2026
 hparticletree.cc:2027
 hparticletree.cc:2028
 hparticletree.cc:2029
 hparticletree.cc:2030
 hparticletree.cc:2031
 hparticletree.cc:2032
 hparticletree.cc:2033
 hparticletree.cc:2034
 hparticletree.cc:2035
 hparticletree.cc:2036
 hparticletree.cc:2037
 hparticletree.cc:2038
 hparticletree.cc:2039
 hparticletree.cc:2040
 hparticletree.cc:2041
 hparticletree.cc:2042
 hparticletree.cc:2043
 hparticletree.cc:2044
 hparticletree.cc:2045
 hparticletree.cc:2046
 hparticletree.cc:2047
 hparticletree.cc:2048
 hparticletree.cc:2049
 hparticletree.cc:2050
 hparticletree.cc:2051
 hparticletree.cc:2052
 hparticletree.cc:2053
 hparticletree.cc:2054
 hparticletree.cc:2055
 hparticletree.cc:2056
 hparticletree.cc:2057
 hparticletree.cc:2058
 hparticletree.cc:2059
 hparticletree.cc:2060
 hparticletree.cc:2061
 hparticletree.cc:2062
 hparticletree.cc:2063
 hparticletree.cc:2064
 hparticletree.cc:2065
 hparticletree.cc:2066
 hparticletree.cc:2067
 hparticletree.cc:2068
 hparticletree.cc:2069
 hparticletree.cc:2070
 hparticletree.cc:2071
 hparticletree.cc:2072
 hparticletree.cc:2073
 hparticletree.cc:2074
 hparticletree.cc:2075
 hparticletree.cc:2076
 hparticletree.cc:2077
 hparticletree.cc:2078
 hparticletree.cc:2079
 hparticletree.cc:2080
 hparticletree.cc:2081
 hparticletree.cc:2082
 hparticletree.cc:2083
 hparticletree.cc:2084
 hparticletree.cc:2085
 hparticletree.cc:2086
 hparticletree.cc:2087
 hparticletree.cc:2088
 hparticletree.cc:2089
 hparticletree.cc:2090
 hparticletree.cc:2091
 hparticletree.cc:2092
 hparticletree.cc:2093
 hparticletree.cc:2094
 hparticletree.cc:2095
 hparticletree.cc:2096
 hparticletree.cc:2097
 hparticletree.cc:2098
 hparticletree.cc:2099
 hparticletree.cc:2100
 hparticletree.cc:2101
 hparticletree.cc:2102
 hparticletree.cc:2103
 hparticletree.cc:2104
 hparticletree.cc:2105
 hparticletree.cc:2106
 hparticletree.cc:2107
 hparticletree.cc:2108
 hparticletree.cc:2109
 hparticletree.cc:2110
 hparticletree.cc:2111
 hparticletree.cc:2112
 hparticletree.cc:2113
 hparticletree.cc:2114
 hparticletree.cc:2115
 hparticletree.cc:2116
 hparticletree.cc:2117
 hparticletree.cc:2118
 hparticletree.cc:2119
 hparticletree.cc:2120
 hparticletree.cc:2121
 hparticletree.cc:2122
 hparticletree.cc:2123
 hparticletree.cc:2124
 hparticletree.cc:2125
 hparticletree.cc:2126
 hparticletree.cc:2127
 hparticletree.cc:2128
 hparticletree.cc:2129
 hparticletree.cc:2130
 hparticletree.cc:2131
 hparticletree.cc:2132
 hparticletree.cc:2133
 hparticletree.cc:2134
 hparticletree.cc:2135
 hparticletree.cc:2136
 hparticletree.cc:2137
 hparticletree.cc:2138
 hparticletree.cc:2139
 hparticletree.cc:2140
 hparticletree.cc:2141
 hparticletree.cc:2142
 hparticletree.cc:2143
 hparticletree.cc:2144
 hparticletree.cc:2145
 hparticletree.cc:2146
 hparticletree.cc:2147
 hparticletree.cc:2148
 hparticletree.cc:2149
 hparticletree.cc:2150
 hparticletree.cc:2151
 hparticletree.cc:2152
 hparticletree.cc:2153
 hparticletree.cc:2154
 hparticletree.cc:2155
 hparticletree.cc:2156
 hparticletree.cc:2157
 hparticletree.cc:2158
 hparticletree.cc:2159
 hparticletree.cc:2160
 hparticletree.cc:2161
 hparticletree.cc:2162
 hparticletree.cc:2163
 hparticletree.cc:2164
 hparticletree.cc:2165
 hparticletree.cc:2166
 hparticletree.cc:2167
 hparticletree.cc:2168
 hparticletree.cc:2169
 hparticletree.cc:2170
 hparticletree.cc:2171
 hparticletree.cc:2172
 hparticletree.cc:2173
 hparticletree.cc:2174
 hparticletree.cc:2175
 hparticletree.cc:2176
 hparticletree.cc:2177
 hparticletree.cc:2178
 hparticletree.cc:2179
 hparticletree.cc:2180
 hparticletree.cc:2181
 hparticletree.cc:2182
 hparticletree.cc:2183
 hparticletree.cc:2184
 hparticletree.cc:2185
 hparticletree.cc:2186
 hparticletree.cc:2187
 hparticletree.cc:2188
 hparticletree.cc:2189
 hparticletree.cc:2190
 hparticletree.cc:2191
 hparticletree.cc:2192
 hparticletree.cc:2193
 hparticletree.cc:2194
 hparticletree.cc:2195
 hparticletree.cc:2196
 hparticletree.cc:2197
 hparticletree.cc:2198
 hparticletree.cc:2199
 hparticletree.cc:2200
 hparticletree.cc:2201
 hparticletree.cc:2202
 hparticletree.cc:2203
 hparticletree.cc:2204
 hparticletree.cc:2205
 hparticletree.cc:2206
 hparticletree.cc:2207
 hparticletree.cc:2208
 hparticletree.cc:2209
 hparticletree.cc:2210
 hparticletree.cc:2211
 hparticletree.cc:2212
 hparticletree.cc:2213
 hparticletree.cc:2214
 hparticletree.cc:2215
 hparticletree.cc:2216
 hparticletree.cc:2217
 hparticletree.cc:2218
 hparticletree.cc:2219
 hparticletree.cc:2220
 hparticletree.cc:2221
 hparticletree.cc:2222
 hparticletree.cc:2223
 hparticletree.cc:2224
 hparticletree.cc:2225
 hparticletree.cc:2226
 hparticletree.cc:2227
 hparticletree.cc:2228
 hparticletree.cc:2229
 hparticletree.cc:2230
 hparticletree.cc:2231
 hparticletree.cc:2232
 hparticletree.cc:2233
 hparticletree.cc:2234
 hparticletree.cc:2235
 hparticletree.cc:2236
 hparticletree.cc:2237
 hparticletree.cc:2238
 hparticletree.cc:2239
 hparticletree.cc:2240
 hparticletree.cc:2241
 hparticletree.cc:2242
 hparticletree.cc:2243
 hparticletree.cc:2244
 hparticletree.cc:2245
 hparticletree.cc:2246
 hparticletree.cc:2247
 hparticletree.cc:2248
 hparticletree.cc:2249
 hparticletree.cc:2250
 hparticletree.cc:2251
 hparticletree.cc:2252
 hparticletree.cc:2253
 hparticletree.cc:2254
 hparticletree.cc:2255
 hparticletree.cc:2256
 hparticletree.cc:2257
 hparticletree.cc:2258
 hparticletree.cc:2259
 hparticletree.cc:2260
 hparticletree.cc:2261
 hparticletree.cc:2262
 hparticletree.cc:2263
 hparticletree.cc:2264
 hparticletree.cc:2265
 hparticletree.cc:2266
 hparticletree.cc:2267
 hparticletree.cc:2268
 hparticletree.cc:2269
 hparticletree.cc:2270
 hparticletree.cc:2271
 hparticletree.cc:2272
 hparticletree.cc:2273
 hparticletree.cc:2274
 hparticletree.cc:2275
 hparticletree.cc:2276
 hparticletree.cc:2277
 hparticletree.cc:2278
 hparticletree.cc:2279
 hparticletree.cc:2280
 hparticletree.cc:2281
 hparticletree.cc:2282
 hparticletree.cc:2283
 hparticletree.cc:2284
 hparticletree.cc:2285
 hparticletree.cc:2286
 hparticletree.cc:2287
 hparticletree.cc:2288
 hparticletree.cc:2289
 hparticletree.cc:2290
 hparticletree.cc:2291
 hparticletree.cc:2292
 hparticletree.cc:2293
 hparticletree.cc:2294
 hparticletree.cc:2295
 hparticletree.cc:2296
 hparticletree.cc:2297
 hparticletree.cc:2298
 hparticletree.cc:2299
 hparticletree.cc:2300
 hparticletree.cc:2301
 hparticletree.cc:2302
 hparticletree.cc:2303
 hparticletree.cc:2304
 hparticletree.cc:2305
 hparticletree.cc:2306
 hparticletree.cc:2307
 hparticletree.cc:2308
 hparticletree.cc:2309
 hparticletree.cc:2310
 hparticletree.cc:2311
 hparticletree.cc:2312
 hparticletree.cc:2313
 hparticletree.cc:2314
 hparticletree.cc:2315
 hparticletree.cc:2316
 hparticletree.cc:2317
 hparticletree.cc:2318
 hparticletree.cc:2319
 hparticletree.cc:2320
 hparticletree.cc:2321
 hparticletree.cc:2322
 hparticletree.cc:2323
 hparticletree.cc:2324
 hparticletree.cc:2325
 hparticletree.cc:2326
 hparticletree.cc:2327
 hparticletree.cc:2328
 hparticletree.cc:2329
 hparticletree.cc:2330
 hparticletree.cc:2331
 hparticletree.cc:2332
 hparticletree.cc:2333
 hparticletree.cc:2334
 hparticletree.cc:2335
 hparticletree.cc:2336
 hparticletree.cc:2337
 hparticletree.cc:2338
 hparticletree.cc:2339
 hparticletree.cc:2340
 hparticletree.cc:2341
 hparticletree.cc:2342
 hparticletree.cc:2343
 hparticletree.cc:2344
 hparticletree.cc:2345
 hparticletree.cc:2346
 hparticletree.cc:2347
 hparticletree.cc:2348
 hparticletree.cc:2349
 hparticletree.cc:2350
 hparticletree.cc:2351
 hparticletree.cc:2352
 hparticletree.cc:2353
 hparticletree.cc:2354
 hparticletree.cc:2355
 hparticletree.cc:2356
 hparticletree.cc:2357
 hparticletree.cc:2358
 hparticletree.cc:2359
 hparticletree.cc:2360
 hparticletree.cc:2361
 hparticletree.cc:2362
 hparticletree.cc:2363
 hparticletree.cc:2364
 hparticletree.cc:2365
 hparticletree.cc:2366
 hparticletree.cc:2367
 hparticletree.cc:2368
 hparticletree.cc:2369
 hparticletree.cc:2370
 hparticletree.cc:2371
 hparticletree.cc:2372
 hparticletree.cc:2373
 hparticletree.cc:2374
 hparticletree.cc:2375
 hparticletree.cc:2376
 hparticletree.cc:2377
 hparticletree.cc:2378
 hparticletree.cc:2379
 hparticletree.cc:2380
 hparticletree.cc:2381
 hparticletree.cc:2382
 hparticletree.cc:2383
 hparticletree.cc:2384
 hparticletree.cc:2385
 hparticletree.cc:2386
 hparticletree.cc:2387
 hparticletree.cc:2388
 hparticletree.cc:2389
 hparticletree.cc:2390
 hparticletree.cc:2391
 hparticletree.cc:2392
 hparticletree.cc:2393
 hparticletree.cc:2394
 hparticletree.cc:2395
 hparticletree.cc:2396
 hparticletree.cc:2397
 hparticletree.cc:2398
 hparticletree.cc:2399
 hparticletree.cc:2400
 hparticletree.cc:2401
 hparticletree.cc:2402
 hparticletree.cc:2403
 hparticletree.cc:2404
 hparticletree.cc:2405
 hparticletree.cc:2406
 hparticletree.cc:2407
 hparticletree.cc:2408
 hparticletree.cc:2409
 hparticletree.cc:2410
 hparticletree.cc:2411
 hparticletree.cc:2412
 hparticletree.cc:2413
 hparticletree.cc:2414
 hparticletree.cc:2415
 hparticletree.cc:2416
 hparticletree.cc:2417
 hparticletree.cc:2418
 hparticletree.cc:2419
 hparticletree.cc:2420
 hparticletree.cc:2421
 hparticletree.cc:2422
 hparticletree.cc:2423
 hparticletree.cc:2424
 hparticletree.cc:2425
 hparticletree.cc:2426
 hparticletree.cc:2427
 hparticletree.cc:2428
 hparticletree.cc:2429
 hparticletree.cc:2430
 hparticletree.cc:2431
 hparticletree.cc:2432
 hparticletree.cc:2433
 hparticletree.cc:2434
 hparticletree.cc:2435
 hparticletree.cc:2436
 hparticletree.cc:2437
 hparticletree.cc:2438
 hparticletree.cc:2439
 hparticletree.cc:2440
 hparticletree.cc:2441
 hparticletree.cc:2442
 hparticletree.cc:2443
 hparticletree.cc:2444
 hparticletree.cc:2445
 hparticletree.cc:2446
 hparticletree.cc:2447
 hparticletree.cc:2448
 hparticletree.cc:2449
 hparticletree.cc:2450
 hparticletree.cc:2451
 hparticletree.cc:2452
 hparticletree.cc:2453
 hparticletree.cc:2454
 hparticletree.cc:2455
 hparticletree.cc:2456
 hparticletree.cc:2457
 hparticletree.cc:2458
 hparticletree.cc:2459
 hparticletree.cc:2460
 hparticletree.cc:2461
 hparticletree.cc:2462
 hparticletree.cc:2463
 hparticletree.cc:2464
 hparticletree.cc:2465
 hparticletree.cc:2466
 hparticletree.cc:2467
 hparticletree.cc:2468
 hparticletree.cc:2469
 hparticletree.cc:2470
 hparticletree.cc:2471
 hparticletree.cc:2472
 hparticletree.cc:2473
 hparticletree.cc:2474
 hparticletree.cc:2475
 hparticletree.cc:2476
 hparticletree.cc:2477
 hparticletree.cc:2478
 hparticletree.cc:2479
 hparticletree.cc:2480
 hparticletree.cc:2481
 hparticletree.cc:2482
 hparticletree.cc:2483
 hparticletree.cc:2484
 hparticletree.cc:2485
 hparticletree.cc:2486
 hparticletree.cc:2487
 hparticletree.cc:2488
 hparticletree.cc:2489
 hparticletree.cc:2490
 hparticletree.cc:2491
 hparticletree.cc:2492
 hparticletree.cc:2493
 hparticletree.cc:2494
 hparticletree.cc:2495
 hparticletree.cc:2496
 hparticletree.cc:2497
 hparticletree.cc:2498
 hparticletree.cc:2499
 hparticletree.cc:2500
 hparticletree.cc:2501
 hparticletree.cc:2502
 hparticletree.cc:2503
 hparticletree.cc:2504
 hparticletree.cc:2505
 hparticletree.cc:2506
 hparticletree.cc:2507
 hparticletree.cc:2508
 hparticletree.cc:2509
 hparticletree.cc:2510
 hparticletree.cc:2511
 hparticletree.cc:2512
 hparticletree.cc:2513
 hparticletree.cc:2514
 hparticletree.cc:2515
 hparticletree.cc:2516
 hparticletree.cc:2517
 hparticletree.cc:2518
 hparticletree.cc:2519
 hparticletree.cc:2520
 hparticletree.cc:2521
 hparticletree.cc:2522
 hparticletree.cc:2523
 hparticletree.cc:2524
 hparticletree.cc:2525
 hparticletree.cc:2526
 hparticletree.cc:2527
 hparticletree.cc:2528
 hparticletree.cc:2529
 hparticletree.cc:2530
 hparticletree.cc:2531
 hparticletree.cc:2532
 hparticletree.cc:2533
 hparticletree.cc:2534
 hparticletree.cc:2535
 hparticletree.cc:2536
 hparticletree.cc:2537
 hparticletree.cc:2538
 hparticletree.cc:2539
 hparticletree.cc:2540
 hparticletree.cc:2541
 hparticletree.cc:2542
 hparticletree.cc:2543
 hparticletree.cc:2544
 hparticletree.cc:2545
 hparticletree.cc:2546
 hparticletree.cc:2547
 hparticletree.cc:2548
 hparticletree.cc:2549
 hparticletree.cc:2550
 hparticletree.cc:2551
 hparticletree.cc:2552
 hparticletree.cc:2553
 hparticletree.cc:2554
 hparticletree.cc:2555
 hparticletree.cc:2556
 hparticletree.cc:2557
 hparticletree.cc:2558
 hparticletree.cc:2559