]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/EMCALJetTasks/AliJetEmbeddingFromAODTask.cxx
temporary patch to catch undermined runnumbers
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliJetEmbeddingFromAODTask.cxx
index 24fb62269817c6398132a4e2223356d5693ff7ee..c2e95a47f90bcef3d8cfd3dfec0c1cceb0014f68 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: AliJetEmbeddingFromAODTask.cxx $
+// $Id$
 //
 // Jet embedding from AOD task.
 //
@@ -39,6 +39,7 @@
 #include "AliFJWrapper.h"
 #include "AliLog.h"
 #include "AliInputEventHandler.h"
+#include "AliNamedString.h"
 
 ClassImp(AliJetEmbeddingFromAODTask)
 
@@ -54,10 +55,11 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask() :
   fAODClusName(),
   fAODCellsName(),
   fAODMCParticlesName(),
-  fMinCentrality(0),
-  fMaxCentrality(10),
+  fMinCentrality(-1),
+  fMaxCentrality(-1),
   fTriggerMask(AliVEvent::kAny),
   fZVertexCut(10),
+  fMaxVertexDist(999),
   fJetMinPt(0),
   fJetMinEta(-0.5),
   fJetMaxEta(0.5),
@@ -68,7 +70,11 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask() :
   fJetType(0),
   fJetAlgo(1),
   fJetParticleLevel(kTRUE),
-  fIncludeNoITS(kTRUE),
+  fParticleMinPt(0),
+  fParticleMaxPt(0),
+  fParticleSelection(0),
+  fIncludeNoITS(kFALSE),
+  fCutMaxFractionSharedTPCClusters(0.4),
   fUseNegativeLabels(kTRUE),
   fTrackEfficiency(1),
   fIsAODMC(kFALSE),
@@ -87,14 +93,16 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask() :
   fAODCaloCells(0),
   fAODMCParticles(0),
   fCurrentAODEntry(-1),
+  fAODFilePath(0),
   fHistFileMatching(0),
   fHistAODFileError(0),
   fHistNotEmbedded(0),
