GetFirstDaughter
authormorsch <andreas.morsch@cern.ch>
Wed, 11 Jun 2014 11:26:44 +0000 (13:26 +0200)
committermorsch <andreas.morsch@cern.ch>
Wed, 11 Jun 2014 11:26:44 +0000 (13:26 +0200)
GetLastDaughter
added to VParticle
Assigment of generator index in AliMCEvent

STEER/AOD/AliAODMCParticle.cxx
STEER/AOD/AliAODMCParticle.h
STEER/STEERBase/AliGenPythiaEventHeader.h
STEER/STEERBase/AliMCEvent.cxx
STEER/STEERBase/AliMCEvent.h
STEER/STEERBase/AliMCParticle.cxx
STEER/STEERBase/AliMCParticle.h
STEER/STEERBase/AliVParticle.h

index 5e77910..1c0fce1 100644 (file)
@@ -47,7 +47,8 @@ AliVParticle(),
   fVx(0),
   fVy(0),
   fVz(0),
-  fVt(0)
+  fVt(0),
+  fGeneratorIndex(-1)
 {
   // Default Constructor
   fDaughter[0] =   fDaughter[1] = 0;
@@ -67,7 +68,8 @@ AliAODMCParticle::AliAODMCParticle(const AliMCParticle* mcpart, Int_t label,Int_
     fVx(mcpart->Particle()->Vx()),
     fVy(mcpart->Particle()->Vy()),
     fVz(mcpart->Particle()->Vz()),
-    fVt(mcpart->Particle()->T())
+    fVt(mcpart->Particle()->T()),
+    fGeneratorIndex(mcpart->GetGeneratorIndex())
 {
     // Constructor
   fDaughter[0] =  mcpart->GetFirstDaughter(); 
@@ -88,7 +90,8 @@ AliAODMCParticle::AliAODMCParticle(const AliAODMCParticle& mcPart) :
     fVx(mcPart.fVx),
     fVy(mcPart.fVy),
     fVz(mcPart.fVz),
-    fVt(mcPart.fVt)
+    fVt(mcPart.fVt),
+    fGeneratorIndex(-1)
 {
   // Copy constructor
   fDaughter[0] = mcPart.fDaughter[0]; 
@@ -114,6 +117,7 @@ AliAODMCParticle& AliAODMCParticle::operator=(const AliAODMCParticle& mcPart)
     fVy         = mcPart.fVy;
     fVz         = mcPart.fVz;
     fVt         = mcPart.fVt;
+    fGeneratorIndex = mcPart.fGeneratorIndex;
     fDaughter[0] = mcPart.fDaughter[0]; 
     fDaughter[1] = mcPart.fDaughter[1]; 
   }  
index bf9a138..15820ce 100644 (file)
@@ -71,10 +71,15 @@ class AliAODMCParticle: public AliVParticle {
     virtual Int_t GetNDaughters  () const { return fDaughter[1]>0 ? fDaughter[1]-fDaughter[0]+1 : (fDaughter[0]>0 ? 1:0 ) ;}
     virtual void SetMother(Int_t im){fMother = im;}
     virtual Int_t GetMother() const {return fMother;}
+
+    virtual Int_t   GetFirstDaughter()   const {return fDaughter[0];}
+    virtual Int_t   GetLastDaughter()    const {return fDaughter[1];}
+
     virtual void Print(const Option_t *opt = "") const;
     virtual Int_t GetPdgCode() const { return fPdgCode;}
     virtual Int_t PdgCode()    const { return GetPdgCode();}
-    
+    virtual void    SetGeneratorIndex(Short_t i) {fGeneratorIndex = i;}
+    virtual Short_t GetGeneratorIndex() const {return fGeneratorIndex;}
     enum { kPrimary = 1<<0, kPhysicalPrim = 1<<1, kSecondaryFromWeakDecay = 1<<2, kSecondaryFromMaterial = 1 <<3}; // use only the first 8bits!
     void SetFlag(UInt_t flag){fFlag = flag;} // carefull flag encodes three different types of information 
     UInt_t GetFlag() const {return fFlag;}
@@ -152,7 +157,7 @@ class AliAODMCParticle: public AliVParticle {
   Double32_t       fVy;                   // [0.,0.,12] y of production vertex
   Double32_t       fVz;                   // [0.,0.,12] z of production vertex
   Double32_t       fVt;                   // [0.,0.,12] t of production vertex
-
+  Short_t          fGeneratorIndex;       //! Index of generator in cocktail     
   // Copy the uniquID to another data member? unique ID is correctly handled 
   // via TOBject Copy construct but not by AliVParticle ctor (no passing of 
   // TParticles
@@ -170,7 +175,7 @@ class AliAODMCParticle: public AliVParticle {
     };
   */
 
-  ClassDef(AliAODMCParticle,7)  // AliVParticle realisation for AODMCParticles
+  ClassDef(AliAODMCParticle,8)  // AliVParticle realisation for AODMCParticles
 
 };
 
index bf7efae..69e724a 100644 (file)
@@ -54,7 +54,7 @@ protected:
     Float_t  fUQJets[4][10];             // Unquenched trigger jets
     Double_t fZquench[4];                // Quenching fraction
     Float_t  fPtHard;                    // pT hard
-    Float_t  fXsection;                  //Cross-section
+    Float_t  fXsection;                  // Cross-section
 
     ClassDef(AliGenPythiaEventHeader,7)  // Event header for Pythia event
 };
index 83527a4..ddb69d1 100644 (file)
@@ -845,6 +845,33 @@ Bool_t AliMCEvent::IsFromBGEvent(Int_t index)
     TString empty="";
     return empty;}
 
+void AliMCEvent::AssignGeneratorIndex() {
+  //
+  // Assign the generator index to each particle
+  //
+  TList* list;
+  Int_t nt = GetCocktailList(list);
+  if (nt == 0) {
+  } else {
+    Int_t nh = list->GetEntries();
+    Int_t nsumpart = 0;
+    for(Int_t i = 0; i < nh; i++){
+      AliGenEventHeader* gh = (AliGenEventHeader*)list->At(i);
+      Int_t npart = gh->NProduced();
+      for (Int_t j = nsumpart; j < npart; j++) {
+       AliVParticle* part = GetTrack(j);
+       part->SetGeneratorIndex(i);
+       Int_t dmin = part->GetFirstDaughter();
+       Int_t dmax = part->GetLastDaughter();
+       for (Int_t k = dmin; k <= dmax; k++) {
+         AliVParticle* dpart = GetTrack(k);
+         dpart->SetGeneratorIndex(i);
+       }
+      } 
+      nsumpart += npart;
+    }
+  }
+}
 
 
    Bool_t  AliMCEvent::GetCocktailGenerator(Int_t index,TString &nameGen){
index 6e99daf..d5f8a5d 100644 (file)
@@ -141,6 +141,7 @@ public:
      virtual void SetExternalHeader(AliVHeader* aodmcHeader)
        {fAODMCHeader=aodmcHeader;}  
   virtual AliGenEventHeader *FindHeader(Int_t ipart);
+  virtual void AssignGeneratorIndex();    
     //Following needed only for mixed event
   virtual Int_t        EventIndex(Int_t)       const {return 0;}
   virtual Int_t        EventIndexForCaloCluster(Int_t) const {return 0;}
@@ -151,7 +152,7 @@ public:
 
   virtual AliVVZERO    *GetVZEROData() const {return 0;}
   virtual AliVZDC      *GetZDCData()   const {return 0;}
-    
+
 
 private:
     virtual void      ReorderAndExpandTreeTR();
@@ -179,7 +180,6 @@ private:
     static   Int_t        fgkBgLabelOffset;  // Standard branch name    
     mutable  AliVVertex*  fVertex;           // MC Vertex
     Int_t             fNBG;              //! Background particles in current event
-    
     ClassDef(AliMCEvent, 2)              // AliVEvent realisation for MC data
 };
 
index 37a9247..2da606e 100644 (file)
@@ -37,7 +37,8 @@ AliMCParticle::AliMCParticle():
     fLabel(-1),
     fMother(-1),
     fFirstDaughter(-1),
-    fLastDaughter(-1)
+    fLastDaughter(-1),
+    fGeneratorIndex(-1)
 {
     // Constructor
 }
@@ -51,7 +52,8 @@ AliMCParticle::AliMCParticle(TParticle* part, TObjArray* rarray, Int_t index):
     fLabel(index),
     fMother(-1),
     fFirstDaughter(-1),
-    fLastDaughter(-1)
+    fLastDaughter(-1),
+    fGeneratorIndex(-1)
 {
     // Constructor
     if (rarray != 0) {
@@ -68,7 +70,8 @@ AliMCParticle::AliMCParticle(const AliMCParticle& mcPart) :
     fLabel(-1),
     fMother(-1),
     fFirstDaughter(-1),
-    fLastDaughter(-1)
+    fLastDaughter(-1),
+    fGeneratorIndex(-1)
 {
 // Copy constructor
 }
index 8639f05..b3c73d6 100644 (file)
@@ -75,7 +75,9 @@ public:
     void  SetFirstDaughter(Int_t idx) {fFirstDaughter = idx;}
     void  SetLastDaughter(Int_t idx)  {fLastDaughter  = idx;}
     void  SetLabel(Int_t label)       {fLabel         = label;}
-           
+    virtual void    SetGeneratorIndex(Short_t i) {fGeneratorIndex = i;}
+    virtual Short_t GetGeneratorIndex() const {return fGeneratorIndex;}
+    
  private:
     TParticle *fParticle;             // The wrapped TParticle
     TObjArray *fTrackReferences;      // Array to track references
@@ -84,7 +86,7 @@ public:
     Int_t      fMother;               // Mother particles
     Int_t      fFirstDaughter;        // First daughter
     Int_t      fLastDaughter;         // LastDaughter
-    
+    Short_t    fGeneratorIndex;       // !Generator index in cocktail  
   ClassDef(AliMCParticle,0)  // AliVParticle realisation for MCParticles
 };
 
index df60599..4298d6e 100644 (file)
@@ -81,10 +81,13 @@ public:
   Bool_t   Local2GlobalPosition(Double_t r[3], Double_t alpha) const;
   Bool_t   Global2LocalMomentum(Double_t p[3], Short_t charge, Double_t &alpha) const;
   Bool_t   Global2LocalPosition(Double_t r[3], Double_t alpha) const;
-  //Navigation
-  virtual Int_t GetMother()   const {return -1;}
-  
 
+  //Navigation
+  virtual Int_t   GetMother()   const {return -1;}
+  virtual Int_t   GetFirstDaughter()   const {return -1;}
+  virtual Int_t   GetLastDaughter()    const {return -1;}
+  virtual void    SetGeneratorIndex(Short_t) {;}
+  virtual Short_t GetGeneratorIndex() const {return -1;}
   ClassDef(AliVParticle, 3)  // base class for particles
 };