diff --git a/Inputs/EventGenerator/132Sndp.reaction b/Inputs/EventGenerator/132Sndp.reaction
index 3da1777b7da2c56f49120b1174a1616bf2b9590d..72598b481c356b15625ede5ee548b97869f59c62 100644
--- a/Inputs/EventGenerator/132Sndp.reaction
+++ b/Inputs/EventGenerator/132Sndp.reaction
@@ -15,8 +15,11 @@ Transfert
 	SigmaY= 0
 	SigmaThetaX= 0 
 	SigmaPhiY= 0
-	CrossSectionPath= 132Sndp_10A_MeV_2f7_ZR_FRC.lis
+	CrossSectionPath= sn132dp_gs_10AMeV.txt
+%	CrossSectionPath= 132Sndp_10A_MeV_2f7_ZR_FRC.lis
 %	CrossSectionPath= flat.txt
+   HalfOpenAngleMin= 0
+   HalfOpenAngleMax= 180
 	ShootLight= 1
 	ShootHeavy= 0
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/NPLib/Physics/NPReaction.cxx b/NPLib/Physics/NPReaction.cxx
index 67e172b552a7ba285f78399aacb975d413f44449..65a1c54a87d3ffdc068a506ed13165147a0d4864 100644
--- a/NPLib/Physics/NPReaction.cxx
+++ b/NPLib/Physics/NPReaction.cxx
@@ -56,30 +56,32 @@ Reaction::Reaction()
 {
    //------------- Default Constructor -------------
 
-   fNuclei1       = new Nucleus() ;
-   fNuclei2       = new Nucleus() ;
-   fNuclei3       = new Nucleus() ;
-   fNuclei4       = new Nucleus() ;
-   fBeamEnergy = 0                ;
-   fThetaCM    = 0                ;
-   fExcitationLight = 0           ;
-   fExcitationHeavy = 0           ;
-   fQValue     = 0                ;
-   initializePrecomputeVariable() ;
+   fNuclei1              = new Nucleus();
+   fNuclei2              = new Nucleus();
+   fNuclei3              = new Nucleus();
+   fNuclei4              = new Nucleus();
+   fBeamEnergy           = 0;
+   fThetaCM              = 0;
+   fExcitationLight      = 0;
+   fExcitationHeavy      = 0;
+   fQValue               = 0;
+   fCrossSectionAngleMin = 0;
+   fCrossSectionAngleMax = 180;
+   initializePrecomputeVariable();
 }
 
 
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 
-Reaction::Reaction(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy ,string Path)
+Reaction::Reaction(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy ,string Path, double CSThetaMin, double CSThetaMax)
 {
-   SetEveryThing( name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path) ;
+   SetEveryThing( name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path, CSThetaMin, CSThetaMax);
 }
 
 
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 
-void Reaction::SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path)
+void Reaction::SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path, double CSThetaMin, double CSThetaMax)
 {
    //------------- Constructor with nuclei names and beam energy ------------
      
@@ -122,16 +124,25 @@ void Reaction::SetEveryThing(string name1, string name2, string name3, string na
     }
 
    double CSBuffer,AngleBuffer;
-   vector<double> CrossSectionBuffer ;
-   
-   while(!CSFile.eof())
-   {
-     CSFile >> AngleBuffer;
-     CSFile >> CSBuffer;   
-     double CSFinal = CSBuffer*sin(AngleBuffer*deg);
-     CrossSectionBuffer.push_back(CSFinal);
+   vector<double> CrossSectionBuffer;
+   double thetamin = 200;
+   double thetamax = -10;
+   while(!CSFile.eof()) {
+      CSFile >> AngleBuffer;
+      CSFile >> CSBuffer;   
+      // only treat angular range defined by user
+      if (AngleBuffer < CSThetaMin || AngleBuffer > CSThetaMax) continue; 
+      double CSFinal = CSBuffer*sin(AngleBuffer*deg);
+      CrossSectionBuffer.push_back(CSFinal);
+      // determine theta min and max
+      if (AngleBuffer < thetamin) thetamin = AngleBuffer;
+      if (AngleBuffer > thetamax) thetamax = AngleBuffer;
    }
-  
+
+   // set theta min and max values
+   fCrossSectionAngleMin = thetamin;
+   fCrossSectionAngleMax = thetamax;
+
    CSFile.close();
    CrossSectionSize = CrossSectionBuffer.size();
    CrossSection = new double[CrossSectionSize] ;
@@ -277,6 +288,7 @@ void Reaction::ReadConfigurationFile(string Path)
       ////////Reaction Setting needs///////
          string Beam, Target, Heavy, Light, CrossSectionPath ;
          double BeamEnergy = 0 , ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0;         
+         double CSHalfOpenAngleMin = 0, CSHalfOpenAngleMax = 0;
          bool ReadingStatus = false ;
          bool check_Beam = false ;
          bool check_Target = false ;
@@ -376,6 +388,18 @@ void Reaction::ReadConfigurationFile(string Path)
                      cout << "Cross Section File: " << CrossSectionPath << endl ;
                   }
 
+                  else if (DataBuffer.compare(0, 17, "HalfOpenAngleMin=") == 0) {
+                     ReactionFile >> DataBuffer;
+                     CSHalfOpenAngleMin = atof(DataBuffer.c_str()) * deg;
+                     cout << "HalfOpenAngleMin " << CSHalfOpenAngleMin / deg << " degree" << endl;
+                  }
+
+                  else if (DataBuffer.compare(0, 17, "HalfOpenAngleMax=") == 0) {
+                     ReactionFile >> DataBuffer;
+                     CSHalfOpenAngleMax = atof(DataBuffer.c_str()) * deg;
+                     cout << "HalfOpenAngleMax " << CSHalfOpenAngleMax / deg << " degree" << endl;
+                  }
+
                  
                   ///////////////////////////////////////////////////
                //   If no Transfert Token and no comment, toggle out
@@ -390,7 +414,7 @@ void Reaction::ReadConfigurationFile(string Path)
             }
          }
          