-  fHistEmbeddingQA(0)
+  fHistEmbeddingQA(0),
+  fHistRejectedEvents(0),
+  fEmbeddingCount(0)
 {
   // Default constructor.
   SetSuffix("AODEmbedding");
-  SetMarkMC(0);
   fAODfilterBits[0] = -1;
   fAODfilterBits[1] = -1;
   fEtaMin = -1;
@@ -117,10 +125,11 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask(const char *name, Bool_t
   fAODClusName(""),
   fAODCellsName("emcalCells"),
   fAODMCParticlesName(AliAODMCParticle::StdBranchName()),
-  fMinCentrality(0),
-  fMaxCentrality(10),
+  fMinCentrality(-1),
+  fMaxCentrality(-1),
   fTriggerMask(AliVEvent::kAny),
   fZVertexCut(10),
+  fMaxVertexDist(999),
   fJetMinPt(0),
   fJetMinEta(-0.5),
   fJetMaxEta(0.5),
@@ -131,7 +140,11 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask(const char *name, Bool_t
   fJetType(0),
   fJetAlgo(1),
   fJetParticleLevel(kTRUE),
-  fIncludeNoITS(kTRUE),
+  fParticleMinPt(0),
+  fParticleMaxPt(0),
+  fParticleSelection(0),
+  fIncludeNoITS(kFALSE),
+  fCutMaxFractionSharedTPCClusters(0.4),
   fUseNegativeLabels(kTRUE),
   fTrackEfficiency(1),
   fIsAODMC(kFALSE),
@@ -150,14 +163,16 @@ AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask(const char *name, Bool_t
   fAODCaloCells(0),  
   fAODMCParticles(0),
   fCurrentAODEntry(-1),
+  fAODFilePath(0),
   fHistFileMatching(0),
   fHistAODFileError(0),
   fHistNotEmbedded(0),
-  fHistEmbeddingQA(0)
+  fHistEmbeddingQA(0),
+  fHistRejectedEvents(0),
+  fEmbeddingCount(0)
 {
   // Standard constructor.
   SetSuffix("AODEmbedding");
-  SetMarkMC(0);
   fAODfilterBits[0] = -1;
   fAODfilterBits[1] = -1;
   fEtaMin = -1;
@@ -210,6 +225,11 @@ void AliJetEmbeddingFromAODTask::UserCreateOutputObjects()
   fHistEmbeddingQA->GetXaxis()->SetBinLabel(2, "Not embedded");
   fOutput->Add(fHistEmbeddingQA);
 
+  fHistRejectedEvents = new TH1F("fHistRejectedEvents", "fHistRejectedEvents", 500, -0.5, 499.5);
+  fHistRejectedEvents->GetXaxis()->SetTitle("# of rejected events");
+  fHistRejectedEvents->GetYaxis()->SetTitle("counts");
+  fOutput->Add(fHistRejectedEvents);
+
   PostData(1, fOutput);
 }
 
@@ -241,6 +261,13 @@ Bool_t AliJetEmbeddingFromAODTask::ExecOnce()
   else
     fEsdTreeMode = kTRUE;
 
+  fAODFilePath = static_cast<AliNamedString*>(InputEvent()->FindListObject("AODEmbeddingFile"));
+  if (!fAODFilePath) {
+    fAODFilePath = new AliNamedString("AODEmbeddingFile", "");
+    AliDebug(3,"Adding AOD embedding file path object to the event list...");
+    InputEvent()->AddObject(fAODFilePath);
+  }
+
   return AliJetModelBaseTask::ExecOnce();
 }
 
@@ -264,8 +291,10 @@ Bool_t AliJetEmbeddingFromAODTask::OpenNextFile()
     i++;
   } 
 
-  if (!fCurrentAODFile || fCurrentAODFile->IsZombie())
+  if (!fCurrentAODFile || fCurrentAODFile->IsZombie()) {
+    AliError("Could not open AOD file to embed!");
     return kFALSE;
+  }
 
   const TList *clist = fCurrentAODFile->GetStreamerInfoCache();
   if(clist) {
@@ -277,8 +306,10 @@ Bool_t AliJetEmbeddingFromAODTask::OpenNextFile()
   }
 
   fCurrentAODTree = static_cast<TTree*>(fCurrentAODFile->Get(fAODTreeName));
-  if (!fCurrentAODTree)
+  if (!fCurrentAODTree) {
+    AliError(Form("Could not get tree %s from file %s", fAODTreeName.Data(), fCurrentAODFile->GetName()));
     return kFALSE;
+  }
 
   if (!fAODHeaderName.IsNull()) 
     fCurrentAODTree->SetBranchAddress(fAODHeaderName, &fAODHeader);
@@ -301,12 +332,14 @@ Bool_t AliJetEmbeddingFromAODTask::OpenNextFile()
   if (fRandomAccess)
     fCurrentAODEntry = TMath::Nint(gRandom->Rndm()*fCurrentAODTree->GetEntries());
   else
-    fCurrentAODEntry = 0;
+    fCurrentAODEntry = -1;
 
-  AliDebug(3,Form("Will start embedding from entry %d", fCurrentAODEntry));
+  AliDebug(3,Form("Will start embedding from entry %d", fCurrentAODEntry+1));
   
   if (fHistFileMatching)
     fHistFileMatching->Fill(fCurrentFileID, fCurrentAODFileID-1);
+
+  fEmbeddingCount = 0;
   
   return kTRUE;
 }
@@ -339,15 +372,17 @@ TFile* AliJetEmbeddingFromAODTask::GetNextFile()
   }
   
   if (gSystem->AccessPathName(baseFileName)) {
-    AliDebug(3,Form("File %s does not exist!", baseFileName.Data()));
+    AliError(Form("File %s does not exist!", baseFileName.Data()));
     return 0;
   }
 
   AliDebug(3,Form("Trying to open file %s...", fileName.Data()));
   TFile *file = TFile::Open(fileName);
 
-  if (!file)
-    AliDebug(3,Form("Unable to open file: %s!", fileName.Data()));
+  if (!file || file->IsZombie()) {
+    AliError(Form("Unable to open file: %s!", fileName.Data()));
+    return 0;
+  }
 
   return file;
 }
