#include "hparticleevtchara.h"
ClassImp(HParticleEvtChara)
HParticleEvtChara::HParticleEvtChara(const Text_t* name,const Text_t* title)
   : HReconstructor(name,title) {
        fParticleEvtInfoCat   = 0;
        fParameterFile        = "centrality.root";
        fPostFix              = "";
        isSimulation          = kFALSE;
        fReferenceMeanSelTrack= 36.44;
        fDayOfYear            = 0;
        fEventPlaneCorrectionFlag = kNoCorrection;
        fQVectorCalcDone = kFALSE;
        
        
        useFWCut.resize(kNumFWCutValues);
        useFWCut[0]=kFALSE;  
        useFWCut[1]=kTRUE;   
        useFWCut[2]=kTRUE;   
        excludeNoisyFWcells = kTRUE;
        
        fRandom       = new TRandom2();
        
        vQPhi.resize(3);
        fCentralityPercentileHist.resize(kNumCentralityEstimator);
        fCentralityHist.resize(kNumCentralityEstimator);
        fEstimatorHist.resize(kNumCentralityEstimator);
        for (int centEst = 0; centEst < (int)kNumCentralityEstimator; ++centEst) fCentralityHist[centEst].resize(kNumCentralityClass);
        fEventPlaneCorrectionHist.resize(kNumEventPlaneParameter);
        fFWCutValuesHist.resize(kNumFWCutValues);
        for (int cutValue = 0; cutValue < (int)kNumFWCutValues; ++cutValue) fFWCutValuesHist[cutValue].resize(MAXFWCELLS);
        
        
        fFWminBeta.resize(3);
        fFWmaxBeta.resize(3);
        fFWminCharge.resize(3);
        fFWminBeta[0]=0.84;   fFWmaxBeta[0]=1.2;    fFWminCharge[0]=80; 
        fFWminBeta[1]=0.85;   fFWmaxBeta[1]=1.2;    fFWminCharge[1]=84; 
        fFWminBeta[2]=0.8;    fFWmaxBeta[2]=1.2;    fFWminCharge[2]=88; 
        
        fFWChargeCuts.resize(6);
        fFWChargeCuts[5]=386;
        fFWChargeCuts[4]=339;
        fFWChargeCuts[3]=298;
        fFWChargeCuts[2]=241;
        fFWChargeCuts[1]=175;
        fFWChargeCuts[0]=84 ;
        
    }
