+
+ // 4 - Add the V0 from the cascade.
+ // = V0vtx + both pos and neg daughter tracks + the aodV0 itself
+ //
+
+ if ( !usedV0[idxV0FromCascade] ) {
+ // 4.A - if VO structure hasn't been created yet
+
+ // 4.A.1 - Create the V0 vertex of the cascade
+
+ esdV0FromCascade->GetXYZ(pos[0], pos[1], pos[2]);
+ esdV0FromCascade->GetPosCov(covVtx);
+ chi2 = esdV0FromCascade->GetChi2V0(); // = chi2/NDF since NDF = 2*2-3 ?
+
+ vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(pos,
+ covVtx,
+ chi2,
+ vCascade,
+ idxV0FromCascade, //id of ESDv0
+ AliAODVertex::kV0);
+ // Note:
+ // one V0 can be used by several cascades.
+ // So, one AOD V0 vtx can have several parent vtx.
+ // This is not directly allowed by AliAODvertex.
+ // Setting the parent vtx (here = param "vCascade") doesn't lead to a crash
+ // but to a problem of consistency within AODEvent.
+ // -> See below paragraph 4.B, for the proposed treatment of such a case.
+
+ // Add the vV0FromCascade to the aodVOVtxRefs
+ aodV0VtxRefs->AddAt(vV0FromCascade,idxV0FromCascade);
+
+
+ // 4.A.2 - Add the positive tracks from the V0
+
+ esdCascadePos->GetPxPyPz(momPos);
+ esdCascadePos->GetXYZ(pos);
+ esdCascadePos->GetCovarianceXYZPxPyPz(covTr);
+ esdCascadePos->GetESDpid(pid);
+
+
+ if (!usedTrack[idxPosFromV0Dghter]) {
+ usedTrack[idxPosFromV0Dghter] = kTRUE;
+
+ UInt_t selectInfo = 0;
+ if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdCascadePos);
+ if(mcH) mcH->SelectParticle(esdCascadePos->GetLabel());
+ aodTrack = new(tracks[jTracks++]) AliAODTrack( esdCascadePos->GetID(),
+ esdCascadePos->GetLabel(),
+ momPos,
+ kTRUE,
+ pos,
+ kFALSE, // Why kFALSE for "isDCA" ? FIXME
+ covTr,
+ (Short_t)esdCascadePos->GetSign(),
+ esdCascadePos->GetITSClusterMap(),
+ pid,
+ vV0FromCascade,
+ kTRUE, // usedForVtxFit = kFALSE ? FIXME
+ vtx->UsesTrack(esdCascadePos->GetID()),
+ AliAODTrack::kSecondary,
+ selectInfo);
+ aodTrackRefs->AddAt(aodTrack,idxPosFromV0Dghter);
+
+ if (esdCascadePos->GetSign() > 0) nPosTracks++;
+ aodTrack->ConvertAliPIDtoAODPID();
+ aodTrack->SetFlags(esdCascadePos->GetStatus());
+ SetAODPID(esdCascadePos,aodTrack,detpid,timezero,esd->GetMagneticField());
+ }
+ else {
+ aodTrack = dynamic_cast<AliAODTrack*>(aodTrackRefs->At(idxPosFromV0Dghter));
+ }
+ vV0FromCascade->AddDaughter(aodTrack);