ROOT logo
#include "hparticlecand.h"
#include "henergylosscorrpar.h"
#include "hparticleanglecor.h"
#include "hphysicsconstants.h"

#include "TMath.h"
#include <iostream>
#include <iomanip>
using namespace std;

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

    //_HADES_CLASS_DESCRIPTION
    ////////////////////////////////////////////////////////////////////////////////
    //
    //
    // HParticleCand
    //
    // In this container matched hits from all detectors are stored.
    // The class does not define the algorithm how the matching is done.
    // This is defined in HMetaMatchF2 (coarse matching) and HParticleCandFiller.
    //
    // -------------------------------------------------------------------------
    // Track Cleaner flags
    // To clean the ParticleCand objects from unwanted fakes
    // the object carries a bitfield (32 bit Int_t). The different
    // qualitiy criteria can be used to select the best reconstructed
    // candidate in the case of multiple use of single detector hits.
    // The single bit numbers are defined by enum eFlagBits (see hparticledef.h)
    //
    //  The selection of tracks and setting of the corresponding flags is performed
    //  by HParticleCandCleaner and HParticleCandSorter classes (see the documentation).
    //
    //  For example void  setFlagBit(HParticle::kIsDoubleRICH) sets the bit flag that
    //  the RICH hit has been used in more than one HParticleCand object.
    //  Correspondingly one can ask for the flag with Bool_t isFlagBit(HParticle::kIsDoubleRICH)
    //  void   setFlagBit(Int_t bit) and  Bool_t isFlagBit(Int_t bit) works for the bitnumber (0-31) specified
    //  manually (if one knows what one is doing....)
    //  void   setFlagBit   (eFlagBits bit)
    //  void   unsetFlagBit (eFlagBits bit)
    //  Bool_t isFlagBit    (eFlagBits bit)
    //  void   setFlagBit   (Int_t bit);
    //  void   unsetFlagBit (Int_t bit);
    //  Bool_t isFlagBit    (Int_t bit);
    //  void   setFlagBitByValue(eFlagBits bit, Bool_t val) sets/unsets bit depending on val
    //  void   setFlagBitByValue(Int_t     bit, Bool_t val) sets/unsets bit depending on val
    //  Bool_t isFlagDoubleHit ()           check all Double_t hits flags simultanously (false if none set)
    //  Bool_t isFlagAllBestHit()           check all best hit flags simultanously    (true if all are set)
    //  Int_t  getDoubleHitsLeptons() returns the 4 bit Double_t hit word as Int_t
    //  Int_t  getDoubleHitsHadrons() returns the 3 bit Double_t hit word (excluding RICH) as Int_t
    //  Bool_t isFlagNoBestHit ()           check all best hit flags simultanously    (true if none set)
    //  Int_t  getFlagField()               do what you want with flags field
    //  Bool_t isFlagAND(Int_t num,Int_t fl, ...) check all flags in argument simultanously (false if none set)
    //  Bool_t isFlagOR(Int_t num,Int_t fl, ...)  check all flags in argument simultanously (true if any set)
    //  void   printFlags(TString comment="") prints all flags in binary representation.
    //  void   printInfo()                    prints indices of detector hits + quality criteria + flags
    //
    //  The function
    //  Bool_t select(Bool_t (*function)(HParticleCand* ))  { return  (*function)(this); }
    //  taking a pointer to function with argument HParticleCand* returning a Bool_t allows
    //  todo complex selection on the HParticleCand object as one has
    //  full access to all members of HParticleCand inside the test function.
    //  The function pointer can be a pointer to a global function or member function
    //  of an Object for example:
    //
    //  Bool_t test(HParticleCand* cand){               // global function
    //           if ( put all selection criteria here ) return kTRUE;
    //           else                                   return kFALSE;
    //  } or
    //
    //  static Bool_t dummy::test(HParticleCand* cand){   // member function of object dummy
    //                                                    // needs to be declared static !
    //           if ( put all selection criteria here ) return kTRUE;
    //           else                                   return kFALSE;
    //  }
    //  would be called in the code like
    //
    //  dummy d;
    //  HParticleCand* p= new HParticleCand() // just to get an object
    //  p->select(test))        // global function
    //  p->select(dummy::test)) // member function of object dummy (static call without object creation)
    //  p->select(d.test))      // member function of real object dummy
    //
    //
    ////////////////////////////////////////////////////////////////////////////////






void   HParticleCand::setFlagBit   (Int_t bit)
{
    // set given bit in flag (0-32)
    if(bit >= 0 && bit < 32 ) fFlags |=  ( 0x01 << bit );
    else {
	Error("HParticleCand::setFlagBit(Int_t)","Bit number out of range : %i!",bit);
    }
}

void   HParticleCand::unsetFlagBit (Int_t bit)
{
    // unset given bit in flag (0-32)
    if(bit >= 0 && bit < 32 ) fFlags &= ~( 0x01 << bit );
    else {
	Error("HParticleCand::unsetFlagBit(Int_t)","Bit number out of range : %i!",bit);
    }
}

Bool_t HParticleCand::isFlagBit    (Int_t bit)
{
    // check given bit in flag (0-32)
    // return kTRUE if bit is set
    if (bit >= 0 && bit < 32 )  return (fFlags >> bit ) & 0x01;
    else {
	Error("HParticleCand::isFlagBit(Int_t)","Bit number out of range : %i!",bit);
	return kFALSE;
    }
}

Bool_t HParticleCand::isFlagOR(Int_t num,...)
{
    // check given number of bits in argument in flag (0-32)
    // return kTRUE if any bit is set
    va_list ap;
    va_start(ap,num);

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

	Int_t bit=va_arg(ap,Int_t);
	if(bit < 0 || bit > 31)
	{
	    Error("HParticleCand::isFlagOR()","Bit number out of range : i=%i ,%i!",i,bit);
	    va_end(ap);
	    return kFALSE;
	}
	if(isFlagBit(bit)) {
	    va_end(ap);
	    return kTRUE;
	}
    }
    va_end(ap);
    return kFALSE;
}
Bool_t HParticleCand::isFlagAND(Int_t num, ...)
{
    // check given number of bits in argument in flag (0-32)
    // return kTRUE if all bits are set
    va_list ap;
    va_start(ap,num);

    for(Int_t i=0;i<num;i++){
	Int_t bit=va_arg(ap,Int_t);
	if(bit < 0 || bit > 31)
	{
	    Error("HParticleCand::isFlagAND()","Bit number out of range : i=%i ,%i!",i,bit);
	    va_end(ap);
	    return kFALSE;
	}
	if(!isFlagBit(bit)) {
	    va_end(ap);
	    return kFALSE;
	}
    }
    va_end(ap);
    return kTRUE;
}

