]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - JETAN/AliJetESDReader.cxx
Additional protection
[u/mrichter/AliRoot.git] / JETAN / AliJetESDReader.cxx
index 956bb063ae765af6737edb14d68ae4f6b481497a..a2988d26ee1bc399aeb3a05335ef778b5743f22d 100755 (executable)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
  
-//
 // Jet ESD Reader 
 // ESD reader for jet analysis
-// Author: Mercedes Lopez Noriega 
-// mercedes.lopez.noriega@cern.ch
-//
-
+// Author: Mercedes Lopez Noriega (mercedes.lopez.noriega@cern.ch)
 
 #include <Riostream.h>
 #include <TSystem.h>
 #include <TLorentzVector.h>
+#include <TVector3.h>
 #include "AliJetESDReader.h"
 #include "AliJetESDReaderHeader.h"
 #include "AliESD.h"
@@ -34,7 +31,7 @@ ClassImp(AliJetESDReader)
 AliJetESDReader::AliJetESDReader()
 {
   // Constructor    
-
+  printf("\nIn reader constructor\n");
   fReaderHeader = 0x0;
   fMass = 0;
   fSign = 0;
@@ -45,14 +42,14 @@ AliJetESDReader::AliJetESDReader()
 AliJetESDReader::~AliJetESDReader()
 {
   // Destructor
-  delete fReaderHeader;
 }
 
 //____________________________________________________________________________
 
 void AliJetESDReader::OpenInputFiles()
-
 {
+  // Open input files
+  printf("\nOpening files\n");
   // chain for the ESDs
   fChain   = new TChain("esdTree");
   fChainMC = new TChain("mcStackTree");
@@ -69,8 +66,8 @@ void AliJetESDReader::OpenInputFiles()
       printf("Adding %s\n",name);
       char path[256];
       sprintf(path,"%s/%s",dirName,name);
-      fChain->AddFile(path,-1,"esdTree");
-      fChainMC->AddFile(path,-1,"mcStackTree");
+      fChain->AddFile(path,-1);
+      fChainMC->AddFile(path,-1);
      }
   }
 
@@ -95,42 +92,58 @@ void AliJetESDReader::OpenInputFiles()
 
 void AliJetESDReader::FillMomentumArray(Int_t event)
 {
-// Fills the momentum array
+  // Fill the momentum array for each track
   Int_t goodTrack = 0;
   Int_t nt = 0;
-  Float_t pt;
-  Double_t p[3]; // track 3 momentum vector
+  Float_t pt, eta;
+  TVector3 p3;
 
   // clear momentum array
   ClearArray();
+
   // get event from chain
   fChain->GetEntry(event);
   fChainMC->GetEntry(event);
+
   // get number of tracks in event (for the loop)
   nt = fESD->GetNumberOfTracks();
+ // temporary storage of signal and pt cut flag
+  Int_t* sflag  = new Int_t[nt];
+  Int_t* cflag  = new Int_t[nt];
+
   // get cuts set by user
-  Float_t ptMin = ((AliJetESDReaderHeader*) fReaderHeader)->GetPtCut();
+  Float_t ptMin = fReaderHeader->GetPtCut();
+  Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
+  Float_t etaMax = fReaderHeader->GetFiducialEtaMax();  
 
   //loop over tracks
   for (Int_t it = 0; it < nt; it++) {
       AliESDtrack *track = fESD->GetTrack(it);
       UInt_t status = track->GetStatus();
-      if ((status & AliESDtrack::kITSrefit) == 0) continue; // quality check
-
-      if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly() && TMath::Abs(track->GetLabel()) > 10000)  continue;
-    
-      track->GetPxPyPz(p);
-      pt = TMath::Sqrt(p[0] * p[0] + p[1] * p[1]); // pt of the track
-
-      if (pt < ptMin) continue; //check  cuts 
-
-      new ((*fMomentumArray)[goodTrack]) 
-         TLorentzVector(p[0], p[1], p[2],
-                        TMath::Sqrt(pt * pt +p[2] * p[2]));
+      p3 = track->P3();
+      pt = p3.Pt();
+      if (((status & AliESDtrack::kITSrefit) == 0) ||
+         ((status & AliESDtrack::kTPCrefit) == 0)) continue;    // quality check
+      if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly() 
+         && TMath::Abs(track->GetLabel()) > 10000)  continue;   // quality check
+      if (((AliJetESDReaderHeader*) fReaderHeader)->ReadBkgdOnly() 
+         && TMath::Abs(track->GetLabel()) < 10000)  continue;   // quality check
+      eta = p3.Eta();
+      if ( (eta > etaMax) || (eta < etaMin)) continue;           // checking eta cut
+
+      new ((*fMomentumArray)[goodTrack]) TLorentzVector(p3,p3.Mag());
+      sflag[goodTrack]=0;
+      if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
+      cflag[goodTrack]=0;
+      if (pt > ptMin) cflag[goodTrack]=1;                       // pt cut
       goodTrack++;
   }
+  // set the signal flags
+  fSignalFlag.Set(goodTrack,sflag);
+  fCutFlag.Set(goodTrack,cflag);
 
-  printf("\nIn event %d, number of good tracks %d \n", event, goodTrack);
+  //printf("\nIn event %d, number of good tracks %d \n", event, goodTrack);
 }