HParticleEvtChara::~HParticleEvtChara() {
}
Bool_t HParticleEvtChara::init()
{
    if(gHades){
        HRecEvent* evt =(HRecEvent*) gHades->getCurrentEvent();
        if(evt){
            HCategory* catKin=HCategoryManager::getCategory(catGeantKine,kFALSE,"catGeantKine");
            if(catKin) {isSimulation=kTRUE; Info("init()","GeantKine found - is Simulation");}
            else       {isSimulation=kFALSE;Info("init()","GeantKine not found - is not Simulation");}
            fParticleEvtInfoCat =  HCategoryManager::getCategory(catParticleEvtInfo,kTRUE,"catParticleEvtInfo, from HParticleEvtChara::init()");
            if(!fParticleEvtInfoCat) { Info("init()","No catParticleEvtInfo in input!"); return kFALSE;}
            fParticleCandCat =  HCategoryManager::getCategory(catParticleCand,kTRUE,"catParticleCand, from HParticleEvtChara::init()");
            if(!fParticleCandCat) { Info("init()","No catParticleCand in input!");}
            fCatWallHit = HCategoryManager::getCategory(catWallHit,kTRUE,"catWallHit, from HParticleEvtChara::init()");
            if(!fCatWallHit) { Info("init()","No catWallHit in input!");}
        } else {
            Error("init()","NO EventStructure found!");
            return kFALSE;
    }
    } else {
        Error("init()","NO HADES found!");
        return kFALSE;
    }
    
    if(fParameterFile){
        if(!loadParameterFile()) return kFALSE;
    } else {
        Error("init()","NO Parameterfile found!");
        return kFALSE;
    }
    loadDayOfYear();
    
    return kTRUE;
}
Bool_t HParticleEvtChara::reinit()
{
    loadDayOfYear();
    return kTRUE;
}
Int_t HParticleEvtChara::loadDayOfYear()
{
    TString tempFileName = "";
    if(gLoop){
        gLoop->isNewFile(tempFileName);
    }
    else if(gHades){
        if(gHades->getRuntimeDb()){
            tempFileName = gHades->getRuntimeDb()->getCurrentFileName();
        }
        else if(gHades->getDataSource()){
            tempFileName = gHades->getDataSource()->getCurrentFileName();
        }
    }
    if(tempFileName==""){
        
        fDayOfYear = 108; 
        if(isSimulation) fDayOfYear = 0;
        return fDayOfYear;
    }
    fDayOfYear = HTime::getDayFileName(HTime::stripFileName(tempFileName,kTRUE,kTRUE));
    
    
    if( fDayOfYear>365 && isSimulation){
        fDayOfYear = 0;
    }
    
    return fDayOfYear;
}
Bool_t HParticleEvtChara::setParameterFile(TString ParameterFile)
{
    fParameterFile = ParameterFile;
    TString path = gSystem->ExpandPathName(fParameterFile.Data());
    if (gSystem->AccessPathName(path)) {
        Error("init()","File  %s does not exist!",path.Data());
        return kFALSE;
    }
    return kTRUE;
}
Bool_t HParticleEvtChara::loadParameterFile()
{
    
    TString path = gSystem->ExpandPathName(fParameterFile.Data());
    if (gSystem->AccessPathName(path)) {
        Error("loadParameterFile()","File  %s does not exist!",path.Data());
        return kFALSE;
    } else {
        fFile  = new TFile(path,"OPEN");
        TObject* ParameterFileVersion = (TObject*) fFile->Get("HParticleEvtCharaVersion");
        if(ParameterFileVersion){
            TString Version(ParameterFileVersion->GetTitle());
            Float_t fVersion = Version.Atof();
            if(fVersion < getVersion()){
                Error("loadParameterFile()","File  %s is out-dated! Needed Version: %02.1f -- in file: %02.1f",path.Data(), getVersion(), fVersion);
                return kFALSE;
            }
            cout<<"\n--------------------------------------------------------------------------------------"  << endl;
            Info("loadParameterFile()",">>> Parameter input file (ver. %02.1f) : %s",fVersion,path.Data());
            
            cout<<"\n--------------------------------------------------------------------------------------"  << endl;
        }
        else{
            Error("loadParameterFile()","In File  %s no Version information found!",path.Data());
            return kFALSE;
        }
    }
    loadCentralityEstimatorHist();
    loadEventPlaneCorrectionHist();
    loadFWCutValuesHist();
    return kTRUE;
}
Bool_t HParticleEvtChara::saveParameterFile()
{
    
    TString path = gSystem->ExpandPathName(fParameterFile.Data());
    
    
    
    
    fFile  = new TFile(path,"CREATE");
    if(!fFile) return kFALSE;
    cout << "Version of HParticleEvtChara:  " << getVersion() << endl;
    TString version=Form("%02.1f",getVersion());
    TNamed OutputVersion("HParticleEvtCharaVersion",version.Data()); 
    OutputVersion.Write();
    saveCentralityEstimatorHist();
    saveEventPlaneCorrectionHist();
    saveFWCutValuesHist();
    return kTRUE;
}
Bool_t HParticleEvtChara::loadCentralityEstimatorHist()
{
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("loadCentralityEstimatorHist()","Calibration for Centrality Estimator and Classes loading:");
    Int_t n=0,m=0;
    for (int centEst = 0; centEst < (int) kNumCentralityEstimator; ++centEst){
       printf("\n>>>> %31s %s:  ",getStringCentralityEstimator(centEst).Data() ,fPostFix.Data());
       TString temp;
       if(fPostFix.CompareTo("")==0) temp = Form("%s_percentile",getStringCentralityEstimator(centEst).Data() );
       else                       temp = Form("%s_%s_percentile",getStringCentralityEstimator(centEst).Data(), fPostFix.Data() );
       fCentralityPercentileHist[centEst] = (TH1F*) fFile->FindObjectAny( temp.Data() );
       if(fCentralityPercentileHist[centEst]){
            printf("percentile");
            m++;
        }
       
       for (int centC = 0; centC < (int) kNumCentralityClass; ++centC){
           TString temp2;
           if(fPostFix.CompareTo("")==0) temp2 = Form("%s_%s_fixedCuts",getStringCentralityEstimator(centEst).Data(), getStringCentralityClass(centC).Data() );
           else                       temp2 = Form("%s_%s_%s_fixedCuts",getStringCentralityEstimator(centEst).Data(), fPostFix.Data(), getStringCentralityClass(centC).Data() );
           fCentralityHist[centEst][centC] = (TH1F*) fFile->FindObjectAny( temp2.Data() );
           if(fCentralityHist[centEst][centC]){
                printf(" %5s",getStringCentralityClass(centC).Data() );
                n++;
           }
       }
   }
   cout<< "\n\nCentrality Percentile Curves      #"<< m << endl;
   cout<< "Centrality Estimator and Classes  #"<< n << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Bool_t HParticleEvtChara::saveCentralityEstimatorHist()
{
    if(!fFile) return kFALSE;
    fFile->mkdir("EstimatorHist");
    fFile->cd("/EstimatorHist/");
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("saveCentralityEstimatorHist()","Estimator Hist saving:");
    Int_t m=0;
    for (int centEst = 0; centEst < (int) kNumCentralityEstimator; ++centEst){
       if(fEstimatorHist[centEst]){
            fEstimatorHist[centEst]->Write();
            m++;
        }
   }
   cout<< "\n\nEstimator Hist      #"<< m << "saved" << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
    fFile->mkdir("Centrality");
    fFile->cd("/Centrality/");
    
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("saveCentralityEstimatorHist()","Calibration for Centrality Estimator and Classes saving:");
    Int_t n=0;
    m=0;
    for (int centEst = 0; centEst < (int) kNumCentralityEstimator; ++centEst){
       printf("\n>>>> %31s %s:  ",getStringCentralityEstimator(centEst).Data() ,fPostFix.Data());
       if(fCentralityPercentileHist[centEst]){
            fCentralityPercentileHist[centEst]->Write();
            printf("percentile");
            m++;
        }
       
       for (int centC = 0; centC < (int) kNumCentralityClass; ++centC){
           if(fCentralityHist[centEst][centC]){
                fCentralityHist[centEst][centC]->Write();
                printf(" %5s",getStringCentralityClass(centC).Data() );
                n++;
           }
       }
   }
   cout<< "\n\nCentrality Percentile Curves      #"<< m << "saved" << endl;
   cout<< "Centrality Estimator and Classes  #"<< n << "saved" << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Bool_t HParticleEvtChara::loadEventPlaneCorrectionHist()
{
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("loadEventPlaneCorrectionHist()","Calibration for EventPlane Correction Histogramms loading:");
    Int_t n=0;
    for (int epParam = 0; epParam < (int) kNumEventPlaneParameter; ++epParam){
       printf("\n>>>> %27s :  ",getStringEventPlaneParameter(epParam).Data() );
       TString temp;
       temp = Form("EPcorr_%s_Day_Centrality",getStringEventPlaneParameter(epParam).Data() );
       fEventPlaneCorrectionHist[epParam] = (TProfile2D*) fFile->FindObjectAny( temp.Data() );   
       if(fEventPlaneCorrectionHist[epParam]){
            
                printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetXaxis()->GetTitle(),
                                  fEventPlaneCorrectionHist[epParam]->GetNbinsX());
                printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetYaxis()->GetTitle(),
                                  fEventPlaneCorrectionHist[epParam]->GetNbinsY());
                printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetZaxis()->GetTitle(),
                                  fEventPlaneCorrectionHist[epParam]->GetNbinsZ());
            n++;
        }
   }
   cout<< "\n\nEventPlane Correction Histogramms  #"<< n << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Bool_t HParticleEvtChara::addEventPlaneCorrectionHist(TProfile2D *hist, UInt_t epParam)
{
    if(!hist)return kFALSE;
    if(epParam>=kNumEventPlaneParameter) return kFALSE;
    if(epParam==kChi)  return kTRUE;
    
    TString temp;
    temp = Form("EPcorr_%s_Day_Centrality",getStringEventPlaneParameter(epParam).Data() );
    hist->SetNameTitle(temp.Data(),temp.Data());
    if(epParam==kResolution){
         fEventPlaneCorrectionHist[kResolution] = (TH2D*) makeEPresolution(hist);
         temp = Form("EPcorr_%s_Day_Centrality",getStringEventPlaneParameter(kChi).Data() );
         hist->SetNameTitle(temp.Data(),temp.Data());
         fEventPlaneCorrectionHist[kChi] = (TH2D*) makeEPresolution(hist, kTRUE);
    }
    else{
         fEventPlaneCorrectionHist[epParam] = (TProfile2D*) hist;
    }
    return kTRUE;
}
Bool_t HParticleEvtChara::saveEventPlaneCorrectionHist()
{
    if(!fFile) return kFALSE;
    fFile->mkdir("EPcorr");
    fFile->cd("/EPcorr/");
    
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("saveEventPlaneCorrectionHist()","Calibration for EventPlane Correction Histogramms saving:");
    Int_t n=0;
    for (int epParam = 0; epParam < (int) kNumEventPlaneParameter; ++epParam){
       printf("\n>>>> %27s :  ",getStringEventPlaneParameter(epParam).Data() );
       if(fEventPlaneCorrectionHist[epParam]){
           fEventPlaneCorrectionHist[epParam]->Write();
           printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetXaxis()->GetTitle(),
                             fEventPlaneCorrectionHist[epParam]->GetNbinsX());
           printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetYaxis()->GetTitle(),
                             fEventPlaneCorrectionHist[epParam]->GetNbinsY());
           printf("%4s(%2d bins) ",fEventPlaneCorrectionHist[epParam]->GetZaxis()->GetTitle(),
                             fEventPlaneCorrectionHist[epParam]->GetNbinsZ());
            n++;
        }
   }
   cout<< "\n\nEventPlane Correction Histogramms  #"<< n << "saved" << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Bool_t HParticleEvtChara::loadFWCutValuesHist()
{
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("loadFWCutValuesHist()","Histogramms with CutValues for FW Hits loading:");
    Int_t n=0;
    for (int ep = 0; ep < (int) kNumFWCutValues; ++ep){
       Int_t m = 0;
       printf("\n>>>> %27s :  ",getStringFWCutValues(ep).Data() );
       for (int iCell = 0; iCell < MAXFWCELLS ; ++iCell){
           TString temp = Form("FWCuts_%s_cell%d",getStringFWCutValues(ep).Data(), iCell );
           fFWCutValuesHist[ep][iCell] = (TH1F*) fFile->FindObjectAny( temp.Data() );   
           if(fFWCutValuesHist[ep][iCell]){
               if(m==0){
                   printf("%4s(%2d bins) ",fFWCutValuesHist[ep][iCell]->GetXaxis()->GetTitle(),
                                     fFWCutValuesHist[ep][iCell]->GetNbinsX());
                   printf("%4s(%2d bins) ",fFWCutValuesHist[ep][iCell]->GetYaxis()->GetTitle(),
                                     fFWCutValuesHist[ep][iCell]->GetNbinsY());
               }
               n++; m++;
            }
       }
       printf("active cells:%2d ", m);
       if(m==0){
            useFWCut[ep] = kFALSE;
            printf("  not used for FWCut!");
       }
   }
   cout<< "\n\nHistogramms with CutValues for FW Hits  #"<< n << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Bool_t HParticleEvtChara::addFWCutValuesHist(TH1 *hist, Int_t cell, UInt_t eFWCut)
{
    if(!hist)return kFALSE;
    if(eFWCut>=kNumFWCutValues) return kFALSE;
    if(cell<0 || cell >= MAXFWCELLS) return kFALSE;
    
    TString temp = Form("FWCuts_%s_cell%d",getStringFWCutValues(eFWCut).Data(), cell );
    hist->SetNameTitle(temp.Data(),temp.Data());
    fFWCutValuesHist[eFWCut][cell] = (TH1F*) hist;
    return kTRUE;
}
Bool_t HParticleEvtChara::saveFWCutValuesHist()
{
    if(!fFile) return kFALSE;
    fFile->mkdir("FWCutValue");
    fFile->cd("/FWCutValue/");
    
    cout<<"\n--------------------------------------------------------------------------------------"  << endl;
    Info("saveFWCutValuesHist()","Histogramms with CutValues for FW Hits saving:");
    Int_t n=0;
    for (int ep = 0; ep < (int) kNumFWCutValues; ++ep){
       Int_t m = 0;
       printf("\n>>>> %27s :  ",getStringFWCutValues(ep).Data() );
       for (int iCell = 0; iCell < (int) MAXFWCELLS; ++iCell){
           if(fFWCutValuesHist[ep][iCell]){
               TString temp = Form("FWCuts_%s_cell%d",getStringFWCutValues(ep).Data(), iCell );
               fFWCutValuesHist[ep][iCell]->SetNameTitle(temp.Data(),temp.Data());
               fFWCutValuesHist[ep][iCell]->Write();
               if(m==0){
                   printf("%4s(%2d bins) ",fFWCutValuesHist[ep][iCell]->GetXaxis()->GetTitle(),
                                     fFWCutValuesHist[ep][iCell]->GetNbinsX());
                   printf("%4s(%2d bins) ",fFWCutValuesHist[ep][iCell]->GetYaxis()->GetTitle(),
                                     fFWCutValuesHist[ep][iCell]->GetNbinsY());
               }
               n++; m++;
            }
       }
       printf("active cells:%2d ", m);
   }
   cout<< "\n\ntotal Histogramms with CutValues for FW Hits  #"<< n << "saved" << endl;
   cout<< "--------------------------------------------------------------------------------------"  << endl;
   return 0;
}
Int_t HParticleEvtChara::execute(){
    return 0;
}
Int_t HParticleEvtChara::print(){
    return 0;
}
void HParticleEvtChara::reset()
{
    
}
Bool_t HParticleEvtChara::isNewEvent()
{
    if(gHades->getCurrentEvent()->getHeader()->getEventSeqNumber() == currentEventSeqNumber){
        return kFALSE;
    } 
    else{
        currentEventSeqNumber = gHades->getCurrentEvent()->getHeader()->getEventSeqNumber();
        loadDayOfYear();
        return kTRUE;
    }
}
Float_t HParticleEvtChara::getEventWeight()
{
    if(isSimulation) return 1;
    if(gHades->getCurrentEvent()->getHeader()->getTBit() == 8192) return 1;
    if(gHades->getCurrentEvent()->getHeader()->getTBit() == 12288)return 1;
    if(gHades->getCurrentEvent()->getHeader()->getTBit() == 4096){
        if(fDayOfYear<=106) return 4; 
        else                return 8; 
    }
    return 0;
}
Int_t HParticleEvtChara::GetFWmoduleSize(HWallHitSim* wall)
{
    Int_t i = wall->getCell();
    
    if ( i < 0 || i > 301 ) return -1;
    else if ( i==65 || i==66 || i==77 || i==78 ) return -1;      
    else if ( i<144 ) return 1;    
    else if ( i<208 ) return 2;    
    else if ( i<302 ) return 3;    
    return -1;
}
Bool_t HParticleEvtChara::PassesCutsFW(HWallHitSim* wall)
{
    for (int ep = 0; ep < (int) kNumFWCutValues; ++ep){
        if(useFWCut[ep] && !PassesCutsFW(wall, ep) ) return kFALSE;
    }
    return kTRUE;
}
Bool_t HParticleEvtChara::PassesCutsFW(HWallHitSim* wall, UInt_t eFWCut)
{
    if(!wall) return kFALSE;
    Int_t cell      =  wall->getCell();
    if(cell<0 || cell>= MAXFWCELLS) return kFALSE;
    
    if(excludeNoisyFWcells){
        if(cell ==20 || cell ==53 || cell ==54 
            || cell ==64 || cell ==67 || cell ==79) return kFALSE;      
    }
    
    Float_t value =0;
    if(eFWCut==kBetaCuts  ) value  =  wall->getDistance() / wall->getTime()/ 299.792458;
    if(eFWCut==kTimeCuts  ) value  =  wall->getTime();
    if(eFWCut==kChargeCuts) value  =  wall->getCharge();
    
    if(fFWCutValuesHist[eFWCut][cell]){
        if(fFWCutValuesHist[eFWCut][cell]->GetBinContent(fFWCutValuesHist[eFWCut][cell]->FindBin(value)) > 0) return kTRUE;
    }
    return kFALSE;
}
Int_t HParticleEvtChara::getFWCharge(HWallHitSim* wall)
{
    Float_t Charge = 0;
    Int_t Z = 0;
    if(!wall) return 0;
    if(!isSimulation) Charge = wall->getCharge();
    else              Charge = 93.*pow(wall->getCharge(),0.46-0.006*sqrt(wall->getCharge()));  
    Int_t cell = wall->getCell();
    if(cell<0 || cell>= MAXFWCELLS) return 0;
    if(fFWCutValuesHist[kChargeCuts][cell]){
        Z = fFWCutValuesHist[kChargeCuts][cell]->GetBinContent(fFWCutValuesHist[kChargeCuts][cell]->FindBin(Charge) );
    }
    if(Z>1) Z=Z-1;
    
    return Z;
}
TH1F* HParticleEvtChara::getEventPlaneCorrectionHist(UInt_t flag) const
{
    if(flag<kNumEventPlaneParameter) return (TH1F*)fEventPlaneCorrectionHist[flag];
    else return 0;
}
Float_t HParticleEvtChara::getCorrection(UInt_t flag)
{
    Float_t fCorrection = 0.;
    Double_t cent = getCentralityPercentile();
    if(getEventPlaneCorrectionHist(flag)) 
        fCorrection = getEventPlaneCorrectionHist(flag)->GetBinContent(getEventPlaneCorrectionHist(flag)->FindBin(cent, fDayOfYear) );
    return fCorrection;
}
Float_t HParticleEvtChara::getCorrectionError(UInt_t flag)
{
    Float_t fCorrectionError = 1.;
    Double_t cent = getCentralityPercentile();
    if(getEventPlaneCorrectionHist(flag)) 
        fCorrectionError = getEventPlaneCorrectionHist(flag)->GetBinError(getEventPlaneCorrectionHist(flag)->FindBin(cent, fDayOfYear) );
    return fCorrectionError;
}
Float_t HParticleEvtChara::getSmearValue(Int_t size){
    if(size==1) return ( fRandom->Rndm(1) - 0.5 )*40.;
    else if(size==2) return ( fRandom->Rndm(1) - 0.5 )*80.;
    else if(size==3) return ( fRandom->Rndm(1) - 0.5 )*160.;
    return 0;
}
Float_t HParticleEvtChara::getThetaWeight(HWallHitSim* wall, Float_t min, Float_t max){
     Float_t theta = wall->getTheta();
     if(theta>max) return 0.;    
     if(theta<min) return 1.;    
     Float_t wtheta = 1. -( (theta-min)/(max-min) );   
     if(wtheta>0 && wtheta < 1.) return wtheta;
     else return 0.;
}
void HParticleEvtChara::fillHitArray()
{
    
    
    fQVectorCalcDone = kFALSE; 
    fEventPlaneCorrectionFlag = kNoCorrection;
    Int_t nHits = arrayOfHits.size();
    for (Int_t i=0; i<nHits; i++){
        if (!arrayOfHits[i]) continue;
        delete arrayOfHits[i];
        arrayOfHits[i] = NULL;
    }
    iFWHitvector.clear();
    arrayOfHits.clear();
    
    if(!fCatWallHit) return;
    
    HWallHitSim *wall = 0;  
    Float_t wallXOrg=0,wallYOrg=0,wallZOrg=0;
    Float_t wallX=0,wallY=0;
    Float_t weight1 = 1.;
    Float_t weight2 = 1.;
    for(Int_t i = 0; i < fCatWallHit->getEntries(); i ++ ){
        wall  = (HWallHitSim*) HCategoryManager::getObject(wall,fCatWallHit,i);
        if(!PassesCutsFW(wall)) continue;
         iFWHitvector.push_back(i);
        
         wall->getXYZLab(wallXOrg,wallYOrg,wallZOrg);
        
        wallX = (wallXOrg - getCorrection(kFWx)) / getCorrectionError(kFWx);
        wallY = (wallYOrg - getCorrection(kFWy)) / getCorrectionError(kFWy);
        weight1 = getFWCharge(wall);
        weight2 = getThetaWeight(wall);
        if(wallX==0 || wallY==0) continue;
        SimpleQVector* HitVector = new SimpleQVector();
        HitVector->Set(wallX,wallY,weight1, weight2); 
        HitVector->SetOrg(wallXOrg,wallYOrg); 
        arrayOfHits.push_back(HitVector);
        
    } 
    nHits = arrayOfHits.size();
    if(nHits<1) return;
    
    std::random_shuffle ( arrayOfHits.begin(), arrayOfHits.end() );
    
    for (Int_t i=0; i<nHits; i++){
        if (!arrayOfHits[i]) continue;
        if((i+1)*2 > nHits)  arrayOfHits[i]->SetSubEvent(1);
        else                 arrayOfHits[i]->SetSubEvent(2);
    }
    return;
}
void HParticleEvtChara::printHitArray()
{
    
    if(isNewEvent()){
        fillHitArray();
    }
    
    Int_t nHits = arrayOfHits.size();
    printf( "printHitArray #Hits = %d\n", nHits );
    if(nHits<1) return;
    for (Int_t i=0; i<nHits; i++){
        if (arrayOfHits[i]) arrayOfHits[i]->print();
    }
    return;
}
vector<Int_t> HParticleEvtChara::getFWhits(){
    if(isNewEvent()){
        fillHitArray();
    }
    return iFWHitvector;
}
Bool_t HParticleEvtChara::fillQVectors(UInt_t statusflag, UInt_t nHarmonic)
{
    
    
    fEventPlaneCorrectionFlag = kNoCorrection;
    fQVectorCalcDone = kFALSE; 
    vQPhi[0] = -1;
    vQPhi[1] = -1;
    vQPhi[2] = -1;
    Double_t dQX  = 0.,dQY  = 0.;
    Double_t dQXA = 0.,dQYA = 0.;
    Double_t dQXB = 0.,dQYB = 0.;
    Double_t dQXShift  = 0.,dQYShift  = 0.;
    Double_t dQXScale  = 1.,dQYScale  = 1.;
    Double_t phi = -1;
    Double_t w = 1.;
    Double_t sumOfWeights=0;
    Int_t nHits = arrayOfHits.size();
    if(nHits<4) return kFALSE;  
    for (Int_t i=0; i<nHits; i++){
        w = 1.;
        if(isFlagSet(kShiftFW, statusflag)) phi = arrayOfHits[i]->Phi();
        else                                phi = arrayOfHits[i]->PhiOrg();
        if(isFlagSet(kWeightCharge, statusflag)) w = arrayOfHits[i]->Weight1();
        if(isFlagSet(kWeightTheta, statusflag))  w *= arrayOfHits[i]->Weight2();
        
        dQX += w * TMath::Cos(nHarmonic*phi);
        dQY += w * TMath::Sin(nHarmonic*phi);
        
        if(arrayOfHits[i]->SubEvent() == 1) {
            dQXA += w * TMath::Cos(nHarmonic*phi);
            dQYA += w * TMath::Sin(nHarmonic*phi);
        }
        else if(arrayOfHits[i]->SubEvent() == 2) {
            dQXB += w * TMath::Cos(nHarmonic*phi);
            dQYB += w * TMath::Sin(nHarmonic*phi);
        }
            sumOfWeights +=w;
    }
   if(isFlagSet(kReCentering, statusflag)){
       if(isFlagSet(kShiftFW, statusflag)){
           if(isFlagSet(kWeightCharge, statusflag)){ dQXShift  = getCorrection(kQx2WCharge); dQYShift  = getCorrection(kQy2WCharge);}
           else{                                     dQXShift  = getCorrection(kQx2);        dQYShift  = getCorrection(kQy2);}
       }
       else{
           if(isFlagSet(kWeightCharge, statusflag)){ dQXShift  = getCorrection(kQxWCharge); dQYShift  = getCorrection(kQyWCharge);}
           else{                                     dQXShift  = getCorrection(kQx);        dQYShift  = getCorrection(kQy);}
       }
       
       dQX  -= dQXShift;
       dQY  -= dQYShift;
       dQXA -= dQXShift;
       dQYA -= dQYShift;
       dQXB -= dQXShift;
       dQYB -= dQYShift;
       if(isFlagSet(kScaling, statusflag)){
           if(isFlagSet(kShiftFW, statusflag)){
               if(isFlagSet(kWeightCharge, statusflag)){dQXScale  = getCorrectionError(kQx2WCharge); dQYScale  = getCorrectionError(kQy2WCharge);}
               else{                                    dQXScale  = getCorrectionError(kQx2); dQYScale  = getCorrectionError(kQy2);}
           }
           else{
               if(isFlagSet(kWeightCharge, statusflag)){dQXScale  = getCorrectionError(kQxWCharge); dQYScale  = getCorrectionError(kQyWCharge);}
               else{                                    dQXScale  = getCorrectionError(kQx); dQYScale  = getCorrectionError(kQy);}
           }
           
           dQX  /= dQXScale;
           dQY  /= dQYScale;
           dQXA /= dQXScale;
           dQYA /= dQYScale;
           dQXB /= dQXScale;
           dQYB /= dQYScale;
       }
   }
   if(dQX==0 && dQX==0)   return kFALSE;
   if(dQXA==0 && dQXA==0) return kFALSE;
   if(dQXB==0 && dQXB==0) return kFALSE;
    
   if(isFlagSet(kRotation, statusflag)){
       Float_t corrPsi = getCorrectionPhi(getPhi(dQX ,dQY ));
       vQPhi[0] = TVector2::Phi_0_2pi( getPhi(dQX ,dQY ) + corrPsi );
       vQPhi[1] = TVector2::Phi_0_2pi( getPhi(dQXA,dQYA) + corrPsi );
       vQPhi[2] = TVector2::Phi_0_2pi( getPhi(dQXB,dQYB) + corrPsi );
   }
   else{
       vQPhi[0] = getPhi(dQX ,dQY );
       vQPhi[1] = getPhi(dQXA,dQYA);
       vQPhi[2] = getPhi(dQXB,dQYB);
   }
    
    fEventPlaneCorrectionFlag = statusflag;
    fQVectorCalcDone = kTRUE; 
    
    return kTRUE;
}
void HParticleEvtChara::printQVectors()
{
    
    if(fQVectorCalcDone){ printf("QVector Calculation Done\n");}
    else{
        printf("QVector Calculation NOT Done !!!!!!! retry now\n");
        if(!fillQVectors(fEventPlaneCorrectionFlag)) {printf("QVector Calculation failed !!!!!!!\n"); return ;}
    }
    printf("##### vQPhi: %.3f \t vQPhiA: %.3f \t vQPhiB: %.3f \t\t Corr: %s #####\n",
               vQPhi[0], vQPhi[1], vQPhi[2],  getStringEventPlaneCorrection(fEventPlaneCorrectionFlag).Data() );
    return;
}
Float_t HParticleEvtChara::getCorrectionPhi(Float_t phi)
{
    
    
    
    
    
    Float_t corrPsi = phi;
    corrPsi =    2./1.*(getCorrection(kFourierC1)*TMath::Sin(1.*phi)) 
               + 2./2.*(getCorrection(kFourierC2)*TMath::Sin(2.*phi)) 
               + 2./3.*(getCorrection(kFourierC3)*TMath::Sin(3.*phi)) 
               + 2./4.*(getCorrection(kFourierC4)*TMath::Sin(4.*phi))
               + 2./5.*(getCorrection(kFourierC5)*TMath::Sin(5.*phi))
               + 2./6.*(getCorrection(kFourierC6)*TMath::Sin(6.*phi))
               + 2./7.*(getCorrection(kFourierC7)*TMath::Sin(7.*phi))
               + 2./8.*(getCorrection(kFourierC8)*TMath::Sin(8.*phi))
               - 2./1.*(getCorrection(kFourierS1)*TMath::Cos(1.*phi))
               - 2./2.*(getCorrection(kFourierS2)*TMath::Cos(2.*phi))
               - 2./3.*(getCorrection(kFourierS3)*TMath::Cos(3.*phi))
               - 2./4.*(getCorrection(kFourierS4)*TMath::Cos(4.*phi))
               - 2./5.*(getCorrection(kFourierS5)*TMath::Cos(5.*phi))
               - 2./6.*(getCorrection(kFourierS6)*TMath::Cos(6.*phi))
               - 2./7.*(getCorrection(kFourierS7)*TMath::Cos(7.*phi))
               - 2./8.*(getCorrection(kFourierS8)*TMath::Cos(8.*phi));
    return corrPsi;
}
Float_t HParticleEvtChara::getEventPlane(UInt_t statusflag, UInt_t SubEvent, UInt_t nHarmonic)
{
    if(isNewEvent()){
        fillHitArray();
    }
    if(!fQVectorCalcDone){
        if(!fillQVectors(statusflag)) return -1;
    }
    
    if(fQVectorCalcDone && fEventPlaneCorrectionFlag == statusflag){
        if(SubEvent<3)  return vQPhi[SubEvent];
        else return -1;
    }
    else{
        if(!fillQVectors(statusflag, nHarmonic)) return -1;
        if(fQVectorCalcDone && fEventPlaneCorrectionFlag == statusflag){
            if(SubEvent<3)  return vQPhi[SubEvent];
            else return -1;
        }
    }
    return -1;
}
Float_t HParticleEvtChara::getEventPlaneWeight(UInt_t statusflag, UInt_t SubEvent, UInt_t nHarmonic)
{
    return 1.;
}
Float_t HParticleEvtChara::getEventPlaneParameter(UInt_t e, Bool_t corr)
{
         
    if(isNewEvent()){
        fillHitArray();
    }
    if(e==kFWx|| e==kFWy)                      return -999;  
    if(corr){
         if(e==kQx  || e==kQy)                                          fillQVectors(kReCentering|kScaling);
         if(e==kQxWCharge  || e==kQyWCharge)                            fillQVectors(kReCentering|kScaling|kWeightCharge);
         if(e==kQx2 || e==kQy2 || e==kResolution)                       fillQVectors(kShiftFW|kReCentering|kScaling);
         if(e==kQx2WCharge || e==kQy2WCharge || e==kResolutionWCharge)  fillQVectors(kShiftFW|kReCentering|kScaling|kWeightCharge);
         if(e>=kFourierC1 && e<=kFourierS8)                             fillQVectors(kShiftFW|kWeightCharge|kRotation);
    }
    else{
         if(e==kQx  || e==kQy)                                          fillQVectors(kNoCorrection);
         if(e==kQxWCharge  || e==kQyWCharge)                            fillQVectors(kWeightCharge);
         if(e==kQx2 || e==kQy2|| e==kResolution)                        fillQVectors(kShiftFW);
         if(e==kQx2WCharge || e==kQy2WCharge || e==kResolutionWCharge)  fillQVectors(kShiftFW|kWeightCharge);
         if(e>=kFourierC1 && e<=kFourierS8)                             fillQVectors(kShiftFW|kWeightCharge);
    }
    if(vQPhi[0]==-1) return -999;
    
    if(e==kQx || e==kQxWCharge || e==kQx2 || e==kQx2WCharge)      return TMath::Cos(    vQPhi[0] );
    if(e==kQy || e==kQyWCharge || e==kQy2 || e==kQy2WCharge)      return TMath::Sin(    vQPhi[0] );
    if(e==kFourierC1)                return TMath::Cos(    vQPhi[0] );
    if(e==kFourierC2)                return TMath::Cos(2.* vQPhi[0] );
    if(e==kFourierC3)                return TMath::Cos(3.* vQPhi[0] );
    if(e==kFourierC4)                return TMath::Cos(4.* vQPhi[0] );
    if(e==kFourierC5)                return TMath::Cos(5.* vQPhi[0] );
    if(e==kFourierC6)                return TMath::Cos(6.* vQPhi[0] );
    if(e==kFourierC7)                return TMath::Cos(7.* vQPhi[0] );
    if(e==kFourierC8)                return TMath::Cos(8.* vQPhi[0] );
    if(e==kFourierS1)                return TMath::Sin(    vQPhi[0] );
    if(e==kFourierS2)                return TMath::Sin(2.* vQPhi[0] );
    if(e==kFourierS3)                return TMath::Sin(3.* vQPhi[0] );
    if(e==kFourierS4)                return TMath::Sin(4.* vQPhi[0] );
    if(e==kFourierS5)                return TMath::Sin(5.* vQPhi[0] );
    if(e==kFourierS6)                return TMath::Sin(6.* vQPhi[0] );
    if(e==kFourierS7)                return TMath::Sin(7.* vQPhi[0] );
    if(e==kFourierS8)                return TMath::Sin(8.* vQPhi[0] );
    if(e==kResolution || e==kResolutionWCharge){  
       return TMath::Cos(vQPhi[1])*TMath::Cos(vQPhi[2]) + TMath::Sin(vQPhi[1])*TMath::Sin(vQPhi[2]);
    }
    return -999;
}
Int_t HParticleEvtChara::getCentralityClass(TString estimator)
{
    
    
    
    if (estimator.CompareTo("TOFRPCtimecut")==0 || estimator.CompareTo("TOFRPC5")==0) 
        return getCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k5);
    else if (estimator.CompareTo("TOFRPCtimecutFOPI")==0 || estimator.CompareTo("TOFRPCFOPI")==0) 
        return getCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::kFOPI);
    else if (estimator.CompareTo("TOFRPCtimecut10")==0 || estimator.CompareTo("TOFRPC10")==0) 
        return getCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k10);
    else {
        Error("getCentralityClass()","No CentralityEstimator defined!");
        return 0;
    }
}
Float_t HParticleEvtChara::getCentralityEstimator(UInt_t centE)
{
    HParticleEvtInfo *event_info = (HParticleEvtInfo*)fParticleEvtInfoCat->getObject(0);
    if(!event_info) {
        Error("getCentralityClass()","No HParticleEvtInfo");
    return 0;
    }
    
    if(centE     ==kTOFRPC)                      return event_info->getSumTofMultCut() + event_info->getSumRpcMultHitCut();
    else if(centE==kTOF)                         return event_info->getSumTofMultCut();
    else if(centE==kRPC)                         return event_info->getSumRpcMultHitCut();
    else if(centE==kTOFRPCtot)                   return event_info->getSumTofMult() + event_info->getSumRpcMultHit();
    else if(centE==kTOFtot)                      return event_info->getSumTofMult();
    else if(centE==kRPCtot)                      return event_info->getSumRpcMultHit();
    else if(centE==kSelectedParticleCand)        return event_info->getSumSelectedParticleCandMult();
    else if(centE==kSelectedParticleCandCorr)    return event_info->getSumSelectedParticleCandMult()*(fReferenceMeanSelTrack/event_info->getMeanMult());    
    else if(centE==kSelectedParticleCandNorm)    return event_info->getSumSelectedParticleCandMult()/event_info->getMeanMult();   
    else if(centE==kSelectedParticleCandSecNorm) return getSelectedParticleCandSecNorm();    
    else if(centE==kSelectedParticleCandCorrPerWire) return getSelectedParticleCandCorrPerWire();   
    else if(centE==kPrimaryParticleCand)         return event_info->getSumPrimaryParticleCandMult();
    else if(centE==kMdcWires)                    return event_info->getMdcWires();
    else if(centE==kMdcWiresOuterMod)            return getMdcWiresOuterMod();
    else if(centE==kFWSumChargeSpec)             return getFWSumChargeSpec();
    else if(centE==kFWSumChargeZ)                return getFWSumZ();
    else if(centE==kDirectivity)                 return getDirectivity();
    else if(centE==kRatioEtEz)                   return getRatioEtEz();
    else if(centE==kEt)                          return getEt();
    else return 0;
}
TH1F* HParticleEvtChara::getCentralityClassHist(UInt_t centE, UInt_t centC) const
{
    if(centE<kNumCentralityEstimator && centC<kNumCentralityClass) return (TH1F*)fCentralityHist[centE][centC];
    else return 0;
}
TH1F* HParticleEvtChara::getCentralityPercentileHist(UInt_t centE) const
{
    if(centE<kNumCentralityEstimator) return (TH1F*)fCentralityPercentileHist[centE];
    else return 0;
}
Int_t HParticleEvtChara::getCentralityClass(UInt_t centE, UInt_t centC)
{
    
    
    if(centE>=kNumCentralityEstimator){
        return 101.;
    }
    else if(!getCentralityClassHist(centE, centC)){
        
        return 0;
    }
    else {
        Int_t buffer = getCentralityEstimator(centE);
        Int_t bin = getCentralityClassHist(centE, centC)->FindBin(buffer);
        return getCentralityClassHist(centE, centC)->GetBinContent(bin);
    }
    return 0;
    
}
Bool_t HParticleEvtChara::printCentralityClass(TString estimator)
{
    
    
    if (estimator.CompareTo("TOFRPCtimecut")==0 || estimator.CompareTo("TOFRPC5")==0) 
        return printCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k5);
    else if (estimator.CompareTo("TOFRPCtimecutFOPI")==0 || estimator.CompareTo("TOFRPCFOPI")==0) 
        return printCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::kFOPI);
    else if (estimator.CompareTo("TOFRPCtimecut10")==0 || estimator.CompareTo("TOFRPC10")==0) 
        return printCentralityClass(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k10);
    else {
         Error("printCentralityClass()","Sorry. printCentralityClass() for %s not implemented yet!",estimator.Data());
         return kFALSE;
     }
    return kFALSE;
}
Bool_t HParticleEvtChara::printCentralityClass(UInt_t centE, UInt_t centC)
{
    
    cout << endl;
    cout<<"---------------------------------------------------------------------------------------------"  << endl;
    cout<<"Centrality Classes for "<< getStringCentralityEstimator(centE).Data() << "  with " << getStringCentralityClass(centC).Data()  <<" bins" << endl;
    return printCentralityClass(getCentralityClassHist(centE, centC)); 
}
Bool_t HParticleEvtChara::printCentralityClass(TH1* htemp)
{
    
    if(!htemp){
        Error("printCentralityClass()","Sorry. printCentralityClass() for ... not implemented yet!");
        return kFALSE;
    }
    else{
        cout<<"---------------------------------------------------------------------------------------------"  << endl;
        cout<< "# of Classes: "<< htemp->GetNbinsX()-2 << endl;
        printf(" Class   lowEdge -   upEdge  Centrality[%%]  BinWidth[%%]  real CentralityBin[%%]  BinCenter[%%]\n");
        Float_t pcent = 0;
        for(Int_t i = htemp->GetNbinsX(); i>0 ; --i) {
            printf("  %2.f :  %8.2f - %8.2f %13s %13.3f    %8.2f - %8.2f %13.2f\n",
                      htemp->GetBinContent(i),
                      (htemp->GetXaxis())->GetBinLowEdge(i),
                      (htemp->GetXaxis())->GetBinUpEdge(i),
                      (htemp->GetXaxis())->GetBinLabel(i),
                      htemp->GetBinError(i),
                      pcent,
                      pcent+htemp->GetBinError(i),
                      pcent+0.5*htemp->GetBinError(i) );
            pcent += htemp->GetBinError(i);
        }
        cout<<"---------------------------------------------------------------------------------------------"  << endl;
        return kTRUE;
    }
    return kFALSE;
}
TH2D* HParticleEvtChara::makeEPresolution(TProfile2D *hist, Bool_t calcChi)
{
    if(!hist) return 0;
    TString sName=hist->GetName();   
    sName.Append("_res");
    
    Int_t nxBins = hist->GetNbinsX();
    Int_t nyBins = hist->GetNbinsY();
    
    TH2D* hresolution  = (TH2D*) new TH2D(sName.Data(), sName.Data(), nxBins, hist->GetXaxis()->GetXmin(), hist->GetXaxis()->GetXmax(),
                                                                      nyBins, hist->GetYaxis()->GetXmin(), hist->GetYaxis()->GetXmax());
    (hresolution->GetXaxis())->SetTitle(hist->GetXaxis()->GetTitle());
    (hresolution->GetYaxis())->SetTitle(hist->GetYaxis()->GetTitle());
    (hresolution->GetZaxis())->SetTitle(hist->GetZaxis()->GetTitle());
    Int_t bin,binx,biny;
    for (binx =0;binx<=nxBins+1;binx++) {
       for (biny =0;biny<=nyBins+1;biny++) {
           bin   = biny*(nxBins+2) + binx;
           
           Double_t dQaQb        = hist->GetBinContent(bin);
           Double_t dEntriesQaQb = hist->GetBinEntries(bin);
           if( dQaQb <= 0 || dEntriesQaQb < 1 ){
               hresolution->SetBinContent(bin, 0. );
               hresolution->SetBinError(  bin, 0. );
                continue;
           }
           Double_t dSpreadQaQb  = hist->GetBinError(bin);
           Double_t dV = TMath::Sqrt(dQaQb);
           printf("\nbin=%d binX=%d binY=%d QaQb = %f  +- %f    V = %f\n",bin, binx, biny, dQaQb, dSpreadQaQb , dV);
           Double_t dChi = FindXi(dV,1e-6);
           dV = ComputeResolution( TMath::Sqrt2()*dChi );
           printf("An estimate of the event plane resolution is: %f\n", dV );
           Double_t dVerr = 0.;
           if(dQaQb > 0.) dVerr = (1./(2.*pow(dQaQb,0.5)))*dSpreadQaQb;
           Double_t dChiErr = FindXi(dVerr,1e-6);
           printf("An estimate chi of the event plane is: %f +- %f\n", dChi, dChiErr );
           printf("R:(subevents) = %f +- %f\n",dV,dVerr);
           if(calcChi){
               hresolution->SetBinContent(binx, biny, dChi );
               hresolution->SetBinError(  binx, biny, dChiErr);
           }
           else{
               hresolution->SetBinContent(binx, biny, dV );
               hresolution->SetBinError(  binx, biny, dVerr );
           }
       }
    }
    TString name=hist->GetName();   
    hresolution->SetNameTitle(name.Data(),name.Data());
    hresolution->SetEntries(hist->GetEntries());
    return hresolution;
}
TH1* HParticleEvtChara::makeEPresolution(TH3 *hist, Bool_t calcChi)
{
    if(!hist) return 0;
    TString sName=hist->GetName();   
    sName.Append("_res");
    
    TAxis* axis = hist->GetZaxis();
    axis->SetRange(1, axis->GetNbins());
    TH1* temp  = hist->Project3D("xy_1");
    axis->SetRange(axis->FindBin(TMath::PiOver2()), axis->GetNbins());
    TH1* temp2  = hist->Project3D("xy_2");    
    temp2->Divide(temp);
    Int_t nxBins = temp2->GetNbinsX();
    Int_t nyBins = temp2->GetNbinsY();
    
    TH2D* hresolution  = (TH2D*) new TH2D(sName.Data(), sName.Data(), nxBins, temp2->GetXaxis()->GetXmin(), temp2->GetXaxis()->GetXmax(),
                                                                      nyBins, temp2->GetYaxis()->GetXmin(), temp2->GetYaxis()->GetXmax());
    (hresolution->GetXaxis())->SetTitle(hist->GetXaxis()->GetTitle());
    (hresolution->GetYaxis())->SetTitle(hist->GetYaxis()->GetTitle());
    (hresolution->GetZaxis())->SetTitle(hist->GetZaxis()->GetTitle());
    
    Int_t bin,binx,biny;
    
    for (binx =0;binx<=nxBins+1;binx++) {
       for (biny =0;biny<=nyBins+1;biny++) {
           bin   = biny*(nxBins+2) + binx;
           
           Double_t ratio        = temp2->GetBinContent(binx,biny);
           printf("\nbin=%d binX=%d binY=%d  Ratio=%f\n",bin, binx, biny, ratio);
           if( ratio <= 0 ){
               continue;
           }
           Double_t chisq = -2.*TMath::Log(2.*ratio);
           Double_t dChi = sqrt(chisq);
           printf("An estimate chi of the event plane is: %f\n", dChi );
           Double_t dV = ComputeResolution( TMath::Sqrt2()*dChi );
           printf("An estimate of the event plane resolution is: %f\n", dV );
           Double_t dVerr = 0.;
           printf("R:(subevents) = %f +- %f\n",dV,dVerr);
           if(calcChi){
               hresolution->SetBinContent(binx, biny, dChi );
               
           }
           else{
               hresolution->SetBinContent(binx, biny, dV );
               hresolution->SetBinError(  binx, biny, dVerr );
           }
       }
    }
    
    TString name=hist->GetName();   
    hresolution->SetNameTitle(name.Data(),name.Data());
    hresolution->SetEntries(hist->GetEntries());
    return hresolution;
}
Double_t HParticleEvtChara::ModifiedBesselI(Int_t n, Double_t x) const
{
  
  
  const Double_t FACTOR = 0.797884561;  
  if (n<0) return 0;
  if (x<1e-7) return 0;
  if (n==0)       return FACTOR*sqrt(x)*TMath::SinH(x)/x;   
  else if (n==1)  return FACTOR*sqrt(x)*( -TMath::SinH(x)/(x*x) + TMath::CosH(x)/x );   
  else if (n==2)  return FACTOR*sqrt(x)*( (3./(x*x)+1.)*TMath::SinH(x)/x - 3.*TMath::CosH(x)/(x*x) );   
  return 0.5*(TMath::BesselI(n,x)+TMath::BesselI(n+1,x));   
}
Double_t HParticleEvtChara::ComputeResolution( Double_t x, Int_t n ) const
{
  
  if(x > 51.3) {
    printf("Warning: Estimation of total resolution might be WRONG. Please check!");
    return 0.99981;
  }
  if (n<1) return 0;
  Int_t n1= (n-1)/2;      
  Int_t n2 = (n+1)/2;
  
  Double_t a = x*x/2;  
                       
  Double_t b = TMath::Exp(-a);
  if (n==1)        b *= TMath::BesselI0(a)+TMath::BesselI1(a);
  else if(n%2==1)  b *= TMath::BesselI(n1,a)+TMath::BesselI(n2,a);
  else             b *= ModifiedBesselI(n1, a) + ModifiedBesselI(n2, a);
  return TMath::Sqrt(TMath::Pi())/2*x*b; 
}
Double_t HParticleEvtChara::FindXi( Double_t res, Double_t prec, Int_t n ) const
{
  
  if(res > 0.99981) {
    printf("Warning: Resolution for subEvent is high. You reached the precision limit.");
    return 51.3;
  }
  int nSteps =0;
  Double_t xtmp=0, xmin=0, xmax=51.3, rtmp=0, delta=2*prec;
  while( delta > prec ) {
    xtmp = 0.5*(xmin+xmax);
    rtmp = ComputeResolution(xtmp, n);
    delta = TMath::Abs( res-rtmp );
    if(rtmp>res) xmax = xtmp;
    if(rtmp<res) xmin = xtmp;
    nSteps++;
  }
  return xtmp;
}
Bool_t HParticleEvtChara::addEstimatorHist(TH1F *hist, Float_t fractionXsection, UInt_t centE, Int_t direction)
{
    if(!hist)return kFALSE;
    if(fractionXsection<0.1) return kFALSE;
    if(centE>=kNumCentralityEstimator) return kFALSE;
    
    TString temp;
    if(fPostFix.CompareTo("")==0) temp = Form("%s",getStringCentralityEstimator(centE).Data() );
    else                       temp = Form("%s_%s",getStringCentralityEstimator(centE).Data(), fPostFix.Data() );
    
    hist->SetName(temp.Data());
    hist->SetTitle(temp.Data());
    fEstimatorHist[centE]= (TH1F*) hist;
    fCentralityPercentileHist[centE] = (TH1F*) makePercentiles(hist, fractionXsection, direction);
    for (int centC = 0; centC < (int) kNumCentralityClass; ++centC){
        fCentralityHist[centE][centC] = (TH1F*) makeClasses(hist, fractionXsection, centC, direction);
        if(fCentralityHist[centE][centC]) printCentralityClass(centE, centC);
    }
    return kTRUE;
}
TH1F* HParticleEvtChara::makePercentiles(TH1F *htemp, Float_t fractionXsection, Int_t direction)
{
  if(!htemp) return 0;  
  TH1F *hpercent  = (TH1F*) htemp->Clone("hpercent");
  TString name=htemp->GetName();   
  name.Append("_percentile");
  hpercent->SetNameTitle(name.Data(),name.Data());
  hpercent->Reset();
  Float_t totIntegral = fractionXsection / htemp->Integral(1,htemp->GetNbinsX()); 
  if(direction<0){
      for (int ibin=1; ibin<=htemp->GetNbinsX(); ibin++){
          hpercent->SetBinContent(ibin, totIntegral * htemp->Integral(ibin,htemp->GetNbinsX()) );
      } 
  }
  else if(direction>0){
      for (int ibin=1; ibin<=htemp->GetNbinsX(); ibin++){
          hpercent->SetBinContent(ibin, totIntegral * htemp->Integral(1,ibin) );
      } 
  }
  return hpercent;
}
TH1F* HParticleEvtChara::makeClasses(TH1F *htemp, Float_t fractionXsection, UInt_t centC, Int_t direction)
{
    if(!htemp) return 0;
    if(fractionXsection<0.1) return 0;
    Int_t nClasses = getCentralityClassNbins(centC);
    Double_t integral = htemp->Integral();
    Double_t norm = integral / fractionXsection;
    Float_t* PercentileArray = getCentralityClassArray(centC);
    std::vector<Double_t> binEdge;
    std::vector<Double_t> xSection;
    std::vector<TString>  fLabels; 
    Int_t start = 1;
    Int_t stop = htemp->GetNbinsX();
    if(direction < 0){
        direction = -1;
        start = htemp->GetNbinsX()-1;
        stop = 0;
        binEdge.push_back(htemp->GetBinLowEdge(htemp->GetNbinsX()));
    }
    else{
        direction = 1;
        binEdge.push_back(htemp->GetBinLowEdge(1));
    }
    Int_t bin = start;
    Float_t lxs = 0;
    Float_t txs = 0;
    
    while(1){
        lxs += htemp->GetBinContent(bin);
        Double_t pxs = lxs/norm;
        if( pxs>0.001 ){
          if (direction>0)   binEdge.push_back(htemp->GetBinLowEdge(bin+1));
          else               binEdge.push_back(htemp->GetBinLowEdge(bin));
          xSection.push_back(pxs);
          bin += direction;
          break;
        }
        bin += direction;
    }
    Float_t totxs = 0;
    for (Int_t i = 0; i < nClasses; ++i) {
        lxs = 0 ;
        totxs += PercentileArray[i];
        while(1){
            lxs += htemp->GetBinContent(bin);
            txs += htemp->GetBinContent(bin);
            Double_t pxs = txs/norm;
            Double_t tdiff = (txs+htemp->GetBinContent(bin+direction))/norm;
            if( ( pxs>totxs )
                || (TMath::Abs(pxs-totxs)<=TMath::Abs(tdiff-totxs)) )
            {
              if (direction>0)  binEdge.push_back(htemp->GetBinLowEdge(bin+1));
              else              binEdge.push_back(htemp->GetBinLowEdge(bin));
              xSection.push_back(lxs/norm);
              bin += direction;
              break;
            }
            bin += direction;
            if ( (direction>0 && bin>=stop) || (direction<0 && bin<=stop ) || (txs>=integral) ) break;
        }
        if(totxs>fractionXsection || (direction>0 && bin>=stop) || (direction<0 && bin<=stop ) || (txs>=integral)) break;
    }
      fLabels.push_back("overflow");
      Double_t totXsection =0;
      for(std::vector<double>::size_type index = 1; index < xSection.size()-1; ++index){
          fLabels.push_back(Form("%02.0f-%02.0f",round(totXsection),round(totXsection+xSection[index])) );
          totXsection += xSection[index];
      }
      fLabels.push_back("underflow");
 
      std::reverse(fLabels.begin(),fLabels.end());
      std::reverse(binEdge.begin(), binEdge.end());
      std::reverse(xSection.begin(), xSection.end());
      Double_t xlowbins[binEdge.size()];
      std::copy(binEdge.begin(), binEdge.end(), xlowbins);
      TString name = htemp->GetTitle();
      name = Form("%s_%s_fixedCuts", name.Data(), getStringCentralityClass(centC).Data());
      TH1F *hfixedCuts = new TH1F(name.Data(), name.Data(), binEdge.size()-1, xlowbins); 
      for(std::vector<double>::size_type bin = 0; bin < fLabels.size(); ++bin){
          (hfixedCuts->GetXaxis())->SetBinLabel(bin+1,fLabels[bin]);
          hfixedCuts->SetBinContent(bin+1, fLabels.size()-bin-1);
          hfixedCuts->SetBinError(bin+1, xSection[bin]);
      }
  return hfixedCuts;
}
Int_t HParticleEvtChara::getNbins(TString estimator)
{
    
    
    if (estimator.CompareTo("TOFRPCtimecut")==0 || estimator.CompareTo("TOFRPC5")==0) 
        return getNbins(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k5);
    else if (estimator.CompareTo("TOFRPCtimecutFOPI")==0 || estimator.CompareTo("TOFRPCFOPI")==0) 
        return getNbins(HParticleEvtChara::kTOFRPC, HParticleEvtChara::kFOPI);
    else if (estimator.CompareTo("TOFRPCtimecut10")==0 || estimator.CompareTo("TOFRPC10")==0) 
        return getNbins(HParticleEvtChara::kTOFRPC, HParticleEvtChara::k10);
    else { Error("getNbins()","Sorry. getNbins() for %s not implemented yet!",estimator.Data()); return 0;}
}
Int_t HParticleEvtChara::getNbins(UInt_t centE, UInt_t centC)
{
    
    TH1F *htemp = getCentralityClassHist(centE, centC); 
    if(htemp) return htemp->GetNbinsX();
    else return 0;
}
Int_t HParticleEvtChara::getCentralityClassNbins(UInt_t centC)
{
    if(centC==k1040)      return 6;
    else if(centC==kFOPI) return 6;
    Float_t binSize = getCentralityClassBinSize(centC);
    if(binSize>0) return round((100./binSize));
    
    return 0;
}
Float_t* HParticleEvtChara::getCentralityClassArray(UInt_t centC)
{
    
    Float_t binSize = getCentralityClassBinSize(centC);
    Int_t nBins = getCentralityClassNbins(centC);
    if (nBins<1) return 0;
    
    Float_t* arr = new Float_t[nBins];
    if(binSize>0){
        Float_t xs = 0.;
        for(Int_t i =0;  i < nBins ; i++){
            xs+=binSize;
            if(xs < 100.){
                arr[i] = (Float_t) binSize;
            }
            else{
                arr[i] = 100. - (binSize*i);
            }
        }
    }
    else if(centC==k1040) {
        Double_t fxs[6] = {10.,30.,30, 10.,10.,10.};
        for(Int_t i =0;  i < nBins ; i++) arr[i] = fxs[i];
    }
    else if(centC==kFOPI) {
        Double_t fxs[6] = {6.3,14.7,9.9,10.,10.,10.};
        for(Int_t i =0;  i < nBins ; i++) arr[i] = fxs[i];
    }
    
    return arr;
}
Float_t* HParticleEvtChara::getUpEdgeArray(UInt_t centE, UInt_t centC)
{
    
    TH1F *htemp = getCentralityClassHist(centE, centC);
    
    if(htemp){
        Int_t nBins = htemp->GetNbinsX();
        Float_t* arr = new Float_t[nBins];
        for(Int_t i =0;  i < nBins ; i++) {
            
            arr[i] = (Float_t) (htemp->GetXaxis())->GetBinLowEdge(nBins-i);
        }
         return arr;
    }
    else return 0;
}
Float_t* HParticleEvtChara::getBinCenterArray(UInt_t centE, UInt_t centC)
{
    
    TH1F *htemp = getCentralityClassHist(centE, centC);
    
    if(htemp){
        Int_t nBins = htemp->GetNbinsX();
        Float_t* arr = new Float_t[nBins];
        Float_t pcent = 0;
        for(Int_t i =0;  i < nBins ; i++) {
              pcent += 0.5*htemp->GetBinError(i);
              arr[nBins-i] = (Float_t) pcent;
        }
         return arr;
    }
    else return 0;
}
vector<TString> HParticleEvtChara::getLabelArray(UInt_t centE, UInt_t centC)
{
    
    TH1F *htemp = getCentralityClassHist(centE, centC); 
    vector<TString> ar;
    if(htemp){
        Int_t nBins = htemp->GetNbinsX();
        for(Int_t i =1;  i < nBins-1 ; i++) {
            
            TString prv = TString( (htemp->GetXaxis())->GetBinLabel(nBins-i) );
            ar.push_back(prv);
        }
    }
    return ar;
}
Int_t HParticleEvtChara::getCentralityClass5(TString estimator)
{
    
    return 1+(Int_t)getCentralityPercentile(estimator)/5.;
}
Int_t HParticleEvtChara::getCentralityClass10(TString estimator)
{
    
    return 1+(Int_t)getCentralityPercentile(estimator)/10.;
}
Float_t HParticleEvtChara::getCentralityPercentile(TString estimator)
{
    
    return getCentralityPercentile(getCentralityEstimatorFromString(estimator));
}
Float_t HParticleEvtChara::getCentralityPercentile(UInt_t centE)
{
    if(centE>=kNumCentralityEstimator){
        return 101.;
    }
    else if(!getCentralityPercentileHist(centE)){
        return 101.;
    }
    else {
        Int_t buffer = getCentralityEstimator(centE);
        Int_t bin = getCentralityPercentileHist(centE)->FindBin(buffer);
        return getCentralityPercentileHist(centE)->GetBinContent(bin);
    }
    return 101.;
}
Int_t HParticleEvtChara::getMdcWiresOuterMod()
{
    HParticleEvtInfo *event_info = (HParticleEvtInfo*)fParticleEvtInfoCat->getObject(0);
    if(!event_info) {
        return 0;
    }
    Int_t sum = 0;
    for(Int_t s=0;s<6;s++) sum += event_info->getMdcWiresMod(s,2)+event_info->getMdcWiresMod(s,3);  
    return sum;
}
Float_t HParticleEvtChara::getSelectedParticleCandSecNorm(){
    
    if(!gLoop) return 0;
    
    HParticleEvtInfo *event_info = (HParticleEvtInfo*)fParticleEvtInfoCat->getObject(0);
    if(!event_info) {
        return 0;
    }
    
    Float_t SelectedParticleCandSecCorr=0;
    Int_t nGoodSectors=0;
    for (Int_t s = 0; s < 6; ++s ){
        if(gLoop->goodSector(s)){
            SelectedParticleCandSecCorr += event_info->getSelectedParticleCandMult(s)/event_info->getMeanMult(s);
            nGoodSectors++;
        }
    }
    if(nGoodSectors>0) SelectedParticleCandSecCorr /= nGoodSectors;
    return SelectedParticleCandSecCorr;
}
Float_t HParticleEvtChara::getSelectedParticleCandCorrPerWire(){
    
    HParticleEvtInfo *event_info = (HParticleEvtInfo*)fParticleEvtInfoCat->getObject(0);
    if(!event_info) {
        return 0;
    }
    
    Float_t w0 = -0.660682;
    Float_t w1 = -0.0652827;
    Float_t w2 = -0.660682;
    Float_t w3 = -0.0652827;
    Float_t w4 = -0.655548;
    Float_t w5 = -0.00547515;
    
    Int_t   nRawWires = 0;
    Int_t   nSelMult = 0;
    Float_t WirePerTracks = 0;
    Float_t SelectedParticleCandCorrPerWire = 0;
    Float_t EffWirePerTrack = 0;
    for(Int_t s=0;s<6;s++) {
        nSelMult  = event_info->getSelectedParticleCandMult(s);
        nRawWires = event_info->getMdcWiresMod(s,2)+event_info->getMdcWiresMod(s,3);  
        if(nSelMult>0){
            WirePerTracks = Float_t(nRawWires)/nSelMult;
            EffWirePerTrack = 1/(exp(w0+w1*WirePerTracks) + exp(w2+w3*WirePerTracks) + exp(w4+w5*WirePerTracks));
            SelectedParticleCandCorrPerWire += nSelMult*EffWirePerTrack;
        }
    }
    return SelectedParticleCandCorrPerWire;
}
Float_t HParticleEvtChara::getFWSumChargeSpec(){
    Float_t MultFWSumChargeSpec=0;
    
    if(!fCatWallHit) return -1;
    HWallHitSim *wall = 0;
    for(Int_t i = 0; i < fCatWallHit->getEntries(); i ++ ){
        wall  = (HWallHitSim*) HCategoryManager::getObject(wall,fCatWallHit,i);
        if(!wall) continue;
        if(!PassesCutsFW(wall)) continue;
        if(!isSimulation) MultFWSumChargeSpec += wall->getCharge();
        else              MultFWSumChargeSpec += 93.*pow(wall->getCharge(),0.46-0.006*sqrt(wall->getCharge()));  
     }
    return MultFWSumChargeSpec;
}
Float_t HParticleEvtChara::getFWSumZ(Int_t minZ, Int_t maxZ, UInt_t SubEvent){
    if(isNewEvent()){
        fillHitArray();
    }
    Float_t Z = 0.;
    Float_t w = 1.;
    Int_t nHits = arrayOfHits.size();
    if(nHits<1) return 0;  
    for (Int_t i=0; i<nHits; i++){
        w  = arrayOfHits[i]->Weight1();
        
        if(w>maxZ) w=maxZ;
        if(w<minZ) continue;
        if(SubEvent == 0) {
            Z += w;
        }
        else if(SubEvent == 1 && arrayOfHits[i]->SubEvent() == 1) {
            Z += w;
        }
        else if(SubEvent == 2 && arrayOfHits[i]->SubEvent() == 2) {
            Z += w;
        }
    }
    return Z;
}
Float_t HParticleEvtChara::getEt(){
    Float_t Et=0;
    if(!fParticleCandCat) return -1;
    HParticleCand* particle_cand = 0;
    for(Int_t i = 0; i < fParticleCandCat->getEntries(); i ++ ){
        particle_cand  = (HParticleCand*) HCategoryManager::getObject(particle_cand,fParticleCandCat,i);
        if(!particle_cand->isFlagBit(Particle::kIsUsed)) continue;
        if(particle_cand->isFakeRejected() )            continue;
        if(particle_cand->getSystemUsed() == -1)        continue;
        if(!particle_cand->isFlagAND(4,                               
                Particle::kIsAcceptedHitInnerMDC,
                Particle::kIsAcceptedHitOuterMDC,
                Particle::kIsAcceptedHitMETA,
                Particle::kIsAcceptedRK)  )       continue;
          if(particle_cand->getPID()==-1)       continue;
        if( TMath::Abs(particle_cand->Rapidity()-0.74)>0.5 && particle_cand->Pt()>300 ){  
            Et              += particle_cand->Et();
        }
    
    } 
    return Et;
}
Float_t HParticleEvtChara::getRatioEtEz(){
    
    Float_t RatioEtEz=0;
    Float_t Et=0;
    Float_t Ez=0;
    if(!fParticleCandCat) return -1;
    HParticleCand* particle_cand = 0;
    for(Int_t i = 0; i < fParticleCandCat->getEntries(); i ++ ){
        particle_cand  = (HParticleCand*) HCategoryManager::getObject(particle_cand,fParticleCandCat,i);
        if(!particle_cand->isFlagBit(Particle::kIsUsed)) continue;
        if(particle_cand->isFakeRejected() )            continue;
        if(particle_cand->getSystemUsed() == -1)        continue;
        if(!particle_cand->isFlagAND(4,                               
                Particle::kIsAcceptedHitInnerMDC,
                Particle::kIsAcceptedHitOuterMDC,
                Particle::kIsAcceptedHitMETA,
                Particle::kIsAcceptedRK)  )       continue;
        if(particle_cand->getPID()==-1)           continue;
        Ez              += particle_cand->E()*particle_cand->CosTheta();   
        Et              += particle_cand->Et();
    
    } 
    if(Ez){
        RatioEtEz = Et/Ez;
    }
    else {
        RatioEtEz=0;
    }
    return RatioEtEz;
}
Float_t HParticleEvtChara::getDirectivity()
{
    Float_t Directivity=0;
    TLorentzVector QVector = TLorentzVector();
    Int_t QVectorT = 0;
    if(!fParticleCandCat) return -1;
    HParticleCand* particle_cand = 0;
    for(Int_t i = 0; i < fParticleCandCat->getEntries(); i ++ ){
        particle_cand  = (HParticleCand*) HCategoryManager::getObject(particle_cand,fParticleCandCat,i);
        if(!particle_cand->isFlagBit(Particle::kIsUsed)) continue;
        if(particle_cand->isFakeRejected() )            continue;
        if(particle_cand->getSystemUsed() == -1)        continue;
        if(!particle_cand->isFlagAND(4,                               
                Particle::kIsAcceptedHitInnerMDC,
                Particle::kIsAcceptedHitOuterMDC,
                Particle::kIsAcceptedHitMETA,
                Particle::kIsAcceptedRK)  )       continue;
        if(particle_cand->getPID()==-1)           continue;
        if( particle_cand->Rapidity() > 0.74 ){  
            QVector  += (TLorentzVector)* particle_cand;
            QVectorT +=  particle_cand->Pt();
        }
        else {  
            QVector  -= (TLorentzVector)* particle_cand;
            QVectorT += particle_cand->Pt();
        }
    
    } 
    if(QVectorT>0)Directivity = QVector.Pt() / QVectorT;      
    else Directivity = 0;
    return Directivity;
}
 hparticleevtchara.cc:1000  hparticleevtchara.cc:1001  hparticleevtchara.cc:1002  hparticleevtchara.cc:1003  hparticleevtchara.cc:1004  hparticleevtchara.cc:1005  hparticleevtchara.cc:1006  hparticleevtchara.cc:1007  hparticleevtchara.cc:1008  hparticleevtchara.cc:1009  hparticleevtchara.cc:1010  hparticleevtchara.cc:1011  hparticleevtchara.cc:1012  hparticleevtchara.cc:1013  hparticleevtchara.cc:1014  hparticleevtchara.cc:1015  hparticleevtchara.cc:1016  hparticleevtchara.cc:1017  hparticleevtchara.cc:1018  hparticleevtchara.cc:1019  hparticleevtchara.cc:1020  hparticleevtchara.cc:1021  hparticleevtchara.cc:1022  hparticleevtchara.cc:1023  hparticleevtchara.cc:1024  hparticleevtchara.cc:1025  hparticleevtchara.cc:1026  hparticleevtchara.cc:1027  hparticleevtchara.cc:1028  hparticleevtchara.cc:1029  hparticleevtchara.cc:1030  hparticleevtchara.cc:1031  hparticleevtchara.cc:1032  hparticleevtchara.cc:1033  hparticleevtchara.cc:1034  hparticleevtchara.cc:1035  hparticleevtchara.cc:1036  hparticleevtchara.cc:1037  hparticleevtchara.cc:1038  hparticleevtchara.cc:1039  hparticleevtchara.cc:1040  hparticleevtchara.cc:1041  hparticleevtchara.cc:1042  hparticleevtchara.cc:1043  hparticleevtchara.cc:1044  hparticleevtchara.cc:1045  hparticleevtchara.cc:1046  hparticleevtchara.cc:1047  hparticleevtchara.cc:1048  hparticleevtchara.cc:1049  hparticleevtchara.cc:1050  hparticleevtchara.cc:1051  hparticleevtchara.cc:1052  hparticleevtchara.cc:1053  hparticleevtchara.cc:1054  hparticleevtchara.cc:1055  hparticleevtchara.cc:1056  hparticleevtchara.cc:1057  hparticleevtchara.cc:1058  hparticleevtchara.cc:1059  hparticleevtchara.cc:1060  hparticleevtchara.cc:1061  hparticleevtchara.cc:1062  hparticleevtchara.cc:1063  hparticleevtchara.cc:1064  hparticleevtchara.cc:1065  hparticleevtchara.cc:1066  hparticleevtchara.cc:1067  hparticleevtchara.cc:1068  hparticleevtchara.cc:1069  hparticleevtchara.cc:1070  hparticleevtchara.cc:1071  hparticleevtchara.cc:1072  hparticleevtchara.cc:1073  hparticleevtchara.cc:1074  hparticleevtchara.cc:1075  hparticleevtchara.cc:1076  hparticleevtchara.cc:1077  hparticleevtchara.cc:1078  hparticleevtchara.cc:1079  hparticleevtchara.cc:1080  hparticleevtchara.cc:1081  hparticleevtchara.cc:1082  hparticleevtchara.cc:1083  hparticleevtchara.cc:1084  hparticleevtchara.cc:1085  hparticleevtchara.cc:1086  hparticleevtchara.cc:1087  hparticleevtchara.cc:1088  hparticleevtchara.cc:1089  hparticleevtchara.cc:1090  hparticleevtchara.cc:1091  hparticleevtchara.cc:1092  hparticleevtchara.cc:1093  hparticleevtchara.cc:1094  hparticleevtchara.cc:1095  hparticleevtchara.cc:1096  hparticleevtchara.cc:1097  hparticleevtchara.cc:1098  hparticleevtchara.cc:1099  hparticleevtchara.cc:1100  hparticleevtchara.cc:1101  hparticleevtchara.cc:1102  hparticleevtchara.cc:1103  hparticleevtchara.cc:1104  hparticleevtchara.cc:1105  hparticleevtchara.cc:1106  hparticleevtchara.cc:1107  hparticleevtchara.cc:1108  hparticleevtchara.cc:1109  hparticleevtchara.cc:1110  hparticleevtchara.cc:1111  hparticleevtchara.cc:1112  hparticleevtchara.cc:1113  hparticleevtchara.cc:1114  hparticleevtchara.cc:1115  hparticleevtchara.cc:1116  hparticleevtchara.cc:1117  hparticleevtchara.cc:1118  hparticleevtchara.cc:1119  hparticleevtchara.cc:1120  hparticleevtchara.cc:1121  hparticleevtchara.cc:1122  hparticleevtchara.cc:1123  hparticleevtchara.cc:1124  hparticleevtchara.cc:1125  hparticleevtchara.cc:1126  hparticleevtchara.cc:1127  hparticleevtchara.cc:1128  hparticleevtchara.cc:1129  hparticleevtchara.cc:1130  hparticleevtchara.cc:1131  hparticleevtchara.cc:1132  hparticleevtchara.cc:1133  hparticleevtchara.cc:1134  hparticleevtchara.cc:1135  hparticleevtchara.cc:1136  hparticleevtchara.cc:1137  hparticleevtchara.cc:1138  hparticleevtchara.cc:1139  hparticleevtchara.cc:1140  hparticleevtchara.cc:1141  hparticleevtchara.cc:1142  hparticleevtchara.cc:1143  hparticleevtchara.cc:1144  hparticleevtchara.cc:1145  hparticleevtchara.cc:1146  hparticleevtchara.cc:1147  hparticleevtchara.cc:1148  hparticleevtchara.cc:1149  hparticleevtchara.cc:1150  hparticleevtchara.cc:1151  hparticleevtchara.cc:1152  hparticleevtchara.cc:1153  hparticleevtchara.cc:1154  hparticleevtchara.cc:1155  hparticleevtchara.cc:1156  hparticleevtchara.cc:1157  hparticleevtchara.cc:1158  hparticleevtchara.cc:1159  hparticleevtchara.cc:1160  hparticleevtchara.cc:1161  hparticleevtchara.cc:1162  hparticleevtchara.cc:1163  hparticleevtchara.cc:1164  hparticleevtchara.cc:1165  hparticleevtchara.cc:1166  hparticleevtchara.cc:1167  hparticleevtchara.cc:1168  hparticleevtchara.cc:1169  hparticleevtchara.cc:1170  hparticleevtchara.cc:1171  hparticleevtchara.cc:1172  hparticleevtchara.cc:1173  hparticleevtchara.cc:1174  hparticleevtchara.cc:1175  hparticleevtchara.cc:1176  hparticleevtchara.cc:1177  hparticleevtchara.cc:1178  hparticleevtchara.cc:1179  hparticleevtchara.cc:1180  hparticleevtchara.cc:1181  hparticleevtchara.cc:1182  hparticleevtchara.cc:1183  hparticleevtchara.cc:1184  hparticleevtchara.cc:1185  hparticleevtchara.cc:1186  hparticleevtchara.cc:1187  hparticleevtchara.cc:1188  hparticleevtchara.cc:1189  hparticleevtchara.cc:1190  hparticleevtchara.cc:1191  hparticleevtchara.cc:1192  hparticleevtchara.cc:1193  hparticleevtchara.cc:1194  hparticleevtchara.cc:1195  hparticleevtchara.cc:1196  hparticleevtchara.cc:1197  hparticleevtchara.cc:1198  hparticleevtchara.cc:1199  hparticleevtchara.cc:1200  hparticleevtchara.cc:1201  hparticleevtchara.cc:1202  hparticleevtchara.cc:1203  hparticleevtchara.cc:1204  hparticleevtchara.cc:1205  hparticleevtchara.cc:1206  hparticleevtchara.cc:1207  hparticleevtchara.cc:1208  hparticleevtchara.cc:1209  hparticleevtchara.cc:1210  hparticleevtchara.cc:1211  hparticleevtchara.cc:1212  hparticleevtchara.cc:1213  hparticleevtchara.cc:1214  hparticleevtchara.cc:1215  hparticleevtchara.cc:1216  hparticleevtchara.cc:1217  hparticleevtchara.cc:1218  hparticleevtchara.cc:1219  hparticleevtchara.cc:1220  hparticleevtchara.cc:1221  hparticleevtchara.cc:1222  hparticleevtchara.cc:1223  hparticleevtchara.cc:1224  hparticleevtchara.cc:1225  hparticleevtchara.cc:1226  hparticleevtchara.cc:1227  hparticleevtchara.cc:1228  hparticleevtchara.cc:1229  hparticleevtchara.cc:1230  hparticleevtchara.cc:1231  hparticleevtchara.cc:1232  hparticleevtchara.cc:1233  hparticleevtchara.cc:1234  hparticleevtchara.cc:1235  hparticleevtchara.cc:1236  hparticleevtchara.cc:1237  hparticleevtchara.cc:1238  hparticleevtchara.cc:1239  hparticleevtchara.cc:1240  hparticleevtchara.cc:1241  hparticleevtchara.cc:1242  hparticleevtchara.cc:1243  hparticleevtchara.cc:1244  hparticleevtchara.cc:1245  hparticleevtchara.cc:1246  hparticleevtchara.cc:1247  hparticleevtchara.cc:1248  hparticleevtchara.cc:1249  hparticleevtchara.cc:1250  hparticleevtchara.cc:1251  hparticleevtchara.cc:1252  hparticleevtchara.cc:1253  hparticleevtchara.cc:1254  hparticleevtchara.cc:1255  hparticleevtchara.cc:1256  hparticleevtchara.cc:1257  hparticleevtchara.cc:1258  hparticleevtchara.cc:1259  hparticleevtchara.cc:1260  hparticleevtchara.cc:1261  hparticleevtchara.cc:1262  hparticleevtchara.cc:1263  hparticleevtchara.cc:1264  hparticleevtchara.cc:1265  hparticleevtchara.cc:1266  hparticleevtchara.cc:1267  hparticleevtchara.cc:1268  hparticleevtchara.cc:1269  hparticleevtchara.cc:1270  hparticleevtchara.cc:1271  hparticleevtchara.cc:1272  hparticleevtchara.cc:1273  hparticleevtchara.cc:1274  hparticleevtchara.cc:1275  hparticleevtchara.cc:1276  hparticleevtchara.cc:1277  hparticleevtchara.cc:1278  hparticleevtchara.cc:1279  hparticleevtchara.cc:1280  hparticleevtchara.cc:1281  hparticleevtchara.cc:1282  hparticleevtchara.cc:1283  hparticleevtchara.cc:1284  hparticleevtchara.cc:1285  hparticleevtchara.cc:1286  hparticleevtchara.cc:1287  hparticleevtchara.cc:1288  hparticleevtchara.cc:1289  hparticleevtchara.cc:1290  hparticleevtchara.cc:1291  hparticleevtchara.cc:1292  hparticleevtchara.cc:1293  hparticleevtchara.cc:1294  hparticleevtchara.cc:1295  hparticleevtchara.cc:1296  hparticleevtchara.cc:1297  hparticleevtchara.cc:1298  hparticleevtchara.cc:1299  hparticleevtchara.cc:1300  hparticleevtchara.cc:1301  hparticleevtchara.cc:1302  hparticleevtchara.cc:1303  hparticleevtchara.cc:1304  hparticleevtchara.cc:1305  hparticleevtchara.cc:1306  hparticleevtchara.cc:1307  hparticleevtchara.cc:1308  hparticleevtchara.cc:1309  hparticleevtchara.cc:1310  hparticleevtchara.cc:1311  hparticleevtchara.cc:1312  hparticleevtchara.cc:1313  hparticleevtchara.cc:1314  hparticleevtchara.cc:1315  hparticleevtchara.cc:1316  hparticleevtchara.cc:1317  hparticleevtchara.cc:1318  hparticleevtchara.cc:1319  hparticleevtchara.cc:1320  hparticleevtchara.cc:1321  hparticleevtchara.cc:1322  hparticleevtchara.cc:1323  hparticleevtchara.cc:1324  hparticleevtchara.cc:1325  hparticleevtchara.cc:1326  hparticleevtchara.cc:1327  hparticleevtchara.cc:1328  hparticleevtchara.cc:1329  hparticleevtchara.cc:1330  hparticleevtchara.cc:1331  hparticleevtchara.cc:1332  hparticleevtchara.cc:1333  hparticleevtchara.cc:1334  hparticleevtchara.cc:1335  hparticleevtchara.cc:1336  hparticleevtchara.cc:1337  hparticleevtchara.cc:1338  hparticleevtchara.cc:1339  hparticleevtchara.cc:1340  hparticleevtchara.cc:1341  hparticleevtchara.cc:1342  hparticleevtchara.cc:1343  hparticleevtchara.cc:1344  hparticleevtchara.cc:1345  hparticleevtchara.cc:1346  hparticleevtchara.cc:1347  hparticleevtchara.cc:1348  hparticleevtchara.cc:1349  hparticleevtchara.cc:1350  hparticleevtchara.cc:1351  hparticleevtchara.cc:1352  hparticleevtchara.cc:1353  hparticleevtchara.cc:1354  hparticleevtchara.cc:1355  hparticleevtchara.cc:1356  hparticleevtchara.cc:1357  hparticleevtchara.cc:1358  hparticleevtchara.cc:1359  hparticleevtchara.cc:1360  hparticleevtchara.cc:1361  hparticleevtchara.cc:1362  hparticleevtchara.cc:1363  hparticleevtchara.cc:1364  hparticleevtchara.cc:1365  hparticleevtchara.cc:1366  hparticleevtchara.cc:1367  hparticleevtchara.cc:1368  hparticleevtchara.cc:1369  hparticleevtchara.cc:1370  hparticleevtchara.cc:1371  hparticleevtchara.cc:1372  hparticleevtchara.cc:1373  hparticleevtchara.cc:1374  hparticleevtchara.cc:1375  hparticleevtchara.cc:1376  hparticleevtchara.cc:1377  hparticleevtchara.cc:1378  hparticleevtchara.cc:1379  hparticleevtchara.cc:1380  hparticleevtchara.cc:1381  hparticleevtchara.cc:1382  hparticleevtchara.cc:1383  hparticleevtchara.cc:1384  hparticleevtchara.cc:1385  hparticleevtchara.cc:1386  hparticleevtchara.cc:1387  hparticleevtchara.cc:1388  hparticleevtchara.cc:1389  hparticleevtchara.cc:1390  hparticleevtchara.cc:1391  hparticleevtchara.cc:1392  hparticleevtchara.cc:1393  hparticleevtchara.cc:1394  hparticleevtchara.cc:1395  hparticleevtchara.cc:1396  hparticleevtchara.cc:1397  hparticleevtchara.cc:1398  hparticleevtchara.cc:1399  hparticleevtchara.cc:1400  hparticleevtchara.cc:1401  hparticleevtchara.cc:1402  hparticleevtchara.cc:1403  hparticleevtchara.cc:1404  hparticleevtchara.cc:1405  hparticleevtchara.cc:1406  hparticleevtchara.cc:1407  hparticleevtchara.cc:1408  hparticleevtchara.cc:1409  hparticleevtchara.cc:1410  hparticleevtchara.cc:1411  hparticleevtchara.cc:1412  hparticleevtchara.cc:1413  hparticleevtchara.cc:1414  hparticleevtchara.cc:1415  hparticleevtchara.cc:1416  hparticleevtchara.cc:1417  hparticleevtchara.cc:1418  hparticleevtchara.cc:1419  hparticleevtchara.cc:1420  hparticleevtchara.cc:1421  hparticleevtchara.cc:1422  hparticleevtchara.cc:1423  hparticleevtchara.cc:1424  hparticleevtchara.cc:1425  hparticleevtchara.cc:1426  hparticleevtchara.cc:1427  hparticleevtchara.cc:1428  hparticleevtchara.cc:1429  hparticleevtchara.cc:1430  hparticleevtchara.cc:1431  hparticleevtchara.cc:1432  hparticleevtchara.cc:1433  hparticleevtchara.cc:1434  hparticleevtchara.cc:1435  hparticleevtchara.cc:1436  hparticleevtchara.cc:1437  hparticleevtchara.cc:1438  hparticleevtchara.cc:1439  hparticleevtchara.cc:1440  hparticleevtchara.cc:1441  hparticleevtchara.cc:1442  hparticleevtchara.cc:1443  hparticleevtchara.cc:1444  hparticleevtchara.cc:1445  hparticleevtchara.cc:1446  hparticleevtchara.cc:1447  hparticleevtchara.cc:1448  hparticleevtchara.cc:1449  hparticleevtchara.cc:1450  hparticleevtchara.cc:1451  hparticleevtchara.cc:1452  hparticleevtchara.cc:1453  hparticleevtchara.cc:1454  hparticleevtchara.cc:1455  hparticleevtchara.cc:1456  hparticleevtchara.cc:1457  hparticleevtchara.cc:1458  hparticleevtchara.cc:1459  hparticleevtchara.cc:1460  hparticleevtchara.cc:1461  hparticleevtchara.cc:1462  hparticleevtchara.cc:1463  hparticleevtchara.cc:1464  hparticleevtchara.cc:1465  hparticleevtchara.cc:1466  hparticleevtchara.cc:1467  hparticleevtchara.cc:1468  hparticleevtchara.cc:1469  hparticleevtchara.cc:1470  hparticleevtchara.cc:1471  hparticleevtchara.cc:1472  hparticleevtchara.cc:1473  hparticleevtchara.cc:1474  hparticleevtchara.cc:1475  hparticleevtchara.cc:1476  hparticleevtchara.cc:1477  hparticleevtchara.cc:1478  hparticleevtchara.cc:1479  hparticleevtchara.cc:1480  hparticleevtchara.cc:1481  hparticleevtchara.cc:1482  hparticleevtchara.cc:1483  hparticleevtchara.cc:1484  hparticleevtchara.cc:1485  hparticleevtchara.cc:1486  hparticleevtchara.cc:1487  hparticleevtchara.cc:1488  hparticleevtchara.cc:1489  hparticleevtchara.cc:1490  hparticleevtchara.cc:1491  hparticleevtchara.cc:1492  hparticleevtchara.cc:1493  hparticleevtchara.cc:1494  hparticleevtchara.cc:1495  hparticleevtchara.cc:1496  hparticleevtchara.cc:1497  hparticleevtchara.cc:1498  hparticleevtchara.cc:1499  hparticleevtchara.cc:1500  hparticleevtchara.cc:1501  hparticleevtchara.cc:1502  hparticleevtchara.cc:1503  hparticleevtchara.cc:1504  hparticleevtchara.cc:1505  hparticleevtchara.cc:1506  hparticleevtchara.cc:1507  hparticleevtchara.cc:1508  hparticleevtchara.cc:1509  hparticleevtchara.cc:1510  hparticleevtchara.cc:1511  hparticleevtchara.cc:1512  hparticleevtchara.cc:1513  hparticleevtchara.cc:1514  hparticleevtchara.cc:1515  hparticleevtchara.cc:1516  hparticleevtchara.cc:1517  hparticleevtchara.cc:1518  hparticleevtchara.cc:1519  hparticleevtchara.cc:1520  hparticleevtchara.cc:1521  hparticleevtchara.cc:1522  hparticleevtchara.cc:1523  hparticleevtchara.cc:1524  hparticleevtchara.cc:1525  hparticleevtchara.cc:1526  hparticleevtchara.cc:1527  hparticleevtchara.cc:1528  hparticleevtchara.cc:1529  hparticleevtchara.cc:1530  hparticleevtchara.cc:1531  hparticleevtchara.cc:1532  hparticleevtchara.cc:1533  hparticleevtchara.cc:1534  hparticleevtchara.cc:1535  hparticleevtchara.cc:1536  hparticleevtchara.cc:1537  hparticleevtchara.cc:1538  hparticleevtchara.cc:1539  hparticleevtchara.cc:1540  hparticleevtchara.cc:1541  hparticleevtchara.cc:1542  hparticleevtchara.cc:1543  hparticleevtchara.cc:1544  hparticleevtchara.cc:1545  hparticleevtchara.cc:1546  hparticleevtchara.cc:1547  hparticleevtchara.cc:1548  hparticleevtchara.cc:1549  hparticleevtchara.cc:1550  hparticleevtchara.cc:1551  hparticleevtchara.cc:1552  hparticleevtchara.cc:1553  hparticleevtchara.cc:1554  hparticleevtchara.cc:1555  hparticleevtchara.cc:1556  hparticleevtchara.cc:1557  hparticleevtchara.cc:1558  hparticleevtchara.cc:1559  hparticleevtchara.cc:1560  hparticleevtchara.cc:1561  hparticleevtchara.cc:1562  hparticleevtchara.cc:1563  hparticleevtchara.cc:1564  hparticleevtchara.cc:1565  hparticleevtchara.cc:1566  hparticleevtchara.cc:1567  hparticleevtchara.cc:1568  hparticleevtchara.cc:1569  hparticleevtchara.cc:1570  hparticleevtchara.cc:1571  hparticleevtchara.cc:1572  hparticleevtchara.cc:1573  hparticleevtchara.cc:1574  hparticleevtchara.cc:1575  hparticleevtchara.cc:1576  hparticleevtchara.cc:1577  hparticleevtchara.cc:1578  hparticleevtchara.cc:1579  hparticleevtchara.cc:1580  hparticleevtchara.cc:1581  hparticleevtchara.cc:1582  hparticleevtchara.cc:1583  hparticleevtchara.cc:1584  hparticleevtchara.cc:1585  hparticleevtchara.cc:1586  hparticleevtchara.cc:1587  hparticleevtchara.cc:1588  hparticleevtchara.cc:1589  hparticleevtchara.cc:1590  hparticleevtchara.cc:1591  hparticleevtchara.cc:1592  hparticleevtchara.cc:1593  hparticleevtchara.cc:1594  hparticleevtchara.cc:1595  hparticleevtchara.cc:1596  hparticleevtchara.cc:1597  hparticleevtchara.cc:1598  hparticleevtchara.cc:1599  hparticleevtchara.cc:1600  hparticleevtchara.cc:1601  hparticleevtchara.cc:1602  hparticleevtchara.cc:1603  hparticleevtchara.cc:1604  hparticleevtchara.cc:1605  hparticleevtchara.cc:1606  hparticleevtchara.cc:1607  hparticleevtchara.cc:1608  hparticleevtchara.cc:1609  hparticleevtchara.cc:1610  hparticleevtchara.cc:1611  hparticleevtchara.cc:1612  hparticleevtchara.cc:1613  hparticleevtchara.cc:1614  hparticleevtchara.cc:1615  hparticleevtchara.cc:1616  hparticleevtchara.cc:1617  hparticleevtchara.cc:1618  hparticleevtchara.cc:1619  hparticleevtchara.cc:1620  hparticleevtchara.cc:1621  hparticleevtchara.cc:1622  hparticleevtchara.cc:1623  hparticleevtchara.cc:1624  hparticleevtchara.cc:1625  hparticleevtchara.cc:1626  hparticleevtchara.cc:1627  hparticleevtchara.cc:1628  hparticleevtchara.cc:1629  hparticleevtchara.cc:1630  hparticleevtchara.cc:1631  hparticleevtchara.cc:1632  hparticleevtchara.cc:1633  hparticleevtchara.cc:1634  hparticleevtchara.cc:1635  hparticleevtchara.cc:1636  hparticleevtchara.cc:1637  hparticleevtchara.cc:1638  hparticleevtchara.cc:1639  hparticleevtchara.cc:1640  hparticleevtchara.cc:1641  hparticleevtchara.cc:1642  hparticleevtchara.cc:1643  hparticleevtchara.cc:1644  hparticleevtchara.cc:1645  hparticleevtchara.cc:1646  hparticleevtchara.cc:1647  hparticleevtchara.cc:1648  hparticleevtchara.cc:1649  hparticleevtchara.cc:1650  hparticleevtchara.cc:1651  hparticleevtchara.cc:1652  hparticleevtchara.cc:1653  hparticleevtchara.cc:1654  hparticleevtchara.cc:1655  hparticleevtchara.cc:1656  hparticleevtchara.cc:1657  hparticleevtchara.cc:1658  hparticleevtchara.cc:1659  hparticleevtchara.cc:1660  hparticleevtchara.cc:1661  hparticleevtchara.cc:1662  hparticleevtchara.cc:1663  hparticleevtchara.cc:1664  hparticleevtchara.cc:1665  hparticleevtchara.cc:1666  hparticleevtchara.cc:1667  hparticleevtchara.cc:1668  hparticleevtchara.cc:1669  hparticleevtchara.cc:1670  hparticleevtchara.cc:1671  hparticleevtchara.cc:1672  hparticleevtchara.cc:1673  hparticleevtchara.cc:1674  hparticleevtchara.cc:1675  hparticleevtchara.cc:1676  hparticleevtchara.cc:1677  hparticleevtchara.cc:1678  hparticleevtchara.cc:1679  hparticleevtchara.cc:1680  hparticleevtchara.cc:1681  hparticleevtchara.cc:1682  hparticleevtchara.cc:1683  hparticleevtchara.cc:1684  hparticleevtchara.cc:1685  hparticleevtchara.cc:1686  hparticleevtchara.cc:1687  hparticleevtchara.cc:1688  hparticleevtchara.cc:1689  hparticleevtchara.cc:1690  hparticleevtchara.cc:1691  hparticleevtchara.cc:1692  hparticleevtchara.cc:1693  hparticleevtchara.cc:1694  hparticleevtchara.cc:1695  hparticleevtchara.cc:1696  hparticleevtchara.cc:1697  hparticleevtchara.cc:1698  hparticleevtchara.cc:1699  hparticleevtchara.cc:1700  hparticleevtchara.cc:1701  hparticleevtchara.cc:1702  hparticleevtchara.cc:1703  hparticleevtchara.cc:1704  hparticleevtchara.cc:1705  hparticleevtchara.cc:1706  hparticleevtchara.cc:1707  hparticleevtchara.cc:1708  hparticleevtchara.cc:1709  hparticleevtchara.cc:1710  hparticleevtchara.cc:1711  hparticleevtchara.cc:1712  hparticleevtchara.cc:1713  hparticleevtchara.cc:1714  hparticleevtchara.cc:1715  hparticleevtchara.cc:1716  hparticleevtchara.cc:1717  hparticleevtchara.cc:1718  hparticleevtchara.cc:1719  hparticleevtchara.cc:1720  hparticleevtchara.cc:1721  hparticleevtchara.cc:1722  hparticleevtchara.cc:1723  hparticleevtchara.cc:1724  hparticleevtchara.cc:1725  hparticleevtchara.cc:1726  hparticleevtchara.cc:1727  hparticleevtchara.cc:1728  hparticleevtchara.cc:1729  hparticleevtchara.cc:1730  hparticleevtchara.cc:1731  hparticleevtchara.cc:1732  hparticleevtchara.cc:1733  hparticleevtchara.cc:1734  hparticleevtchara.cc:1735  hparticleevtchara.cc:1736  hparticleevtchara.cc:1737  hparticleevtchara.cc:1738  hparticleevtchara.cc:1739  hparticleevtchara.cc:1740  hparticleevtchara.cc:1741  hparticleevtchara.cc:1742  hparticleevtchara.cc:1743  hparticleevtchara.cc:1744  hparticleevtchara.cc:1745  hparticleevtchara.cc:1746  hparticleevtchara.cc:1747  hparticleevtchara.cc:1748  hparticleevtchara.cc:1749  hparticleevtchara.cc:1750  hparticleevtchara.cc:1751  hparticleevtchara.cc:1752  hparticleevtchara.cc:1753  hparticleevtchara.cc:1754  hparticleevtchara.cc:1755  hparticleevtchara.cc:1756  hparticleevtchara.cc:1757  hparticleevtchara.cc:1758  hparticleevtchara.cc:1759  hparticleevtchara.cc:1760  hparticleevtchara.cc:1761  hparticleevtchara.cc:1762  hparticleevtchara.cc:1763  hparticleevtchara.cc:1764  hparticleevtchara.cc:1765  hparticleevtchara.cc:1766  hparticleevtchara.cc:1767  hparticleevtchara.cc:1768  hparticleevtchara.cc:1769  hparticleevtchara.cc:1770  hparticleevtchara.cc:1771  hparticleevtchara.cc:1772  hparticleevtchara.cc:1773  hparticleevtchara.cc:1774  hparticleevtchara.cc:1775  hparticleevtchara.cc:1776  hparticleevtchara.cc:1777  hparticleevtchara.cc:1778  hparticleevtchara.cc:1779  hparticleevtchara.cc:1780  hparticleevtchara.cc:1781  hparticleevtchara.cc:1782  hparticleevtchara.cc:1783  hparticleevtchara.cc:1784  hparticleevtchara.cc:1785  hparticleevtchara.cc:1786  hparticleevtchara.cc:1787  hparticleevtchara.cc:1788  hparticleevtchara.cc:1789  hparticleevtchara.cc:1790  hparticleevtchara.cc:1791  hparticleevtchara.cc:1792  hparticleevtchara.cc:1793  hparticleevtchara.cc:1794  hparticleevtchara.cc:1795  hparticleevtchara.cc:1796  hparticleevtchara.cc:1797  hparticleevtchara.cc:1798  hparticleevtchara.cc:1799  hparticleevtchara.cc:1800  hparticleevtchara.cc:1801  hparticleevtchara.cc:1802  hparticleevtchara.cc:1803  hparticleevtchara.cc:1804  hparticleevtchara.cc:1805  hparticleevtchara.cc:1806  hparticleevtchara.cc:1807  hparticleevtchara.cc:1808  hparticleevtchara.cc:1809  hparticleevtchara.cc:1810  hparticleevtchara.cc:1811  hparticleevtchara.cc:1812  hparticleevtchara.cc:1813  hparticleevtchara.cc:1814  hparticleevtchara.cc:1815  hparticleevtchara.cc:1816  hparticleevtchara.cc:1817  hparticleevtchara.cc:1818  hparticleevtchara.cc:1819  hparticleevtchara.cc:1820  hparticleevtchara.cc:1821  hparticleevtchara.cc:1822  hparticleevtchara.cc:1823  hparticleevtchara.cc:1824  hparticleevtchara.cc:1825  hparticleevtchara.cc:1826  hparticleevtchara.cc:1827  hparticleevtchara.cc:1828  hparticleevtchara.cc:1829  hparticleevtchara.cc:1830  hparticleevtchara.cc:1831  hparticleevtchara.cc:1832  hparticleevtchara.cc:1833  hparticleevtchara.cc:1834  hparticleevtchara.cc:1835  hparticleevtchara.cc:1836  hparticleevtchara.cc:1837  hparticleevtchara.cc:1838  hparticleevtchara.cc:1839  hparticleevtchara.cc:1840  hparticleevtchara.cc:1841  hparticleevtchara.cc:1842  hparticleevtchara.cc:1843  hparticleevtchara.cc:1844  hparticleevtchara.cc:1845  hparticleevtchara.cc:1846  hparticleevtchara.cc:1847  hparticleevtchara.cc:1848  hparticleevtchara.cc:1849  hparticleevtchara.cc:1850  hparticleevtchara.cc:1851  hparticleevtchara.cc:1852  hparticleevtchara.cc:1853  hparticleevtchara.cc:1854  hparticleevtchara.cc:1855  hparticleevtchara.cc:1856  hparticleevtchara.cc:1857  hparticleevtchara.cc:1858  hparticleevtchara.cc:1859  hparticleevtchara.cc:1860  hparticleevtchara.cc:1861  hparticleevtchara.cc:1862  hparticleevtchara.cc:1863  hparticleevtchara.cc:1864  hparticleevtchara.cc:1865  hparticleevtchara.cc:1866  hparticleevtchara.cc:1867  hparticleevtchara.cc:1868  hparticleevtchara.cc:1869  hparticleevtchara.cc:1870  hparticleevtchara.cc:1871  hparticleevtchara.cc:1872  hparticleevtchara.cc:1873  hparticleevtchara.cc:1874  hparticleevtchara.cc:1875  hparticleevtchara.cc:1876  hparticleevtchara.cc:1877  hparticleevtchara.cc:1878  hparticleevtchara.cc:1879  hparticleevtchara.cc:1880  hparticleevtchara.cc:1881  hparticleevtchara.cc:1882  hparticleevtchara.cc:1883  hparticleevtchara.cc:1884  hparticleevtchara.cc:1885  hparticleevtchara.cc:1886  hparticleevtchara.cc:1887  hparticleevtchara.cc:1888  hparticleevtchara.cc:1889  hparticleevtchara.cc:1890  hparticleevtchara.cc:1891  hparticleevtchara.cc:1892  hparticleevtchara.cc:1893  hparticleevtchara.cc:1894  hparticleevtchara.cc:1895  hparticleevtchara.cc:1896  hparticleevtchara.cc:1897  hparticleevtchara.cc:1898  hparticleevtchara.cc:1899  hparticleevtchara.cc:1900  hparticleevtchara.cc:1901  hparticleevtchara.cc:1902  hparticleevtchara.cc:1903  hparticleevtchara.cc:1904  hparticleevtchara.cc:1905  hparticleevtchara.cc:1906  hparticleevtchara.cc:1907  hparticleevtchara.cc:1908  hparticleevtchara.cc:1909  hparticleevtchara.cc:1910