22 void HMdcCluster::init(Char_t sec,Char_t seg,Float_t x,Float_t y,Float_t sx,Float_t sy) {
66 if(im==0) clusMod1 = cl;
67 else if(im==1) clusMod2 = cl;
103 Int_t shX = iXf - iXFirst;
104 Int_t shY = iYf - iYFirst;
106 Int_t vl1 = shX*nBins;
107 Int_t vl2 = shX*sumWt;
109 meanXX -= shX*(2*meanX + vl1);
111 meanXXWt -= shX*(2*meanXWt + vl2);
114 Int_t vl1 = shY*nBins;
115 Int_t vl2 = shY*sumWt;
117 meanYY -= shY*(2*meanY + vl1);
119 meanYYWt -= shY*(2*meanYWt + vl2);
121 meanYX -= meanX*shY + meanY*shX + shX*shY*nBins;
128 x = x0 + iXFirst*xSt;
129 y = y0 + iYFirst*ySt;
130 }
else if(minWt > 1) {
131 Int_t norm = minWt-1;
132 Float_t rSumWt = 1/Float_t(sumWt-nBins*norm);
134 x = Float_t(meanXWt-meanX*norm)*rSumWt;
135 errX = (meanXXWt-meanXX*norm)*rSumWt - x*x;
136 x = (x + iXFirst)*xSt + x0;
138 y = Float_t(meanYWt-meanY*norm)*rSumWt;
139 errY = (meanYYWt-meanYY*norm)*rSumWt - y*y;
140 y = (y + iYFirst)*ySt + y0;
142 Float_t rSumWt = 1/Float_t(sumWt);
145 errX = meanXXWt*rSumWt - x*x;
146 x = (x + iXFirst)*xSt + x0;
149 errY = meanYYWt*rSumWt - y*y;
150 y = (y + iYFirst)*ySt + y0;
185 errX = TMath::Sqrt(errX + 0.25)*xSt;
186 errY = TMath::Sqrt(errY + 0.25)*ySt;
199 Float_t eXX = (meanXX*nBins - meanX*meanX)*xSt*xSt;
200 Float_t eYX = (meanYX*nBins - meanY*meanX)*xSt*ySt;
201 Float_t eYY = (meanYY*nBins - meanY*meanY)*ySt*ySt;
202 Float_t v1 = (eXX+eYY)*0.5;
203 Float_t eYX2 = eYX*eYX;
204 Float_t v2 = TMath::Sqrt(v1*v1 - eXX*eYY + eYX2);
205 Float_t sigma1D = v1 + v2;
206 Float_t sigma2D = v1 - v2;
207 Float_t e1 = sigma1D - eXX;
208 Float_t e2 = sigma1D - eYY;
209 sigma1 = TMath::Sqrt(sigma1D)/nBins;
210 sigma2 = (sigma2D<10e-5) ? 0. : TMath::Sqrt(sigma2D)/nBins;
211 alpha = TMath::ATan2(TMath::Sqrt(eYX2+e1*e1),TMath::Sqrt(eYX2+e2*e2))*TMath::RadToDeg();
212 if(eYX<0.) alpha=180.-alpha;
218 fClus->
setXY(x,errX,y,errY);
228 if(nDrTm>0 && fClus->
getMinCl(0)>0) {
241 fClus->
setShapeM1(clusMod1->sigma1,clusMod1->sigma2,clusMod1->alpha);
246 if(nDrTm>0 && fClus->
getMinCl(1)>0) {
260 fClus->
setShapeM2(clusMod2->sigma1,clusMod2->sigma2,clusMod2->alpha);
267 printf(
"Sector %i Cluster: status=%s, flag=%i,nMergedClus=%i x=%.1f y=%.1f\n",
268 sector+1,status ?
"kTRUE" :
"kFALSE",flag,nMergedClus,x,y);
270 for(Int_t seg=0;seg<2;seg++) {
273 if(listCells == NULL) {
274 printf(
" - - - - - - - lCells%i:\n",seg+1);
276 }
else for(Int_t lay=0; lay<12; lay++) {
277 Int_t mod = seg*2 + lay/6;
279 printf(
"M.%i L.%i %2i cells:",mod+1,layer+1,lCells.
getNCells(lay));
295 numCells1 = lCells1.getNCells();
296 nLayers1 = lCells1.getNLayers();
299 numCells2 = lCells2.getNCells();
300 nLayers2 = lCells2.getNLayers();
318 nIdCells = lCells1.nIdentDrTimes(&(cl2.
lCells1));
319 dCells = numCells1 <= cl2.
numCells1 ? numCells1-nIdCells :
322 if(nIdCells < 6 || dCells+2 > nIdCells)
return 0;
325 }
else if(segment == 1) {
326 nIdCells = lCells2.nIdentDrTimes(&(cl2.
lCells2));
327 dCells = numCells2 <= cl2.
numCells2 ? numCells2-nIdCells :
330 if(nIdCells < 6 || dCells+2 > nIdCells)
return 0;
334 Int_t nCells1 = numCells1 + numCells2;
336 nIdCells = lCells1.nIdentDrTimes(&(cl2.
lCells1)) +
337 lCells2.nIdentDrTimes(&(cl2.
lCells2));
338 dCells = nCells1 <= nCells2 ? nCells1-nIdCells : nCells2-nIdCells;
340 if(nIdCells < 6 || dCells+2 > nIdCells)
return 0;
341 dNCells = nCells1 - nCells2;
346 Int_t nDBins = nBins - cl2.
nBins;
347 Int_t dRLevel = (Int_t)(minWt+0.1) - (Int_t)(cl2.
minWt+0.1);
353 if (nDBins>0 && dNCells>0) inclFlag = 3;
354 else if(nDBins<0 && dNCells<0) inclFlag = 2;
355 else if(dRLevel > 0) inclFlag = 3;
356 else if(dRLevel < 0) inclFlag = 2;
357 else if(nDBins > 0) inclFlag = 3;
358 else if(nDBins < 0) inclFlag = 2;
359 else if(dNCells > 0) inclFlag = 3;
360 else if(dNCells < 0) inclFlag = 2;
362 }
else if(dCells==1) {
364 if (nDBins> 2 && dNCells> 4) inclFlag = 3;
365 else if(nDBins<-2 && dNCells<-4) inclFlag = 2;
366 else if(dRLevel > 0) inclFlag = 3;
367 else if(dRLevel < 0) inclFlag = 2;
368 else if(dLayers > 0) inclFlag = 3;
369 else if(dLayers < 0) inclFlag = 2;
370 else if(nDBins > 0) inclFlag = 3;
371 else if(nDBins < 0) inclFlag = 2;
372 else if(dNCells > 0) inclFlag = 3;
373 else if(dNCells < 0) inclFlag = 2;
375 }
else if(dCells==2) {
377 if (nDBins> 2 && dNCells> 6) inclFlag = 3;
378 else if(nDBins<-2 && dNCells<-6) inclFlag = 2;
379 else if(dRLevel > 0) inclFlag = 3;
380 else if(dRLevel < 0) inclFlag = 2;
381 else if(dLayers > 0) inclFlag = 3;
382 else if(dLayers < 0) inclFlag = 2;
383 else if(nDBins > 0) inclFlag = 3;
384 else if(nDBins < 0) inclFlag = 2;
385 else if(dNCells > 0) inclFlag = 3;
386 else if(dNCells < 0) inclFlag = 2;
388 }
else if(dCells==3) {
390 if (nDBins> 2 && dNCells> 7) inclFlag = 3;
391 else if(nDBins<-2 && dNCells<-7) inclFlag = 2;
392 else if(dRLevel > 0) inclFlag = 3;
393 else if(dRLevel < 0) inclFlag = 2;
394 else if(dLayers > 0) inclFlag = 3;
395 else if(dLayers < 0) inclFlag = 2;
396 else if(nDBins > 0) inclFlag = 3;
397 else if(nDBins < 0) inclFlag = 2;
398 else if(dNCells > 0) inclFlag = 3;
399 else if(dNCells < 0) inclFlag = 2;
401 }
else if(dCells==4) {
403 if (nDBins> 2 && dNCells> 8) inclFlag = 3;
404 else if(nDBins<-2 && dNCells<-8) inclFlag = 2;
405 else if(dRLevel > 0) inclFlag = 3;
406 else if(dRLevel < 0) inclFlag = 2;
407 else if(dLayers > 0) inclFlag = 3;
408 else if(dLayers < 0) inclFlag = 2;
409 else if(nDBins > 0) inclFlag = 3;
410 else if(nDBins < 0) inclFlag = 2;
411 else if(dNCells > 0) inclFlag = 3;
412 else if(dNCells < 0) inclFlag = 2;
419 }
else if(inclFlag == 2) {
421 setFakeFlagAndStatus(dCells+1);
422 }
else if(inclFlag == 1) {
425 setFakeFlagAndStatus(dCells+1);
437 if(segment != 1)
return 0;
440 numCells2 = lCells2.getNCells();
441 nLayers2 = lCells2.getNLayers();
450 Int_t nIdCells = lCells2.nIdentDrTimes(&(cl2.
lCells2));
451 Int_t dCells = numCells2 <= cl2.
numCells2 ? numCells2-nIdCells : cl2.
numCells2-nIdCells;
453 if(nIdCells < 6 || dCells+2 > nIdCells)
return 0;
454 Int_t dNCells = numCells2 - cl2.
numCells2;
455 Int_t dLayers = nLayers2 - cl2.
nLayers2;
457 Int_t nDBins = nBins - cl2.
nBins;
458 Int_t dRLevel = (Int_t)(minWt+0.1) - (Int_t)(cl2.
minWt+0.1);
464 if (nDBins>0 && dNCells>0) inclFlag = 3;
465 else if(nDBins<0 && dNCells<0) inclFlag = 2;
466 else if(dRLevel > 0) inclFlag = 3;
467 else if(dRLevel < 0) inclFlag = 2;
468 else if(nDBins > 0) inclFlag = 3;
469 else if(nDBins < 0) inclFlag = 2;
470 else if(dNCells > 0) inclFlag = 3;
471 else if(dNCells < 0) inclFlag = 2;
473 }
else if(dCells==1) {
475 if (nDBins> 2 && dNCells> 4) inclFlag = 3;
476 else if(nDBins<-2 && dNCells<-4) inclFlag = 2;
477 else if(dRLevel > 0) inclFlag = 3;
478 else if(dRLevel < 0) inclFlag = 2;
479 else if(dLayers > 0) inclFlag = 3;
480 else if(dLayers < 0) inclFlag = 2;
481 else if(nDBins > 0) inclFlag = 3;
482 else if(nDBins < 0) inclFlag = 2;
483 else if(dNCells > 0) inclFlag = 3;
484 else if(dNCells < 0) inclFlag = 2;
486 }
else if(dCells==2) {
488 if (nDBins> 2 && dNCells> 6) inclFlag = 3;
489 else if(nDBins<-2 && dNCells<-6) inclFlag = 2;
490 else if(dRLevel > 0) inclFlag = 3;
491 else if(dRLevel < 0) inclFlag = 2;
492 else if(dLayers > 0) inclFlag = 3;
493 else if(dLayers < 0) inclFlag = 2;
494 else if(nDBins > 0) inclFlag = 3;
495 else if(nDBins < 0) inclFlag = 2;
496 else if(dNCells > 0) inclFlag = 3;
497 else if(dNCells < 0) inclFlag = 2;
499 }
else if(dCells==3) {
501 if (nDBins> 2 && dNCells> 7) inclFlag = 3;
502 else if(nDBins<-2 && dNCells<-7) inclFlag = 2;
503 else if(dRLevel > 0) inclFlag = 3;
504 else if(dRLevel < 0) inclFlag = 2;
505 else if(dLayers > 0) inclFlag = 3;
506 else if(dLayers < 0) inclFlag = 2;
507 else if(nDBins > 0) inclFlag = 3;
508 else if(nDBins < 0) inclFlag = 2;
509 else if(dNCells > 0) inclFlag = 3;
510 else if(dNCells < 0) inclFlag = 2;
512 }
else if(dCells==4) {
514 if (nDBins> 2 && dNCells> 8) inclFlag = 3;
515 else if(nDBins<-2 && dNCells<-8) inclFlag = 2;
516 else if(dRLevel > 0) inclFlag = 3;
517 else if(dRLevel < 0) inclFlag = 2;
518 else if(dLayers > 0) inclFlag = 3;
519 else if(dLayers < 0) inclFlag = 2;
520 else if(nDBins > 0) inclFlag = 3;
521 else if(nDBins < 0) inclFlag = 2;
522 else if(dNCells > 0) inclFlag = 3;
523 else if(dNCells < 0) inclFlag = 2;
530 }
else if(inclFlag == 2) {
532 setFakeFlagAndStatus(dCells+1);
533 }
else if(inclFlag == 1) {
536 setFakeFlagAndStatus(dCells+1);
544 while(clusMod1->clusMerg != 0) clusMod1 = clusMod1->
clusMerg;
551 while(clusMod2->clusMerg != 0) clusMod2 = clusMod2->
clusMerg;
556 if(clusMod1!=0 && cls2.
clusMod1!=0 && clusMod1!=cls2.
clusMod1)
return kTRUE;
557 if(clusMod2!=0 && cls2.
clusMod2!=0 && clusMod2!=cls2.
clusMod2)
return kTRUE;
562 return minWt <= lCells1.getNLayers() + 1;
566 return minWt <= lCells2.getNLayers() + 1;
580 if(fake && fakeFlag == 0) {
587 }
else if(!fake && fakeFlag > 0) {
594 if(real && realFlag == 0) {
602 else if(!real && realFlag > 0) {
614 return pMdcClustersArrs;
618 if(pMdcClustersArrs != 0)
delete pMdcClustersArrs;
622 for(Int_t i=0;i<3;i++) {
633 if(
this == pMdcClustersArrs) pMdcClustersArrs = 0;
634 for(Int_t i=0;i<3;i++)
if(clusArr[i]) {
635 delete [] clusArr[i];
641 if(createArray(0,size) == 0)
return 0;
643 if(createArray(1,size) == 0)
return 0;
645 if(createArray(2,size) == 0)
return 0;
652 if(clusArr[ind] != 0) size = arrSize[ind];
661 if(clusArr[indarr]==0 || indClus>=arrSize[indarr] || indClus<0)
return 0;
662 return &(clusArr[indarr][indClus]);
667 for(Int_t iCl=0;iCl<indClus;iCl++)
if(clArr[iCl].getStatus()) {
669 if(TMath::Abs(clArr[iCl].getY()-clArr[indClus].getY()) > dYWind1)
continue;
670 if(TMath::Abs(clArr[iCl].getX()-clArr[indClus].getX()) > dXWind1)
continue;
672 if( inclFlag == 0 || inclFlag == 2 )
continue;
673 if( inclFlag == 1 ) testCluster(indArr,indClus);
681 for(Int_t iCl=firstClst;iCl<indClus;iCl++)
if(clArr[iCl].getStatus()) {
683 if(TMath::Abs(clArr[iCl].getY()-clArr[indClus].getY()) > dYWind2)
continue;
684 if(TMath::Abs(clArr[iCl].getX()-clArr[indClus].getX()) > dXWind2)
continue;
686 if( inclFlag == 0 || inclFlag == 2 )
continue;
687 if( inclFlag == 1 )
return testMdc34Cluster(indArr,indClus,firstClst);
static HMdcEvntListCells * getExObject(void)
Int_t next(Int_t lay, Int_t prCell) const
Bool_t subFrRClusCounters(Int_t seg, HMdcList12GroupCells &listCells)
Int_t getNCells(Int_t lay, Int_t layEnd=-1) const
void correctContent(Int_t iXf, Int_t iYf)
void setMod2ClusSkipMerg(HMdcCluster *clusM2)
void setXY(Float_t xl, Float_t errx, Float_t yl, Float_t erry)
Int_t getNLayers(void) const
Int_t testForInclude(HMdcCluster &cl2)
void setClusSizeM1(Short_t clSz)
void setModCluster(Int_t im, HMdcCluster *cl)
void setFakeFlag(UChar_t fl)
Int_t getNUniqueAndRWires(Int_t seg, HMdcList12GroupCells &listCells, Int_t &nWInReal) const
void setClFnLevelM2(UChar_t lv)
Bool_t subFrClusCounters(Int_t seg, HMdcList12GroupCells &listCells)
void setNDrTimesM1(Short_t nDrTm)
void setClFnLevelM1(UChar_t lv)
Int_t getMinCl(void) const
void resetFakeFlagSeg1(Bool_t fake, HMdcSecListCells *pListCells)
Bool_t testMdc34Cluster(Int_t indArr, Int_t indClus, Int_t firstClst=0)
void setNMergClustM2(Short_t nmrc)
HMdcList12GroupCells lCells2
void setSumWt(Float_t swt)
Bool_t testNLayersSeg1(void)
Int_t getNUniqueAndRWiresSeg1(HMdcSecListCells *pListCells, Int_t &nRWires)
Int_t getNDrTimes(void) const
Bool_t isModClusNotTheSame(HMdcCluster &cls2)
static HMdcClustersArrs * pMdcClustersArrs
void setNMergClust(Short_t nmrc)
Bool_t addToClusCounters(Int_t seg, HMdcList12GroupCells &listCells)
Int_t testForInc34CFnd(HMdcCluster &cl2)
void setNDrTimesM2(Short_t nDrTm)
static HMdcClustersArrs * getObject(void)
void setMod1ClusSkipMerg(HMdcCluster *clusM1)
void setShapeM1(Float_t s1, Float_t s2, Float_t al)
Int_t getNUniqueWires2(Int_t seg, HMdcList12GroupCells &listCells) const
Int_t createAllArrays(Int_t size=500)
Bool_t addToRClusCounters(Int_t seg, HMdcList12GroupCells &listCells)
static void deleteCont(void)
void testCluster(Int_t indArr, Int_t indClus)
Int_t getNUniqueAndRWires2(Int_t seg, HMdcList12GroupCells &listCells, Int_t &nWInReal) const
virtual Bool_t isGeant(void) const
void setRealLevel(UChar_t rl)
void addClus(HMdcCluster &clst2)
void fillClusModTrackInf(HMdcClusSim *pClusSim, HMdcList12GroupCells *wrLst, Int_t modi)
Int_t getNUniqueWiresSeg1(HMdcSecListCells *pListCells)
HMdcCluster * createArray(Int_t ind, Int_t size)
ClassImp(HMdcCluster) ClassImp(HMdcClustersArrs) void HMdcCluster
Int_t add(HMdcList12GroupCells *lst)
void setFakeFlagAndStatus(UChar_t fl)
void printCellInfo(Int_t cell) const
Int_t getNUniqueWires(Int_t seg, HMdcList12GroupCells &listCells) const
void sumClus(HMdcCluster &clst1, HMdcCluster &clst2)
void setClusSizeM2(Short_t clSz)
HMdcCluster * getCluster(Int_t indarr, Int_t indClus)
void fillClus(HMdcClus *clus, Int_t nLst, Bool_t fillTrList)
void fillClusTrackInf(HMdcClusSim *pClusSim)
Bool_t testNLayersSeg2(void)
HMdcList12GroupCells lCells1
void setShapeM2(Float_t s1, Float_t s2, Float_t al)
void setNMergClustM1(Short_t nmrc)
void resetRealFlagSeg1(Bool_t real, HMdcSecListCells *pListCells)
static HMdcTrackInfSim * getMdcTrackInfSim(void)