-         SetEveryThing(Beam, Target, Light, Heavy,BeamEnergy,ExcitationEnergyLight, ExcitationEnergyHeavy,CrossSectionPath);
+         SetEveryThing(Beam, Target, Light, Heavy,BeamEnergy,ExcitationEnergyLight, ExcitationEnergyHeavy,CrossSectionPath, CSHalfOpenAngleMin, CSHalfOpenAngleMax);
 
          ReactionFile.close();
    }
diff --git a/NPLib/Physics/NPReaction.h b/NPLib/Physics/NPReaction.h
index 0ce4cce5cfdc91e21ea7b4d5d272e7bdc7c65098..781822ee74debc7753028f1e8a4fd508735d42e1 100644
--- a/NPLib/Physics/NPReaction.h
+++ b/NPLib/Physics/NPReaction.h
@@ -49,11 +49,11 @@ namespace NPL
 
       public:  // Constructors and Destructors
          Reaction();
-         Reaction(string name1, string name2, string name3, string name4, double BeamEnergy , double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path);
+         Reaction(string name1, string name2, string name3, string name4, double BeamEnergy , double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path, double CSThetaMin = 0, double CSThetaMax = 180);
          ~Reaction();
 
       public:  // Various Method
-         void SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path) ;
+         void SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path, double CSThetaMin, double CSThetaMax);
          void ReadConfigurationFile(string Path);
 
       private:
@@ -69,6 +69,8 @@ namespace NPL
          double   fExcitationHeavy; // Excitation energy in MeV
          double*  CrossSection;     // Differential CrossSection
          int      CrossSectionSize; // Size of array containing Differention CrossSection
+         double   fCrossSectionAngleMin;  // Minimum angle of the differential cross-section given by the user
+         double   fCrossSectionAngleMax;  // Maximum angle of the differential cross-section given by the user
 
       public:
          // Getters and Setters
