Int_t AliHMPIDReconHTA::fgDB[500][150]={{75000*0}};
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AliHMPIDReconHTA::AliHMPIDReconHTA():
- TTask("RichRec","RichPat"),
+ TNamed("RichRec","RichPat"),
fMipX(-999),
fMipY(-999),
fMipQ(-999),
//..
//Delete variables
//..
- if(fXClu) delete fXClu;
- if(fYClu) delete fYClu;
- if(fPhiPhot) delete fPhiPhot;
- if(fThetaPhot) delete fThetaPhot;
- if(fClCk) delete fClCk;
+ if(fXClu) delete [] fXClu;
+ if(fYClu) delete [] fYClu;
+ if(fPhiPhot) delete [] fPhiPhot;
+ if(fThetaPhot) delete [] fThetaPhot;
+ if(fClCk) delete [] fClCk;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::CkovHiddenTrk(AliESDtrack *pTrk,TClonesArray *pCluLst,Int_t index, Double_t nmean)
// thetaCRec - estimate of ThetaCerenkov
// status - TRUE if a good solution is found, FALSE if not
- Double_t *phiphot = new Double_t[fNClu];
- Double_t *dist = new Double_t[fNClu];
- Int_t *indphi = new Int_t[fNClu];
+ Double_t phiphot[1000];
+ Double_t dist[1000];
+ Int_t indphi[1000];
Bool_t status;
+ if(fNClu>1000) return kFALSE; // too many clusters....
+
// Sort in phi angle...
for(Int_t i=0;i<fNClu;i++) {
if(!fClCk[i]) {
dMean2+=dist[indphi[i]]*dist[indphi[i]];
np++;
}
-
- dMean /=(Double_t)np;
- dMean2 /=(Double_t)np;
+
+ if(np>0){
+ dMean /=(Double_t)np;
+ dMean2 /=(Double_t)np;}
Double_t rms = TMath::Sqrt(dMean2 - dMean*dMean);
for(Int_t i=0;i<fNClu;i++) {
npeff++;
}
- delete [] phiphot;
- delete [] dist;
- delete [] indphi;
-
if(npeff<3) {
AliDebug(1,Form("FindShape failed: no enough photons = %i...",npeff));
delete [] phiphotP;
// get a logger instance
// what for??
- AliLog::GetRootLogger();
+ //AliLog::GetRootLogger();
if(nClAcc!=nClAccStep1) pRecHTA->SetFitStatus(kTRUE); else pRecHTA->SetFitStatus(kFALSE);
Double_t xmip = xrad + sizeCh*TMath::Tan(thTrk)*TMath::Cos(phTrk);
Double_t ymip = yrad + sizeCh*TMath::Tan(thTrk)*TMath::Sin(phTrk);
- Double_t dist1,dist2;
+ Double_t dist2;
//
//first point at phi=0
//
TVector2 pos;
pos=rec.TracePhot(thetaC,0);
- if(pos.X()==-999) {
+ /*if(pos.X()==-999) {
dist1 = 0; //open ring...only the distance btw mip and point at 180 will be considered
} else {
x[0] = pos.X(); y[0] = pos.Y();
dist1 = TMath::Sqrt((x[0]-xmip)*(x[0]-xmip)+(y[0]-ymip)*(y[0]-ymip));
- }
+ }*/
+
+ if(pos.X()!=-999) {x[0] = pos.X(); y[0] = pos.Y();}
+
//
//second point at phi=180
//
x1=x2=-b/(2*a);
return 1;
}
+ if(a==0) {
+ x1 = -c/b;
+ return 1;
+ }
// delta>0
x1 = (-b+TMath::Sqrt(delta))/(2*a);
x2 = (-b-TMath::Sqrt(delta))/(2*a);
//_____calc. met min quadr using effective distance _________________________________________________
- coeff2ord = xy-xrotsumm*yrotsumm/np;
- coeff1ord = yrotsumm*yrotsumm/np - xrotsumm*xrotsumm/np - yy + xx;
+ if(np>0){
+ coeff2ord = xy-xrotsumm*yrotsumm/np;
+ coeff1ord = yrotsumm*yrotsumm/np - xrotsumm*xrotsumm/np - yy + xx;
+ }
coeff0ord = -coeff2ord;
AliDebug(1,Form(" a = %f b = %f c = %f",coeff2ord,coeff1ord,coeff0ord));
r2(coeff,m1,m2);
- n1=(yrotsumm-m1*xrotsumm)/np;
- n2=(yrotsumm-m2*xrotsumm)/np;
+ if(np>0){
+ n1=(yrotsumm-m1*xrotsumm)/np;
+ n2=(yrotsumm-m2*xrotsumm)/np;}
// 2 solutions.................
// negative angles solved...
Double_t chi2 = 0;
for(Int_t i=0;i<nPhiBins;i++) {
Double_t theo = (Double_t)npeff/(Double_t)nPhiBins;
+ if(theo==0) continue;
chi2+= (iPhiBin[i] - theo)*(iPhiBin[i] - theo)/theo;
}
- delete iPhiBin;
+ delete [] iPhiBin;
Double_t prob = TMath::Prob(chi2, nPhiBins-1);
AliDebug(1,Form(" Probability for uniform distrib: %6f.3 %s",prob,(prob<0.05) ? "rejected" : "accepted"));