@@ -355,36 +390,51 @@ TFile* AliJetEmbeddingFromAODTask::GetNextFile()
 //________________________________________________________________________
 Bool_t AliJetEmbeddingFromAODTask::GetNextEntry() 
 {
-  Int_t attempts = 0;
+  Int_t attempts = -1;
 
   do {
-    if (!fCurrentAODFile || !fCurrentAODTree || fCurrentAODEntry >= fCurrentAODTree->GetEntries()) {
-      if (!OpenNextFile())
+    if (!fCurrentAODFile || !fCurrentAODTree || fCurrentAODEntry+1 >= fCurrentAODTree->GetEntries()) {
+      if (!OpenNextFile()) {
+       AliError("Could not open the next file!");
        return kFALSE;
+      }
+    }
+
+    if (!fCurrentAODTree) {
+      AliError("Could not get the tree!");
+      return kFALSE;
     }
     
-    fCurrentAODTree->GetEntry(fCurrentAODEntry);
     fCurrentAODEntry++;
-    attempts++;
+    fCurrentAODTree->GetEntry(fCurrentAODEntry);
 
+    attempts++;
     if (attempts == 1000) 
       AliWarning("After 1000 attempts no event has been accepted by the event selection (trigger, centrality...)!");
 
-  } while (!IsAODEventSelected() && fCurrentAODTree);
+  } while (!IsAODEventSelected());
+
+  if (fHistRejectedEvents)
+    fHistRejectedEvents->Fill(attempts);
+
+  if (!fCurrentAODTree)
+    return kFALSE;
+
+  fEmbeddingCount++;
 
-  return (fCurrentAODTree!=0);
+  return kTRUE;
 }
 
 //________________________________________________________________________
 Bool_t AliJetEmbeddingFromAODTask::IsAODEventSelected()
 {
   // AOD event selection.
-  
+
   if (!fEsdTreeMode && fAODHeader) {
     AliAODHeader *aodHeader = static_cast<AliAODHeader*>(fAODHeader);
 
     // Trigger selection
-    if (fTriggerMask != AliVEvent::kAny) {
+    if (fTriggerMask != 0) {
       UInt_t offlineTrigger = aodHeader->GetOfflineTrigger();
       
       if ((offlineTrigger & fTriggerMask) == 0) {
@@ -415,8 +465,22 @@ Bool_t AliJetEmbeddingFromAODTask::IsAODEventSelected()
                      vert[2], fZVertexCut));
       return kFALSE;
     }
+    Double_t dist = TMath::Sqrt((vert[0]-fVertex[0])*(vert[0]-fVertex[0])+(vert[1]-fVertex[1])*(vert[1]-fVertex[1])+(vert[2]-fVertex[2])*(vert[2]-fVertex[2]));
+    if (dist > fMaxVertexDist) {
+      AliDebug(2,Form("Event rejected because the distance between the current and embedded verteces is > %f. "
+                     "Current event vertex (%f, %f, %f), embedded event vertex (%f, %f, %f). Distance = %f", 
+                     fMaxVertexDist, fVertex[0], fVertex[1], fVertex[2], vert[0], vert[1], vert[2], dist));
+      return kFALSE;
+    }
+      
   }
 
+  // Particle selection
+  if ((fParticleSelection == 1 && FindParticleInRange(fAODTracks)==kFALSE) ||
+      (fParticleSelection == 2 && FindParticleInRange(fAODClusters)==kFALSE) ||
+      (fParticleSelection == 3 && FindParticleInRange(fAODMCParticles)==kFALSE))
+    return kFALSE;
+
   // Jet selection
   if (fJetMinPt > 0) {
     TLorentzVector jet;
@@ -446,6 +510,39 @@ Bool_t AliJetEmbeddingFromAODTask::IsAODEventSelected()
   return kTRUE;
 }
 
+//________________________________________________________________________
+Bool_t AliJetEmbeddingFromAODTask::FindParticleInRange(TClonesArray *array)
+{
+  if (!array) return kFALSE;
+
+  if (array->GetClass()->InheritsFrom("AliVParticle")) {
+    const Int_t nentries = array->GetEntriesFast();
+    for (Int_t i = 0; i < nentries; i++) {
+      AliVParticle *part = static_cast<AliVParticle*>(array->At(i));
+      if (!part) continue;
+      if (part->Pt() > fParticleMinPt && part->Pt() < fParticleMaxPt) return kTRUE;
+    }
+  }
+  else if (array->GetClass()->InheritsFrom("AliVCluster")) {
+    const Int_t nentries = array->GetEntriesFast();
+    for (Int_t i = 0; i < nentries; i++) {
+      AliVCluster *clus = static_cast<AliVCluster*>(array->At(i));
+      if (!clus) continue;
+      
+      TLorentzVector vect;
+      Double_t vert[3] = {0,0,0};
+      clus->GetMomentum(vect,vert);
+
+      if (vect.Pt() > fParticleMinPt && vect.Pt() < fParticleMaxPt) return kTRUE;
+    }
+  }
+  else {
+    AliWarning(Form("Unable to do event selection based on particle pT: %s class type not recognized.",array->GetClass()->GetName()));
+  }
+
+  return kFALSE;
+}
+
 //________________________________________________________________________
 void AliJetEmbeddingFromAODTask::Run() 
 {
@@ -461,6 +558,8 @@ void AliJetEmbeddingFromAODTask::Run()
   if (fHistEmbeddingQA)
     fHistEmbeddingQA->Fill("OK", 1);
 
+  fAODFilePath->SetString(fCurrentAODFile->GetName());
+
   if (fOutMCParticles) {
 
     if (fCopyArray && fMCParticles)
@@ -523,7 +622,7 @@ void AliJetEmbeddingFromAODTask::Run()
              else {
                AliDebug(3, "Track not embedded because ITS refit failed.");
                continue;
-           }
+             }
            }
            else {
              type = 1;
@@ -533,7 +632,11 @@ void AliJetEmbeddingFromAODTask::Run()
            AliDebug(3, "Track not embedded because not an hybrid track.");
            continue;
          }
-
+         if (fCutMaxFractionSharedTPCClusters > 0) {
+           Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls());
+           if (frac > fCutMaxFractionSharedTPCClusters) 
+             continue;
+         }
          if (TMath::Abs(aodtrack->GetTrackEtaOnEMCal()) < 0.75 && 
              aodtrack->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && 
              aodtrack->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
@@ -547,6 +650,11 @@ void AliJetEmbeddingFromAODTask::Run()
            else
              type = ptrack->GetLabel();
            isEmc = ptrack->IsEMCAL();
+
+           if (!fIncludeNoITS && type==2) {
+             AliDebug(3, "Track not embedded because ITS refit failed.");
+             continue;
+           }
          }
        }
        
