From Massimo:
authorfbellini <fbellini@cern.ch>
Fri, 28 Feb 2014 16:22:41 +0000 (17:22 +0100)
committerfbellini <fbellini@cern.ch>
Fri, 28 Feb 2014 16:24:48 +0000 (17:24 +0100)
- added optional check on momentum conservation for MC pairs (default=disabled)
- update to the D0 analysis config macro for train

PWGLF/RESONANCES/AliRsnMiniOutput.cxx
PWGLF/RESONANCES/AliRsnMiniPair.cxx
PWGLF/RESONANCES/AliRsnMiniPair.h
PWGLF/RESONANCES/AliRsnMiniParticle.cxx
PWGLF/RESONANCES/AliRsnMiniParticle.h
PWGLF/RESONANCES/macros/mini/ConfigD0.C

index 7390a6f..8034351 100644 (file)
@@ -507,7 +507,10 @@ Int_t AliRsnMiniOutput::FillPair(AliRsnMiniEvent *event1, AliRsnMiniEvent *event
             if (p2->PDGAbs() == AliRsnDaughter::SpeciesPDG(fDaughter[0]) && p1->PDGAbs() == AliRsnDaughter::SpeciesPDG(fDaughter[1]))
                decayMatch = kTRUE;
             if (!decayMatch) continue;
-           if( (fMaxNSisters>0) && (p1->NTotSisters()==p2->NTotSisters()) && (p1->NTotSisters()>fMaxNSisters)) continue;
+           if ( (fMaxNSisters>0) && (p1->NTotSisters()==p2->NTotSisters()) && (p1->NTotSisters()>fMaxNSisters)) continue;
+           if ( fCheckP &&(TMath::Abs(fPair.PmotherX()-(p1->Px(1)+p2->Px(1)))/(TMath::Abs(fPair.PmotherX())+1.e-13)) > 0.00001 &&        
+                         (TMath::Abs(fPair.PmotherY()-(p1->Py(1)+p2->Py(1)))/(TMath::Abs(fPair.PmotherY())+1.e-13)) > 0.00001 &&
+                         (TMath::Abs(fPair.PmotherZ()-(p1->Pz(1)+p2->Pz(1)))/(TMath::Abs(fPair.PmotherZ())+1.e-13)) > 0.00001 ) continue;
          }
          // check pair against cuts
          if (fPairCuts) {
index 6c8cfe4..2fa782c 100644 (file)
@@ -20,9 +20,15 @@ void AliRsnMiniPair::Fill
    fDCA2 = p2->DCA();  
 
    fMother = -1;
+   fPmother[0] = -1.0;
+   fPmother[1] = -1.0;
+   fPmother[2] = -1.0;
    if (p1->Mother() == p2->Mother()) {
       fMother = p1->Mother();
       fMotherPDG = p1->MotherPDG();
+      fPmother[0] = p1->PmotherX();
+      fPmother[1] = p1->PmotherY();
+      fPmother[2] = p1->PmotherZ();
    }
 
    Int_t i;
index 4545923..4837f94 100644 (file)
@@ -18,10 +18,13 @@ class AliRsnMiniParticle;
 class AliRsnMiniPair : public TObject {
 public:
 
-   AliRsnMiniPair() : fDCA1(0), fDCA2(0), fMother(-1), fMotherPDG(0), fNSisters(-1) { }
+   AliRsnMiniPair() : fDCA1(0), fDCA2(0), fMother(-1), fMotherPDG(0), fNSisters(-1) {Int_t i = 3; while (i--) fPmother[i] = 0.0;}
   
    Int_t          &Mother()    {return fMother;}
    Int_t          &MotherPDG() {return fMotherPDG;}
+   Float_t        &PmotherX()  {return fPmother[0];}
+   Float_t        &PmotherY()  {return fPmother[1];}
+   Float_t        &PmotherZ()  {return fPmother[2];} 
    void           Fill(AliRsnMiniParticle *p1, AliRsnMiniParticle *p2, Double_t m1, Double_t m2, Double_t refMass);
    void           FillRef(Double_t mass);
    void           InvertP(Bool_t first);
@@ -63,8 +66,9 @@ public:
    Int_t          fMother;    // label of mothers (when common)
    Int_t          fMotherPDG; // PDG code of mother (when common)
    Short_t        fNSisters;  // total number of mother's daughters in the MC stack
+   Float_t        fPmother[3];// MC momentum of the pair corresponding mother
    
-   ClassDef(AliRsnMiniPair,2)
+   ClassDef(AliRsnMiniPair,3)
      };
 
 #endif
index e8679a7..445e17e 100644 (file)
@@ -30,7 +30,7 @@ void AliRsnMiniParticle::CopyDaughter(AliRsnDaughter *daughter)
    fMotherPDG = 0;
    fNTotSisters = -1;
    fCutBits = 0x0;
-   fPsim[0] = fPrec[0] = fPsim[1] = fPrec[1] = fPsim[2] = fPrec[2] = 0.0;
+   fPsim[0] = fPrec[0] = fPmother[0] = fPsim[1] = fPrec[1] = fPmother[1] = fPsim[2] = fPrec[2] = fPmother[2] = 0.0;
 
    // charge
    if (daughter->IsPos())
@@ -74,11 +74,16 @@ void AliRsnMiniParticle::CopyDaughter(AliRsnDaughter *daughter)
         fDCA = b[0];
        }
      }