void HParticleCand::printFlags(TString comment)
{
    // print the flag field in binary representation
    // Comment will be printed at the end of line

    TString out="";
    for(Int_t i=32;i>0;i--){
	if(i%4==0) out+=" ";
	out+= ( (fFlags>>(i-1)) & 0x1 );
    }
    cout<<"bin "<<out.Data()<<" "<<comment.Data()<<endl;
    cout<<endl;
    cout<<"kIsDoubleHitRICH        " <<(Int_t) isFlagBit(kIsDoubleHitRICH)         <<" bit "<<kIsDoubleHitRICH<<endl;
    cout<<"kIsDoubleHitInnerMDC    " <<(Int_t) isFlagBit(kIsDoubleHitInnerMDC)     <<" bit "<<kIsDoubleHitInnerMDC<<endl;
    cout<<"kIsDoubleHitOuterMDC    " <<(Int_t) isFlagBit(kIsDoubleHitOuterMDC)     <<" bit "<<kIsDoubleHitOuterMDC<<endl;
    cout<<"kIsDoubleHitMETA        " <<(Int_t) isFlagBit(kIsDoubleHitMETA)         <<" bit "<<kIsDoubleHitMETA<<endl;
    cout<<"kIsBestHitRICH          " <<(Int_t) isFlagBit(kIsBestHitRICH)           <<" bit "<<kIsBestHitRICH<<endl;
    cout<<"kIsBestHitInnerMDC      " <<(Int_t) isFlagBit(kIsBestHitInnerMDC)       <<" bit "<<kIsBestHitInnerMDC<<endl;
    cout<<"kIsBestHitOuterMDC      " <<(Int_t) isFlagBit(kIsBestHitOuterMDC)       <<" bit "<<kIsBestHitOuterMDC<<endl;
    cout<<"kIsBestHitMETA          " <<(Int_t) isFlagBit(kIsBestHitMETA)           <<" bit "<<kIsBestHitMETA<<endl;
    cout<<"kIsBestRK               " <<(Int_t) isFlagBit(kIsBestRK)                <<" bit "<<kIsBestRK<<endl;
    cout<<"kIsBestRKRKMETA         " <<(Int_t) isFlagBit(kIsBestRKRKMETA)          <<" bit "<<kIsBestRKRKMETA<<endl;
    cout<<"kIsBestRKRKMETARadius   " <<(Int_t) isFlagBit(kIsBestRKRKMETARadius)    <<" bit "<<kIsBestRKRKMETARadius<<endl;
    cout<<"kIsBestUser             " <<(Int_t) isFlagBit(kIsBestUser)              <<" bit "<<kIsBestUser<<endl;

    cout<<"kIsAcceptedHitRICH      " <<(Int_t) isFlagBit(kIsAcceptedHitRICH)       <<" bit "<<kIsAcceptedHitRICH<<endl;
    cout<<"kIsAcceptedHitRICHMDC   " <<(Int_t) isFlagBit(kIsAcceptedHitRICHMDC)    <<" bit "<<kIsAcceptedHitRICHMDC<<endl;
    cout<<"kIsAcceptedHitInnerMDC  " <<(Int_t) isFlagBit(kIsAcceptedHitInnerMDC)   <<" bit "<<kIsAcceptedHitInnerMDC<<endl;
    cout<<"kIsAcceptedHitOuterMDC  " <<(Int_t) isFlagBit(kIsAcceptedHitOuterMDC)   <<" bit "<<kIsAcceptedHitOuterMDC<<endl;
    cout<<"kIsAcceptedHitMETA      " <<(Int_t) isFlagBit(kIsAcceptedHitMETA)       <<" bit "<<kIsAcceptedHitMETA<<endl;
    cout<<"kIsAcceptedRKMETA       " <<(Int_t) isFlagBit(kIsAcceptedRKMETA)        <<" bit "<<kIsAcceptedRKMETA<<endl;
    cout<<"kIsAcceptedRKRICH       " <<(Int_t) isFlagBit(kIsAcceptedRKRICH)        <<" bit "<<kIsAcceptedRKRICH<<endl;
    cout<<"kIsAcceptedRK           " <<(Int_t) isFlagBit(kIsAcceptedRK)            <<" bit "<<kIsAcceptedRK<<endl;
    cout<<"kIsAcceptedRKMETA       " <<(Int_t) isFlagBit(kIsAcceptedRKRKMETA)      <<" bit "<<kIsAcceptedRKRKMETA<<endl;
    cout<<"kIsAcceptedRKMETARadius " <<(Int_t) isFlagBit(kIsAcceptedRKRKMETARadius)<<" bit "<<kIsAcceptedRKRKMETARadius<<endl;
    cout<<"kIsLepton               " <<(Int_t) isFlagBit(kIsLepton)                <<" bit "<<kIsLepton<<endl;
    cout<<"kIsUsed                 " <<(Int_t) isFlagBit(kIsUsed)                  <<" bit "<<kIsUsed<<endl;
    cout<<"kIsRejected             " <<(Int_t) isFlagBit(kIsRejected)              <<" bit "<<kIsRejected<<endl;

}


