The vertex finder algorithm can be set from AliGPRRecoParam, and in case of HighFluxP...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Nov 2008 11:20:27 +0000 (11:20 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Nov 2008 11:20:27 +0000 (11:20 +0000)
STEER/AliGRPRecoParam.cxx
STEER/AliGRPRecoParam.h
STEER/AliVertexerTracks.cxx
STEER/AliVertexerTracks.h

index 6d933b6..c087f2b 100644 (file)
@@ -42,6 +42,8 @@ fVertexerTracksITSnindetfitter(100.),
 fVertexerTracksITSmaxtgl(1000.), 
 fVertexerTracksITSfidR(3.),
 fVertexerTracksITSfidZ(30.),
+fVertexerTracksITSalgo(1.),
+fVertexerTracksITSalgoIter0(4.),
 fVertexerTracksTPCdcacut(0.1),
 fVertexerTracksTPCdcacutIter0(1.0),
 fVertexerTracksTPCmaxd0z0(5.),
@@ -51,7 +53,9 @@ fVertexerTracksTPCnsigma(3.),
 fVertexerTracksTPCnindetfitter(0.1),
 fVertexerTracksTPCmaxtgl(1.5), 
 fVertexerTracksTPCfidR(3.),
-fVertexerTracksTPCfidZ(30.)
+fVertexerTracksTPCfidZ(30.),
+fVertexerTracksTPCalgo(1.),
+fVertexerTracksTPCalgoIter0(4.)
 {
   //
   // constructor
@@ -84,6 +88,8 @@ AliGRPRecoParam::AliGRPRecoParam(const AliGRPRecoParam& par) :
   fVertexerTracksITSmaxtgl(par.fVertexerTracksITSmaxtgl), 
   fVertexerTracksITSfidR(par.fVertexerTracksITSfidR),
   fVertexerTracksITSfidZ(par.fVertexerTracksITSfidZ),
+  fVertexerTracksITSalgo(par.fVertexerTracksITSalgo),
+  fVertexerTracksITSalgoIter0(par.fVertexerTracksITSalgoIter0),
   fVertexerTracksTPCdcacut(par.fVertexerTracksTPCdcacut),
   fVertexerTracksTPCdcacutIter0(par.fVertexerTracksTPCdcacutIter0),
   fVertexerTracksTPCmaxd0z0(par.fVertexerTracksTPCmaxd0z0),
@@ -93,7 +99,9 @@ AliGRPRecoParam::AliGRPRecoParam(const AliGRPRecoParam& par) :
   fVertexerTracksTPCnindetfitter(par.fVertexerTracksTPCnindetfitter),
   fVertexerTracksTPCmaxtgl(par.fVertexerTracksTPCmaxtgl), 
   fVertexerTracksTPCfidR(par.fVertexerTracksTPCfidR),
-  fVertexerTracksTPCfidZ(par.fVertexerTracksTPCfidZ)
+  fVertexerTracksTPCfidZ(par.fVertexerTracksTPCfidZ),
+  fVertexerTracksTPCalgo(par.fVertexerTracksTPCalgo),
+  fVertexerTracksTPCalgoIter0(par.fVertexerTracksTPCalgoIter0)
 {
   // copy constructor
 }
@@ -118,6 +126,10 @@ AliGRPRecoParam *AliGRPRecoParam::GetHighFluxParam()
   //
   AliGRPRecoParam *param = new AliGRPRecoParam();
 
+  // to speed up the vertexing in PbPb
+  param->fVertexerTracksITSalgoIter0 = 1.;
+  param->fVertexerTracksTPCalgoIter0 = 1.;
+
   return param;
 }
 //_____________________________________________________________________________
@@ -156,6 +168,8 @@ void AliGRPRecoParam::GetVertexerTracksCuts(Int_t mode,Double_t *cuts) const {
     cuts[7] = fVertexerTracksTPCmaxtgl; 
     cuts[8] = fVertexerTracksTPCfidR;
     cuts[9] = fVertexerTracksTPCfidZ;
+    cuts[10]= fVertexerTracksTPCalgo;
+    cuts[11]= fVertexerTracksTPCalgoIter0;
   } else {
     cuts[0] = fVertexerTracksITSdcacut;
     cuts[1] = fVertexerTracksITSdcacutIter0;
@@ -167,12 +181,14 @@ void AliGRPRecoParam::GetVertexerTracksCuts(Int_t mode,Double_t *cuts) const {
     cuts[7] = fVertexerTracksITSmaxtgl; 
     cuts[8] = fVertexerTracksITSfidR;
     cuts[9] = fVertexerTracksITSfidZ;
+    cuts[10]= fVertexerTracksITSalgo;
+    cuts[11]= fVertexerTracksITSalgoIter0;
   }
 
   return;
 }
 //_____________________________________________________________________________
-void AliGRPRecoParam::SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts[10]) {
+void AliGRPRecoParam::SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts[12]) {
   //
   // set cuts for ITS (0) or TPC (1) mode
   //
@@ -192,6 +208,8 @@ void AliGRPRecoParam::SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts
     fVertexerTracksTPCmaxtgl = cuts[7]; 
     fVertexerTracksTPCfidR = cuts[8];
     fVertexerTracksTPCfidZ = cuts[9];
+    fVertexerTracksTPCalgo = cuts[10];
+    fVertexerTracksTPCalgoIter0 = cuts[11];
   } else {
     fVertexerTracksITSdcacut = cuts[0];
     fVertexerTracksITSdcacutIter0 = cuts[1];
@@ -203,6 +221,8 @@ void AliGRPRecoParam::SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts
     fVertexerTracksITSmaxtgl = cuts[7]; 
     fVertexerTracksITSfidR = cuts[8];
     fVertexerTracksITSfidZ = cuts[9];
+    fVertexerTracksITSalgo = cuts[10];
+    fVertexerTracksITSalgoIter0 = cuts[11];
   }
 
   return;
