]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - JETAN/AliJetAODReader.cxx
fix memory leak and funny multiplicity
[u/mrichter/AliRoot.git] / JETAN / AliJetAODReader.cxx
index bb286315b2930beeae0a7a00384df0b648251f57..89c7d622f5772b7e65c23fd9f5c32e4b3305935a 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>
 //------------------------------------------------------------------------- 
 
@@ -91,7 +94,7 @@ void AliJetAODReader::OpenInputFiles()
   
   int nMax = fChain->GetEntries(); 
 
-  printf("\n AliJetAODReader: Total number of events in chain= %d \n",nMax);
+  if(fDebug>1)printf("\n AliJetAODReader::OpenInputFiles Total number of events in chain= %d \n",nMax);
   
   // set number of events in header
   if (fReaderHeader->GetLastEvent() == -1)
@@ -110,7 +113,7 @@ void AliJetAODReader::ConnectTree(TTree* tree, TObject* /*data*/) {
      fChain = (TChain*)      tree;
      
      Int_t nMax = fChain->GetEntries(); 
-     printf("\n AliJetAODReader: Total number of events in chain= %5d \n", nMax);
+     if(fDebug>1)printf("\n AliJetAODReader::ConnectTree Total number of events in chain= %5d \n", nMax);
      // set number of events in header
      if (fReaderHeader->GetLastEvent() == -1)
         fReaderHeader->SetLastEvent(nMax);
@@ -122,10 +125,11 @@ void AliJetAODReader::ConnectTree(TTree* tree, TObject* /*data*/) {
 
 //____________________________________________________________________________
 
-Bool_t AliJetAODReader::FillMomentumArray(Int_t /*event*/)
+Bool_t AliJetAODReader::FillMomentumArray()
 {
   // Clear momentum array
   ClearArray();
+  fRef->Clear();
   fDebug = fReaderHeader->GetDebug();
   
   if (!fAOD) {
@@ -134,7 +138,7 @@ Bool_t AliJetAODReader::FillMomentumArray(Int_t /*event*/)
   
   // get number of tracks in event (for the loop)
   Int_t nt = fAOD->GetNTracks();
-  printf("Fill Momentum Array %5d ", nt);
+  if(fDebug>2)printf(" AliJetAODReader::FillMomentumArray AOD tracks: %5d \t", nt);
   
   // temporary storage of signal and pt cut flag
   Int_t* sflag  = new Int_t[nt];
@@ -144,28 +148,38 @@ Bool_t AliJetAODReader::FillMomentumArray(Int_t /*event*/)
   Float_t ptMin =  fReaderHeader->GetPtCut();
   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;
   TVector3 p3;
+
   for (Int_t it = 0; it < nt; it++) {
-      AliAODTrack *track = fAOD->GetTrack(it);
-
-      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 ( 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());
-         fRef->Add(track);
+    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 ( (eta > etaMax) || (eta < etaMin)) continue;      // checking eta cut
+
+    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);
   }
+  if(fDebug>2)printf("Used AOD tracks: %5d \n", aodTrack);
   // set the signal flags
   fSignalFlag.Set(aodTrack,sflag);
   fCutFlag.Set(aodTrack,cflag);
 
+  delete [] sflag;
+  delete [] cflag;
+  
   return kTRUE;
 }