void HParticleCand::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)
    // default : print all

    cout<<"    "<<" --------------------------------------------"<<endl;
    if( (selection>>0) & 0x01){
	if(isEmc()){
	    cout<<"    "
		<<"sec: "    <<fSector
		<<" cand ind : "<<setw(4)<<fIndex
		<<", R: "    <<setw(3)<<fRichInd
		<<", iM: "   <<setw(4)<<fInnerSegInd
		<<", oM: "   <<setw(4)<<fOuterSegInd
		<<", Tclst: "<<setw(3)<<fTofClstInd
		<<", Thit: " <<setw(3)<<fTofHitInd
		<<", E: "  <<setw(3)<<fShowerInd
		<<", RPC: "  <<setw(3)<<fRpcInd
		<<endl;

	} else {
	    cout<<"    "
		<<"sec: "    <<fSector
		<<" cand ind : "<<setw(4)<<fIndex
		<<", R: "    <<setw(3)<<fRichInd
		<<", iM: "   <<setw(4)<<fInnerSegInd
		<<", oM: "   <<setw(4)<<fOuterSegInd
		<<", Tclst: "<<setw(3)<<fTofClstInd
		<<", Thit: " <<setw(3)<<fTofHitInd
		<<", S: "  <<setw(3)<<fShowerInd
		<<", RPC: "  <<setw(3)<<fRpcInd
		<<endl;
	}
    }
    if( (selection>>1) & 0x01){
	cout<<"    "
	    <<"ichi2    : " <<setw(8)<<fInnerSegmentChi2
	    <<",ochi2   : " <<setw(8)<<fOuterSegmentChi2
	    <<endl;
	if(isEmc())
	{
	    cout<<"    "
		<<"RKM      : "   <<setw(8)<<fMetaMatchQuality
		<<",RKMECA  : "   <<setw(8)<<fMetaMatchQualityShower
		<<",RKMR    : "   <<setw(8)<<fMetaMatchRadius
		<<",RKMRECA : "   <<setw(8)<<fMetaMatchRadiusShower
		<<",RKMdxEmc: "   <<setw(8)<<fRkMetaDxShower
		<<",RKMdyEmc: "   <<setw(8)<<fRkMetaDyShower
		<<",RKMdx   : "   <<setw(8)<<fRkMetaDx
		<<",RKMdy   : "   <<setw(8)<<fRkMetaDy <<endl;
	} else {
	    cout<<"    "
		<<"RKM      : "   <<setw(8)<<fMetaMatchQuality
		<<",RKMShr  : "   <<setw(8)<<fMetaMatchQualityShower
		<<",RKMR    : "   <<setw(8)<<fMetaMatchRadius
		<<",RKMRShr : "   <<setw(8)<<fMetaMatchRadiusShower
		<<",RKMdxShr: "   <<setw(8)<<fRkMetaDxShower
		<<",RKMdyShr: "   <<setw(8)<<fRkMetaDyShower
		<<",RKMdx   : "   <<setw(8)<<fRkMetaDx
		<<",RKMdy   : "   <<setw(8)<<fRkMetaDy <<endl;
	}
	cout<<"    "
	    <<"RKRKM    : "   <<setw(8)<<((fMetaMatchQuality >= 0 && fChi2 > 0 ) ? fMetaMatchQuality*fChi2 : -1.f)
	    <<",RKRKMR  : "   <<setw(8)<<((fMetaMatchRadius  >= 0 && fChi2 > 0 ) ? fMetaMatchRadius*fChi2 : -1.f)
	    <<",RKR     : "   <<setw(8)<<((fRichInd >= 0) ? getRichMatchingQuality() : -1.f)
	    <<",RK      : "   <<setw(8)<<fChi2
	    <<endl;

	cout<<"    "
	    <<"isRingRK : " <<setw(8)<<(((kIsRICHRK&fRingCorr) == kIsRICHRK)? 1 : 0)
	    <<",used    : "   <<setw(8)<<(Int_t)isFlagBit(kIsUsed)
	    <<",lepton  : "   <<setw(8)<<(Int_t)isFlagBit(kIsLepton)
	    <<",fake    : "   <<setw(8)<<(Int_t)isFakeRejected()
	    <<",offVert : "   <<setw(8)<<(Int_t)isOffVertexClust()
	    <<endl;
	
    }

    if( (selection>>2) & 0x01){
	cout<<"PID            : pid   : " <<setw(12)<<(Int_t)fPID <<", charge    : "<<setw(12)<<fCharge                       <<", beta      : "<<setw(12)<<fBeta                 <<", mom       : "<<setw(12)<<fMomentum<<endl;
	cout<<"               : mass2 : " <<setw(12)<<fMass2      <<", MDC dEdx  : "<<setw(12)<<fMdcdEdx                      <<", TOF dEdx  : "<<setw(12)<<fTofdEdx<<endl;
	cout<<"RK seg         : phi   : " <<setw(12)<<fPhi        <<", theta     : "<<setw(12)<<fTheta                <<", r         : "<<setw(12)<<fR                    <<", z         : "<<setw(12)<<fZ<<endl;
	cout<<"RK outer seg   : phi   : " <<setw(12)<<fPhi2       <<", theta     : "<<setw(12)<<fTheta2               <<", r         : "<<setw(12)<<fR2                   <<", z         : "<<setw(12)<<fZ2<<endl;

	if(isNewRich()){
	    cout<<"RICH           : ncals : " <<setw(12)<<(Int_t)fRingNumPads<<", chi2      : "<<setw(12)<<fRingAmplitude<<", av. chrge : "<<setw(12)<<getAverageRingCharge()<<", centroid   "<<setw(12)<<fRingCentroid<<endl;
	} else {
	    cout<<"RICH           : npads : " <<setw(12)<<(Int_t)fRingNumPads<<", amplitude : "<<setw(12)<<fRingChi2     <<", radius    : "<<setw(12)<<fRingCentroid<<endl;
	}
	cout<<"               : phi   : " <<setw(12)<<fRichPhi    <<", theta     : "<<setw(12)<<fRichTheta    <<", dphi      : "<<setw(12)<<getDeltaPhi()         <<", dtheta    : "<<setw(12)<<getDeltaTheta()<<endl;
	if(isEmc()) cout<<"ECAL           : E     : " <<setw(12)<<fShowerSum0 <<", time      : "<<setw(12)<<fShowerSum1   <<", cellPath  : "<<setw(12)<<fShowerSum2           <<endl;
	else        cout<<"SHOWER         : sum0  : " <<setw(12)<<fShowerSum0 <<", sum1      : "<<setw(12)<<fShowerSum1   <<", sum2      : "<<setw(12)<<fShowerSum2           <<", deltasum  : "<<setw(12)<<getShowerDeltaSum()<<endl;
    }

    cout<<"    "<<flush;
    if( (selection>>3) & 0x01) printFlags();
}
 
Float_t HParticleCand::getZprime(Float_t xBeam,Float_t yBeam,Float_t& rPrime)
{
    // xBeam, yBeam - position of beam(target) line in lab.system
    // returns zPrime coordinate value, rPrime as function argument
    Float_t phi    = fPhi * TMath::DegToRad();
    Float_t cosPhi = TMath::Cos(phi);
    Float_t sinPhi = TMath::Sin(phi);
    Float_t tanTh  = TMath::Tan(fTheta * TMath::DegToRad());
    rPrime = fR + xBeam * sinPhi - yBeam * cosPhi;
    if(TMath::Abs(tanTh) > 1.e-10) {
	return fZ + (xBeam * cosPhi + yBeam * sinPhi) / tanTh;
    } else {
	return fZ;
    }
}

Float_t HParticleCand::getZprime(Float_t xBeam,Float_t yBeam) {
    // xBeam, yBeam - position of beam(target) line in lab.system
    // returns zPrime coordinate value. if rPrime is needed too
    // use Float_t HParticleCand::getZprime(Float_t xBeam,Float_t yBeam,Float_t& rPrime)
    // to save some calculations
    Float_t tanTh  = TMath::Tan(fTheta * TMath::DegToRad());
    if(TMath::Abs(tanTh) < 1.e-10) return fZ;
    Float_t phi    = fPhi * TMath::DegToRad();
    return fZ + (xBeam * TMath::Cos(phi) + yBeam * TMath::Sin(phi)) / tanTh;
}

Float_t HParticleCand::getRprime(Float_t xBeam,Float_t yBeam) {
    // xBeam, yBeam - position of beam(target) line in lab.system
    // returns zPrime coordinate value. if zPrime is needed too
    // use Float_t HParticleCand::getZprime(Float_t xBeam,Float_t yBeam,Float_t& rPrime)
    // to save some calculations

    Float_t phi = fPhi * TMath::DegToRad();
    return fR + xBeam * TMath::Sin(phi) - yBeam * TMath::Cos(phi);
}

Float_t HParticleCand::getMomentumCorrectionPID(Int_t pid)
{
    // return the momentum correction for the candidate
    // due to material budget in target + rich + absorbers.
    // requires HEnergyLossCorrPar. The correction takes
    // into acount the charge of the particle ( > 1). Units
    // are MeV/c

    if(fMomentum == -1) return 0;

    static Bool_t doError = kTRUE;

    HEnergyLossCorrPar* corrpar = HEnergyLossCorrPar::getObject();
    Float_t corr = 0.;

    if(corrpar){
	Double_t mom = fMomentum;
	Int_t chrg   = TMath::Abs(HPhysicsConstants::charge(pid));
        if(chrg > 0) mom = mom*chrg;
	corr         = (Float_t) corrpar->getDeltaMom(pid,mom,fTheta);
    } else {
	if(doError) Error("getMomCorr()","HEnergyLossCorrPar not initialized!");
	doError = kFALSE;
    }

    return corr;
}

Float_t HParticleCand::getCorrectedMomentumPID(Int_t pid)
{
    // return the corrected momentum for the candidate
    // due to material budget in target + rich + absorbers.
    // requires HEnergyLossCorrPar. The correction takes
    // into acount the charge of the particle ( > 1). Units
    // are MeV/c

    if(fMomentum == -1) return fMomentum;

    Float_t mom      = fMomentum;
    Int_t chrg       = TMath::Abs(HPhysicsConstants::charge(pid));
    if(chrg > 0) mom = mom*chrg;

    Float_t corr = getMomentumCorrectionPID(pid);
    return  mom + corr;
}

