#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