@@ -86,6 +88,8 @@ namespace NPL
          Nucleus* GetNucleus4() const              {return fNuclei4;}
          double*  GetCrossSection() const          {return CrossSection;}
          int      GetCrossSectionSize() const      {return CrossSectionSize;}
+         double   GetCrossSectionAngleMin() const  {return fCrossSectionAngleMin;}
+         double   GetCrossSectionAngleMax() const  {return fCrossSectionAngleMax;}
 
       private: // intern precompute variable
          void initializePrecomputeVariable();
diff --git a/NPSimulation/include/EventGeneratorTransfert.hh b/NPSimulation/include/EventGeneratorTransfert.hh
index b1676d2e848f8fdf6b27ff8daf7be7433ee1454d..c9db4789b4dcacb3baa093095d00f7378979f5e7 100644
--- a/NPSimulation/include/EventGeneratorTransfert.hh
+++ b/NPSimulation/include/EventGeneratorTransfert.hh
@@ -44,82 +44,88 @@ using namespace NPL ;
 
 class EventGeneratorTransfert : public VEventGenerator
 {
-public:     // Constructors and Destructors
-   // Default constructor used to allocate memory
-   EventGeneratorTransfert();
-
-   // This is the constructor to be used
-   EventGeneratorTransfert(   string name1                  ,        // Beam nuclei
-                              string name2                  ,        // Target nuclei
-                              string name3                  ,        // Product of reaction
-                              string name4                  ,        // Product of reaction
-                              double BeamEnergy             ,        // Beam Energy
-                              double ExcitationEnergyLight  ,        // Excitation of Light Nuclei
-                              double ExcitationEnergyHeavy  ,        // Excitation of Heavy Nuclei
-                              double BeamEnergySpread       ,
-                              double SigmaX                 ,
-                              double SigmaY                 ,
-                              double SigmaThetaX            ,
-                              double SigmaPhiY              ,
-                              bool   ShootLight             ,
-                              bool   ShootHeavy             ,
-                              string Path                   );       // Path of the differentiel Cross Section
-
-   // Default Destructor
-   virtual ~EventGeneratorTransfert();
-
-
-public: // Inherit from VEventGenerator class
-   void        ReadConfiguration(string);
-   void        GenerateEvent(G4Event*, G4ParticleGun*);
-   void          SetTarget(Target* Target) ;
-
-
-private: // Particle Shoot Option
-   bool        m_ShootLight;
-   bool        m_ShootHeavy;
-
-
-private: // Target Parameter
-   Target*     m_Target;
-
-
-private: // Reaction and CrossSection Shoot
-   Reaction*   m_Reaction;
-
-
-private: // Beam Parameters
-   double      m_BeamEnergy;
-   double      m_BeamEnergySpread;
-   double      m_SigmaX;
-   double      m_SigmaY;
-   double      m_SigmaThetaX;
-   double      m_SigmaPhiY;
-
-
-private: // TTree to store initial value of beam and reaction
-   TInitialConditions*   m_InitConditions;
-
-
-   // Other methods
-   void        Print() const;
-   void        InitializeRootOutput();
-
-   void        SetEverything( string name1                     ,        // Beam nuclei
-                              string name2                     ,        // Target nuclei
-                              string name3                     ,        // Product of reaction
-                              string name4                     ,        // Product of reaction
-                              double BeamEnergy                ,        // Beam Energy
-                              double ExcitationEnergyLight     ,        // Excitation of Light Nuclei
-                              double ExcitationEnergyHeavy     ,        // Excitation of Heavy Nuclei
-                              double BeamEnergySpread          ,
-                              double SigmaX                    ,
-                              double SigmaY                    ,
-                              double SigmaThetaX               ,
-                              double SigmaPhiY                 ,
-                              bool   ShootLight                ,
-                              bool   ShootHeavy                ,
-                              string Path                      );       // Path of the differentiel Cross Section
+   public:     // Constructors and Destructors
+      // Default constructor used to allocate memory
+      EventGeneratorTransfert();
+
+      // This is the constructor to be used
+      EventGeneratorTransfert(string name1                  ,           // Beam nuclei
+            string name2                  ,        // Target nuclei
+            string name3                  ,        // Product of reaction
+            string name4                  ,        // Product of reaction
+            double BeamEnergy             ,        // Beam Energy
+            double ExcitationEnergyLight  ,        // Excitation of Light Nuclei
+            double ExcitationEnergyHeavy  ,        // Excitation of Heavy Nuclei
+            double BeamEnergySpread       ,
+            double SigmaX                 ,
+            double SigmaY                 ,
+            double SigmaThetaX            ,
+            double SigmaPhiY              ,
+            bool   ShootLight             ,
+            bool   ShootHeavy             ,
+            string Path,
+            double CSThetaMin,
+            double CSThetaMax);                          // Path of the differentiel Cross Section
+
+      // Default Destructor
+      virtual ~EventGeneratorTransfert();
+
+
+   public: // Inherit from VEventGenerator class
+      void ReadConfiguration(string);
+      void GenerateEvent(G4Event*, G4ParticleGun*);
+      void SetTarget(Target* Target) ;
+
+
+   private: // Particle Shoot Option
+      bool m_ShootLight;
+      bool m_ShootHeavy;
+
+
+   private: // Target Parameter
+      Target* m_Target;
+
+
+   private: // Reaction and CrossSection Shoot
+      Reaction* m_Reaction;
+      G4double  m_HalfOpenAngleMin;  // Min Half open angle of the source
+      G4double  m_HalfOpenAngleMax;  // Max Half open angle of the source
+
+
+   private: // Beam Parameters
+      double m_BeamEnergy;
+      double m_BeamEnergySpread;
+      double m_SigmaX;
+      double m_SigmaY;
+      double m_SigmaThetaX;
+      double m_SigmaPhiY;
+
+
+   private: // TTree to store initial value of beam and reaction
+      TInitialConditions*   m_InitConditions;
+
+
+      // Other methods
+      void Print() const;
+      void InitializeRootOutput();
+
+      void SetEverything(string name1                     ,         // Beam nuclei
+                         string name2                     ,        // Target nuclei
+                         string name3                     ,        // Product of reaction
+                         string name4                     ,        // Product of reaction
+                         double BeamEnergy                ,        // Beam Energy
+                         double ExcitationEnergyLight     ,        // Excitation of Light Nuclei
+                         double ExcitationEnergyHeavy     ,        // Excitation of Heavy Nuclei
+                         double BeamEnergySpread          ,
+                         double SigmaX                    ,
+                         double SigmaY                    ,
+                         double SigmaThetaX               ,
+                         double SigmaPhiY                 ,
+                         bool   ShootLight                ,
+                         bool   ShootHeavy                ,
+                         string Path,
+                         double CSThetaMin,
+                         double CSThetaMax);                             // Path of the differentiel Cross Section
 };
 
 #endif
