ROOT logo
#include "hparticlecandsim.h"
#include "hades.h"
#include <iostream>
#include <iomanip>

using namespace std;

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

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////////
//
//
// HParticleCandSim
//
// Simulation object keeping HGeant information in addition to the normal
// HParticleCand. For documentation of enum constants see hparticledef.h
////////////////////////////////////////////////////////////////////////////////

Bool_t  HParticleCandSim::isGoodMDCWires(Int_t tr,Int_t minInner,Int_t minOuter,Bool_t checkall,Bool_t requireOuter)
{
    // checks if track tr is contributing to innner/outer segments (tr=-1 : any combination):
    // minInner     : (default 7) minimum required wires in inner seg from this track
    // minOuter     : (default 7) minimum required wires in outer seg from this track
    // checkall     : kFALSE (default) check only the most contributing track
    //                kTRUE            check both tracks stored
    // requireOuter : kTRUE  (default) check track in outer seg allways (tracks without outer seg will fail allways)
    //                kFALSE           check track in outer seg if outer segment exists (tracks without outer seg 
    //                                 will survive if track was found in inner seg)
    // to check inner seg only :  minOuter <=0
    // to check outer seg only :  minInner <=0
    Bool_t outerOnly = (minInner <=0)? kTRUE : kFALSE;
    Bool_t innerOnly = (minOuter <=0)? kTRUE : kFALSE;


    if(tr>0 || tr == Hades::getEmbeddingRealTrackId())
    {
	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){       // inner or inner+outer
	    // inner seg
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackInnerMdc[i] == tr && fGeantTrackInnerMdcN[i]>=minInner) { good1=kTRUE;  break;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1)) return  good1;      // if inner failed we don't look to outer
            
	} else {  // only check outer seg
	    good1 = kTRUE;
	}

        // outer seg
	for(Int_t i=0;i<2;i++){
	    if(!checkall && i >0) continue;
	    if(fGeantTrackOuterMdc[i] == tr && fGeantTrackOuterMdcN[i]>=minOuter) { good2=kTRUE;  break;}
	}
	if( good1 && good2) return kTRUE;

    } else {  // check if any track combination fullfill the requirements
	Int_t tracks[2]={-1,-1};

	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){     // inner or inner+outer
	    // inner seg
            Int_t ct=0;
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackInnerMdcN[i]>=minInner) { good1=kTRUE; tracks[i]=fGeantTrackInnerMdc[i]; ct++;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1) ) return good1;

	    for(Int_t j=0;j<ct;j++){
		for(Int_t i=0;i<2;i++){
		    if(!checkall && i >0) continue;
		    if(fGeantTrackOuterMdc[i] == tracks[j] && fGeantTrackOuterMdcN[i]>=minOuter) { good2=kTRUE;  break;}
		}
	    }
            return good2;

	} else {  // only check outer seg

	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackOuterMdcN[i]>=minOuter) { good2=kTRUE;  break;}
	    }
            return good2;
	}
    }
    return kFALSE;
}