-     // Number of Daughters from MC
+     // Number of Daughters from MC and Momentum of the Mother
      if (event->GetRefMC()) {
        TClonesArray * list = event->GetAODList();
        AliAODMCParticle *part = (AliAODMCParticle *)list->At(fMother);
-       if (part) fNTotSisters = part->GetNDaughters();
+       if (part) {
+        fNTotSisters = part->GetNDaughters();
+        fPmother[0]  = part->Px();
+        fPmother[1]  = part->Py();
+        fPmother[2]  = part->Pz();
+       }
      }
    } else {
      if (event->IsESD()){
@@ -93,10 +98,15 @@ void AliRsnMiniParticle::CopyDaughter(AliRsnDaughter *daughter)
           fDCA = b[0];
         }
        }
-       // Number of Daughters from MC 
+       // Number of Daughters from MC and Momentum of the Mother
        if (event->GetRefMC()) {
         AliMCParticle *part = (AliMCParticle *)event->GetRefMC()->GetTrack(fMother);
-        if(part)fNTotSisters = part->Particle()->GetNDaughters();
+        if(part){
+          fNTotSisters = part->Particle()->GetNDaughters();
+          fPmother[0]  = part->Px();
+          fPmother[1]  = part->Py();
+          fPmother[2]  = part->Pz();
+        }
        }
      }
    }
index 5ee432a..f66ff12 100644 (file)
@@ -16,7 +16,7 @@ class AliRsnDaughter;
 class AliRsnMiniParticle : public TObject {
 public:
 
-   AliRsnMiniParticle() : fIndex(-1), fCharge(0), fPDG(0), fMother(0), fMotherPDG(0), fDCA(0), fNTotSisters(0), fCutBits(0x0) {Int_t i = 3; while (i--) fPsim[i] = fPrec[i] = 0.0;}
+   AliRsnMiniParticle() : fIndex(-1), fCharge(0), fPDG(0), fMother(0), fMotherPDG(0), fDCA(0), fNTotSisters(0), fCutBits(0x0) {Int_t i = 3; while (i--) fPsim[i] = fPrec[i] = fPmother[i] = 0.0;}
 
    Int_t         &Index()                    {return fIndex;}
    Char_t        &Charge()                   {return fCharge;}
@@ -26,6 +26,9 @@ public:
    Float_t       &PrecX()                    {return fPrec[0];}
    Float_t       &PrecY()                    {return fPrec[1];}
    Float_t       &PrecZ()                    {return fPrec[2];}
+   Float_t       &PmotherX()                 {return fPmother[0];}
+   Float_t       &PmotherY()                 {return fPmother[1];}
+   Float_t       &PmotherZ()                 {return fPmother[2];}
    Float_t       &Px(Bool_t mc)              {return (mc ? fPsim[0] : fPrec[0]);}
    Float_t       &Py(Bool_t mc)              {return (mc ? fPsim[1] : fPrec[1]);}
    Float_t       &Pz(Bool_t mc)              {return (mc ? fPsim[2] : fPrec[2]);}
@@ -50,6 +53,7 @@ private:
    Char_t    fCharge;       // track charge *character*: '+', '-', '0' (whatever else = undefined)
    Float_t   fPsim[3];      // MC momentum of the track
    Float_t   fPrec[3];      // reconstructed momentum of the track
+   Float_t   fPmother[3];   // MC momentum of the track's mother
    Short_t   fPDG;          // particle PDG code
    Int_t     fMother;       // index of mother in its container
    Short_t   fMotherPDG;    // PDG code of mother
@@ -57,7 +61,7 @@ private:
    Short_t   fNTotSisters;  // number of  daughters of the particle
    UShort_t  fCutBits;      // list of bits used to know what cuts were passed by this track
 
-   ClassDef(AliRsnMiniParticle,4)
+   ClassDef(AliRsnMiniParticle,5)
 };
 
 #endif
index 640c0d8..328a06f 100644 (file)
@@ -135,19 +135,19 @@ Bool_t ConfigD0
    // [1] = mixing
    // [2] = like ++
    // [3] = like --