diff --git a/NPSimulation/include/EventGeneratorTransfertToResonance.hh b/NPSimulation/include/EventGeneratorTransfertToResonance.hh
index 5557b49aa98a39c8218acbad468b5a78c7912a5d..8b2b5e941420022154824467ad627bda469c51ab 100644
--- a/NPSimulation/include/EventGeneratorTransfertToResonance.hh
+++ b/NPSimulation/include/EventGeneratorTransfertToResonance.hh
@@ -69,7 +69,9 @@ class EventGeneratorTransfertToResonance : public VEventGenerator
                                           bool     ShootLight              ,
                                           bool     ShootHeavy              ,
                                           bool     ShootDecayProduct       ,
-                                          string   Path                    );       //Path of the differentiel Cross Section
+                                          string   Path                    ,
+                                          double   CSThetaMin              ,
+                                          double   CSThetaMax);       //Path of the differentiel Cross Section
 
       // Default Destructor
       virtual ~EventGeneratorTransfertToResonance();
@@ -141,7 +143,9 @@ class EventGeneratorTransfertToResonance : public VEventGenerator
                               bool     ShootLight              ,
                               bool     ShootHeavy              ,
                               bool     ShootDecayProduct       ,
-                              string   Path                    );       //Path of the differentiel Cross Section
+                              string   Path                    ,
+                              double   CSThetaMin              ,
+                              double   CSThetaMax);       //Path of the differentiel Cross Section
 };
 
 #endif
diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc
index 517e6bb73d459996b0c81657f37d6d1afcf82dd0..c7207bf29d40fee9e0d7df8433f3a05ae514ec0c 100644
--- a/NPSimulation/src/EventGeneratorTransfert.cc
+++ b/NPSimulation/src/EventGeneratorTransfert.cc
@@ -49,20 +49,21 @@ using namespace CLHEP;
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 EventGeneratorTransfert::EventGeneratorTransfert()
+   :  m_ShootLight(0),
+      m_ShootHeavy(0),
+      m_Target(0),
+      m_Reaction(new Reaction),
+      m_HalfOpenAngleMin(0),
+      m_HalfOpenAngleMax(180),
+      m_BeamEnergy(0),
+      m_BeamEnergySpread(0),
+      m_SigmaX(0),
+      m_SigmaY(0),
+      m_SigmaThetaX(0),
+      m_SigmaPhiY(0),
+      m_InitConditions(new TInitialConditions)
 {
    //------------- Default Constructor -------------
-   m_InitConditions = new TInitialConditions();
-   m_Reaction       = new Reaction();
-   m_Target         = 0;
-
-   m_BeamEnergy       = 0;
-   m_BeamEnergySpread = 0;
-   m_SigmaX           = 0;
-   m_SigmaY           = 0;
-   m_SigmaThetaX      = 0;
-   m_SigmaPhiY        = 0;
-   m_ShootLight       = 0;
-   m_ShootHeavy       = 0;
 }
 
 
@@ -98,7 +99,9 @@ EventGeneratorTransfert::EventGeneratorTransfert(  string name1
                                                    double SigmaPhiY              ,
                                                    bool   ShootLight             ,
                                                    bool   ShootHeavy             ,
-                                                   string Path                   )  // Path of the differentiel Cross Section
+                                                   string Path                   ,
+                                                   double CSThetaMin             ,
+                                                   double CSThetaMax)  // Path of the differentiel Cross Section
 {
  SetEverything(   name1,       
                   name2,        
@@ -114,7 +117,9 @@ EventGeneratorTransfert::EventGeneratorTransfert(  string name1
                   SigmaPhiY,
                   ShootLight,
                   ShootHeavy,
-                  Path);      
+                  Path,
+                  CSThetaMin,
+                  CSThetaMax);
 
 }
 
@@ -149,6 +154,7 @@ void EventGeneratorTransfert::ReadConfiguration(string Path)
    string Beam, Target, Heavy, Light, CrossSectionPath ;
    G4double BeamEnergy = 0 , ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0;
    G4double BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0;
+   G4double CSHalfOpenAngleMin = 0, CSHalfOpenAngleMax = 180;
    bool  ShootLight = false ;
    bool  ShootHeavy = false ;
    
@@ -283,6 +289,18 @@ void EventGeneratorTransfert::ReadConfiguration(string Path)
             G4cout << "Cross Section File: " << CrossSectionPath << G4endl ;
          }
 