Bool_t   HParticleCandSim::isGoodMDCWeight(Int_t tr,Float_t minInner,Float_t minOuter,Bool_t checkall,Bool_t requireOuter)
{
    // checks if track tr is contributing to innner/outer segments (tr=-1 : any combination):
    // minInner     : (default 0.5) minimum required fraction of wires in inner seg from this track
    // minOuter     : (default 0.5) minimum required fraction wires in outer seg from this track
    // checkall     : kFALSE (default) check only the most contributing track
    //                kTRUE            check both tracks stored
    // requireOuter : kTRUE  (default) check track in outer seg allways (tracks without outer seg will fail allways)
    //                kFALSE           check track in outer seg if outer segment exists (tracks without outer seg 
    //                                 will survive if track was found in inner seg)
    // to check inner seg only :  minOuter <=0
    // to check outer seg only :  minInner <=0

    Bool_t outerOnly = (minInner <=0)? kTRUE : kFALSE;
    Bool_t innerOnly = (minOuter <=0)? kTRUE : kFALSE;


    if(tr>0 || tr == Hades::getEmbeddingRealTrackId())
    {
	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){       // inner or inner+outer
	    // inner seg
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackInnerMdc[i] == tr && getGeantTrackInnerMdcWeight(i)>=minInner) { good1=kTRUE;  break;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1) ) return  good1;      // if inner failed we don't look to outer

	} else {  // only check outer seg
	    good1 = kTRUE;
	}

        // outer seg
	for(Int_t i=0;i<2;i++){
	    if(!checkall && i >0) continue;
	    if(fGeantTrackOuterMdc[i] == tr && getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
	}
	if( good1 && good2) return kTRUE;

    } else {  // check if any track combination fullfill the requirements
	Int_t tracks[2]={-1,-1};

	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){     // inner or inner+outer
	    // inner seg
            Int_t ct=0;
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(getGeantTrackInnerMdcWeight(i)>=minInner) { good1=kTRUE; tracks[i]=fGeantTrackInnerMdc[i]; ct++;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1) ) return good1;

	    for(Int_t j=0;j<ct;j++){
		for(Int_t i=0;i<2;i++){
		    if(!checkall && i >0) continue;
		    if(fGeantTrackOuterMdc[i] == tracks[j] && getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
		}
	    }
            return good2;

	} else {  // only check outer seg

	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
	    }
            return good2;
	}
    }
    return kFALSE;
}

