/* $Id$ */
//______________________________________________________________________
-AliITSVertexer3D::AliITSVertexer3D():
+AliITSVertexer3D::AliITSVertexer3D(Double_t zcut):
AliITSVertexer(),
fLines("AliStrLine",1000),
fVert3D(),
SetCoarseMaxRCut();
SetMaxRCut();
SetMaxRCutAlgo2();
- SetZCutDiamond();
+ if(zcut>0.){
+ SetZCutDiamond(zcut);
+ }
+ else {
+ SetZCutDiamond();
+ }
SetMaxZCut();
SetDCACut();
SetDiffPhiMax();
SetPileupAlgo();
SetBinSizeR();
SetBinSizeZ();
- Double_t binsize=0.02; // default 200 micron
- Int_t nbins=static_cast<Int_t>(1+2*fZCutDiamond/binsize);
- fZHisto=new TH1F("hz","",nbins,-fZCutDiamond,-fZCutDiamond+binsize*nbins);
fGenerForDownScale=new TRandom3(987654321);
}
+//______________________________________________________________________
+AliITSVertexer3D::AliITSVertexer3D(TRootIOCtor*):
+ AliITSVertexer(),
+ fLines("AliStrLine",1000),
+ fVert3D(),
+ fCoarseDiffPhiCut(0.),
+ fFineDiffPhiCut(0.),
+ fCutOnPairs(0.),
+ fCoarseMaxRCut(0.),
+ fMaxRCut(0.),
+ fMaxRCut2(0.),
+ fZCutDiamond(0.),
+ fMaxZCut(0.),
+ fDCAcut(0.),
+ fDiffPhiMax(0.),
+ fMeanPSelTrk(0.),
+ fMeanPtSelTrk(0.),
+ fUsedCluster(kMaxCluPerMod*kNSPDMod),
+ fZHisto(0),
+ fDCAforPileup(0.),
+ fDiffPhiforPileup(0.),
+ fBinSizeR(0.),
+ fBinSizeZ(0.),
+ fPileupAlgo(0),
+ fMaxNumOfCl(fgkMaxNumOfClDefault),
+ fMaxNumOfClForRebin(fgkMaxNumOfClRebinDefault),
+ fMaxNumOfClForDownScale(fgkMaxNumOfClDownscaleDefault),
+ fNRecPLay1(0),
+ fNRecPLay2(0),
+ f3DBinSize(fgk3DBinSizeDefault),
+ fDoDownScale(kFALSE),
+ fGenerForDownScale(0),
+ f3DPeak(),
+ fHighMultAlgo(1),
+ fSwitchAlgorithm(kFALSE)
+{
+ // I/O constructor
+
+
+}
+
//______________________________________________________________________
AliITSVertexer3D::~AliITSVertexer3D() {
// Destructor
//______________________________________________________________________
void AliITSVertexer3D::ResetVert3D(){
- //
+ // Reset the fVert3D object and reset the used clusters
ResetVertex();
fVert3D.SetXv(0.);
fVert3D.SetYv(0.);
vertz.SetHighLimit(fZCutDiamond);
AliESDVertex* vtxz = vertz.FindVertexForCurrentEvent(itsClusterTree);
if(vtxz){
- Double_t position[3]={GetNominalPos()[0],GetNominalPos()[1],vtxz->GetZv()};
+ Double_t position[3]={GetNominalPos()[0],GetNominalPos()[1],vtxz->GetZ()};
Double_t covmatrix[6];
vtxz->GetCovMatrix(covmatrix);
Double_t chi2=99999.;
//______________________________________________________________________
void AliITSVertexer3D::FindVertex3D(TTree *itsClusterTree){
-
- Double_t vRadius=TMath::Sqrt(fVert3D.GetXv()*fVert3D.GetXv()+fVert3D.GetYv()*fVert3D.GetYv());
+ // Instantiates the fCurrentVertex object. calle by FindVertexForCurrenEvent
+ Double_t vRadius=TMath::Sqrt(fVert3D.GetX()*fVert3D.GetX()+fVert3D.GetY()*fVert3D.GetY());
if(vRadius<GetPipeRadius() && fVert3D.GetNContributors()>0){
- Double_t position[3]={fVert3D.GetXv(),fVert3D.GetYv(),fVert3D.GetZv()};
+ Double_t position[3]={fVert3D.GetX(),fVert3D.GetY(),fVert3D.GetZ()};
Double_t covmatrix[6];
fVert3D.GetCovMatrix(covmatrix);
Double_t chi2=99999.;
default: AliError("Wrong pileup algorithm"); break;
}
if(fNoVertices==1){
+ delete[] fVertArray;
fVertArray = new AliESDVertex[1];
fVertArray[0]=(*fCurrentVertex);
}
//______________________________________________________________________
void AliITSVertexer3D::FindVertex3DIterative(){
- //
+ // find vertex if fPileupAlgo == 2
Int_t nLines=fLines.GetEntriesFast();
Int_t maxPoints=nLines*(nLines-1)/2;
Double_t* zP=new Double_t[maxPoints];
Int_t* index1=new Int_t[maxPoints];
Int_t* index2=new Int_t[maxPoints];
- Double_t xbeam=fVert3D.GetXv();
- Double_t ybeam=fVert3D.GetYv();
+ Double_t xbeam=fVert3D.GetX();
+ Double_t ybeam=fVert3D.GetY();
Int_t iPoint=0;
for(Int_t ilin1=0; ilin1<nLines; ilin1++){
if(nGoodVert > 1){
fIsPileup = kTRUE;
fNTrpuv = fVertArray[1].GetNContributors();
- fZpuv = fVertArray[1].GetZv();
+ fZpuv = fVertArray[1].GetZ();
}
- Double_t vRadius=TMath::Sqrt(fVertArray[0].GetXv()*fVertArray[0].GetXv()+fVertArray[0].GetYv()*fVertArray[0].GetYv());
+ Double_t vRadius=TMath::Sqrt(fVertArray[0].GetX()*fVertArray[0].GetX()+fVertArray[0].GetY()*fVertArray[0].GetY());
if(vRadius<GetPipeRadius() && fVertArray[0].GetNContributors()>0){
- Double_t position[3]={fVertArray[0].GetXv(),fVertArray[0].GetYv(),fVertArray[0].GetZv()};
+ Double_t position[3]={fVertArray[0].GetX(),fVertArray[0].GetY(),fVertArray[0].GetZ()};
Double_t covmatrix[6];
fVertArray[0].GetCovMatrix(covmatrix);
Double_t chi2=99999.;
// at least one second vertex is present
fIsPileup = kTRUE;
fNTrpuv = fVertArray[kk].GetNContributors();
- fZpuv = fVertArray[kk].GetZv();
+ fZpuv = fVertArray[kk].GetZ();
}
}
- Double_t vRadius=TMath::Sqrt(fVertArray[0].GetXv()*fVertArray[0].GetXv()+fVertArray[0].GetYv()*fVertArray[0].GetYv());
+ Double_t vRadius=TMath::Sqrt(fVertArray[0].GetX()*fVertArray[0].GetX()+fVertArray[0].GetY()*fVertArray[0].GetY());
if(vRadius<GetPipeRadius() && fVertArray[0].GetNContributors()>0){
- Double_t position[3]={fVertArray[0].GetXv(),fVertArray[0].GetYv(),fVertArray[0].GetZv()};
+ Double_t position[3]={fVertArray[0].GetX(),fVertArray[0].GetY(),fVertArray[0].GetZ()};
Double_t covmatrix[6];
fVertArray[0].GetCovMatrix(covmatrix);
Double_t chi2=99999.;
Double_t deltaR=fCoarseMaxRCut;
Double_t dZmax=fZCutDiamond;
if(optCuts==1){
- xbeam=fVert3D.GetXv();
- ybeam=fVert3D.GetYv();
- zvert=fVert3D.GetZv();
+ xbeam=fVert3D.GetX();
+ ybeam=fVert3D.GetY();
+ zvert=fVert3D.GetZ();
deltaPhi = fDiffPhiMax;
deltaR=fMaxRCut;
dZmax=fMaxZCut;
deltaR=fMaxRCut2;
}
} else if(optCuts==2){
- xbeam=fVert3D.GetXv();
- ybeam=fVert3D.GetYv();
+ xbeam=fVert3D.GetX();
+ ybeam=fVert3D.GetY();
deltaPhi = fDiffPhiforPileup;
deltaR=fMaxRCut;
}
Double_t deltaR=fCoarseMaxRCut;
Double_t dZmax=fZCutDiamond;
if(optCuts==1){
- xbeam=fVert3D.GetXv();
- ybeam=fVert3D.GetYv();
- zvert=fVert3D.GetZv();
+ xbeam=fVert3D.GetX();
+ ybeam=fVert3D.GetY();
+ zvert=fVert3D.GetZ();
deltaR=fMaxRCut;
dZmax=fMaxZCut;
if(fPileupAlgo == 2){
deltaR=fMaxRCut2;
}
}else if(optCuts==2){
- xbeam=fVert3D.GetXv();
- ybeam=fVert3D.GetYv();
+ xbeam=fVert3D.GetX();
+ ybeam=fVert3D.GetY();
deltaR=fMaxRCut;
}
}
}
+//________________________________________________________
+void AliITSVertexer3D::SetZCutDiamond(Double_t zcut){
+ // The fiducial region along Z is set. The TH1 object pointed by
+ // fZHisto is created
+ if(TMath::AreEqualAbs(zcut,fZCutDiamond,1.e-10))return;
+ fZCutDiamond=zcut;
+ if(fZHisto) delete fZHisto;
+ Double_t binsize=0.02; // default 200 micron
+ Int_t nbins=static_cast<Int_t>(1+2*fZCutDiamond/binsize);
+ fZHisto=new TH1F("hz","",nbins,-fZCutDiamond,-fZCutDiamond+binsize*nbins);
+ fZHisto->SetDirectory(0);
+}
+
//________________________________________________________
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
//________________________________________________________
Int_t AliITSVertexer3D::RemoveTracklets(){
// Remove trackelts close to first found vertex
- Double_t vert[3]={fVert3D.GetXv(),fVert3D.GetYv(),fVert3D.GetZv()};
+ Double_t vert[3]={fVert3D.GetX(),fVert3D.GetY(),fVert3D.GetZ()};
Int_t nRemoved=0;
for(Int_t i=0; i<fLines.GetEntriesFast();i++){
AliStrLine *lin = (AliStrLine*)fLines.At(i);
fVertArray[nFoundVert]=fVert3D;
nFoundVert++;
if(nFoundVert==2){
- fZpuv=fVert3D.GetZv();
+ fZpuv=fVert3D.GetZ();
fNTrpuv=fVert3D.GetNContributors();
}
}