-// $Id: AliJetEmbeddingFromAODTask.cxx $
+// $Id$
//
// Jet embedding from AOD task.
//
#include "AliFJWrapper.h"
#include "AliLog.h"
#include "AliInputEventHandler.h"
+#include "AliNamedString.h"
ClassImp(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),
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),
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;
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),
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),
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;
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);
}
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();
}
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) {
}
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);
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;
}
}
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;
}
//________________________________________________________________________
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) {
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;
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()
{
if (fHistEmbeddingQA)
fHistEmbeddingQA->Fill("OK", 1);
+ fAODFilePath->SetString(fCurrentAODFile->GetName());
+
if (fOutMCParticles) {
if (fCopyArray && fMCParticles)
else {
AliDebug(3, "Track not embedded because ITS refit failed.");
continue;
- }
+ }
}
else {
type = 1;
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())
else
type = ptrack->GetLabel();
isEmc = ptrack->IsEMCAL();
+
+ if (!fIncludeNoITS && type==2) {
+ AliDebug(3, "Track not embedded because ITS refit failed.");
+ continue;
+ }
}
}
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!");
}
}
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);
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);
}
}
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;
totalEnergy += amp;
}
}
-
AliDebug(2,Form("Added cells = %d (energy = %f), total cells = %d", fAddedCells, totalEnergy, totalCells));
}
}