Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8723630
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
20 KB
Subscribers
None
View Options
Index: trunk/examples/tableGeneratorInclusiveDiffractionRuncard.txt
===================================================================
--- trunk/examples/tableGeneratorInclusiveDiffractionRuncard.txt (revision 0)
+++ trunk/examples/tableGeneratorInclusiveDiffractionRuncard.txt (revision 535)
@@ -0,0 +1,134 @@
+//==============================================================================
+// tableGeneratorRuncard.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: Tobias Toll
+// Last update:
+// $Date: 2019-03-09 00:43:19 +0530 (Sat, 09 Mar 2019) $
+// $Author: ullrich $
+//==============================================================================
+//
+// Example Runcard for Sartre Table Generator.
+//
+// Comments start with a # or #
+//
+// Name and value are separated by a "=": name = value
+// (alternatively ":" can be used as well)
+//==============================================================================
+#
+# Nucleus number
+#
+A = 1
+
+#
+# Which moments of the amplitude to calculate:
+# 0 <A> analytical, <A2> averaged over configurations
+# 1 <A> only, analytical
+# 2 <A2>, and <A> both averaged over configurations
+# Dummy for inc. diff.
+modesToCalculate = 2
+
+#
+# Rootfile This is a prefix table type (T and L, or T2 and L2) and ".root" will be appended
+#
+rootfile = incdifftest
+
+#
+# Model parameters
+#
+#vectorMesonId = 443
+dipoleModel = bSat
+dipoleModelParameterSet = STU
+
+#
+# Table Set Type (experts only)
+#
+tableSetType = total_and_coherent
+#tableSetType = coherent_and_incoherent
+
+#
+# Developer only
+# Only takes affect when dipoleModelParameterSet = CUSTOM
+# All parameters must be given.
+#
+# For bSat and bNonSat (8 parameters):
+# m_u m_d m_s m_c BG mu02 lambdaG Ag
+# For bCGC (10 parameters):
+# m_u m_d m_s m_c dkappa dN0 dx0 dlambda dgammas dBcgc
+#
+#dipoleModelCustomParameters = 0.14 0.14 0.14 1.27 4. 1.51 0.058 2.308
+
+
+# Path for the b-dependence lookup table for bSat. Not used with bCGC.
+bSatLookupPath = ./
+
+numberOfConfigurations = 1
+
+#Whether or not there is subnucleon structure (hotspot model)
+hasSubstructure = false
+
+#
+# Kinematic range
+#
+# EIC limits:
+# Say we aim s = 20000 (30000 for pp)
+# That implies:
+# Q2 = 0.0001 - 20000 (or with x<1e-2, Q2<200)
+# t = -3 - 0
+# W2 = 1 - 20000 (W = 1-141)
+#
+
+betamin = 0
+betamax = 1
+Q2min = 1.
+Q2max = 20.
+Wmin = 2.
+Wmax = 380.
+zmin = 0.
+zmax = 1.
+
+
+#
+# Number of bins in the tables:
+#
+#
+# ZEUS test, bin density for
+# 40x40x40: 64000/(99.85*190*1)=3.37 bins/GeV^5
+#
+# Or in different directions:
+# Q2: 40/100=0.4 bins/GeV^2
+# W: 40/190=0.21 bins/GeV
+# t: 40/1= 40 bins/GeV^2
+#
+fractionOfBinsToFill = 1.
+betabins = 10
+Q2bins = 10
+W2bins = 10
+zbins = 10
+
+#
+# If a run fails, use the backup and continue:
+# If in doubt use the tableInspector to make sure the rest
+# of the runcard is as it should be.
+#
+useBackupFile = false
+startingBinFromBackup=2
+
+#
+# If the table you are making should take presendence
+# over previous tables, make it with a higher priority
+#
+priority = 0
Property changes on: trunk/examples/tableGeneratorInclusiveDiffractionRuncard.txt
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: trunk/examples/tableGeneratorInclusiveDiffractionMain.cpp
===================================================================
--- trunk/examples/tableGeneratorInclusiveDiffractionMain.cpp (revision 0)
+++ trunk/examples/tableGeneratorInclusiveDiffractionMain.cpp (revision 535)
@@ -0,0 +1,414 @@
+//==============================================================================
+// tableGeneratorMain.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: 2023-07-26 11:48:08 +0530 (Wed, 26 Jul 2023) $
+// $Author: ttoll $
+//==============================================================================
+//
+// Main program to create amplitude lookup tables.
+// [Developer only]
+//
+// Usage:
+// tableGeneratorMain runcard startBin endBin
+//
+// Bins run from 0 to nbin-1.
+// Loop fill all bins from startBIn to endBin (including endBin).
+// If endBin exceeds the size of the table it set to the nbin-1.
+//
+//==============================================================================
+#include <sstream>
+#include <cstdlib>
+#include <iostream>
+#include <limits>
+#include <cmath>
+#include <iomanip>
+#include "Amplitudes.h"
+#include "TROOT.h"
+#include "TH1D.h"
+#include "TFile.h"
+#include "Nucleus.h"
+#include "Constants.h"
+#include "Table.h"
+#include "TableGeneratorSettings.h"
+#include "Enumerations.h"
+#include "DglapEvolution.h"
+#include "Version.h"
+#include "TRandom3.h"
+#include "InclusiveDiffractiveCrossSections.h"
+
+
+#include "DipoleModel.h"
+
+//void myFunction(){
+// DipoleModel myDM;
+// ///intialise myDM
+//
+// double b=0;
+// double xprobe=1e-3;
+//
+// //solve for r:
+// 2*myDM.dsigmadb2ep(r, b, xprobe)=1-exp(-0.5);
+//
+//}
+//
+#define PR(x) cout << #x << " = " << (x) << endl;
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+
+ //
+ // Print header
+ //
+ time_t theStartTime = time(0);
+ string ctstr(ctime(&theStartTime));
+ ctstr.erase(ctstr.size()-1, 1);
+ cout << "/========================================================================\\" << endl;
+ cout << "| |" << endl;
+ cout << "| Sartre, Version " << setw(54) << left << VERSION << right << '|' << endl;
+ cout << "| |" << endl;
+ cout << "| An event generator for exclusive diffractive vector meson production |" << endl;
+ cout << "| in ep and eA collisions based on the dipole model. |" << endl;
+ cout << "| |" << endl;
+ cout << "| Copyright (C) 2010-2018 Tobias Toll and Thomas Ullrich |" << endl;
+ cout << "| |" << endl;
+ cout << "| This program is free software: you can redistribute it and/or modify |" << endl;
+ cout << "| it under the terms of the GNU General Public License as published by |" << endl;
+ cout << "| the Free Software Foundation, either version 3 of the License, or |" << endl;
+ cout << "| any later version. |" << endl;
+ cout << "| |" << endl;
+ cout << "| Code compiled on " << setw(12) << left << __DATE__;
+ cout << setw(41) << left << __TIME__ << right << '|' << endl;
+ cout << "| Run started at " << setw(55) << left << ctstr.c_str() << right << '|' << endl;
+ cout << "| |" << endl;
+ cout << "| -------------------------------------------------------------------- |" << endl;
+ cout << "| |" << endl;
+ cout << "| Sartre Table Generator (Experts only) |" << endl;
+ cout << "| |" << endl;
+ cout << "\\========================================================================/" << endl;
+
+ TH1::AddDirectory(false); // to explicitly delete all new histograms by hand
+ TableGeneratorSettings* settings = TableGeneratorSettings::instance();
+ //
+ // Check arguments
+ //
+ char* runcard;
+ if (argc != 4) {
+ cout << "Usage: tableGeneratorMain runcard startBin endBin" << endl;
+ return 2;
+ }
+ else {
+ runcard = argv[1];
+ settings->setStartBin(atoi(argv[2]));
+ settings->setEndBin(atoi(argv[3]));
+ }
+
+ cout << "Reading settings from runcard." << endl;
+ settings->readSettingsFromFile(runcard);
+ settings->consolidateSettings();
+
+ //dipoleModelParameterSet,
+ // TODO: eBeam, hBeam,
+ //dipoleModelType, A, verboseLevel, applyPhotonFlux,
+ //
+ // Transfer some of the settings to EventGeneratorSettings:
+ //
+ EventGeneratorSettings* egsettings = EventGeneratorSettings::instance();
+ egsettings->setDipoleModelParameterSet(settings->dipoleModelParameterSet());
+ egsettings->setDipoleModelType(settings->dipoleModelType());
+ egsettings->setA(settings->A());
+ egsettings->setVerboseLevel(settings->verboseLevel());
+ egsettings->setApplyPhotonFlux(false);
+
+
+ int nBinbeta = settings->betabins();
+ int nBinQ2 = settings->Q2bins();
+ int nBinW2 = settings->W2bins();
+ int nBinz = settings->zbins();
+ double betamin = settings->betamin();
+ double betamax = settings->betamax();
+ double Q2min = settings->Q2min();
+ double Q2max = settings->Q2max();
+ double Wmin = settings->Wmin();
+ double Wmax = settings->Wmax();
+ double W2min = Wmin*Wmin;
+ double W2max = Wmax*Wmax;
+ double zmin = settings->zmin();
+ double zmax = settings->zmax();
+ unsigned int massA = settings->A();
+ DipoleModelType model = settings->dipoleModelType();
+ DipoleModelParameterSet pset = settings->dipoleModelParameterSet();
+ int startingBin = settings->startBin();
+ int endingBin = settings->endBin();
+ int modes = settings->modesToCalculate();
+ unsigned char priority = settings->priority();
+ bool hotspots = settings->hasSubstructure();
+ double fractionOfBinsToFill=settings->fractionOfBinsToFill();
+ settings->list();
+
+ //
+ // Check bins
+ //
+ // Table's bin indices run from 0 ... nbins-1
+ //
+ int maxbins = nBinbeta*nBinQ2*nBinW2*nBinz;
+ if (endingBin > maxbins) {
+ cout << "Warning, given end bin (" << endingBin << ") exceeds the size of the table." << endl;
+ cout << " set to maximum value (" << maxbins << ") now." << endl;
+ endingBin = maxbins;
+ }
+ //
+ // Define all tables. Depending on tableset type some
+ // will not be written but we define them all anyway.
+ //
+ Table tableTQQ[4];
+ Table tableLQQ[4];
+ Table tableTQQG[4];
+
+ bool logbeta=false, logQ2=true, logW2=true, logz=false, logC=true;
+
+ //
+ // Set filenames for the tables.
+ // Be as desciptive as possible. Helps when mass producing tables.
+ //
+ // We create all tables and decide later what
+ // gets written and what not.
+ //
+ string rootfile=settings->rootfile();
+ rootfile += "_" + settings->dipoleModelName();
+ rootfile += "_" + settings->dipoleModelParameterSetName();
+
+ ostringstream filenameTQQ[4], filenameLQQ[4], filenameTQQG[4];
+ for(int i=0; i<4; i++){
+ filenameTQQ[i].str("");
+ filenameTQQ[i] << rootfile << "_q" << i << "_bin"
+ << startingBin << "-" << endingBin <<"_TQQ.root";
+
+ filenameLQQ[i].str("");
+ filenameLQQ[i] << rootfile << "_q" << i << "_bin"
+ << startingBin << "-" << endingBin << "_LQQ.root";
+
+ filenameTQQG[i].str("");
+ filenameTQQG[i] << rootfile << "_q" << i << "_bin"
+ << startingBin << "-" << endingBin << "_TQQG.root";
+
+ (void) tableTQQ[i].create(nBinbeta, betamin, betamax,
+ nBinQ2, Q2min, Q2max,
+ nBinW2, W2min, W2max,
+ nBinz, zmin, zmax,
+ logbeta, logQ2, logW2, logz, logC, // all bools
+ mean_A, transverse, QQ,
+ massA, model, pset,
+ filenameTQQ[i].str().c_str(),
+ priority, hotspots);
+ (void) tableLQQ[i].create(nBinbeta, betamin, betamax,
+ nBinQ2, Q2min, Q2max,
+ nBinW2, W2min, W2max,
+ nBinz, zmin, zmax,
+ logbeta, logQ2, logW2, logz, logC, // all bools
+ mean_A, longitudinal, QQ,
+ massA, model, pset,
+ filenameLQQ[i].str().c_str(),
+ priority, hotspots);
+ (void) tableTQQG[i].create(nBinbeta, betamin, betamax,
+ nBinQ2, Q2min, Q2max,
+ nBinW2, W2min, W2max,
+ nBinz, zmin, zmax,
+ logbeta, logQ2, logW2, logz, logC, // all bools
+ mean_A, transverse, QQG,
+ massA, model, pset,
+ filenameTQQG[i].str().c_str(),
+ priority, hotspots);
+
+ }
+ cout << "\nAll 3x4 tables created, here for up quarks:" << endl;
+ tableTQQ[0].list();
+ tableLQQ[0].list();
+ tableTQQG[0].list();
+
+ cout << "\nTables have " << maxbins << " bins each.\n" << endl;
+
+// if (settings->useBackupFile()) {
+// int ibin = settings->startingBinFromBackup();
+// tableTQQ.setAutobackup("tableTQQ", ibin);
+// tableLQQ.setAutobackup("tableLQQ", ibin);
+// tableTQQG.setAutobackup("tableTQQG", ibin);
+// cout << "Automatic backup of tables is enabled." << endl;
+// }
+// else
+// cout << "Automatic backup of tables is off.\n" << endl;
+
+ //
+ // Setup random generator for creating partial tables.
+ //
+ TRandom3 *random = TableGeneratorSettings::randomGenerator();
+ random->SetSeed();
+
+ //
+ // DGLAP Evolution can be speed up by using lookup tables
+ //
+ DglapEvolution &dglap = DglapEvolution::instance();
+ dglap.generateLookupTable(1000, 1000);
+ dglap.useLookupTable(true);
+
+ //
+ // Print out settings
+ //
+ cout << endl;
+ cout << "Tables will be generated for:" << endl;
+ cout << "\tNucleus mass A="<<massA<<endl;
+ cout << "\tBins: " << startingBin << "-" << endingBin << endl;
+ cout << "\tbeta range: [" << betamin << ", " << betamax << "], " << nBinbeta << " bins." << endl;
+ cout << "\tQ2 range: [" << Q2min << ", " << Q2max << "], " << nBinQ2 << " bins." << endl;
+ cout << "\tW2 range: [" << W2min << ", " << W2max << "], " << nBinW2 << " bins." << endl;
+ cout << "\t z range: [" << zmin << ", " << zmax << "], " << nBinz << " bins." << endl;
+ cout << "\tDipole model: " << settings->dipoleModelName() << endl;
+ cout << "\tDipole model parameter set: " << settings->dipoleModelParameterSetName() << endl;
+ cout << "\tTable set mode: " << settings->tableSetTypeName() << endl;
+ cout << endl;
+
+ //
+ // Create and initialize the Inclusive Diffaction Cross Sections
+ //
+
+ InclusiveDiffractiveCrossSections* idcs= new InclusiveDiffractiveCrossSections;
+
+ //
+ // Calculate contents and fill tables
+ //
+ // Note that we fill all tables. What is written
+ // at the end is another story.
+ //
+
+ int nShow = (endingBin - startingBin)/100;
+ if(nShow==0) nShow=1;
+
+ double binWidthBeta=(betamax-betamin)/nBinbeta;
+ double binWidthQ2=(Q2max-Q2min)/nBinQ2;
+ double binWidthW2=(W2max-W2min)/nBinW2;
+ double binWidthZ=(zmax-zmin)/nBinz;
+
+ // Crude way to find the start and finish bins:
+ // Loop over all the bins
+ int iBetaStart=0, iQ2Start=0, iW2Start=0, iZStart=0;
+ int iBetaEnd=0, iQ2End=0, iW2End=0, iZEnd=0;
+ bool endbin=false, startbin=false;
+ for(int ibeta=1; ibeta<=nBinbeta; ibeta++){
+ for(int iQ2=1; iQ2<=nBinQ2; iQ2++){
+ for(int iW2=1; iW2<=nBinW2; iW2++){
+ for(int iz=1; iz<=nBinz; iz++){
+ int currentBin=ibeta*iQ2*iW2*iz;
+ if(currentBin==startingBin){
+ iBetaStart=ibeta;
+ iQ2Start=iQ2;
+ iW2Start=iW2;
+ iZStart=ibeta;
+ startbin=true;
+ }
+ if(currentBin==endingBin){
+ iBetaEnd=ibeta;
+ iQ2End=iQ2;
+ iW2End=iW2;
+ iZEnd=ibeta;
+ endbin=true;
+ }
+ }
+ }
+ }
+ }
+ if(!endbin){
+ iBetaEnd=nBinbeta;
+ iQ2End=nBinQ2;
+ iW2End=nBinW2;
+ iZEnd=nBinz;
+ }
+ if(!startbin){
+ iBetaStart=1;
+ iQ2Start=1;
+ iW2Start=1;
+ iZStart=1;
+ }
+
+ cout << "Start filling tables:" << endl;
+ time_t tableFillStart = time(0);
+
+ //Loop over all the bins
+ int ibin=0;
+ for(int ibeta=iBetaStart; ibeta<=iBetaEnd; ibeta++){
+ double beta=betamin+(ibeta-0.5)*binWidthBeta;
+ for(int iQ2=iQ2Start; iQ2<=iQ2End; iQ2++){
+ double Q2=Q2min+(iQ2-0.5)*binWidthQ2;
+ for(int iW2=iW2Start; iW2<=iW2End; iW2++){
+ double W2=W2min+(iW2-0.5)*binWidthW2;
+ for(int iz=iZStart; iz<=iZEnd; iz++){
+ if (ibin%nShow == 0 || ibin == startingBin || ibin == endingBin)
+ cout << "processing bin " << ibin << endl;
+ double z=zmin+(iz-0.5)*binWidthZ;
+
+ if(fractionOfBinsToFill <= random->Uniform()) //Choose fractionOfBinsToFill of the bins;
+ continue;
+ idcs->dsigdbetadQ2dW2dz_total(beta, Q2, W2, z, transverse);
+ idcs->dsigdbetadQ2dW2dz_total(beta, Q2, W2, z, longitudinal);
+ idcs->dsigdbetadQ2dW2dz_qqg(beta, Q2, W2, z);
+ //Loop over quark species
+ for(int iq=0; iq<4; iq++){
+ tableTQQ[iq].fill(ibeta, iQ2, iW2, iz, idcs->mDsigdbetadQ2dWdz_T_total[iq]);
+ tableLQQ[iq].fill(ibeta, iQ2, iW2, iz, idcs->mDsigdbetadQ2dWdz_L_total[iq]);
+ tableTQQG[iq].fill(ibeta, iQ2, iW2, iz, idcs->mDsigdbetadQ2dWdz_T_qqg[iq]);
+ }
+ ibin++;
+ }
+ }
+ }
+ }
+
+ time_t tableFillEnd = time(0);
+
+ //
+ // Report CPU time/cell
+ //
+ cout << endl;
+ cout << "CPU time/bin: "
+ << static_cast<double>(tableFillEnd-tableFillStart)/(endingBin-startingBin+1)
+ << " s" << endl;
+ cout << "Total time: " << static_cast<double>(tableFillEnd-tableFillStart)/60./60. << " h" << endl << endl;
+
+ //
+ // We write out all tables.
+ //
+ // Whoever runs the production can then decide
+ // later what to keep and what to delete.
+ // If the desired run mode is total_and_coherent or
+ // coherent_and_incoherent, if this is just to improve
+ // a coherent table in some phase space, or if one wants
+ // to maintain redundancy, all these factor might affect
+ // your choice.
+ //
+ for(int i=0; i<4; i++){
+ tableTQQ[i].write();
+ tableLQQ[i].write();
+ tableTQQG[i].write();
+ }
+ cout << "All tables written" << endl;
+
+ cout << "All done. Bye." << endl;
+
+ return 0;
+
+}
Property changes on: trunk/examples/tableGeneratorInclusiveDiffractionMain.cpp
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jan 20, 9:00 PM (23 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4242363
Default Alt Text
(20 KB)
Attached To
rSARTRESVN sartresvn
Event Timeline
Log In to Comment