X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=JETAN%2FAliDAJetFinder.cxx;h=16685f22930191e0c6a0f8c5dd981c5de8cdc57f;hb=d8a0be371a169cec5e84a3003c6973c481ac3e71;hp=c3d2cf7cdd999678ac6d3aac169d3ab6d43a6e89;hpb=36b5cc432513476c9e6a681e2f0dccfc6790207b;p=u%2Fmrichter%2FAliRoot.git diff --git a/JETAN/AliDAJetFinder.cxx b/JETAN/AliDAJetFinder.cxx index c3d2cf7cdd9..16685f22930 100644 --- a/JETAN/AliDAJetFinder.cxx +++ b/JETAN/AliDAJetFinder.cxx @@ -22,7 +22,7 @@ //----------------------------------------------------------------------------------- #include -#include +#include #include #include "AliJetReaderHeader.h" #include "AliJetReader.h" @@ -43,7 +43,8 @@ AliDAJetFinder::AliDAJetFinder(): fNloopMax(100), fBeta(0.1), fNclustMax(0), - fNin(0) + fNin(0), + fNeff(0) { // Constructor } @@ -60,16 +61,23 @@ void AliDAJetFinder::FindJets() // Find the jets in current event // Float_t betaStop=100.; + fDebug = fHeader->GetDebug(); Double_t dEtSum=0; Double_t *xData[2]; - TVectorD *vPx = new TVectorD(); - TVectorD *vPy = new TVectorD(); - TMatrixD *mPyx= new TMatrixD(); - TMatrixD *mY = new TMatrixD(); + TVectorD *vPx = new TVectorD(); + TVectorD *vPy = new TVectorD(); + TMatrixD *mPyx= new TMatrixD(); + TMatrixD *mY = new TMatrixD(); InitDetAnn(dEtSum,xData,vPx,vPy,mPyx,mY); - if (!fNin) return; - + if (fNin < fNclustMax){ + delete [] xData[0], delete [] xData[1]; + delete vPx; + delete vPy; + delete mPyx; + delete mY; + return; + } Int_t nc=1, nk; DoubleClusters(nc,nk,vPy,mY); do{ //loop over beta @@ -78,7 +86,9 @@ void AliDAJetFinder::FindJets() NumCl(nc,nk,vPy,mPyx,mY); }while((fBetaGetMomentumArray(); - fNin = lvArray->GetEntries(); - fNclustMax= ((AliDAJetHeader*)fHeader)->GetFixedCl() ? + fNclustMax = ((AliDAJetHeader*)fHeader)->GetFixedCl() ? ((AliDAJetHeader*)fHeader)->GetNclustMax() : TMath::Max((Int_t)TMath::Sqrt(fNin),5); - Double_t *xEta = new Double_t[fNin]; - Double_t *xPhi = new Double_t[fNin]; + Float_t etaEff = ((AliDAJetHeader*)fHeader)->GetEtaEff(); + TClonesArray *lvArray = fReader->GetMomentumArray(); + Int_t nEntr = lvArray->GetEntries(); + fNin=0; + for (Int_t iEn=0; iEnGetCutFlag(iEn)==1) fNin++; + + fNeff = ((AliDAJetHeader*)fHeader)->GetNeff(); + fNeff = TMath::Max(fNeff,fNin); + Double_t *xEta = new Double_t[fNeff]; + Double_t *xPhi = new Double_t[fNeff]; xData[0]=xEta; xData[1]=xPhi; - vPx->ResizeTo(fNin); - for (Int_t iIn=0; iInAt(iIn); + vPx->ResizeTo(fNeff); + Int_t iIn=0; + for (Int_t iEn=0; iEnGetCutFlag(iEn)==0) continue; + TLorentzVector *lv=(TLorentzVector*)lvArray->At(iEn); xEta[iIn] = lv->Eta(); xPhi[iIn] = lv->Phi()<0 ? lv->Phi() + 2*TMath::Pi() : lv->Phi(); (*vPx)(iIn)=lv->Pt(); dEtSum+=(*vPx)(iIn); + iIn++; } - for (Int_t iIn=0; iInResizeTo(fNin,njdim); + mPyx->ResizeTo(fNeff,njdim); mY->ResizeTo(4,njdim); vPy->ResizeTo(njdim); mY->Zero();mPyx->Zero();vPy->Zero(); (*vPy)(0)=1; TMatrixDColumn(*mPyx,0)=1; Double_t ypos=0,xpos=0; - for (Int_t iIn=0; iIn0) ? atan2(ypos,xpos) : atan2(ypos,xpos)+2*TMath::Pi(); - lvArray->Delete(); } //----------------------------------------------------------------------------------- -void AliDAJetFinder::DoubleClusters(Int_t nc,Int_t &nk,TVectorD *vPy,TMatrixD *mY) +void AliDAJetFinder::DoubleClusters(Int_t nc,Int_t &nk, TVectorD *vPy, TMatrixD *mY) const { +// Return double clusters for(Int_t iClust=0; iClustGetReaderHeader()->GetFiducialEtaMax(),pi}; @@ -178,7 +205,7 @@ void AliDAJetFinder::Annealing(Int_t nk,Double_t **xData,TVectorD *vPx,TVectorD do{ //recalculate conditional probabilities nloop++; - for (Int_t iIn=0; iIn= fNclustMax) growcl=false; //recalculate the nc distinct codevectors - TMatrixD *pyx = new TMatrixD(fNin,2*nc); + TMatrixD *pyx = new TMatrixD(fNeff,2*nc); TVectorD *py = new TVectorD(nk); TMatrixD *y1 = new TMatrixD(3,nk); for (Int_t iClust=0; iClust nk/2){ for (Int_t iClust=0; iClustZero(); mPyx->Zero(); vPy->Zero(); @@ -374,26 +406,32 @@ void AliDAJetFinder::EndDetAnn(Int_t &nk,Double_t **xData,Int_t *xx,Double_t etx } //----------------------------------------------------------------------------------- -void AliDAJetFinder::StoreJets(Int_t nk,Double_t **xData,Int_t *xx,TMatrixD *mY) +void AliDAJetFinder::StoreJets(Int_t nk, Double_t **xData, Int_t *xx, TMatrixD *mY) { //evaluate significant clusters properties const Double_t pi=TMath::Pi(); AliJetReaderHeader *rHeader=fReader->GetReaderHeader(); - Float_t dFiducialEta=rHeader->GetFiducialEtaMax()-rHeader->GetFiducialEtaMin(); - Double_t dMeanDist=TMath::Sqrt(2*dFiducialEta*pi/fNin); - Double_t *xEta = xData[0]; - Double_t *xPhi = xData[1]; + Float_t dFidEtaMax = rHeader->GetFiducialEtaMax(); + Float_t dFidEtaMin = rHeader->GetFiducialEtaMin(); + Float_t dFiducialEta= dFidEtaMax - dFidEtaMin; + Double_t *xEta = xData[0]; + Double_t *xPhi = xData[1]; + Int_t nEff = 0; + for (Int_t i=0; idFidEtaMin) nEff++; + Double_t dMeanDist=0.; + if (nEff > 0) + dMeanDist=TMath::Sqrt(2*dFiducialEta*pi/nEff); Bool_t *isJet = new Bool_t[nk]; Double_t *etNoBg= new Double_t[nk]; Double_t *dDeltaEta=new Double_t[nk]; Double_t *dDeltaPhi=new Double_t[nk]; Double_t *surf = new Double_t[nk]; Double_t *etDens= new Double_t[nk]; - for (Int_t iClust=0; iClustdFidEtaMax || xEta[iIn] dEtaMax) dEtaMax=xEta[iIn]; Double_t dPhi=xPhi[iIn]-(*mY)(1,iClust); @@ -410,12 +448,12 @@ void AliDAJetFinder::StoreJets(Int_t nk,Double_t **xData,Int_t *xx,TMatrixD *mY) if (((AliDAJetHeader*)fHeader)->GetSelJets()){ for (Int_t iClust=0; iClustdFidEtaMin){ Double_t etDensMed=0.; Double_t etDensSqr=0.; Int_t norm=0; for (Int_t iClust1=0; iClust1dFidEtaMin){ etDensMed+=etDens[iClust1]; etDensSqr+=TMath::Power(etDens[iClust1],2); norm++; @@ -445,34 +483,47 @@ void AliDAJetFinder::StoreJets(Int_t nk,Double_t **xData,Int_t *xx,TMatrixD *mY) } } } else { - for (Int_t iClust=0; iClustClassName(),"AliJetAODReader"); if (fromAod) refs = fReader->GetReferences(); for (Int_t iClust=0; iClustAt(iIn)); + if (fromAod){ + Int_t iIn=0; + Int_t nEntr = fReader->GetMomentumArray()->GetEntries(); + for (Int_t iEn=0; iEnGetCutFlag(iEn)==0) continue; + if (xx[iIn]==iCl) jet.AddTrack(refs->At(iEn)); + iIn++; + } + } AddJet(jet); - printf("jet %d, Eta: %f, Phi: %f, Et: %f\n",iClust,jet.Eta(),jet.Phi(),jet.Pt()); + if (fDebug > 0) printf("jet %d, Eta: %f, Phi: %f, Et: %f\n",iCl,jet.Eta(),jet.Phi(),jet.Pt()); } } delete [] dDeltaEta; delete [] dDeltaPhi; delete [] etNoBg; delete [] isJet; - delete [] inJet; + delete [] iSort; } //-----------------------------------------------------------------------------------