//
Int_t ndg=GetNDaughters();
- if(!ndg) {
+ if(ndg==0) {
AliError("No daughters available");
return -1;
}
+ if ( isV0 &&
+ ( (pdgDg[1]==2212 && pdgDg[0]==310) ||
+ (pdgDg[1]==211 && pdgDg[0]==3122) ) ) {
+ AliWarning(Form("Please, pay attention: first element in AliAODRecoCascadeHF object must be the bachelor and second one V0. Skipping! (pdgDg[0] = %d, (pdgDg[1] = %d)", pdgDg[0], pdgDg[1]));
+ return -1;
+ }
+
Int_t lab2Prong = -1;
if (!isV0) {
AliAODRecoDecayHF2Prong *the2Prong = Get2Prong();
lab2Prong = the2Prong->MatchToMC(pdgabs2prong,mcArray,2,pdgDg2prong);
} else {
- AliAODv0 *theV0 = Getv0();
- lab2Prong = theV0->MatchToMC(pdgabs2prong,mcArray,2,pdgDg2prong);
+ AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(Getv0());
+ lab2Prong = theV0->MatchToMC(pdgabs2prong,mcArray,2,pdgDg2prong); // the V0
}
if(lab2Prong<0) return -1;
Int_t dgLabels[10]={0,0,0,0,0,0,0,0,0,0};
- // loop on daughters and write labels
- for(Int_t i=0; i<ndg; i++) {
- AliVTrack *trk = (AliVTrack*)GetDaughter(i);
- Int_t lab = trk->GetLabel();
- if(lab==-1) { // this daughter is the 2prong
- lab=lab2Prong;
- } else if(lab<-1) continue;
- dgLabels[i] = lab;
+ if (!isV0) {
+ // loop on daughters and write labels
+ for(Int_t i=0; i<ndg; i++) {
+ AliVTrack *trk = dynamic_cast<AliVTrack*>(GetDaughter(i));
+ if(!trk) continue;
+ Int_t lab = trk->GetLabel();
+ if(lab==-1) { // this daughter is the 2prong
+ lab=lab2Prong;
+ } else if(lab<-1) continue;
+ dgLabels[i] = lab;
+ }
+ } else {
+ AliVTrack *trk = dynamic_cast<AliVTrack*>(GetBachelor()); // the bachelor
+ if (!trk) return -1;
+ dgLabels[0] = trk->GetLabel();//TMath::Abs(trk->GetLabel());
+ dgLabels[1] = lab2Prong;
}
Int_t finalLabel = AliAODRecoDecay::MatchToMC(pdgabs,mcArray,dgLabels,2,2,pdgDg);
// debug printouts for Lc->V0 bachelor case
if ( isV0 && (dgLabels[0]!=-1 && dgLabels[1]!=-1) ) {
- AliAODv0 *theV0 = Getv0();
+ AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(Getv0());
Bool_t onTheFly = theV0->GetOnFlyStatus();
-
- if ( (pdgDg[1]==2212 && pdgDg[0]==310) ||
- (pdgDg[1]==211 && pdgDg[0]==3122) ) {
- Int_t pdgDgtemp[2]={pdgDg[1],pdgDg[0]};
- pdgDg[0]=pdgDgtemp[0];
- pdgDg[1]=pdgDgtemp[1];
- }
-
if (pdgDg[0]==2212 && pdgDg[1]==310) {
- AliAODMCParticle*k0s = (AliAODMCParticle*)mcArray->At(lab2Prong);
- Int_t labK0 = k0s->GetMother();
- AliAODMCParticle*k0bar = (AliAODMCParticle*)mcArray->At(labK0);
- AliDebug(1,Form(" (onTheFly=%1d) LabelV0=%d (%d) -> LabelK0S=%d (%d -> %d %d)",onTheFly,labK0,k0bar->GetPdgCode(),lab2Prong,pdgabs2prong,pdgDg2prong[0],pdgDg2prong[1]));
- AliDebug(1,Form(" LabelLc=%d (%d) -> LabelBachelor=%d (%d) LabelV0=%d (%d)",
- finalLabel,pdgabs,
- dgLabels[0],pdgDg[0],dgLabels[1],pdgDg[1]));
+ AliAODMCParticle*k0s = dynamic_cast<AliAODMCParticle*>(mcArray->At(lab2Prong));
+ if(k0s){
+ Int_t labK0 = k0s->GetMother();
+ AliAODMCParticle*k0bar = dynamic_cast<AliAODMCParticle*>(mcArray->At(labK0));
+ if(k0bar){
+ AliDebug(1,Form(" (onTheFly=%1d) LabelV0=%d (%d) -> LabelK0S=%d (%d -> %d %d)",onTheFly,labK0,k0bar->GetPdgCode(),lab2Prong,pdgabs2prong,pdgDg2prong[0],pdgDg2prong[1]));
+ AliDebug(1,Form(" LabelLc=%d (%d) -> LabelBachelor=%d (%d) LabelV0=%d (%d)",
+ finalLabel,pdgabs,
+ dgLabels[0],pdgDg[0],dgLabels[1],pdgDg[1]));
+ }
+ }
} else if (pdgDg[0]==211 && pdgDg[1]==3122) {
AliDebug(1,Form(" (onTheFly=%1d) LabelV0=%d (%d -> %d %d)",onTheFly,lab2Prong,pdgabs2prong,pdgDg2prong[0],pdgDg2prong[1]));
AliDebug(1,Form(" LabelLc=%d (%d) -> LabelBachelor=%d (%d) LabelV0=%d (%d)",
return v0->CosPointingAngle(posVtx);
}
+//-----------------------------------------------------------------------------
+Double_t AliAODRecoCascadeHF::CosV0PointingAngleXY() const
+{
+ //
+ // Returns XY cosine of V0 pointing angle wrt primary vertex
+ //
+
+ AliAODv0 *v0 = (AliAODv0*)Getv0();
+
+ if (!v0)
+ return -999.;
+
+ AliAODVertex *vtxPrimary = GetPrimaryVtx();
+ Double_t posVtx[3] = {0.,0.,0.};
+ vtxPrimary->GetXYZ(posVtx);
+ return v0->CosPointingAngleXY(posVtx);
+
+}
+//-----------------------------------------------------------------------------
+Double_t AliAODRecoCascadeHF::NormalizedV0DecayLength() const
+{
+ //
+ // Returns V0 normalized decay length wrt primary vertex
+ //
+
+ AliAODv0 *v0 = (AliAODv0*)Getv0();
+
+ if (!v0)
+ return -1.;
+ //AliAODVertex *vtxPrimary = GetPrimaryVtx();
+ //Double_t posVtx[3] = {0.,0.,0.};
+ //vtxPrimary->GetXYZ(posVtx);
+ //return v0->NormalizedDecayLength(posVtx);
+ return v0->NormalizedDecayLength(GetPrimaryVtx());
+
+}
+//-----------------------------------------------------------------------------
+Double_t AliAODRecoCascadeHF::NormalizedV0DecayLengthXY() const
+{
+ //
+ // Returns transverse V0 normalized decay length wrt primary vertex
+ //
+ AliAODv0 *v0 = (AliAODv0*)Getv0();
+
+ if (!v0)
+ return -1.;
+ //AliAODVertex *vtxPrimary = GetPrimaryVtx();
+ //Double_t posVtx[3] = {0.,0.,0.};
+ //vtxPrimary->GetXYZ(posVtx);
+ //return v0->NormalizedDecayLengthXY(posVtx);
+ return v0->NormalizedDecayLengthXY(GetPrimaryVtx());
+
+}