Bool_t   HParticleCandSim::isGoodMDC(Int_t tr,Float_t minInner,Float_t minOuter,Int_t minInnerW,Int_t minOuterW,Bool_t checkall,Bool_t requireOuter)
{
    // checks if track tr is contributing to innner/outer segments (tr=-1 : any combination):
    // minInner     : (default 0.5) minimum required fraction of wires in inner seg from this track
    // minOuter     : (default 0.5) minimum required fraction wires in outer seg from this track
    // minInnerW    : (default 5) minimum required wires in inner seg from this track
    // minOuterW    : (default 5) minimum required wires in outer seg from this track
    // checkall     : kFALSE (default) check only the most contributing track
    //                kTRUE            check both tracks stored
    // requireOuter : kTRUE  (default) check track in outer seg allways (tracks without outer seg will fail allways)
    //                kFALSE           check track in outer seg if outer segment exists (tracks without outer seg 
    //                                 will survive if track was found in inner seg)
    // to check inner seg only :  minOuter <=0  || minOuterW <=0
    // to check outer seg only :  minInner <=0  || minInnerW <=0


    Bool_t outerOnly = (minInner <=0)? kTRUE : kFALSE;
    Bool_t innerOnly = (minOuter <=0)? kTRUE : kFALSE;


    if(tr>0 || tr == Hades::getEmbeddingRealTrackId())
    {
	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){       // inner or inner+outer
	    // inner seg
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackInnerMdc[i] == tr && fGeantTrackInnerMdcN[i]>=minInnerW && getGeantTrackInnerMdcWeight(i)>=minInner) { good1=kTRUE;  break;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1) ) return  good1;      // if inner failed we don't look to outer

	} else {  // only check outer seg
	    good1 = kTRUE;
	}

        // outer seg
	for(Int_t i=0;i<2;i++){
	    if(!checkall && i >0) continue;
	    if(fGeantTrackOuterMdc[i] == tr && fGeantTrackOuterMdcN[i]>=minOuterW && getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
	}
	if( good1 && good2) return kTRUE;

    } else {  // check if any track combination fullfill the requirements
	Int_t tracks[2]={-1,-1};

	Bool_t good1=kFALSE;
	Bool_t good2=kFALSE;

	if(!outerOnly){     // inner or inner+outer
	    // inner seg
            Int_t ct=0;
	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackInnerMdcN[i]>=minInnerW && getGeantTrackInnerMdcWeight(i)>=minInner) { good1=kTRUE; tracks[i]=fGeantTrackInnerMdc[i]; ct++;}
	    }
	    if(!good1 || innerOnly || (!requireOuter && fOuterSegInd==-1) ) return good1;

	    for(Int_t j=0;j<ct;j++){
		for(Int_t i=0;i<2;i++){
		    if(!checkall && i >0) continue;
		    if(fGeantTrackOuterMdc[i] == tracks[j] && fGeantTrackOuterMdcN[i]>=minOuterW && getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
		}
	    }
            return good2;

	} else {  // only check outer seg

	    for(Int_t i=0;i<2;i++){
		if(!checkall && i >0) continue;
		if(fGeantTrackOuterMdcN[i]>=minOuterW && getGeantTrackOuterMdcWeight(i)>=minOuter) { good2=kTRUE;  break;}
	    }
            return good2;
	}
    }
    return kFALSE;

}
void HParticleCandSim::print(UInt_t selection)
{
    // print one candidate object and the flags which have been
    // already set to HParticleCand
    //
    // print option bits
    // bit   1 : print hit indices                         (selection == 1)
    //       2 : print hit indices                         (selection == 2)
    //       3 : print chi2s and matching vars             (selection == 4)
    //       4 : print selection flags                     (selection == 8)
    //       5 : print Geant infos                         (selection == 16)


    // default : print all


    if( (selection&0xF) > 0 ) HParticleCand::print(selection);
    else cout<<"    "<<" --------------------------------------------"<<endl;

    if( (selection>>4) & 0x01){

    HVirtualCandSim::print(selection);

	cout<<"ghost track   : "<<setw(12)<<isGhostTrack()    <<", in RICH  : "<<setw(12)<<isInDetector(kIsInRICH)<<", in iMDC    : "<<setw(12)<<isInDetector(kIsInInnerMDC)<<", in oMDC    : "<<setw(12)<<isInDetector(kIsInOuterMDC)<<", in TOF     : "<<setw(12)<<isInDetector(kIsInTOF)<<", in RPC     : "<<setw(12)<<isInDetector(kIsInRPC)<<", in SHOWER: "<<setw(12)<<isInDetector(kIsInSHOWER)<<endl;
        cout<<"Geant MDC i tr: "<<setw(6) <<fGeantTrackInnerMdc[0]   <<" ("<<setw(3)<<(Int_t)fGeantTrackInnerMdcN[0] <<"), "<<setw(6)<<fGeantTrackInnerMdc  [1] <<" ( "<<setw(3)<<(Int_t)fGeantTrackInnerMdcN  [1] <<")" <<endl;
        cout<<"Geant MDC o tr: "<<setw(6) <<fGeantTrackOuterMdc[0]   <<" ("<<setw(3)<<(Int_t)fGeantTrackOuterMdcN[0] <<"), "<<setw(6)<<fGeantTrackOuterMdc  [1] <<" ( "<<setw(3)<<(Int_t)fGeantTrackOuterMdcN  [1] <<")" <<endl;
        cout<<"Geant META  tr: "<<setw(12)<<fGeantTrackMeta  [0]     <<", "<<setw(12)<<fGeantTrackMeta  [1] <<", "<<setw(12)<<fGeantTrackMeta  [2] <<", "<<setw(12)<<fGeantTrackMeta  [3]  <<endl;
        cout<<"Geant SHR   tr: "<<setw(12)<<fGeantTrackShower[0]     <<", "<<setw(12)<<fGeantTrackShower[1] <<", "<<setw(12)<<fGeantTrackShower[2] <<", "<<setw(12)<<fGeantTrackShower[3]  <<endl;
        cout<<"Geant RICH  tr: "<<setw(12)<<fGeantTrackRich  [0]     <<", "<<setw(12)<<fGeantTrackRich  [1] <<", "<<setw(12)<<fGeantTrackRich  [2] <<endl;

    }

}

