#include "hparticlegeantevent.h"
#include "hgeomvector.h"
#include "hcategory.h"
#include "hrecevent.h"
#include "hpartialevent.h"
#include "hgeantheader.h"
#include "hades.h"
#include "hphysicsconstants.h"
#include "hcategorymanager.h"
#include "hparticletool.h"
#include "hgeantkine.h"
#include "hparticlegeant.h"
#include "hparticlegeantdecay.h"
#include <vector>
#include <map>
#include <iostream>
#include <iomanip>
#include <algorithm>
ClassImp(HParticleGeantEvent)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
HParticleGeantEvent::HParticleGeantEvent()
{
    vParticles    .clear();
    vParticles    .resize(1000);
    vDecays       .clear();
    vDecays       .resize(1000);
    fBeamEnergy = 0;
    fEventPlane = 0;
    fImpactParam= 0;
    bConvertExtThermal = kTRUE;
    bCorrectInfo       = kTRUE;
}
HParticleGeantEvent::~HParticleGeantEvent()
{
    clear();
}
void  HParticleGeantEvent::clear(){
    for(UInt_t i = 0 ; i < vexternalKine.size(); i++ ) delete vexternalKine[i];
    for(UInt_t i = 0 ; i < vDecays.size();       i++ ) delete vDecays[i];
    for(UInt_t i = 0 ; i < vParticles.size();    i++ ) delete vParticles[i];
    vexternalKine.clear();
    vexternalParticles.clear();
    vDecays      .clear();
    vParticles   .clear();
    mToDaughters.clear();
    mToParticle .clear();
    feventVertex.setXYZ(0,0,0);
    fBeamEnergy = 0;
    fEventPlane = 0;
    fImpactParam= 0;
}
void HParticleGeantEvent::nextEvent()
{
    clear();
    vector<HGeantKine*> mothers;
    vector<HGeantKine*> daughters;
    HCategory* kineCat = HCategoryManager::getCategory(catGeantKine,0,"catGeantKine");
    if(!kineCat) return;
    HPartialEvent* simul =((HRecEvent*) gHades->getCurrentEvent())->getPartialEvent(catSimul);
    if(simul) {
	HGeantHeader* header = (HGeantHeader*) simul->getSubHeader();
	if(header){
	    fBeamEnergy  = header->getBeamEnergy();
	    fEventPlane  = header->getEventPlane();
	    fImpactParam = header->getImpactParameter();
	}
    } else cout<<"no catSimul"<<endl;
    
    
    Int_t n = kineCat->getEntries();
    HGeantKine* kine=0;
    Bool_t vertexFound = kFALSE;
    for(Int_t j = 0 ;j < n ; j ++){
	kine = HCategoryManager::getObject(kine,kineCat,j);
	if(kine){
	    if(!vertexFound && kine->getParentTrack() == 0){
		kine->getVertex(feventVertex);
		vertexFound = kTRUE;
	    }
	    if(bCorrectInfo && kine->isBugInfo()) {
               kine->setGenerator(0,0,0);
	    }
	    UInt_t gen = HGeantKine::getMothers(kine,mothers);  
	    
	    UInt_t ndaughters = HGeantKine::getDaughters(kine,daughters);
	    if(ndaughters > 0){
		mToDaughters[kine] = daughters;
	    }
	    if(kine->isExternalSource() && kine->getParentTrack() == 0){
		vexternalParticles.push_back(kine);
	    }
	    
	    
	    HParticleGeant* p =  new HParticleGeant();
	    p->setGeneration(gen);
	    p->setParticle(kine);
	    if(mothers.size() > 0) p->setMother(mothers[0]);
	    vParticles.push_back(p);
	    mToParticle[kine->getTrack()] = p;
	    
	} 
    } 
    
    
    
    
    
    
    map<Long64_t,vector<HGeantKine*> > mexternalSource;
    for(UInt_t j=0; j < vexternalParticles.size(); j++){
	HGeantKine* daughter = vexternalParticles[j];
	if(daughter->getGeneratorInfo() == daughter->getGeneratorInfo1() )  continue;  
	Long64_t index       = daughter->getGeneratorInfo2() + kMaxInt + kMaxInt*daughter->getGeneratorInfo2();
	if(mexternalSource.find(index) == mexternalSource.end()) {
	    
	    vector<HGeantKine*> daughters;
	    daughters.push_back(daughter);
	    mexternalSource[index] = daughters;
	} else { 
	    mexternalSource[index].push_back(daughter);
	}
    }
    
    
    for(map <Long64_t,vector<HGeantKine*> >::iterator itex = mexternalSource.begin(); itex != mexternalSource.end(); ++itex){
	vector<HGeantKine*>& daughters = itex->second;
	HParticleGeantDecay* decay = new HParticleGeantDecay() ;
	TLorentzVector v1,v2;
	for(UInt_t j = 0; j <daughters.size(); j++){ 
	    
	    HParticleTool::getTLorentzVector(daughters[j],v1);
	    v2 += v1;
	}
	Int_t     sourceID  = daughters[0]->getGeneratorInfo();
	Bool_t    isThermal = daughters[0]->isThermalSource();
	HGeantKine* kine = new HGeantKine();
	if(isThermal && bConvertExtThermal) kine->setID(sourceID-500);
	else                                kine->setID(sourceID);
	kine->setGenerator(daughters[0]->getGeneratorInfo(),daughters[0]->getGeneratorInfo1(),daughters[0]->getGeneratorInfo2());
	kine->setMomentum(v2.Px(),v2.Py(),v2.Pz());
	kine->setVertex(feventVertex.X(),feventVertex.Y(),feventVertex.Z());
	kine->setMechanism(5); 
	kine->setMedium(-1); 
	vexternalKine.push_back(kine);
	decay->setMother(kine);
	decay->setDecayVertex(feventVertex.X(),feventVertex.Y(),feventVertex.Z());
	decay->setGeneration(-1);
	decay->setDaughters (daughters);
	decay->sortDaughters();
	vDecays.push_back(decay);
    }
    
    
    
    for(map <HGeantKine*,vector<HGeantKine*> >::iterator it = mToDaughters.begin(); it != mToDaughters.end(); ++it){
	HGeantKine* mother             = it->first;
	vector<HGeantKine*>& daughters = it->second;
	Float_t x,y,z;
	Int_t   aPar,aMed,aMech;
	mother->getVertex(x,y,z);
	mother->getCreator(aPar,aMed,aMech);
	UInt_t gen = HGeantKine::getGeneration(mother);  
	HParticleGeantDecay* decay = new HParticleGeantDecay();
	decay->setMother(mother);
	decay->setDecayVertex(x,y,z);
	decay->setGeneration(gen) ;
	decay->setDaughters(daughters);
	decay->sortDaughters();
	vDecays.push_back(decay);
    }
    
    
    
    
    
    
    for(UInt_t i = 0; i < vexternalParticles.size(); i++){
	HGeantKine* part = vexternalParticles[i];
	if(part->getParentTrack() == 0 && part->isExternalSource() &&
	   part->getGeneratorInfo() == part->getGeneratorInfo1()  )
	{
	    HParticleGeantDecay* d = isMotherOfDecay(part);
	    if(d == 0){  
		HGeomVector vert;
		part->getVertex(vert);
		HParticleGeantDecay* decay = new HParticleGeantDecay();
		decay->setMother(part);
		decay->setDecayVertex(vert);
		decay->setGeneration(0);
		vDecays.push_back(decay);
	    }
	}
    }
    
    
    
    if(vDecays.size() > 0){
	for(UInt_t i=vDecays.size()-1; i > 0; i--){
	    HGeantKine* daughter = vDecays[i]->getMother();
	    if(daughter){
		HParticleGeantDecay* dmother = isDaughterOfDecay(daughter);
		if(dmother) vDecays[i]->setMotherDecay(dmother);
	    }
	}
    }
    
    
    
    for(UInt_t i = 0; i < vParticles.size(); i ++){
	HParticleGeantDecay* decay = isDaughterOfDecay(vParticles[i]->getParticle());
	if(decay) vParticles[i]->setMotherDecay(decay);
    }
    
    
    
    HCategory* candCat = HCategoryManager::getCategory(catParticleCand,2,"catParticleCand");
    if(candCat){
	n = candCat->getEntries();
	HParticleCandSim* cand = 0 ;
	for(Int_t i = 0; i < n ;i ++){
	    cand = HCategoryManager::getObject(cand,candCat,i);
	    if(cand){
		Int_t tr = cand->getGeantTrack();
		if(tr > 0){
		    map<Int_t,HParticleGeant*>::iterator it = mToParticle.find(tr);
		    if(it != mToParticle.end()) {
			HParticleGeant* gP = it->second;
			gP->addRecoCand(cand);
		    }
		}
	    }
	}
    }
    
}
HParticleGeantDecay* HParticleGeantEvent::isDaughterOfDecay(HGeantKine* daughter)
{
    
    
    if(!daughter) return NULL;
    for(UInt_t i=0; i < vDecays.size(); i++){
	if(vDecays[i]->isDaughter(daughter)) return  vDecays[i];
    }
    return NULL;
}
HParticleGeantDecay* HParticleGeantEvent::isDaughterOfDecay(Int_t track)
{
    
    
    HGeantKine* moth = getKine(track);
    return  isDaughterOfDecay(moth);
}
HParticleGeantDecay* HParticleGeantEvent::isMotherOfDecay(HGeantKine* moth)
{
    
    
    if(!moth) return NULL;
    for(UInt_t i=0; i < vDecays.size(); i++){
	if(vDecays[i]->getMother() && vDecays[i]->getMother() == moth) return  vDecays[i];
    }
    return NULL;
}
HParticleGeantDecay* HParticleGeantEvent::isMotherOfDecay(Int_t track)
{
    
    
    HGeantKine* moth = getKine(track);
    return  isMotherOfDecay(moth);
}
Int_t HParticleGeantEvent::isDecay(vector<HParticleGeantDecay*>& decays,
				   Int_t motherid,Int_t generation,Int_t med,Float_t dist)
{
    
    
    
    
    
    
    
    
    decays.clear();
    Float_t di = TMath::Abs(dist);
    for(UInt_t i=0; i < vDecays.size(); i++){
	Float_t d=0;
        if(dist!=0) d = vDecays[i]->getDistFromVertex(&feventVertex);
	if(( (motherid < 0 ) ||  ( vDecays[i]->getMother() && vDecays[i]->getMother()->getID()     == motherid   ) ) &&
	   ( (generation< -1) || ( vDecays[i]->getGeneration()                                     == generation ) ) &&
	   ( (med      < 0 ) ||  ( vDecays[i]->getMother() && vDecays[i]->getMother()->getMedium() == med        ) ) &&
	   ( (dist    == 0 ) ||  ( ( dist > 0 ? d < di : d > di) ) )
	  )
	{
	    decays.push_back(vDecays[i]);
	}
    }
    return decays.size();
}
Int_t HParticleGeantEvent::isParticle(vector<HGeantKine*>& particles,
				      Int_t id,Int_t motherid, Int_t generation,
				      Int_t med,Float_t dist)
{
    
    
    
    
    
    
    
    
    
    particles.clear();
    Float_t di = TMath::Abs(dist);
    for(UInt_t i=0; i < vParticles.size(); i++){
	HParticleGeant* p          = vParticles[i];
	HParticleGeantDecay* decay = p->getMotherDecay();
	HGeantKine* mother = 0;
	if(decay) mother = decay->getMother();
	Float_t d=0;
        if(dist!=0) d = p->getDistFromVertex(&feventVertex);
	if(( (id < 0 )       ||  ( p->getParticle()->getID()             == id ) ) &&
	   ( (generation< 0 )||  ( p->getGeneration() == generation            ) ) &&
	   ( (motherid < 0 ) ||  ( decay && mother && mother->getID()    == motherid ) ) &&
	   ( (med      < 0 ) ||  ( p->getParticle()->getMedium()         == med      ) ) &&
	   ( (dist    == 0 ) ||  ( ( dist > 0 ? d < di : d > di) ) )
	  )
	{
	    particles.push_back(p->getParticle());
	}
    }
    return particles.size();
}
Int_t HParticleGeantEvent::isParticle(vector<HParticleGeant*>& particles,
				      Int_t id,Int_t motherid, Int_t generation,
				      Int_t med ,Float_t dist)
{
    
    
    
    
    
    
    
    
    
    particles.clear();
    Float_t di = TMath::Abs(dist);
    for(UInt_t i=0; i < vParticles.size(); i++){
	HParticleGeant* p          = vParticles[i];
	HParticleGeantDecay* decay = p->getMotherDecay();
	HGeantKine* mother = 0;
	if(decay) mother = decay->getMother();
	Float_t d=0;
        if(dist!=0) d = p->getDistFromVertex(&feventVertex);
	if(( (id < 0 )       ||  ( p->getParticle()->getID()             == id ) ) &&
	   ( (generation< 0 )||  ( p->getGeneration() == generation            ) ) &&
	   ( (motherid < 0 ) ||  ( decay && mother && mother->getID()    == motherid ) ) &&
	   ( (med      < 0 ) ||  ( p->getParticle()->getMedium()         == med      ) ) &&
	   ( (dist    == 0 ) ||  ( ( dist > 0 ? d < di : d > di) ) )
	  )
	{
	    particles.push_back(p);
	}
    }
    return particles.size();
}
HParticleGeant* HParticleGeantEvent::getParticle(Int_t track)
{
    
    
    map<Int_t,HParticleGeant*>::iterator it = mToParticle.find(track);
    if(it != mToParticle.end()) return it->second;
    else return 0;
}
HParticleGeant* HParticleGeantEvent::getParticle(HGeantKine* kine)
{
    
    
    if(!kine) return 0;
    return  getParticle(kine->getTrack());
}
HGeantKine*   HParticleGeantEvent::getKine(Int_t track)
{
    
    
    HParticleGeant* p = getParticle(track);
    if(p) return p->getParticle();
    else return 0;
}
UInt_t  HParticleGeantEvent::getMultiplicity(Int_t id,Int_t generation,Int_t charge,UInt_t type,UInt_t detbits)
{
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    UInt_t mult = 0;
    for(UInt_t i=0; i < vParticles.size(); i++){
	HParticleGeant* p          = vParticles[i];
	Bool_t acc  = p->isInAcceptance();
	Bool_t reco = (p->getNTrueReco(kTRUE,detbits) > 0) ? kTRUE : kFALSE;
	Int_t chrg  = HPhysicsConstants::charge(p->getParticle()->getID());
	if(( (id         <  0 ) ||  ( p->getParticle()->getID()  == id         ) ) &&
	   ( (generation <  0 ) ||  ( p->getGeneration()         == generation ) ) &&
           ( (type       == 0 ) ||  (type   == 1 && acc)     || (type   == 2 && reco)     ) &&
           ( (charge     ==-2 ) ||  (charge == 0 && chrg!=0) || (charge == 1 && chrg > 0) || (charge ==-1 && chrg < 0)  )
	  )
	{
	    mult++;
	}
    }
    return mult;
}
 hparticlegeantevent.cc:10  hparticlegeantevent.cc:11  hparticlegeantevent.cc:12  hparticlegeantevent.cc:13  hparticlegeantevent.cc:14  hparticlegeantevent.cc:15  hparticlegeantevent.cc:16  hparticlegeantevent.cc:17  hparticlegeantevent.cc:18  hparticlegeantevent.cc:19  hparticlegeantevent.cc:20  hparticlegeantevent.cc:21  hparticlegeantevent.cc:22  hparticlegeantevent.cc:23  hparticlegeantevent.cc:24  hparticlegeantevent.cc:25  hparticlegeantevent.cc:26  hparticlegeantevent.cc:27  hparticlegeantevent.cc:28  hparticlegeantevent.cc:29  hparticlegeantevent.cc:30  hparticlegeantevent.cc:31  hparticlegeantevent.cc:32  hparticlegeantevent.cc:33  hparticlegeantevent.cc:34  hparticlegeantevent.cc:35  hparticlegeantevent.cc:36  hparticlegeantevent.cc:37  hparticlegeantevent.cc:38  hparticlegeantevent.cc:39  hparticlegeantevent.cc:40  hparticlegeantevent.cc:41  hparticlegeantevent.cc:42  hparticlegeantevent.cc:43  hparticlegeantevent.cc:44  hparticlegeantevent.cc:45  hparticlegeantevent.cc:46  hparticlegeantevent.cc:47  hparticlegeantevent.cc:48  hparticlegeantevent.cc:49  hparticlegeantevent.cc:50  hparticlegeantevent.cc:51  hparticlegeantevent.cc:52  hparticlegeantevent.cc:53  hparticlegeantevent.cc:54  hparticlegeantevent.cc:55  hparticlegeantevent.cc:56  hparticlegeantevent.cc:57  hparticlegeantevent.cc:58  hparticlegeantevent.cc:59  hparticlegeantevent.cc:60  hparticlegeantevent.cc:61  hparticlegeantevent.cc:62  hparticlegeantevent.cc:63  hparticlegeantevent.cc:64  hparticlegeantevent.cc:65  hparticlegeantevent.cc:66  hparticlegeantevent.cc:67  hparticlegeantevent.cc:68  hparticlegeantevent.cc:69  hparticlegeantevent.cc:70  hparticlegeantevent.cc:71  hparticlegeantevent.cc:72  hparticlegeantevent.cc:73  hparticlegeantevent.cc:74  hparticlegeantevent.cc:75  hparticlegeantevent.cc:76  hparticlegeantevent.cc:77  hparticlegeantevent.cc:78  hparticlegeantevent.cc:79  hparticlegeantevent.cc:80  hparticlegeantevent.cc:81  hparticlegeantevent.cc:82  hparticlegeantevent.cc:83  hparticlegeantevent.cc:84  hparticlegeantevent.cc:85  hparticlegeantevent.cc:86  hparticlegeantevent.cc:87  hparticlegeantevent.cc:88  hparticlegeantevent.cc:89  hparticlegeantevent.cc:90  hparticlegeantevent.cc:91  hparticlegeantevent.cc:92  hparticlegeantevent.cc:93  hparticlegeantevent.cc:94  hparticlegeantevent.cc:95  hparticlegeantevent.cc:96  hparticlegeantevent.cc:97  hparticlegeantevent.cc:98  hparticlegeantevent.cc:99  hparticlegeantevent.cc:100  hparticlegeantevent.cc:101  hparticlegeantevent.cc:102  hparticlegeantevent.cc:103  hparticlegeantevent.cc:104  hparticlegeantevent.cc:105  hparticlegeantevent.cc:106  hparticlegeantevent.cc:107  hparticlegeantevent.cc:108  hparticlegeantevent.cc:109  hparticlegeantevent.cc:110  hparticlegeantevent.cc:111  hparticlegeantevent.cc:112  hparticlegeantevent.cc:113  hparticlegeantevent.cc:114  hparticlegeantevent.cc:115  hparticlegeantevent.cc:116  hparticlegeantevent.cc:117  hparticlegeantevent.cc:118  hparticlegeantevent.cc:119  hparticlegeantevent.cc:120  hparticlegeantevent.cc:121  hparticlegeantevent.cc:122  hparticlegeantevent.cc:123  hparticlegeantevent.cc:124  hparticlegeantevent.cc:125  hparticlegeantevent.cc:126  hparticlegeantevent.cc:127  hparticlegeantevent.cc:128  hparticlegeantevent.cc:129  hparticlegeantevent.cc:130  hparticlegeantevent.cc:131  hparticlegeantevent.cc:132  hparticlegeantevent.cc:133  hparticlegeantevent.cc:134  hparticlegeantevent.cc:135  hparticlegeantevent.cc:136  hparticlegeantevent.cc:137  hparticlegeantevent.cc:138  hparticlegeantevent.cc:139  hparticlegeantevent.cc:140  hparticlegeantevent.cc:141  hparticlegeantevent.cc:142  hparticlegeantevent.cc:143  hparticlegeantevent.cc:144  hparticlegeantevent.cc:145  hparticlegeantevent.cc:146  hparticlegeantevent.cc:147  hparticlegeantevent.cc:148  hparticlegeantevent.cc:149  hparticlegeantevent.cc:150  hparticlegeantevent.cc:151  hparticlegeantevent.cc:152  hparticlegeantevent.cc:153  hparticlegeantevent.cc:154  hparticlegeantevent.cc:155  hparticlegeantevent.cc:156  hparticlegeantevent.cc:157  hparticlegeantevent.cc:158  hparticlegeantevent.cc:159  hparticlegeantevent.cc:160  hparticlegeantevent.cc:161  hparticlegeantevent.cc:162  hparticlegeantevent.cc:163  hparticlegeantevent.cc:164  hparticlegeantevent.cc:165  hparticlegeantevent.cc:166  hparticlegeantevent.cc:167  hparticlegeantevent.cc:168  hparticlegeantevent.cc:169  hparticlegeantevent.cc:170  hparticlegeantevent.cc:171  hparticlegeantevent.cc:172  hparticlegeantevent.cc:173  hparticlegeantevent.cc:174  hparticlegeantevent.cc:175  hparticlegeantevent.cc:176  hparticlegeantevent.cc:177  hparticlegeantevent.cc:178  hparticlegeantevent.cc:179  hparticlegeantevent.cc:180  hparticlegeantevent.cc:181  hparticlegeantevent.cc:182  hparticlegeantevent.cc:183  hparticlegeantevent.cc:184  hparticlegeantevent.cc:185  hparticlegeantevent.cc:186  hparticlegeantevent.cc:187  hparticlegeantevent.cc:188  hparticlegeantevent.cc:189  hparticlegeantevent.cc:190  hparticlegeantevent.cc:191  hparticlegeantevent.cc:192  hparticlegeantevent.cc:193  hparticlegeantevent.cc:194  hparticlegeantevent.cc:195  hparticlegeantevent.cc:196  hparticlegeantevent.cc:197  hparticlegeantevent.cc:198  hparticlegeantevent.cc:199  hparticlegeantevent.cc:200  hparticlegeantevent.cc:201  hparticlegeantevent.cc:202  hparticlegeantevent.cc:203  hparticlegeantevent.cc:204  hparticlegeantevent.cc:205  hparticlegeantevent.cc:206  hparticlegeantevent.cc:207  hparticlegeantevent.cc:208  hparticlegeantevent.cc:209  hparticlegeantevent.cc:210  hparticlegeantevent.cc:211  hparticlegeantevent.cc:212  hparticlegeantevent.cc:213  hparticlegeantevent.cc:214  hparticlegeantevent.cc:215  hparticlegeantevent.cc:216  hparticlegeantevent.cc:217  hparticlegeantevent.cc:218  hparticlegeantevent.cc:219  hparticlegeantevent.cc:220  hparticlegeantevent.cc:221  hparticlegeantevent.cc:222  hparticlegeantevent.cc:223  hparticlegeantevent.cc:224  hparticlegeantevent.cc:225  hparticlegeantevent.cc:226  hparticlegeantevent.cc:227  hparticlegeantevent.cc:228  hparticlegeantevent.cc:229  hparticlegeantevent.cc:230  hparticlegeantevent.cc:231  hparticlegeantevent.cc:232  hparticlegeantevent.cc:233  hparticlegeantevent.cc:234  hparticlegeantevent.cc:235  hparticlegeantevent.cc:236  hparticlegeantevent.cc:237  hparticlegeantevent.cc:238  hparticlegeantevent.cc:239  hparticlegeantevent.cc:240  hparticlegeantevent.cc:241  hparticlegeantevent.cc:242  hparticlegeantevent.cc:243  hparticlegeantevent.cc:244  hparticlegeantevent.cc:245  hparticlegeantevent.cc:246  hparticlegeantevent.cc:247  hparticlegeantevent.cc:248  hparticlegeantevent.cc:249  hparticlegeantevent.cc:250  hparticlegeantevent.cc:251  hparticlegeantevent.cc:252  hparticlegeantevent.cc:253  hparticlegeantevent.cc:254  hparticlegeantevent.cc:255  hparticlegeantevent.cc:256  hparticlegeantevent.cc:257  hparticlegeantevent.cc:258  hparticlegeantevent.cc:259  hparticlegeantevent.cc:260  hparticlegeantevent.cc:261  hparticlegeantevent.cc:262  hparticlegeantevent.cc:263  hparticlegeantevent.cc:264  hparticlegeantevent.cc:265  hparticlegeantevent.cc:266  hparticlegeantevent.cc:267  hparticlegeantevent.cc:268  hparticlegeantevent.cc:269  hparticlegeantevent.cc:270  hparticlegeantevent.cc:271  hparticlegeantevent.cc:272  hparticlegeantevent.cc:273  hparticlegeantevent.cc:274  hparticlegeantevent.cc:275  hparticlegeantevent.cc:276  hparticlegeantevent.cc:277  hparticlegeantevent.cc:278  hparticlegeantevent.cc:279  hparticlegeantevent.cc:280  hparticlegeantevent.cc:281  hparticlegeantevent.cc:282  hparticlegeantevent.cc:283  hparticlegeantevent.cc:284  hparticlegeantevent.cc:285  hparticlegeantevent.cc:286  hparticlegeantevent.cc:287  hparticlegeantevent.cc:288  hparticlegeantevent.cc:289  hparticlegeantevent.cc:290  hparticlegeantevent.cc:291  hparticlegeantevent.cc:292  hparticlegeantevent.cc:293  hparticlegeantevent.cc:294  hparticlegeantevent.cc:295  hparticlegeantevent.cc:296  hparticlegeantevent.cc:297  hparticlegeantevent.cc:298  hparticlegeantevent.cc:299  hparticlegeantevent.cc:300  hparticlegeantevent.cc:301  hparticlegeantevent.cc:302  hparticlegeantevent.cc:303  hparticlegeantevent.cc:304  hparticlegeantevent.cc:305  hparticlegeantevent.cc:306  hparticlegeantevent.cc:307  hparticlegeantevent.cc:308  hparticlegeantevent.cc:309  hparticlegeantevent.cc:310  hparticlegeantevent.cc:311  hparticlegeantevent.cc:312  hparticlegeantevent.cc:313  hparticlegeantevent.cc:314  hparticlegeantevent.cc:315  hparticlegeantevent.cc:316  hparticlegeantevent.cc:317  hparticlegeantevent.cc:318  hparticlegeantevent.cc:319  hparticlegeantevent.cc:320  hparticlegeantevent.cc:321  hparticlegeantevent.cc:322  hparticlegeantevent.cc:323  hparticlegeantevent.cc:324  hparticlegeantevent.cc:325  hparticlegeantevent.cc:326  hparticlegeantevent.cc:327  hparticlegeantevent.cc:328  hparticlegeantevent.cc:329  hparticlegeantevent.cc:330  hparticlegeantevent.cc:331  hparticlegeantevent.cc:332  hparticlegeantevent.cc:333  hparticlegeantevent.cc:334  hparticlegeantevent.cc:335  hparticlegeantevent.cc:336  hparticlegeantevent.cc:337  hparticlegeantevent.cc:338  hparticlegeantevent.cc:339  hparticlegeantevent.cc:340  hparticlegeantevent.cc:341  hparticlegeantevent.cc:342  hparticlegeantevent.cc:343  hparticlegeantevent.cc:344  hparticlegeantevent.cc:345  hparticlegeantevent.cc:346  hparticlegeantevent.cc:347  hparticlegeantevent.cc:348  hparticlegeantevent.cc:349  hparticlegeantevent.cc:350  hparticlegeantevent.cc:351  hparticlegeantevent.cc:352  hparticlegeantevent.cc:353  hparticlegeantevent.cc:354  hparticlegeantevent.cc:355  hparticlegeantevent.cc:356  hparticlegeantevent.cc:357  hparticlegeantevent.cc:358  hparticlegeantevent.cc:359  hparticlegeantevent.cc:360  hparticlegeantevent.cc:361  hparticlegeantevent.cc:362  hparticlegeantevent.cc:363  hparticlegeantevent.cc:364  hparticlegeantevent.cc:365  hparticlegeantevent.cc:366  hparticlegeantevent.cc:367  hparticlegeantevent.cc:368  hparticlegeantevent.cc:369  hparticlegeantevent.cc:370  hparticlegeantevent.cc:371  hparticlegeantevent.cc:372  hparticlegeantevent.cc:373  hparticlegeantevent.cc:374  hparticlegeantevent.cc:375  hparticlegeantevent.cc:376  hparticlegeantevent.cc:377  hparticlegeantevent.cc:378  hparticlegeantevent.cc:379  hparticlegeantevent.cc:380  hparticlegeantevent.cc:381  hparticlegeantevent.cc:382  hparticlegeantevent.cc:383  hparticlegeantevent.cc:384  hparticlegeantevent.cc:385  hparticlegeantevent.cc:386  hparticlegeantevent.cc:387  hparticlegeantevent.cc:388  hparticlegeantevent.cc:389  hparticlegeantevent.cc:390  hparticlegeantevent.cc:391  hparticlegeantevent.cc:392  hparticlegeantevent.cc:393  hparticlegeantevent.cc:394  hparticlegeantevent.cc:395  hparticlegeantevent.cc:396  hparticlegeantevent.cc:397  hparticlegeantevent.cc:398  hparticlegeantevent.cc:399  hparticlegeantevent.cc:400  hparticlegeantevent.cc:401  hparticlegeantevent.cc:402  hparticlegeantevent.cc:403  hparticlegeantevent.cc:404  hparticlegeantevent.cc:405  hparticlegeantevent.cc:406  hparticlegeantevent.cc:407  hparticlegeantevent.cc:408  hparticlegeantevent.cc:409  hparticlegeantevent.cc:410  hparticlegeantevent.cc:411  hparticlegeantevent.cc:412  hparticlegeantevent.cc:413  hparticlegeantevent.cc:414  hparticlegeantevent.cc:415  hparticlegeantevent.cc:416  hparticlegeantevent.cc:417  hparticlegeantevent.cc:418  hparticlegeantevent.cc:419  hparticlegeantevent.cc:420  hparticlegeantevent.cc:421  hparticlegeantevent.cc:422  hparticlegeantevent.cc:423  hparticlegeantevent.cc:424  hparticlegeantevent.cc:425  hparticlegeantevent.cc:426  hparticlegeantevent.cc:427  hparticlegeantevent.cc:428  hparticlegeantevent.cc:429  hparticlegeantevent.cc:430  hparticlegeantevent.cc:431  hparticlegeantevent.cc:432  hparticlegeantevent.cc:433  hparticlegeantevent.cc:434  hparticlegeantevent.cc:435  hparticlegeantevent.cc:436  hparticlegeantevent.cc:437  hparticlegeantevent.cc:438  hparticlegeantevent.cc:439  hparticlegeantevent.cc:440  hparticlegeantevent.cc:441  hparticlegeantevent.cc:442  hparticlegeantevent.cc:443  hparticlegeantevent.cc:444  hparticlegeantevent.cc:445  hparticlegeantevent.cc:446  hparticlegeantevent.cc:447  hparticlegeantevent.cc:448  hparticlegeantevent.cc:449  hparticlegeantevent.cc:450  hparticlegeantevent.cc:451  hparticlegeantevent.cc:452  hparticlegeantevent.cc:453  hparticlegeantevent.cc:454  hparticlegeantevent.cc:455  hparticlegeantevent.cc:456  hparticlegeantevent.cc:457  hparticlegeantevent.cc:458  hparticlegeantevent.cc:459  hparticlegeantevent.cc:460  hparticlegeantevent.cc:461  hparticlegeantevent.cc:462  hparticlegeantevent.cc:463  hparticlegeantevent.cc:464  hparticlegeantevent.cc:465  hparticlegeantevent.cc:466  hparticlegeantevent.cc:467  hparticlegeantevent.cc:468  hparticlegeantevent.cc:469  hparticlegeantevent.cc:470  hparticlegeantevent.cc:471  hparticlegeantevent.cc:472  hparticlegeantevent.cc:473  hparticlegeantevent.cc:474  hparticlegeantevent.cc:475  hparticlegeantevent.cc:476  hparticlegeantevent.cc:477  hparticlegeantevent.cc:478  hparticlegeantevent.cc:479  hparticlegeantevent.cc:480  hparticlegeantevent.cc:481  hparticlegeantevent.cc:482  hparticlegeantevent.cc:483  hparticlegeantevent.cc:484  hparticlegeantevent.cc:485  hparticlegeantevent.cc:486  hparticlegeantevent.cc:487  hparticlegeantevent.cc:488  hparticlegeantevent.cc:489  hparticlegeantevent.cc:490  hparticlegeantevent.cc:491  hparticlegeantevent.cc:492  hparticlegeantevent.cc:493  hparticlegeantevent.cc:494  hparticlegeantevent.cc:495  hparticlegeantevent.cc:496  hparticlegeantevent.cc:497  hparticlegeantevent.cc:498  hparticlegeantevent.cc:499  hparticlegeantevent.cc:500  hparticlegeantevent.cc:501  hparticlegeantevent.cc:502  hparticlegeantevent.cc:503  hparticlegeantevent.cc:504  hparticlegeantevent.cc:505  hparticlegeantevent.cc:506  hparticlegeantevent.cc:507  hparticlegeantevent.cc:508  hparticlegeantevent.cc:509  hparticlegeantevent.cc:510  hparticlegeantevent.cc:511  hparticlegeantevent.cc:512  hparticlegeantevent.cc:513  hparticlegeantevent.cc:514  hparticlegeantevent.cc:515  hparticlegeantevent.cc:516  hparticlegeantevent.cc:517  hparticlegeantevent.cc:518  hparticlegeantevent.cc:519  hparticlegeantevent.cc:520  hparticlegeantevent.cc:521  hparticlegeantevent.cc:522  hparticlegeantevent.cc:523  hparticlegeantevent.cc:524  hparticlegeantevent.cc:525  hparticlegeantevent.cc:526  hparticlegeantevent.cc:527  hparticlegeantevent.cc:528  hparticlegeantevent.cc:529  hparticlegeantevent.cc:530  hparticlegeantevent.cc:531  hparticlegeantevent.cc:532  hparticlegeantevent.cc:533  hparticlegeantevent.cc:534  hparticlegeantevent.cc:535  hparticlegeantevent.cc:536  hparticlegeantevent.cc:537  hparticlegeantevent.cc:538  hparticlegeantevent.cc:539  hparticlegeantevent.cc:540  hparticlegeantevent.cc:541  hparticlegeantevent.cc:542  hparticlegeantevent.cc:543  hparticlegeantevent.cc:544  hparticlegeantevent.cc:545  hparticlegeantevent.cc:546  hparticlegeantevent.cc:547  hparticlegeantevent.cc:548  hparticlegeantevent.cc:549  hparticlegeantevent.cc:550  hparticlegeantevent.cc:551  hparticlegeantevent.cc:552  hparticlegeantevent.cc:553  hparticlegeantevent.cc:554  hparticlegeantevent.cc:555  hparticlegeantevent.cc:556  hparticlegeantevent.cc:557  hparticlegeantevent.cc:558  hparticlegeantevent.cc:559  hparticlegeantevent.cc:560  hparticlegeantevent.cc:561  hparticlegeantevent.cc:562  hparticlegeantevent.cc:563  hparticlegeantevent.cc:564  hparticlegeantevent.cc:565  hparticlegeantevent.cc:566  hparticlegeantevent.cc:567  hparticlegeantevent.cc:568  hparticlegeantevent.cc:569  hparticlegeantevent.cc:570  hparticlegeantevent.cc:571  hparticlegeantevent.cc:572  hparticlegeantevent.cc:573  hparticlegeantevent.cc:574  hparticlegeantevent.cc:575  hparticlegeantevent.cc:576  hparticlegeantevent.cc:577  hparticlegeantevent.cc:578  hparticlegeantevent.cc:579  hparticlegeantevent.cc:580  hparticlegeantevent.cc:581  hparticlegeantevent.cc:582  hparticlegeantevent.cc:583  hparticlegeantevent.cc:584  hparticlegeantevent.cc:585  hparticlegeantevent.cc:586  hparticlegeantevent.cc:587  hparticlegeantevent.cc:588  hparticlegeantevent.cc:589  hparticlegeantevent.cc:590  hparticlegeantevent.cc:591  hparticlegeantevent.cc:592  hparticlegeantevent.cc:593  hparticlegeantevent.cc:594  hparticlegeantevent.cc:595  hparticlegeantevent.cc:596  hparticlegeantevent.cc:597  hparticlegeantevent.cc:598  hparticlegeantevent.cc:599  hparticlegeantevent.cc:600  hparticlegeantevent.cc:601  hparticlegeantevent.cc:602  hparticlegeantevent.cc:603  hparticlegeantevent.cc:604  hparticlegeantevent.cc:605  hparticlegeantevent.cc:606  hparticlegeantevent.cc:607  hparticlegeantevent.cc:608  hparticlegeantevent.cc:609  hparticlegeantevent.cc:610  hparticlegeantevent.cc:611  hparticlegeantevent.cc:612  hparticlegeantevent.cc:613  hparticlegeantevent.cc:614  hparticlegeantevent.cc:615  hparticlegeantevent.cc:616  hparticlegeantevent.cc:617  hparticlegeantevent.cc:618  hparticlegeantevent.cc:619  hparticlegeantevent.cc:620  hparticlegeantevent.cc:621  hparticlegeantevent.cc:622  hparticlegeantevent.cc:623  hparticlegeantevent.cc:624  hparticlegeantevent.cc:625  hparticlegeantevent.cc:626  hparticlegeantevent.cc:627  hparticlegeantevent.cc:628  hparticlegeantevent.cc:629  hparticlegeantevent.cc:630  hparticlegeantevent.cc:631  hparticlegeantevent.cc:632  hparticlegeantevent.cc:633  hparticlegeantevent.cc:634  hparticlegeantevent.cc:635  hparticlegeantevent.cc:636  hparticlegeantevent.cc:637  hparticlegeantevent.cc:638  hparticlegeantevent.cc:639  hparticlegeantevent.cc:640  hparticlegeantevent.cc:641  hparticlegeantevent.cc:642  hparticlegeantevent.cc:643  hparticlegeantevent.cc:644