Updates for correct use of cut flag. (D. Perrino)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 10 Aug 2008 09:23:16 +0000 (09:23 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 10 Aug 2008 09:23:16 +0000 (09:23 +0000)
JETAN/AliDAJetFinder.cxx
JETAN/AliJetAODReader.cxx

index c3d2cf7cdd999678ac6d3aac169d3ab6d43a6e89..19919c6400b79395947d0f02e95c6470f686ede2 100644 (file)
@@ -96,21 +96,26 @@ void AliDAJetFinder::InitDetAnn(Double_t &dEtSum,Double_t **xData,TVectorD *vPx,
 {
 //Initialise the variables used by the algorithm
        fBeta=0.1;
-       TClonesArray *lvArray = fReader->GetMomentumArray();
-       fNin = lvArray->GetEntries();
        fNclustMax= ((AliDAJetHeader*)fHeader)->GetFixedCl() ? 
            ((AliDAJetHeader*)fHeader)->GetNclustMax() : 
            TMath::Max((Int_t)TMath::Sqrt(fNin),5);
+       TClonesArray *lvArray = fReader->GetMomentumArray();
+       Int_t nEntr = lvArray->GetEntries();
+       fNin=0;
+       for (Int_t iEn=0; iEn<nEntr; iEn++) if (fReader->GetCutFlag(iEn)==1) fNin++;
        Double_t *xEta = new Double_t[fNin];
-    Double_t *xPhi = new Double_t[fNin];
+       Double_t *xPhi = new Double_t[fNin];
        xData[0]=xEta; xData[1]=xPhi;
        vPx->ResizeTo(fNin);
-       for (Int_t iIn=0; iIn<fNin; iIn++){
-               TLorentzVector *lv=(TLorentzVector*)lvArray->At(iIn);
+       Int_t iIn=0;
+       for (Int_t iEn=0; iEn<nEntr; iEn++){
+               if (fReader->GetCutFlag(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; iIn<fNin; iIn++) (*vPx)(iIn)=(*vPx)(iIn)/dEtSum;
 
@@ -128,7 +133,6 @@ void AliDAJetFinder::InitDetAnn(Double_t &dEtSum,Double_t **xData,TVectorD *vPx,
                xpos+=(*vPx)(iIn)*TMath::Cos(xPhi[iIn]);
        }
        (*mY)(1,0)=(atan2(ypos,xpos)>0) ? atan2(ypos,xpos) : atan2(ypos,xpos)+2*TMath::Pi();
-       lvArray->Delete();
 }
 
 //-----------------------------------------------------------------------------------
@@ -463,8 +467,15 @@ void AliDAJetFinder::StoreJets(Int_t nk,Double_t **xData,Int_t *xx,TMatrixD *mY)
                        pz = (*mY)(3,iClust)/TMath::Tan(2.0 * TMath::ATan(TMath::Exp(-(*mY)(0,iClust))));
                        en = TMath::Sqrt(px * px + py * py + pz * pz);
                        AliAODJet jet(px, py, pz, en);
-                       if (fromAod) 
-                           for (Int_t iIn=0; iIn<fNin; iIn++) if (xx[iIn]==iClust) jet.AddTrack(refs->At(iIn));
+                       if (fromAod){
+                               Int_t iIn=0;
+                               Int_t nEntr = fReader->GetMomentumArray()->GetEntries();
+                               for (Int_t iEn=0; iEn<nEntr; iEn++){
+                                       if (fReader->GetCutFlag(iEn)==0) continue;
+                                       if (xx[iIn]==iClust) 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());
                }
index 0a2a479a113e0c32ec19afd360c8e78d20943c87..db9358d0311461ddc85deb5d629c7f9de96698db 100644 (file)
@@ -16,6 +16,9 @@
 //------------------------------------------------------------------------- 
 // Jet AOD Reader 
 // AOD reader for jet analysis
+// This is the reader which must be used if the jet analysis task
+// is executed after the ESD filter task, in order to read its output
+//
 // Author: Davide Perrino <davide.perrino@cern.ch>
 //------------------------------------------------------------------------- 
 
@@ -126,6 +129,7 @@ Bool_t AliJetAODReader::FillMomentumArray()
 {
   // Clear momentum array
   ClearArray();
+  fRef->Clear();
   fDebug = fReaderHeader->GetDebug();
   
   if (!fAOD) {
@@ -134,7 +138,7 @@ Bool_t AliJetAODReader::FillMomentumArray()
   
   // get number of tracks in event (for the loop)
   Int_t nt = fAOD->GetNTracks();
-  printf("AOD tracks: %5d ", nt);
+  printf("AOD tracks: %5d \t", nt);
   
   // temporary storage of signal and pt cut flag
   Int_t* sflag  = new Int_t[nt];
@@ -145,6 +149,7 @@ Bool_t AliJetAODReader::FillMomentumArray()
   Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
   Float_t etaMax = fReaderHeader->GetFiducialEtaMax();  
   UInt_t  filterMask =  ((AliJetAODReaderHeader*)fReaderHeader)->GetTestFilterMask();
+
   //loop over tracks
   Int_t aodTrack = 0;
   Float_t pt, eta;
@@ -152,20 +157,23 @@ Bool_t AliJetAODReader::FillMomentumArray()
 
   for (Int_t it = 0; it < nt; it++) {
     AliAODTrack *track = fAOD->GetTrack(it);
+    UInt_t status = track->GetStatus();
     
     Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
     p3.SetXYZ(mom[0],mom[1],mom[2]);
     pt = p3.Pt();
     eta = p3.Eta();
+    if (status == 0) continue;
     if((filterMask>0)&&!(track->TestFilterBit(filterMask)))continue;
-    if ( pt < ptMin )                      continue;      // checking pt  cut
     if ( (eta > etaMax) || (eta < etaMin)) continue;      // checking eta cut
-    sflag[aodTrack]=1;
-    cflag[aodTrack]=1;
-    new ((*fMomentumArray)[aodTrack++]) TLorentzVector(p3,p3.Mag());
+
+    new ((*fMomentumArray)[aodTrack]) TLorentzVector(p3,p3.Mag());
+    sflag[aodTrack] = (TMath::Abs(track->GetLabel()) < 10000) ? 1 : 0;
+    cflag[aodTrack] = ( pt > ptMin ) ? 1: 0;
+    aodTrack++;
     fRef->Add(track);
   }
-  printf("Used AOD tracks: %5d ", aodTrack);
+  printf("Used AOD tracks: %5d \n", aodTrack);
   // set the signal flags
   fSignalFlag.Set(aodTrack,sflag);
   fCutFlag.Set(aodTrack,cflag);