+         else if (DataBuffer.compare(0, 17, "HalfOpenAngleMin=") == 0) {
+            ReactionFile >> DataBuffer;
+            CSHalfOpenAngleMin = atof(DataBuffer.c_str()) * deg;
+            G4cout << "HalfOpenAngleMin " << CSHalfOpenAngleMin / deg << " degree" << G4endl;
+         }
+
+         else if (DataBuffer.compare(0, 17, "HalfOpenAngleMax=") == 0) {
+            ReactionFile >> DataBuffer;
+            CSHalfOpenAngleMax = atof(DataBuffer.c_str()) * deg;
+            G4cout << "HalfOpenAngleMax " << CSHalfOpenAngleMax / deg << " degree" << G4endl;
+         }
+
         else if  (DataBuffer.compare(0, 11, "ShootLight=") == 0) {
            check_ShootLight = true ;
             ReactionFile >> DataBuffer;
@@ -331,7 +349,9 @@ void EventGeneratorTransfert::ReadConfiguration(string Path)
                   SigmaPhiY,
                   ShootLight,
                   ShootHeavy,
-                  CrossSectionPath);
+                  CrossSectionPath,
+                  CSHalfOpenAngleMin/deg,
+                  CSHalfOpenAngleMax/deg);
          
    ReactionFile.close();
 }
@@ -440,7 +460,7 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa
 
    // Angles
    RandGeneral CrossSectionShoot(m_Reaction->GetCrossSection(), m_Reaction->GetCrossSectionSize());
-   G4double ThetaCM = CrossSectionShoot.shoot() * (180*deg);
+   G4double ThetaCM = (m_Reaction->GetCrossSectionAngleMin() + CrossSectionShoot.shoot() * (m_Reaction->GetCrossSectionAngleMax() - m_Reaction->GetCrossSectionAngleMin())) * deg;
    G4double phi     = RandFlat::shoot() * 2*pi;
    // write angles to ROOT file
    m_InitConditions->SetICEmittedAngleThetaCM(ThetaCM / deg);
@@ -537,17 +557,21 @@ void EventGeneratorTransfert::SetEverything(string name1,                // Beam
                                             double SigmaPhiY,
                                             bool   ShootLight,
                                             bool   ShootHeavy,
-                                            string Path) 
+                                            string Path,
+                                            double CSThetaMin,
+                                            double CSThetaMax) 
 {
-   m_Reaction = new Reaction(name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path);   
-      
-   m_BeamEnergy       =  BeamEnergy;
-   m_BeamEnergySpread =  BeamEnergySpread;
-   m_SigmaX           =  SigmaX;
-   m_SigmaY           =  SigmaY;
-   m_SigmaThetaX      =  SigmaThetaX;
-   m_SigmaPhiY        =  SigmaPhiY;
-   m_ShootLight       =  ShootLight;
-   m_ShootHeavy       =  ShootHeavy;
+   m_Reaction = new Reaction(name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path, CSThetaMin, CSThetaMax);
+
+   m_BeamEnergy       = BeamEnergy;
+   m_BeamEnergySpread = BeamEnergySpread;
+   m_SigmaX           = SigmaX;
+   m_SigmaY           = SigmaY;
+   m_SigmaThetaX      = SigmaThetaX;
+   m_SigmaPhiY        = SigmaPhiY;
+   m_ShootLight       = ShootLight;
+   m_ShootHeavy       = ShootHeavy;
+   m_HalfOpenAngleMin = CSThetaMin;
+   m_HalfOpenAngleMax = CSThetaMax;
 }
  
diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc
index c03be291d69ce013c0e28d6a716483e688e1bc73..dd4c1a3d5c4d6fb702a2c57590f6e68ece460ab0 100644
--- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc
+++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc
@@ -102,7 +102,9 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string
                                                                         bool     ShootLight,
                                                                         bool     ShootHeavy,
                                                                         bool     ShootDecayProduct,
-                                                                        string   Path)
+                                                                        string   Path,
+                                                                        double   CSThetaMin,
+                                                                        double   CSThetaMax)
 {
    //------------- Constructor with nuclei names and beam energy ------------
 
@@ -124,7 +126,9 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string
                   ShootLight,
                   ShootHeavy,
                   ShootDecayProduct,
-                  Path);        
+                  Path,
+                  CSThetaMin,
+                  CSThetaMax);
                
    m_EventWeight = 0;
 