index f2cccea..91a0892 100644 (file)
@@ -30,10 +30,10 @@ class AliGRPRecoParam : public AliDetectorRecoParam
 
   void  SetVertexerTracksConstraintITS(Bool_t constr=kTRUE) { fVertexerTracksConstraintITS=constr; return; }
   void  SetVertexerTracksConstraintTPC(Bool_t constr=kTRUE) { fVertexerTracksConstraintTPC=constr; return; }
-  void  SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts[10]);
-  void  SetVertexerTracksCutsITS(Int_t ncuts,Double_t cuts[10])
+  void  SetVertexerTracksCuts(Int_t mode,Int_t ncuts,Double_t cuts[12]);
+  void  SetVertexerTracksCutsITS(Int_t ncuts,Double_t cuts[12])
     { SetVertexerTracksCuts(0,ncuts,cuts); return; }
-  void  SetVertexerTracksCutsTPC(Int_t ncuts,Double_t cuts[10])
+  void  SetVertexerTracksCutsTPC(Int_t ncuts,Double_t cuts[12])
     { SetVertexerTracksCuts(1,ncuts,cuts); return; }
   Bool_t GetVertexerTracksConstraintITS() const { return fVertexerTracksConstraintITS; }
   Bool_t GetVertexerTracksConstraintTPC() const { return fVertexerTracksConstraintTPC; }
@@ -65,6 +65,8 @@ class AliGRPRecoParam : public AliDetectorRecoParam
   Double_t fVertexerTracksITSmaxtgl; // max tgl 
   Double_t fVertexerTracksITSfidR; // fiducial radius
   Double_t fVertexerTracksITSfidZ; // fiducial z
+  Double_t fVertexerTracksITSalgo; // finder algo
+  Double_t fVertexerTracksITSalgoIter0; // finder algo iteration 0
 
   // cuts for AliVertexerTracks: TPC-only mode
   Double_t fVertexerTracksTPCdcacut; // general dca
