]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliAODRecoCascadeHF.cxx
Using detector quality flag (taken from ALICE logbook) to decide whether to rpodcue...
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAODRecoCascadeHF.cxx
index e56d53a3bab7bdd701347753cb6edced1ba19a14..c89209c8c00d49cefb27d2d36fa4061d5d31ebe5 100644 (file)
@@ -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<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);
@@ -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<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)",
@@ -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());
+
+}