-   Bool_t   use     [10] = { 1       ,  1       ,  1       ,  1       ,  1       ,  1        ,  1        ,  1        ,  1       ,  1       };
-   Bool_t   useIM   [10] = { 1       ,  1       ,  1       ,  1       ,  1       ,  1        ,  1        ,  1        ,  1       ,  1       };
-   TString  name    [10] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "RotateK1", "RotateP1", "RotateK2", "RotateP2", "LikePP" , "LikeMM" };
-   TString  comp    [10] = {"PAIR"   , "PAIR"   , "MIX"    , "MIX"    , "ROTATE1" , "ROTATE2" , "ROTATE1" , "ROTATE2" , "PAIR"   , "PAIR"   };
-   TString  output  [10] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE"  , "SPARSE"  , "SPARSE"  , "SPARSE"  , "SPARSE" , "SPARSE" };
-   Char_t   charge1 [10] = {'+'      , '-'      , '+'      , '-'      , '+'      , '+'       , '-'       , '-'       , '+'      , '-'      };
-   Char_t   charge2 [10] = {'-'      , '+'      , '-'      , '+'      , '-'      , '-'       , '+'       , '+'       , '+'      , '-'      };
-   Int_t    cutID1  [10] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK    ,  iCutK    ,  iCutK    ,  iCutK    ,  iCutK   ,  iCutK   };
-   Int_t    cutID2  [10] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi   ,  iCutPi   ,  iCutPi   ,  iCutPi   ,  iCutPi  ,  iCutPi  };
-   Int_t    ipdg    [10] = { 421     , -421     ,  421     , -421     ,  421     ,  421      , -421      , -421      ,  421     , -421     };
-   Double_t mass    [10] = { 1.86486 ,  1.86486 ,  1.86486 ,  1.86486 ,  1.86486  ,  1.86486  ,  1.86486  ,  1.86486  ,  1.86486 ,  1.86486 };
-   
-   for (Int_t i = 0; i < 10; i++) {
+   Bool_t   use     [8] = { 1     ,  1       ,  1       ,  1       ,  1        ,  1        ,  1       ,  1       };
+   Bool_t   useIM   [8] = { 1     ,  1       ,  1       ,  1       ,  1        ,  1        ,  1       ,  1       };
+   TString  name    [8] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "RotateK1", "RotateK2", "LikePP" , "LikeMM" };
+   TString  comp    [8] = {"PAIR"   , "PAIR"   , "MIX"  , "MIX"    , "ROTATE1" , "ROTATE1" , "PAIR"   , "PAIR"   };
+   TString  output  [8] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE"  , "SPARSE"  , "SPARSE" , "SPARSE" };
+   Char_t   charge1 [8] = {'+'    , '-'      , '+'      , '-'      , '+'       , '-'       , '+'      , '-'      };
+   Char_t   charge2 [8] = {'-'    , '+'      , '-'      , '+'      , '-'       , '+'       , '+'      , '-'      };
+   Int_t    cutID1  [8] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK    ,  iCutK   ,  iCutK   };
+   Int_t    cutID2  [8] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi ,  iCutPi   ,  iCutPi  ,  iCutPi  };
+   Int_t    ipdg    [8] = { 421     , -421     ,  421   , -421     ,  421      , -421      ,  421     , -421     };
+   Double_t mass    [8] = { 1.86486 ,  1.86486 ,  1.86486 ,  1.86486 ,  1.86486  ,  1.86486  ,  1.86486 ,  1.86486 };
+   
+   for (Int_t i = 0; i < 8; i++) {
       if (!use[i]) continue;
       
       // create output
@@ -170,7 +170,7 @@ Bool_t ConfigD0
       //else
       //   out->AddAxis(resID, 200, -0.02, 0.02);
       // axis Y: transverse momentum
-      out->AddAxis(ptID, 100, 0.0, 10.0);
+      out->AddAxis(ptID, 150, 0.0, 15.0);
       
       // axiz Z: rapidity
       //out->AddAxis(yID, 100, -1, 1);
@@ -224,8 +224,8 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(imID, 3000, 0., 3.);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(imID, 800, 1.4, 2.2);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
    //out->AddAxis(nsistID, 10, 0, 5);
@@ -248,8 +248,8 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(imID,3000, 0., 3.);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(imID, 800, 1.4, 2.2);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
    //out->AddAxis(nsistID, 10, 0, 5);
@@ -275,8 +275,8 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(resID, 1000, -0.1, 0.1);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(resID, 200, -0.02, 0.02);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
    //out->AddAxis(nsistID, 10, 0, 5);
@@ -297,8 +297,8 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(resID, 1000, -0.1, 0.1);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(resID, 200, -0.02, 0.02);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
    //out->AddAxis(nsistID, 10, 0, 5);
@@ -320,8 +320,8 @@ Bool_t ConfigD0
    // pair cuts
    out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(imID, 3000, 0.0, 3.0);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(imID, 800, 1.4, 2.2);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
@@ -336,8 +336,8 @@ Bool_t ConfigD0
    // pair cuts
    out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(imID, 3000, 0, 3.0);
-   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(imID, 800, 1.4, 2.2);
+   out->AddAxis(ptID, 150, 0.0, 15.0);
    //out->AddAxis(yID, 100, -1, 1);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);