* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include <TH3F.h>
#include <TTree.h>
#include "AliESDVertex.h"
#include "AliLog.h"
SetMaxRCut();
SetZCutDiamond();
SetMaxZCut();
- SetDCAcut();
+ SetDCACut();
SetDiffPhiMax();
SetMeanPSelTracks();
SetMeanPtSelTracks();
if(!fCurrentVertex){
AliITSVertexerZ vertz(GetNominalPos()[0],GetNominalPos()[1]);
AliDebug(1,"Call Vertexer Z\n");
+ vertz.SetLowLimit(-fZCutDiamond);
+ vertz.SetHighLimit(fZCutDiamond);
AliESDVertex* vtxz = vertz.FindVertexForCurrentEvent(itsClusterTree);
if(vtxz){
Double_t position[3]={GetNominalPos()[0],GetNominalPos()[1],vtxz->GetZv()};
branch = tR->GetBranch("ITSRecPoints");
// Set values for cuts
- Float_t xbeam=0., ybeam=0.;
+ Float_t xbeam=GetNominalPos()[0];
+ Float_t ybeam=GetNominalPos()[1];
Float_t zvert=0.;
Float_t deltaPhi=fCoarseDiffPhiCut;
Float_t deltaR=fCoarseMaxRCut;
// Finds the 3D vertex information using tracklets
Int_t retcode = -1;
- Float_t xbeam=0.;
- Float_t ybeam=0.;
+ Float_t xbeam=GetNominalPos()[0];
+ Float_t ybeam=GetNominalPos()[1];
Float_t zvert=0.;
Float_t deltaR=fCoarseMaxRCut;
Float_t dZmax=fZCutDiamond;
Float_t binsizer=(rh-rl)/nbr;
Float_t binsizez=(zh-zl)/nbz;
TH3F *h3d = new TH3F("h3d","xyz distribution",nbr,rl,rh,nbr,rl,rh,nbz,zl,zh);
+ Int_t nbrcs=25;
+ Int_t nbzcs=50;
+ TH3F *h3dcs = new TH3F("h3dcs","xyz distribution",nbrcs,rl,rh,nbrcs,rl,rh,nbzcs,zl,zh);
// cleanup of the TCLonesArray of tracklets (i.e. fakes are removed)
Int_t *validate = new Int_t [fLines.GetEntriesFast()];
for(Int_t i=0; i<fLines.GetEntriesFast();i++)validate[i]=0;
for(Int_t i=0; i<fLines.GetEntriesFast()-1;i++){
- if(validate[i]==1)continue;
AliStrLine *l1 = (AliStrLine*)fLines.At(i);
for(Int_t j=i+1;j<fLines.GetEntriesFast();j++){
AliStrLine *l2 = (AliStrLine*)fLines.At(j);
validate[i]=1;
validate[j]=1;
h3d->Fill(point[0],point[1],point[2]);
+ h3dcs->Fill(point[0],point[1],point[2]);
}
}
Int_t numbtracklets=0;
for(Int_t i=0; i<fLines.GetEntriesFast();i++)if(validate[i]>=1)numbtracklets++;
- if(numbtracklets<2){delete [] validate; delete h3d; return retcode; }
+ if(numbtracklets<2){delete [] validate; delete h3d; delete h3dcs; return retcode; }
for(Int_t i=0; i<fLines.GetEntriesFast();i++){
if(validate[i]<1)fLines.RemoveAt(i);
AliDebug(1,Form("Number of tracklets (after compress)%d ",fLines.GetEntriesFast()));
delete [] validate;
+ // Find peaks in histos
- // finds peak in histo
- TAxis *xax = h3d->GetXaxis();
- TAxis *yax = h3d->GetYaxis();
- TAxis *zax = h3d->GetZaxis();
Double_t peak[3]={0.,0.,0.};
- Float_t contref = 0.;
- for(Int_t i=xax->GetFirst();i<=xax->GetLast();i++){
- Float_t xval = xax->GetBinCenter(i);
- for(Int_t j=yax->GetFirst();j<=yax->GetLast();j++){
- Float_t yval = yax->GetBinCenter(j);
- for(Int_t k=zax->GetFirst();k<=zax->GetLast();k++){
- Float_t bc = h3d->GetBinContent(i,j,k);
- Float_t zval = zax->GetBinCenter(k);
- if(bc>contref){
- contref = bc;
- peak[2] = zval;
- peak[1] = yval;
- peak[0] = xval;
- }
- }
- }
- }
+ Int_t ntrkl,ntimes;
+ FindPeaks(h3d,peak,ntrkl,ntimes);
delete h3d;
+ if(optCuts==0 && ntrkl<=2){
+ ntrkl=0;
+ ntimes=0;
+ FindPeaks(h3dcs,peak,ntrkl,ntimes);
+ binsizer=(rh-rl)/nbrcs;
+ binsizez=(zh-zl)/nbzcs;
+ if(ntrkl==1 || ntimes>1){delete h3dcs; return retcode;}
+ }
+ delete h3dcs;
+
// Second selection loop
+
Float_t bs=(binsizer+binsizez)/2.;
for(Int_t i=0; i<fLines.GetEntriesFast();i++){
AliStrLine *l1 = (AliStrLine*)fLines.At(i);
}
}
+//________________________________________________________
+void AliITSVertexer3D::FindPeaks(TH3F* histo, Double_t *peak, Int_t &nOfTracklets, Int_t &nOfTimes){
+ // Finds bin with max contents in 3D histo of tracket intersections
+ TAxis *xax = histo->GetXaxis();
+ TAxis *yax = histo->GetYaxis();
+ TAxis *zax = histo->GetZaxis();
+ peak[0]=0.;
+ peak[1]=0.;
+ peak[2]=0.;
+ nOfTracklets = 0;
+ nOfTimes=0;
+ for(Int_t i=xax->GetFirst();i<=xax->GetLast();i++){
+ Float_t xval = xax->GetBinCenter(i);
+ for(Int_t j=yax->GetFirst();j<=yax->GetLast();j++){
+ Float_t yval = yax->GetBinCenter(j);
+ for(Int_t k=zax->GetFirst();k<=zax->GetLast();k++){
+ Float_t zval = zax->GetBinCenter(k);
+ Int_t bc =(Int_t)histo->GetBinContent(i,j,k);
+ if(bc>nOfTracklets){
+ nOfTracklets = bc;
+ peak[2] = zval;
+ peak[1] = yval;
+ peak[0] = xval;
+ nOfTimes = 1;
+ }
+ if(bc==nOfTracklets){
+ nOfTimes++;
+ }
+ }
+ }
+ }
+
+}
//________________________________________________________
void AliITSVertexer3D::PrintStatus() const {