#include "hparticlevertexfind.h"
#include "hcategory.h"
#include "hmdcgeompar.h"
#include "hades.h"
#include "htool.h"
#include "hevent.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hgeomvector.h"
#include "hparticlecand.h"
#include "hgeomvolume.h"
#include "hrecevent.h"
#include "hpartialevent.h"
#include "hcategorymanager.h"
#include "hparticletool.h"
#include "hparticledef.h"
#include "TMath.h"
#include <vector>
Bool_t HParticleVertexFind::doSkipFakes = kTRUE;
HParticleVertexFind::HParticleVertexFind(const Text_t name[],const Text_t title[], Bool_t tukey) :
HReconstructor(name,title),fPos("HGeomVector",300),
fAlpha("HGeomVector",300)
{
initVars();
useTukeyWeights(tukey);
}
HParticleVertexFind::~HParticleVertexFind(void)
{
initVars();
}
void HParticleVertexFind::initVars(void)
{
fInput = 0;
fGeometry = 0;
fMaxIterations = 100;
fTukeyConst = 6.0;
fEpsilon = .3;
fUsingTukey = kTRUE;
fmomChi2Cut = 100;
fseg0Chi2Cut = 6;
fcallExecuteManual = kFALSE;
setCut(-120,20,15);
setMinReqTracks(10);
setMinWindow(2);
fProgressiveTukey = kFALSE;
}
Bool_t HParticleVertexFind::init(void)
{
HRuntimeDb *rtdb = gHades->getRuntimeDb();
HRecEvent *ev = dynamic_cast<HRecEvent *>(gHades->getCurrentEvent());
if(!ev) {return kFALSE;}
fInput = gHades->getCurrentEvent()->getCategory(catParticleCand);
if(!fInput) { Warning("init()","No catParticleCand category in input!");}
if(fInput){
fGeometry = (HMdcGeomPar *) rtdb->getContainer("MdcGeomPar");
fSpecGeometry = (HSpecGeomPar *)rtdb->getContainer("SpecGeomPar");
}
return kTRUE;
}
Bool_t HParticleVertexFind::finalize(void)
{
return kTRUE;
}
Bool_t HParticleVertexFind::pointsToTarget(const HGeomVector &r,HGeomVector &alpha,
Int_t sector,Int_t module, Double_t locminZ,Double_t locmaxZ)
{
Double_t bx = alpha.getX() / alpha.getZ();
Double_t by = alpha.getY() / alpha.getZ();
Bool_t res = kTRUE;
HGeomVector rmin;
rmin.setZ(r.getZ() - (r.getX() * bx + r.getY() * by) / (bx * bx + by * by));
rmin.setX(r.getX() + bx * (rmin.getZ() - r.getZ()));
rmin.setY(r.getY() + by * (rmin.getZ() - r.getZ()));
Double_t rhomin = TMath::Sqrt(rmin.getX() * rmin.getX() +
rmin.getY() * rmin.getY());
if(rmin.getZ() < locmaxZ && rmin.getZ() > locminZ && rhomin < fmaxR) {res = kTRUE;}
else {res = kFALSE;}
return res;
}
void HParticleVertexFind::transform(HParticleCand *hit,
HGeomVector &r,HGeomVector &alpha)
{
Float_t phi = HParticleTool::phiLabToPhiSecDeg(hit->getPhi())*TMath::DegToRad();
Float_t theta = hit->getTheta() * TMath::DegToRad();
Double_t pi2 = TMath::Pi() / 2.;
r.setZ(hit->getZ());
r.setX(hit->getR() * TMath::Cos(phi + pi2));
r.setY(hit->getR() * TMath::Sin(phi + pi2));
alpha.setZ(TMath::Cos(theta));
alpha.setY(TMath::Sin(theta) * TMath::Sin(phi));
alpha.setX(TMath::Sin(theta) * TMath::Cos(phi));
}
Bool_t HParticleVertexFind::readInput(HGeomVector &estimate)
{
HGeomVector *r,*alpha,rLocal,alphaLocal;
HParticleCand *cand = 0;
Int_t count = 0;
fCands .clear();
fweights.clear();
if(fInput)
{
HVertex& vertexclust = gHades->getCurrentEvent()->getHeader()->getVertexCluster();
Double_t locmaxZ = fmaxZ;
Double_t locminZ = fminZ;
Double_t xClust = 0.;
Double_t yClust = 0.;
if(vertexclust.getZ() != -1000){
xClust = vertexclust.getX();
yClust = vertexclust.getY();
}
fFitter.reset();
Int_t n = fInput->getEntries();
vector <HParticleCand*> usedCand;
vector <HParticleCand*> usedCandFinal;
for(Int_t i = 0; i < n; i ++)
{
cand = HCategoryManager::getObject(cand,fInput,i);
if( cand->isFakeRejected()) continue;
if(!cand->isFlagBit(kIsUsed)) continue;
if(cand->getZ() < locmaxZ && cand->getZ() > locminZ && cand->getR() < fmaxR) {
usedCand.push_back(cand);
}
}
if (usedCand.size() > 10) {
vector <HParticleCand*> usedCandTmp;
vector <HParticleCand*> usedCandTmp2;
vector<Double_t> values;
Double_t mean = 0;
for(UInt_t i = 0; i < usedCand.size() ; i ++){
cand = usedCand[i];
if(cand->getChi2() < getMomChi2Cut() &&
cand->getInnerSegmentChi2() < getSeg0Chi2Cut() &&
cand->getBeta() > 0 && cand->getBeta() < 1.2
) {
usedCandFinal.push_back(cand);
usedCandTmp2.push_back(cand);
values.push_back(cand->getZprime(xClust,yClust));
}
}
mean = TMath::Mean(values.size(),values.data());
if(usedCandFinal.size() > 0)
{
Double_t accepted = usedCandFinal.size();
Double_t window = 40;
Int_t maxIteration = 20;
Double_t fac = 0.8;
Int_t it = 0;
while (accepted >= fminReqTrack && window >= fminWindow && it < maxIteration){
it++;
usedCandTmp.clear();
accepted = 0;
values.clear();
for(UInt_t i = 0; i < usedCandFinal.size() ; i ++){
cand = usedCandFinal[i];
Double_t zprime = cand->getZprime(xClust,yClust) ;
if( TMath::Abs(zprime - mean) < window){
values.push_back(zprime);
usedCandTmp.push_back(cand);
}
}
accepted = values.size();
if(accepted >= fminReqTrack) {
usedCandTmp2.clear();
for(UInt_t i = 0; i < usedCandTmp.size() ; i ++){
usedCandTmp2.push_back(usedCandTmp[i]);
}
mean = TMath::Mean(values.size(),values.data());
window *= fac;
}
}
}
usedCandFinal.clear();
for(UInt_t i = 0; i < usedCandTmp2.size() ; i ++){
usedCandFinal.push_back(usedCandTmp2[i]);
}
} else {
for(UInt_t i = 0; i < usedCand.size() ; i ++){
usedCandFinal.push_back(usedCand[i]);
}
}
for(UInt_t i = 0; i < usedCandFinal.size(); i ++)
{
cand = usedCandFinal[i] ;
Int_t s = cand->getSector();
HGeomTransform &trans = fSpecGeometry->getSector(s)->getTransform();
transform(cand,rLocal,alphaLocal);
r = new(fPos [count]) HGeomVector(trans.transFrom(rLocal));
alpha= new(fAlpha[count]) HGeomVector(trans.getRotMatrix() * alphaLocal);
if(pointsToTarget(*r,*alpha,s,0,locminZ,locmaxZ))
{
fFitter.addLine(*r,*alpha);
count ++;
fCands.push_back(cand);
fweights.push_back(1.);
}
}
}
if(count > 1){
fFitter.getVertex(estimate);
} else {
estimate.setXYZ(-1000,-1000,-1000);
return kFALSE;
}
return kTRUE;
}
Int_t HParticleVertexFind::execute(void)
{
if (!fcallExecuteManual) return doFit();
return 0;
}
Int_t HParticleVertexFind::doFit()
{
HGeomVector *r,*alpha;
HGeomVector oldVertex;
HVertex &event_vertex = gHades->getCurrentEvent()->getHeader()->getVertexReco();
HGeomVector &vertex = event_vertex.getPos();
Int_t count = 0,iteration = 0;
Double_t weight,residual2,temp;
readInput(vertex);
if(fUsingTukey)
{
count = fPos.GetEntriesFast();
Double_t locTukeyConst = fTukeyConst;
if(fProgressiveTukey){
Double_t minTuk = 1.0;
Double_t maxTuk = fTukeyConst;
Int_t minMult = 10;
Int_t maxMult = 30;
if(count >= minMult && count < maxMult ){
locTukeyConst = maxTuk - ((maxTuk-minTuk)/(maxMult-minMult)) * (count-maxMult);
} else if (count < minMult) {
locTukeyConst = maxTuk;
} else if (count >= maxMult) {
locTukeyConst = minTuk;
}
}
if(count > 1 && (vertex.Z()!=-1000. && vertex.X()!=-1000. && vertex.Y()!=-1000.))
{
Float_t sumOfResiduals = 0;
Float_t sumOfWeights = 0;
for (Int_t i = 0; i < count; i ++) {
r = (HGeomVector *)fPos.UncheckedAt(i);
alpha = (HGeomVector *)fAlpha.UncheckedAt(i);
temp = ((r->getY() - vertex.getY()) * alpha->getZ() -
(r->getZ() - vertex.getZ()) * alpha->getY());
residual2 = temp * temp;
temp = ((r->getZ() - vertex.getZ()) * alpha->getX() -
(r->getX() - vertex.getX()) * alpha->getZ());
residual2 += temp * temp;
temp = ((r->getX() - vertex.getX()) * alpha->getY() -
(r->getY() - vertex.getY()) * alpha->getX());
residual2 += temp * temp;
sumOfResiduals += residual2;
}
Float_t width = locTukeyConst * sqrt(sumOfResiduals);
iteration = 0;
do {
sumOfResiduals = 0;
sumOfWeights = 0;
oldVertex = vertex;
iteration ++;
fFitter.reset();
for (Int_t i = 0; i < count; i ++)
{
r = (HGeomVector *)fPos.UncheckedAt(i);
alpha = (HGeomVector *)fAlpha.UncheckedAt(i);
temp = ((r->getY() - oldVertex.getY()) * alpha->getZ() -
(r->getZ() - oldVertex.getZ()) * alpha->getY());
residual2 = temp * temp;
temp = ((r->getZ() - oldVertex.getZ()) * alpha->getX() -
(r->getX() - oldVertex.getX()) * alpha->getZ());
residual2 += temp * temp;
temp = ((r->getX() - oldVertex.getX()) * alpha->getY() -
(r->getY() - oldVertex.getY()) * alpha->getX());
residual2 += temp * temp;
temp = sqrt(residual2);
weight = (temp < width) ? (1. - temp / width * temp / width) * (1. - temp/width * temp/width) : 0.0;
fweights[i]=weight;
sumOfResiduals += weight*residual2;
sumOfWeights += weight;
fFitter.addLine(*r,*alpha,weight);
}
width = locTukeyConst * sqrt(sumOfResiduals / sumOfWeights);
fFitter.getVertex(vertex);
} while(!hasConverged(vertex,oldVertex) && (iteration < fMaxIterations));
if(iteration < fMaxIterations){
event_vertex.setIterations(iteration);
event_vertex.setChi2(sumOfResiduals / sumOfWeights);
event_vertex.setSumOfWeights(sumOfWeights);
} else {
event_vertex.setIterations(-2);
event_vertex.setChi2(-1);
event_vertex.setSumOfWeights(-1);
}
} else {
event_vertex.setIterations(-1);
event_vertex.setChi2(-1);
event_vertex.setSumOfWeights(-1);
}
} else {
event_vertex.setIterations(1);
event_vertex.setChi2(-1);
event_vertex.setSumOfWeights(-1);
}
for (UInt_t i = 0; i < fCands.size(); i ++){
if(fweights[i]>0) fCands[i]->setUsedVertex();
}
fPos.Clear();
fAlpha.Clear();
return 0;
}
Bool_t HParticleVertexFind::hasConverged(HGeomVector &v,HGeomVector &oldV) {
Bool_t r =((v - oldV).length() < fEpsilon) ? kTRUE:kFALSE;
return r;
}
ClassImp(HParticleVertexFind)
hparticlevertexfind.cc:10 hparticlevertexfind.cc:11 hparticlevertexfind.cc:12 hparticlevertexfind.cc:13 hparticlevertexfind.cc:14 hparticlevertexfind.cc:15 hparticlevertexfind.cc:16 hparticlevertexfind.cc:17 hparticlevertexfind.cc:18 hparticlevertexfind.cc:19 hparticlevertexfind.cc:20 hparticlevertexfind.cc:21 hparticlevertexfind.cc:22 hparticlevertexfind.cc:23 hparticlevertexfind.cc:24 hparticlevertexfind.cc:25 hparticlevertexfind.cc:26 hparticlevertexfind.cc:27 hparticlevertexfind.cc:28 hparticlevertexfind.cc:29 hparticlevertexfind.cc:30 hparticlevertexfind.cc:31 hparticlevertexfind.cc:32 hparticlevertexfind.cc:33 hparticlevertexfind.cc:34 hparticlevertexfind.cc:35 hparticlevertexfind.cc:36 hparticlevertexfind.cc:37 hparticlevertexfind.cc:38 hparticlevertexfind.cc:39 hparticlevertexfind.cc:40 hparticlevertexfind.cc:41 hparticlevertexfind.cc:42 hparticlevertexfind.cc:43 hparticlevertexfind.cc:44 hparticlevertexfind.cc:45 hparticlevertexfind.cc:46 hparticlevertexfind.cc:47 hparticlevertexfind.cc:48 hparticlevertexfind.cc:49 hparticlevertexfind.cc:50 hparticlevertexfind.cc:51 hparticlevertexfind.cc:52 hparticlevertexfind.cc:53 hparticlevertexfind.cc:54 hparticlevertexfind.cc:55 hparticlevertexfind.cc:56 hparticlevertexfind.cc:57 hparticlevertexfind.cc:58 hparticlevertexfind.cc:59 hparticlevertexfind.cc:60 hparticlevertexfind.cc:61 hparticlevertexfind.cc:62 hparticlevertexfind.cc:63 hparticlevertexfind.cc:64 hparticlevertexfind.cc:65 hparticlevertexfind.cc:66 hparticlevertexfind.cc:67 hparticlevertexfind.cc:68 hparticlevertexfind.cc:69 hparticlevertexfind.cc:70 hparticlevertexfind.cc:71 hparticlevertexfind.cc:72 hparticlevertexfind.cc:73 hparticlevertexfind.cc:74 hparticlevertexfind.cc:75 hparticlevertexfind.cc:76 hparticlevertexfind.cc:77 hparticlevertexfind.cc:78 hparticlevertexfind.cc:79 hparticlevertexfind.cc:80 hparticlevertexfind.cc:81 hparticlevertexfind.cc:82 hparticlevertexfind.cc:83 hparticlevertexfind.cc:84 hparticlevertexfind.cc:85 hparticlevertexfind.cc:86 hparticlevertexfind.cc:87 hparticlevertexfind.cc:88 hparticlevertexfind.cc:89 hparticlevertexfind.cc:90 hparticlevertexfind.cc:91 hparticlevertexfind.cc:92 hparticlevertexfind.cc:93 hparticlevertexfind.cc:94 hparticlevertexfind.cc:95 hparticlevertexfind.cc:96 hparticlevertexfind.cc:97 hparticlevertexfind.cc:98 hparticlevertexfind.cc:99 hparticlevertexfind.cc:100 hparticlevertexfind.cc:101 hparticlevertexfind.cc:102 hparticlevertexfind.cc:103 hparticlevertexfind.cc:104 hparticlevertexfind.cc:105 hparticlevertexfind.cc:106 hparticlevertexfind.cc:107 hparticlevertexfind.cc:108 hparticlevertexfind.cc:109 hparticlevertexfind.cc:110 hparticlevertexfind.cc:111 hparticlevertexfind.cc:112 hparticlevertexfind.cc:113 hparticlevertexfind.cc:114 hparticlevertexfind.cc:115 hparticlevertexfind.cc:116 hparticlevertexfind.cc:117 hparticlevertexfind.cc:118 hparticlevertexfind.cc:119 hparticlevertexfind.cc:120 hparticlevertexfind.cc:121 hparticlevertexfind.cc:122 hparticlevertexfind.cc:123 hparticlevertexfind.cc:124 hparticlevertexfind.cc:125 hparticlevertexfind.cc:126 hparticlevertexfind.cc:127 hparticlevertexfind.cc:128 hparticlevertexfind.cc:129 hparticlevertexfind.cc:130 hparticlevertexfind.cc:131 hparticlevertexfind.cc:132 hparticlevertexfind.cc:133 hparticlevertexfind.cc:134 hparticlevertexfind.cc:135 hparticlevertexfind.cc:136 hparticlevertexfind.cc:137 hparticlevertexfind.cc:138 hparticlevertexfind.cc:139 hparticlevertexfind.cc:140 hparticlevertexfind.cc:141 hparticlevertexfind.cc:142 hparticlevertexfind.cc:143 hparticlevertexfind.cc:144 hparticlevertexfind.cc:145 hparticlevertexfind.cc:146 hparticlevertexfind.cc:147 hparticlevertexfind.cc:148 hparticlevertexfind.cc:149 hparticlevertexfind.cc:150 hparticlevertexfind.cc:151 hparticlevertexfind.cc:152 hparticlevertexfind.cc:153 hparticlevertexfind.cc:154 hparticlevertexfind.cc:155 hparticlevertexfind.cc:156 hparticlevertexfind.cc:157 hparticlevertexfind.cc:158 hparticlevertexfind.cc:159 hparticlevertexfind.cc:160 hparticlevertexfind.cc:161 hparticlevertexfind.cc:162 hparticlevertexfind.cc:163 hparticlevertexfind.cc:164 hparticlevertexfind.cc:165 hparticlevertexfind.cc:166 hparticlevertexfind.cc:167 hparticlevertexfind.cc:168 hparticlevertexfind.cc:169 hparticlevertexfind.cc:170 hparticlevertexfind.cc:171 hparticlevertexfind.cc:172 hparticlevertexfind.cc:173 hparticlevertexfind.cc:174 hparticlevertexfind.cc:175 hparticlevertexfind.cc:176 hparticlevertexfind.cc:177 hparticlevertexfind.cc:178 hparticlevertexfind.cc:179 hparticlevertexfind.cc:180 hparticlevertexfind.cc:181 hparticlevertexfind.cc:182 hparticlevertexfind.cc:183 hparticlevertexfind.cc:184 hparticlevertexfind.cc:185 hparticlevertexfind.cc:186 hparticlevertexfind.cc:187 hparticlevertexfind.cc:188 hparticlevertexfind.cc:189 hparticlevertexfind.cc:190 hparticlevertexfind.cc:191 hparticlevertexfind.cc:192 hparticlevertexfind.cc:193 hparticlevertexfind.cc:194 hparticlevertexfind.cc:195 hparticlevertexfind.cc:196 hparticlevertexfind.cc:197 hparticlevertexfind.cc:198 hparticlevertexfind.cc:199 hparticlevertexfind.cc:200 hparticlevertexfind.cc:201 hparticlevertexfind.cc:202 hparticlevertexfind.cc:203 hparticlevertexfind.cc:204 hparticlevertexfind.cc:205 hparticlevertexfind.cc:206 hparticlevertexfind.cc:207 hparticlevertexfind.cc:208 hparticlevertexfind.cc:209 hparticlevertexfind.cc:210 hparticlevertexfind.cc:211 hparticlevertexfind.cc:212 hparticlevertexfind.cc:213 hparticlevertexfind.cc:214 hparticlevertexfind.cc:215 hparticlevertexfind.cc:216 hparticlevertexfind.cc:217 hparticlevertexfind.cc:218 hparticlevertexfind.cc:219 hparticlevertexfind.cc:220 hparticlevertexfind.cc:221 hparticlevertexfind.cc:222 hparticlevertexfind.cc:223 hparticlevertexfind.cc:224 hparticlevertexfind.cc:225 hparticlevertexfind.cc:226 hparticlevertexfind.cc:227 hparticlevertexfind.cc:228 hparticlevertexfind.cc:229 hparticlevertexfind.cc:230 hparticlevertexfind.cc:231 hparticlevertexfind.cc:232 hparticlevertexfind.cc:233 hparticlevertexfind.cc:234 hparticlevertexfind.cc:235 hparticlevertexfind.cc:236 hparticlevertexfind.cc:237 hparticlevertexfind.cc:238 hparticlevertexfind.cc:239 hparticlevertexfind.cc:240 hparticlevertexfind.cc:241 hparticlevertexfind.cc:242 hparticlevertexfind.cc:243 hparticlevertexfind.cc:244 hparticlevertexfind.cc:245 hparticlevertexfind.cc:246 hparticlevertexfind.cc:247 hparticlevertexfind.cc:248 hparticlevertexfind.cc:249 hparticlevertexfind.cc:250 hparticlevertexfind.cc:251 hparticlevertexfind.cc:252 hparticlevertexfind.cc:253 hparticlevertexfind.cc:254 hparticlevertexfind.cc:255 hparticlevertexfind.cc:256 hparticlevertexfind.cc:257 hparticlevertexfind.cc:258 hparticlevertexfind.cc:259 hparticlevertexfind.cc:260 hparticlevertexfind.cc:261 hparticlevertexfind.cc:262 hparticlevertexfind.cc:263 hparticlevertexfind.cc:264 hparticlevertexfind.cc:265 hparticlevertexfind.cc:266 hparticlevertexfind.cc:267 hparticlevertexfind.cc:268 hparticlevertexfind.cc:269 hparticlevertexfind.cc:270 hparticlevertexfind.cc:271 hparticlevertexfind.cc:272 hparticlevertexfind.cc:273 hparticlevertexfind.cc:274 hparticlevertexfind.cc:275 hparticlevertexfind.cc:276 hparticlevertexfind.cc:277 hparticlevertexfind.cc:278 hparticlevertexfind.cc:279 hparticlevertexfind.cc:280 hparticlevertexfind.cc:281 hparticlevertexfind.cc:282 hparticlevertexfind.cc:283 hparticlevertexfind.cc:284 hparticlevertexfind.cc:285 hparticlevertexfind.cc:286 hparticlevertexfind.cc:287 hparticlevertexfind.cc:288 hparticlevertexfind.cc:289 hparticlevertexfind.cc:290 hparticlevertexfind.cc:291 hparticlevertexfind.cc:292 hparticlevertexfind.cc:293 hparticlevertexfind.cc:294 hparticlevertexfind.cc:295 hparticlevertexfind.cc:296 hparticlevertexfind.cc:297 hparticlevertexfind.cc:298 hparticlevertexfind.cc:299 hparticlevertexfind.cc:300 hparticlevertexfind.cc:301 hparticlevertexfind.cc:302 hparticlevertexfind.cc:303 hparticlevertexfind.cc:304 hparticlevertexfind.cc:305 hparticlevertexfind.cc:306 hparticlevertexfind.cc:307 hparticlevertexfind.cc:308 hparticlevertexfind.cc:309 hparticlevertexfind.cc:310 hparticlevertexfind.cc:311 hparticlevertexfind.cc:312 hparticlevertexfind.cc:313 hparticlevertexfind.cc:314 hparticlevertexfind.cc:315 hparticlevertexfind.cc:316 hparticlevertexfind.cc:317 hparticlevertexfind.cc:318 hparticlevertexfind.cc:319 hparticlevertexfind.cc:320 hparticlevertexfind.cc:321 hparticlevertexfind.cc:322 hparticlevertexfind.cc:323 hparticlevertexfind.cc:324 hparticlevertexfind.cc:325 hparticlevertexfind.cc:326 hparticlevertexfind.cc:327 hparticlevertexfind.cc:328 hparticlevertexfind.cc:329 hparticlevertexfind.cc:330 hparticlevertexfind.cc:331 hparticlevertexfind.cc:332 hparticlevertexfind.cc:333 hparticlevertexfind.cc:334 hparticlevertexfind.cc:335 hparticlevertexfind.cc:336 hparticlevertexfind.cc:337 hparticlevertexfind.cc:338 hparticlevertexfind.cc:339 hparticlevertexfind.cc:340 hparticlevertexfind.cc:341 hparticlevertexfind.cc:342 hparticlevertexfind.cc:343 hparticlevertexfind.cc:344 hparticlevertexfind.cc:345 hparticlevertexfind.cc:346 hparticlevertexfind.cc:347 hparticlevertexfind.cc:348 hparticlevertexfind.cc:349 hparticlevertexfind.cc:350 hparticlevertexfind.cc:351 hparticlevertexfind.cc:352 hparticlevertexfind.cc:353 hparticlevertexfind.cc:354 hparticlevertexfind.cc:355 hparticlevertexfind.cc:356 hparticlevertexfind.cc:357 hparticlevertexfind.cc:358 hparticlevertexfind.cc:359 hparticlevertexfind.cc:360 hparticlevertexfind.cc:361 hparticlevertexfind.cc:362 hparticlevertexfind.cc:363 hparticlevertexfind.cc:364 hparticlevertexfind.cc:365 hparticlevertexfind.cc:366 hparticlevertexfind.cc:367 hparticlevertexfind.cc:368 hparticlevertexfind.cc:369 hparticlevertexfind.cc:370 hparticlevertexfind.cc:371 hparticlevertexfind.cc:372 hparticlevertexfind.cc:373 hparticlevertexfind.cc:374 hparticlevertexfind.cc:375 hparticlevertexfind.cc:376 hparticlevertexfind.cc:377 hparticlevertexfind.cc:378 hparticlevertexfind.cc:379 hparticlevertexfind.cc:380 hparticlevertexfind.cc:381 hparticlevertexfind.cc:382 hparticlevertexfind.cc:383 hparticlevertexfind.cc:384 hparticlevertexfind.cc:385 hparticlevertexfind.cc:386 hparticlevertexfind.cc:387 hparticlevertexfind.cc:388 hparticlevertexfind.cc:389 hparticlevertexfind.cc:390 hparticlevertexfind.cc:391 hparticlevertexfind.cc:392 hparticlevertexfind.cc:393 hparticlevertexfind.cc:394 hparticlevertexfind.cc:395 hparticlevertexfind.cc:396 hparticlevertexfind.cc:397 hparticlevertexfind.cc:398 hparticlevertexfind.cc:399 hparticlevertexfind.cc:400 hparticlevertexfind.cc:401 hparticlevertexfind.cc:402 hparticlevertexfind.cc:403 hparticlevertexfind.cc:404 hparticlevertexfind.cc:405 hparticlevertexfind.cc:406 hparticlevertexfind.cc:407 hparticlevertexfind.cc:408 hparticlevertexfind.cc:409 hparticlevertexfind.cc:410 hparticlevertexfind.cc:411 hparticlevertexfind.cc:412 hparticlevertexfind.cc:413 hparticlevertexfind.cc:414 hparticlevertexfind.cc:415 hparticlevertexfind.cc:416 hparticlevertexfind.cc:417 hparticlevertexfind.cc:418 hparticlevertexfind.cc:419 hparticlevertexfind.cc:420 hparticlevertexfind.cc:421 hparticlevertexfind.cc:422 hparticlevertexfind.cc:423 hparticlevertexfind.cc:424 hparticlevertexfind.cc:425 hparticlevertexfind.cc:426 hparticlevertexfind.cc:427 hparticlevertexfind.cc:428 hparticlevertexfind.cc:429 hparticlevertexfind.cc:430 hparticlevertexfind.cc:431 hparticlevertexfind.cc:432 hparticlevertexfind.cc:433 hparticlevertexfind.cc:434 hparticlevertexfind.cc:435 hparticlevertexfind.cc:436 hparticlevertexfind.cc:437 hparticlevertexfind.cc:438 hparticlevertexfind.cc:439 hparticlevertexfind.cc:440 hparticlevertexfind.cc:441 hparticlevertexfind.cc:442 hparticlevertexfind.cc:443 hparticlevertexfind.cc:444 hparticlevertexfind.cc:445 hparticlevertexfind.cc:446 hparticlevertexfind.cc:447 hparticlevertexfind.cc:448 hparticlevertexfind.cc:449 hparticlevertexfind.cc:450 hparticlevertexfind.cc:451