X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGHF%2FvertexingHF%2FAliAODRecoCascadeHF.cxx;h=c89209c8c00d49cefb27d2d36fa4061d5d31ebe5;hb=a4d010b146a124fb5fd0b520b2eeca4ca47d5476;hp=e56d53a3bab7bdd701347753cb6edced1ba19a14;hpb=9ff3fa8fa78fb28365b76416dd2d893d9b72fbb3;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGHF/vertexingHF/AliAODRecoCascadeHF.cxx b/PWGHF/vertexingHF/AliAODRecoCascadeHF.cxx index e56d53a3bab..c89209c8c00 100644 --- a/PWGHF/vertexingHF/AliAODRecoCascadeHF.cxx +++ b/PWGHF/vertexingHF/AliAODRecoCascadeHF.cxx @@ -122,33 +122,48 @@ Int_t AliAODRecoCascadeHF::MatchToMC(Int_t pdgabs,Int_t pdgabs2prong, // 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(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; iGetLabel(); - 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(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(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); @@ -157,24 +172,20 @@ Int_t AliAODRecoCascadeHF::MatchToMC(Int_t pdgabs,Int_t pdgabs2prong, // debug printouts for Lc->V0 bachelor case if ( isV0 && (dgLabels[0]!=-1 && dgLabels[1]!=-1) ) { - AliAODv0 *theV0 = Getv0(); + AliAODv0 *theV0 = dynamic_cast(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(mcArray->At(lab2Prong)); + if(k0s){ + Int_t labK0 = k0s->GetMother(); + AliAODMCParticle*k0bar = dynamic_cast(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)", @@ -437,3 +448,56 @@ Double_t AliAODRecoCascadeHF::CosV0PointingAngle() const 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()); + +}