@@ -153,6 +157,7 @@ void EventGeneratorTransfertToResonance::ReadConfiguration(string Path)
    string Beam, Target, Heavy, Light, CrossSectionPath ;
    G4double BeamEnergy = 0, ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0;
    G4double BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0,  ResonanceWidth = 0 ,ResonanceDecayZ = 0 , ResonanceDecayA = 0  ;
+   G4double CSHalfOpenAngleMin = 0; G4double CSHalfOpenAngleMax = 180;
    bool  ShootLight = false ;
    bool  ShootHeavy = false ;
    bool ShootDecayProduct = false ;
@@ -313,6 +318,18 @@ void EventGeneratorTransfertToResonance::ReadConfiguration(string Path)
          G4cout << "Cross Section File: " << CrossSectionPath << G4endl ;
       }
 
+      else if (DataBuffer.compare(0, 17, "HalfOpenAngleMin=") == 0) {
+         ReactionFile >> DataBuffer;
+         CSHalfOpenAngleMin = atof(DataBuffer.c_str()) * deg;
+         G4cout << "HalfOpenAngleMin " << CSHalfOpenAngleMin / deg << " degree" << G4endl;
+      }
+
+      else if (DataBuffer.compare(0, 17, "HalfOpenAngleMax=") == 0) {
+         ReactionFile >> DataBuffer;
+         CSHalfOpenAngleMax = atof(DataBuffer.c_str()) * deg;
+         G4cout << "HalfOpenAngleMax " << CSHalfOpenAngleMax / deg << " degree" << G4endl;
+      }
+
       else if  (DataBuffer.compare(0, 11, "ShootLight=") == 0) {
         check_ShootLight = true ;
          ReactionFile >> DataBuffer;
@@ -374,7 +391,9 @@ void EventGeneratorTransfertToResonance::ReadConfiguration(string Path)
                ShootLight,
                ShootHeavy,
                ShootDecayProduct,
-               CrossSectionPath);
+               CrossSectionPath,
+               CSHalfOpenAngleMin,
+               CSHalfOpenAngleMax);
 
    ReactionFile.close();
 }
@@ -494,7 +513,7 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part
    /////////////////////////////////////////////////////////////////
    // Angles
    RandGeneral CrossSectionShoot(m_Reaction->GetCrossSection(), m_Reaction->GetCrossSectionSize());
-   G4double ThetaCM = CrossSectionShoot.shoot() * (180*deg);
+   G4double ThetaCM = (m_Reaction->GetCrossSectionAngleMin() + CrossSectionShoot.shoot() * (m_Reaction->GetCrossSectionAngleMax() - m_Reaction->GetCrossSectionAngleMin())) * deg;
    G4double phi     = RandFlat::shoot() * 2*pi;
    // write angles to ROOT file
    m_InitConditions->SetICEmittedAngleThetaCM(ThetaCM / deg);
@@ -769,7 +788,9 @@ void EventGeneratorTransfertToResonance::SetEverything(  string   name1,
                                                          bool     ShootLight,
                                                          bool     ShootHeavy,
                                                          bool     ShootDecayProduct,
-                                                         string   Path)
+                                                         string   Path,
+                                                         double   CSThetaMin,
+                                                         double   CSThetaMax)
 {
    //------------- Constructor with nuclei names and beam energy ------------
 
@@ -780,7 +801,9 @@ void EventGeneratorTransfertToResonance::SetEverything(  string   name1,
                                  BeamEnergy,
                                  ExcitationLight,
                                  ExcitationHeavy,
-                                 Path) ;
+                                 Path,
+                                 CSThetaMin,
+                                 CSThetaMax) ;
                                  
    m_BeamEnergy         =  BeamEnergy;
    m_BeamEnergySpread   =  BeamEnergySpread;