Float_t HParticleCand::getMass2PID(Int_t pid)
{
    // returns the mass2 of the candidate taking
    // into account the charge of the provided PID  ( mom*charge)
    // In the track reconstruction by default all
    // momenta are recontructed using charge = 1

    if(fMass2 == -1) return fMass2;

    Float_t mom      = fMomentum;
    Int_t chrg       = TMath::Abs(HPhysicsConstants::charge(pid));
    if(chrg > 0) mom = mom*chrg;
    return (mom*mom)/(1-fBeta*fBeta)/(fBeta*fBeta);
}

Float_t HParticleCand::getMass2CorrectionPID(Int_t pid)
{
    // return the mass2 correction (mass2_corr-mass2) for the candidate
    // due to material budget in target + rich + absorbers.
    // requires HEnergyLossCorrPar. The correction takes
    // into acount the charge of the particle ( > 1). Units
    // are MeV/c

    if(fMass2 == -1) return 0;
    Float_t mass2     = getMass2PID(pid);
    Float_t mass2corr = getCorrectedMass2PID(pid);

    return mass2corr-mass2;
}

Float_t HParticleCand::getCorrectedMass2PID(Int_t pid)
{
    // return the corrected mass2 for the candidate
    // due to material budget in target + rich + absorbers.
    // requires HEnergyLossCorrPar. The correction takes
    // into acount the charge of the particle ( > 1). Units
    // are MeV/c

    if(fMass2 == -1) return fMass2;

    Float_t mom = getCorrectedMomentumPID(pid);

    return (mom*mom)/(1-fBeta*fBeta)/(fBeta*fBeta);
}
Float_t HParticleCand::getRichMatchingQualityNorm()
{
    // norm delta theta phi by width of distributions,
    // do some correction for theta,phi and momentum
    // (W. Koenig, see HParticleAngleCor::matchRingTrack() )
    return HParticleAngleCor::matchRingTrack(this);
}

Int_t HParticleCand::getNLayer(UInt_t io)
{
    // i0 :  0 = inner seg , 1 = outer seg, 2 = both segs
    Int_t sum=0;
    if(io<2){
	for(UInt_t i=0;i<12;i++){
	    sum+= getLayer(io,i);
	}
    } else {
	for(UInt_t i=0;i<12;i++){
	    sum+= getLayer(0,i);
	    sum+= getLayer(1,i);
	}
    }

    return sum;
}

Int_t HParticleCand::getNLayerMod(UInt_t mod)
{
    Int_t sum=0;
    UInt_t io =0;
    if(mod>1) io =1;
    UInt_t first = 0;
    UInt_t last  = 12;
    if(mod==1||mod==3)first=6;
    if(mod==0||mod==2)last =6;

    for(UInt_t i=first;i<last;i++){
        sum+= getLayer(io,i);
    }
   return sum;
}

