AliAnalysisTaskEmcal::UserCreateOutputObjects();
- for(Int_t icent=0; icent<8; ++icent) {
+ const Int_t nCentChBins = fNcentBins * 2;
+
+ for(Int_t icent=0; icent<nCentChBins; ++icent) {
for(Int_t ipt=0; ipt<9; ++ipt) {
for(Int_t ieta=0; ieta<2; ++ieta) {
TString nameEta(Form("fHistMatchEta_%i_%i_%i",icent,ipt,ieta));
Int_t mombin = GetMomBin(track->P());
Int_t centbinch = fCentBin;
if (track->Charge()<0)
- centbinch += 4;
+ centbinch += fNcentBins;
Int_t etabin = 0;
if(track->Eta() > 0)
etabin = 1;
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),
fHistFileMatching(0),
fHistAODFileError(0),
fHistNotEmbedded(0),
- fHistEmbeddingQA(0)
+ fHistEmbeddingQA(0),
+ fHistRejectedEvents(0)
{
// Default constructor.
SetSuffix("AODEmbedding");
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),
fHistFileMatching(0),
fHistAODFileError(0),
fHistNotEmbedded(0),
- fHistEmbeddingQA(0)
+ fHistEmbeddingQA(0),
+ fHistRejectedEvents(0)
{
// Standard constructor.
SetSuffix("AODEmbedding");
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);
}
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);
//________________________________________________________________________
Bool_t AliJetEmbeddingFromAODTask::GetNextEntry()
{
- Int_t attempts = 0;
+ Int_t attempts = -1;
do {
- if (!fCurrentAODFile || !fCurrentAODTree || fCurrentAODEntry >= fCurrentAODTree->GetEntries()) {
+ 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());
+
+ fHistRejectedEvents->Fill(attempts);
- return (fCurrentAODTree!=0);
+ if (!fCurrentAODTree)
+ return kFALSE;
+
+ return kTRUE;
}
//________________________________________________________________________
Bool_t AliJetEmbeddingFromAODTask::IsAODEventSelected()
{
// AOD event selection.
-
+
if (!fEsdTreeMode && fAODHeader) {
AliAODHeader *aodHeader = static_cast<AliAODHeader*>(fAODHeader);
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;
+ }
+
}
// Jet selection
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(), isEmc, label, track->Charge());
AliDebug(3, "Track embedded!");
}
}
void SetJetType(Byte_t t) { fJetType = t ; }
void SetJetAlgo(Byte_t t) { fJetAlgo = t ; }
void SetZVertexCut(Double_t z) { fZVertexCut = z ; }
+ void SetMaxVertexDist(Double_t d) { fMaxVertexDist = d ; }
protected:
Bool_t ExecOnce() ;// intialize task
Double_t fMaxCentrality ;// Maximum centrality
UInt_t fTriggerMask ;// Trigger selection mask
Double_t fZVertexCut ;// Z vertex cut
+ Double_t fMaxVertexDist ;// Maximum distance allowed between the vertices of the current and the embedded events
Double_t fJetMinPt ;// Select events with a minimum jet pt
Double_t fJetMinEta ;// Min eta for jets
Double_t fJetMaxEta ;// Max eta for jets
TH1 *fHistAODFileError ;//! AOD file ID (to be embedded) error
TH1 *fHistNotEmbedded ;//! File ID not embedded
TH1 *fHistEmbeddingQA ;//! Embedding QA
+ TH1 *fHistRejectedEvents ;//! Rejected events
private:
AliJetEmbeddingFromAODTask(const AliJetEmbeddingFromAODTask&); // not implemented
AliJetEmbeddingFromAODTask &operator=(const AliJetEmbeddingFromAODTask&); // not implemented
- ClassDef(AliJetEmbeddingFromAODTask, 9) // Jet embedding from AOD task
+ ClassDef(AliJetEmbeddingFromAODTask, 10) // Jet embedding from AOD task
};
#endif
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);
}
if (!fIsInit)
return;
+ fVertex[0] = 0;
+ fVertex[1] = 0;
+ fVertex[2] = 0;
+
+ const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
+ if (vert)
+ vert->GetXYZ(fVertex);
+
if (fCopyArray) {
if (fOutTracks)
fOutTracks->Delete();
}
//________________________________________________________________________
-AliPicoTrack* AliJetModelBaseTask::AddTrack(Double_t pt, Double_t eta, Double_t phi, Byte_t type, Double_t etaemc, Double_t phiemc, Bool_t ise, Int_t label)
+AliPicoTrack* AliJetModelBaseTask::AddTrack(Double_t pt, Double_t eta, Double_t phi, Byte_t type, Double_t etaemc, Double_t phiemc, Bool_t ise, Int_t label, Short_t charge)
{
// Add a track to the event.
AliPicoTrack *track = new ((*fOutTracks)[nTracks]) AliPicoTrack(pt,
eta,
phi,
- 1,
+ charge,
label,
type,
etaemc,
AliVCluster *AddCluster(Double_t e = -1, Double_t eta = -999, Double_t phi = -1, Int_t label=0); // add a cluster; if values are -1 generate random parameters
AliVCluster *AddCluster(Double_t e, Int_t absId, Int_t label=0); // add a cluster with given energy and position
AliVCluster *AddCluster(AliVCluster *oc); // add a cluster (copy)
- AliPicoTrack *AddTrack(Double_t pt = -1, Double_t eta = -999, Double_t phi = -1,
- Byte_t type=0, Double_t etaemc=0, Double_t phiemc=0, Bool_t ise=kFALSE, Int_t label=0); // add a track; if values are -1 generate random parameters
+ AliPicoTrack *AddTrack(Double_t pt = -1, Double_t eta = -999, Double_t phi = -1, Byte_t type=0,
+ Double_t etaemc=0, Double_t phiemc=0, Bool_t ise=kFALSE,
+ Int_t label=0, Short_t charge=1); // add a track; if values are -1 generate random parameters
AliAODMCParticle *AddMCParticle(AliAODMCParticle *part, Int_t origIndex); // add a MC particle
void CopyCells();
void CopyClusters();
Bool_t fQAhistos; // draw QA histograms
Bool_t fIsInit; //!=true if initialized
AliEMCALGeometry *fGeom; //!pointer to EMCal geometry
+ Double_t fVertex[3]; //!event vertex
TClonesArray *fClusters; //!cluster collection
TClonesArray *fOutClusters; //!output cluster collection
TClonesArray *fTracks; //!track collection