@@ -77,8 +79,10 @@ class AliGRPRecoParam : public AliDetectorRecoParam
   Double_t fVertexerTracksTPCmaxtgl; // max tgl 
   Double_t fVertexerTracksTPCfidR; // fiducial radius
   Double_t fVertexerTracksTPCfidZ; // fiducial z
+  Double_t fVertexerTracksTPCalgo; // finder algo
+  Double_t fVertexerTracksTPCalgoIter0; // finder algo iteration 0
 
-  ClassDef(AliGRPRecoParam,3) // global reco parameters
+  ClassDef(AliGRPRecoParam,4) // global reco parameters
 };
 
 #endif
index b1c9a32..3431da7 100644 (file)
@@ -69,7 +69,8 @@ fITSrefit(kTRUE),
 fFiducialR(3.),
 fFiducialZ(30.),
 fnSigmaForUi00(1.5),
-fAlgo(1)
+fAlgo(1),
+fAlgoIter0(4)
 {
 //
 // Default constructor
@@ -102,7 +103,8 @@ fITSrefit(kTRUE),
 fFiducialR(3.),
 fFiducialZ(30.),
 fnSigmaForUi00(1.5),
-fAlgo(1)
+fAlgo(1),
+fAlgoIter0(4)
 {
 //
 // Standard constructor
@@ -248,7 +250,15 @@ AliESDVertex* AliVertexerTracks::FindPrimaryVertex(TObjArray *trkArrayOrig,
     if(fIdSel) { delete [] fIdSel; fIdSel=NULL; }
     Double_t cutsave = fDCAcut;  
     fDCAcut = fDCAcutIter0;
-    VertexFinder(1); // using weights, cutting dca < fDCAcutIter0
+    // vertex finder
+    switch (fAlgoIter0) {
+    case 1: StrLinVertexFinderMinDist(1); break;
+    case 2: StrLinVertexFinderMinDist(0); break;
+    case 3: HelixVertexFinder();          break;
+    case 4: VertexFinder(1);              break;
+    case 5: VertexFinder(0);              break;
+    default: printf("Wrong algorithm\n"); break;  
+    }
     fDCAcut = cutsave;
     if(fVert.GetNContributors()>0) {
       fVert.GetXYZ(fNominalPos);
@@ -824,6 +834,8 @@ void AliVertexerTracks::SetCuts(Double_t *cuts)
   SetMinDetFitter(cuts[6]);
   SetMaxTgl(cuts[7]);
   SetFiducialRZ(cuts[8],cuts[9]);
+  fAlgo=(Int_t)(cuts[10]);
+  fAlgoIter0=(Int_t)(cuts[11]);
 
   return;
 }
@@ -837,7 +849,9 @@ void AliVertexerTracks::SetITSMode(Double_t dcacut,
                                   Double_t mindetfitter,
                                   Double_t maxtgl,
                                   Double_t fidR,
-                                  Double_t fidZ) 
+                                  Double_t fidZ,
+                                  Int_t finderAlgo,
+                                  Int_t finderAlgoIter0)
 {
 //
 //  Cut values for ITS mode
@@ -857,6 +871,8 @@ void AliVertexerTracks::SetITSMode(Double_t dcacut,
   SetMinDetFitter(mindetfitter);
   SetMaxTgl(maxtgl);
   SetFiducialRZ(fidR,fidZ);
+  fAlgo=finderAlgo;
+  fAlgoIter0=finderAlgoIter0;
 
   return; 
 }
@@ -870,7 +886,9 @@ void AliVertexerTracks::SetTPCMode(Double_t dcacut,
                                   Double_t mindetfitter,
                                   Double_t maxtgl,
                                   Double_t fidR,
-                                  Double_t fidZ) 
+                                  Double_t fidZ,
+                                  Int_t finderAlgo,
+                                  Int_t finderAlgoIter0) 
 {
 //
 //  Cut values for TPC mode
@@ -886,6 +904,8 @@ void AliVertexerTracks::SetTPCMode(Double_t dcacut,
   SetMinDetFitter(mindetfitter);
   SetMaxTgl(maxtgl);
   SetFiducialRZ(fidR,fidZ);
+  fAlgo=finderAlgo;
+  fAlgoIter0=finderAlgoIter0;
 
   return; 
 }
@@ -929,7 +949,8 @@ void AliVertexerTracks::StrLinVertexFinderMinDist(Int_t optUseWeights)
     sigmasq[2]=track1->GetSigmaZ2();
     TMatrixD ri(3,1);
     TMatrixD wWi(3,3);
-    if(!TrackToPoint(track1,ri,wWi)) optUseWeights=kFALSE;
+    //if(!TrackToPoint(track1,ri,wWi)) {printf("WARNING\n");continue;}
+    if(!TrackToPoint(track1,ri,wWi)) {optUseWeights=kFALSE;printf("WARNING\n");}
     Double_t wmat[9];
     Int_t iel=0;
     for(Int_t ia=0;ia<3;ia++){
@@ -938,7 +959,7 @@ void AliVertexerTracks::StrLinVertexFinderMinDist(Int_t optUseWeights)
        iel++;
       }    
     }
-    new(linarray[i]) AliStrLine(pos,sigmasq,wmat,dir);     
+    new(linarray[i]) AliStrLine(pos,sigmasq,wmat,dir);
   }
   fVert=TrackletVertexFinder(&linarray,optUseWeights);
   linarray.Clear("C");
@@ -947,7 +968,6 @@ void AliVertexerTracks::StrLinVertexFinderMinDist(Int_t optUseWeights)
 AliESDVertex AliVertexerTracks::TrackletVertexFinder(TClonesArray *lines, Int_t optUseWeights)
 {
   // Calculate the point at minimum distance to prepared tracks 
-  
   const Int_t knacc = (Int_t)lines->GetEntriesFast();
   Double_t initPos[3]={0.,0.,0.};
 
@@ -968,6 +988,7 @@ AliESDVertex AliVertexerTracks::TrackletVertexFinder(TClonesArray *lines, Int_t
     AliStrLine* line1 = (AliStrLine*)lines->At(i); 
     Double_t p0[3],cd[3],sigmasq[3];
     Double_t wmat[9];
+    if(!line1) printf("ERROR %d %d\n",i,knacc);
     line1->GetP0(p0);
     line1->GetCd(cd);
     line1->GetSigma2P0(sigmasq);
index 948fc97..dc4ca74 100644 (file)
@@ -58,7 +58,9 @@ class AliVertexerTracks : public TObject {
                   Double_t mindetfitter=100.,
                   Double_t maxtgl=1000.,
                   Double_t fidR=3.,
-                  Double_t fidZ=30.); 
+                  Double_t fidZ=30.,
+                  Int_t finderAlgo=1,
+                  Int_t finderAlgoIter0=4); 
   void  SetTPCMode(Double_t dcacut=0.1,
                   Double_t dcacutIter0=1.0,
                   Double_t maxd0z0=5.0,
@@ -68,7 +70,9 @@ class AliVertexerTracks : public TObject {
                   Double_t mindetfitter=0.1,
                   Double_t maxtgl=1.5, 
                   Double_t fidR=3.,
-                  Double_t fidZ=30.);
+                  Double_t fidZ=30.,
+                  Int_t finderAlgo=1,
+                  Int_t finderAlgoIter0=4); 
   void  SetCuts(Double_t *cuts);
   void  SetConstraintOff() { fConstraint=kFALSE; return; }
   void  SetConstraintOn() { fConstraint=kTRUE; return; }
@@ -152,6 +156,7 @@ class AliVertexerTracks : public TObject {
   Double_t  fFiducialZ;       // length of fiducial cylinder for tracks
   Double_t  fnSigmaForUi00;   // n. sigmas from finder in TrackToPoint
   Int_t     fAlgo;            // option for vertex finding algorythm
+  Int_t     fAlgoIter0;       // this is for iteration 0
   // fAlgo=1 (default) finds minimum-distance point among all selected tracks
   //         approximated as straight lines 
   //         and uses errors on track parameters as weights