Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8309079
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
26 KB
Subscribers
None
View Options
Index: trunk/examples/sartreInclusiveDiffractionRuncard.txt
===================================================================
--- trunk/examples/sartreInclusiveDiffractionRuncard.txt (revision 0)
+++ trunk/examples/sartreInclusiveDiffractionRuncard.txt (revision 511)
@@ -0,0 +1,108 @@
+//==============================================================================
+// sartreRuncard.txt
+//
+// Copyright (C) 2010-2019 Tobias Toll and Thomas Ullrich
+//
+// This file is part of Sartre.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation.
+// This program is distributed in the hope that it will be useful,
+// but without any warranty; without even the implied warranty of
+// merchantability or fitness for a particular purpose. See the
+// GNU General Public License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// Author: Thomas Ullrich
+// Last update:
+// $Date: 2019-06-10 23:53:14 +0530 (Mon, 10 Jun 2019) $
+// $Author: ullrich $
+//==============================================================================
+//
+// Example Runcard for Sartre Event Generator.
+//
+// Comments start with a # or //
+//
+// Name and value are separated by a "=": name = value
+// (alternatively ":" can be used as well)
+//==============================================================================
+#
+# Define beams
+#
+eBeamEnergy = 30
+hBeamEnergy = 920
+A = 1
+
+#
+# Number of events and printout frequency
+#
+numberOfEvents = 10
+timesToShow = 10
+
+#
+# Set verbosity
+#
+verbose = false
+verboseLevel = 2
+#
+# Rootfile
+#
+rootfile = example.root
+
+#
+# Dipole model
+#
+# dipoleModel: can be bSat or bNonSat
+# dipoleModelParameterSet:
+# KMW: older set but most complete
+# HMPZ: new parameters with still limited set
+# of tables. For eA use KMW.
+# STU: new parameters with still limited set
+# (uses large dipole damping)
+#
+dipoleModel = bSat
+dipoleModelParameterSet = STU
+
+#
+# User variable
+# If you use the provided sartreMain.cpp this is
+# used for vector meson decays
+# PDG: pi+ = 211, K+ = 321, e- = 11, mu- = 13
+# with BR=100%
+#
+userInt = 11
+
+#
+# Kinematic range min > max means no limits (given by table range)
+#
+Q2min = 10
+Q2max = -11
+Wmin = 10.
+Wmax = -10.049876
+betamin = 0.4
+betamax = 1
+
+#
+# Misc
+#
+enableNuclearBreakup = false
+maxNuclearExcitationEnergy = 3.0
+
+#
+# Random generator seed (if not given current time is used)
+#
+#seed = 2011987
+
+#
+# User parameters
+#
+# userDouble = 0.
+# userString = "Hello World!"
+# userInt = 0
+
+#
+# Expert flags
+#
+# applyPhotonFlux = true
Property changes on: trunk/examples/sartreInclusiveDiffractionRuncard.txt
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: trunk/examples/cmake/modules/FindPythia8.cmake
===================================================================
--- trunk/examples/cmake/modules/FindPythia8.cmake (revision 0)
+++ trunk/examples/cmake/modules/FindPythia8.cmake (revision 511)
@@ -0,0 +1,94 @@
+ ################################################################################
+ # Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
+ # #
+ # This software is distributed under the terms of the #
+ # GNU Lesser General Public Licence (LGPL) version 3, #
+ # copied verbatim in the file "LICENSE" #
+ ################################################################################
+# - Try to find PYTHIA8 instalation
+# Once done this will define
+# PYTHIA8_INCLUDE_DIR where to locate Pythia.h file
+# PYTHIA8_LIBRARY where to find the libpythia8 library
+# PYTHIA8_<lib>_LIBRARY Addicional libraries
+# PYTHIA8_LIBRARIES (not cached) the libraries to link against to use Pythia8
+# PYTHIA8_FOUND if false, you cannot build anything that requires Pythia8
+# PYTHIA8_VERSION version of Pythia8 if found
+################################################################################
+
+set(_pythia8dirs
+ ${PYTHIA8_DIR}
+ $ENV{PYTHIA8_DIR}
+ ${SIMPATH}
+ ${SIMPATH}/generators
+ /usr
+ /opt/pythia8)
+
+find_path(PYTHIA8_INCLUDE_DIR
+ NAMES Pythia8/Pythia.h pythia8/Pythia.h pythia8/pythia.h Pythia8/pythia.h
+ HINTS ${_pythia8dirs}
+ PATH_SUFFIXES include include/Pythia8 include/pythia8
+ DOC "Specify the directory containing Pythia.h.")
+
+if(PYTHIA8_INCLUDE_DIR MATCHES "include$")
+ get_filename_component(Pythia8_PREFIX ${PYTHIA8_INCLUDE_DIR}/.. ABSOLUTE)
+elseif()
+ get_filename_component(Pythia8_PREFIX ${PYTHIA8_INCLUDE_DIR}/../.. ABSOLUTE)
+endif()
+
+find_library(PYTHIA8_LIBRARY
+ NAMES pythia8 Pythia8
+ HINTS ${_pythia8dirs}
+ PATH_SUFFIXES lib
+ DOC "Specify the Pythia8 library here.")
+
+find_path(PYTHIA8_LIB_DIR NAMES libpythia8.so libpythia8.dylib PATHS
+ $ENV{PYTHIA8_DIR}
+ ${PYTHIA8_DIR}
+ ${SIMPATH}
+ ${SIMPATH}/generators
+ PATH_SUFFIXES lib
+ )
+
+find_library(PYTHIA8_hepmcinterface_LIBRARY
+ NAMES hepmcinterface pythia8tohepmc
+ HINTS ${_pythia8dirs}
+ PATH_SUFFIXES lib)
+
+find_library(PYTHIA8_lhapdfdummy_LIBRARY
+ NAMES lhapdfdummy
+ HINTS ${_pythia8dirs}
+ PATH_SUFFIXES lib)
+
+
+find_path(PYTHIA8DATA
+ NAMES MainProgramSettings.xml
+ HINTS
+ ${Pythia8_PREFIX}/share/Pythia8/xmldoc
+ ${Pythia8_PREFIX}/share/pythia8/xmldoc)
+
+foreach(_lib PYTHIA8_LIBRARY PYTHIA8_hepmcinterface_LIBRARY PYTHIA8_lhapdfdummy_LIBRARY)
+ if(${_lib})
+ set(PYTHIA8_LIBRARIES ${PYTHIA8_LIBRARIES} ${${_lib}})
+ endif()
+endforeach()
+set(PYTHIA8_INCLUDE_DIRS ${PYTHIA8_INCLUDE_DIR} ${PYTHIA8_INCLUDE_DIR}/Pythia8 )
+
+find_file(Pythia8_VERSION_FILE
+ NAMES Pythia.h pythia.h
+ HINTS ${PYTHIA8_INCLUDE_DIR} ${PYTHIA8_INCLUDE_DIR}/Pythia8 ${PYTHIA8_INCLUDE_DIR}/pythia8)
+
+if(Pythia8_VERSION_FILE)
+ file(READ "${Pythia8_VERSION_FILE}" __version_raw)
+ string(REGEX MATCH "#define PYTHIA_VERSION ([0-9\.]+)"
+ __version_raw "${__version_raw}"
+ )
+ set(Pythia8_VERSION "${CMAKE_MATCH_1}")
+ unset(__version_raw)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set PYTHIA8_FOUND to TRUE if
+# all listed variables are TRUE
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Pythia8 DEFAULT_MSG PYTHIA8_INCLUDE_DIR PYTHIA8_LIBRARY PYTHIA8DATA)
+mark_as_advanced(PYTHIA8_INCLUDE_DIR PYTHIA8_LIBRARY PYTHIA8_hepmcinterface_LIBRARY PYTHIA8_lhapdfdummy_LIBRARY)
Index: trunk/examples/sartreInclusiveDiffractionMain.cpp
===================================================================
--- trunk/examples/sartreInclusiveDiffractionMain.cpp (revision 0)
+++ trunk/examples/sartreInclusiveDiffractionMain.cpp (revision 511)
@@ -0,0 +1,512 @@
+//==============================================================================
+// sartreMain.cpp
+//
+// Copyright (C) 2010-2019 Tobias Toll and Thomas Ullrich
+//
+// This file is part of Sartre.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation.
+// This program is distributed in the hope that it will be useful,
+// but without any warranty; without even the implied warranty of
+// merchantability or fitness for a particular purpose. See the
+// GNU General Public License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// Author: Thomas Ullrich
+// Last update:
+// $Date: 2019-03-09 00:43:19 +0530 (Sat, 09 Mar 2019) $
+// $Author: ullrich $
+//==============================================================================
+//
+// Example main program. Use to get started.
+//
+//==============================================================================
+#include <iostream>
+#include <cmath>
+#include "TTree.h"
+#include "TFile.h"
+#include "SartreInclusiveDiffraction.h"
+#include "DipoleModelParameters.h"
+#include "TGenPhaseSpace.h"
+#include "Settings.h"
+#include "TH1D.h"
+#include "TROOT.h"
+#include "TLorentzVector.h"
+#include "TClonesArray.h"
+#include "InclusiveDiffractiveCrossSections.h"
+#include "DglapEvolution.h"
+#include "Kinematics.h"
+
+#define PR(x) cout << #x << " = " << (x) << endl;
+
+using namespace std;
+InclusiveDiffractiveCrossSections* myICS=0;
+
+double uiCrossSection(double* var, double* par){
+ double beta=par[0];
+ double Q2=par[1];
+ double W2=par[2];
+ double z=var[0];
+
+ return myICS->dsigdbetadQ2dW2dz_total_checked(beta, Q2, W2, z);
+}
+
+double xp_sigmar(double Q2, double beta, double xpom, double s){
+ double x=beta*xpom;
+ double W2=Kinematics::W2(Q2, x);
+ double y=Kinematics::y(Q2, x, s);
+ TF1 fsigma("fsigma", uiCrossSection, 0, 1, 3);
+ fsigma.SetParameter(0, beta);
+ fsigma.SetParameter(1, Q2);
+ fsigma.SetParameter(2, W2);
+ ROOT::Math::WrappedTF1 wfsigma(fsigma);
+ ROOT::Math::GaussIntegrator giSigma;
+ giSigma.SetFunction(wfsigma);
+ giSigma.SetAbsTolerance(0.);
+ giSigma.SetRelTolerance(1e-5);
+
+ double cs=giSigma.Integral(0, 1); //nb/GeV4
+ double prefactor= 4*M_PI*alpha_em*alpha_em* xpom*xpom /(Q2*Q2*Q2);
+ prefactor*=1-y+y*y/2; //GeV-6
+ double sigma_r=cs/prefactor; //nb*GeV2
+ sigma_r /= 1e7; //fm2*GeV2
+ sigma_r /= hbarc2; //no unit;
+ return xpom*sigma_r;
+}
+
+void reducedCrossSections(double s){
+
+ myICS = new InclusiveDiffractiveCrossSections();
+
+ double Q2val[80]={2.5, 2.5, 5.1, 8.8, 2.5, 2.5, 2.5, 5.1, 5.1, 8.8, 8.8, 15.3, 26.5, 46, 2.5, 2.5, 2.5, 2.5, 5.1, 5.1, 5.1, 8.8, 8.8, 8.8, 15.3, 15.3, 26.5, 26.5, 46, 46, 2.5, 2.5, 2.5, 2.5, 5.1, 5.1, 5.1, 5.1, 8.8, 8.8, 8.8, 8.8, 15.3, 15.3, 15.3, 26.5, 26.5, 26.5, 46, 46, 46, 80, 80, 200, 2.5, 2.5, 2.5, 2.5, 5.1, 5.1, 5.1, 5.1, 8.8, 8.8, 8.8, 8.8, 15.3, 15.3, 15.3, 15.3, 26.5, 26.5, 46, 46, 46, 46, 80, 80, 200, 200};
+ double betaval[80]={0.1780, 0.5620, 0.5620, 0.5620, 0.0562, 0.1780, 0.5620, 0.1780, 0.5620, 0.1780, 0.5620, 0.5620, 0.5620, 0.8160, 0.0178, 0.0562, 0.1780, 0.5620, 0.0562, 0.1780, 0.5620, 0.0562, 0.1780, 0.5620, 0.1780, 0.5620, 0.1780, 0.5620, 0.5620, 0.8160, 0.0056, 0.0178, 0.0562, 0.1780, 0.0178, 0.0562, 0.1780, 0.5620, 0.0178, 0.0562, 0.1780, 0.5620, 0.0562, 0.1780, 0.5620, 0.0562, 0.1780, 0.5620, 0.1780, 0.5620, 0.8160, 0.1780, 0.5620, 0.5620, 0.0056, 0.0178, 0.0562, 0.1780, 0.0056, 0.0178, 0.0562, 0.1780, 0.0178, 0.0562, 0.1780, 0.5620, 0.0178, 0.0562, 0.1780, 0.5620, 0.0562, 0.1780, 0.0562, 0.1780, 0.5620, 0.8160, 0.1780, 0.5620, 0.1780, 0.5620};
+ double xpomval[80]={0.0003, 0.0003, 0.0003, 0.0003, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0025, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0085, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160};
+ double xsigma_rval[80]={0.0156, 0.0214, 0.0275, 0.0250, 0.0114, 0.0102, 0.0172, 0.0121, 0.0187, 0.0177, 0.0207, 0.0180, 0.0241, 0.0145, 0.0099, 0.0074, 0.0068, 0.0110, 0.0107, 0.0118, 0.0153, 0.0125, 0.0129, 0.0166, 0.0136, 0.0173, 0.0138, 0.0189, 0.0196, 0.0131, 0.0101, 0.0076, 0.0064, 0.0074, 0.0120, 0.0088, 0.0095, 0.0137, 0.0128, 0.0106, 0.0104, 0.0142, 0.0134, 0.0111, 0.0162, 0.0157, 0.0126, 0.0140, 0.0121, 0.0135, 0.0110, 0.0206, 0.0116, 0.0109, 0.0093, 0.0073, 0.0068, 0.0116, 0.0135, 0.0111, 0.0088, 0.0075, 0.0124, 0.0108, 0.0090, 0.0102, 0.0176, 0.0122, 0.0098, 0.0151, 0.0150, 0.0113, 0.0163, 0.0133, 0.0124, 0.0092, 0.0133, 0.0090, 0.0145, 0.0093};
+ double deltaval[80]={12, 19, 16, 13, 17, 8.8, 31, 18, 12, 9.7, 10, 11, 25, 22, 18, 12, 12, 36, 6.8, 7.4, 8.7, 7.1, 6.1, 10, 6.2, 7.2, 7.6, 12, 8.6, 20, 25, 12, 13, 15, 10, 6.7, 6.7, 27, 7.8, 6.3, 5.9, 13, 9.7, 6.2, 6.8, 12, 7.5, 7.6, 8.9, 8.5, 19, 16, 13, 21, 15, 13, 16, 20, 7.4, 6.5, 6.6, 19, 6.0, 6.4, 7.1, 22, 7.4, 6.8, 6.8, 22, 7.2, 7.9, 11, 8.1, 8.9, 28, 14, 16, 21, 24};
+
+ double beta=0.00562;//betaval[i];
+ double xpom=0.0085;//xpomval[i];
+ double Q2=2.5;
+ cout<<"sartre_0_0=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0085_beta_0_0178=[[2.5,5.1,8.8,],[0.0076,0.012,0.0128],
+
+ beta=.0178;
+ xpom=0.0085;
+ double Q2_1[3]={2.5,5.1,8.8};
+ cout<<"sartre_0_1=[";
+ for(int i=0; i<3; i++){
+ cout<<xp_sigmar(Q2_1[i], beta, xpom, s);
+ if(i<2) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0085_beta_0_0562=[[2.5,5.1,8.8,15.3,26.5],
+ beta=.0562;
+ xpom=0.0085;
+ double Q2_2[5]={2.5,5.1,8.8,15.3,26.5};
+ cout<<"sartre_0_2=[";
+ for(int i=0; i<5; i++){
+ cout<<xp_sigmar(Q2_2[i], beta, xpom, s);
+ if(i<4) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0085_beta_0_178=[[2.5,5.1,8.8,15.3,26.5,46,80]
+ xpom=0.0085;
+ beta=0.178;
+ double Q2_3[7]={2.5,5.1,8.8,15.3,26.5,46,80};
+ cout<<"sartre_0_3=[";
+ for(int i=0; i<7; i++){
+ cout<<xp_sigmar(Q2_3[i], beta, xpom, s);
+ if(i<6) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0085_beta_0_562=[[5.1,8.8,15.3,26.5,46.0,80.0,200.0]
+ xpom=0.0085;
+ beta=.562;
+ double Q2_4[7]={5.1,8.8,15.3,26.5,46.0,80.0,200.0};
+ cout<<"sartre_0_4=[";
+ for(int i=0; i<7; i++){
+ cout<<xp_sigmar(Q2_4[i], beta, xpom, s);
+ if(i<6) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0085_beta_0_816=[[46.0]
+ xpom=0.0085;
+ beta=0.816;
+ Q2=46.;
+ cout<<"sartre_0_5=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0025_beta_0_0178=[[2.5],
+ xpom=0.0025;
+ beta=0.0178;
+ Q2=2.5;
+ cout<<"sartre_1_1=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0025_beta_0_0562=[[2.5,5.1,8.8]
+ xpom=0.0025;
+ beta=0.0562;
+ double Q2_5[3]={2.5,5.1,8.8};
+ cout<<"sartre_1_2=[";
+ for(int i=0; i<3; i++){
+ cout<<xp_sigmar(Q2_5[i], beta, xpom, s);
+ if(i<2) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0025_beta_0_178=[[2.5,5.1,8.8,15.3,26.5]
+ xpom=0.0025;
+ beta=0.178;
+ double Q2_6[5]={2.5,5.1,8.8,15.3,26.5};
+ cout<<"sartre_1_3=[";
+ for(int i=0; i<5; i++){
+ cout<<xp_sigmar(Q2_6[i], beta, xpom, s);
+ if(i<4) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0025_beta_0_562=[[2.5,5.1,8.8,15.3,26.5,46.0]
+ xpom=0.0025;
+ beta=0.562;
+ double Q2_7[6]={2.5,5.1,8.8,15.3,26.5,46.0};
+ cout<<"sartre_1_4=[";
+ for(int i=0; i<6; i++){
+ cout<<xp_sigmar(Q2_7[i], beta, xpom, s);
+ if(i<5) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0025_beta_0_816=[[46],
+ xpom=0.0025;
+ beta=0.816;
+ Q2=46.;
+ cout<<"sartre_1_5=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0009_beta_0_0562=[[2.5]
+ xpom=0.0009;
+ beta=0.0562;
+ Q2=2.5;
+ cout<<"sartre_2_2=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0009_beta_0_178=[[2.5,5.1,8.8]
+ xpom=0.0009;
+ beta=0.178;
+ double Q2_8[3]={2.5,5.1,8.8};
+ cout<<"sartre_2_3=[";
+ for(int i=0; i<3; i++){
+ cout<<xp_sigmar(Q2_8[i], beta, xpom, s);
+ if(i<2) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0009_beta_0_562=[[2.5,5.1,8.8,15.3,26.5]
+ xpom=0.0009;
+ beta=0.562;
+ double Q2_9[5]={2.5,5.1,8.8,15.3,26.5};
+ cout<<"sartre_2_4=[";
+ for(int i=0; i<5; i++){
+ cout<<xp_sigmar(Q2_9[i], beta, xpom, s);
+ if(i<4) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+ // xp_0_0009_beta_0_816=[[46.0]
+ xpom=0.0009;
+ beta=0.816;
+ Q2=46.;
+ cout<<"sartre_2_5=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+ // xp_0_0003_beta_0_178=[[2.5],[0.0156]
+ xpom=0.0003;
+ beta=0.178;
+ Q2=2.5;
+ cout<<"sartre_3_3=["<<xp_sigmar(Q2, beta, xpom, s)<<"]"<<endl;
+
+// xp_0_0003_beta_0_562=[[2.5,5.1,8.8]
+ xpom=0.0003;
+ beta=0.562;
+ double Q2_10[3]={2.5,5.1,8.8};
+ cout<<"sartre_3_4=[";
+ for(int i=0; i<3; i++){
+ cout<<xp_sigmar(Q2_10[i], beta, xpom, s);
+ if(i<2) cout<<", ";
+ }
+ cout<<"]"<<endl;
+
+}
+void checksForCrossSections(){
+ cout<<"#######################################"<<endl;
+ cout<<"### Doing some sanity checks ###"<<endl;
+ cout<<"#######################################"<<endl;
+ TH1D cs_beta_T("cs_beta_T", "cs_beta_T", 100, 0, 1);
+ TH1D cs_beta_L("cs_beta_L", "cs_beta_L", 100, 0, 1);
+ InclusiveDiffractiveCrossSections myCS;
+ double Q2=5;
+ double xpom=1e-3;
+ double z=0.1;
+ cout<<"Filling the cross section histograms binned in beta:"<<endl;
+ for(int i=1; i<=100; i++){
+ cout<<"Filling bin# "<<i<<endl;
+ double beta=cs_beta_T.GetBinCenter(i);
+ double MX2=(1-beta)/beta*Q2;
+ double W2=Kinematics::W2(Q2, xpom, MX2);
+ myCS.setQuarkIndex(0);
+ double csT=myCS.dsigmadbetadz_T(beta, Q2, W2, z);
+ double csL=myCS.dsigmadbetadz_L(beta, Q2, W2, z);
+ PR(csT);
+ PR(csL);
+ cs_beta_T.SetBinContent(i, csT);
+ cs_beta_L.SetBinContent(i, csL);
+ }
+ TFile *hfile = new TFile("CStestsBeta.root","RECREATE");
+ cs_beta_T.Write();
+ cs_beta_L.Write();
+ hfile->Write();
+ delete hfile;
+}
+
+struct rootSartreEvent {
+ double t;
+ double beta;
+ double Q2;
+ double x;
+ double s;
+ double y;
+ double W;
+ double z;
+ double MX;
+ double xpom;
+ int iEvent;
+ int pol; // 0=transverse or 1=longitudinal
+ int dmode; // 0=coherent, 1=Incoherent
+// double crossSection;
+};
+
+rootSartreEvent myRootSartreEvent;
+void randomlyReverseBeams(Event* ); // for UPC mode
+
+int main(int argc, char *argv[])
+{
+ //
+ // Check command line arguments
+ //
+ if (! (argc == 2 || argc == 3) ) {
+ cout << "Usage: " << argv[0] << " runcard [rootfile]" << endl;
+ return 2;
+ }
+ string runcard = argv[1];
+
+
+ //To run some sanity checks on the cross sections:
+ // checksForCrossSections();
+ // exit(1);
+
+ //
+ // Create the generator and initialize it.
+ // Once initialized you cannot (should not) change
+ // the settings w/o re-initialing sartre.
+ //
+ SartreInclusiveDiffraction sartre;
+ //
+ // DGLAP Evolution can be speed up by using lookup tables
+ //
+ DglapEvolution &dglap = DglapEvolution::instance();
+ dglap.generateLookupTable(1000, 1000);
+ dglap.useLookupTable(true);
+
+ bool ok = sartre.init(runcard);
+ if (!ok) {
+ cerr << "Initialization of sartre failed." << endl;
+ return 1;
+ }
+
+ EventGeneratorSettings* settings = sartre.runSettings();
+
+ //
+ // ROOT file
+ // Use the one from command line unless not given
+ // in which case the one in the runcard is used.
+ //
+ string rootfile;
+ if (argc == 3) {
+ rootfile = argv[2];
+ settings->setRootfile(argv[2]);
+ }
+ else
+ rootfile = settings->rootfile();
+
+ //
+ // Print out all Sartre settings
+ //
+ settings->list();
+
+ TFile *hfile = 0;
+ if (rootfile.size()) {
+ hfile = new TFile(rootfile.c_str(),"RECREATE");
+ cout << "ROOT file is '" << rootfile.c_str() << "'." << endl;
+ }
+// double s=4*settings->electronBeamEnergy()*settings->hadronBeamEnergy();
+// reducedCrossSections(s);
+// exit(1);
+//
+ //
+ // Setup ROOT tree
+ //
+ TLorentzVector *eIn = new TLorentzVector;
+ TLorentzVector *pIn = new TLorentzVector;
+ TLorentzVector *X = new TLorentzVector;
+ TLorentzVector *eOut = new TLorentzVector;
+ TLorentzVector *pOut = new TLorentzVector;
+ TLorentzVector *gamma = new TLorentzVector;
+ TLorentzVector *quark = new TLorentzVector;
+ TLorentzVector *antiquark = new TLorentzVector;
+
+ TClonesArray protons("TLorentzVector");
+ TClonesArray neutrons("TLorentzVector");
+ TClonesArray remnants("TLorentzVector");
+
+ TTree tree("tree","sartre");
+ tree.Branch("event", &myRootSartreEvent.t,
+ "t/D:beta/D:Q2/D:x/D:s/D:y/D:W/D:z/D:MX/D:xpom/D:iEvent/I:pol/I:dmode/I");
+ tree.Branch("eIn", "TLorentzVector", &eIn, 32000, 0);
+ tree.Branch("pIn", "TLorentzVector", &pIn, 32000, 0);
+ tree.Branch("X", "TLorentzVector", &X, 32000, 0);
+ tree.Branch("eOut", "TLorentzVector", &eOut, 32000, 0);
+ tree.Branch("pOut", "TLorentzVector", &pOut, 32000, 0);
+ tree.Branch("gamma","TLorentzVector", &gamma, 32000, 0);
+ tree.Branch("quark", "TLorentzVector", &quark, 32000, 0);
+ tree.Branch("antiquark", "TLorentzVector", &antiquark, 32000, 0);
+
+ if(settings->enableNuclearBreakup()){
+ tree.Branch("protons", &protons);
+ tree.Branch("neutrons", &neutrons);
+ tree.Branch("nuclearRemnants", &remnants);
+ }
+
+ int nPrint;
+ if (settings->timesToShow())
+ nPrint = settings->numberOfEvents()/settings->timesToShow();
+ else
+ nPrint = 0;
+
+ unsigned long maxEvents = settings->numberOfEvents();
+
+ cout << "Generating " << maxEvents << " events." << endl << endl;
+
+ //
+ // Event generation
+ //
+ for (unsigned long iEvent = 0; iEvent < maxEvents; iEvent++) {
+ //
+ // Generate one event
+ //
+ Event *event = sartre.generateEvent();
+ if (nPrint && (iEvent+1)%nPrint == 0 && iEvent != 0) {
+ cout << "processed " << iEvent+1 << " events" << endl;
+ }
+
+ //
+ // If Sartre is run in UPC mode, half of the events needs to be
+ // rotated around and axis perpendicular to z:
+ //
+ if(settings->UPC() and settings->A()==settings->UPCA()){
+ randomlyReverseBeams(event);
+ }
+
+ //
+ // Print out (here only for the first few events)
+ //
+ if (iEvent < 10) event->list();
+
+ //
+ // Add up the cross-section
+ //
+
+ //
+ // Fill ROOT tree
+ //
+ myRootSartreEvent.iEvent = event->eventNumber;
+ myRootSartreEvent.t = event->t;
+ myRootSartreEvent.beta = event->beta;
+ myRootSartreEvent.Q2 = event->Q2;
+ myRootSartreEvent.x = event->x;
+ myRootSartreEvent.s = event->s;
+ myRootSartreEvent.y = event->y;
+ myRootSartreEvent.W = event->W;
+ myRootSartreEvent.z = event->z;
+ myRootSartreEvent.MX = event->MX;
+ myRootSartreEvent.xpom = event->xpom;
+ myRootSartreEvent.pol = event->polarization == transverse ? 0 : 1;
+ myRootSartreEvent.dmode = event->diffractiveMode == coherent ? 0 : 1;
+ eIn = &event->particles[0].p;
+ pIn = &event->particles[1].p;
+ eOut = &event->particles[2].p;
+ pOut = &event->particles[6].p;
+ X = &event->particles[4].p;
+ gamma = &event->particles[3].p;
+ quark = &event->particles[7].p;
+ antiquark= &event->particles[8].p;
+
+ //If the event is incoherent, and nuclear breakup is enabled, fill the remnants to the tree
+ if(settings->enableNuclearBreakup() and event->diffractiveMode == incoherent){
+ protons.Clear();
+ neutrons.Clear();
+ remnants.Clear();
+ for(unsigned int iParticle=7; iParticle < event->particles.size(); iParticle++){
+ if(event->particles[iParticle].status == 1) { // Final-state particle
+ const Particle& particle = event->particles[iParticle];
+ switch (abs(particle.pdgId)) {
+ case 2212: // (Anti-)proton
+ new(protons[protons.GetEntries()]) TLorentzVector(particle.p);
+ break;
+ case 2112: // (Anti-)neutron
+ new(neutrons[neutrons.GetEntries()]) TLorentzVector(particle.p);
+ break;
+ default: // Any other remnant
+ new(remnants[remnants.GetEntries()]) TLorentzVector(particle.p);
+ break;
+ } // switch
+ } // if
+ } // for
+ } // if
+ tree.Fill();
+ }
+ cout << "All events processed\n" << endl;
+
+ //
+ // That's it, finish up
+ //
+ cout<<"Calculating the total cross section on given interval."<<endl;
+ cout<<"This may take a while, use your radical freedom to do something else..."<<endl;
+ double totalCS=0;// #TTsartre.totalCrossSection();
+ TH1D* histoForCSandNumberOfEvents = new TH1D("histoForCSandNumberOfEvents", "Cross-section and Number of Events", 2, 0., 1.);
+ histoForCSandNumberOfEvents->SetBinContent(1, totalCS);
+ histoForCSandNumberOfEvents->SetBinContent(2, maxEvents);
+
+ double runTime = sartre.runTime();
+ hfile->Write();
+ cout << rootfile.c_str() << " written." << endl;
+ cout << "Total cross-section: " << totalCS << " nb" << endl;
+ sartre.listStatus();
+ cout << "CPU Time/event: " << runTime/maxEvents << " seconds/event" << endl;
+ return 0;
+}
+
+// UPC only
+void randomlyReverseBeams(Event* myEvent) {
+
+ TRandom3 *random = EventGeneratorSettings::randomGenerator();
+
+ if(random->Uniform(1) > 0.5){
+ for(unsigned int i=0; i<myEvent->particles.size(); i++)
+ myEvent->particles.at(i).p.RotateX(M_PI);
+ }
+}
+
+
Property changes on: trunk/examples/sartreInclusiveDiffractionMain.cpp
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Dec 21, 2:14 PM (16 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4023079
Default Alt Text
(26 KB)
Attached To
rSARTRESVN sartresvn
Event Timeline
Log In to Comment