@@ -573,10 +681,10 @@ void AliJetEmbeddingFromAODTask::Run()
            label = TMath::Abs(track->GetLabel());
          
          if (label == 0) 
-           AliWarning(Form("%s: Track %d with label==0", GetName(), i));
+           AliDebug(1,Form("%s: Track %d with label==0", GetName(), i));
        }
 
-       AddTrack(track->Pt(), track->Eta(), track->Phi(), type, track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal(), isEmc, label);
+       AddTrack(track->Pt(), track->Eta(), track->Phi(), type, track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal(), track->GetTrackPtOnEMCal(), isEmc, label, track->Charge());
        AliDebug(3, "Track embedded!");
       }
     }
@@ -594,6 +702,10 @@ void AliJetEmbeddingFromAODTask::Run()
          AliError(Form("Could not find cluster %d in branch %s of tree %s!", i, fAODClusName.Data(), fAODTreeName.Data()));
          continue;
        }
+
+       if (!clus->IsEMCAL())
+         continue;
+
        TLorentzVector vect;
        Double_t vert[3] = {0,0,0};
        clus->GetMomentum(vect,vert);
@@ -602,14 +714,13 @@ void AliJetEmbeddingFromAODTask::Run()
            vect.Eta() < fEtaMin || vect.Eta() > fEtaMax ||
            vect.Phi() < fPhiMin || vect.Phi() > fPhiMax)
          continue;
-
+       
        Int_t label = 0;
        if (fIsAODMC) {
          label = clus->GetLabel();
          if (label <= 0) 
-           AliWarning(Form("%s: Clus %d with label<=0", GetName(), i));
+           AliDebug(1,Form("%s: Clus %d with label<=0", GetName(), i));
        }
-
        AddCluster(clus);
       }
     }
@@ -642,7 +753,7 @@ void AliJetEmbeddingFromAODTask::Run()
 
        if (fIsAODMC) {
          if (mclabel <= 0) 
-           AliWarning(Form("%s: Cell %d with label<=0", GetName(), i));
+           AliDebug(1,Form("%s: Cell %d with label<=0", GetName(), i));
        }
        else {
          mclabel = 0;
@@ -653,7 +764,6 @@ void AliJetEmbeddingFromAODTask::Run()
        totalEnergy += amp;
       }
     }
-
     AliDebug(2,Form("Added cells = %d (energy = %f), total cells = %d", fAddedCells, totalEnergy, totalCells));
   }
 }