AliGenMC base class for AliGenParam and AliGenPythia commonalities.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 13 Jul 2001 10:56:00 +0000 (10:56 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 13 Jul 2001 10:56:00 +0000 (10:56 +0000)
EVGEN/AliGenMC.cxx [new file with mode: 0644]
EVGEN/AliGenMC.h [new file with mode: 0644]
EVGEN/EVGENLinkDef.h
EVGEN/Makefile

diff --git a/EVGEN/AliGenMC.cxx b/EVGEN/AliGenMC.cxx
new file mode 100644 (file)
index 0000000..8b738f5
--- /dev/null
@@ -0,0 +1,244 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+*/
+
+#include "AliGenMC.h"
+#include "AliPDG.h"
+#include <TParticle.h>
+
+ ClassImp(AliGenMC)
+
+AliGenMC::AliGenMC()
+                 :AliGenerator()
+{
+// Default Constructor
+    SetCutOnChild();
+    SetChildMomentumRange();
+    SetChildPtRange();
+    SetChildPhiRange();
+    SetChildThetaRange(); 
+    SetChildYRange(); 
+}
+
+AliGenMC::AliGenMC(Int_t npart)
+                 :AliGenerator(npart)
+{
+//  Constructor
+    SetCutOnChild();
+    SetChildMomentumRange();
+    SetChildPtRange();
+    SetChildPhiRange();
+    SetChildThetaRange();
+    SetChildYRange(); 
+// 
+    fParentSelect.Set(8);
+    fChildSelect.Set(8);
+    for (Int_t i=0; i<8; i++) fParentSelect[i]=fChildSelect[i]=0;
+}
+
+AliGenMC::AliGenMC(const AliGenMC & mc)
+{
+// copy constructor
+}
+
+AliGenMC::~AliGenMC()
+{
+// Destructor
+}
+
+void AliGenMC::Init()
+{
+//
+//  Initialization
+    switch (fForceDecay) {
+    case kSemiElectronic:
+    case kDiElectron:
+    case kBJpsiDiElectron:
+    case kBPsiPrimeDiElectron:
+       fChildSelect[0]=kElectron;      
+       break;
+    case kSemiMuonic:
+    case kDiMuon:
+    case kBJpsiDiMuon:
+    case kBPsiPrimeDiMuon:
+    case kPiToMu:
+    case kKaToMu:
+       fChildSelect[0]=kMuonMinus;
+       break;
+    case kHadronicD:
+       fChildSelect[0]=kPiPlus;
+       fChildSelect[1]=kKPlus;
+       break;
+    case kAll:
+    case kNoDecay:
+       break;
+    }
+}
+
+
+Bool_t AliGenMC::ParentSelected(Int_t ip)
+{
+// True if particle is in list of parent particles to be selected
+    for (Int_t i=0; i<8; i++)
+    {
+       if (fParentSelect[i]==ip) return kTRUE;
+    }
+    return kFALSE;
+}
+
+Bool_t AliGenMC::ChildSelected(Int_t ip)
+{
+// True if particle is in list of decay products to be selected
+    for (Int_t i=0; i<5; i++)
+    {
+       if (fChildSelect[i]==ip) return kTRUE;
+    }
+    return kFALSE;
+}
+
+Bool_t AliGenMC::KinematicSelection(TParticle *particle, Int_t flag)
+{
+// Perform kinematic selection
+    Float_t px    = particle->Px();
+    Float_t py    = particle->Py();
+    Float_t pz    = particle->Pz();
+    Float_t  e    = particle->Energy();
+    Float_t pt    = particle->Pt();
+    Float_t p     = particle->P();
+    Float_t theta = particle->Theta();
+    Float_t phi   = Float_t(TMath::ATan2(Double_t(py),Double_t(px)));
+    Float_t y;
+    
+    if ( (e-pz)<=0 || (e+pz)<=0 ) {
+       return kFALSE;
+    } else {
+      y = 0.5*TMath::Log((e+pz)/(e-pz));
+    }
+    
+    if (flag == 0) {
+//
+// Primary particle cuts
+//
+//  transverse momentum cut    
+       if (pt > fPtMax || pt < fPtMin) {
+//         printf("\n failed pt cut %f %f %f \n",pt,fPtMin,fPtMax);
+           return kFALSE;
+       }
+//
+// momentum cut
+       if (p > fPMax || p < fPMin) {
+//         printf("\n failed p cut %f %f %f \n",p,fPMin,fPMax);
+           return kFALSE;
+       }
+//
+// theta cut
+       if (theta > fThetaMax || theta < fThetaMin) {
+//         printf("\n failed theta cut %f %f %f \n",theta,fThetaMin,fThetaMax);
+           return kFALSE;
+       }
+//
+// rapidity cut
+       if (y > fYMax || y < fYMin) {
+//         printf("\n failed y cut %f %f %f \n",y,fYMin,fYMax);
+           return kFALSE;
+       }
+//
+// phi cut
+       if (phi > fPhiMax || phi < fPhiMin) {
+//         printf("\n failed phi cut %f %f %f \n",phi,fPhiMin,fPhiMax);
+           return kFALSE;
+       }
+    } else {
+//
+// Decay product cuts
+//
+//  transverse momentum cut    
+       if (pt > fChildPtMax || pt < fChildPtMin) {
+//         printf("\n failed pt cut %f %f %f \n",pt,fChildPtMin,fChildPtMax);
+           return kFALSE;
+       }
+//
+// momentum cut
+       if (p > fChildPMax || p < fChildPMin) {
+//         printf("\n failed p cut %f %f %f \n",p,fChildPMin,fChildPMax);
+           return kFALSE;
+       }
+//
+// theta cut
+       if (theta > fChildThetaMax || theta < fChildThetaMin) {
+//         printf("\n failed theta cut %f %f %f \n",theta,fChildThetaMin,fChildThetaMax);
+           return kFALSE;
+       }
+//
+// rapidity cut
+       if (y > fChildYMax || y < fChildYMin) {
+//         printf("\n failed y cut %f %f %f \n",y,fChildYMin,fChildYMax);
+           return kFALSE;
+       }
+//
+// phi cut
+       if (phi > fChildPhiMax || phi < fChildPhiMin) {
+//         printf("\n failed phi cut %f %f %f \n",phi,fChildPhiMin,fChildPhiMax);
+           return kFALSE;
+       }
+    }
+    
+    
+
+    return kTRUE;
+}
+
+Int_t AliGenMC::CheckPDGCode(Int_t pdgcode)
+{
+//
+//  If the particle is in a diffractive state, then take action accordingly
+  switch (pdgcode) {
+  case 91:
+    return 92;
+  case 110:
+    //rho_diff0 -- difficult to translate, return rho0
+    return 113;
+  case 210:
+    //pi_diffr+ -- change to pi+
+    return 211;
+  case 220:
+    //omega_di0 -- change to omega0
+    return 223;
+  case 330:
+    //phi_diff0 -- return phi0
+    return 333;
+  case 440:
+    //J/psi_di0 -- return J/psi
+    return 443;
+  case 2110:
+    //n_diffr -- return neutron
+    return 2112;
+  case 2210:
+    //p_diffr+ -- return proton
+    return 2212;
+  }
+  //non diffractive state -- return code unchanged
+  return pdgcode;
+}
+         
+AliGenMC& AliGenMC::operator=(const  AliGenMC& rhs)
+{
+// Assignment operator
+    return *this;
+}
+
diff --git a/EVGEN/AliGenMC.h b/EVGEN/AliGenMC.h
new file mode 100644 (file)
index 0000000..ea77e1b
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef ALIGENMC_H
+#define ALIGENMC_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+
+#include "AliGenerator.h"
+#include "AliDecayer.h"
+#include <TArrayI.h>    
+
+class TParticle;
+
+class AliGenMC : public AliGenerator
+{
+ public:
+    AliGenMC();
+    AliGenMC(Int_t npart);
+    AliGenMC(const AliGenMC &MC);
+    virtual ~AliGenMC();
+    void Init();
+    virtual void SetForceDecay(Decay_t decay = kDiMuon) {fForceDecay = decay;}
+    AliGenMC & operator=(const AliGenMC & rhs);
+        virtual void SetCutOnChild(Int_t flag = 0) {fCutOnChild = flag;}
+    virtual void SetChildMomentumRange(Float_t pmin = 0, Float_t pmax = 1.e10)
+       {fChildPMin = pmin; fChildPMax = pmax;}
+    virtual void SetChildPtRange(Float_t ptmin = 0, Float_t ptmax = 20.)
+       {fChildPtMin = ptmin; fChildPtMax = ptmax;}
+    virtual void SetChildPhiRange(Float_t phimin = -180., Float_t phimax = 180)
+       {fChildPhiMin = TMath::Pi()*phimin/180;
+       fChildPhiMax  = TMath::Pi()*phimax/180;}
+    virtual void SetChildThetaRange(Float_t thetamin = 0, Float_t thetamax = 180)
+       {fChildThetaMin = TMath::Pi()*thetamin/180;
+       fChildThetaMax  = TMath::Pi()*thetamax/180;}
+    virtual void SetChildYRange(Float_t ymin = -12, Float_t ymax = 12)
+       {fChildYMin = ymin;
+       fChildYMax  = ymax;}
+
+ protected:
+    // check if particle is selected as parent particle
+    Bool_t ParentSelected(Int_t ip);
+    // check if particle is selected as child particle
+    Bool_t ChildSelected(Int_t ip);
+    // all kinematic selection cuts go here 
+    Bool_t KinematicSelection(TParticle *particle, Int_t flag);
+    Int_t  CheckPDGCode(Int_t pdgcode);
+
+ protected:
+    TArrayI     fParentSelect;  // Parent particles to be selected 
+    TArrayI     fChildSelect;   // Decay products to be selected
+    Int_t       fCutOnChild;    // Cuts on decay products (children)  are enabled/disabled
+    Float_t     fChildPtMin;    // Children minimum pT
+    Float_t     fChildPtMax;    // Children maximum pT
+    Float_t     fChildPMin;     // Children minimum p
+    Float_t     fChildPMax;     // Children maximum p
+    Float_t     fChildPhiMin;   // Children minimum phi
+    Float_t     fChildPhiMax;   // Children maximum phi
+    Float_t     fChildThetaMin; // Children minimum theta
+    Float_t     fChildThetaMax; // Children maximum theta
+    Float_t     fChildYMin;     // Children minimum y
+    Float_t     fChildYMax;     // Children maximum y
+    Decay_t     fForceDecay;    // Decay channel forced
+       
+    ClassDef(AliGenMC,1)       // AliGenerator implementation for generators using MC methods
+};
+#endif
+
+
+
+
+
index 671c5af789c35cfbfe0e4c84cc253f8622a7e9fb..aff5ead3d75b02c65afe22b1d86a695ad10684c3 100644 (file)
@@ -40,6 +40,7 @@
 #pragma link C++ class  AliMevSimConfig+;
 #pragma link C++ class  AliMevSimParticle+;
 #pragma link C++ class  AliGenMevSim+;
+#pragma link C++ class  AliGenMC+;
 #endif
 
 
index 3cc44934ec87addd196a3617ef7c332c02e4d36f..4a33d91578e534b416bea0e26259d69c34c0a024 100644 (file)
@@ -21,7 +21,8 @@ SRCS          = AliGenHIJINGpara.cxx AliGenBox.cxx AliGenFixed.cxx \
                AliGenHijing.cxx \
                AliGenHijingEventHeader.cxx AliGenPythiaEventHeader.cxx \
                AliDecayer.cxx AliDecayerPythia.cxx \
-                AliGenMevSim.cxx AliMevSimParticle.cxx AliMevSimConfig.cxx
+                AliGenMevSim.cxx AliMevSimParticle.cxx AliMevSimConfig.cxx \
+               AliGenMC.cxx
 # C++ Headers
 
 HDRS          = $(SRCS:.cxx=.h) $(ALICE_ROOT)/include/THijing.h \