void HParticleCandSim::Streamer(TBuffer &R__b)
{
   // Stream an object of class HParticleCandSim.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      if (R__v < 4) { OldStreamer(R__b, R__v); return; }
      HVirtualCandSim::Streamer(R__b);
      HParticleCand::Streamer(R__b);
      if(R__v > 1){
	  R__b.ReadStaticArray((int*)fGeantTrackRich);
	  R__b.ReadStaticArray((int*)fGeantTrackMeta);
          R__b.ReadStaticArray((int*)fGeantTrackShower);
      } else {
	  for (Int_t i = 0; i < 3; ++i) fGeantTrackRich[i] = -1;
	  for (Int_t i = 0; i < 4; ++i) {
	      fGeantTrackMeta  [i] = -1;
              fGeantTrackShower[i] = -1;
          }
      }

      if(R__v > 2){
	  R__b.ReadStaticArray((int*)fGeantTrackInnerMdc);
	  R__b.ReadStaticArray((int*)fGeantTrackOuterMdc);
	  R__b.ReadStaticArray((char*)fGeantTrackInnerMdcN);
	  R__b.ReadStaticArray((char*)fGeantTrackOuterMdcN);
      } else {
	  for (Int_t i = 0; i < 2; ++i) {
	      fGeantTrackInnerMdc[i] = -1;
	      fGeantTrackOuterMdc[i] = -1;
	      fGeantTrackInnerMdcN[i] = 0;
	      fGeantTrackOuterMdcN[i] = 0;
	  }
      }
     R__b.CheckByteCount(R__s, R__c, HParticleCandSim::IsA());
   } else {
      R__c = R__b.WriteVersion(HParticleCandSim::IsA(), kTRUE);
      HVirtualCandSim::Streamer(R__b);
      HParticleCand::Streamer(R__b);
      R__b.WriteArray(fGeantTrackRich, 3);
      R__b.WriteArray(fGeantTrackMeta, 4);
      R__b.WriteArray(fGeantTrackShower, 4);
      R__b.WriteArray(fGeantTrackInnerMdc,2);
      R__b.WriteArray(fGeantTrackOuterMdc,2);
      R__b.WriteArray(fGeantTrackInnerMdcN,2);
      R__b.WriteArray(fGeantTrackOuterMdcN,2);
      R__b.SetByteCount(R__c, kTRUE);
   }
}

