fV0Filter(0x0),\r
fCascadeFilter(0x0),\r
fHighPthreshold(0),\r
- fPtshape(0x0)\r
+ fPtshape(0x0),\r
+ fEnableFillAOD(kTRUE)\r
{\r
// Default constructor\r
}\r
fV0Filter(0x0),\r
fCascadeFilter(0x0),\r
fHighPthreshold(0),\r
- fPtshape(0x0)\r
+ fPtshape(0x0),\r
+ fEnableFillAOD(kTRUE)\r
{\r
// Constructor\r
}\r
//\r
// Create Output Objects conenct filter to outputtree\r
// \r
+ if(OutputTree()){\r
OutputTree()->GetUserInfo()->Add(fTrackFilter);\r
+ }\r
+ else{\r
+ AliError("No OutputTree() for adding the track filter");\r
+ }\r
}\r
\r
void AliAnalysisTaskESDfilter::Init()\r
if (fHighPthreshold == 0) AliInfo("detector PID signals are stored in each track");\r
if (!fPtshape) AliInfo("detector PID signals are not stored below the pt threshold");\r
}\r
- \r
+ // Filters must explicitely enable AOD filling in their UserExec (AG)\r
+ if (!AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()) AliFatal("Cannot run ESD filter without an output event handler");\r
+ if(fEnableFillAOD) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);\r
+\r
ConvertESDtoAOD();\r
}\r
\r
AliAODHeader* header = AODEvent()->GetHeader();\r
\r
header->SetRunNumber(esd->GetRunNumber());\r
+ header->SetOfflineTrigger(fInputHandler->IsEventSelected()); // propagate the decision of the physics selection\r
if (old) {\r
header->SetBunchCrossNumber(0);\r
header->SetOrbitNumber(0);\r
Float_t diamxy[2]={esd->GetDiamondX(),esd->GetDiamondY()};\r
Float_t diamcov[3]; esd->GetDiamondCovXY(diamcov);\r
header->SetDiamond(diamxy,diamcov);\r
+ header->SetDiamondZ(esd->GetDiamondZ(),esd->GetSigma2DiamondZ());\r
//\r
//\r
Int_t nV0s = esd->GetNumberOfV0s();\r
Int_t nCascades = esd->GetNumberOfCascades();\r
Int_t nKinks = esd->GetNumberOfKinks();\r
Int_t nVertices = nV0s + nCascades /*V0 wihtin cascade already counted*/+ nKinks + 1 /* = prim. vtx*/;\r
+ Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD(); // also SPD main vertex\r
+ Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();\r
+ nVertices+=nPileSPDVertices;\r
+ nVertices+=nPileTrkVertices;\r
Int_t nJets = 0;\r
Int_t nCaloClus = esd->GetNumberOfCaloClusters();\r
Int_t nFmdClus = 0;\r
AliAODVertex(pos, covVtx, vtx->GetChi2toNDF(), NULL, -1, AliAODVertex::kPrimary);\r
primary->SetName(vtx->GetName());\r
primary->SetTitle(vtx->GetTitle());\r
- \r
- if (!strcmp(vtx->GetTitle(), "vertexer: 3D")) primary->SetNContributors(vtx->GetNContributors());\r
+\r
+ TString vtitle = vtx->GetTitle();\r
+ if (!vtitle.Contains("VertexerTracks")) \r
+ primary->SetNContributors(vtx->GetNContributors());\r
\r
if (fDebug > 0) primary->Print();\r
\r
+\r
+ // Add SPD "main" vertex \r
+ const AliESDVertex *vtxS = esd->GetPrimaryVertexSPD();\r
+ vtxS->GetXYZ(pos); // position\r
+ vtxS->GetCovMatrix(covVtx); //covariance matrix\r
+ AliAODVertex * mVSPD = new(vertices[jVertices++])\r
+ AliAODVertex(pos, covVtx, vtxS->GetChi2toNDF(), NULL, -1, AliAODVertex::kMainSPD);\r
+ mVSPD->SetName(vtxS->GetName());\r
+ mVSPD->SetTitle(vtxS->GetTitle());\r
+ mVSPD->SetNContributors(vtxS->GetNContributors()); \r
+\r
+ // Add SPD pileup vertices\r
+ for(Int_t iV=0; iV<nPileSPDVertices-1; iV++){\r
+ const AliESDVertex *vtxP = esd->GetPileupVertexSPD(iV);\r
+ vtxP->GetXYZ(pos); // position\r
+ vtxP->GetCovMatrix(covVtx); //covariance matrix\r
+ AliAODVertex * pVSPD = new(vertices[jVertices++])\r
+ AliAODVertex(pos, covVtx, vtxP->GetChi2toNDF(), NULL, -1, AliAODVertex::kPileupSPD);\r
+ pVSPD->SetName(vtxP->GetName());\r
+ pVSPD->SetTitle(vtxP->GetTitle());\r
+ pVSPD->SetNContributors(vtxP->GetNContributors()); \r
+ }\r
+\r
+ // Add TRK pileup vertices\r
+ for(Int_t iV=0; iV<nPileTrkVertices; iV++){\r
+ const AliESDVertex *vtxP = esd->GetPileupVertexTracks(iV);\r
+ vtxP->GetXYZ(pos); // position\r
+ vtxP->GetCovMatrix(covVtx); //covariance matrix\r
+ AliAODVertex * pVTRK = new(vertices[jVertices++])\r
+ AliAODVertex(pos, covVtx, vtxP->GetChi2toNDF(), NULL, -1, AliAODVertex::kPileupTracks);\r
+ pVTRK->SetName(vtxP->GetName());\r
+ pVTRK->SetTitle(vtxP->GetTitle());\r
+ pVTRK->SetNContributors(vtxP->GetNContributors());\r
+ }\r
+\r
// Create vertices starting from the most complex objects\r
Double_t chi2 = 0.;\r
\r
\r
AliESDCaloCluster * cluster = esd->GetCaloCluster(iClust);\r
\r
- Int_t id = cluster->GetID();\r
- Int_t nLabel = cluster->GetNLabels();\r
- TArrayI* labels = cluster->GetLabels();\r
- Int_t *label = 0;\r
- if (labels){\r
- label = (cluster->GetLabels())->GetArray();\r
- for(int i = 0;i < labels->GetSize();++i){\r
- if(mcH)mcH->SelectParticle(label[i]);\r
- }\r
- } \r
+ Int_t id = cluster->GetID();\r
+ Int_t nLabel = cluster->GetNLabels();\r
+ Int_t *labels = cluster->GetLabels();\r
+ if(labels){ \r
+ for(int i = 0;i < nLabel;++i){\r
+ if(mcH)mcH->SelectParticle(labels[i]);\r
+ }\r
+ } \r
\r
Float_t energy = cluster->E();\r
cluster->GetPosition(posF);\r
- Char_t ttype = AliAODCluster::kUndef; \r
-\r
- if (cluster->GetClusterType() == AliESDCaloCluster::kPHOSCluster) {\r
- ttype=AliAODCluster::kPHOSNeutral;\r
- } \r
- else if (cluster->GetClusterType() == AliESDCaloCluster::kEMCALClusterv1) {\r
- ttype = AliAODCluster::kEMCALClusterv1;\r
- }\r
\r
- \r
AliAODCaloCluster *caloCluster = new(caloClusters[jClusters++]) AliAODCaloCluster(id,\r
nLabel,\r
- label,\r
+ labels,\r
energy,\r
posF,\r
NULL,\r
- ttype);\r
+ cluster->GetType(),0);\r
\r
caloCluster->SetCaloCluster(cluster->GetDistanceToBadChannel(),\r
- cluster->GetClusterDisp(),\r
+ cluster->GetDispersion(),\r
cluster->GetM20(), cluster->GetM02(),\r
cluster->GetEmcCpvDistance(), \r
cluster->GetNExMax(),cluster->GetTOF()) ;\r
\r
- caloCluster->SetPIDFromESD(cluster->GetPid());\r
+ caloCluster->SetPIDFromESD(cluster->GetPID());\r
caloCluster->SetNCells(cluster->GetNCells());\r
caloCluster->SetCellsAbsId(cluster->GetCellsAbsId());\r
caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());\r
\r
TArrayI* matchedT = cluster->GetTracksMatched();\r
- if (nTracks>0 && matchedT && cluster->GetTrackMatched() >= 0) { \r
+ if (nTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) { \r
for (Int_t im = 0; im < matchedT->GetSize(); im++) {\r
Int_t iESDtrack = matchedT->At(im);;\r
if (aodTrackRefs->At(iESDtrack) != 0) {\r
\r
AliAODCaloCells &aodEMcells = *(AODEvent()->GetEMCALCells());\r
aodEMcells.CreateContainer(nEMcell);\r
- aodEMcells.SetType(AliAODCaloCells::kEMCAL);\r
+ aodEMcells.SetType(AliAODCaloCells::kEMCALCell);\r
for (Int_t iCell = 0; iCell < nEMcell; iCell++) { \r
aodEMcells.SetCell(iCell,esdEMcells.GetCellNumber(iCell),esdEMcells.GetAmplitude(iCell));\r
}\r
\r
AliAODCaloCells &aodPHcells = *(AODEvent()->GetPHOSCells());\r
aodPHcells.CreateContainer(nPHcell);\r
- aodPHcells.SetType(AliAODCaloCells::kPHOS);\r
+ aodPHcells.SetType(AliAODCaloCells::kPHOSCell);\r
for (Int_t iCell = 0; iCell < nPHcell; iCell++) { \r
aodPHcells.SetCell(iCell,esdPHcells.GetCellNumber(iCell),esdPHcells.GetAmplitude(iCell));\r
}\r
// Save PID object for candidate electrons\r
Bool_t pidSave = kFALSE;\r
if (fTrackFilter) {\r
- Bool_t selectInfo = fTrackFilter->IsSelected("Electrons");\r
+ Bool_t selectInfo = fTrackFilter->IsSelected((char*) "Electrons");\r
if (selectInfo) pidSave = kTRUE;\r
}\r
\r