void HParticleCand::printLayers()
{
    TString out="";
    for(Int_t i=32;i>0;i--){
	if(i<25&&i%6==0) out+=" ";
	out+= ( (fLayers>>(i-1)) & 0x1 );
    }
    cout<<"    layers "<<out.Data()<<endl;
}

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

   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 < 11) { OldStreamer(R__b, R__v); return; }
      HVirtualCand::Streamer(R__b);
      R__b >> fFlags;
      R__b >> fPID;
      R__b >> fSector;
      R__b >> fSystem;
      R__b >> fRingCorr;
      R__b >> fIndex;
      R__b >> fDistanceToMetaHit;
      R__b >> fMdcdEdx;
      R__b >> fTofdEdx;
      R__b >> fInnerSegmentChi2;
      R__b >> fOuterSegmentChi2;
      R__b >> fAngleToNearbyFittedInner;
      R__b >> fAngleToNearbyUnfittedInner;
      R__b >> fRingNumPads;
      R__b >> fRingAmplitude;
      R__b >> fRingHouTra;
      R__b >> fRingPatternMatrix;
      R__b >> fRingCentroid;
      R__b >> fRichPhi;
      R__b >> fRichTheta;
      if(R__v > 8) R__b >> fRingChi2;
      else                 fRingChi2 =-1000;
      R__b >> fMetaMatchQuality;
      if(R__v > 1) R__b >> fMetaMatchQualityShower;
      else                 fMetaMatchQualityShower = -1;
      if(R__v > 3){
	  R__b >> fMetaMatchRadius;
	  R__b >> fMetaMatchRadiusShower;
      } else {
            fMetaMatchRadius=-1;
	    fMetaMatchRadiusShower=-1;
      }
      if(R__v > 6){
	  R__b >> fRkMetaDx;
	  R__b >> fRkMetaDy;
      } else {
            fRkMetaDx=-1000;
	    fRkMetaDy=-1000;
      }
      if(R__v > 11){
	  R__b >> fRkMetaDxShower;
	  R__b >> fRkMetaDyShower;
      } else {
            fRkMetaDxShower=-1000;
	    fRkMetaDyShower=-1000;
      }
      if(R__v > 7){
	  R__b >> fBetaOrg;
	  R__b >> fMomentumOrg;
	  R__b >> fDistanceToMetaHitOrg;
      } else {
	  fBetaOrg = fBeta;
          fMomentumOrg = fMomentum;
          fDistanceToMetaHitOrg = fDistanceToMetaHit;
      }
      R__b >> fShowerSum0;
      R__b >> fShowerSum1;
      R__b >> fShowerSum2;

      if(R__v > 9) R__b >> fEmcFlags;
      else                 fEmcFlags=0;

      if(R__v > 1) R__b >> fSelectedMeta;
      else                 fSelectedMeta =-1;

      R__b >> fMetaInd;

      if(R__v == 5 ) {
	  Short_t tmpInd=-1;
	  R__b >> tmpInd;
	  fRichInd  = (tmpInd&(0xFF))-1;
	  fRichBTInd= (tmpInd>>8&(0xFF))-1;
      } else {
	  if(R__v > 5){
	      R__b >> fRichInd;
              R__b >> fRichBTInd;
	  } else {
	      R__b >> fRichInd;
	      fRichBTInd =-1;
	  }
      }

      R__b >> fInnerSegInd;
      R__b >> fOuterSegInd;
      R__b >> fRpcInd;
      R__b >> fShowerInd;
      R__b >> fTofHitInd;
      R__b >> fTofClstInd;
      if(R__v > 2) R__b >> fLayers; else fLayers = 0;
      if(R__v > 4) R__b >> fWires;  else fWires  = 0;
      if(R__v > 4) R__b >> fmetaAddress;  else fmetaAddress = 0;

      R__b.CheckByteCount(R__s, R__c, HParticleCand::IsA());
   } else {
      R__c = R__b.WriteVersion(HParticleCand::IsA(), kTRUE);
      HVirtualCand::Streamer(R__b);
      R__b << fFlags;
      R__b << fPID;
      R__b << fSector;
      R__b << fSystem;
      R__b << fRingCorr;
      R__b << fIndex;
      R__b << fDistanceToMetaHit;
      R__b << fMdcdEdx;
      R__b << fTofdEdx;
      R__b << fInnerSegmentChi2;
      R__b << fOuterSegmentChi2;
      R__b << fAngleToNearbyFittedInner;
      R__b << fAngleToNearbyUnfittedInner;
      R__b << fRingNumPads;
      R__b << fRingAmplitude;
      R__b << fRingHouTra;
      R__b << fRingPatternMatrix;
      R__b << fRingCentroid;
      R__b << fRichPhi;
      R__b << fRichTheta;
      R__b << fRingChi2;
      R__b << fMetaMatchQuality;
      R__b << fMetaMatchQualityShower;
      R__b << fMetaMatchRadius;
      R__b << fMetaMatchRadiusShower;
      R__b << fRkMetaDx;
      R__b << fRkMetaDy;
      R__b << fRkMetaDxShower;
      R__b << fRkMetaDyShower;
      R__b << fBetaOrg;
      R__b << fMomentumOrg;
      R__b << fDistanceToMetaHitOrg;
      R__b << fShowerSum0;
      R__b << fShowerSum1;
      R__b << fShowerSum2;
      R__b << fEmcFlags;
      R__b << fSelectedMeta;
      R__b << fMetaInd;
      R__b << fRichInd;
      R__b << fRichBTInd;
      R__b << fInnerSegInd;
      R__b << fOuterSegInd;
      R__b << fRpcInd;
      R__b << fShowerInd;
      R__b << fTofHitInd;
      R__b << fTofClstInd;
      R__b << fLayers;
      R__b << fWires;
      R__b << fmetaAddress;
      R__b.SetByteCount(R__c, kTRUE);
   }
}

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

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      TLorentzVector::Streamer(R__b);
      R__b >> fFlags;
      R__b >> fPID;
      R__b >> fSector;
      R__b >> fSystem;
      R__b >> fCharge;
      R__b >> fTofRec;
      R__b >> fRingCorr;
      R__b >> fIndex;
      R__b >> fBeta;
      R__b >> fMomentum;
      R__b >> fMass2;
      R__b >> fPhi;
      R__b >> fTheta;
      R__b >> fR;
      R__b >> fZ;
      R__b >> fChi2;
      R__b >> fDistanceToMetaHit;
      R__b >> fMdcdEdx;
      R__b >> fTofdEdx;
      R__b >> fInnerSegmentChi2;
      R__b >> fOuterSegmentChi2;
      R__b >> fAngleToNearbyFittedInner;
      R__b >> fAngleToNearbyUnfittedInner;
      R__b >> fRingNumPads;
      R__b >> fRingAmplitude;
      R__b >> fRingHouTra;
      R__b >> fRingPatternMatrix;
      R__b >> fRingCentroid;
      R__b >> fRichPhi;
      R__b >> fRichTheta;
      if(R__v > 8) R__b >> fRingChi2;
      else                 fRingChi2 =-1000;
      R__b >> fMetaMatchQuality;
      if(R__v > 1) R__b >> fMetaMatchQualityShower;
      else                 fMetaMatchQualityShower = -1;
      if(R__v > 3){
	  R__b >> fMetaMatchRadius;
	  R__b >> fMetaMatchRadiusShower;
      } else {
            fMetaMatchRadius=-1;
	    fMetaMatchRadiusShower=-1;
      }
      if(R__v > 6){
	  R__b >> fRkMetaDx;
	  R__b >> fRkMetaDy;
      } else {
            fRkMetaDx=-1000;
	    fRkMetaDy=-1000;
      }

      if(R__v > 7){
	  R__b >> fBetaOrg;
	  R__b >> fMomentumOrg;
	  R__b >> fDistanceToMetaHitOrg;
      } else {
	  fBetaOrg = fBeta;
          fMomentumOrg = fMomentum;
          fDistanceToMetaHitOrg = fDistanceToMetaHit;
      }
      R__b >> fShowerSum0;
      R__b >> fShowerSum1;
      R__b >> fShowerSum2;

      if(R__v > 9) R__b >> fEmcFlags;
      else                 fEmcFlags=0;

      if(R__v > 1) R__b >> fSelectedMeta;
      else                 fSelectedMeta =-1;

      R__b >> fMetaInd;

      if(R__v == 5 ) {
	  Short_t tmpInd=-1;
	  R__b >> tmpInd;
	  fRichInd  = (tmpInd&(0xFF))-1;
	  fRichBTInd= (tmpInd>>8&(0xFF))-1;
      } else {
	  if(R__v > 5){
	      R__b >> fRichInd;
              R__b >> fRichBTInd;
	  } else {
	      R__b >> fRichInd;
	      fRichBTInd =-1;
	  }
      }

      R__b >> fInnerSegInd;
      R__b >> fOuterSegInd;
      R__b >> fRpcInd;
      R__b >> fShowerInd;
      R__b >> fTofHitInd;
      R__b >> fTofClstInd;
      if(R__v > 2) R__b >> fLayers; else fLayers = 0;
      if(R__v > 4) R__b >> fWires;  else fWires  = 0;
      if(R__v > 4) R__b >> fmetaAddress;  else fmetaAddress = 0;

      R__b.CheckByteCount(R__s, R__c, HParticleCand::IsA());
   }
}
 hparticlecand.cc:1
 hparticlecand.cc:2
 hparticlecand.cc:3
 hparticlecand.cc:4
 hparticlecand.cc:5
 hparticlecand.cc:6
 hparticlecand.cc:7
 hparticlecand.cc:8
 hparticlecand.cc:9
 hparticlecand.cc:10
 hparticlecand.cc:11
 hparticlecand.cc:12
 hparticlecand.cc:13
 hparticlecand.cc:14
 hparticlecand.cc:15
 hparticlecand.cc:16
 hparticlecand.cc:17
 hparticlecand.cc:18
 hparticlecand.cc:19
 hparticlecand.cc:20
 hparticlecand.cc:21
 hparticlecand.cc:22
 hparticlecand.cc:23
 hparticlecand.cc:24
 hparticlecand.cc:25
 hparticlecand.cc:26
 hparticlecand.cc:27
 hparticlecand.cc:28
 hparticlecand.cc:29
 hparticlecand.cc:30
 hparticlecand.cc:31
 hparticlecand.cc:32
 hparticlecand.cc:33
 hparticlecand.cc:34
 hparticlecand.cc:35
 hparticlecand.cc:36
 hparticlecand.cc:37
 hparticlecand.cc:38
 hparticlecand.cc:39
 hparticlecand.cc:40
 hparticlecand.cc:41
 hparticlecand.cc:42
 hparticlecand.cc:43
 hparticlecand.cc:44
 hparticlecand.cc:45
 hparticlecand.cc:46
 hparticlecand.cc:47
 hparticlecand.cc:48
 hparticlecand.cc:49
 hparticlecand.cc:50
 hparticlecand.cc:51
 hparticlecand.cc:52
 hparticlecand.cc:53
 hparticlecand.cc:54
 hparticlecand.cc:55
 hparticlecand.cc:56
 hparticlecand.cc:57
 hparticlecand.cc:58
 hparticlecand.cc:59
 hparticlecand.cc:60
 hparticlecand.cc:61
 hparticlecand.cc:62
 hparticlecand.cc:63
 hparticlecand.cc:64
 hparticlecand.cc:65
 hparticlecand.cc:66
 hparticlecand.cc:67
 hparticlecand.cc:68
 hparticlecand.cc:69
 hparticlecand.cc:70
 hparticlecand.cc:71
 hparticlecand.cc:72
 hparticlecand.cc:73
 hparticlecand.cc:74
 hparticlecand.cc:75
 hparticlecand.cc:76
 hparticlecand.cc:77
 hparticlecand.cc:78
 hparticlecand.cc:79
 hparticlecand.cc:80
 hparticlecand.cc:81
 hparticlecand.cc:82
 hparticlecand.cc:83
 hparticlecand.cc:84
 hparticlecand.cc:85
 hparticlecand.cc:86
 hparticlecand.cc:87
 hparticlecand.cc:88
 hparticlecand.cc:89
 hparticlecand.cc:90
 hparticlecand.cc:91
 hparticlecand.cc:92
 hparticlecand.cc:93
 hparticlecand.cc:94
 hparticlecand.cc:95
 hparticlecand.cc:96
 hparticlecand.cc:97
 hparticlecand.cc:98
 hparticlecand.cc:99
 hparticlecand.cc:100
 hparticlecand.cc:101
 hparticlecand.cc:102
 hparticlecand.cc:103
 hparticlecand.cc:104
 hparticlecand.cc:105
 hparticlecand.cc:106
 hparticlecand.cc:107
 hparticlecand.cc:108
 hparticlecand.cc:109
 hparticlecand.cc:110
 hparticlecand.cc:111
 hparticlecand.cc:112
 hparticlecand.cc:113
 hparticlecand.cc:114
 hparticlecand.cc:115
 hparticlecand.cc:116
 hparticlecand.cc:117
 hparticlecand.cc:118
 hparticlecand.cc:119
 hparticlecand.cc:120
 hparticlecand.cc:121
 hparticlecand.cc:122
 hparticlecand.cc:123
 hparticlecand.cc:124
 hparticlecand.cc:125
 hparticlecand.cc:126
 hparticlecand.cc:127
 hparticlecand.cc:128
 hparticlecand.cc:129
 hparticlecand.cc:130
 hparticlecand.cc:131
 hparticlecand.cc:132
 hparticlecand.cc:133
 hparticlecand.cc:134
 hparticlecand.cc:135
 hparticlecand.cc:136
 hparticlecand.cc:137
 hparticlecand.cc:138
 hparticlecand.cc:139
 hparticlecand.cc:140
 hparticlecand.cc:141
 hparticlecand.cc:142
 hparticlecand.cc:143
 hparticlecand.cc:144
 hparticlecand.cc:145
 hparticlecand.cc:146
 hparticlecand.cc:147
 hparticlecand.cc:148
 hparticlecand.cc:149
 hparticlecand.cc:150
 hparticlecand.cc:151
 hparticlecand.cc:152
 hparticlecand.cc:153
 hparticlecand.cc:154
 hparticlecand.cc:155
 hparticlecand.cc:156
 hparticlecand.cc:157
 hparticlecand.cc:158
 hparticlecand.cc:159
 hparticlecand.cc:160
 hparticlecand.cc:161
 hparticlecand.cc:162
 hparticlecand.cc:163
 hparticlecand.cc:164
 hparticlecand.cc:165
 hparticlecand.cc:166
 hparticlecand.cc:167
 hparticlecand.cc:168
 hparticlecand.cc:169
 hparticlecand.cc:170
 hparticlecand.cc:171
 hparticlecand.cc:172
 hparticlecand.cc:173
 hparticlecand.cc:174
 hparticlecand.cc:175
 hparticlecand.cc:176
 hparticlecand.cc:177
 hparticlecand.cc:178
 hparticlecand.cc:179
 hparticlecand.cc:180
 hparticlecand.cc:181
 hparticlecand.cc:182
 hparticlecand.cc:183
 hparticlecand.cc:184
 hparticlecand.cc:185
 hparticlecand.cc:186
 hparticlecand.cc:187
 hparticlecand.cc:188
 hparticlecand.cc:189
 hparticlecand.cc:190
 hparticlecand.cc:191
 hparticlecand.cc:192
 hparticlecand.cc:193
 hparticlecand.cc:194
 hparticlecand.cc:195
 hparticlecand.cc:196
 hparticlecand.cc:197
 hparticlecand.cc:198
 hparticlecand.cc:199
 hparticlecand.cc:200
 hparticlecand.cc:201
 hparticlecand.cc:202
 hparticlecand.cc:203
 hparticlecand.cc:204
 hparticlecand.cc:205
 hparticlecand.cc:206
 hparticlecand.cc:207
 hparticlecand.cc:208
 hparticlecand.cc:209
 hparticlecand.cc:210
 hparticlecand.cc:211
 hparticlecand.cc:212
 hparticlecand.cc:213
 hparticlecand.cc:214
 hparticlecand.cc:215
 hparticlecand.cc:216
 hparticlecand.cc:217
 hparticlecand.cc:218
 hparticlecand.cc:219
 hparticlecand.cc:220
 hparticlecand.cc:221
 hparticlecand.cc:222
 hparticlecand.cc:223
 hparticlecand.cc:224
 hparticlecand.cc:225
 hparticlecand.cc:226
 hparticlecand.cc:227
 hparticlecand.cc:228
 hparticlecand.cc:229
 hparticlecand.cc:230
 hparticlecand.cc:231
 hparticlecand.cc:232
 hparticlecand.cc:233
 hparticlecand.cc:234
 hparticlecand.cc:235
 hparticlecand.cc:236
 hparticlecand.cc:237
 hparticlecand.cc:238
 hparticlecand.cc:239
 hparticlecand.cc:240
 hparticlecand.cc:241
 hparticlecand.cc:242
 hparticlecand.cc:243
 hparticlecand.cc:244
 hparticlecand.cc:245
 hparticlecand.cc:246
 hparticlecand.cc:247
 hparticlecand.cc:248
 hparticlecand.cc:249
 hparticlecand.cc:250
 hparticlecand.cc:251
 hparticlecand.cc:252
 hparticlecand.cc:253
 hparticlecand.cc:254
 hparticlecand.cc:255
 hparticlecand.cc:256
 hparticlecand.cc:257
 hparticlecand.cc:258
 hparticlecand.cc:259
 hparticlecand.cc:260
 hparticlecand.cc:261
 hparticlecand.cc:262
 hparticlecand.cc:263
 hparticlecand.cc:264
 hparticlecand.cc:265
 hparticlecand.cc:266
 hparticlecand.cc:267
 hparticlecand.cc:268
 hparticlecand.cc:269
 hparticlecand.cc:270
 hparticlecand.cc:271
 hparticlecand.cc:272
 hparticlecand.cc:273
 hparticlecand.cc:274
 hparticlecand.cc:275
 hparticlecand.cc:276
 hparticlecand.cc:277
 hparticlecand.cc:278
 hparticlecand.cc:279
 hparticlecand.cc:280
 hparticlecand.cc:281
 hparticlecand.cc:282
 hparticlecand.cc:283
 hparticlecand.cc:284
 hparticlecand.cc:285
 hparticlecand.cc:286
 hparticlecand.cc:287
 hparticlecand.cc:288
 hparticlecand.cc:289
 hparticlecand.cc:290
 hparticlecand.cc:291
 hparticlecand.cc:292
 hparticlecand.cc:293
 hparticlecand.cc:294
 hparticlecand.cc:295
 hparticlecand.cc:296
 hparticlecand.cc:297
 hparticlecand.cc:298
 hparticlecand.cc:299
 hparticlecand.cc:300
 hparticlecand.cc:301
 hparticlecand.cc:302
 hparticlecand.cc:303
 hparticlecand.cc:304
 hparticlecand.cc:305
 hparticlecand.cc:306
 hparticlecand.cc:307
 hparticlecand.cc:308
 hparticlecand.cc:309
 hparticlecand.cc:310
 hparticlecand.cc:311
 hparticlecand.cc:312
 hparticlecand.cc:313
 hparticlecand.cc:314
 hparticlecand.cc:315
 hparticlecand.cc:316
 hparticlecand.cc:317
 hparticlecand.cc:318
 hparticlecand.cc:319
 hparticlecand.cc:320
 hparticlecand.cc:321
 hparticlecand.cc:322
 hparticlecand.cc:323
 hparticlecand.cc:324
 hparticlecand.cc:325
 hparticlecand.cc:326
 hparticlecand.cc:327
 hparticlecand.cc:328
 hparticlecand.cc:329
 hparticlecand.cc:330
 hparticlecand.cc:331
 hparticlecand.cc:332
 hparticlecand.cc:333
 hparticlecand.cc:334
 hparticlecand.cc:335
 hparticlecand.cc:336
 hparticlecand.cc:337
 hparticlecand.cc:338
 hparticlecand.cc:339
 hparticlecand.cc:340
 hparticlecand.cc:341
 hparticlecand.cc:342
 hparticlecand.cc:343
 hparticlecand.cc:344
 hparticlecand.cc:345
 hparticlecand.cc:346
 hparticlecand.cc:347
 hparticlecand.cc:348
 hparticlecand.cc:349
 hparticlecand.cc:350
 hparticlecand.cc:351
 hparticlecand.cc:352
 hparticlecand.cc:353
 hparticlecand.cc:354
 hparticlecand.cc:355
 hparticlecand.cc:356
 hparticlecand.cc:357
 hparticlecand.cc:358
 hparticlecand.cc:359
 hparticlecand.cc:360
 hparticlecand.cc:361
 hparticlecand.cc:362
 hparticlecand.cc:363
 hparticlecand.cc:364
 hparticlecand.cc:365
 hparticlecand.cc:366
 hparticlecand.cc:367
 hparticlecand.cc:368
 hparticlecand.cc:369
 hparticlecand.cc:370
 hparticlecand.cc:371
 hparticlecand.cc:372
 hparticlecand.cc:373
 hparticlecand.cc:374
 hparticlecand.cc:375
 hparticlecand.cc:376
 hparticlecand.cc:377
 hparticlecand.cc:378
 hparticlecand.cc:379
 hparticlecand.cc:380
 hparticlecand.cc:381
 hparticlecand.cc:382
 hparticlecand.cc:383
 hparticlecand.cc:384
 hparticlecand.cc:385
 hparticlecand.cc:386
 hparticlecand.cc:387
 hparticlecand.cc:388
 hparticlecand.cc:389
 hparticlecand.cc:390
 hparticlecand.cc:391
 hparticlecand.cc:392
 hparticlecand.cc:393
 hparticlecand.cc:394
 hparticlecand.cc:395
 hparticlecand.cc:396
 hparticlecand.cc:397
 hparticlecand.cc:398
 hparticlecand.cc:399
 hparticlecand.cc:400
 hparticlecand.cc:401
 hparticlecand.cc:402
 hparticlecand.cc:403
 hparticlecand.cc:404
 hparticlecand.cc:405
 hparticlecand.cc:406
 hparticlecand.cc:407
 hparticlecand.cc:408
 hparticlecand.cc:409
 hparticlecand.cc:410
 hparticlecand.cc:411
 hparticlecand.cc:412
 hparticlecand.cc:413
 hparticlecand.cc:414
 hparticlecand.cc:415
 hparticlecand.cc:416
 hparticlecand.cc:417
 hparticlecand.cc:418
 hparticlecand.cc:419
 hparticlecand.cc:420
 hparticlecand.cc:421
 hparticlecand.cc:422
 hparticlecand.cc:423
 hparticlecand.cc:424
 hparticlecand.cc:425
 hparticlecand.cc:426
 hparticlecand.cc:427
 hparticlecand.cc:428
 hparticlecand.cc:429
 hparticlecand.cc:430
 hparticlecand.cc:431
 hparticlecand.cc:432
 hparticlecand.cc:433
 hparticlecand.cc:434
 hparticlecand.cc:435
 hparticlecand.cc:436
 hparticlecand.cc:437
 hparticlecand.cc:438
 hparticlecand.cc:439
 hparticlecand.cc:440
 hparticlecand.cc:441
 hparticlecand.cc:442
 hparticlecand.cc:443
 hparticlecand.cc:444
 hparticlecand.cc:445
 hparticlecand.cc:446
 hparticlecand.cc:447
 hparticlecand.cc:448
 hparticlecand.cc:449
 hparticlecand.cc:450
 hparticlecand.cc:451
 hparticlecand.cc:452
 hparticlecand.cc:453
 hparticlecand.cc:454
 hparticlecand.cc:455
 hparticlecand.cc:456
 hparticlecand.cc:457
 hparticlecand.cc:458
 hparticlecand.cc:459
 hparticlecand.cc:460
 hparticlecand.cc:461
 hparticlecand.cc:462
 hparticlecand.cc:463
 hparticlecand.cc:464
 hparticlecand.cc:465
 hparticlecand.cc:466
 hparticlecand.cc:467
 hparticlecand.cc:468
 hparticlecand.cc:469
 hparticlecand.cc:470
 hparticlecand.cc:471
 hparticlecand.cc:472
 hparticlecand.cc:473
 hparticlecand.cc:474
 hparticlecand.cc:475
 hparticlecand.cc:476
 hparticlecand.cc:477
 hparticlecand.cc:478
 hparticlecand.cc:479
 hparticlecand.cc:480
 hparticlecand.cc:481
 hparticlecand.cc:482
 hparticlecand.cc:483
 hparticlecand.cc:484
 hparticlecand.cc:485
 hparticlecand.cc:486
 hparticlecand.cc:487
 hparticlecand.cc:488
 hparticlecand.cc:489
 hparticlecand.cc:490
 hparticlecand.cc:491
 hparticlecand.cc:492
 hparticlecand.cc:493
 hparticlecand.cc:494
 hparticlecand.cc:495
 hparticlecand.cc:496
 hparticlecand.cc:497
 hparticlecand.cc:498
 hparticlecand.cc:499
 hparticlecand.cc:500
 hparticlecand.cc:501
 hparticlecand.cc:502
 hparticlecand.cc:503
 hparticlecand.cc:504
 hparticlecand.cc:505
 hparticlecand.cc:506
 hparticlecand.cc:507
 hparticlecand.cc:508
 hparticlecand.cc:509
 hparticlecand.cc:510
 hparticlecand.cc:511
 hparticlecand.cc:512
 hparticlecand.cc:513
 hparticlecand.cc:514
 hparticlecand.cc:515
 hparticlecand.cc:516
 hparticlecand.cc:517
 hparticlecand.cc:518
 hparticlecand.cc:519
 hparticlecand.cc:520
 hparticlecand.cc:521
 hparticlecand.cc:522
 hparticlecand.cc:523
 hparticlecand.cc:524
 hparticlecand.cc:525
 hparticlecand.cc:526
 hparticlecand.cc:527
 hparticlecand.cc:528
 hparticlecand.cc:529
 hparticlecand.cc:530
 hparticlecand.cc:531
 hparticlecand.cc:532
 hparticlecand.cc:533
 hparticlecand.cc:534
 hparticlecand.cc:535
 hparticlecand.cc:536
 hparticlecand.cc:537
 hparticlecand.cc:538
 hparticlecand.cc:539
 hparticlecand.cc:540
 hparticlecand.cc:541
 hparticlecand.cc:542
 hparticlecand.cc:543
 hparticlecand.cc:544
 hparticlecand.cc:545
 hparticlecand.cc:546
 hparticlecand.cc:547
 hparticlecand.cc:548
 hparticlecand.cc:549
 hparticlecand.cc:550
 hparticlecand.cc:551
 hparticlecand.cc:552
 hparticlecand.cc:553
 hparticlecand.cc:554
 hparticlecand.cc:555
 hparticlecand.cc:556
 hparticlecand.cc:557
 hparticlecand.cc:558
 hparticlecand.cc:559
 hparticlecand.cc:560
 hparticlecand.cc:561
 hparticlecand.cc:562
 hparticlecand.cc:563
 hparticlecand.cc:564
 hparticlecand.cc:565
 hparticlecand.cc:566
 hparticlecand.cc:567
 hparticlecand.cc:568
 hparticlecand.cc:569
 hparticlecand.cc:570
 hparticlecand.cc:571
 hparticlecand.cc:572
 hparticlecand.cc:573
 hparticlecand.cc:574
 hparticlecand.cc:575
 hparticlecand.cc:576
 hparticlecand.cc:577
 hparticlecand.cc:578
 hparticlecand.cc:579
 hparticlecand.cc:580
 hparticlecand.cc:581
 hparticlecand.cc:582
 hparticlecand.cc:583
 hparticlecand.cc:584
 hparticlecand.cc:585
 hparticlecand.cc:586
 hparticlecand.cc:587
 hparticlecand.cc:588
 hparticlecand.cc:589
 hparticlecand.cc:590
 hparticlecand.cc:591
 hparticlecand.cc:592
 hparticlecand.cc:593
 hparticlecand.cc:594
 hparticlecand.cc:595
 hparticlecand.cc:596
 hparticlecand.cc:597
 hparticlecand.cc:598
 hparticlecand.cc:599
 hparticlecand.cc:600
 hparticlecand.cc:601
 hparticlecand.cc:602
 hparticlecand.cc:603
 hparticlecand.cc:604
 hparticlecand.cc:605
 hparticlecand.cc:606
 hparticlecand.cc:607
 hparticlecand.cc:608
 hparticlecand.cc:609
 hparticlecand.cc:610
 hparticlecand.cc:611
 hparticlecand.cc:612
 hparticlecand.cc:613
 hparticlecand.cc:614
 hparticlecand.cc:615
 hparticlecand.cc:616
 hparticlecand.cc:617
 hparticlecand.cc:618
 hparticlecand.cc:619
 hparticlecand.cc:620
 hparticlecand.cc:621
 hparticlecand.cc:622
 hparticlecand.cc:623
 hparticlecand.cc:624
 hparticlecand.cc:625
 hparticlecand.cc:626
 hparticlecand.cc:627
 hparticlecand.cc:628
 hparticlecand.cc:629
 hparticlecand.cc:630
 hparticlecand.cc:631
 hparticlecand.cc:632
 hparticlecand.cc:633
 hparticlecand.cc:634
 hparticlecand.cc:635
 hparticlecand.cc:636
 hparticlecand.cc:637
 hparticlecand.cc:638
 hparticlecand.cc:639
 hparticlecand.cc:640
 hparticlecand.cc:641
 hparticlecand.cc:642
 hparticlecand.cc:643
 hparticlecand.cc:644
 hparticlecand.cc:645
 hparticlecand.cc:646
 hparticlecand.cc:647
 hparticlecand.cc:648
 hparticlecand.cc:649
 hparticlecand.cc:650
 hparticlecand.cc:651
 hparticlecand.cc:652
 hparticlecand.cc:653
 hparticlecand.cc:654
 hparticlecand.cc:655
 hparticlecand.cc:656
 hparticlecand.cc:657
 hparticlecand.cc:658
 hparticlecand.cc:659
 hparticlecand.cc:660
 hparticlecand.cc:661
 hparticlecand.cc:662
 hparticlecand.cc:663
 hparticlecand.cc:664
 hparticlecand.cc:665
 hparticlecand.cc:666
 hparticlecand.cc:667
 hparticlecand.cc:668
 hparticlecand.cc:669
 hparticlecand.cc:670
 hparticlecand.cc:671
 hparticlecand.cc:672
 hparticlecand.cc:673
 hparticlecand.cc:674
 hparticlecand.cc:675
 hparticlecand.cc:676
 hparticlecand.cc:677
 hparticlecand.cc:678
 hparticlecand.cc:679
 hparticlecand.cc:680
 hparticlecand.cc:681
 hparticlecand.cc:682
 hparticlecand.cc:683
 hparticlecand.cc:684
 hparticlecand.cc:685
 hparticlecand.cc:686
 hparticlecand.cc:687
 hparticlecand.cc:688
 hparticlecand.cc:689
 hparticlecand.cc:690
 hparticlecand.cc:691
 hparticlecand.cc:692
 hparticlecand.cc:693
 hparticlecand.cc:694
 hparticlecand.cc:695
 hparticlecand.cc:696
 hparticlecand.cc:697
 hparticlecand.cc:698
 hparticlecand.cc:699
 hparticlecand.cc:700
 hparticlecand.cc:701
 hparticlecand.cc:702
 hparticlecand.cc:703
 hparticlecand.cc:704
 hparticlecand.cc:705
 hparticlecand.cc:706
 hparticlecand.cc:707
 hparticlecand.cc:708
 hparticlecand.cc:709
 hparticlecand.cc:710
 hparticlecand.cc:711
 hparticlecand.cc:712
 hparticlecand.cc:713
 hparticlecand.cc:714
 hparticlecand.cc:715
 hparticlecand.cc:716
 hparticlecand.cc:717
 hparticlecand.cc:718
 hparticlecand.cc:719
 hparticlecand.cc:720
 hparticlecand.cc:721
 hparticlecand.cc:722
 hparticlecand.cc:723
 hparticlecand.cc:724
 hparticlecand.cc:725
 hparticlecand.cc:726
 hparticlecand.cc:727
 hparticlecand.cc:728
 hparticlecand.cc:729
 hparticlecand.cc:730
 hparticlecand.cc:731
 hparticlecand.cc:732
 hparticlecand.cc:733
 hparticlecand.cc:734
 hparticlecand.cc:735
 hparticlecand.cc:736
 hparticlecand.cc:737
 hparticlecand.cc:738
 hparticlecand.cc:739
 hparticlecand.cc:740
 hparticlecand.cc:741
 hparticlecand.cc:742
 hparticlecand.cc:743
 hparticlecand.cc:744
 hparticlecand.cc:745
 hparticlecand.cc:746
 hparticlecand.cc:747
 hparticlecand.cc:748
 hparticlecand.cc:749
 hparticlecand.cc:750
 hparticlecand.cc:751
 hparticlecand.cc:752
 hparticlecand.cc:753
 hparticlecand.cc:754
 hparticlecand.cc:755
 hparticlecand.cc:756
 hparticlecand.cc:757
 hparticlecand.cc:758
 hparticlecand.cc:759
 hparticlecand.cc:760