From: hristov Date: Mon, 14 Sep 2009 05:02:41 +0000 (+0000) Subject: Changes for task Optimization of V0 finder (2079) + plus fix for the bug number 47412... X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=61673d36749a7c1a3b79f2f806fd4fde70eaac96;p=u%2Fmrichter%2FAliRoot.git Changes for task Optimization of V0 finder (2079) + plus fix for the bug number 47412 (Ana) --- diff --git a/ITS/AliITSRecoParam.cxx b/ITS/AliITSRecoParam.cxx index 0b714f60e04..cefa97babef 100644 --- a/ITS/AliITSRecoParam.cxx +++ b/ITS/AliITSRecoParam.cxx @@ -214,12 +214,30 @@ fESDV0Params(NULL) fESDV0Params->SetMinPointAngle2(0.99); fESDV0Params->SetMinR(0.5); fESDV0Params->SetMaxR(220.); + fESDV0Params->SetMinPABestConst(0.9999); + fESDV0Params->SetMaxRBestConst(10.); fESDV0Params->SetCausality0Cut(0.19); fESDV0Params->SetLikelihood01Cut(0.45); fESDV0Params->SetLikelihood1Cut(0.5); fESDV0Params->SetCombinedCut(0.55); fESDV0Params->SetMinClFullTrk(5.0); fESDV0Params->SetMinTgl0(1.05); + fESDV0Params->SetMinRTgl0(40.0); + + fESDV0Params->SetMinNormDistForbTgl0(3.0); + fESDV0Params->SetMinClForb0(4.5); + fESDV0Params->SetMinNormDistForb1(3.0); + fESDV0Params->SetMinNormDistForb2(2.0); + fESDV0Params->SetMinNormDistForb3(1.0); + fESDV0Params->SetMinNormDistForb4(4.0); + fESDV0Params->SetMinNormDistForb5(5.0); + + fESDV0Params->SetMinRTPCdensity(40.); + fESDV0Params->SetMaxRTPCdensity0(110.); + fESDV0Params->SetMaxRTPCdensity10(120.); + fESDV0Params->SetMaxRTPCdensity20(130.); + fESDV0Params->SetMaxRTPCdensity30(140.); + fESDV0Params->SetMinTPCdensity(0.6); fESDV0Params->SetMinTgl1(1.1); fESDV0Params->SetMinTgl2(1.0); @@ -236,6 +254,7 @@ fESDV0Params(NULL) fESDV0Params->SetSigpPar0(0.5); fESDV0Params->SetSigpPar1(0.6); fESDV0Params->SetSigpPar2(0.4); + fESDV0Params->SetMaxDcaLh0(0.5); fESDV0Params->SetStreamLevel(0); fESDV0Params->SetChi2KF(100); fESDV0Params->SetRobustChi2KF(100); @@ -349,6 +368,8 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam() param->fSigmaXDeadZoneHit2 = 0.004/12.; param->fSigmaZDeadZoneHit2 = 0.001/12.; param->fXPassDeadZoneHits = 0.018; + + return param; } @@ -452,6 +473,21 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam() param->SetNLoopsSA(20); param->fMaxPhiSA = 0.07; param->fMaxLambdaSA = 0.04; + + + param->GetESDV0Params()->SetMinRTgl0(0.5); + param->GetESDV0Params()->SetMaxDist(1.5); + param->GetESDV0Params()->SetMaxDcaLh0(1.5); + param->GetESDV0Params()->SetMaxRBestConst(80); + param->GetESDV0Params()->SetMinPABestConst(0.99); + param->GetESDV0Params()->SetMinNormDistForbTgl0(1.); + param->GetESDV0Params()->SetMinNormDistForb1(2.); + param->GetESDV0Params()->SetLikelihood01Cut(0.3); + param->GetESDV0Params()->SetLikelihood1Cut(0.35); + param->GetESDV0Params()->SetCombinedCut(0.4); + + + return param; } //_____________________________________________________________________________ diff --git a/ITS/AliITSV0Finder.cxx b/ITS/AliITSV0Finder.cxx index 60b4ffea597..113200de1b2 100644 --- a/ITS/AliITSV0Finder.cxx +++ b/ITS/AliITSV0Finder.cxx @@ -39,6 +39,7 @@ #include "AliITStrackerMI.h" #include "AliITSV0Finder.h" #include "AliKFParticle.h" +#include "AliKFVertex.h" ClassImp(AliITSV0Finder) @@ -186,12 +187,31 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, const Float_t kMinPointAngle2 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPointAngle2(); const Float_t kMinR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinR(); const Float_t kMaxR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxR(); + const Float_t kMinPABestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPABestConst(); + const Float_t kMaxRBestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRBestConst(); const Float_t kCausality0Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCausality0Cut(); const Float_t kLikelihood01Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood01Cut(); const Float_t kLikelihood1Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood1Cut(); const Float_t kCombinedCut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCombinedCut(); const Float_t kMinClFullTrk= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClFullTrk(); const Float_t kMinTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl0(); + const Float_t kMinRTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTgl0(); + + const Float_t kMinNormDistForbTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForbTgl0(); + const Float_t kMinClForb0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClForb0(); + const Float_t kMinNormDistForb1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb1(); + const Float_t kMinNormDistForb2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb2(); + const Float_t kMinNormDistForb3= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb3(); + const Float_t kMinNormDistForb4= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb4(); + const Float_t kMinNormDistForb5= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb5(); + + const Float_t kMinRTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTPCdensity(); + const Float_t kMaxRTPCdensity0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity0(); + const Float_t kMaxRTPCdensity10= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity10(); + const Float_t kMaxRTPCdensity20= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity20(); + const Float_t kMaxRTPCdensity30= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity30(); + + const Float_t kMinTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTPCdensity(); const Float_t kMinTgl1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl1(); @@ -210,7 +230,8 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, const Float_t kSigpPar0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar0(); const Float_t kSigpPar1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar1(); const Float_t kSigpPar2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar2(); - + const Float_t kMaxDcaLh0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDcaLh0(); + TObjArray *trackHypothesys = tracker->GetTrackHypothesys(); TObjArray *bestHypothesys = tracker->GetBestHypothesys(); @@ -228,6 +249,9 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, TObjArray trackarray(ntracks+2); //array with tracks - with vertex constrain TObjArray trackarrayc(ntracks+2); //array of "best tracks" - without vertex constrain TObjArray trackarrayl(ntracks+2); //array of "longest tracks" - without vertex constrain + //Change from Bool_t to Int_t for optimization + // Int_t forbN=0; + // Int_t * forbidden = new Int_t [ntracks+2]; Bool_t * forbidden = new Bool_t [ntracks+2]; Int_t *itsmap = new Int_t [ntracks+2]; Float_t *dist = new Float_t[ntracks+2]; @@ -250,6 +274,7 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, // for (Int_t itrack=0;itrackAt(ih); if (!trackh->GetConstrain()) continue; if (!bestConst) bestConst = trackh; - if (trackh->GetNumberOfClusters()>kMinClFullTrk){ + if (trackh->GetNumberOfClusters()>kMinClFullTrk ){ bestConst = trackh; // full track - with minimal chi2 break; } @@ -327,6 +352,8 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, new (&trackat0) AliITStrackMI(*bestLong); Double_t xx,yy,zz,alpha; if (!bestLong->GetGlobalXYZat(bestLong->GetX(),xx,yy,zz)) continue; + + alpha = TMath::ATan2(yy,xx); // if (!trackat0.Propagate(alpha,0)) continue; trackat0.Propagate(alpha,0); //PH The check on the return value is temporarily disabled (bug 45751) @@ -362,13 +389,19 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, normdist1[itsindex] = TMath::Abs((trackat0.GetZ()-primvertex[2])/(ptfac*TMath::Sqrt(trackat0.GetSigmaZ2()))); normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); if (TMath::Abs(trackat0.GetTgl())>kMinTgl0){ - if (normdist[itsindex]<3) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]>3) { - minr[itsindex] = TMath::Max(Float_t(40.),minr[itsindex]); + if (normdist[itsindex]kMinNormDistForbTgl0) { + minr[itsindex] = TMath::Max(kMinRTgl0,minr[itsindex]); } } } } + + // //----------------------------------------------------------- //Forbid primary track candidates - @@ -381,15 +414,39 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, //treetr->SetAlias("forbidden5","ND<5&&Tr1.fNormChi2[0]<1"); //----------------------------------------------------------- if (bestConst){ - if (bestLong->GetNumberOfClusters()<4 && bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>4.5) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]<3 && bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>5.5) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]<2 && bestConst->GetClIndex(0)>=0 && bestConst->GetClIndex(1)>=0 ) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]<1 && bestConst->GetClIndex(0)>=0) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]<4 && bestConst->GetNormChi2(0)<2) forbidden[itsindex]=kTRUE; - if (normdist[itsindex]<5 && bestConst->GetNormChi2(0)<1) forbidden[itsindex]=kTRUE; + if (bestLong->GetNumberOfClusters()<4 && bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>kMinClForb0){ + // forbN=2; + // forbidden[itsindex]+=1<GetNumberOfClusters()+bestConst->GetNDeadZone()>5.5){ + // forbN=3; + // forbidden[itsindex]+=1<GetClIndex(0)>=0 && bestConst->GetClIndex(1)>=0 ){ + // forbN=4; + // forbidden[itsindex]+=1<GetClIndex(0)>=0){ + // forbN=5; + // forbidden[itsindex]+=1<GetNormChi2(0)<2){ + // forbN=6; + // forbidden[itsindex]+=1<GetNormChi2(0)<1){ + // forbN=7; + // forbidden[itsindex]+=1<GetNormChi2(0)<2.5) { - minPointAngle[itsindex]= 0.9999; - maxr[itsindex] = 10; + minPointAngle[itsindex]= kMinPABestConst; + maxr[itsindex] = kMaxRBestConst; } } // @@ -416,14 +473,15 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, // // Causality cuts in TPC volume // - if (esdtrack->GetTPCdensity(0,10) >kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(110),maxr[itsindex]); - if (esdtrack->GetTPCdensity(10,30)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(120),maxr[itsindex]); - if (esdtrack->GetTPCdensity(20,40)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(130),maxr[itsindex]); - if (esdtrack->GetTPCdensity(30,50)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(140),maxr[itsindex]); + if (esdtrack->GetTPCdensity(0,10) >kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity0),maxr[itsindex]); + if (esdtrack->GetTPCdensity(10,30)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity10),maxr[itsindex]); + if (esdtrack->GetTPCdensity(20,40)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity20),maxr[itsindex]); + if (esdtrack->GetTPCdensity(30,50)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity30),maxr[itsindex]); // - if (esdtrack->GetTPCdensity(0,60)<0.4&&bestLong->GetNumberOfClusters()<3) minr[itsindex]=100; + if (esdtrack->GetTPCdensity(0,60)<0.4&&bestLong->GetNumberOfClusters()<3) minr[itsindex]=kMinRTPCdensity; // // + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0){ cstream<<"Track"<< "Tr0.="<GetSign()>0 && !AliITSReconstructor::GetRecoParam()->GetStoreLikeSignV0s()) continue; AliITStrackMI *trackc0 = (AliITStrackMI*)trackarrayc.At(itrack0); // for (Int_t iesd1=iesd0+1;iesd1GetSign()<0 && !AliITSReconstructor::GetRecoParam()->GetStoreLikeSignV0s()) continue; + + if ( (btrack0->GetSign()==btrack1->GetSign()) && !AliITSReconstructor::GetRecoParam()->GetStoreLikeSignV0s()) continue; + Bool_t isGold = kFALSE; if (TMath::Abs(TMath::Abs(btrack0->GetLabel())-TMath::Abs(btrack1->GetLabel()))==1){ isGold = kTRUE; } + // rejectBase=0; AliITStrackMI *trackc1 = (AliITStrackMI*)trackarrayc.At(itrack1); AliHelix &h1 = helixes[itrack0]; AliHelix &h2 = helixes[itrack1]; @@ -483,7 +546,11 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, // Double_t phase[2][2],radius[2]; Int_t points = h1.GetRPHIintersections(h2, phase, radius); - if (points==0) continue; + if (points==0) { + // cutN=1; + // rejectBase+=1<TMath::Min(maxr[itrack0],maxr[itrack1])) continue; + if (radiusCTMath::Min(maxr[itrack0],maxr[itrack1])){ + // cutN=3; + // rejectBase+=1<maxDist) continue; + if (distance>maxDist){ + // cutN=4; + // rejectBase+=1<Update(primvertex); pvertex->SetClusters(track0->ClIndex(),track1->ClIndex()); // register clusters - AliKFParticle negKF( *(pvertex->GetParamN()) ,11); - AliKFParticle posKF( *(pvertex->GetParamP()) ,-11); + // Define gamma, K0, lambda and lambda_bar from the decay particles and calculate the chi2 + AliKFVertex vertexKF; + + vertexKF.X() = tracker->GetX(); + vertexKF.Y() = tracker->GetY(); + vertexKF.Z() = tracker->GetZ(); + vertexKF.Covariance(0,0) = tracker->GetSigmaX()*tracker->GetSigmaX(); + vertexKF.Covariance(1,2) = tracker->GetSigmaY()*tracker->GetSigmaY(); + vertexKF.Covariance(2,2) = tracker->GetSigmaZ()*tracker->GetSigmaZ(); + + AliKFParticle elecKF( *(pvertex->GetParamN()) ,11); + AliKFParticle posiKF( *(pvertex->GetParamP()) ,-11); + AliKFParticle pipKF( *(pvertex->GetParamN()) , 211); + AliKFParticle pinKF( *(pvertex->GetParamP()) ,-211); + AliKFParticle protKF( *(pvertex->GetParamP()) ,2212); + AliKFParticle aproKF ( *(pvertex->GetParamN()) ,-2212); + + + // Gamma + AliKFParticle gamKF(elecKF,posiKF); + gamKF.SetProductionVertex(vertexKF); + + Float_t gamKFchi2 = 1000; + if ( gamKF.GetNDF()!=0 ){ + gamKFchi2 = gamKF.GetChi2()/gamKF.GetNDF(); + } + + Float_t massG=0.; + Float_t sigmaMG=0.001; + gamKF.SetMassConstraint(massG,sigmaMG); + + Float_t gamKFchi2C = 1000; + if ( gamKF.GetNDF()!=0 ){ + gamKFchi2C = gamKF.GetChi2()/gamKF.GetNDF(); + } + + //K0 short + AliKFParticle k0KF(pipKF,pinKF); + k0KF.SetProductionVertex(vertexKF); + + Float_t k0KFchi2 = 1000; + if ( k0KF.GetNDF()!=0 ){ + k0KFchi2 = k0KF.GetChi2()/k0KF.GetNDF(); + } + + //Lambda + AliKFParticle lambdaKF(protKF,pinKF); + lambdaKF.SetProductionVertex(vertexKF); + + Float_t lambdaKFchi2 = 1000; + if ( lambdaKF.GetNDF()!=0 ){ + lambdaKFchi2 = lambdaKF.GetChi2()/lambdaKF.GetNDF(); + } + + //Lambda_bar + AliKFParticle alambKF(aproKF,pipKF); + alambKF.SetProductionVertex(vertexKF); + + Float_t alambKFchi2 = 1000; + if ( alambKF.GetNDF()!=0 ){ + alambKFchi2 = alambKF.GetChi2()/alambKF.GetNDF(); + } - AliKFParticle v0KF(negKF,posKF); - Float_t v0KFchi2= v0KF.GetChi2(); - if (pvertex->GetRr()GetRr()>kMaxR) continue; - if (pvertex->GetV0CosineOfPointingAngle()GetRr()GetRr()>kMaxR){ + // cutN=7; + // rejectBase+=1<GetV0CosineOfPointingAngle()GetDist2()>maxDist) continue; - if (pvertex->GetDcaV0Daughters()>maxDist) continue; + + if (pvertex->GetDcaV0Daughters()>maxDist){ + // cutN=9; + // rejectBase+=1<SetLab(0,track0->GetLabel()); //Bo: pvertex->SetLab(1,track1->GetLabel()); pvertex->SetIndex(0,track0->GetESDtrack()->GetID()); @@ -741,7 +901,13 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, // // Likelihood calculations - apply cuts // + + // AM - Comment out for optimization and store the v0OK value + // Int_t v0OK = 0; + // Int_t cutOKN=0; Bool_t v0OK = kTRUE; + + Float_t p12 = pvertex->GetParamP()->GetParameter()[4]*pvertex->GetParamP()->GetParameter()[4]; p12 += pvertex->GetParamN()->GetParameter()[4]*pvertex->GetParamN()->GetParameter()[4]; p12 = TMath::Sqrt(p12); // "mean" momenta @@ -756,18 +922,33 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, // //Bo: Float_t likelihood0 = (TMath::Exp(-pvertex->GetDistNorm())+0.1) *(pvertex->GetDist2()<0.5)*(pvertex->GetDistNorm()<5); Float_t lDistNorm = pvertex->GetDcaV0Daughters()/pvertex->GetDistSigma(); - Float_t likelihood0 = (TMath::Exp(-lDistNorm)+0.1) *(pvertex->GetDcaV0Daughters()<0.5)*(lDistNorm<5); + Float_t likelihood0 = (TMath::Exp(-lDistNorm)+0.1) *(pvertex->GetDcaV0Daughters()GetV0CosineOfPointingAngle())/sigmap)+ 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(4.*sigmap))+ 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(8.*sigmap))+ 0.1*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/0.01); // - if (causalityAGetESDV0Params()->StreamLevel()>0){ @@ -775,8 +956,8 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, cstream<<"It0"<< "Tr0.="<0) continue; + //if (forbidden[itrack0]>0 ||forbidden[itrack1]>0) continue; // pvertex->SetStatus(0); // if (rejectBase) { @@ -808,6 +999,7 @@ void AliITSV0Finder::FindV02(AliESDEvent *event, //Bo: pvertex->SetESDindexes(track0->GetESDtrack()->GetID(),track1->GetESDtrack()->GetID()); pvertex->SetIndex(0,track0->GetESDtrack()->GetID());//Bo: consistency 0 for neg pvertex->SetIndex(1,track1->GetESDtrack()->GetID());//Bo: consistency 1 for pos + // if (v0OK==0){ if (v0OK){ // AliV0vertex vertexjuri(*track0,*track1); // vertexjuri.SetESDindexes(track0->fESDtrack->GetID(),track1->fESDtrack->GetID()); diff --git a/ITS/AliITSV0Finder.h b/ITS/AliITSV0Finder.h index ff6ac450baf..294c1ddf03c 100644 --- a/ITS/AliITSV0Finder.h +++ b/ITS/AliITSV0Finder.h @@ -1,46 +1,46 @@ -#ifndef ALIITSV0FINDER_H -#define ALIITSV0FINDER_H -/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - - -//------------------------------------------------------------------------- -// V0 finder on-the-fly during ITS tracking -// Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch -// Extraction to a separate class: Andrea Dainese -// Current support and development: -//------------------------------------------------------------------------- - -/* $Id$ */ - -class TTree; -class TTreeSRedirector; -class AliESDEvent; -class AliITStrackerMI; - -//------------------------------------------------------------------------- -class AliITSV0Finder : public TObject { -public: - AliITSV0Finder(); - virtual ~AliITSV0Finder(); - - //try to find V0 - static void FindV02(AliESDEvent *event,AliITStrackerMI *tracker); - //try to refit V0's - static void RefitV02(const AliESDEvent *event,AliITStrackerMI *tracker); - //try to update, or reject TPC V0s - static void UpdateTPCV0(const AliESDEvent *event,AliITStrackerMI *tracker); - - TTreeSRedirector *GetDebugStreamer() {return fDebugStreamer;} - - TTreeSRedirector *fDebugStreamer; //!debug streamer - - -private: - - AliITSV0Finder(const AliITSV0Finder & itsV0finder); - AliITSV0Finder & operator=(const AliITSV0Finder & itsV0finder); - - ClassDef(AliITSV0Finder,0) // on-the-fly V0 finder for AliITStrackerMI -}; -#endif +#ifndef ALIITSV0FINDER_H +#define ALIITSV0FINDER_H +/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + + +//------------------------------------------------------------------------- +// V0 finder on-the-fly during ITS tracking +// Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch +// Extraction to a separate class: Andrea Dainese +// Current support and development: +//------------------------------------------------------------------------- + +/* $Id$ */ + +class TTree; +class TTreeSRedirector; +class AliESDEvent; +class AliITStrackerMI; + +//------------------------------------------------------------------------- +class AliITSV0Finder : public TObject { +public: + AliITSV0Finder(); + //AliITSV0Finder(const AliITSV0Finder &/*v0Finder*/) {;} + //AliITSV0Finder & operator=(const AliITSV0Finder &/*v0Finder*/) {;} + + virtual ~AliITSV0Finder(); + + //try to find V0 + static void FindV02(AliESDEvent *event,AliITStrackerMI *tracker); + //try to refit V0's + static void RefitV02(const AliESDEvent *event,AliITStrackerMI *tracker); + //try to update, or reject TPC V0s + static void UpdateTPCV0(const AliESDEvent *event,AliITStrackerMI *tracker); + + TTreeSRedirector *GetDebugStreamer() {return fDebugStreamer;} + + TTreeSRedirector *fDebugStreamer; //!debug streamer + + +private: + + ClassDef(AliITSV0Finder,0) // on-the-fly V0 finder for AliITStrackerMI +}; +#endif diff --git a/STEER/AliESDV0Params.cxx b/STEER/AliESDV0Params.cxx index d47ee034d30..9517a4d19e7 100644 --- a/STEER/AliESDV0Params.cxx +++ b/STEER/AliESDV0Params.cxx @@ -31,7 +31,7 @@ ClassImp(AliESDV0Params) -Int_t AliESDV0Params::fgStreamLevel = 0; // stream (debug) level + AliESDV0Params::AliESDV0Params() : @@ -66,7 +66,61 @@ AliESDV0Params::AliESDV0Params() : fPMinAP0(0.003), fPMinFractionD0(0.5), fPMaxFractionD0(1.5), - fPMinD0(0.05) + fPMinD0(0.05), + fkMaxDist0(0.1), + fkMaxDist1(0.1), + fkMaxDist(1.), + fkMinPointAngle(0.85), + fkMinPointAngle2(0.99), + fkMinR(0.5), + fkMaxR(220.), + fkMinPABestConst(0.9999), + fkMaxRBestConst(10.), + fkCausality0Cut(0.19), + fkLikelihood01Cut(0.45), + fkLikelihood1Cut(0.5), + fkCombinedCut(0.55), + fkMinClFullTrk(5.0), + fkMinTgl0(1.05), + + fkMinClForb0(4.5), + fkMinRTgl0(40.), + fkMinNormDistForbTgl0(3.0), + fkMinNormDistForb1(3.0), + fkMinNormDistForb2(2.0), + fkMinNormDistForb3(1.0), + fkMinNormDistForb4(4.0), + fkMinNormDistForb5(5.0), + + fkMinRTPCdensity(40.), + fkMaxRTPCdensity0(110.), + fkMaxRTPCdensity10(120.), + fkMaxRTPCdensity20(130.), + fkMaxRTPCdensity30(140.), + + fkMinTPCdensity(0.6), + fkMinTgl1(1.1), + fkMinTgl2(1.), + fkMinchi2before0(16.), + fkMinchi2before1(16.), + fkMinchi2after0(16.), + fkMinchi2after1(16.), + fkAddchi2SharedCl(18.), + fkAddchi2NegCl0(25.), + fkAddchi2NegCl1(30.), + + fkSigp0Par0(0.0001), + fkSigp0Par1(0.001), + fkSigp0Par2(0.1), + fkSigpPar0(0.5), + fkSigpPar1(0.6), + fkSigpPar2(0.4), + fkMaxDcaLh0(0.5), + + fkChi2KF(100.), + fkRobustChi2KF(100.), + fgStreamLevel(0) + // { diff --git a/STEER/AliESDV0Params.h b/STEER/AliESDV0Params.h index 608995330a9..9cb6ed94bcc 100644 --- a/STEER/AliESDV0Params.h +++ b/STEER/AliESDV0Params.h @@ -24,12 +24,31 @@ class AliESDV0Params : public TObject{ void SetMinPointAngle2(Float_t kMinPointAngle2=0.99){fkMinPointAngle2=kMinPointAngle2;} void SetMinR(Float_t kMinR= 0.5){fkMinR= kMinR;} void SetMaxR(Float_t kMaxR= 220.){fkMaxR= kMaxR;} + void SetMinPABestConst(Float_t kMinPABestConst= 0.9999){fkMinPABestConst= kMinPABestConst;} + void SetMaxRBestConst(Float_t kMaxRBestConst= 10.){fkMaxRBestConst= kMaxRBestConst;} + void SetCausality0Cut(Float_t kCausality0Cut= 0.19){fkCausality0Cut= kCausality0Cut;} void SetLikelihood01Cut(Float_t kLikelihood01Cut = 0.45) {fkLikelihood01Cut=kLikelihood01Cut;} void SetLikelihood1Cut(Float_t kLikelihood1Cut = 0.5) {fkLikelihood1Cut=kLikelihood1Cut;} void SetCombinedCut(Float_t kCombinedCut= 0.55) {fkCombinedCut=kCombinedCut;} void SetMinClFullTrk(Float_t kMinClFullTrk=5.0){fkMinClFullTrk=kMinClFullTrk;} void SetMinTgl0(Float_t kMinTgl0=1.05){fkMinTgl0=kMinTgl0;} + void SetMinRTgl0(Float_t kMinRTgl0=40.0){fkMinRTgl0=kMinRTgl0;} + + void SetMinNormDistForbTgl0(Float_t kMinNormDistForbTgl0=3.0){fkMinNormDistForbTgl0=kMinNormDistForbTgl0;} + void SetMinClForb0(Float_t kMinClForb0=4.5){fkMinClForb0=kMinClForb0;} + void SetMinNormDistForb1(Float_t kMinNormDistForb1=3.0){fkMinNormDistForb1=kMinNormDistForb1;} + void SetMinNormDistForb2(Float_t kMinNormDistForb2=2.0){fkMinNormDistForb2=kMinNormDistForb2;} + void SetMinNormDistForb3(Float_t kMinNormDistForb3=1.0){fkMinNormDistForb3=kMinNormDistForb3;} + void SetMinNormDistForb4(Float_t kMinNormDistForb4=4.0){fkMinNormDistForb4=kMinNormDistForb4;} + void SetMinNormDistForb5(Float_t kMinNormDistForb5=5.0){fkMinNormDistForb5=kMinNormDistForb5;} + + void SetMinRTPCdensity(Float_t kMinRTPCdensity=40.0){fkMinRTPCdensity=kMinRTPCdensity;} + void SetMaxRTPCdensity0( Float_t kMaxRTPCdensity0=110.0){fkMaxRTPCdensity0=kMaxRTPCdensity0;} + void SetMaxRTPCdensity10(Float_t kMaxRTPCdensity10=120.0){fkMaxRTPCdensity10=kMaxRTPCdensity10;} + void SetMaxRTPCdensity20(Float_t kMaxRTPCdensity20=130.0){fkMaxRTPCdensity20=kMaxRTPCdensity20;} + void SetMaxRTPCdensity30(Float_t kMaxRTPCdensity30=140.0){fkMaxRTPCdensity30=kMaxRTPCdensity30;} + void SetMinTPCdensity(Float_t kMinTPCdensity=0.6){fkMinTPCdensity=kMinTPCdensity;} void SetMinTgl1(Float_t kMinTgl1=1.1){fkMinTgl1=kMinTgl1;} void SetMinTgl2(Float_t kMinTgl2=1.){fkMinTgl1=kMinTgl2;} @@ -47,6 +66,8 @@ class AliESDV0Params : public TObject{ void SetSigpPar0(Float_t kSigpPar0=0.5){fkSigpPar0=kSigpPar0;} void SetSigpPar1(Float_t kSigpPar1=0.6){fkSigpPar1=kSigpPar1;} void SetSigpPar2(Float_t kSigpPar2=0.4){fkSigpPar2=kSigpPar2;} + void SetMaxDcaLh0(Float_t kMaxDcaLh0=0.5) {fkMaxDcaLh0=kMaxDcaLh0;} + void SetChi2KF(Float_t kChi2KF=100.){fkChi2KF=kChi2KF;} void SetRobustChi2KF(Float_t kRobustChi2KF=100.){fkRobustChi2KF=kRobustChi2KF;} @@ -58,12 +79,30 @@ class AliESDV0Params : public TObject{ Float_t GetMinPointAngle2() const {return fkMinPointAngle2;} Float_t GetMinR() const {return fkMinR;} Float_t GetMaxR() const {return fkMaxR;} + Float_t GetMinPABestConst() const {return fkMinPABestConst;} + Float_t GetMaxRBestConst() const {return fkMaxRBestConst;} Float_t GetCausality0Cut() const {return fkCausality0Cut;} Float_t GetLikelihood01Cut() const {return fkLikelihood01Cut;} Float_t GetLikelihood1Cut() const {return fkLikelihood1Cut;} Float_t GetCombinedCut() const {return fkCombinedCut;} Float_t GetMinClFullTrk() const {return fkMinClFullTrk;} Float_t GetMinTgl0() const {return fkMinTgl0;} + Float_t GetMinRTgl0() const {return fkMinRTgl0;} + + Float_t GetMinNormDistForbTgl0() const {return fkMinNormDistForbTgl0;} + Float_t GetMinClForb0() const {return fkMinClForb0;} + Float_t GetMinNormDistForb1() const {return fkMinNormDistForb1;} + Float_t GetMinNormDistForb2() const {return fkMinNormDistForb2;} + Float_t GetMinNormDistForb3() const {return fkMinNormDistForb3;} + Float_t GetMinNormDistForb4() const {return fkMinNormDistForb4;} + Float_t GetMinNormDistForb5() const {return fkMinNormDistForb5;} + + Float_t GetMinRTPCdensity() const {return fkMinRTPCdensity;} + Float_t GetMaxRTPCdensity0() const {return fkMaxRTPCdensity0;} + Float_t GetMaxRTPCdensity10() const {return fkMaxRTPCdensity10;} + Float_t GetMaxRTPCdensity20() const {return fkMaxRTPCdensity20;} + Float_t GetMaxRTPCdensity30() const {return fkMaxRTPCdensity30;} + Float_t GetMinTPCdensity() const {return fkMinTPCdensity;} Float_t GetMinTgl1() const {return fkMinTgl1;} Float_t GetMinTgl2() const {return fkMinTgl2;} @@ -80,12 +119,14 @@ class AliESDV0Params : public TObject{ Float_t GetSigpPar0() const{return fkSigpPar0;} Float_t GetSigpPar1() const{return fkSigpPar1;} Float_t GetSigpPar2() const{return fkSigpPar2;} + Float_t GetMaxDcaLh0() const{return fkMaxDcaLh0;} + Float_t GetChi2KF() const{return fkChi2KF;} Float_t GetRobustChi2KF() const{return fkRobustChi2KF;} - static Int_t StreamLevel() { return fgStreamLevel;} - static void SetStreamLevel(Int_t level) { fgStreamLevel = level;} - static Int_t fgStreamLevel; // flag for streaming - for ITS V0 + Int_t StreamLevel() { return fgStreamLevel;} + void SetStreamLevel(Int_t level=0) { fgStreamLevel = level;} + private: Double_t fPSigmaOffsetD0; // sigma offset DCA @@ -122,12 +163,30 @@ class AliESDV0Params : public TObject{ Float_t fkMinPointAngle2; Float_t fkMinR; Float_t fkMaxR; + Float_t fkMinPABestConst; + Float_t fkMaxRBestConst; Float_t fkCausality0Cut; Float_t fkLikelihood01Cut; Float_t fkLikelihood1Cut; Float_t fkCombinedCut; Float_t fkMinClFullTrk; Float_t fkMinTgl0; + + Float_t fkMinClForb0; + Float_t fkMinRTgl0; + Float_t fkMinNormDistForbTgl0; + Float_t fkMinNormDistForb1; + Float_t fkMinNormDistForb2; + Float_t fkMinNormDistForb3; + Float_t fkMinNormDistForb4; + Float_t fkMinNormDistForb5; + + Float_t fkMinRTPCdensity; + Float_t fkMaxRTPCdensity0; + Float_t fkMaxRTPCdensity10; + Float_t fkMaxRTPCdensity20; + Float_t fkMaxRTPCdensity30; + Float_t fkMinTPCdensity; Float_t fkMinTgl1; Float_t fkMinTgl2; @@ -145,10 +204,11 @@ class AliESDV0Params : public TObject{ Float_t fkSigpPar0; Float_t fkSigpPar1; Float_t fkSigpPar2; + Float_t fkMaxDcaLh0; Float_t fkChi2KF; Float_t fkRobustChi2KF; - + Int_t fgStreamLevel; // flag for streaming - for ITS V0