void HParticleCandSim::OldStreamer(TBuffer &R__b, Int_t version)
{
   // Stream an object of class HParticleCandSim.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      HParticleCand::Streamer(R__b);
      R__b >> fGeantPID;
      R__b >> fGeantTrack;
      R__b >> fGeantCorrTrackIds;
      R__b >> fGeantxMom;
      R__b >> fGeantyMom;
      R__b >> fGeantzMom;
      R__b >> fGeantxVertex;
      R__b >> fGeantyVertex;
      R__b >> fGeantzVertex;
      R__b >> fGeantParentTrackNum;
      R__b >> fGeantParentPID;
      R__b >> fGeantGrandParentTrackNum;
      R__b >> fGeantGrandParentPID;
      R__b >> fGeantCreationMechanism;
      R__b >> fGeantMediumNumber;
      R__b >> fGeantgeninfo;
      R__b >> fGeantgeninfo1;
      R__b >> fGeantgeninfo2;
      R__b >> fGeantgenweight;
      if(R__v > 1){
	  R__b.ReadStaticArray((int*)fGeantTrackRich);
	  R__b.ReadStaticArray((int*)fGeantTrackMeta);
          R__b.ReadStaticArray((int*)fGeantTrackShower);
      } else {
	  for (Int_t i = 0; i < 3; ++i) fGeantTrackRich[i] = -1;
	  for (Int_t i = 0; i < 4; ++i) {
	      fGeantTrackMeta  [i] = -1;
              fGeantTrackShower[i] = -1;
          }
      }

      if(R__v > 2){
	  R__b.ReadStaticArray((int*)fGeantTrackInnerMdc);
	  R__b.ReadStaticArray((int*)fGeantTrackOuterMdc);
	  R__b.ReadStaticArray((char*)fGeantTrackInnerMdcN);
	  R__b.ReadStaticArray((char*)fGeantTrackOuterMdcN);
      } else {
	  for (Int_t i = 0; i < 2; ++i) {
	      fGeantTrackInnerMdc[i] = -1;
	      fGeantTrackOuterMdc[i] = -1;
	      fGeantTrackInnerMdcN[i] = 0;
	      fGeantTrackOuterMdcN[i] = 0;
	  }
      }
     R__b.CheckByteCount(R__s, R__c, HParticleCandSim::IsA());
   }
}
 hparticlecandsim.cc:1
 hparticlecandsim.cc:2
 hparticlecandsim.cc:3
 hparticlecandsim.cc:4
 hparticlecandsim.cc:5
 hparticlecandsim.cc:6
 hparticlecandsim.cc:7
 hparticlecandsim.cc:8
 hparticlecandsim.cc:9
 hparticlecandsim.cc:10
 hparticlecandsim.cc:11
 hparticlecandsim.cc:12
 hparticlecandsim.cc:13
 hparticlecandsim.cc:14
 hparticlecandsim.cc:15
 hparticlecandsim.cc:16
 hparticlecandsim.cc:17
 hparticlecandsim.cc:18
 hparticlecandsim.cc:19
 hparticlecandsim.cc:20
 hparticlecandsim.cc:21
 hparticlecandsim.cc:22
 hparticlecandsim.cc:23
 hparticlecandsim.cc:24
 hparticlecandsim.cc:25
 hparticlecandsim.cc:26
 hparticlecandsim.cc:27
 hparticlecandsim.cc:28
 hparticlecandsim.cc:29
 hparticlecandsim.cc:30
 hparticlecandsim.cc:31
 hparticlecandsim.cc:32
 hparticlecandsim.cc:33
 hparticlecandsim.cc:34
 hparticlecandsim.cc:35
 hparticlecandsim.cc:36
 hparticlecandsim.cc:37
 hparticlecandsim.cc:38
 hparticlecandsim.cc:39
 hparticlecandsim.cc:40
 hparticlecandsim.cc:41
 hparticlecandsim.cc:42
 hparticlecandsim.cc:43
 hparticlecandsim.cc:44
 hparticlecandsim.cc:45
 hparticlecandsim.cc:46
 hparticlecandsim.cc:47
 hparticlecandsim.cc:48
 hparticlecandsim.cc:49
 hparticlecandsim.cc:50
 hparticlecandsim.cc:51
 hparticlecandsim.cc:52
 hparticlecandsim.cc:53
 hparticlecandsim.cc:54
 hparticlecandsim.cc:55
 hparticlecandsim.cc:56
 hparticlecandsim.cc:57
 hparticlecandsim.cc:58
 hparticlecandsim.cc:59
 hparticlecandsim.cc:60
 hparticlecandsim.cc:61
 hparticlecandsim.cc:62
 hparticlecandsim.cc:63
 hparticlecandsim.cc:64
 hparticlecandsim.cc:65
 hparticlecandsim.cc:66
 hparticlecandsim.cc:67
 hparticlecandsim.cc:68
 hparticlecandsim.cc:69
 hparticlecandsim.cc:70
 hparticlecandsim.cc:71
 hparticlecandsim.cc:72
 hparticlecandsim.cc:73
 hparticlecandsim.cc:74
 hparticlecandsim.cc:75
 hparticlecandsim.cc:76
 hparticlecandsim.cc:77
 hparticlecandsim.cc:78
 hparticlecandsim.cc:79
 hparticlecandsim.cc:80
 hparticlecandsim.cc:81
 hparticlecandsim.cc:82
 hparticlecandsim.cc:83
 hparticlecandsim.cc:84
 hparticlecandsim.cc:85
 hparticlecandsim.cc:86
 hparticlecandsim.cc:87
 hparticlecandsim.cc:88
 hparticlecandsim.cc:89
 hparticlecandsim.cc:90
 hparticlecandsim.cc:91
 hparticlecandsim.cc:92
 hparticlecandsim.cc:93
 hparticlecandsim.cc:94
 hparticlecandsim.cc:95
 hparticlecandsim.cc:96
 hparticlecandsim.cc:97
 hparticlecandsim.cc:98
 hparticlecandsim.cc:99
 hparticlecandsim.cc:100
 hparticlecandsim.cc:101
 hparticlecandsim.cc:102
 hparticlecandsim.cc:103
 hparticlecandsim.cc:104
 hparticlecandsim.cc:105
 hparticlecandsim.cc:106
 hparticlecandsim.cc:107
 hparticlecandsim.cc:108
 hparticlecandsim.cc:109
 hparticlecandsim.cc:110
 hparticlecandsim.cc:111
 hparticlecandsim.cc:112
 hparticlecandsim.cc:113
 hparticlecandsim.cc:114
 hparticlecandsim.cc:115
 hparticlecandsim.cc:116
 hparticlecandsim.cc:117
 hparticlecandsim.cc:118
 hparticlecandsim.cc:119
 hparticlecandsim.cc:120
 hparticlecandsim.cc:121
 hparticlecandsim.cc:122
 hparticlecandsim.cc:123
 hparticlecandsim.cc:124
 hparticlecandsim.cc:125
 hparticlecandsim.cc:126
 hparticlecandsim.cc:127
 hparticlecandsim.cc:128
 hparticlecandsim.cc:129
 hparticlecandsim.cc:130
 hparticlecandsim.cc:131
 hparticlecandsim.cc:132
 hparticlecandsim.cc:133
 hparticlecandsim.cc:134
 hparticlecandsim.cc:135
 hparticlecandsim.cc:136
 hparticlecandsim.cc:137
 hparticlecandsim.cc:138
 hparticlecandsim.cc:139
 hparticlecandsim.cc:140
 hparticlecandsim.cc:141
 hparticlecandsim.cc:142
 hparticlecandsim.cc:143
 hparticlecandsim.cc:144
 hparticlecandsim.cc:145
 hparticlecandsim.cc:146
 hparticlecandsim.cc:147
 hparticlecandsim.cc:148
 hparticlecandsim.cc:149
 hparticlecandsim.cc:150
 hparticlecandsim.cc:151
 hparticlecandsim.cc:152
 hparticlecandsim.cc:153
 hparticlecandsim.cc:154
 hparticlecandsim.cc:155
 hparticlecandsim.cc:156
 hparticlecandsim.cc:157
 hparticlecandsim.cc:158
 hparticlecandsim.cc:159
 hparticlecandsim.cc:160
 hparticlecandsim.cc:161
 hparticlecandsim.cc:162
 hparticlecandsim.cc:163
 hparticlecandsim.cc:164
 hparticlecandsim.cc:165
 hparticlecandsim.cc:166
 hparticlecandsim.cc:167
 hparticlecandsim.cc:168
 hparticlecandsim.cc:169
 hparticlecandsim.cc:170
 hparticlecandsim.cc:171
 hparticlecandsim.cc:172
 hparticlecandsim.cc:173
 hparticlecandsim.cc:174
 hparticlecandsim.cc:175
 hparticlecandsim.cc:176
 hparticlecandsim.cc:177
 hparticlecandsim.cc:178
 hparticlecandsim.cc:179
 hparticlecandsim.cc:180
 hparticlecandsim.cc:181
 hparticlecandsim.cc:182
 hparticlecandsim.cc:183
 hparticlecandsim.cc:184
 hparticlecandsim.cc:185
 hparticlecandsim.cc:186
 hparticlecandsim.cc:187
 hparticlecandsim.cc:188
 hparticlecandsim.cc:189
 hparticlecandsim.cc:190
 hparticlecandsim.cc:191
 hparticlecandsim.cc:192
 hparticlecandsim.cc:193
 hparticlecandsim.cc:194
 hparticlecandsim.cc:195
 hparticlecandsim.cc:196
 hparticlecandsim.cc:197
 hparticlecandsim.cc:198
 hparticlecandsim.cc:199
 hparticlecandsim.cc:200
 hparticlecandsim.cc:201
 hparticlecandsim.cc:202
 hparticlecandsim.cc:203
 hparticlecandsim.cc:204
 hparticlecandsim.cc:205
 hparticlecandsim.cc:206
 hparticlecandsim.cc:207
 hparticlecandsim.cc:208
 hparticlecandsim.cc:209
 hparticlecandsim.cc:210
 hparticlecandsim.cc:211
 hparticlecandsim.cc:212
 hparticlecandsim.cc:213
 hparticlecandsim.cc:214
 hparticlecandsim.cc:215
 hparticlecandsim.cc:216
 hparticlecandsim.cc:217
 hparticlecandsim.cc:218
 hparticlecandsim.cc:219
 hparticlecandsim.cc:220
 hparticlecandsim.cc:221
 hparticlecandsim.cc:222
 hparticlecandsim.cc:223
 hparticlecandsim.cc:224
 hparticlecandsim.cc:225
 hparticlecandsim.cc:226
 hparticlecandsim.cc:227
 hparticlecandsim.cc:228
 hparticlecandsim.cc:229
 hparticlecandsim.cc:230
 hparticlecandsim.cc:231
 hparticlecandsim.cc:232
 hparticlecandsim.cc:233
 hparticlecandsim.cc:234
 hparticlecandsim.cc:235
 hparticlecandsim.cc:236
 hparticlecandsim.cc:237
 hparticlecandsim.cc:238
 hparticlecandsim.cc:239
 hparticlecandsim.cc:240
 hparticlecandsim.cc:241
 hparticlecandsim.cc:242
 hparticlecandsim.cc:243
 hparticlecandsim.cc:244
 hparticlecandsim.cc:245
 hparticlecandsim.cc:246
 hparticlecandsim.cc:247
 hparticlecandsim.cc:248
 hparticlecandsim.cc:249
 hparticlecandsim.cc:250
 hparticlecandsim.cc:251
 hparticlecandsim.cc:252
 hparticlecandsim.cc:253
 hparticlecandsim.cc:254
 hparticlecandsim.cc:255
 hparticlecandsim.cc:256
 hparticlecandsim.cc:257
 hparticlecandsim.cc:258
 hparticlecandsim.cc:259
 hparticlecandsim.cc:260
 hparticlecandsim.cc:261
 hparticlecandsim.cc:262
 hparticlecandsim.cc:263
 hparticlecandsim.cc:264
 hparticlecandsim.cc:265
 hparticlecandsim.cc:266
 hparticlecandsim.cc:267
 hparticlecandsim.cc:268
 hparticlecandsim.cc:269
 hparticlecandsim.cc:270
 hparticlecandsim.cc:271
 hparticlecandsim.cc:272
 hparticlecandsim.cc:273
 hparticlecandsim.cc:274
 hparticlecandsim.cc:275
 hparticlecandsim.cc:276
 hparticlecandsim.cc:277
 hparticlecandsim.cc:278
 hparticlecandsim.cc:279
 hparticlecandsim.cc:280
 hparticlecandsim.cc:281
 hparticlecandsim.cc:282
 hparticlecandsim.cc:283
 hparticlecandsim.cc:284
 hparticlecandsim.cc:285
 hparticlecandsim.cc:286
 hparticlecandsim.cc:287
 hparticlecandsim.cc:288
 hparticlecandsim.cc:289
 hparticlecandsim.cc:290
 hparticlecandsim.cc:291
 hparticlecandsim.cc:292
 hparticlecandsim.cc:293
 hparticlecandsim.cc:294
 hparticlecandsim.cc:295
 hparticlecandsim.cc:296
 hparticlecandsim.cc:297
 hparticlecandsim.cc:298
 hparticlecandsim.cc:299
 hparticlecandsim.cc:300
 hparticlecandsim.cc:301
 hparticlecandsim.cc:302
 hparticlecandsim.cc:303
 hparticlecandsim.cc:304
 hparticlecandsim.cc:305
 hparticlecandsim.cc:306
 hparticlecandsim.cc:307
 hparticlecandsim.cc:308
 hparticlecandsim.cc:309
 hparticlecandsim.cc:310
 hparticlecandsim.cc:311
 hparticlecandsim.cc:312
 hparticlecandsim.cc:313
 hparticlecandsim.cc:314
 hparticlecandsim.cc:315
 hparticlecandsim.cc:316
 hparticlecandsim.cc:317
 hparticlecandsim.cc:318
 hparticlecandsim.cc:319
 hparticlecandsim.cc:320
 hparticlecandsim.cc:321
 hparticlecandsim.cc:322
 hparticlecandsim.cc:323
 hparticlecandsim.cc:324
 hparticlecandsim.cc:325
 hparticlecandsim.cc:326
 hparticlecandsim.cc:327
 hparticlecandsim.cc:328
 hparticlecandsim.cc:329
 hparticlecandsim.cc:330
 hparticlecandsim.cc:331
 hparticlecandsim.cc:332
 hparticlecandsim.cc:333
 hparticlecandsim.cc:334
 hparticlecandsim.cc:335
 hparticlecandsim.cc:336
 hparticlecandsim.cc:337
 hparticlecandsim.cc:338
 hparticlecandsim.cc:339
 hparticlecandsim.cc:340
 hparticlecandsim.cc:341
 hparticlecandsim.cc:342
 hparticlecandsim.cc:343
 hparticlecandsim.cc:344
 hparticlecandsim.cc:345
 hparticlecandsim.cc:346
 hparticlecandsim.cc:347
 hparticlecandsim.cc:348
 hparticlecandsim.cc:349
 hparticlecandsim.cc:350
 hparticlecandsim.cc:351
 hparticlecandsim.cc:352
 hparticlecandsim.cc:353
 hparticlecandsim.cc:354
 hparticlecandsim.cc:355
 hparticlecandsim.cc:356
 hparticlecandsim.cc:357
 hparticlecandsim.cc:358
 hparticlecandsim.cc:359
 hparticlecandsim.cc:360
 hparticlecandsim.cc:361
 hparticlecandsim.cc:362
 hparticlecandsim.cc:363
 hparticlecandsim.cc:364
 hparticlecandsim.cc:365
 hparticlecandsim.cc:366
 hparticlecandsim.cc:367
 hparticlecandsim.cc:368
 hparticlecandsim.cc:369
 hparticlecandsim.cc:370
 hparticlecandsim.cc:371
 hparticlecandsim.cc:372
 hparticlecandsim.cc:373
 hparticlecandsim.cc:374
 hparticlecandsim.cc:375
 hparticlecandsim.cc:376
 hparticlecandsim.cc:377
 hparticlecandsim.cc:378
 hparticlecandsim.cc:379
 hparticlecandsim.cc:380
 hparticlecandsim.cc:381
 hparticlecandsim.cc:382
 hparticlecandsim.cc:383
 hparticlecandsim.cc:384
 hparticlecandsim.cc:385
 hparticlecandsim.cc:386
 hparticlecandsim.cc:387
 hparticlecandsim.cc:388
 hparticlecandsim.cc:389
 hparticlecandsim.cc:390