Update on decay channel : consider also anti-particle decay
authorrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Apr 2009 16:05:51 +0000 (16:05 +0000)
committerrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Apr 2009 16:05:51 +0000 (16:05 +0000)
CORRFW/AliCFParticleGenCuts.cxx
CORRFW/AliCFParticleGenCuts.h

index fad953e..13f25c8 100644 (file)
@@ -314,6 +314,7 @@ void AliCFParticleGenCuts::SelectionBitMap(AliMCParticle* mcPart)
     Bool_t goodDecay = kTRUE ;
     Short_t nDaughters = mcPart->Particle()->GetNDaughters() ;
     if (nDaughters != fDecayChannel->NDaughters()) goodDecay = kFALSE ;
+    //now number of daughters is OK
     if (goodDecay) {
       // now check if decay channel is respected
       // first try
@@ -329,9 +330,26 @@ void AliCFParticleGenCuts::SelectionBitMap(AliMCParticle* mcPart)
          if (daug->GetPdgCode() != fDecayChannel->DaughterPdgCode(iDaughter)) {goodDecay = kFALSE; break;}
        }
       }
-    }
+      if (!goodDecay && fRequireAbsolutePdg) {
+       //now tries inverting the sign of the daughters in case the anti-particle is also looked at
+       // third try
+       goodDecay = kTRUE ;
+       for (Int_t iDaughter = 0; iDaughter<nDaughters; iDaughter++) {
+         TParticle* daug = stack->Particle(mcPart->Particle()->GetDaughter(iDaughter)) ;
+         if (daug->GetPdgCode() != -fDecayChannel->DaughterPdgCode(iDaughter)) {goodDecay = kFALSE; break;}
+       }
+       if (!goodDecay) {
+         //fourth try inverting the order of the daughters
+         goodDecay = kTRUE ;
+         for (Int_t iDaughter = 0; iDaughter<nDaughters; iDaughter++) {
+           TParticle* daug = stack->Particle(mcPart->Particle()->GetDaughter(nDaughters-(iDaughter+1))) ;
+           if (daug->GetPdgCode() != -fDecayChannel->DaughterPdgCode(iDaughter)) {goodDecay = kFALSE; break;}
+         }
+       }
+      } //end check anti-particle
+    } //end # daughters OK
     fCutValues->SetAt((Double32_t)goodDecay,kCutDecayChannel) ;
-  }
+  } //end require decay channel
   else fCutValues->SetAt((Double32_t)kTRUE,kCutDecayChannel);
   
   
index 7d54238..8873afd 100644 (file)
@@ -118,7 +118,7 @@ class AliCFParticleGenCuts : public AliCFCutBase
   Bool_t     fRequireIsPrimary;   // require primary particle
   Bool_t     fRequireIsSecondary; // require secondary particle
   Bool_t     fRequirePdgCode;     // require check of the PDG code
-  Bool_t     fRequireAbsolutePdg; // use the PDG code absolute value
+  Bool_t     fRequireAbsolutePdg; // use the PDG code absolute value, used also for the decay channel
   Int_t      fPdgCode ;           // particle PDG code
   Double32_t fProdVtxXMin;        // min X of particle production vertex
   Double32_t fProdVtxYMin;        // min Y of particle production vertex
@@ -136,7 +136,7 @@ class AliCFParticleGenCuts : public AliCFCutBase
   Double32_t fDecayLengthMax;     // max decay length (absolute)
   Double32_t fDecayRxyMin;        // min decay length in transverse plane wrt (0,0,0)
   Double32_t fDecayRxyMax;        // max decay length in transverse plane wrt (0,0,0)
-  TDecayChannel* fDecayChannel;   // decay channel 
+  TDecayChannel* fDecayChannel;   // decay channel : if fRequireAbsolutePdg, the antiparticle channel will be checked as well
 
   //QA histos
   TH1F*    fhCutStatistics;        // Histogram: statistics of what cuts the tracks did not survive